@babelize/elements 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +103 -96
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +103 -96
- package/dist/index.js.map +1 -1
- package/package.json +1 -2
package/dist/index.cjs
CHANGED
|
@@ -329,105 +329,112 @@ var LanguageSwitcher = React2.forwardRef(
|
|
|
329
329
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
330
330
|
}
|
|
331
331
|
}, [open]);
|
|
332
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
"
|
|
350
|
-
{
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
)
|
|
355
|
-
|
|
356
|
-
viewBox: "0 0 24 24",
|
|
357
|
-
stroke: "currentColor",
|
|
358
|
-
strokeWidth: 2,
|
|
359
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" })
|
|
360
|
-
}
|
|
361
|
-
)
|
|
362
|
-
]
|
|
363
|
-
}
|
|
364
|
-
),
|
|
365
|
-
open && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
366
|
-
"div",
|
|
367
|
-
{
|
|
368
|
-
className: "absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950",
|
|
369
|
-
role: "listbox",
|
|
370
|
-
"aria-label": "Select language",
|
|
371
|
-
children: [
|
|
372
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "border-b border-zinc-200 p-2 dark:border-zinc-800", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
373
|
-
"input",
|
|
374
|
-
{
|
|
375
|
-
ref: inputRef,
|
|
376
|
-
type: "text",
|
|
377
|
-
placeholder: "Search...",
|
|
378
|
-
"aria-label": "Search languages",
|
|
379
|
-
value: search,
|
|
380
|
-
onChange: (e) => setSearch(e.target.value),
|
|
381
|
-
className: "w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500"
|
|
382
|
-
}
|
|
383
|
-
) }),
|
|
384
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-h-60 overflow-y-auto p-1", children: [
|
|
385
|
-
filtered.map((l) => {
|
|
386
|
-
var _a2;
|
|
387
|
-
const isActive = l.code === locale;
|
|
388
|
-
const itemDir = l.rtl || isRtl(l.code) ? "rtl" : "ltr";
|
|
389
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
390
|
-
"button",
|
|
332
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
333
|
+
"div",
|
|
334
|
+
{
|
|
335
|
+
ref,
|
|
336
|
+
dir,
|
|
337
|
+
className: cn("relative inline-block text-sm z-50", className),
|
|
338
|
+
...rest,
|
|
339
|
+
children: [
|
|
340
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
341
|
+
"button",
|
|
342
|
+
{
|
|
343
|
+
type: "button",
|
|
344
|
+
onClick: () => setOpen(!open),
|
|
345
|
+
className: cn(
|
|
346
|
+
"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50"
|
|
347
|
+
),
|
|
348
|
+
"aria-expanded": open,
|
|
349
|
+
"aria-haspopup": "listbox",
|
|
350
|
+
"aria-label": `Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`,
|
|
351
|
+
children: [
|
|
352
|
+
showFlags && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-base", children: (_c = activeLocale == null ? void 0 : activeLocale.flag) != null ? _c : getFlag(locale) }),
|
|
353
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: activeLocale ? resolveLabel(activeLocale) : locale }),
|
|
354
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
355
|
+
"svg",
|
|
391
356
|
{
|
|
392
|
-
type: "button",
|
|
393
|
-
role: "option",
|
|
394
|
-
"aria-selected": isActive,
|
|
395
|
-
dir: itemDir,
|
|
396
|
-
onClick: () => {
|
|
397
|
-
setLocale(l.code);
|
|
398
|
-
setOpen(false);
|
|
399
|
-
setSearch("");
|
|
400
|
-
},
|
|
401
357
|
className: cn(
|
|
402
|
-
"
|
|
403
|
-
|
|
404
|
-
isActive ? "bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400" : "text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"
|
|
358
|
+
"size-4 text-zinc-500 transition-transform dark:text-zinc-400",
|
|
359
|
+
open && "rotate-180"
|
|
405
360
|
),
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
)
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
361
|
+
fill: "none",
|
|
362
|
+
viewBox: "0 0 24 24",
|
|
363
|
+
stroke: "currentColor",
|
|
364
|
+
strokeWidth: 2,
|
|
365
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" })
|
|
366
|
+
}
|
|
367
|
+
)
|
|
368
|
+
]
|
|
369
|
+
}
|
|
370
|
+
),
|
|
371
|
+
open && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
372
|
+
"div",
|
|
373
|
+
{
|
|
374
|
+
className: "absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950",
|
|
375
|
+
role: "listbox",
|
|
376
|
+
"aria-label": "Select language",
|
|
377
|
+
children: [
|
|
378
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "border-b border-zinc-200 p-2 dark:border-zinc-800", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
379
|
+
"input",
|
|
380
|
+
{
|
|
381
|
+
ref: inputRef,
|
|
382
|
+
type: "text",
|
|
383
|
+
placeholder: "Search...",
|
|
384
|
+
"aria-label": "Search languages",
|
|
385
|
+
value: search,
|
|
386
|
+
onChange: (e) => setSearch(e.target.value),
|
|
387
|
+
className: "w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500"
|
|
388
|
+
}
|
|
389
|
+
) }),
|
|
390
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-h-60 overflow-y-auto p-1", children: [
|
|
391
|
+
filtered.map((l) => {
|
|
392
|
+
var _a2;
|
|
393
|
+
const isActive = l.code === locale;
|
|
394
|
+
const itemDir = l.rtl || isRtl(l.code) ? "rtl" : "ltr";
|
|
395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
396
|
+
"button",
|
|
397
|
+
{
|
|
398
|
+
type: "button",
|
|
399
|
+
role: "option",
|
|
400
|
+
"aria-selected": isActive,
|
|
401
|
+
dir: itemDir,
|
|
402
|
+
onClick: () => {
|
|
403
|
+
setLocale(l.code);
|
|
404
|
+
setOpen(false);
|
|
405
|
+
setSearch("");
|
|
406
|
+
},
|
|
407
|
+
className: cn(
|
|
408
|
+
"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors",
|
|
409
|
+
isActive ? "bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400" : "text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"
|
|
410
|
+
),
|
|
411
|
+
children: [
|
|
412
|
+
showFlags && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-base", children: (_a2 = l.flag) != null ? _a2 : getFlag(l.code) }),
|
|
413
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex-1", children: resolveLabel(l) }),
|
|
414
|
+
isActive && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
415
|
+
"svg",
|
|
416
|
+
{
|
|
417
|
+
className: "size-4 text-emerald-600 dark:text-emerald-400",
|
|
418
|
+
fill: "none",
|
|
419
|
+
viewBox: "0 0 24 24",
|
|
420
|
+
stroke: "currentColor",
|
|
421
|
+
strokeWidth: 2,
|
|
422
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" })
|
|
423
|
+
}
|
|
424
|
+
)
|
|
425
|
+
]
|
|
426
|
+
},
|
|
427
|
+
l.code
|
|
428
|
+
);
|
|
429
|
+
}),
|
|
430
|
+
filtered.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400", children: "No results" })
|
|
431
|
+
] })
|
|
432
|
+
]
|
|
433
|
+
}
|
|
434
|
+
)
|
|
435
|
+
]
|
|
436
|
+
}
|
|
437
|
+
);
|
|
431
438
|
}
|
|
432
439
|
);
|
|
433
440
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registry/components/index.ts","../src/lib/utils.ts","../src/registry/components/language-switcher.tsx","../src/lib/use-controllable-state.ts","../src/registry/components/phone-input.tsx","../src/registry/components/navbar.tsx"],"sourcesContent":["export { cn } from \"@/lib/utils\";\n\nexport type { Locale } from \"./types\";\n\nexport { LanguageSwitcher } from \"./language-switcher\";\nexport type { LanguageSwitcherProps } from \"./language-switcher\";\n\nexport { PhoneInput, COUNTRIES } from \"./phone-input\";\nexport type { PhoneInputProps, Country } from \"./phone-input\";\n\nexport { NavBar } from \"./navbar\";\nexport type { NavBarProps, NavLink } from \"./navbar\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface LanguageSwitcherProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Array of available locales — only `code` is required */\n locales: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: first locale's code) */\n defaultValue?: string;\n /** Callback when locale changes */\n onValueChange?: (code: string) => void;\n /** Show flag emojis next to locale names (default: false) */\n showFlags?: boolean;\n /** Display labels in native language or English (default: \"english\") */\n label?: \"native\" | \"english\";\n}\n\nconst RTL_LOCALES = new Set([\"ar\", \"he\", \"fa\", \"ur\", \"ps\", \"sd\", \"yi\"]);\n\nfunction isRtl(code: string): boolean {\n const lang = code.split(\"-\")[0].toLowerCase();\n return RTL_LOCALES.has(lang);\n}\n\n/**\n * Maps ISO 639-1 language codes to flag emojis via regional indicator symbols.\n * Covers 80+ common languages. Override per-locale with the `flag` prop.\n */\nconst LANG_TO_FLAG: Record<string, string> = {\n en: \"\\u{1F1FA}\\u{1F1F8}\",\n fr: \"\\u{1F1EB}\\u{1F1F7}\",\n es: \"\\u{1F1EA}\\u{1F1F8}\",\n de: \"\\u{1F1E9}\\u{1F1EA}\",\n ja: \"\\u{1F1EF}\\u{1F1F5}\",\n ko: \"\\u{1F1F0}\\u{1F1F7}\",\n zh: \"\\u{1F1E8}\\u{1F1F3}\",\n ar: \"\\u{1F1F8}\\u{1F1E6}\",\n pt: \"\\u{1F1E7}\\u{1F1F7}\",\n it: \"\\u{1F1EE}\\u{1F1F9}\",\n nl: \"\\u{1F1F3}\\u{1F1F1}\",\n ru: \"\\u{1F1F7}\\u{1F1FA}\",\n pl: \"\\u{1F1F5}\\u{1F1F1}\",\n tr: \"\\u{1F1F9}\\u{1F1F7}\",\n vi: \"\\u{1F1FB}\\u{1F1F3}\",\n th: \"\\u{1F1F9}\\u{1F1ED}\",\n id: \"\\u{1F1EE}\\u{1F1E9}\",\n hi: \"\\u{1F1EE}\\u{1F1F3}\",\n bn: \"\\u{1F1E7}\\u{1F1E9}\",\n uk: \"\\u{1F1FA}\\u{1F1E6}\",\n cs: \"\\u{1F1E8}\\u{1F1FF}\",\n sv: \"\\u{1F1F8}\\u{1F1EA}\",\n da: \"\\u{1F1E9}\\u{1F1F0}\",\n fi: \"\\u{1F1EB}\\u{1F1EE}\",\n no: \"\\u{1F1F3}\\u{1F1F4}\",\n nb: \"\\u{1F1F3}\\u{1F1F4}\",\n nn: \"\\u{1F1F3}\\u{1F1F4}\",\n el: \"\\u{1F1EC}\\u{1F1F7}\",\n he: \"\\u{1F1EE}\\u{1F1F1}\",\n fa: \"\\u{1F1EE}\\u{1F1F7}\",\n ro: \"\\u{1F1F7}\\u{1F1F4}\",\n hu: \"\\u{1F1ED}\\u{1F1FA}\",\n sk: \"\\u{1F1F8}\\u{1F1F0}\",\n bg: \"\\u{1F1E7}\\u{1F1EC}\",\n hr: \"\\u{1F1ED}\\u{1F1F7}\",\n sr: \"\\u{1F1F7}\\u{1F1F8}\",\n sl: \"\\u{1F1F8}\\u{1F1EE}\",\n lt: \"\\u{1F1F1}\\u{1F1F9}\",\n lv: \"\\u{1F1F1}\\u{1F1FB}\",\n et: \"\\u{1F1EA}\\u{1F1EA}\",\n ga: \"\\u{1F1EE}\\u{1F1EA}\",\n mt: \"\\u{1F1F2}\\u{1F1F9}\",\n ca: \"\\u{1F1E6}\\u{1F1F8}\",\n eu: \"\\u{1F1E6}\\u{1F1F7}\",\n gl: \"\\u{1F1E6}\\u{1F1F7}\",\n cy: \"\\u{1F1FF}\\u{1F1F4}\",\n mk: \"\\u{1F1F2}\\u{1F1F0}\",\n sq: \"\\u{1F1E6}\\u{1F1F1}\",\n bs: \"\\u{1F1E7}\\u{1F1F8}\",\n is: \"\\u{1F1EE}\\u{1F1F8}\",\n fo: \"\\u{1F1EB}\\u{1F1F4}\",\n sw: \"\\u{1F1F9}\\u{1F1FF}\",\n am: \"\\u{1F1E6}\\u{1F1F2}\",\n ne: \"\\u{1F1F3}\\u{1F1F5}\",\n si: \"\\u{1F1F8}\\u{1F1F0}\",\n my: \"\\u{1F1F2}\\u{1F1E2}\",\n km: \"\\u{1F1F0}\\u{1F1ED}\",\n lo: \"\\u{1F1F1}\\u{1F1E6}\",\n ka: \"\\u{1F1EC}\\u{1F1EA}\",\n hy: \"\\u{1F1E6}\\u{1F1F2}\",\n kk: \"\\u{1F1F0}\\u{1F1F0}\",\n uz: \"\\u{1F1FA}\\u{1F1FF}\",\n mn: \"\\u{1F1F2}\\u{1F1F3}\",\n ps: \"\\u{1F1F5}\\u{1F1F8}\",\n ur: \"\\u{1F1FA}\\u{1F1F2}\",\n sd: \"\\u{1F1F8}\\u{1F1E6}\",\n ml: \"\\u{1F1F2}\\u{1F1F1}\",\n ta: \"\\u{1F1F9}\\u{1F1F1}\",\n te: \"\\u{1F1F9}\\u{1F1EF}\",\n kn: \"\\u{1F1EE}\\u{1F1F3}\",\n mr: \"\\u{1F1F2}\\u{1F1F7}\",\n gu: \"\\u{1F1EE}\\u{1F1F3}\",\n pa: \"\\u{1F1F5}\\u{1F1E6}\",\n or: \"\\u{1F1F3}\\u{1F1F4}\",\n as: \"\\u{1F1E6}\\u{1F1F8}\",\n yi: \"\\u{1F1FE}\\u{1F1EA}\",\n yo: \"\\u{1F1FE}\\u{1F1F3}\",\n ig: \"\\u{1F1EE}\\u{1F1EC}\",\n zu: \"\\u{1F1FF}\\u{1F1F3}\",\n af: \"\\u{1F1E6}\\u{1F1FF}\",\n ha: \"\\u{1F1ED}\\u{1F1F2}\",\n tl: \"\\u{1F1F5}\\u{1F1ED}\",\n mg: \"\\u{1F1F2}\\u{1F1EC}\",\n mi: \"\\u{1F1F3}\\u{1F1FF}\",\n sm: \"\\u{1F1F8}\\u{1F1F4}\",\n fj: \"\\u{1F1EB}\\u{1F1EF}\",\n to: \"\\u{1F1F9}\\u{1F1F4}\",\n haw: \"\\u{1F1ED}\\u{1F1FC}\",\n la: \"\\u{1F1F1}\\u{1F1E6}\",\n eo: \"\\u{1F1EA}\\u{1F1F7}\",\n};\n\nfunction getFlag(code: string): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n return LANG_TO_FLAG[lang] ?? \"\\u{1F310}\";\n}\n\n/**\n * Built-in language names: native form and English form.\n */\nconst LANG_NAMES: Record<string, [native: string, english: string]> = {\n en: [\"English\", \"English\"],\n fr: [\"Fran\\u00e7ais\", \"French\"],\n es: [\"Espa\\u00f1ol\", \"Spanish\"],\n de: [\"Deutsch\", \"German\"],\n ja: [\"\\u65e5\\u672c\\u8a9e\", \"Japanese\"],\n ko: [\"\\ud55c\\uad6d\\uc5b4\", \"Korean\"],\n zh: [\"\\u4e2d\\u6587\", \"Chinese\"],\n ar: [\"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", \"Arabic\"],\n pt: [\"Portugu\\u00eas\", \"Portuguese\"],\n it: [\"Italiano\", \"Italian\"],\n nl: [\"Nederlands\", \"Dutch\"],\n ru: [\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"Russian\"],\n pl: [\"Polski\", \"Polish\"],\n tr: [\"T\\u00fcrk\\u00e7e\", \"Turkish\"],\n vi: [\"Ti\\u1ebfng Vi\\u1ec7t\", \"Vietnamese\"],\n th: [\"\\u0e44\\u0e17\\u0e22\", \"Thai\"],\n id: [\"Bahasa Indonesia\", \"Indonesian\"],\n hi: [\"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", \"Hindi\"],\n bn: [\"\\u09ac\\u09be\\u0982\\u09b2\\u09be\", \"Bengali\"],\n uk: [\"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"Ukrainian\"],\n cs: [\"\\u010ce\\u0161tina\", \"Czech\"],\n sv: [\"Svenska\", \"Swedish\"],\n da: [\"Dansk\", \"Danish\"],\n fi: [\"Suomi\", \"Finnish\"],\n no: [\"Norsk\", \"Norwegian\"],\n nb: [\"Norsk bokm\\u00e5l\", \"Norwegian Bokm\\u00e5l\"],\n nn: [\"Nynorsk\", \"Norwegian Nynorsk\"],\n el: [\"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", \"Greek\"],\n he: [\"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", \"Hebrew\"],\n fa: [\"\\u0641\\u0627\\u0631\\u0633\\u06cc\", \"Persian\"],\n ro: [\"Rom\\u00e2n\\u0103\", \"Romanian\"],\n hu: [\"Magyar\", \"Hungarian\"],\n sk: [\"Sloven\\u010dina\", \"Slovak\"],\n bg: [\"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\", \"Bulgarian\"],\n hr: [\"Hrvatski\", \"Croatian\"],\n sr: [\"\\u0421\\u0440\\u043f\\u0441\\u043a\\u0438\", \"Serbian\"],\n sl: [\"Sloven\\u0161\\u010dina\", \"Slovenian\"],\n lt: [\"Lietuvi\\u0173\", \"Lithuanian\"],\n lv: [\"Latvie\\u0161u\", \"Latvian\"],\n et: [\"Eesti\", \"Estonian\"],\n ga: [\"Gaeilge\", \"Irish\"],\n mt: [\"Malti\", \"Maltese\"],\n ca: [\"Catal\\u00e0\", \"Catalan\"],\n eu: [\"Euskara\", \"Basque\"],\n gl: [\"Galego\", \"Galician\"],\n cy: [\"Cymraeg\", \"Welsh\"],\n mk: [\"\\u041c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438\", \"Macedonian\"],\n sq: [\"Shqip\", \"Albanian\"],\n bs: [\"Bosanski\", \"Bosnian\"],\n is: [\"\\u00cdslenska\", \"Icelandic\"],\n fo: [\"F\\u00f8royskt\", \"Faroese\"],\n sw: [\"Kiswahili\", \"Swahili\"],\n am: [\"\\u12a0\\u12cd\\u1295\\u1348\", \"Amharic\"],\n ne: [\"\\u0928\\u0947\\u092a\\u093e\\u0932\\u0940\", \"Nepali\"],\n si: [\"\\u0dc3\\u0dd2\\u0d82\\u0dc4\\u0dbd\", \"Sinhala\"],\n my: [\"\\u1019\\u103c\\u1014\\u103a\\u1019\\u102c\", \"Burmese\"],\n km: [\"\\u1780\\u1798\\u17d2\\u1796\\u17c7\\u1798\", \"Khmer\"],\n lo: [\"\\u0ea5\\u0e27\", \"Lao\"],\n ka: [\"\\u10e5\\u10d0\\u10e0\\u10d7\\u10e3\\u10da\\u10d8\", \"Georgian\"],\n hy: [\"\\u0540\\u0561\\u0575\\u0565\\u10e0\\u0565\\u0576\", \"Armenian\"],\n kk: [\"\\u049a\\u0430\\u0437\\u0430\\u049b\", \"Kazakh\"],\n uz: [\"O\\u2019zbek\", \"Uzbek\"],\n mn: [\"\\u041c\\u043e\\u043d\\u0433\\u043e\\u043b\", \"Mongolian\"],\n ps: [\"\\u067e\\u069a\\u062a\\u0648\", \"Pashto\"],\n ur: [\"\\u0627\\u0631\\u062f\\u0648\", \"Urdu\"],\n sd: [\"\\u0773\\u0647\\u0646\\u068c\\u064a\", \"Sindhi\"],\n ml: [\"\\u0d2e\\u0d32\\u0d2f\\u0d3e\\u0d33\\u0d02\", \"Malayalam\"],\n ta: [\"\\u0ba4\\u0bae\\u0bbf\\u0bb4\\u0bcd\", \"Tamil\"],\n te: [\"\\u0c24\\u0c46\\u0c32\\u0c41\\u0c17\\u0c41\", \"Telugu\"],\n kn: [\"\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1\", \"Kannada\"],\n mr: [\"\\u092e\\u0930\\u093e\\u0920\\u0940\", \"Marathi\"],\n gu: [\"\\u0a97\\u0ac1\\u0a9c\\u0ab0\\u0abe\\u0aa4\\u0ac0\", \"Gujarati\"],\n pa: [\"\\u0a2a\\u0a70\\u0a1c\\u0a3e\\u0a2c\\u0a40\", \"Punjabi\"],\n or: [\"\\u0b13\\u0b21\\u0b3c\\u0b3f\\u0b06\", \"Odia\"],\n as: [\"\\u0985\\u09b8\\u09ae\\u09c0\\u09af\\u09bc\\u09be\", \"Assamese\"],\n yi: [\"\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9\", \"Yiddish\"],\n yo: [\"Yor\\u00f9b\\u00e1\", \"Yoruba\"],\n ig: [\"Igbo\", \"Igbo\"],\n zu: [\"isiZulu\", \"Zulu\"],\n af: [\"Afrikaans\", \"Afrikaans\"],\n ha: [\"Hausa\", \"Hausa\"],\n tl: [\"Filipino\", \"Filipino\"],\n mg: [\"Malagasy\", \"Malagasy\"],\n mi: [\"Te Reo M\\u0101ori\", \"M\\u0101ori\"],\n sm: [\"Gagana Samoa\", \"Samoan\"],\n to: [\"Lea Faka-Tonga\", \"Tongan\"],\n fj: [\"Na Vosa Vakaviti\", \"Fijian\"],\n haw: [\"\\u02bb\\u014clelo Hawai\\u02bbi\", \"Hawaiian\"],\n la: [\"Latina\", \"Latin\"],\n eo: [\"Esperanto\", \"Esperanto\"],\n};\n\nfunction getLabel(code: string, mode: \"native\" | \"english\"): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n const names = LANG_NAMES[lang];\n if (!names) return code;\n return mode === \"native\" ? names[0] : names[1];\n}\n\nexport const LanguageSwitcher = React.forwardRef<HTMLDivElement, LanguageSwitcherProps>(\n function LanguageSwitcher(\n {\n locales,\n value,\n defaultValue,\n onValueChange,\n showFlags = false,\n label: labelMode = \"english\",\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"\",\n onValueChange,\n );\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => ref.current as HTMLDivElement);\n\n const resolveLabel = (l: Locale) => l.label ?? getLabel(l.code, labelMode);\n const activeLocale = locales.find((l) => l.code === locale);\n\n const filtered = locales.filter(\n (l) =>\n resolveLabel(l).toLowerCase().includes(search.toLowerCase()) ||\n l.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n const dir = isRtl(locale) ? \"rtl\" : \"ltr\";\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm z-50\", className)} {...rest}>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={cn(\n \"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50\",\n dir === \"rtl\" && \"flex-row-reverse\",\n )}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`}\n >\n {showFlags && <span className=\"text-base\">{activeLocale?.flag ?? getFlag(locale)}</span>}\n <span>{activeLocale ? resolveLabel(activeLocale) : locale}</span>\n <svg\n className={cn(\n \"size-4 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search...\"\n aria-label=\"Search languages\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((l) => {\n const isActive = l.code === locale;\n const itemDir = l.rtl || isRtl(l.code) ? \"rtl\" : \"ltr\";\n return (\n <button\n key={l.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n dir={itemDir}\n onClick={() => {\n setLocale(l.code);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n itemDir === \"rtl\" && \"flex-row-reverse text-right\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base\">{l.flag ?? getFlag(l.code)}</span>}\n <span className=\"flex-1\">{resolveLabel(l)}</span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">No results</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n","import * as React from \"react\";\n\n/**\n * Supports both controlled and uncontrolled usage from a single hook.\n *\n * When `value` is `undefined` the component owns its state and seeds it from\n * `defaultValue`. When `value` is provided the parent owns it and every render\n * reflects the prop, so external changes propagate.\n */\nexport function useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const current = isControlled ? value : uncontrolled;\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\n\nexport interface Country {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** E.164 dial prefix, including the leading \"+\" */\n dialCode: string;\n /** English country name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps extends Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n> {\n /** Phone number. Provide this to control the component. */\n value?: string;\n /** Initial phone number when uncontrolled */\n defaultValue?: string;\n /** Callback when the number or the selected country changes */\n onValueChange?: (phone: string, country: Country) => void;\n /** ISO 3166-1 alpha-2 code of the initially selected country (default: \"US\") */\n defaultCountry?: string;\n /** Show the flag emoji beside the dial code (default: true) */\n showFlags?: boolean;\n /** Accessible label for the field (default: \"Phone number\") */\n label?: string;\n}\n\nconst COUNTRIES: Country[] = [\n { code: \"US\", dialCode: \"+1\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"GB\", dialCode: \"+44\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"IN\", dialCode: \"+91\", name: \"India\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n { code: \"CA\", dialCode: \"+1\", name: \"Canada\", flag: \"\\u{1F1E8}\\u{1F1E6}\" },\n { code: \"AU\", dialCode: \"+61\", name: \"Australia\", flag: \"\\u{1F1E6}\\u{1F1FA}\" },\n { code: \"DE\", dialCode: \"+49\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"FR\", dialCode: \"+33\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"JP\", dialCode: \"+81\", name: \"Japan\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n { code: \"BR\", dialCode: \"+55\", name: \"Brazil\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n { code: \"CN\", dialCode: \"+86\", name: \"China\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n { code: \"RU\", dialCode: \"+7\", name: \"Russia\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n { code: \"KR\", dialCode: \"+82\", name: \"South Korea\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n { code: \"IT\", dialCode: \"+39\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"ES\", dialCode: \"+34\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"MX\", dialCode: \"+52\", name: \"Mexico\", flag: \"\\u{1F1F2}\\u{1F1FD}\" },\n { code: \"NL\", dialCode: \"+31\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"SE\", dialCode: \"+46\", name: \"Sweden\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n { code: \"CH\", dialCode: \"+41\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"PL\", dialCode: \"+48\", name: \"Poland\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n { code: \"AR\", dialCode: \"+54\", name: \"Argentina\", flag: \"\\u{1F1E6}\\u{1F1F7}\" },\n { code: \"ZA\", dialCode: \"+27\", name: \"South Africa\", flag: \"\\u{1F1FF}\\u{1F1E6}\" },\n { code: \"NG\", dialCode: \"+234\", name: \"Nigeria\", flag: \"\\u{1F1F3}\\u{1F1EC}\" },\n { code: \"EG\", dialCode: \"+20\", name: \"Egypt\", flag: \"\\u{1F1EA}\\u{1F1EC}\" },\n { code: \"SA\", dialCode: \"+966\", name: \"Saudi Arabia\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n { code: \"AE\", dialCode: \"+971\", name: \"United Arab Emirates\", flag: \"\\u{1F1E6}\\u{1F1EA}\" },\n { code: \"SG\", dialCode: \"+65\", name: \"Singapore\", flag: \"\\u{1F1F8}\\u{1F1EC}\" },\n { code: \"MY\", dialCode: \"+60\", name: \"Malaysia\", flag: \"\\u{1F1F2}\\u{1F1FE}\" },\n { code: \"TH\", dialCode: \"+66\", name: \"Thailand\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n { code: \"PH\", dialCode: \"+63\", name: \"Philippines\", flag: \"\\u{1F1F5}\\u{1F1ED}\" },\n { code: \"ID\", dialCode: \"+62\", name: \"Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n { code: \"VN\", dialCode: \"+84\", name: \"Vietnam\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n { code: \"TR\", dialCode: \"+90\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n { code: \"PK\", dialCode: \"+92\", name: \"Pakistan\", flag: \"\\u{1F1F5}\\u{1F1F0}\" },\n { code: \"BD\", dialCode: \"+880\", name: \"Bangladesh\", flag: \"\\u{1F1E7}\\u{1F1E9}\" },\n { code: \"KE\", dialCode: \"+254\", name: \"Kenya\", flag: \"\\u{1F1F0}\\u{1F1EA}\" },\n { code: \"GH\", dialCode: \"+233\", name: \"Ghana\", flag: \"\\u{1F1EC}\\u{1F1ED}\" },\n { code: \"ET\", dialCode: \"+251\", name: \"Ethiopia\", flag: \"\\u{1F1EA}\\u{1F1F9}\" },\n { code: \"TZ\", dialCode: \"+255\", name: \"Tanzania\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n { code: \"IL\", dialCode: \"+972\", name: \"Israel\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n { code: \"HK\", dialCode: \"+852\", name: \"Hong Kong\", flag: \"\\u{1F1ED}\\u{1F1F0}\" },\n { code: \"NZ\", dialCode: \"+64\", name: \"New Zealand\", flag: \"\\u{1F1F3}\\u{1F1FF}\" },\n { code: \"IE\", dialCode: \"+353\", name: \"Ireland\", flag: \"\\u{1F1EE}\\u{1F1EA}\" },\n { code: \"PT\", dialCode: \"+351\", name: \"Portugal\", flag: \"\\u{1F1F5}\\u{1F1F9}\" },\n { code: \"CL\", dialCode: \"+56\", name: \"Chile\", flag: \"\\u{1F1E8}\\u{1F1F1}\" },\n { code: \"CO\", dialCode: \"+57\", name: \"Colombia\", flag: \"\\u{1F1E8}\\u{1F1F4}\" },\n { code: \"FI\", dialCode: \"+358\", name: \"Finland\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n { code: \"NO\", dialCode: \"+47\", name: \"Norway\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n { code: \"DK\", dialCode: \"+45\", name: \"Denmark\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n { code: \"AT\", dialCode: \"+43\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"BE\", dialCode: \"+32\", name: \"Belgium\", flag: \"\\u{1F1E7}\\u{1F1EA}\" },\n];\n\nfunction getCountryByCode(code: string): Country | undefined {\n return COUNTRIES.find((c) => c.code === code.toUpperCase());\n}\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n {\n value,\n defaultValue,\n onValueChange,\n defaultCountry = \"US\",\n placeholder = \"Phone number\",\n disabled = false,\n className,\n showFlags = true,\n label = \"Phone number\",\n ...rest\n },\n forwardedRef,\n) {\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(\n () => getCountryByCode(defaultCountry) ?? COUNTRIES[0],\n );\n const [inputValue, setInputValue] = useControllableState(value, defaultValue ?? \"\", undefined);\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // The country search box needs its own ref. Sharing `inputRef` meant the search\n // field overwrote it whenever the dropdown opened, which pointed the forwarded\n // ref at the wrong element and sent focus to a node that was about to unmount.\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n\n const filtered = COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(search.toLowerCase()) ||\n c.dialCode.includes(search) ||\n c.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) searchRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n const handleCountrySelect = (country: Country) => {\n setSelectedCountry(country);\n setOpen(false);\n setSearch(\"\");\n onValueChange?.(inputValue, country);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onValueChange?.(newValue, selectedCountry);\n };\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm\", className)}>\n <div\n className={cn(\n \"flex items-center overflow-hidden rounded-lg border transition-colors\",\n \"bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(!open)}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-1.5 border-r px-3 py-2.5 text-sm transition-colors\",\n \"border-zinc-200 text-zinc-900 hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label=\"Select country\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {showFlags && <span className=\"text-base leading-none\">{selectedCountry.flag}</span>}\n <span className=\"font-mono text-xs\">{selectedCountry.dialCode}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <input\n ref={inputRef}\n type=\"tel\"\n value={inputValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={disabled}\n {...rest}\n className={cn(\n \"flex-1 bg-transparent px-3 py-2.5 text-sm outline-none placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\n \"text-zinc-900 dark:text-zinc-100\",\n \"focus:ring-1 focus:ring-emerald-500/50\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label={label}\n />\n </div>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[280px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select country\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={searchRef}\n type=\"text\"\n placeholder=\"Search countries...\"\n aria-label=\"Search countries\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((country) => {\n const isActive = country.code === selectedCountry.code;\n return (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => handleCountrySelect(country)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"flex-1\">{country.name}</span>\n <span className=\"font-mono text-xs text-zinc-500 dark:text-zinc-400\">\n {country.dialCode}\n </span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">\n No countries found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nexport { COUNTRIES };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface NavLink {\n /** Visible link text */\n label: string;\n /** Destination passed to `linkComponent` as `href` */\n href: string;\n}\n\nexport interface NavBarProps extends Omit<\n React.ComponentPropsWithoutRef<\"nav\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Brand mark rendered on the left */\n logo?: React.ReactNode;\n /** Navigation links */\n links?: NavLink[];\n /** Locales offered by the built-in language menu */\n locales?: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: \"en\") */\n defaultValue?: string;\n /** Callback when the locale changes */\n onValueChange?: (code: string) => void;\n /** Primary call-to-action button */\n cta?: { label: string; href: string };\n /** Show a GitHub icon link */\n showGitHub?: boolean;\n /** Target of the GitHub icon link */\n githubUrl?: string;\n /** Pin the bar to the top of the viewport (default: true) */\n sticky?: boolean;\n /** Show flag emojis in the language menu (default: true) */\n showFlags?: boolean;\n /**\n * Component used to render internal links. Defaults to `\"a\"` so the\n * component works in any React app; pass your router's link (e.g.\n * `next/link`) to get client-side navigation.\n */\n linkComponent?: React.ElementType;\n}\n\nconst LOCALE_MAP: Record<string, { label: string; flag: string }> = {\n en: { label: \"English\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n fr: { label: \"Fran\\u00e7ais\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n es: { label: \"Espa\\u00f1ol\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n de: { label: \"Deutsch\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n ja: { label: \"\\u65e5\\u672c\\u8a9e\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n ko: { label: \"\\ud55c\\uad6d\\uc5b4\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n zh: { label: \"\\u4e2d\\u6587\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n ar: { label: \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n pt: { label: \"Portugu\\u00eas\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n it: { label: \"Italiano\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n nl: { label: \"Nederlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n ru: { label: \"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n pl: { label: \"Polski\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n tr: { label: \"T\\u00fcrk\\u00e7e\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n vi: { label: \"Ti\\u1ebfng Vi\\u1ec7t\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n th: { label: \"\\u0e44\\u0e17\\u0e22\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n id: { label: \"Bahasa Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n hi: { label: \"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n sv: { label: \"Svenska\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n da: { label: \"Dansk\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n fi: { label: \"Suomi\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n no: { label: \"Norsk\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n el: { label: \"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n he: { label: \"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n ro: { label: \"Rom\\u00e2n\\u0103\", flag: \"\\u{1F1F7}\\u{1F1F4}\" },\n hu: { label: \"Magyar\", flag: \"\\u{1F1ED}\\u{1F1FA}\" },\n cs: { label: \"\\u010ce\\u0161tina\", flag: \"\\u{1F1E8}\\u{1F1FF}\" },\n uk: {\n label: \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\",\n flag: \"\\u{1F1FA}\\u{1F1E6}\",\n },\n bg: {\n label: \"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\",\n flag: \"\\u{1F1E7}\\u{1F1EC}\",\n },\n hr: { label: \"Hrvatski\", flag: \"\\u{1F1ED}\\u{1F1F7}\" },\n sk: { label: \"Sloven\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1F0}\" },\n sl: { label: \"Sloven\\u0161\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1EE}\" },\n lt: { label: \"Lietuvi\\u0173\", flag: \"\\u{1F1F1}\\u{1F1F9}\" },\n lv: { label: \"Latvie\\u0161u\", flag: \"\\u{1F1F1}\\u{1F1FB}\" },\n et: { label: \"Eesti\", flag: \"\\u{1F1EA}\\u{1F1EA}\" },\n ca: { label: \"Catal\\u00e0\", flag: \"\\u{1F1E6}\\u{1F1F8}\" },\n af: { label: \"Afrikaans\", flag: \"\\u{1F1E6}\\u{1F1FF}\" },\n sw: { label: \"Kiswahili\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n};\n\nfunction getLocaleInfo(code: string) {\n return LOCALE_MAP[code] ?? { label: code.toUpperCase(), flag: \"\\u{1F310}\" };\n}\n\nexport const NavBar = React.forwardRef<HTMLElement, NavBarProps>(function NavBar(\n {\n logo,\n links = [],\n locales = [],\n value,\n defaultValue,\n onValueChange,\n cta,\n showGitHub = false,\n githubUrl = \"https://github.com/babelize/babelize-elements\",\n sticky = true,\n className,\n showFlags = true,\n linkComponent: Link = \"a\",\n ...rest\n },\n forwardedRef,\n) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"en\",\n onValueChange,\n );\n const [mobileOpen, setMobileOpen] = React.useState(false);\n // Which bar opened the language menu, rather than a single boolean. The desktop\n // and mobile bars are both always in the DOM — only CSS hides one — so a shared\n // boolean mounted two listboxes into the accessibility tree at once.\n const [langOpen, setLangOpen] = React.useState<\"desktop\" | \"mobile\" | null>(null);\n const langRef = React.useRef<HTMLDivElement>(null);\n const mobileLangRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const currentLocaleInfo = getLocaleInfo(locale);\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n const target = e.target as Node;\n // Both containers have to be checked. Guarding only the desktop one made a\n // mousedown inside the mobile dropdown count as \"outside\", which closed the\n // menu before the option's click event could land — so picking a language\n // on mobile did nothing at all.\n if (langRef.current?.contains(target) || mobileLangRef.current?.contains(target)) return;\n setLangOpen(null);\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n setLangOpen(null);\n setMobileOpen(false);\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n React.useEffect(() => {\n if (!mobileOpen) return;\n // Restore whatever the host page had set rather than assuming it was empty.\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mobileOpen]);\n\n const langButton = (\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"desktop\" ? null : \"desktop\")}\n className=\"flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium text-zinc-500 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"desktop\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && <span className=\"text-sm leading-none\">{currentLocaleInfo.flag}</span>}\n <span className=\"hidden sm:inline\">{currentLocaleInfo.label}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n langOpen === \"desktop\" && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n );\n\n const langDropdown = (\n <div\n className=\"absolute right-0 top-full z-50 mt-1.5 min-w-[170px] rounded-xl border border-zinc-200 bg-white py-1.5 shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {locales.map((item) => {\n const info = getLocaleInfo(item.code);\n const isActive = item.code === locale;\n return (\n <button\n key={item.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n setLocale(item.code);\n setLangOpen(null);\n }}\n className={cn(\n \"mx-1.5 flex w-[calc(100%-12px)] items-center gap-2.5 rounded-lg px-3 py-2 text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base leading-none\">{info.flag}</span>}\n <span className=\"flex-1\">{item.label ?? info.label}</span>\n {isActive && (\n <svg\n className=\"size-4 shrink-0 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n\n return (\n <nav\n ref={forwardedRef}\n {...rest}\n className={cn(\n \"z-50 w-full border-b border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900\",\n sticky && \"sticky top-0\",\n className,\n )}\n >\n {/* Desktop */}\n <div className=\"mx-auto hidden max-w-6xl items-center justify-between px-5 py-3 md:flex\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"px-3 py-1.5 text-sm transition-colors rounded-md no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={langRef} className=\"relative\">\n {langButton}\n {langOpen === \"desktop\" && langDropdown}\n </div>\n )}\n\n {showGitHub && (\n <a\n href={githubUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-label=\"GitHub\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n </a>\n )}\n\n {cta && (\n <Link\n href={cta.href}\n className=\"rounded-md px-3.5 py-1.5 text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n </div>\n\n {/* Mobile */}\n <div className=\"flex items-center justify-between px-4 py-3 md:hidden\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={mobileLangRef} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"mobile\" ? null : \"mobile\")}\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"mobile\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && (\n <span className=\"text-base leading-none\">{currentLocaleInfo.flag}</span>\n )}\n </button>\n {langOpen === \"mobile\" && langDropdown}\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileOpen}\n aria-controls={mobileOpen ? menuId : undefined}\n >\n {mobileOpen ? (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n {mobileOpen && (\n <div\n id={menuId}\n className=\"border-t border-zinc-200 bg-white px-4 py-3 md:hidden dark:border-zinc-800 dark:bg-zinc-900\"\n >\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className=\"block py-2.5 text-sm transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n {cta && (\n <Link\n href={cta.href}\n onClick={() => setMobileOpen(false)}\n className=\"mt-2 block rounded-md px-3.5 py-2 text-center text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n )}\n </nav>\n );\n});\n"],"mappings":"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","names":["React","LanguageSwitcher","_a","React","import_jsx_runtime","PhoneInput","React","import_jsx_runtime","NavBar","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/registry/components/index.ts","../src/lib/utils.ts","../src/registry/components/language-switcher.tsx","../src/lib/use-controllable-state.ts","../src/registry/components/phone-input.tsx","../src/registry/components/navbar.tsx"],"sourcesContent":["export { cn } from \"@/lib/utils\";\n\nexport type { Locale } from \"./types\";\n\nexport { LanguageSwitcher } from \"./language-switcher\";\nexport type { LanguageSwitcherProps } from \"./language-switcher\";\n\nexport { PhoneInput, COUNTRIES } from \"./phone-input\";\nexport type { PhoneInputProps, Country } from \"./phone-input\";\n\nexport { NavBar } from \"./navbar\";\nexport type { NavBarProps, NavLink } from \"./navbar\";\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface LanguageSwitcherProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Array of available locales — only `code` is required */\n locales: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: first locale's code) */\n defaultValue?: string;\n /** Callback when locale changes */\n onValueChange?: (code: string) => void;\n /** Show flag emojis next to locale names (default: false) */\n showFlags?: boolean;\n /** Display labels in native language or English (default: \"english\") */\n label?: \"native\" | \"english\";\n}\n\nconst RTL_LOCALES = new Set([\"ar\", \"he\", \"fa\", \"ur\", \"ps\", \"sd\", \"yi\"]);\n\nfunction isRtl(code: string): boolean {\n const lang = code.split(\"-\")[0].toLowerCase();\n return RTL_LOCALES.has(lang);\n}\n\n/**\n * Maps ISO 639-1 language codes to flag emojis via regional indicator symbols.\n * Covers 80+ common languages. Override per-locale with the `flag` prop.\n */\nconst LANG_TO_FLAG: Record<string, string> = {\n en: \"\\u{1F1FA}\\u{1F1F8}\",\n fr: \"\\u{1F1EB}\\u{1F1F7}\",\n es: \"\\u{1F1EA}\\u{1F1F8}\",\n de: \"\\u{1F1E9}\\u{1F1EA}\",\n ja: \"\\u{1F1EF}\\u{1F1F5}\",\n ko: \"\\u{1F1F0}\\u{1F1F7}\",\n zh: \"\\u{1F1E8}\\u{1F1F3}\",\n ar: \"\\u{1F1F8}\\u{1F1E6}\",\n pt: \"\\u{1F1E7}\\u{1F1F7}\",\n it: \"\\u{1F1EE}\\u{1F1F9}\",\n nl: \"\\u{1F1F3}\\u{1F1F1}\",\n ru: \"\\u{1F1F7}\\u{1F1FA}\",\n pl: \"\\u{1F1F5}\\u{1F1F1}\",\n tr: \"\\u{1F1F9}\\u{1F1F7}\",\n vi: \"\\u{1F1FB}\\u{1F1F3}\",\n th: \"\\u{1F1F9}\\u{1F1ED}\",\n id: \"\\u{1F1EE}\\u{1F1E9}\",\n hi: \"\\u{1F1EE}\\u{1F1F3}\",\n bn: \"\\u{1F1E7}\\u{1F1E9}\",\n uk: \"\\u{1F1FA}\\u{1F1E6}\",\n cs: \"\\u{1F1E8}\\u{1F1FF}\",\n sv: \"\\u{1F1F8}\\u{1F1EA}\",\n da: \"\\u{1F1E9}\\u{1F1F0}\",\n fi: \"\\u{1F1EB}\\u{1F1EE}\",\n no: \"\\u{1F1F3}\\u{1F1F4}\",\n nb: \"\\u{1F1F3}\\u{1F1F4}\",\n nn: \"\\u{1F1F3}\\u{1F1F4}\",\n el: \"\\u{1F1EC}\\u{1F1F7}\",\n he: \"\\u{1F1EE}\\u{1F1F1}\",\n fa: \"\\u{1F1EE}\\u{1F1F7}\",\n ro: \"\\u{1F1F7}\\u{1F1F4}\",\n hu: \"\\u{1F1ED}\\u{1F1FA}\",\n sk: \"\\u{1F1F8}\\u{1F1F0}\",\n bg: \"\\u{1F1E7}\\u{1F1EC}\",\n hr: \"\\u{1F1ED}\\u{1F1F7}\",\n sr: \"\\u{1F1F7}\\u{1F1F8}\",\n sl: \"\\u{1F1F8}\\u{1F1EE}\",\n lt: \"\\u{1F1F1}\\u{1F1F9}\",\n lv: \"\\u{1F1F1}\\u{1F1FB}\",\n et: \"\\u{1F1EA}\\u{1F1EA}\",\n ga: \"\\u{1F1EE}\\u{1F1EA}\",\n mt: \"\\u{1F1F2}\\u{1F1F9}\",\n ca: \"\\u{1F1E6}\\u{1F1F8}\",\n eu: \"\\u{1F1E6}\\u{1F1F7}\",\n gl: \"\\u{1F1E6}\\u{1F1F7}\",\n cy: \"\\u{1F1FF}\\u{1F1F4}\",\n mk: \"\\u{1F1F2}\\u{1F1F0}\",\n sq: \"\\u{1F1E6}\\u{1F1F1}\",\n bs: \"\\u{1F1E7}\\u{1F1F8}\",\n is: \"\\u{1F1EE}\\u{1F1F8}\",\n fo: \"\\u{1F1EB}\\u{1F1F4}\",\n sw: \"\\u{1F1F9}\\u{1F1FF}\",\n am: \"\\u{1F1E6}\\u{1F1F2}\",\n ne: \"\\u{1F1F3}\\u{1F1F5}\",\n si: \"\\u{1F1F8}\\u{1F1F0}\",\n my: \"\\u{1F1F2}\\u{1F1E2}\",\n km: \"\\u{1F1F0}\\u{1F1ED}\",\n lo: \"\\u{1F1F1}\\u{1F1E6}\",\n ka: \"\\u{1F1EC}\\u{1F1EA}\",\n hy: \"\\u{1F1E6}\\u{1F1F2}\",\n kk: \"\\u{1F1F0}\\u{1F1F0}\",\n uz: \"\\u{1F1FA}\\u{1F1FF}\",\n mn: \"\\u{1F1F2}\\u{1F1F3}\",\n ps: \"\\u{1F1F5}\\u{1F1F8}\",\n ur: \"\\u{1F1FA}\\u{1F1F2}\",\n sd: \"\\u{1F1F8}\\u{1F1E6}\",\n ml: \"\\u{1F1F2}\\u{1F1F1}\",\n ta: \"\\u{1F1F9}\\u{1F1F1}\",\n te: \"\\u{1F1F9}\\u{1F1EF}\",\n kn: \"\\u{1F1EE}\\u{1F1F3}\",\n mr: \"\\u{1F1F2}\\u{1F1F7}\",\n gu: \"\\u{1F1EE}\\u{1F1F3}\",\n pa: \"\\u{1F1F5}\\u{1F1E6}\",\n or: \"\\u{1F1F3}\\u{1F1F4}\",\n as: \"\\u{1F1E6}\\u{1F1F8}\",\n yi: \"\\u{1F1FE}\\u{1F1EA}\",\n yo: \"\\u{1F1FE}\\u{1F1F3}\",\n ig: \"\\u{1F1EE}\\u{1F1EC}\",\n zu: \"\\u{1F1FF}\\u{1F1F3}\",\n af: \"\\u{1F1E6}\\u{1F1FF}\",\n ha: \"\\u{1F1ED}\\u{1F1F2}\",\n tl: \"\\u{1F1F5}\\u{1F1ED}\",\n mg: \"\\u{1F1F2}\\u{1F1EC}\",\n mi: \"\\u{1F1F3}\\u{1F1FF}\",\n sm: \"\\u{1F1F8}\\u{1F1F4}\",\n fj: \"\\u{1F1EB}\\u{1F1EF}\",\n to: \"\\u{1F1F9}\\u{1F1F4}\",\n haw: \"\\u{1F1ED}\\u{1F1FC}\",\n la: \"\\u{1F1F1}\\u{1F1E6}\",\n eo: \"\\u{1F1EA}\\u{1F1F7}\",\n};\n\nfunction getFlag(code: string): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n return LANG_TO_FLAG[lang] ?? \"\\u{1F310}\";\n}\n\n/**\n * Built-in language names: native form and English form.\n */\nconst LANG_NAMES: Record<string, [native: string, english: string]> = {\n en: [\"English\", \"English\"],\n fr: [\"Fran\\u00e7ais\", \"French\"],\n es: [\"Espa\\u00f1ol\", \"Spanish\"],\n de: [\"Deutsch\", \"German\"],\n ja: [\"\\u65e5\\u672c\\u8a9e\", \"Japanese\"],\n ko: [\"\\ud55c\\uad6d\\uc5b4\", \"Korean\"],\n zh: [\"\\u4e2d\\u6587\", \"Chinese\"],\n ar: [\"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", \"Arabic\"],\n pt: [\"Portugu\\u00eas\", \"Portuguese\"],\n it: [\"Italiano\", \"Italian\"],\n nl: [\"Nederlands\", \"Dutch\"],\n ru: [\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"Russian\"],\n pl: [\"Polski\", \"Polish\"],\n tr: [\"T\\u00fcrk\\u00e7e\", \"Turkish\"],\n vi: [\"Ti\\u1ebfng Vi\\u1ec7t\", \"Vietnamese\"],\n th: [\"\\u0e44\\u0e17\\u0e22\", \"Thai\"],\n id: [\"Bahasa Indonesia\", \"Indonesian\"],\n hi: [\"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", \"Hindi\"],\n bn: [\"\\u09ac\\u09be\\u0982\\u09b2\\u09be\", \"Bengali\"],\n uk: [\"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"Ukrainian\"],\n cs: [\"\\u010ce\\u0161tina\", \"Czech\"],\n sv: [\"Svenska\", \"Swedish\"],\n da: [\"Dansk\", \"Danish\"],\n fi: [\"Suomi\", \"Finnish\"],\n no: [\"Norsk\", \"Norwegian\"],\n nb: [\"Norsk bokm\\u00e5l\", \"Norwegian Bokm\\u00e5l\"],\n nn: [\"Nynorsk\", \"Norwegian Nynorsk\"],\n el: [\"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", \"Greek\"],\n he: [\"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", \"Hebrew\"],\n fa: [\"\\u0641\\u0627\\u0631\\u0633\\u06cc\", \"Persian\"],\n ro: [\"Rom\\u00e2n\\u0103\", \"Romanian\"],\n hu: [\"Magyar\", \"Hungarian\"],\n sk: [\"Sloven\\u010dina\", \"Slovak\"],\n bg: [\"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\", \"Bulgarian\"],\n hr: [\"Hrvatski\", \"Croatian\"],\n sr: [\"\\u0421\\u0440\\u043f\\u0441\\u043a\\u0438\", \"Serbian\"],\n sl: [\"Sloven\\u0161\\u010dina\", \"Slovenian\"],\n lt: [\"Lietuvi\\u0173\", \"Lithuanian\"],\n lv: [\"Latvie\\u0161u\", \"Latvian\"],\n et: [\"Eesti\", \"Estonian\"],\n ga: [\"Gaeilge\", \"Irish\"],\n mt: [\"Malti\", \"Maltese\"],\n ca: [\"Catal\\u00e0\", \"Catalan\"],\n eu: [\"Euskara\", \"Basque\"],\n gl: [\"Galego\", \"Galician\"],\n cy: [\"Cymraeg\", \"Welsh\"],\n mk: [\"\\u041c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438\", \"Macedonian\"],\n sq: [\"Shqip\", \"Albanian\"],\n bs: [\"Bosanski\", \"Bosnian\"],\n is: [\"\\u00cdslenska\", \"Icelandic\"],\n fo: [\"F\\u00f8royskt\", \"Faroese\"],\n sw: [\"Kiswahili\", \"Swahili\"],\n am: [\"\\u12a0\\u12cd\\u1295\\u1348\", \"Amharic\"],\n ne: [\"\\u0928\\u0947\\u092a\\u093e\\u0932\\u0940\", \"Nepali\"],\n si: [\"\\u0dc3\\u0dd2\\u0d82\\u0dc4\\u0dbd\", \"Sinhala\"],\n my: [\"\\u1019\\u103c\\u1014\\u103a\\u1019\\u102c\", \"Burmese\"],\n km: [\"\\u1780\\u1798\\u17d2\\u1796\\u17c7\\u1798\", \"Khmer\"],\n lo: [\"\\u0ea5\\u0e27\", \"Lao\"],\n ka: [\"\\u10e5\\u10d0\\u10e0\\u10d7\\u10e3\\u10da\\u10d8\", \"Georgian\"],\n hy: [\"\\u0540\\u0561\\u0575\\u0565\\u10e0\\u0565\\u0576\", \"Armenian\"],\n kk: [\"\\u049a\\u0430\\u0437\\u0430\\u049b\", \"Kazakh\"],\n uz: [\"O\\u2019zbek\", \"Uzbek\"],\n mn: [\"\\u041c\\u043e\\u043d\\u0433\\u043e\\u043b\", \"Mongolian\"],\n ps: [\"\\u067e\\u069a\\u062a\\u0648\", \"Pashto\"],\n ur: [\"\\u0627\\u0631\\u062f\\u0648\", \"Urdu\"],\n sd: [\"\\u0773\\u0647\\u0646\\u068c\\u064a\", \"Sindhi\"],\n ml: [\"\\u0d2e\\u0d32\\u0d2f\\u0d3e\\u0d33\\u0d02\", \"Malayalam\"],\n ta: [\"\\u0ba4\\u0bae\\u0bbf\\u0bb4\\u0bcd\", \"Tamil\"],\n te: [\"\\u0c24\\u0c46\\u0c32\\u0c41\\u0c17\\u0c41\", \"Telugu\"],\n kn: [\"\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1\", \"Kannada\"],\n mr: [\"\\u092e\\u0930\\u093e\\u0920\\u0940\", \"Marathi\"],\n gu: [\"\\u0a97\\u0ac1\\u0a9c\\u0ab0\\u0abe\\u0aa4\\u0ac0\", \"Gujarati\"],\n pa: [\"\\u0a2a\\u0a70\\u0a1c\\u0a3e\\u0a2c\\u0a40\", \"Punjabi\"],\n or: [\"\\u0b13\\u0b21\\u0b3c\\u0b3f\\u0b06\", \"Odia\"],\n as: [\"\\u0985\\u09b8\\u09ae\\u09c0\\u09af\\u09bc\\u09be\", \"Assamese\"],\n yi: [\"\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9\", \"Yiddish\"],\n yo: [\"Yor\\u00f9b\\u00e1\", \"Yoruba\"],\n ig: [\"Igbo\", \"Igbo\"],\n zu: [\"isiZulu\", \"Zulu\"],\n af: [\"Afrikaans\", \"Afrikaans\"],\n ha: [\"Hausa\", \"Hausa\"],\n tl: [\"Filipino\", \"Filipino\"],\n mg: [\"Malagasy\", \"Malagasy\"],\n mi: [\"Te Reo M\\u0101ori\", \"M\\u0101ori\"],\n sm: [\"Gagana Samoa\", \"Samoan\"],\n to: [\"Lea Faka-Tonga\", \"Tongan\"],\n fj: [\"Na Vosa Vakaviti\", \"Fijian\"],\n haw: [\"\\u02bb\\u014clelo Hawai\\u02bbi\", \"Hawaiian\"],\n la: [\"Latina\", \"Latin\"],\n eo: [\"Esperanto\", \"Esperanto\"],\n};\n\nfunction getLabel(code: string, mode: \"native\" | \"english\"): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n const names = LANG_NAMES[lang];\n if (!names) return code;\n return mode === \"native\" ? names[0] : names[1];\n}\n\nexport const LanguageSwitcher = React.forwardRef<HTMLDivElement, LanguageSwitcherProps>(\n function LanguageSwitcher(\n {\n locales,\n value,\n defaultValue,\n onValueChange,\n showFlags = false,\n label: labelMode = \"english\",\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"\",\n onValueChange,\n );\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => ref.current as HTMLDivElement);\n\n const resolveLabel = (l: Locale) => l.label ?? getLabel(l.code, labelMode);\n const activeLocale = locales.find((l) => l.code === locale);\n\n const filtered = locales.filter(\n (l) =>\n resolveLabel(l).toLowerCase().includes(search.toLowerCase()) ||\n l.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n const dir = isRtl(locale) ? \"rtl\" : \"ltr\";\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n return (\n <div\n ref={ref}\n dir={dir}\n className={cn(\"relative inline-block text-sm z-50\", className)}\n {...rest}\n >\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={cn(\n \"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50\",\n )}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`}\n >\n {showFlags && <span className=\"text-base\">{activeLocale?.flag ?? getFlag(locale)}</span>}\n <span>{activeLocale ? resolveLabel(activeLocale) : locale}</span>\n <svg\n className={cn(\n \"size-4 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search...\"\n aria-label=\"Search languages\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((l) => {\n const isActive = l.code === locale;\n const itemDir = l.rtl || isRtl(l.code) ? \"rtl\" : \"ltr\";\n return (\n <button\n key={l.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n dir={itemDir}\n onClick={() => {\n setLocale(l.code);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base\">{l.flag ?? getFlag(l.code)}</span>}\n <span className=\"flex-1\">{resolveLabel(l)}</span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">No results</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n","import * as React from \"react\";\n\n/**\n * Supports both controlled and uncontrolled usage from a single hook.\n *\n * When `value` is `undefined` the component owns its state and seeds it from\n * `defaultValue`. When `value` is provided the parent owns it and every render\n * reflects the prop, so external changes propagate.\n */\nexport function useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const current = isControlled ? value : uncontrolled;\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\n\nexport interface Country {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** E.164 dial prefix, including the leading \"+\" */\n dialCode: string;\n /** English country name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps extends Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n> {\n /** Phone number. Provide this to control the component. */\n value?: string;\n /** Initial phone number when uncontrolled */\n defaultValue?: string;\n /** Callback when the number or the selected country changes */\n onValueChange?: (phone: string, country: Country) => void;\n /** ISO 3166-1 alpha-2 code of the initially selected country (default: \"US\") */\n defaultCountry?: string;\n /** Show the flag emoji beside the dial code (default: true) */\n showFlags?: boolean;\n /** Accessible label for the field (default: \"Phone number\") */\n label?: string;\n}\n\nconst COUNTRIES: Country[] = [\n { code: \"US\", dialCode: \"+1\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"GB\", dialCode: \"+44\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"IN\", dialCode: \"+91\", name: \"India\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n { code: \"CA\", dialCode: \"+1\", name: \"Canada\", flag: \"\\u{1F1E8}\\u{1F1E6}\" },\n { code: \"AU\", dialCode: \"+61\", name: \"Australia\", flag: \"\\u{1F1E6}\\u{1F1FA}\" },\n { code: \"DE\", dialCode: \"+49\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"FR\", dialCode: \"+33\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"JP\", dialCode: \"+81\", name: \"Japan\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n { code: \"BR\", dialCode: \"+55\", name: \"Brazil\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n { code: \"CN\", dialCode: \"+86\", name: \"China\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n { code: \"RU\", dialCode: \"+7\", name: \"Russia\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n { code: \"KR\", dialCode: \"+82\", name: \"South Korea\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n { code: \"IT\", dialCode: \"+39\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"ES\", dialCode: \"+34\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"MX\", dialCode: \"+52\", name: \"Mexico\", flag: \"\\u{1F1F2}\\u{1F1FD}\" },\n { code: \"NL\", dialCode: \"+31\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"SE\", dialCode: \"+46\", name: \"Sweden\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n { code: \"CH\", dialCode: \"+41\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"PL\", dialCode: \"+48\", name: \"Poland\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n { code: \"AR\", dialCode: \"+54\", name: \"Argentina\", flag: \"\\u{1F1E6}\\u{1F1F7}\" },\n { code: \"ZA\", dialCode: \"+27\", name: \"South Africa\", flag: \"\\u{1F1FF}\\u{1F1E6}\" },\n { code: \"NG\", dialCode: \"+234\", name: \"Nigeria\", flag: \"\\u{1F1F3}\\u{1F1EC}\" },\n { code: \"EG\", dialCode: \"+20\", name: \"Egypt\", flag: \"\\u{1F1EA}\\u{1F1EC}\" },\n { code: \"SA\", dialCode: \"+966\", name: \"Saudi Arabia\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n { code: \"AE\", dialCode: \"+971\", name: \"United Arab Emirates\", flag: \"\\u{1F1E6}\\u{1F1EA}\" },\n { code: \"SG\", dialCode: \"+65\", name: \"Singapore\", flag: \"\\u{1F1F8}\\u{1F1EC}\" },\n { code: \"MY\", dialCode: \"+60\", name: \"Malaysia\", flag: \"\\u{1F1F2}\\u{1F1FE}\" },\n { code: \"TH\", dialCode: \"+66\", name: \"Thailand\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n { code: \"PH\", dialCode: \"+63\", name: \"Philippines\", flag: \"\\u{1F1F5}\\u{1F1ED}\" },\n { code: \"ID\", dialCode: \"+62\", name: \"Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n { code: \"VN\", dialCode: \"+84\", name: \"Vietnam\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n { code: \"TR\", dialCode: \"+90\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n { code: \"PK\", dialCode: \"+92\", name: \"Pakistan\", flag: \"\\u{1F1F5}\\u{1F1F0}\" },\n { code: \"BD\", dialCode: \"+880\", name: \"Bangladesh\", flag: \"\\u{1F1E7}\\u{1F1E9}\" },\n { code: \"KE\", dialCode: \"+254\", name: \"Kenya\", flag: \"\\u{1F1F0}\\u{1F1EA}\" },\n { code: \"GH\", dialCode: \"+233\", name: \"Ghana\", flag: \"\\u{1F1EC}\\u{1F1ED}\" },\n { code: \"ET\", dialCode: \"+251\", name: \"Ethiopia\", flag: \"\\u{1F1EA}\\u{1F1F9}\" },\n { code: \"TZ\", dialCode: \"+255\", name: \"Tanzania\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n { code: \"IL\", dialCode: \"+972\", name: \"Israel\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n { code: \"HK\", dialCode: \"+852\", name: \"Hong Kong\", flag: \"\\u{1F1ED}\\u{1F1F0}\" },\n { code: \"NZ\", dialCode: \"+64\", name: \"New Zealand\", flag: \"\\u{1F1F3}\\u{1F1FF}\" },\n { code: \"IE\", dialCode: \"+353\", name: \"Ireland\", flag: \"\\u{1F1EE}\\u{1F1EA}\" },\n { code: \"PT\", dialCode: \"+351\", name: \"Portugal\", flag: \"\\u{1F1F5}\\u{1F1F9}\" },\n { code: \"CL\", dialCode: \"+56\", name: \"Chile\", flag: \"\\u{1F1E8}\\u{1F1F1}\" },\n { code: \"CO\", dialCode: \"+57\", name: \"Colombia\", flag: \"\\u{1F1E8}\\u{1F1F4}\" },\n { code: \"FI\", dialCode: \"+358\", name: \"Finland\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n { code: \"NO\", dialCode: \"+47\", name: \"Norway\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n { code: \"DK\", dialCode: \"+45\", name: \"Denmark\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n { code: \"AT\", dialCode: \"+43\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"BE\", dialCode: \"+32\", name: \"Belgium\", flag: \"\\u{1F1E7}\\u{1F1EA}\" },\n];\n\nfunction getCountryByCode(code: string): Country | undefined {\n return COUNTRIES.find((c) => c.code === code.toUpperCase());\n}\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n {\n value,\n defaultValue,\n onValueChange,\n defaultCountry = \"US\",\n placeholder = \"Phone number\",\n disabled = false,\n className,\n showFlags = true,\n label = \"Phone number\",\n ...rest\n },\n forwardedRef,\n) {\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(\n () => getCountryByCode(defaultCountry) ?? COUNTRIES[0],\n );\n const [inputValue, setInputValue] = useControllableState(value, defaultValue ?? \"\", undefined);\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // The country search box needs its own ref. Sharing `inputRef` meant the search\n // field overwrote it whenever the dropdown opened, which pointed the forwarded\n // ref at the wrong element and sent focus to a node that was about to unmount.\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n\n const filtered = COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(search.toLowerCase()) ||\n c.dialCode.includes(search) ||\n c.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) searchRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n const handleCountrySelect = (country: Country) => {\n setSelectedCountry(country);\n setOpen(false);\n setSearch(\"\");\n onValueChange?.(inputValue, country);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onValueChange?.(newValue, selectedCountry);\n };\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm\", className)}>\n <div\n className={cn(\n \"flex items-center overflow-hidden rounded-lg border transition-colors\",\n \"bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(!open)}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-1.5 border-r px-3 py-2.5 text-sm transition-colors\",\n \"border-zinc-200 text-zinc-900 hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label=\"Select country\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {showFlags && <span className=\"text-base leading-none\">{selectedCountry.flag}</span>}\n <span className=\"font-mono text-xs\">{selectedCountry.dialCode}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <input\n ref={inputRef}\n type=\"tel\"\n value={inputValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={disabled}\n {...rest}\n className={cn(\n \"flex-1 bg-transparent px-3 py-2.5 text-sm outline-none placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\n \"text-zinc-900 dark:text-zinc-100\",\n \"focus:ring-1 focus:ring-emerald-500/50\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label={label}\n />\n </div>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[280px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select country\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={searchRef}\n type=\"text\"\n placeholder=\"Search countries...\"\n aria-label=\"Search countries\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((country) => {\n const isActive = country.code === selectedCountry.code;\n return (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => handleCountrySelect(country)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"flex-1\">{country.name}</span>\n <span className=\"font-mono text-xs text-zinc-500 dark:text-zinc-400\">\n {country.dialCode}\n </span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">\n No countries found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nexport { COUNTRIES };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface NavLink {\n /** Visible link text */\n label: string;\n /** Destination passed to `linkComponent` as `href` */\n href: string;\n}\n\nexport interface NavBarProps extends Omit<\n React.ComponentPropsWithoutRef<\"nav\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Brand mark rendered on the left */\n logo?: React.ReactNode;\n /** Navigation links */\n links?: NavLink[];\n /** Locales offered by the built-in language menu */\n locales?: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: \"en\") */\n defaultValue?: string;\n /** Callback when the locale changes */\n onValueChange?: (code: string) => void;\n /** Primary call-to-action button */\n cta?: { label: string; href: string };\n /** Show a GitHub icon link */\n showGitHub?: boolean;\n /** Target of the GitHub icon link */\n githubUrl?: string;\n /** Pin the bar to the top of the viewport (default: true) */\n sticky?: boolean;\n /** Show flag emojis in the language menu (default: true) */\n showFlags?: boolean;\n /**\n * Component used to render internal links. Defaults to `\"a\"` so the\n * component works in any React app; pass your router's link (e.g.\n * `next/link`) to get client-side navigation.\n */\n linkComponent?: React.ElementType;\n}\n\nconst LOCALE_MAP: Record<string, { label: string; flag: string }> = {\n en: { label: \"English\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n fr: { label: \"Fran\\u00e7ais\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n es: { label: \"Espa\\u00f1ol\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n de: { label: \"Deutsch\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n ja: { label: \"\\u65e5\\u672c\\u8a9e\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n ko: { label: \"\\ud55c\\uad6d\\uc5b4\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n zh: { label: \"\\u4e2d\\u6587\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n ar: { label: \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n pt: { label: \"Portugu\\u00eas\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n it: { label: \"Italiano\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n nl: { label: \"Nederlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n ru: { label: \"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n pl: { label: \"Polski\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n tr: { label: \"T\\u00fcrk\\u00e7e\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n vi: { label: \"Ti\\u1ebfng Vi\\u1ec7t\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n th: { label: \"\\u0e44\\u0e17\\u0e22\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n id: { label: \"Bahasa Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n hi: { label: \"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n sv: { label: \"Svenska\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n da: { label: \"Dansk\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n fi: { label: \"Suomi\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n no: { label: \"Norsk\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n el: { label: \"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n he: { label: \"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n ro: { label: \"Rom\\u00e2n\\u0103\", flag: \"\\u{1F1F7}\\u{1F1F4}\" },\n hu: { label: \"Magyar\", flag: \"\\u{1F1ED}\\u{1F1FA}\" },\n cs: { label: \"\\u010ce\\u0161tina\", flag: \"\\u{1F1E8}\\u{1F1FF}\" },\n uk: {\n label: \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\",\n flag: \"\\u{1F1FA}\\u{1F1E6}\",\n },\n bg: {\n label: \"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\",\n flag: \"\\u{1F1E7}\\u{1F1EC}\",\n },\n hr: { label: \"Hrvatski\", flag: \"\\u{1F1ED}\\u{1F1F7}\" },\n sk: { label: \"Sloven\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1F0}\" },\n sl: { label: \"Sloven\\u0161\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1EE}\" },\n lt: { label: \"Lietuvi\\u0173\", flag: \"\\u{1F1F1}\\u{1F1F9}\" },\n lv: { label: \"Latvie\\u0161u\", flag: \"\\u{1F1F1}\\u{1F1FB}\" },\n et: { label: \"Eesti\", flag: \"\\u{1F1EA}\\u{1F1EA}\" },\n ca: { label: \"Catal\\u00e0\", flag: \"\\u{1F1E6}\\u{1F1F8}\" },\n af: { label: \"Afrikaans\", flag: \"\\u{1F1E6}\\u{1F1FF}\" },\n sw: { label: \"Kiswahili\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n};\n\nfunction getLocaleInfo(code: string) {\n return LOCALE_MAP[code] ?? { label: code.toUpperCase(), flag: \"\\u{1F310}\" };\n}\n\nexport const NavBar = React.forwardRef<HTMLElement, NavBarProps>(function NavBar(\n {\n logo,\n links = [],\n locales = [],\n value,\n defaultValue,\n onValueChange,\n cta,\n showGitHub = false,\n githubUrl = \"https://github.com/babelize/babelize-elements\",\n sticky = true,\n className,\n showFlags = true,\n linkComponent: Link = \"a\",\n ...rest\n },\n forwardedRef,\n) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"en\",\n onValueChange,\n );\n const [mobileOpen, setMobileOpen] = React.useState(false);\n // Which bar opened the language menu, rather than a single boolean. The desktop\n // and mobile bars are both always in the DOM — only CSS hides one — so a shared\n // boolean mounted two listboxes into the accessibility tree at once.\n const [langOpen, setLangOpen] = React.useState<\"desktop\" | \"mobile\" | null>(null);\n const langRef = React.useRef<HTMLDivElement>(null);\n const mobileLangRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const currentLocaleInfo = getLocaleInfo(locale);\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n const target = e.target as Node;\n // Both containers have to be checked. Guarding only the desktop one made a\n // mousedown inside the mobile dropdown count as \"outside\", which closed the\n // menu before the option's click event could land — so picking a language\n // on mobile did nothing at all.\n if (langRef.current?.contains(target) || mobileLangRef.current?.contains(target)) return;\n setLangOpen(null);\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n setLangOpen(null);\n setMobileOpen(false);\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n React.useEffect(() => {\n if (!mobileOpen) return;\n // Restore whatever the host page had set rather than assuming it was empty.\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mobileOpen]);\n\n const langButton = (\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"desktop\" ? null : \"desktop\")}\n className=\"flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium text-zinc-500 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"desktop\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && <span className=\"text-sm leading-none\">{currentLocaleInfo.flag}</span>}\n <span className=\"hidden sm:inline\">{currentLocaleInfo.label}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n langOpen === \"desktop\" && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n );\n\n const langDropdown = (\n <div\n className=\"absolute right-0 top-full z-50 mt-1.5 min-w-[170px] rounded-xl border border-zinc-200 bg-white py-1.5 shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {locales.map((item) => {\n const info = getLocaleInfo(item.code);\n const isActive = item.code === locale;\n return (\n <button\n key={item.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n setLocale(item.code);\n setLangOpen(null);\n }}\n className={cn(\n \"mx-1.5 flex w-[calc(100%-12px)] items-center gap-2.5 rounded-lg px-3 py-2 text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base leading-none\">{info.flag}</span>}\n <span className=\"flex-1\">{item.label ?? info.label}</span>\n {isActive && (\n <svg\n className=\"size-4 shrink-0 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n\n return (\n <nav\n ref={forwardedRef}\n {...rest}\n className={cn(\n \"z-50 w-full border-b border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900\",\n sticky && \"sticky top-0\",\n className,\n )}\n >\n {/* Desktop */}\n <div className=\"mx-auto hidden max-w-6xl items-center justify-between px-5 py-3 md:flex\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"px-3 py-1.5 text-sm transition-colors rounded-md no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={langRef} className=\"relative\">\n {langButton}\n {langOpen === \"desktop\" && langDropdown}\n </div>\n )}\n\n {showGitHub && (\n <a\n href={githubUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-label=\"GitHub\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n </a>\n )}\n\n {cta && (\n <Link\n href={cta.href}\n className=\"rounded-md px-3.5 py-1.5 text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n </div>\n\n {/* Mobile */}\n <div className=\"flex items-center justify-between px-4 py-3 md:hidden\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={mobileLangRef} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"mobile\" ? null : \"mobile\")}\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"mobile\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && (\n <span className=\"text-base leading-none\">{currentLocaleInfo.flag}</span>\n )}\n </button>\n {langOpen === \"mobile\" && langDropdown}\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileOpen}\n aria-controls={mobileOpen ? menuId : undefined}\n >\n {mobileOpen ? (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n {mobileOpen && (\n <div\n id={menuId}\n className=\"border-t border-zinc-200 bg-white px-4 py-3 md:hidden dark:border-zinc-800 dark:bg-zinc-900\"\n >\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className=\"block py-2.5 text-sm transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n {cta && (\n <Link\n href={cta.href}\n onClick={() => setMobileOpen(false)}\n className=\"mt-2 block rounded-md px-3.5 py-2 text-center text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n )}\n </nav>\n );\n});\n"],"mappings":"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","names":["React","LanguageSwitcher","_a","React","import_jsx_runtime","PhoneInput","React","import_jsx_runtime","NavBar","_a","_b"]}
|
package/dist/index.js
CHANGED
|
@@ -290,105 +290,112 @@ var LanguageSwitcher = React2.forwardRef(
|
|
|
290
290
|
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
291
291
|
}
|
|
292
292
|
}, [open]);
|
|
293
|
-
return /* @__PURE__ */ jsxs(
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
"
|
|
311
|
-
{
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
viewBox: "0 0 24 24",
|
|
318
|
-
stroke: "currentColor",
|
|
319
|
-
strokeWidth: 2,
|
|
320
|
-
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" })
|
|
321
|
-
}
|
|
322
|
-
)
|
|
323
|
-
]
|
|
324
|
-
}
|
|
325
|
-
),
|
|
326
|
-
open && /* @__PURE__ */ jsxs(
|
|
327
|
-
"div",
|
|
328
|
-
{
|
|
329
|
-
className: "absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950",
|
|
330
|
-
role: "listbox",
|
|
331
|
-
"aria-label": "Select language",
|
|
332
|
-
children: [
|
|
333
|
-
/* @__PURE__ */ jsx("div", { className: "border-b border-zinc-200 p-2 dark:border-zinc-800", children: /* @__PURE__ */ jsx(
|
|
334
|
-
"input",
|
|
335
|
-
{
|
|
336
|
-
ref: inputRef,
|
|
337
|
-
type: "text",
|
|
338
|
-
placeholder: "Search...",
|
|
339
|
-
"aria-label": "Search languages",
|
|
340
|
-
value: search,
|
|
341
|
-
onChange: (e) => setSearch(e.target.value),
|
|
342
|
-
className: "w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500"
|
|
343
|
-
}
|
|
344
|
-
) }),
|
|
345
|
-
/* @__PURE__ */ jsxs("div", { className: "max-h-60 overflow-y-auto p-1", children: [
|
|
346
|
-
filtered.map((l) => {
|
|
347
|
-
var _a2;
|
|
348
|
-
const isActive = l.code === locale;
|
|
349
|
-
const itemDir = l.rtl || isRtl(l.code) ? "rtl" : "ltr";
|
|
350
|
-
return /* @__PURE__ */ jsxs(
|
|
351
|
-
"button",
|
|
293
|
+
return /* @__PURE__ */ jsxs(
|
|
294
|
+
"div",
|
|
295
|
+
{
|
|
296
|
+
ref,
|
|
297
|
+
dir,
|
|
298
|
+
className: cn("relative inline-block text-sm z-50", className),
|
|
299
|
+
...rest,
|
|
300
|
+
children: [
|
|
301
|
+
/* @__PURE__ */ jsxs(
|
|
302
|
+
"button",
|
|
303
|
+
{
|
|
304
|
+
type: "button",
|
|
305
|
+
onClick: () => setOpen(!open),
|
|
306
|
+
className: cn(
|
|
307
|
+
"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50"
|
|
308
|
+
),
|
|
309
|
+
"aria-expanded": open,
|
|
310
|
+
"aria-haspopup": "listbox",
|
|
311
|
+
"aria-label": `Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`,
|
|
312
|
+
children: [
|
|
313
|
+
showFlags && /* @__PURE__ */ jsx("span", { className: "text-base", children: (_c = activeLocale == null ? void 0 : activeLocale.flag) != null ? _c : getFlag(locale) }),
|
|
314
|
+
/* @__PURE__ */ jsx("span", { children: activeLocale ? resolveLabel(activeLocale) : locale }),
|
|
315
|
+
/* @__PURE__ */ jsx(
|
|
316
|
+
"svg",
|
|
352
317
|
{
|
|
353
|
-
type: "button",
|
|
354
|
-
role: "option",
|
|
355
|
-
"aria-selected": isActive,
|
|
356
|
-
dir: itemDir,
|
|
357
|
-
onClick: () => {
|
|
358
|
-
setLocale(l.code);
|
|
359
|
-
setOpen(false);
|
|
360
|
-
setSearch("");
|
|
361
|
-
},
|
|
362
318
|
className: cn(
|
|
363
|
-
"
|
|
364
|
-
|
|
365
|
-
isActive ? "bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400" : "text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"
|
|
319
|
+
"size-4 text-zinc-500 transition-transform dark:text-zinc-400",
|
|
320
|
+
open && "rotate-180"
|
|
366
321
|
),
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
322
|
+
fill: "none",
|
|
323
|
+
viewBox: "0 0 24 24",
|
|
324
|
+
stroke: "currentColor",
|
|
325
|
+
strokeWidth: 2,
|
|
326
|
+
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" })
|
|
327
|
+
}
|
|
328
|
+
)
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
),
|
|
332
|
+
open && /* @__PURE__ */ jsxs(
|
|
333
|
+
"div",
|
|
334
|
+
{
|
|
335
|
+
className: "absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950",
|
|
336
|
+
role: "listbox",
|
|
337
|
+
"aria-label": "Select language",
|
|
338
|
+
children: [
|
|
339
|
+
/* @__PURE__ */ jsx("div", { className: "border-b border-zinc-200 p-2 dark:border-zinc-800", children: /* @__PURE__ */ jsx(
|
|
340
|
+
"input",
|
|
341
|
+
{
|
|
342
|
+
ref: inputRef,
|
|
343
|
+
type: "text",
|
|
344
|
+
placeholder: "Search...",
|
|
345
|
+
"aria-label": "Search languages",
|
|
346
|
+
value: search,
|
|
347
|
+
onChange: (e) => setSearch(e.target.value),
|
|
348
|
+
className: "w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500"
|
|
349
|
+
}
|
|
350
|
+
) }),
|
|
351
|
+
/* @__PURE__ */ jsxs("div", { className: "max-h-60 overflow-y-auto p-1", children: [
|
|
352
|
+
filtered.map((l) => {
|
|
353
|
+
var _a2;
|
|
354
|
+
const isActive = l.code === locale;
|
|
355
|
+
const itemDir = l.rtl || isRtl(l.code) ? "rtl" : "ltr";
|
|
356
|
+
return /* @__PURE__ */ jsxs(
|
|
357
|
+
"button",
|
|
358
|
+
{
|
|
359
|
+
type: "button",
|
|
360
|
+
role: "option",
|
|
361
|
+
"aria-selected": isActive,
|
|
362
|
+
dir: itemDir,
|
|
363
|
+
onClick: () => {
|
|
364
|
+
setLocale(l.code);
|
|
365
|
+
setOpen(false);
|
|
366
|
+
setSearch("");
|
|
367
|
+
},
|
|
368
|
+
className: cn(
|
|
369
|
+
"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors",
|
|
370
|
+
isActive ? "bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400" : "text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"
|
|
371
|
+
),
|
|
372
|
+
children: [
|
|
373
|
+
showFlags && /* @__PURE__ */ jsx("span", { className: "text-base", children: (_a2 = l.flag) != null ? _a2 : getFlag(l.code) }),
|
|
374
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children: resolveLabel(l) }),
|
|
375
|
+
isActive && /* @__PURE__ */ jsx(
|
|
376
|
+
"svg",
|
|
377
|
+
{
|
|
378
|
+
className: "size-4 text-emerald-600 dark:text-emerald-400",
|
|
379
|
+
fill: "none",
|
|
380
|
+
viewBox: "0 0 24 24",
|
|
381
|
+
stroke: "currentColor",
|
|
382
|
+
strokeWidth: 2,
|
|
383
|
+
children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" })
|
|
384
|
+
}
|
|
385
|
+
)
|
|
386
|
+
]
|
|
387
|
+
},
|
|
388
|
+
l.code
|
|
389
|
+
);
|
|
390
|
+
}),
|
|
391
|
+
filtered.length === 0 && /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400", children: "No results" })
|
|
392
|
+
] })
|
|
393
|
+
]
|
|
394
|
+
}
|
|
395
|
+
)
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
);
|
|
392
399
|
}
|
|
393
400
|
);
|
|
394
401
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/registry/components/language-switcher.tsx","../src/lib/use-controllable-state.ts","../src/registry/components/phone-input.tsx","../src/registry/components/navbar.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface LanguageSwitcherProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Array of available locales — only `code` is required */\n locales: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: first locale's code) */\n defaultValue?: string;\n /** Callback when locale changes */\n onValueChange?: (code: string) => void;\n /** Show flag emojis next to locale names (default: false) */\n showFlags?: boolean;\n /** Display labels in native language or English (default: \"english\") */\n label?: \"native\" | \"english\";\n}\n\nconst RTL_LOCALES = new Set([\"ar\", \"he\", \"fa\", \"ur\", \"ps\", \"sd\", \"yi\"]);\n\nfunction isRtl(code: string): boolean {\n const lang = code.split(\"-\")[0].toLowerCase();\n return RTL_LOCALES.has(lang);\n}\n\n/**\n * Maps ISO 639-1 language codes to flag emojis via regional indicator symbols.\n * Covers 80+ common languages. Override per-locale with the `flag` prop.\n */\nconst LANG_TO_FLAG: Record<string, string> = {\n en: \"\\u{1F1FA}\\u{1F1F8}\",\n fr: \"\\u{1F1EB}\\u{1F1F7}\",\n es: \"\\u{1F1EA}\\u{1F1F8}\",\n de: \"\\u{1F1E9}\\u{1F1EA}\",\n ja: \"\\u{1F1EF}\\u{1F1F5}\",\n ko: \"\\u{1F1F0}\\u{1F1F7}\",\n zh: \"\\u{1F1E8}\\u{1F1F3}\",\n ar: \"\\u{1F1F8}\\u{1F1E6}\",\n pt: \"\\u{1F1E7}\\u{1F1F7}\",\n it: \"\\u{1F1EE}\\u{1F1F9}\",\n nl: \"\\u{1F1F3}\\u{1F1F1}\",\n ru: \"\\u{1F1F7}\\u{1F1FA}\",\n pl: \"\\u{1F1F5}\\u{1F1F1}\",\n tr: \"\\u{1F1F9}\\u{1F1F7}\",\n vi: \"\\u{1F1FB}\\u{1F1F3}\",\n th: \"\\u{1F1F9}\\u{1F1ED}\",\n id: \"\\u{1F1EE}\\u{1F1E9}\",\n hi: \"\\u{1F1EE}\\u{1F1F3}\",\n bn: \"\\u{1F1E7}\\u{1F1E9}\",\n uk: \"\\u{1F1FA}\\u{1F1E6}\",\n cs: \"\\u{1F1E8}\\u{1F1FF}\",\n sv: \"\\u{1F1F8}\\u{1F1EA}\",\n da: \"\\u{1F1E9}\\u{1F1F0}\",\n fi: \"\\u{1F1EB}\\u{1F1EE}\",\n no: \"\\u{1F1F3}\\u{1F1F4}\",\n nb: \"\\u{1F1F3}\\u{1F1F4}\",\n nn: \"\\u{1F1F3}\\u{1F1F4}\",\n el: \"\\u{1F1EC}\\u{1F1F7}\",\n he: \"\\u{1F1EE}\\u{1F1F1}\",\n fa: \"\\u{1F1EE}\\u{1F1F7}\",\n ro: \"\\u{1F1F7}\\u{1F1F4}\",\n hu: \"\\u{1F1ED}\\u{1F1FA}\",\n sk: \"\\u{1F1F8}\\u{1F1F0}\",\n bg: \"\\u{1F1E7}\\u{1F1EC}\",\n hr: \"\\u{1F1ED}\\u{1F1F7}\",\n sr: \"\\u{1F1F7}\\u{1F1F8}\",\n sl: \"\\u{1F1F8}\\u{1F1EE}\",\n lt: \"\\u{1F1F1}\\u{1F1F9}\",\n lv: \"\\u{1F1F1}\\u{1F1FB}\",\n et: \"\\u{1F1EA}\\u{1F1EA}\",\n ga: \"\\u{1F1EE}\\u{1F1EA}\",\n mt: \"\\u{1F1F2}\\u{1F1F9}\",\n ca: \"\\u{1F1E6}\\u{1F1F8}\",\n eu: \"\\u{1F1E6}\\u{1F1F7}\",\n gl: \"\\u{1F1E6}\\u{1F1F7}\",\n cy: \"\\u{1F1FF}\\u{1F1F4}\",\n mk: \"\\u{1F1F2}\\u{1F1F0}\",\n sq: \"\\u{1F1E6}\\u{1F1F1}\",\n bs: \"\\u{1F1E7}\\u{1F1F8}\",\n is: \"\\u{1F1EE}\\u{1F1F8}\",\n fo: \"\\u{1F1EB}\\u{1F1F4}\",\n sw: \"\\u{1F1F9}\\u{1F1FF}\",\n am: \"\\u{1F1E6}\\u{1F1F2}\",\n ne: \"\\u{1F1F3}\\u{1F1F5}\",\n si: \"\\u{1F1F8}\\u{1F1F0}\",\n my: \"\\u{1F1F2}\\u{1F1E2}\",\n km: \"\\u{1F1F0}\\u{1F1ED}\",\n lo: \"\\u{1F1F1}\\u{1F1E6}\",\n ka: \"\\u{1F1EC}\\u{1F1EA}\",\n hy: \"\\u{1F1E6}\\u{1F1F2}\",\n kk: \"\\u{1F1F0}\\u{1F1F0}\",\n uz: \"\\u{1F1FA}\\u{1F1FF}\",\n mn: \"\\u{1F1F2}\\u{1F1F3}\",\n ps: \"\\u{1F1F5}\\u{1F1F8}\",\n ur: \"\\u{1F1FA}\\u{1F1F2}\",\n sd: \"\\u{1F1F8}\\u{1F1E6}\",\n ml: \"\\u{1F1F2}\\u{1F1F1}\",\n ta: \"\\u{1F1F9}\\u{1F1F1}\",\n te: \"\\u{1F1F9}\\u{1F1EF}\",\n kn: \"\\u{1F1EE}\\u{1F1F3}\",\n mr: \"\\u{1F1F2}\\u{1F1F7}\",\n gu: \"\\u{1F1EE}\\u{1F1F3}\",\n pa: \"\\u{1F1F5}\\u{1F1E6}\",\n or: \"\\u{1F1F3}\\u{1F1F4}\",\n as: \"\\u{1F1E6}\\u{1F1F8}\",\n yi: \"\\u{1F1FE}\\u{1F1EA}\",\n yo: \"\\u{1F1FE}\\u{1F1F3}\",\n ig: \"\\u{1F1EE}\\u{1F1EC}\",\n zu: \"\\u{1F1FF}\\u{1F1F3}\",\n af: \"\\u{1F1E6}\\u{1F1FF}\",\n ha: \"\\u{1F1ED}\\u{1F1F2}\",\n tl: \"\\u{1F1F5}\\u{1F1ED}\",\n mg: \"\\u{1F1F2}\\u{1F1EC}\",\n mi: \"\\u{1F1F3}\\u{1F1FF}\",\n sm: \"\\u{1F1F8}\\u{1F1F4}\",\n fj: \"\\u{1F1EB}\\u{1F1EF}\",\n to: \"\\u{1F1F9}\\u{1F1F4}\",\n haw: \"\\u{1F1ED}\\u{1F1FC}\",\n la: \"\\u{1F1F1}\\u{1F1E6}\",\n eo: \"\\u{1F1EA}\\u{1F1F7}\",\n};\n\nfunction getFlag(code: string): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n return LANG_TO_FLAG[lang] ?? \"\\u{1F310}\";\n}\n\n/**\n * Built-in language names: native form and English form.\n */\nconst LANG_NAMES: Record<string, [native: string, english: string]> = {\n en: [\"English\", \"English\"],\n fr: [\"Fran\\u00e7ais\", \"French\"],\n es: [\"Espa\\u00f1ol\", \"Spanish\"],\n de: [\"Deutsch\", \"German\"],\n ja: [\"\\u65e5\\u672c\\u8a9e\", \"Japanese\"],\n ko: [\"\\ud55c\\uad6d\\uc5b4\", \"Korean\"],\n zh: [\"\\u4e2d\\u6587\", \"Chinese\"],\n ar: [\"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", \"Arabic\"],\n pt: [\"Portugu\\u00eas\", \"Portuguese\"],\n it: [\"Italiano\", \"Italian\"],\n nl: [\"Nederlands\", \"Dutch\"],\n ru: [\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"Russian\"],\n pl: [\"Polski\", \"Polish\"],\n tr: [\"T\\u00fcrk\\u00e7e\", \"Turkish\"],\n vi: [\"Ti\\u1ebfng Vi\\u1ec7t\", \"Vietnamese\"],\n th: [\"\\u0e44\\u0e17\\u0e22\", \"Thai\"],\n id: [\"Bahasa Indonesia\", \"Indonesian\"],\n hi: [\"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", \"Hindi\"],\n bn: [\"\\u09ac\\u09be\\u0982\\u09b2\\u09be\", \"Bengali\"],\n uk: [\"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"Ukrainian\"],\n cs: [\"\\u010ce\\u0161tina\", \"Czech\"],\n sv: [\"Svenska\", \"Swedish\"],\n da: [\"Dansk\", \"Danish\"],\n fi: [\"Suomi\", \"Finnish\"],\n no: [\"Norsk\", \"Norwegian\"],\n nb: [\"Norsk bokm\\u00e5l\", \"Norwegian Bokm\\u00e5l\"],\n nn: [\"Nynorsk\", \"Norwegian Nynorsk\"],\n el: [\"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", \"Greek\"],\n he: [\"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", \"Hebrew\"],\n fa: [\"\\u0641\\u0627\\u0631\\u0633\\u06cc\", \"Persian\"],\n ro: [\"Rom\\u00e2n\\u0103\", \"Romanian\"],\n hu: [\"Magyar\", \"Hungarian\"],\n sk: [\"Sloven\\u010dina\", \"Slovak\"],\n bg: [\"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\", \"Bulgarian\"],\n hr: [\"Hrvatski\", \"Croatian\"],\n sr: [\"\\u0421\\u0440\\u043f\\u0441\\u043a\\u0438\", \"Serbian\"],\n sl: [\"Sloven\\u0161\\u010dina\", \"Slovenian\"],\n lt: [\"Lietuvi\\u0173\", \"Lithuanian\"],\n lv: [\"Latvie\\u0161u\", \"Latvian\"],\n et: [\"Eesti\", \"Estonian\"],\n ga: [\"Gaeilge\", \"Irish\"],\n mt: [\"Malti\", \"Maltese\"],\n ca: [\"Catal\\u00e0\", \"Catalan\"],\n eu: [\"Euskara\", \"Basque\"],\n gl: [\"Galego\", \"Galician\"],\n cy: [\"Cymraeg\", \"Welsh\"],\n mk: [\"\\u041c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438\", \"Macedonian\"],\n sq: [\"Shqip\", \"Albanian\"],\n bs: [\"Bosanski\", \"Bosnian\"],\n is: [\"\\u00cdslenska\", \"Icelandic\"],\n fo: [\"F\\u00f8royskt\", \"Faroese\"],\n sw: [\"Kiswahili\", \"Swahili\"],\n am: [\"\\u12a0\\u12cd\\u1295\\u1348\", \"Amharic\"],\n ne: [\"\\u0928\\u0947\\u092a\\u093e\\u0932\\u0940\", \"Nepali\"],\n si: [\"\\u0dc3\\u0dd2\\u0d82\\u0dc4\\u0dbd\", \"Sinhala\"],\n my: [\"\\u1019\\u103c\\u1014\\u103a\\u1019\\u102c\", \"Burmese\"],\n km: [\"\\u1780\\u1798\\u17d2\\u1796\\u17c7\\u1798\", \"Khmer\"],\n lo: [\"\\u0ea5\\u0e27\", \"Lao\"],\n ka: [\"\\u10e5\\u10d0\\u10e0\\u10d7\\u10e3\\u10da\\u10d8\", \"Georgian\"],\n hy: [\"\\u0540\\u0561\\u0575\\u0565\\u10e0\\u0565\\u0576\", \"Armenian\"],\n kk: [\"\\u049a\\u0430\\u0437\\u0430\\u049b\", \"Kazakh\"],\n uz: [\"O\\u2019zbek\", \"Uzbek\"],\n mn: [\"\\u041c\\u043e\\u043d\\u0433\\u043e\\u043b\", \"Mongolian\"],\n ps: [\"\\u067e\\u069a\\u062a\\u0648\", \"Pashto\"],\n ur: [\"\\u0627\\u0631\\u062f\\u0648\", \"Urdu\"],\n sd: [\"\\u0773\\u0647\\u0646\\u068c\\u064a\", \"Sindhi\"],\n ml: [\"\\u0d2e\\u0d32\\u0d2f\\u0d3e\\u0d33\\u0d02\", \"Malayalam\"],\n ta: [\"\\u0ba4\\u0bae\\u0bbf\\u0bb4\\u0bcd\", \"Tamil\"],\n te: [\"\\u0c24\\u0c46\\u0c32\\u0c41\\u0c17\\u0c41\", \"Telugu\"],\n kn: [\"\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1\", \"Kannada\"],\n mr: [\"\\u092e\\u0930\\u093e\\u0920\\u0940\", \"Marathi\"],\n gu: [\"\\u0a97\\u0ac1\\u0a9c\\u0ab0\\u0abe\\u0aa4\\u0ac0\", \"Gujarati\"],\n pa: [\"\\u0a2a\\u0a70\\u0a1c\\u0a3e\\u0a2c\\u0a40\", \"Punjabi\"],\n or: [\"\\u0b13\\u0b21\\u0b3c\\u0b3f\\u0b06\", \"Odia\"],\n as: [\"\\u0985\\u09b8\\u09ae\\u09c0\\u09af\\u09bc\\u09be\", \"Assamese\"],\n yi: [\"\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9\", \"Yiddish\"],\n yo: [\"Yor\\u00f9b\\u00e1\", \"Yoruba\"],\n ig: [\"Igbo\", \"Igbo\"],\n zu: [\"isiZulu\", \"Zulu\"],\n af: [\"Afrikaans\", \"Afrikaans\"],\n ha: [\"Hausa\", \"Hausa\"],\n tl: [\"Filipino\", \"Filipino\"],\n mg: [\"Malagasy\", \"Malagasy\"],\n mi: [\"Te Reo M\\u0101ori\", \"M\\u0101ori\"],\n sm: [\"Gagana Samoa\", \"Samoan\"],\n to: [\"Lea Faka-Tonga\", \"Tongan\"],\n fj: [\"Na Vosa Vakaviti\", \"Fijian\"],\n haw: [\"\\u02bb\\u014clelo Hawai\\u02bbi\", \"Hawaiian\"],\n la: [\"Latina\", \"Latin\"],\n eo: [\"Esperanto\", \"Esperanto\"],\n};\n\nfunction getLabel(code: string, mode: \"native\" | \"english\"): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n const names = LANG_NAMES[lang];\n if (!names) return code;\n return mode === \"native\" ? names[0] : names[1];\n}\n\nexport const LanguageSwitcher = React.forwardRef<HTMLDivElement, LanguageSwitcherProps>(\n function LanguageSwitcher(\n {\n locales,\n value,\n defaultValue,\n onValueChange,\n showFlags = false,\n label: labelMode = \"english\",\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"\",\n onValueChange,\n );\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => ref.current as HTMLDivElement);\n\n const resolveLabel = (l: Locale) => l.label ?? getLabel(l.code, labelMode);\n const activeLocale = locales.find((l) => l.code === locale);\n\n const filtered = locales.filter(\n (l) =>\n resolveLabel(l).toLowerCase().includes(search.toLowerCase()) ||\n l.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n const dir = isRtl(locale) ? \"rtl\" : \"ltr\";\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm z-50\", className)} {...rest}>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={cn(\n \"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50\",\n dir === \"rtl\" && \"flex-row-reverse\",\n )}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`}\n >\n {showFlags && <span className=\"text-base\">{activeLocale?.flag ?? getFlag(locale)}</span>}\n <span>{activeLocale ? resolveLabel(activeLocale) : locale}</span>\n <svg\n className={cn(\n \"size-4 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search...\"\n aria-label=\"Search languages\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((l) => {\n const isActive = l.code === locale;\n const itemDir = l.rtl || isRtl(l.code) ? \"rtl\" : \"ltr\";\n return (\n <button\n key={l.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n dir={itemDir}\n onClick={() => {\n setLocale(l.code);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n itemDir === \"rtl\" && \"flex-row-reverse text-right\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base\">{l.flag ?? getFlag(l.code)}</span>}\n <span className=\"flex-1\">{resolveLabel(l)}</span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">No results</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n","import * as React from \"react\";\n\n/**\n * Supports both controlled and uncontrolled usage from a single hook.\n *\n * When `value` is `undefined` the component owns its state and seeds it from\n * `defaultValue`. When `value` is provided the parent owns it and every render\n * reflects the prop, so external changes propagate.\n */\nexport function useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const current = isControlled ? value : uncontrolled;\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\n\nexport interface Country {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** E.164 dial prefix, including the leading \"+\" */\n dialCode: string;\n /** English country name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps extends Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n> {\n /** Phone number. Provide this to control the component. */\n value?: string;\n /** Initial phone number when uncontrolled */\n defaultValue?: string;\n /** Callback when the number or the selected country changes */\n onValueChange?: (phone: string, country: Country) => void;\n /** ISO 3166-1 alpha-2 code of the initially selected country (default: \"US\") */\n defaultCountry?: string;\n /** Show the flag emoji beside the dial code (default: true) */\n showFlags?: boolean;\n /** Accessible label for the field (default: \"Phone number\") */\n label?: string;\n}\n\nconst COUNTRIES: Country[] = [\n { code: \"US\", dialCode: \"+1\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"GB\", dialCode: \"+44\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"IN\", dialCode: \"+91\", name: \"India\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n { code: \"CA\", dialCode: \"+1\", name: \"Canada\", flag: \"\\u{1F1E8}\\u{1F1E6}\" },\n { code: \"AU\", dialCode: \"+61\", name: \"Australia\", flag: \"\\u{1F1E6}\\u{1F1FA}\" },\n { code: \"DE\", dialCode: \"+49\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"FR\", dialCode: \"+33\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"JP\", dialCode: \"+81\", name: \"Japan\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n { code: \"BR\", dialCode: \"+55\", name: \"Brazil\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n { code: \"CN\", dialCode: \"+86\", name: \"China\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n { code: \"RU\", dialCode: \"+7\", name: \"Russia\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n { code: \"KR\", dialCode: \"+82\", name: \"South Korea\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n { code: \"IT\", dialCode: \"+39\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"ES\", dialCode: \"+34\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"MX\", dialCode: \"+52\", name: \"Mexico\", flag: \"\\u{1F1F2}\\u{1F1FD}\" },\n { code: \"NL\", dialCode: \"+31\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"SE\", dialCode: \"+46\", name: \"Sweden\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n { code: \"CH\", dialCode: \"+41\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"PL\", dialCode: \"+48\", name: \"Poland\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n { code: \"AR\", dialCode: \"+54\", name: \"Argentina\", flag: \"\\u{1F1E6}\\u{1F1F7}\" },\n { code: \"ZA\", dialCode: \"+27\", name: \"South Africa\", flag: \"\\u{1F1FF}\\u{1F1E6}\" },\n { code: \"NG\", dialCode: \"+234\", name: \"Nigeria\", flag: \"\\u{1F1F3}\\u{1F1EC}\" },\n { code: \"EG\", dialCode: \"+20\", name: \"Egypt\", flag: \"\\u{1F1EA}\\u{1F1EC}\" },\n { code: \"SA\", dialCode: \"+966\", name: \"Saudi Arabia\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n { code: \"AE\", dialCode: \"+971\", name: \"United Arab Emirates\", flag: \"\\u{1F1E6}\\u{1F1EA}\" },\n { code: \"SG\", dialCode: \"+65\", name: \"Singapore\", flag: \"\\u{1F1F8}\\u{1F1EC}\" },\n { code: \"MY\", dialCode: \"+60\", name: \"Malaysia\", flag: \"\\u{1F1F2}\\u{1F1FE}\" },\n { code: \"TH\", dialCode: \"+66\", name: \"Thailand\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n { code: \"PH\", dialCode: \"+63\", name: \"Philippines\", flag: \"\\u{1F1F5}\\u{1F1ED}\" },\n { code: \"ID\", dialCode: \"+62\", name: \"Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n { code: \"VN\", dialCode: \"+84\", name: \"Vietnam\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n { code: \"TR\", dialCode: \"+90\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n { code: \"PK\", dialCode: \"+92\", name: \"Pakistan\", flag: \"\\u{1F1F5}\\u{1F1F0}\" },\n { code: \"BD\", dialCode: \"+880\", name: \"Bangladesh\", flag: \"\\u{1F1E7}\\u{1F1E9}\" },\n { code: \"KE\", dialCode: \"+254\", name: \"Kenya\", flag: \"\\u{1F1F0}\\u{1F1EA}\" },\n { code: \"GH\", dialCode: \"+233\", name: \"Ghana\", flag: \"\\u{1F1EC}\\u{1F1ED}\" },\n { code: \"ET\", dialCode: \"+251\", name: \"Ethiopia\", flag: \"\\u{1F1EA}\\u{1F1F9}\" },\n { code: \"TZ\", dialCode: \"+255\", name: \"Tanzania\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n { code: \"IL\", dialCode: \"+972\", name: \"Israel\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n { code: \"HK\", dialCode: \"+852\", name: \"Hong Kong\", flag: \"\\u{1F1ED}\\u{1F1F0}\" },\n { code: \"NZ\", dialCode: \"+64\", name: \"New Zealand\", flag: \"\\u{1F1F3}\\u{1F1FF}\" },\n { code: \"IE\", dialCode: \"+353\", name: \"Ireland\", flag: \"\\u{1F1EE}\\u{1F1EA}\" },\n { code: \"PT\", dialCode: \"+351\", name: \"Portugal\", flag: \"\\u{1F1F5}\\u{1F1F9}\" },\n { code: \"CL\", dialCode: \"+56\", name: \"Chile\", flag: \"\\u{1F1E8}\\u{1F1F1}\" },\n { code: \"CO\", dialCode: \"+57\", name: \"Colombia\", flag: \"\\u{1F1E8}\\u{1F1F4}\" },\n { code: \"FI\", dialCode: \"+358\", name: \"Finland\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n { code: \"NO\", dialCode: \"+47\", name: \"Norway\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n { code: \"DK\", dialCode: \"+45\", name: \"Denmark\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n { code: \"AT\", dialCode: \"+43\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"BE\", dialCode: \"+32\", name: \"Belgium\", flag: \"\\u{1F1E7}\\u{1F1EA}\" },\n];\n\nfunction getCountryByCode(code: string): Country | undefined {\n return COUNTRIES.find((c) => c.code === code.toUpperCase());\n}\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n {\n value,\n defaultValue,\n onValueChange,\n defaultCountry = \"US\",\n placeholder = \"Phone number\",\n disabled = false,\n className,\n showFlags = true,\n label = \"Phone number\",\n ...rest\n },\n forwardedRef,\n) {\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(\n () => getCountryByCode(defaultCountry) ?? COUNTRIES[0],\n );\n const [inputValue, setInputValue] = useControllableState(value, defaultValue ?? \"\", undefined);\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // The country search box needs its own ref. Sharing `inputRef` meant the search\n // field overwrote it whenever the dropdown opened, which pointed the forwarded\n // ref at the wrong element and sent focus to a node that was about to unmount.\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n\n const filtered = COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(search.toLowerCase()) ||\n c.dialCode.includes(search) ||\n c.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) searchRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n const handleCountrySelect = (country: Country) => {\n setSelectedCountry(country);\n setOpen(false);\n setSearch(\"\");\n onValueChange?.(inputValue, country);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onValueChange?.(newValue, selectedCountry);\n };\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm\", className)}>\n <div\n className={cn(\n \"flex items-center overflow-hidden rounded-lg border transition-colors\",\n \"bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(!open)}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-1.5 border-r px-3 py-2.5 text-sm transition-colors\",\n \"border-zinc-200 text-zinc-900 hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label=\"Select country\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {showFlags && <span className=\"text-base leading-none\">{selectedCountry.flag}</span>}\n <span className=\"font-mono text-xs\">{selectedCountry.dialCode}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <input\n ref={inputRef}\n type=\"tel\"\n value={inputValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={disabled}\n {...rest}\n className={cn(\n \"flex-1 bg-transparent px-3 py-2.5 text-sm outline-none placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\n \"text-zinc-900 dark:text-zinc-100\",\n \"focus:ring-1 focus:ring-emerald-500/50\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label={label}\n />\n </div>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[280px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select country\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={searchRef}\n type=\"text\"\n placeholder=\"Search countries...\"\n aria-label=\"Search countries\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((country) => {\n const isActive = country.code === selectedCountry.code;\n return (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => handleCountrySelect(country)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"flex-1\">{country.name}</span>\n <span className=\"font-mono text-xs text-zinc-500 dark:text-zinc-400\">\n {country.dialCode}\n </span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">\n No countries found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nexport { COUNTRIES };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface NavLink {\n /** Visible link text */\n label: string;\n /** Destination passed to `linkComponent` as `href` */\n href: string;\n}\n\nexport interface NavBarProps extends Omit<\n React.ComponentPropsWithoutRef<\"nav\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Brand mark rendered on the left */\n logo?: React.ReactNode;\n /** Navigation links */\n links?: NavLink[];\n /** Locales offered by the built-in language menu */\n locales?: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: \"en\") */\n defaultValue?: string;\n /** Callback when the locale changes */\n onValueChange?: (code: string) => void;\n /** Primary call-to-action button */\n cta?: { label: string; href: string };\n /** Show a GitHub icon link */\n showGitHub?: boolean;\n /** Target of the GitHub icon link */\n githubUrl?: string;\n /** Pin the bar to the top of the viewport (default: true) */\n sticky?: boolean;\n /** Show flag emojis in the language menu (default: true) */\n showFlags?: boolean;\n /**\n * Component used to render internal links. Defaults to `\"a\"` so the\n * component works in any React app; pass your router's link (e.g.\n * `next/link`) to get client-side navigation.\n */\n linkComponent?: React.ElementType;\n}\n\nconst LOCALE_MAP: Record<string, { label: string; flag: string }> = {\n en: { label: \"English\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n fr: { label: \"Fran\\u00e7ais\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n es: { label: \"Espa\\u00f1ol\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n de: { label: \"Deutsch\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n ja: { label: \"\\u65e5\\u672c\\u8a9e\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n ko: { label: \"\\ud55c\\uad6d\\uc5b4\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n zh: { label: \"\\u4e2d\\u6587\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n ar: { label: \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n pt: { label: \"Portugu\\u00eas\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n it: { label: \"Italiano\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n nl: { label: \"Nederlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n ru: { label: \"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n pl: { label: \"Polski\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n tr: { label: \"T\\u00fcrk\\u00e7e\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n vi: { label: \"Ti\\u1ebfng Vi\\u1ec7t\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n th: { label: \"\\u0e44\\u0e17\\u0e22\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n id: { label: \"Bahasa Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n hi: { label: \"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n sv: { label: \"Svenska\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n da: { label: \"Dansk\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n fi: { label: \"Suomi\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n no: { label: \"Norsk\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n el: { label: \"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n he: { label: \"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n ro: { label: \"Rom\\u00e2n\\u0103\", flag: \"\\u{1F1F7}\\u{1F1F4}\" },\n hu: { label: \"Magyar\", flag: \"\\u{1F1ED}\\u{1F1FA}\" },\n cs: { label: \"\\u010ce\\u0161tina\", flag: \"\\u{1F1E8}\\u{1F1FF}\" },\n uk: {\n label: \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\",\n flag: \"\\u{1F1FA}\\u{1F1E6}\",\n },\n bg: {\n label: \"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\",\n flag: \"\\u{1F1E7}\\u{1F1EC}\",\n },\n hr: { label: \"Hrvatski\", flag: \"\\u{1F1ED}\\u{1F1F7}\" },\n sk: { label: \"Sloven\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1F0}\" },\n sl: { label: \"Sloven\\u0161\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1EE}\" },\n lt: { label: \"Lietuvi\\u0173\", flag: \"\\u{1F1F1}\\u{1F1F9}\" },\n lv: { label: \"Latvie\\u0161u\", flag: \"\\u{1F1F1}\\u{1F1FB}\" },\n et: { label: \"Eesti\", flag: \"\\u{1F1EA}\\u{1F1EA}\" },\n ca: { label: \"Catal\\u00e0\", flag: \"\\u{1F1E6}\\u{1F1F8}\" },\n af: { label: \"Afrikaans\", flag: \"\\u{1F1E6}\\u{1F1FF}\" },\n sw: { label: \"Kiswahili\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n};\n\nfunction getLocaleInfo(code: string) {\n return LOCALE_MAP[code] ?? { label: code.toUpperCase(), flag: \"\\u{1F310}\" };\n}\n\nexport const NavBar = React.forwardRef<HTMLElement, NavBarProps>(function NavBar(\n {\n logo,\n links = [],\n locales = [],\n value,\n defaultValue,\n onValueChange,\n cta,\n showGitHub = false,\n githubUrl = \"https://github.com/babelize/babelize-elements\",\n sticky = true,\n className,\n showFlags = true,\n linkComponent: Link = \"a\",\n ...rest\n },\n forwardedRef,\n) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"en\",\n onValueChange,\n );\n const [mobileOpen, setMobileOpen] = React.useState(false);\n // Which bar opened the language menu, rather than a single boolean. The desktop\n // and mobile bars are both always in the DOM — only CSS hides one — so a shared\n // boolean mounted two listboxes into the accessibility tree at once.\n const [langOpen, setLangOpen] = React.useState<\"desktop\" | \"mobile\" | null>(null);\n const langRef = React.useRef<HTMLDivElement>(null);\n const mobileLangRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const currentLocaleInfo = getLocaleInfo(locale);\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n const target = e.target as Node;\n // Both containers have to be checked. Guarding only the desktop one made a\n // mousedown inside the mobile dropdown count as \"outside\", which closed the\n // menu before the option's click event could land — so picking a language\n // on mobile did nothing at all.\n if (langRef.current?.contains(target) || mobileLangRef.current?.contains(target)) return;\n setLangOpen(null);\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n setLangOpen(null);\n setMobileOpen(false);\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n React.useEffect(() => {\n if (!mobileOpen) return;\n // Restore whatever the host page had set rather than assuming it was empty.\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mobileOpen]);\n\n const langButton = (\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"desktop\" ? null : \"desktop\")}\n className=\"flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium text-zinc-500 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"desktop\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && <span className=\"text-sm leading-none\">{currentLocaleInfo.flag}</span>}\n <span className=\"hidden sm:inline\">{currentLocaleInfo.label}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n langOpen === \"desktop\" && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n );\n\n const langDropdown = (\n <div\n className=\"absolute right-0 top-full z-50 mt-1.5 min-w-[170px] rounded-xl border border-zinc-200 bg-white py-1.5 shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {locales.map((item) => {\n const info = getLocaleInfo(item.code);\n const isActive = item.code === locale;\n return (\n <button\n key={item.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n setLocale(item.code);\n setLangOpen(null);\n }}\n className={cn(\n \"mx-1.5 flex w-[calc(100%-12px)] items-center gap-2.5 rounded-lg px-3 py-2 text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base leading-none\">{info.flag}</span>}\n <span className=\"flex-1\">{item.label ?? info.label}</span>\n {isActive && (\n <svg\n className=\"size-4 shrink-0 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n\n return (\n <nav\n ref={forwardedRef}\n {...rest}\n className={cn(\n \"z-50 w-full border-b border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900\",\n sticky && \"sticky top-0\",\n className,\n )}\n >\n {/* Desktop */}\n <div className=\"mx-auto hidden max-w-6xl items-center justify-between px-5 py-3 md:flex\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"px-3 py-1.5 text-sm transition-colors rounded-md no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={langRef} className=\"relative\">\n {langButton}\n {langOpen === \"desktop\" && langDropdown}\n </div>\n )}\n\n {showGitHub && (\n <a\n href={githubUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-label=\"GitHub\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n </a>\n )}\n\n {cta && (\n <Link\n href={cta.href}\n className=\"rounded-md px-3.5 py-1.5 text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n </div>\n\n {/* Mobile */}\n <div className=\"flex items-center justify-between px-4 py-3 md:hidden\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={mobileLangRef} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"mobile\" ? null : \"mobile\")}\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"mobile\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && (\n <span className=\"text-base leading-none\">{currentLocaleInfo.flag}</span>\n )}\n </button>\n {langOpen === \"mobile\" && langDropdown}\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileOpen}\n aria-controls={mobileOpen ? menuId : undefined}\n >\n {mobileOpen ? (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n {mobileOpen && (\n <div\n id={menuId}\n className=\"border-t border-zinc-200 bg-white px-4 py-3 md:hidden dark:border-zinc-800 dark:bg-zinc-900\"\n >\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className=\"block py-2.5 text-sm transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n {cta && (\n <Link\n href={cta.href}\n onClick={() => setMobileOpen(false)}\n className=\"mt-2 block rounded-md px-3.5 py-2 text-center text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n )}\n </nav>\n );\n});\n"],"mappings":"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","names":["React","LanguageSwitcher","_a","React","jsx","jsxs","PhoneInput","React","jsx","jsxs","NavBar","_a","_b"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/registry/components/language-switcher.tsx","../src/lib/use-controllable-state.ts","../src/registry/components/phone-input.tsx","../src/registry/components/navbar.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface LanguageSwitcherProps extends Omit<\n React.ComponentPropsWithoutRef<\"div\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Array of available locales — only `code` is required */\n locales: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: first locale's code) */\n defaultValue?: string;\n /** Callback when locale changes */\n onValueChange?: (code: string) => void;\n /** Show flag emojis next to locale names (default: false) */\n showFlags?: boolean;\n /** Display labels in native language or English (default: \"english\") */\n label?: \"native\" | \"english\";\n}\n\nconst RTL_LOCALES = new Set([\"ar\", \"he\", \"fa\", \"ur\", \"ps\", \"sd\", \"yi\"]);\n\nfunction isRtl(code: string): boolean {\n const lang = code.split(\"-\")[0].toLowerCase();\n return RTL_LOCALES.has(lang);\n}\n\n/**\n * Maps ISO 639-1 language codes to flag emojis via regional indicator symbols.\n * Covers 80+ common languages. Override per-locale with the `flag` prop.\n */\nconst LANG_TO_FLAG: Record<string, string> = {\n en: \"\\u{1F1FA}\\u{1F1F8}\",\n fr: \"\\u{1F1EB}\\u{1F1F7}\",\n es: \"\\u{1F1EA}\\u{1F1F8}\",\n de: \"\\u{1F1E9}\\u{1F1EA}\",\n ja: \"\\u{1F1EF}\\u{1F1F5}\",\n ko: \"\\u{1F1F0}\\u{1F1F7}\",\n zh: \"\\u{1F1E8}\\u{1F1F3}\",\n ar: \"\\u{1F1F8}\\u{1F1E6}\",\n pt: \"\\u{1F1E7}\\u{1F1F7}\",\n it: \"\\u{1F1EE}\\u{1F1F9}\",\n nl: \"\\u{1F1F3}\\u{1F1F1}\",\n ru: \"\\u{1F1F7}\\u{1F1FA}\",\n pl: \"\\u{1F1F5}\\u{1F1F1}\",\n tr: \"\\u{1F1F9}\\u{1F1F7}\",\n vi: \"\\u{1F1FB}\\u{1F1F3}\",\n th: \"\\u{1F1F9}\\u{1F1ED}\",\n id: \"\\u{1F1EE}\\u{1F1E9}\",\n hi: \"\\u{1F1EE}\\u{1F1F3}\",\n bn: \"\\u{1F1E7}\\u{1F1E9}\",\n uk: \"\\u{1F1FA}\\u{1F1E6}\",\n cs: \"\\u{1F1E8}\\u{1F1FF}\",\n sv: \"\\u{1F1F8}\\u{1F1EA}\",\n da: \"\\u{1F1E9}\\u{1F1F0}\",\n fi: \"\\u{1F1EB}\\u{1F1EE}\",\n no: \"\\u{1F1F3}\\u{1F1F4}\",\n nb: \"\\u{1F1F3}\\u{1F1F4}\",\n nn: \"\\u{1F1F3}\\u{1F1F4}\",\n el: \"\\u{1F1EC}\\u{1F1F7}\",\n he: \"\\u{1F1EE}\\u{1F1F1}\",\n fa: \"\\u{1F1EE}\\u{1F1F7}\",\n ro: \"\\u{1F1F7}\\u{1F1F4}\",\n hu: \"\\u{1F1ED}\\u{1F1FA}\",\n sk: \"\\u{1F1F8}\\u{1F1F0}\",\n bg: \"\\u{1F1E7}\\u{1F1EC}\",\n hr: \"\\u{1F1ED}\\u{1F1F7}\",\n sr: \"\\u{1F1F7}\\u{1F1F8}\",\n sl: \"\\u{1F1F8}\\u{1F1EE}\",\n lt: \"\\u{1F1F1}\\u{1F1F9}\",\n lv: \"\\u{1F1F1}\\u{1F1FB}\",\n et: \"\\u{1F1EA}\\u{1F1EA}\",\n ga: \"\\u{1F1EE}\\u{1F1EA}\",\n mt: \"\\u{1F1F2}\\u{1F1F9}\",\n ca: \"\\u{1F1E6}\\u{1F1F8}\",\n eu: \"\\u{1F1E6}\\u{1F1F7}\",\n gl: \"\\u{1F1E6}\\u{1F1F7}\",\n cy: \"\\u{1F1FF}\\u{1F1F4}\",\n mk: \"\\u{1F1F2}\\u{1F1F0}\",\n sq: \"\\u{1F1E6}\\u{1F1F1}\",\n bs: \"\\u{1F1E7}\\u{1F1F8}\",\n is: \"\\u{1F1EE}\\u{1F1F8}\",\n fo: \"\\u{1F1EB}\\u{1F1F4}\",\n sw: \"\\u{1F1F9}\\u{1F1FF}\",\n am: \"\\u{1F1E6}\\u{1F1F2}\",\n ne: \"\\u{1F1F3}\\u{1F1F5}\",\n si: \"\\u{1F1F8}\\u{1F1F0}\",\n my: \"\\u{1F1F2}\\u{1F1E2}\",\n km: \"\\u{1F1F0}\\u{1F1ED}\",\n lo: \"\\u{1F1F1}\\u{1F1E6}\",\n ka: \"\\u{1F1EC}\\u{1F1EA}\",\n hy: \"\\u{1F1E6}\\u{1F1F2}\",\n kk: \"\\u{1F1F0}\\u{1F1F0}\",\n uz: \"\\u{1F1FA}\\u{1F1FF}\",\n mn: \"\\u{1F1F2}\\u{1F1F3}\",\n ps: \"\\u{1F1F5}\\u{1F1F8}\",\n ur: \"\\u{1F1FA}\\u{1F1F2}\",\n sd: \"\\u{1F1F8}\\u{1F1E6}\",\n ml: \"\\u{1F1F2}\\u{1F1F1}\",\n ta: \"\\u{1F1F9}\\u{1F1F1}\",\n te: \"\\u{1F1F9}\\u{1F1EF}\",\n kn: \"\\u{1F1EE}\\u{1F1F3}\",\n mr: \"\\u{1F1F2}\\u{1F1F7}\",\n gu: \"\\u{1F1EE}\\u{1F1F3}\",\n pa: \"\\u{1F1F5}\\u{1F1E6}\",\n or: \"\\u{1F1F3}\\u{1F1F4}\",\n as: \"\\u{1F1E6}\\u{1F1F8}\",\n yi: \"\\u{1F1FE}\\u{1F1EA}\",\n yo: \"\\u{1F1FE}\\u{1F1F3}\",\n ig: \"\\u{1F1EE}\\u{1F1EC}\",\n zu: \"\\u{1F1FF}\\u{1F1F3}\",\n af: \"\\u{1F1E6}\\u{1F1FF}\",\n ha: \"\\u{1F1ED}\\u{1F1F2}\",\n tl: \"\\u{1F1F5}\\u{1F1ED}\",\n mg: \"\\u{1F1F2}\\u{1F1EC}\",\n mi: \"\\u{1F1F3}\\u{1F1FF}\",\n sm: \"\\u{1F1F8}\\u{1F1F4}\",\n fj: \"\\u{1F1EB}\\u{1F1EF}\",\n to: \"\\u{1F1F9}\\u{1F1F4}\",\n haw: \"\\u{1F1ED}\\u{1F1FC}\",\n la: \"\\u{1F1F1}\\u{1F1E6}\",\n eo: \"\\u{1F1EA}\\u{1F1F7}\",\n};\n\nfunction getFlag(code: string): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n return LANG_TO_FLAG[lang] ?? \"\\u{1F310}\";\n}\n\n/**\n * Built-in language names: native form and English form.\n */\nconst LANG_NAMES: Record<string, [native: string, english: string]> = {\n en: [\"English\", \"English\"],\n fr: [\"Fran\\u00e7ais\", \"French\"],\n es: [\"Espa\\u00f1ol\", \"Spanish\"],\n de: [\"Deutsch\", \"German\"],\n ja: [\"\\u65e5\\u672c\\u8a9e\", \"Japanese\"],\n ko: [\"\\ud55c\\uad6d\\uc5b4\", \"Korean\"],\n zh: [\"\\u4e2d\\u6587\", \"Chinese\"],\n ar: [\"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", \"Arabic\"],\n pt: [\"Portugu\\u00eas\", \"Portuguese\"],\n it: [\"Italiano\", \"Italian\"],\n nl: [\"Nederlands\", \"Dutch\"],\n ru: [\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", \"Russian\"],\n pl: [\"Polski\", \"Polish\"],\n tr: [\"T\\u00fcrk\\u00e7e\", \"Turkish\"],\n vi: [\"Ti\\u1ebfng Vi\\u1ec7t\", \"Vietnamese\"],\n th: [\"\\u0e44\\u0e17\\u0e22\", \"Thai\"],\n id: [\"Bahasa Indonesia\", \"Indonesian\"],\n hi: [\"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", \"Hindi\"],\n bn: [\"\\u09ac\\u09be\\u0982\\u09b2\\u09be\", \"Bengali\"],\n uk: [\"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\", \"Ukrainian\"],\n cs: [\"\\u010ce\\u0161tina\", \"Czech\"],\n sv: [\"Svenska\", \"Swedish\"],\n da: [\"Dansk\", \"Danish\"],\n fi: [\"Suomi\", \"Finnish\"],\n no: [\"Norsk\", \"Norwegian\"],\n nb: [\"Norsk bokm\\u00e5l\", \"Norwegian Bokm\\u00e5l\"],\n nn: [\"Nynorsk\", \"Norwegian Nynorsk\"],\n el: [\"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", \"Greek\"],\n he: [\"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", \"Hebrew\"],\n fa: [\"\\u0641\\u0627\\u0631\\u0633\\u06cc\", \"Persian\"],\n ro: [\"Rom\\u00e2n\\u0103\", \"Romanian\"],\n hu: [\"Magyar\", \"Hungarian\"],\n sk: [\"Sloven\\u010dina\", \"Slovak\"],\n bg: [\"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\", \"Bulgarian\"],\n hr: [\"Hrvatski\", \"Croatian\"],\n sr: [\"\\u0421\\u0440\\u043f\\u0441\\u043a\\u0438\", \"Serbian\"],\n sl: [\"Sloven\\u0161\\u010dina\", \"Slovenian\"],\n lt: [\"Lietuvi\\u0173\", \"Lithuanian\"],\n lv: [\"Latvie\\u0161u\", \"Latvian\"],\n et: [\"Eesti\", \"Estonian\"],\n ga: [\"Gaeilge\", \"Irish\"],\n mt: [\"Malti\", \"Maltese\"],\n ca: [\"Catal\\u00e0\", \"Catalan\"],\n eu: [\"Euskara\", \"Basque\"],\n gl: [\"Galego\", \"Galician\"],\n cy: [\"Cymraeg\", \"Welsh\"],\n mk: [\"\\u041c\\u0430\\u043a\\u0435\\u0434\\u043e\\u043d\\u0441\\u043a\\u0438\", \"Macedonian\"],\n sq: [\"Shqip\", \"Albanian\"],\n bs: [\"Bosanski\", \"Bosnian\"],\n is: [\"\\u00cdslenska\", \"Icelandic\"],\n fo: [\"F\\u00f8royskt\", \"Faroese\"],\n sw: [\"Kiswahili\", \"Swahili\"],\n am: [\"\\u12a0\\u12cd\\u1295\\u1348\", \"Amharic\"],\n ne: [\"\\u0928\\u0947\\u092a\\u093e\\u0932\\u0940\", \"Nepali\"],\n si: [\"\\u0dc3\\u0dd2\\u0d82\\u0dc4\\u0dbd\", \"Sinhala\"],\n my: [\"\\u1019\\u103c\\u1014\\u103a\\u1019\\u102c\", \"Burmese\"],\n km: [\"\\u1780\\u1798\\u17d2\\u1796\\u17c7\\u1798\", \"Khmer\"],\n lo: [\"\\u0ea5\\u0e27\", \"Lao\"],\n ka: [\"\\u10e5\\u10d0\\u10e0\\u10d7\\u10e3\\u10da\\u10d8\", \"Georgian\"],\n hy: [\"\\u0540\\u0561\\u0575\\u0565\\u10e0\\u0565\\u0576\", \"Armenian\"],\n kk: [\"\\u049a\\u0430\\u0437\\u0430\\u049b\", \"Kazakh\"],\n uz: [\"O\\u2019zbek\", \"Uzbek\"],\n mn: [\"\\u041c\\u043e\\u043d\\u0433\\u043e\\u043b\", \"Mongolian\"],\n ps: [\"\\u067e\\u069a\\u062a\\u0648\", \"Pashto\"],\n ur: [\"\\u0627\\u0631\\u062f\\u0648\", \"Urdu\"],\n sd: [\"\\u0773\\u0647\\u0646\\u068c\\u064a\", \"Sindhi\"],\n ml: [\"\\u0d2e\\u0d32\\u0d2f\\u0d3e\\u0d33\\u0d02\", \"Malayalam\"],\n ta: [\"\\u0ba4\\u0bae\\u0bbf\\u0bb4\\u0bcd\", \"Tamil\"],\n te: [\"\\u0c24\\u0c46\\u0c32\\u0c41\\u0c17\\u0c41\", \"Telugu\"],\n kn: [\"\\u0c95\\u0ca8\\u0ccd\\u0ca8\\u0ca1\", \"Kannada\"],\n mr: [\"\\u092e\\u0930\\u093e\\u0920\\u0940\", \"Marathi\"],\n gu: [\"\\u0a97\\u0ac1\\u0a9c\\u0ab0\\u0abe\\u0aa4\\u0ac0\", \"Gujarati\"],\n pa: [\"\\u0a2a\\u0a70\\u0a1c\\u0a3e\\u0a2c\\u0a40\", \"Punjabi\"],\n or: [\"\\u0b13\\u0b21\\u0b3c\\u0b3f\\u0b06\", \"Odia\"],\n as: [\"\\u0985\\u09b8\\u09ae\\u09c0\\u09af\\u09bc\\u09be\", \"Assamese\"],\n yi: [\"\\u05d9\\u05d9\\u05b4\\u05d3\\u05d9\\u05e9\", \"Yiddish\"],\n yo: [\"Yor\\u00f9b\\u00e1\", \"Yoruba\"],\n ig: [\"Igbo\", \"Igbo\"],\n zu: [\"isiZulu\", \"Zulu\"],\n af: [\"Afrikaans\", \"Afrikaans\"],\n ha: [\"Hausa\", \"Hausa\"],\n tl: [\"Filipino\", \"Filipino\"],\n mg: [\"Malagasy\", \"Malagasy\"],\n mi: [\"Te Reo M\\u0101ori\", \"M\\u0101ori\"],\n sm: [\"Gagana Samoa\", \"Samoan\"],\n to: [\"Lea Faka-Tonga\", \"Tongan\"],\n fj: [\"Na Vosa Vakaviti\", \"Fijian\"],\n haw: [\"\\u02bb\\u014clelo Hawai\\u02bbi\", \"Hawaiian\"],\n la: [\"Latina\", \"Latin\"],\n eo: [\"Esperanto\", \"Esperanto\"],\n};\n\nfunction getLabel(code: string, mode: \"native\" | \"english\"): string {\n const lang = code.split(\"-\")[0].toLowerCase();\n const names = LANG_NAMES[lang];\n if (!names) return code;\n return mode === \"native\" ? names[0] : names[1];\n}\n\nexport const LanguageSwitcher = React.forwardRef<HTMLDivElement, LanguageSwitcherProps>(\n function LanguageSwitcher(\n {\n locales,\n value,\n defaultValue,\n onValueChange,\n showFlags = false,\n label: labelMode = \"english\",\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"\",\n onValueChange,\n );\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => ref.current as HTMLDivElement);\n\n const resolveLabel = (l: Locale) => l.label ?? getLabel(l.code, labelMode);\n const activeLocale = locales.find((l) => l.code === locale);\n\n const filtered = locales.filter(\n (l) =>\n resolveLabel(l).toLowerCase().includes(search.toLowerCase()) ||\n l.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n const dir = isRtl(locale) ? \"rtl\" : \"ltr\";\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n return (\n <div\n ref={ref}\n dir={dir}\n className={cn(\"relative inline-block text-sm z-50\", className)}\n {...rest}\n >\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className={cn(\n \"inline-flex items-center gap-2 rounded-lg border border-zinc-200 bg-zinc-100 px-3 py-2 text-sm font-medium text-zinc-900 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus:outline-none focus:ring-2 focus:ring-emerald-500/50 dark:border-zinc-800 dark:bg-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-700 dark:hover:text-zinc-50\",\n )}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${activeLocale ? resolveLabel(activeLocale) : locale}`}\n >\n {showFlags && <span className=\"text-base\">{activeLocale?.flag ?? getFlag(locale)}</span>}\n <span>{activeLocale ? resolveLabel(activeLocale) : locale}</span>\n <svg\n className={cn(\n \"size-4 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[200px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search...\"\n aria-label=\"Search languages\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((l) => {\n const isActive = l.code === locale;\n const itemDir = l.rtl || isRtl(l.code) ? \"rtl\" : \"ltr\";\n return (\n <button\n key={l.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n dir={itemDir}\n onClick={() => {\n setLocale(l.code);\n setOpen(false);\n setSearch(\"\");\n }}\n className={cn(\n \"flex w-full items-center gap-2 rounded-lg px-3 py-2 text-start text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base\">{l.flag ?? getFlag(l.code)}</span>}\n <span className=\"flex-1\">{resolveLabel(l)}</span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">No results</div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n","import * as React from \"react\";\n\n/**\n * Supports both controlled and uncontrolled usage from a single hook.\n *\n * When `value` is `undefined` the component owns its state and seeds it from\n * `defaultValue`. When `value` is provided the parent owns it and every render\n * reflects the prop, so external changes propagate.\n */\nexport function useControllableState<T>(\n value: T | undefined,\n defaultValue: T,\n onChange?: (next: T) => void,\n): [T, (next: T) => void] {\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = React.useState<T>(defaultValue);\n\n const onChangeRef = React.useRef(onChange);\n React.useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const current = isControlled ? value : uncontrolled;\n\n const setValue = React.useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [current, setValue];\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\n\nexport interface Country {\n /** ISO 3166-1 alpha-2 country code (e.g. \"US\") */\n code: string;\n /** E.164 dial prefix, including the leading \"+\" */\n dialCode: string;\n /** English country name */\n name: string;\n /** Flag emoji */\n flag: string;\n}\n\nexport interface PhoneInputProps extends Omit<\n React.ComponentPropsWithoutRef<\"input\">,\n \"value\" | \"defaultValue\" | \"onChange\" | \"type\"\n> {\n /** Phone number. Provide this to control the component. */\n value?: string;\n /** Initial phone number when uncontrolled */\n defaultValue?: string;\n /** Callback when the number or the selected country changes */\n onValueChange?: (phone: string, country: Country) => void;\n /** ISO 3166-1 alpha-2 code of the initially selected country (default: \"US\") */\n defaultCountry?: string;\n /** Show the flag emoji beside the dial code (default: true) */\n showFlags?: boolean;\n /** Accessible label for the field (default: \"Phone number\") */\n label?: string;\n}\n\nconst COUNTRIES: Country[] = [\n { code: \"US\", dialCode: \"+1\", name: \"United States\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n { code: \"GB\", dialCode: \"+44\", name: \"United Kingdom\", flag: \"\\u{1F1EC}\\u{1F1E7}\" },\n { code: \"IN\", dialCode: \"+91\", name: \"India\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n { code: \"CA\", dialCode: \"+1\", name: \"Canada\", flag: \"\\u{1F1E8}\\u{1F1E6}\" },\n { code: \"AU\", dialCode: \"+61\", name: \"Australia\", flag: \"\\u{1F1E6}\\u{1F1FA}\" },\n { code: \"DE\", dialCode: \"+49\", name: \"Germany\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n { code: \"FR\", dialCode: \"+33\", name: \"France\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n { code: \"JP\", dialCode: \"+81\", name: \"Japan\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n { code: \"BR\", dialCode: \"+55\", name: \"Brazil\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n { code: \"CN\", dialCode: \"+86\", name: \"China\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n { code: \"RU\", dialCode: \"+7\", name: \"Russia\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n { code: \"KR\", dialCode: \"+82\", name: \"South Korea\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n { code: \"IT\", dialCode: \"+39\", name: \"Italy\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n { code: \"ES\", dialCode: \"+34\", name: \"Spain\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n { code: \"MX\", dialCode: \"+52\", name: \"Mexico\", flag: \"\\u{1F1F2}\\u{1F1FD}\" },\n { code: \"NL\", dialCode: \"+31\", name: \"Netherlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n { code: \"SE\", dialCode: \"+46\", name: \"Sweden\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n { code: \"CH\", dialCode: \"+41\", name: \"Switzerland\", flag: \"\\u{1F1E8}\\u{1F1ED}\" },\n { code: \"PL\", dialCode: \"+48\", name: \"Poland\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n { code: \"AR\", dialCode: \"+54\", name: \"Argentina\", flag: \"\\u{1F1E6}\\u{1F1F7}\" },\n { code: \"ZA\", dialCode: \"+27\", name: \"South Africa\", flag: \"\\u{1F1FF}\\u{1F1E6}\" },\n { code: \"NG\", dialCode: \"+234\", name: \"Nigeria\", flag: \"\\u{1F1F3}\\u{1F1EC}\" },\n { code: \"EG\", dialCode: \"+20\", name: \"Egypt\", flag: \"\\u{1F1EA}\\u{1F1EC}\" },\n { code: \"SA\", dialCode: \"+966\", name: \"Saudi Arabia\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n { code: \"AE\", dialCode: \"+971\", name: \"United Arab Emirates\", flag: \"\\u{1F1E6}\\u{1F1EA}\" },\n { code: \"SG\", dialCode: \"+65\", name: \"Singapore\", flag: \"\\u{1F1F8}\\u{1F1EC}\" },\n { code: \"MY\", dialCode: \"+60\", name: \"Malaysia\", flag: \"\\u{1F1F2}\\u{1F1FE}\" },\n { code: \"TH\", dialCode: \"+66\", name: \"Thailand\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n { code: \"PH\", dialCode: \"+63\", name: \"Philippines\", flag: \"\\u{1F1F5}\\u{1F1ED}\" },\n { code: \"ID\", dialCode: \"+62\", name: \"Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n { code: \"VN\", dialCode: \"+84\", name: \"Vietnam\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n { code: \"TR\", dialCode: \"+90\", name: \"Turkey\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n { code: \"PK\", dialCode: \"+92\", name: \"Pakistan\", flag: \"\\u{1F1F5}\\u{1F1F0}\" },\n { code: \"BD\", dialCode: \"+880\", name: \"Bangladesh\", flag: \"\\u{1F1E7}\\u{1F1E9}\" },\n { code: \"KE\", dialCode: \"+254\", name: \"Kenya\", flag: \"\\u{1F1F0}\\u{1F1EA}\" },\n { code: \"GH\", dialCode: \"+233\", name: \"Ghana\", flag: \"\\u{1F1EC}\\u{1F1ED}\" },\n { code: \"ET\", dialCode: \"+251\", name: \"Ethiopia\", flag: \"\\u{1F1EA}\\u{1F1F9}\" },\n { code: \"TZ\", dialCode: \"+255\", name: \"Tanzania\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n { code: \"IL\", dialCode: \"+972\", name: \"Israel\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n { code: \"HK\", dialCode: \"+852\", name: \"Hong Kong\", flag: \"\\u{1F1ED}\\u{1F1F0}\" },\n { code: \"NZ\", dialCode: \"+64\", name: \"New Zealand\", flag: \"\\u{1F1F3}\\u{1F1FF}\" },\n { code: \"IE\", dialCode: \"+353\", name: \"Ireland\", flag: \"\\u{1F1EE}\\u{1F1EA}\" },\n { code: \"PT\", dialCode: \"+351\", name: \"Portugal\", flag: \"\\u{1F1F5}\\u{1F1F9}\" },\n { code: \"CL\", dialCode: \"+56\", name: \"Chile\", flag: \"\\u{1F1E8}\\u{1F1F1}\" },\n { code: \"CO\", dialCode: \"+57\", name: \"Colombia\", flag: \"\\u{1F1E8}\\u{1F1F4}\" },\n { code: \"FI\", dialCode: \"+358\", name: \"Finland\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n { code: \"NO\", dialCode: \"+47\", name: \"Norway\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n { code: \"DK\", dialCode: \"+45\", name: \"Denmark\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n { code: \"AT\", dialCode: \"+43\", name: \"Austria\", flag: \"\\u{1F1E6}\\u{1F1F9}\" },\n { code: \"BE\", dialCode: \"+32\", name: \"Belgium\", flag: \"\\u{1F1E7}\\u{1F1EA}\" },\n];\n\nfunction getCountryByCode(code: string): Country | undefined {\n return COUNTRIES.find((c) => c.code === code.toUpperCase());\n}\n\nexport const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(function PhoneInput(\n {\n value,\n defaultValue,\n onValueChange,\n defaultCountry = \"US\",\n placeholder = \"Phone number\",\n disabled = false,\n className,\n showFlags = true,\n label = \"Phone number\",\n ...rest\n },\n forwardedRef,\n) {\n const [selectedCountry, setSelectedCountry] = React.useState<Country>(\n () => getCountryByCode(defaultCountry) ?? COUNTRIES[0],\n );\n const [inputValue, setInputValue] = useControllableState(value, defaultValue ?? \"\", undefined);\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const ref = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // The country search box needs its own ref. Sharing `inputRef` meant the search\n // field overwrote it whenever the dropdown opened, which pointed the forwarded\n // ref at the wrong element and sent focus to a node that was about to unmount.\n const searchRef = React.useRef<HTMLInputElement>(null);\n\n React.useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n\n const filtered = COUNTRIES.filter(\n (c) =>\n c.name.toLowerCase().includes(search.toLowerCase()) ||\n c.dialCode.includes(search) ||\n c.code.toLowerCase().includes(search.toLowerCase()),\n );\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch(\"\");\n }\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n if (open) searchRef.current?.focus();\n }, [open]);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Escape\") {\n setOpen(false);\n setSearch(\"\");\n }\n }\n if (open) {\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }\n }, [open]);\n\n const handleCountrySelect = (country: Country) => {\n setSelectedCountry(country);\n setOpen(false);\n setSearch(\"\");\n onValueChange?.(inputValue, country);\n inputRef.current?.focus();\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n onValueChange?.(newValue, selectedCountry);\n };\n\n return (\n <div ref={ref} className={cn(\"relative inline-block text-sm\", className)}>\n <div\n className={cn(\n \"flex items-center overflow-hidden rounded-lg border transition-colors\",\n \"bg-white border-zinc-200 dark:bg-zinc-900 dark:border-zinc-800\",\n disabled && \"opacity-50 cursor-not-allowed\",\n )}\n >\n <button\n type=\"button\"\n onClick={() => !disabled && setOpen(!open)}\n disabled={disabled}\n className={cn(\n \"flex items-center gap-1.5 border-r px-3 py-2.5 text-sm transition-colors\",\n \"border-zinc-200 text-zinc-900 hover:bg-zinc-100 hover:text-zinc-900 dark:border-zinc-800 dark:text-zinc-100 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label=\"Select country\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n >\n {showFlags && <span className=\"text-base leading-none\">{selectedCountry.flag}</span>}\n <span className=\"font-mono text-xs\">{selectedCountry.dialCode}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n open && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n <input\n ref={inputRef}\n type=\"tel\"\n value={inputValue}\n onChange={handleInputChange}\n placeholder={placeholder}\n disabled={disabled}\n {...rest}\n className={cn(\n \"flex-1 bg-transparent px-3 py-2.5 text-sm outline-none placeholder:text-zinc-400 dark:placeholder:text-zinc-500\",\n \"text-zinc-900 dark:text-zinc-100\",\n \"focus:ring-1 focus:ring-emerald-500/50\",\n disabled && \"cursor-not-allowed\",\n )}\n aria-label={label}\n />\n </div>\n\n {open && (\n <div\n className=\"absolute z-50 mt-1 min-w-[280px] overflow-hidden rounded-xl border border-zinc-200 bg-white shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select country\"\n >\n <div className=\"border-b border-zinc-200 p-2 dark:border-zinc-800\">\n <input\n ref={searchRef}\n type=\"text\"\n placeholder=\"Search countries...\"\n aria-label=\"Search countries\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full rounded-lg bg-zinc-100 px-3 py-1.5 text-sm text-zinc-900 outline-none placeholder:text-zinc-400 focus:ring-1 focus:ring-emerald-500/50 dark:bg-zinc-800 dark:text-zinc-100 dark:placeholder:text-zinc-500\"\n />\n </div>\n\n <div className=\"max-h-60 overflow-y-auto p-1\">\n {filtered.map((country) => {\n const isActive = country.code === selectedCountry.code;\n return (\n <button\n key={country.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => handleCountrySelect(country)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n <span className=\"text-base leading-none\">{country.flag}</span>\n <span className=\"flex-1\">{country.name}</span>\n <span className=\"font-mono text-xs text-zinc-500 dark:text-zinc-400\">\n {country.dialCode}\n </span>\n {isActive && (\n <svg\n className=\"size-4 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-3 py-2 text-sm text-zinc-500 dark:text-zinc-400\">\n No countries found\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n});\n\nexport { COUNTRIES };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { useControllableState } from \"@/lib/use-controllable-state\";\nimport type { Locale } from \"./types\";\n\nexport type { Locale };\n\nexport interface NavLink {\n /** Visible link text */\n label: string;\n /** Destination passed to `linkComponent` as `href` */\n href: string;\n}\n\nexport interface NavBarProps extends Omit<\n React.ComponentPropsWithoutRef<\"nav\">,\n \"defaultValue\" | \"onChange\"\n> {\n /** Brand mark rendered on the left */\n logo?: React.ReactNode;\n /** Navigation links */\n links?: NavLink[];\n /** Locales offered by the built-in language menu */\n locales?: Locale[];\n /** Selected locale code. Provide this to control the component. */\n value?: string;\n /** Initial selected locale code when uncontrolled (default: \"en\") */\n defaultValue?: string;\n /** Callback when the locale changes */\n onValueChange?: (code: string) => void;\n /** Primary call-to-action button */\n cta?: { label: string; href: string };\n /** Show a GitHub icon link */\n showGitHub?: boolean;\n /** Target of the GitHub icon link */\n githubUrl?: string;\n /** Pin the bar to the top of the viewport (default: true) */\n sticky?: boolean;\n /** Show flag emojis in the language menu (default: true) */\n showFlags?: boolean;\n /**\n * Component used to render internal links. Defaults to `\"a\"` so the\n * component works in any React app; pass your router's link (e.g.\n * `next/link`) to get client-side navigation.\n */\n linkComponent?: React.ElementType;\n}\n\nconst LOCALE_MAP: Record<string, { label: string; flag: string }> = {\n en: { label: \"English\", flag: \"\\u{1F1FA}\\u{1F1F8}\" },\n fr: { label: \"Fran\\u00e7ais\", flag: \"\\u{1F1EB}\\u{1F1F7}\" },\n es: { label: \"Espa\\u00f1ol\", flag: \"\\u{1F1EA}\\u{1F1F8}\" },\n de: { label: \"Deutsch\", flag: \"\\u{1F1E9}\\u{1F1EA}\" },\n ja: { label: \"\\u65e5\\u672c\\u8a9e\", flag: \"\\u{1F1EF}\\u{1F1F5}\" },\n ko: { label: \"\\ud55c\\uad6d\\uc5b4\", flag: \"\\u{1F1F0}\\u{1F1F7}\" },\n zh: { label: \"\\u4e2d\\u6587\", flag: \"\\u{1F1E8}\\u{1F1F3}\" },\n ar: { label: \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064a\\u0629\", flag: \"\\u{1F1F8}\\u{1F1E6}\" },\n pt: { label: \"Portugu\\u00eas\", flag: \"\\u{1F1E7}\\u{1F1F7}\" },\n it: { label: \"Italiano\", flag: \"\\u{1F1EE}\\u{1F1F9}\" },\n nl: { label: \"Nederlands\", flag: \"\\u{1F1F3}\\u{1F1F1}\" },\n ru: { label: \"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439\", flag: \"\\u{1F1F7}\\u{1F1FA}\" },\n pl: { label: \"Polski\", flag: \"\\u{1F1F5}\\u{1F1F1}\" },\n tr: { label: \"T\\u00fcrk\\u00e7e\", flag: \"\\u{1F1F9}\\u{1F1F7}\" },\n vi: { label: \"Ti\\u1ebfng Vi\\u1ec7t\", flag: \"\\u{1F1FB}\\u{1F1F3}\" },\n th: { label: \"\\u0e44\\u0e17\\u0e22\", flag: \"\\u{1F1F9}\\u{1F1ED}\" },\n id: { label: \"Bahasa Indonesia\", flag: \"\\u{1F1EE}\\u{1F1E9}\" },\n hi: { label: \"\\u0939\\u093f\\u0928\\u094d\\u0926\\u0940\", flag: \"\\u{1F1EE}\\u{1F1F3}\" },\n sv: { label: \"Svenska\", flag: \"\\u{1F1F8}\\u{1F1EA}\" },\n da: { label: \"Dansk\", flag: \"\\u{1F1E9}\\u{1F1F0}\" },\n fi: { label: \"Suomi\", flag: \"\\u{1F1EB}\\u{1F1EE}\" },\n no: { label: \"Norsk\", flag: \"\\u{1F1F3}\\u{1F1F4}\" },\n el: { label: \"\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac\", flag: \"\\u{1F1EC}\\u{1F1F7}\" },\n he: { label: \"\\u05e2\\u05d1\\u05e8\\u05d9\\u05ea\", flag: \"\\u{1F1EE}\\u{1F1F1}\" },\n ro: { label: \"Rom\\u00e2n\\u0103\", flag: \"\\u{1F1F7}\\u{1F1F4}\" },\n hu: { label: \"Magyar\", flag: \"\\u{1F1ED}\\u{1F1FA}\" },\n cs: { label: \"\\u010ce\\u0161tina\", flag: \"\\u{1F1E8}\\u{1F1FF}\" },\n uk: {\n label: \"\\u0423\\u043a\\u0440\\u0430\\u0457\\u043d\\u0441\\u044c\\u043a\\u0430\",\n flag: \"\\u{1F1FA}\\u{1F1E6}\",\n },\n bg: {\n label: \"\\u0411\\u044a\\u043b\\u0433\\u0430\\u0440\\u0441\\u043a\\u0438\",\n flag: \"\\u{1F1E7}\\u{1F1EC}\",\n },\n hr: { label: \"Hrvatski\", flag: \"\\u{1F1ED}\\u{1F1F7}\" },\n sk: { label: \"Sloven\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1F0}\" },\n sl: { label: \"Sloven\\u0161\\u010dina\", flag: \"\\u{1F1F8}\\u{1F1EE}\" },\n lt: { label: \"Lietuvi\\u0173\", flag: \"\\u{1F1F1}\\u{1F1F9}\" },\n lv: { label: \"Latvie\\u0161u\", flag: \"\\u{1F1F1}\\u{1F1FB}\" },\n et: { label: \"Eesti\", flag: \"\\u{1F1EA}\\u{1F1EA}\" },\n ca: { label: \"Catal\\u00e0\", flag: \"\\u{1F1E6}\\u{1F1F8}\" },\n af: { label: \"Afrikaans\", flag: \"\\u{1F1E6}\\u{1F1FF}\" },\n sw: { label: \"Kiswahili\", flag: \"\\u{1F1F9}\\u{1F1FF}\" },\n};\n\nfunction getLocaleInfo(code: string) {\n return LOCALE_MAP[code] ?? { label: code.toUpperCase(), flag: \"\\u{1F310}\" };\n}\n\nexport const NavBar = React.forwardRef<HTMLElement, NavBarProps>(function NavBar(\n {\n logo,\n links = [],\n locales = [],\n value,\n defaultValue,\n onValueChange,\n cta,\n showGitHub = false,\n githubUrl = \"https://github.com/babelize/babelize-elements\",\n sticky = true,\n className,\n showFlags = true,\n linkComponent: Link = \"a\",\n ...rest\n },\n forwardedRef,\n) {\n const [locale, setLocale] = useControllableState(\n value,\n defaultValue ?? locales[0]?.code ?? \"en\",\n onValueChange,\n );\n const [mobileOpen, setMobileOpen] = React.useState(false);\n // Which bar opened the language menu, rather than a single boolean. The desktop\n // and mobile bars are both always in the DOM — only CSS hides one — so a shared\n // boolean mounted two listboxes into the accessibility tree at once.\n const [langOpen, setLangOpen] = React.useState<\"desktop\" | \"mobile\" | null>(null);\n const langRef = React.useRef<HTMLDivElement>(null);\n const mobileLangRef = React.useRef<HTMLDivElement>(null);\n const menuId = React.useId();\n\n const currentLocaleInfo = getLocaleInfo(locale);\n\n React.useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n const target = e.target as Node;\n // Both containers have to be checked. Guarding only the desktop one made a\n // mousedown inside the mobile dropdown count as \"outside\", which closed the\n // menu before the option's click event could land — so picking a language\n // on mobile did nothing at all.\n if (langRef.current?.contains(target) || mobileLangRef.current?.contains(target)) return;\n setLangOpen(null);\n }\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n React.useEffect(() => {\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key !== \"Escape\") return;\n setLangOpen(null);\n setMobileOpen(false);\n }\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, []);\n\n React.useEffect(() => {\n if (!mobileOpen) return;\n // Restore whatever the host page had set rather than assuming it was empty.\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mobileOpen]);\n\n const langButton = (\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"desktop\" ? null : \"desktop\")}\n className=\"flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium text-zinc-500 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"desktop\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && <span className=\"text-sm leading-none\">{currentLocaleInfo.flag}</span>}\n <span className=\"hidden sm:inline\">{currentLocaleInfo.label}</span>\n <svg\n className={cn(\n \"size-3 text-zinc-500 transition-transform dark:text-zinc-400\",\n langOpen === \"desktop\" && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n );\n\n const langDropdown = (\n <div\n className=\"absolute right-0 top-full z-50 mt-1.5 min-w-[170px] rounded-xl border border-zinc-200 bg-white py-1.5 shadow-xl dark:border-zinc-800 dark:bg-zinc-950\"\n role=\"listbox\"\n aria-label=\"Select language\"\n >\n {locales.map((item) => {\n const info = getLocaleInfo(item.code);\n const isActive = item.code === locale;\n return (\n <button\n key={item.code}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => {\n setLocale(item.code);\n setLangOpen(null);\n }}\n className={cn(\n \"mx-1.5 flex w-[calc(100%-12px)] items-center gap-2.5 rounded-lg px-3 py-2 text-sm transition-colors\",\n isActive\n ? \"bg-emerald-500/10 text-emerald-600 font-medium dark:text-emerald-400\"\n : \"text-zinc-500 hover:bg-zinc-100 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100\",\n )}\n >\n {showFlags && <span className=\"text-base leading-none\">{info.flag}</span>}\n <span className=\"flex-1\">{item.label ?? info.label}</span>\n {isActive && (\n <svg\n className=\"size-4 shrink-0 text-emerald-600 dark:text-emerald-400\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </button>\n );\n })}\n </div>\n );\n\n return (\n <nav\n ref={forwardedRef}\n {...rest}\n className={cn(\n \"z-50 w-full border-b border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900\",\n sticky && \"sticky top-0\",\n className,\n )}\n >\n {/* Desktop */}\n <div className=\"mx-auto hidden max-w-6xl items-center justify-between px-5 py-3 md:flex\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"px-3 py-1.5 text-sm transition-colors rounded-md no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n </div>\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={langRef} className=\"relative\">\n {langButton}\n {langOpen === \"desktop\" && langDropdown}\n </div>\n )}\n\n {showGitHub && (\n <a\n href={githubUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-label=\"GitHub\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </svg>\n </a>\n )}\n\n {cta && (\n <Link\n href={cta.href}\n className=\"rounded-md px-3.5 py-1.5 text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n </div>\n\n {/* Mobile */}\n <div className=\"flex items-center justify-between px-4 py-3 md:hidden\">\n {logo && <div className=\"flex-shrink-0\">{logo}</div>}\n\n <div className=\"flex items-center gap-1\">\n {locales.length > 0 && (\n <div ref={mobileLangRef} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setLangOpen(langOpen === \"mobile\" ? null : \"mobile\")}\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n aria-expanded={langOpen === \"mobile\"}\n aria-haspopup=\"listbox\"\n aria-label={`Current language: ${currentLocaleInfo.label}`}\n >\n {showFlags && (\n <span className=\"text-base leading-none\">{currentLocaleInfo.flag}</span>\n )}\n </button>\n {langOpen === \"mobile\" && langDropdown}\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"inline-flex size-8 items-center justify-center rounded-md transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n onClick={() => setMobileOpen(!mobileOpen)}\n aria-label=\"Toggle menu\"\n aria-expanded={mobileOpen}\n aria-controls={mobileOpen ? menuId : undefined}\n >\n {mobileOpen ? (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : (\n <svg\n className=\"size-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n )}\n </button>\n </div>\n </div>\n\n {/* Mobile menu panel */}\n {mobileOpen && (\n <div\n id={menuId}\n className=\"border-t border-zinc-200 bg-white px-4 py-3 md:hidden dark:border-zinc-800 dark:bg-zinc-900\"\n >\n {links.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n onClick={() => setMobileOpen(false)}\n className=\"block py-2.5 text-sm transition-colors no-underline text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-50\"\n >\n {link.label}\n </Link>\n ))}\n {cta && (\n <Link\n href={cta.href}\n onClick={() => setMobileOpen(false)}\n className=\"mt-2 block rounded-md px-3.5 py-2 text-center text-sm font-medium transition-colors no-underline bg-emerald-500 text-white hover:opacity-90\"\n >\n {cta.label}\n </Link>\n )}\n </div>\n )}\n </nav>\n );\n});\n"],"mappings":"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","names":["React","LanguageSwitcher","_a","React","jsx","jsxs","PhoneInput","React","jsx","jsxs","NavBar","_a","_b"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babelize/elements",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Open-source Localization UI components for React and Tailwind CSS.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -95,7 +95,6 @@
|
|
|
95
95
|
"fumadocs-core": "^16.14.0",
|
|
96
96
|
"fumadocs-mdx": "^15.2.2",
|
|
97
97
|
"fumadocs-ui": "^16.14.0",
|
|
98
|
-
"geist": "^1.7.2",
|
|
99
98
|
"jsdom": "^30.0.1",
|
|
100
99
|
"lucide-react": "^1.28.0",
|
|
101
100
|
"motion": "^12.43.0",
|