{"version":3,"file":"index.mjs","names":["arrayEquals","a","b","Array","isArray","length","every","val","index","getIndexLetter","String","fromCharCode","isArrayOfString","value","v","MessageOptions","isErrorLike","err","Error","name","undefined","message","parseError","color","CustomFetchOptions","Omit","RequestInit","body","BodyInit","key","urlParams","query","fetchAPI","urlObjOrString","URL","enhancedOptions","baseUrl","baseOptions","rest","options","url","origin","window","location","prefix","pathname","name","value","Object","entries","replace","toString","searchParams","set","JSON","stringify","FormData","headers","baseHeaders","baseRest","response","fetch","status","contentType","get","includes","dataJson","json","ok","errorMessage","message","error","FetchError","dataText","text","statusText","Error","constructor","data","React","PossibleRef","Ref","T","setRef","ref","value","undefined","current","composeRefs","refs","RefCallback","node","hasCleanup","cleanups","map","cleanup","i","length","useComposedRefs","useCallback","prefix","invariant","condition","message","value","Error","slugify","str","allowSlash","trimTrailing","normalized","normalize","replace","toLowerCase","allowedChars","collapsed","BrandPalette","Color","ColorName","defaultBrandPalette","primary","secondary","tertiary","gray","defaultFallbackColor","getColorValue","color","palette","fallbackColor","type","hex","base","name","applyColorVariant","variant","isGrayScale","normalized","replace","isShort","length","step","r","parseInt","slice","repeat","g","b","isColorAvailable","colorName","mix","resolveVariantMix","baseWeight","target","Math","abs","hexLuminance","full","split","map","c","join","TARGET_LUMINANCE","Record","white","black","isColorDark","luminance"],"sources":["../../src/lib/arrUtil.ts","../../src/lib/error.ts","../../src/lib/fetch.ts","../../src/lib/compose-refs.ts","../../src/lib/invariant.ts","../../src/lib/strUtil.ts","../../src/lib/palette.ts"],"sourcesContent":["export function arrayEquals(a: any, b: any) {\n  return (\n    Array.isArray(a) &&\n    Array.isArray(b) &&\n    a.length === b.length &&\n    a.every((val, index) => val === b[index])\n  );\n}\n\nexport function getIndexLetter(index: number) {\n  return String.fromCharCode(65 + (index % 26));\n}\n\nexport function isArrayOfString(value: unknown): value is string[] {\n  return Array.isArray(value) && value.every((v) => typeof v === \"string\");\n}\n","import { MessageOptions } from \"../types\";\n\nexport function isErrorLike(err: any): err is Error {\n  if (err instanceof Error) {\n    return true;\n  } else if (err.name !== undefined && err.message !== undefined) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function parseError(err: any): [string, MessageOptions] | null {\n  if (isErrorLike(err)) {\n    return [err.message || \"An error occured\", { color: \"red\" }];\n  }\n  return null;\n}\n","export type CustomFetchOptions = Omit<RequestInit, \"body\"> & {\n  body?: BodyInit | { [key: string]: unknown };\n  urlParams?: {\n    [key: string]: string | number;\n  };\n  query?: {\n    [key: string]: unknown;\n  };\n};\n\nexport async function fetchAPI(\n  urlObjOrString: string | URL,\n  enhancedOptions: CustomFetchOptions = {},\n  baseUrl?: string,\n  baseOptions?: RequestInit,\n) {\n  const { urlParams, query, body, ...rest } = enhancedOptions;\n\n  let options: RequestInit = rest;\n\n  let url: URL;\n\n  if (urlObjOrString instanceof URL) {\n    url = urlObjOrString;\n  } else {\n    const origin = baseUrl ? new URL(baseUrl).origin : window.location.origin;\n    let prefix = baseUrl ? new URL(baseUrl).pathname : \"\";\n    if (prefix === \"/\") {\n      prefix = \"\";\n    }\n    url = new URL(`${prefix}${urlObjOrString}`, origin);\n  }\n\n  if (urlParams) {\n    for (const [name, value] of Object.entries(urlParams)) {\n      // %7B -> `{`\n      // %7D -> `}`\n      url.pathname = url.pathname.replace(`%7B${name}%7D`, value.toString());\n    }\n  }\n\n  if (query) {\n    for (const [name, value] of Object.entries(query)) {\n      url.searchParams.set(\n        name,\n        typeof value === \"object\" ? JSON.stringify(value) : (value as any).toString(),\n      );\n    }\n  }\n\n  if (body) {\n    if (typeof body !== \"string\" && !(body instanceof FormData)) {\n      options.headers = {\n        ...(options.headers = {}),\n        \"Content-Type\": \"application/json\",\n      };\n      options.body = JSON.stringify(body);\n    } else {\n      options.body = body;\n    }\n  }\n\n  if (baseOptions) {\n    const { headers: baseHeaders = {}, ...baseRest } = baseOptions;\n    options = {\n      ...baseRest,\n      ...options,\n      headers: {\n        ...baseHeaders,\n        ...options.headers,\n      },\n    };\n  }\n\n  const response = await fetch(url.toString(), options);\n\n  if (response.status === 204) {\n    return null;\n  }\n\n  const contentType = response.headers.get(\"content-type\");\n\n  if (contentType?.includes(\"application/json\") || contentType?.includes(\"application/geo+json\")) {\n    const dataJson = await response.json();\n\n    if (response.ok) {\n      return dataJson;\n    }\n\n    let errorMessage = \"request Error\";\n\n    if (dataJson.message) {\n      errorMessage = dataJson.message;\n    }\n    if (dataJson.error?.message) {\n      errorMessage = dataJson.error?.message;\n    }\n    throw new FetchError(errorMessage, response.status, dataJson);\n  }\n\n  const dataText = await response.text();\n\n  if (response.ok) {\n    return dataText;\n  }\n\n  throw new FetchError(`${response.status} ${response.statusText}`, response.status, dataText);\n}\n\nexport class FetchError extends Error {\n  constructor(\n    message: string,\n    public status: number,\n    public data?: unknown,\n  ) {\n    super(message);\n    this.name = \"FetchError\";\n  }\n}\n","/**\n * https://github.com/radix-ui/primitives/blob/main/packages/react/compose-refs/src/compose-refs.tsx\n */\n\nimport * as React from \"react\";\n\ntype PossibleRef<T> = React.Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value\n * This utility takes care of different types of refs: callback refs and RefObject(s)\n */\nfunction setRef<T>(ref: PossibleRef<T>, value: T) {\n  if (typeof ref === \"function\") {\n    return ref(value);\n  } else if (ref !== null && ref !== undefined) {\n    ref.current = value;\n  }\n}\n\n/**\n * A utility to compose multiple refs together\n * Accepts callback refs and RefObject(s)\n */\nfunction composeRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  return (node) => {\n    let hasCleanup = false;\n    const cleanups = refs.map((ref) => {\n      const cleanup = setRef(ref, node);\n      if (!hasCleanup && typeof cleanup == \"function\") {\n        hasCleanup = true;\n      }\n      return cleanup;\n    });\n\n    // React <19 will log an error to the console if a callback ref returns a\n    // value. We don't use ref cleanups internally so this will only happen if a\n    // user's ref callback returns a value, which we only expect if they are\n    // using the cleanup functionality added in React 19.\n    if (hasCleanup) {\n      return () => {\n        for (let i = 0; i < cleanups.length; i++) {\n          const cleanup = cleanups[i];\n          if (typeof cleanup == \"function\") {\n            cleanup();\n          } else {\n            setRef(refs[i], null);\n          }\n        }\n      };\n    }\n  };\n}\n\n/**\n * A custom hook that composes multiple refs\n * Accepts callback refs and RefObject(s)\n */\nfunction useComposedRefs<T>(...refs: PossibleRef<T>[]): React.RefCallback<T> {\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  return React.useCallback(composeRefs(...refs), refs);\n}\n\nexport { composeRefs, useComposedRefs };\n","const prefix: string = \"Invariant failed\";\n\nexport function invariant(condition: any, message?: string): asserts condition {\n  if (condition) {\n    return;\n  }\n\n  const value: string = message ? `${prefix}: ${message}` : prefix;\n  throw new Error(value);\n}\n","export function slugify(str: string, allowSlash: boolean = true, trimTrailing: boolean = true) {\n  const normalized = str\n    .normalize(\"NFD\")\n    .replace(/[̀-ͯ]/g, \"\")\n    .toLowerCase();\n\n  const allowedChars = allowSlash ? /[^a-z0-9/]+/g : /[^a-z0-9]+/g;\n\n  const collapsed = normalized.replace(allowedChars, \"-\").replace(/-{2,}/g, \"-\").replace(/^-+/, \"\");\n\n  return trimTrailing ? collapsed.replace(/-+$/, \"\") : collapsed;\n}\n","import type { BrandPalette, Color, ColorName } from \"../components/color/config\";\n\nexport const defaultBrandPalette: BrandPalette = {\n  primary: \"#ffca0a\",\n  secondary: null,\n  tertiary: null,\n  gray: \"#808080\",\n};\n\nexport const defaultFallbackColor = \"#000000\";\n\nexport function getColorValue(\n  color: Color | null,\n  palette = defaultBrandPalette,\n  fallbackColor = defaultFallbackColor,\n): string {\n  if (!color) {\n    return fallbackColor;\n  }\n\n  if (color.type === \"raw\") {\n    return color.hex;\n  }\n\n  const base = color.name === \"gray\" ? \"#808080\" : (palette[color.name] ?? \"#808080\");\n\n  return applyColorVariant(base ?? \"#808080\", color.variant);\n}\n\n/**\n * Détermine si une couleur hexadécimale (#rgb, #rgba, #rrggbb, #rrggbbaa)\n * est un niveau de gris, c'est-à-dire que ses composantes R, G et B sont égales.\n */\nexport function isGrayScale(hex: string): boolean {\n  const normalized = hex.replace(\"#\", \"\");\n  const isShort = normalized.length === 3 || normalized.length === 4;\n  const step = isShort ? 1 : 2;\n\n  const r = parseInt(normalized.slice(0, step).repeat(isShort ? 2 : 1), 16);\n  const g = parseInt(normalized.slice(step, step * 2).repeat(isShort ? 2 : 1), 16);\n  const b = parseInt(normalized.slice(step * 2, step * 3).repeat(isShort ? 2 : 1), 16);\n\n  return r === g && g === b;\n}\n\nexport function isColorAvailable(colorName: ColorName, palette = defaultBrandPalette): boolean {\n  if (colorName === \"gray\") {\n    return true;\n  }\n  return !!palette[colorName];\n}\n\n/**\n * Dérive une variante claire/sombre d'une couleur de palette : mix vers `white`\n * pour variant > 0, vers un gris neutre foncé (`#323232`, pas `black` —\n * mélanger vers du noir pur désature/salit la teinte) pour variant < 0.\n * `black`/`white` dérogent : ce sont déjà les bornes de la rampe, seul un mix\n * vers `black` a du sens pour elles (plage -100..0 imposée côté ColorPicker).\n * `#323232` est fixé en dur (pas `var(--color-gray-7)`) pour que le résultat\n * ne s'inverse pas silencieusement sous `.dark`, où ce token désigne un gris clair.\n */\nexport function applyColorVariant(base: string, variant: number): string {\n  const mix = resolveVariantMix(base, variant);\n  if (!mix) {\n    return base;\n  }\n\n  return `color-mix(in oklab, ${base} ${mix.baseWeight}%, ${mix.target})`;\n}\n\nfunction resolveVariantMix(\n  base: string,\n  variant: number,\n): { target: \"white\" | \"black\" | \"#323232\"; baseWeight: number } | null {\n  if (variant === 0) {\n    return null;\n  } else if (variant > 0) {\n    return { target: \"white\", baseWeight: 100 - variant };\n  }\n  return { target: isGrayScale(base) ? \"black\" : \"#323232\", baseWeight: 100 - Math.abs(variant) };\n}\n\nfunction hexLuminance(hex: string): number {\n  const normalized = hex.replace(\"#\", \"\");\n  const full =\n    normalized.length === 3\n      ? normalized\n          .split(\"\")\n          .map((c) => c + c)\n          .join(\"\")\n      : normalized;\n\n  if (full.length !== 6) {\n    return 1;\n  }\n\n  const r = parseInt(full.slice(0, 2), 16);\n  const g = parseInt(full.slice(2, 4), 16);\n  const b = parseInt(full.slice(4, 6), 16);\n\n  return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\nconst TARGET_LUMINANCE: Record<\"white\" | \"black\" | \"#323232\", number> = {\n  white: 1,\n  black: 0,\n  \"#323232\": hexLuminance(\"#323232\"),\n};\n\nexport function isColorDark(color: Color, palette = defaultBrandPalette): boolean {\n  if (color.type === \"raw\") {\n    return hexLuminance(color.hex) < 0.5;\n  }\n\n  const base = color.name === \"gray\" ? \"#808080\" : (palette[color.name] ?? \"#808080\");\n  const mix = resolveVariantMix(base, color.variant);\n\n  if (!mix) {\n    return hexLuminance(base) < 0.5;\n  }\n\n  // la luminance étant linéaire en r/g/b, la luminance du mélange = mélange des luminances\n  const luminance =\n    (hexLuminance(base) * mix.baseWeight + TARGET_LUMINANCE[mix.target] * (100 - mix.baseWeight)) /\n    100;\n\n  return luminance < 0.5;\n}\n"],"mappings":"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"}