@alfadocs/ui-kit-debug 1.88.1 → 1.90.0

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.
Files changed (52) hide show
  1. package/dist/_chunks/{anamnesis-summary-rows-DjM_HkCS.js → anamnesis-summary-rows-DUMERHK3.js} +2 -2
  2. package/dist/_chunks/{anamnesis-summary-rows-DjM_HkCS.js.map → anamnesis-summary-rows-DUMERHK3.js.map} +1 -1
  3. package/dist/_chunks/{balance-badge-cell-BHXJS8Ga.js → balance-badge-cell-C9-hyfxy.js} +2 -2
  4. package/dist/_chunks/{balance-badge-cell-BHXJS8Ga.js.map → balance-badge-cell-C9-hyfxy.js.map} +1 -1
  5. package/dist/_chunks/{calendar-appointment-editor-dialog-BuumJbcv.js → calendar-appointment-editor-dialog-D8Wkbm8_.js} +2 -2
  6. package/dist/_chunks/{calendar-appointment-editor-dialog-BuumJbcv.js.map → calendar-appointment-editor-dialog-D8Wkbm8_.js.map} +1 -1
  7. package/dist/_chunks/{data-table-BlONA1rP.js → data-table-D7EGpqOn.js} +2 -2
  8. package/dist/_chunks/{data-table-BlONA1rP.js.map → data-table-D7EGpqOn.js.map} +1 -1
  9. package/dist/_chunks/{file-manager-C9iJjDZt.js → file-manager-DQbWBTfk.js} +2 -2
  10. package/dist/_chunks/{file-manager-C9iJjDZt.js.map → file-manager-DQbWBTfk.js.map} +1 -1
  11. package/dist/_chunks/{header-settings-CifwJEKB.js → header-settings-BVhjndtV.js} +188 -168
  12. package/dist/_chunks/header-settings-BVhjndtV.js.map +1 -0
  13. package/dist/_chunks/{heatmap-C2Rg-SV_.js → heatmap-BJB6V9yJ.js} +2 -2
  14. package/dist/_chunks/{heatmap-C2Rg-SV_.js.map → heatmap-BJB6V9yJ.js.map} +1 -1
  15. package/dist/_chunks/{index.es-B8zMZ1wV.js → index.es-Bpb8_NrX.js} +2 -2
  16. package/dist/_chunks/{index.es-B8zMZ1wV.js.map → index.es-Bpb8_NrX.js.map} +1 -1
  17. package/dist/_chunks/{jspdf.es.min-DaapWjR1.js → jspdf.es.min-Cal6Nuw_.js} +3 -3
  18. package/dist/_chunks/{jspdf.es.min-DaapWjR1.js.map → jspdf.es.min-Cal6Nuw_.js.map} +1 -1
  19. package/dist/_chunks/{locale-picker-QbT1p60X.js → locale-picker-DVvinQXU.js} +339 -310
  20. package/dist/_chunks/locale-picker-DVvinQXU.js.map +1 -0
  21. package/dist/_chunks/{marketplace-app-shell-vON3WhD0.js → marketplace-app-shell-x_abo_ye.js} +2 -2
  22. package/dist/_chunks/{marketplace-app-shell-vON3WhD0.js.map → marketplace-app-shell-x_abo_ye.js.map} +1 -1
  23. package/dist/_chunks/{patient-search-Dy0sxcwv.js → patient-search-CCOUZABE.js} +418 -407
  24. package/dist/_chunks/patient-search-CCOUZABE.js.map +1 -0
  25. package/dist/_chunks/purify.es-Lo4sC_pz.js +1483 -0
  26. package/dist/_chunks/purify.es-Lo4sC_pz.js.map +1 -0
  27. package/dist/agent-catalog.json +4 -4
  28. package/dist/agent-i18n/en.json +3 -3
  29. package/dist/components/data-table/index.js +1 -1
  30. package/dist/components/file-manager/index.js +1 -1
  31. package/dist/components/header-settings/header-settings.d.ts +14 -0
  32. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  33. package/dist/components/header-settings/index.js +1 -1
  34. package/dist/components/heatmap/index.js +1 -1
  35. package/dist/components/locale-picker/index.js +4 -3
  36. package/dist/components/locale-picker/locale-picker.d.ts +31 -1
  37. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  38. package/dist/components/patient-search/index.js +1 -1
  39. package/dist/components/patient-search/patient-search.d.ts +8 -0
  40. package/dist/components/patient-search/patient-search.d.ts.map +1 -1
  41. package/dist/components/patient-table/index.js +1 -1
  42. package/dist/index.js +8 -8
  43. package/dist/patterns/anamnesis/index.js +1 -1
  44. package/dist/patterns/calendar/index.js +1 -1
  45. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  46. package/dist/safe-html/index.js +6 -6
  47. package/package.json +8 -3
  48. package/dist/_chunks/header-settings-CifwJEKB.js.map +0 -1
  49. package/dist/_chunks/locale-picker-QbT1p60X.js.map +0 -1
  50. package/dist/_chunks/patient-search-Dy0sxcwv.js.map +0 -1
  51. package/dist/_chunks/purify.es-Cm3utOpm.js +0 -561
  52. package/dist/_chunks/purify.es-Cm3utOpm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"patient-search.d.ts","sourceRoot":"","sources":["../../../src/components/patient-search/patient-search.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"patient-search.d.ts","sourceRoot":"","sources":["../../../src/components/patient-search/patient-search.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-BHXJS8Ga.js";
1
+ import { B as s, C as l, N as n, P as t, a as C, T as i, b as o, g as T, u as p } from "../../_chunks/balance-badge-cell-C9-hyfxy.js";
2
2
  export {
3
3
  s as BalanceBadgeCell,
4
4
  l as CarePlanStatusCell,
package/dist/index.js CHANGED
@@ -93,7 +93,7 @@ import { C as Fo, c as Lo } from "./_chunks/carousel.agent-CkDXR3-8.js";
93
93
  import { C as Mo, c as yo } from "./_chunks/connection-status-CVyCqxiY.js";
94
94
  import { C as Bo } from "./_chunks/contact-card-Czu60UvU.js";
95
95
  import { C as vo } from "./_chunks/counter-WsvRuum1.js";
96
- import { D as Wo, E as wo, T as Uo, a as Vo, b as Ko, c as Yo, d as Xo, e as qo, f as zo, i as jo, g as Qo } from "./_chunks/data-table-BlONA1rP.js";
96
+ import { D as Wo, E as wo, T as Uo, a as Vo, b as Ko, c as Yo, d as Xo, e as qo, f as zo, i as jo, g as Qo } from "./_chunks/data-table-D7EGpqOn.js";
97
97
  import { B as Jo, C as $o, a as at, E as et, b as st, R as rt, T as ot, c as tt, r as nt, u as it } from "./_chunks/editable-currency-cell-renderer-rWYiF4EI.js";
98
98
  import { D as mt, a as lt, b as dt, I as At, L as ft, N as ct, c as St, S as gt, d as Ct, e as Tt, T as xt, f as ut, g as Pt, U as Et } from "./_chunks/link-cell-renderer-C0ynDik7.js";
99
99
  import { A as Rt, a as _t } from "./_chunks/actions-cell-renderer-B1yaOfQM.js";
@@ -102,7 +102,7 @@ import { C as ht, c as Mt } from "./_chunks/clinical-note-card-Caidqcwa.js";
102
102
  import { N as kt, n as Bt } from "./_chunks/note-timeline-KzL52MmB.js";
103
103
  import { D as vt } from "./_chunks/description-list-BxzDN9o2.js";
104
104
  import { E as Wt } from "./_chunks/empty-state-DwJ5YNzz.js";
105
- import { F as Ut, f as Vt } from "./_chunks/file-manager-C9iJjDZt.js";
105
+ import { F as Ut, f as Vt } from "./_chunks/file-manager-DQbWBTfk.js";
106
106
  import { F as Yt, a as Xt, h as qt } from "./_chunks/flag-DVBE6DnB.js";
107
107
  import { K as jt, k as Qt } from "./_chunks/kbd-Bx7eQv9f.js";
108
108
  import { K as Jt, a as $t } from "./_chunks/key-value-pair-BoXOtBL1.js";
@@ -198,7 +198,7 @@ import { T as tA } from "./_chunks/theme-root-BOO73p5t.js";
198
198
  import { C as iA, U as pA, a as mA, b as lA, c as dA } from "./_chunks/unit-converter-BH5ueIhT.js";
199
199
  import { V as fA } from "./_chunks/visually-hidden-BHxEUGyT.js";
200
200
  import { C as SA, c as gA, a as CA } from "./_chunks/chart-D4huJSru.js";
201
- import { H as xA, a as uA, b as PA, h as EA } from "./_chunks/heatmap-C2Rg-SV_.js";
201
+ import { H as xA, a as uA, b as PA, h as EA } from "./_chunks/heatmap-BJB6V9yJ.js";
202
202
  import { A as RA, a as _A } from "./_chunks/ai-prompt-input-DH_rnV-F.js";
203
203
  import { A as NA } from "./_chunks/ai-sparkle-D23NT8Z_.js";
204
204
  import { A as OA, a as FA } from "./_chunks/audio-recorder-m7Jqvvcl.js";
@@ -227,10 +227,10 @@ import { C as Dc, c as Oc } from "./_chunks/care-plan-header-BzsAg6oY.js";
227
227
  import { O as Lc, o as hc } from "./_chunks/operator-hero-6aAIQaFZ.js";
228
228
  import { P as yc, p as kc } from "./_chunks/practice-profile-hero-qfrsFQI_.js";
229
229
  import { P as Gc, p as vc } from "./_chunks/patient-details-D0P5eog5.js";
230
- import { P as Wc, p as wc } from "./_chunks/patient-search-Dy0sxcwv.js";
230
+ import { P as Wc, p as wc } from "./_chunks/patient-search-CCOUZABE.js";
231
231
  import { P as Vc, p as Kc } from "./_chunks/patient-summary-card-6U74-ivO.js";
232
232
  import { A as Xc, a as qc } from "./_chunks/anamnesis-summary-card-DQ3iE1gD.js";
233
- import { B as jc, C as Qc, N as Zc, P as Jc, a as $c, T as aS, b as eS, g as sS, u as rS } from "./_chunks/balance-badge-cell-BHXJS8Ga.js";
233
+ import { B as jc, C as Qc, N as Zc, P as Jc, a as $c, T as aS, b as eS, g as sS, u as rS } from "./_chunks/balance-badge-cell-C9-hyfxy.js";
234
234
  import { B as tS, M as nS, P as iS, a as pS, b as mS, c as lS, d as dS, S as AS, e as fS, f as cS, g as SS, h as gS, p as CS, i as TS, j as xS, k as uS, s as PS, t as ES, l as IS } from "./_chunks/periodontal-chart-_y4Ck7_P.js";
235
235
  import { P as _S, a as bS, p as NS } from "./_chunks/periodontal-chart-card-Bx6PeS3b.js";
236
236
  import { D as OS, P as FS, a as LS, b as hS, c as MS, S as yS, e as kS, i as BS, p as GS } from "./_chunks/periodontal-diagnosis-B9YmmVmM.js";
@@ -261,14 +261,14 @@ import { A as vT, a as HT, i as WT, u as wT } from "./_chunks/appointment-workfl
261
261
  import { C as VT, W as KT, a as YT, b as XT, c as qT, i as zT, l as jT, m as QT, r as ZT, w as JT, d as $T, e as ax, f as ex } from "./_chunks/workflow-map-BcfOwsSB.js";
262
262
  import { AliaAsteroidIcon as rx } from "./alia-asteroid-icon/index.js";
263
263
  import { A as tx, a as nx, b as ix, c as px } from "./_chunks/alia-sidebar-CsTRAxC8.js";
264
- import { A as lx, a as dx, L as Ax, P as fx, S as cx, T as Sx, b as gx, c as Cx, d as Tx, e as xx, f as ux, g as Px, h as Ex, i as Ix, j as Rx, k as _x, l as bx, m as Nx, n as Dx, o as Ox, p as Fx, r as Lx, q as hx, s as Mx, t as yx, u as kx } from "./_chunks/anamnesis-summary-rows-DjM_HkCS.js";
265
- import { A as Gx, C as vx, a as Hx, b as Wx, c as wx, D as Ux, d as Vx, S as Kx, V as Yx, W as Xx, e as qx, i as zx, m as jx, r as Qx, u as Zx, f as Jx, g as $x } from "./_chunks/calendar-appointment-editor-dialog-BuumJbcv.js";
264
+ import { A as lx, a as dx, L as Ax, P as fx, S as cx, T as Sx, b as gx, c as Cx, d as Tx, e as xx, f as ux, g as Px, h as Ex, i as Ix, j as Rx, k as _x, l as bx, m as Nx, n as Dx, o as Ox, p as Fx, r as Lx, q as hx, s as Mx, t as yx, u as kx } from "./_chunks/anamnesis-summary-rows-DUMERHK3.js";
265
+ import { A as Gx, C as vx, a as Hx, b as Wx, c as wx, D as Ux, d as Vx, S as Kx, V as Yx, W as Xx, e as qx, i as zx, m as jx, r as Qx, u as Zx, f as Jx, g as $x } from "./_chunks/calendar-appointment-editor-dialog-D8Wkbm8_.js";
266
266
  import { E as eu, a as su, b as ru, e as ou, r as tu } from "./_chunks/error-page-Bhai-spN.js";
267
267
  import { E as iu } from "./_chunks/error-page-illustration-BdJLuMdV.js";
268
268
  import { F as mu, a as lu } from "./_chunks/forgot-password-form-BQPvDS7i.js";
269
269
  import { A as Au, a as fu, H as cu, b as Su, u as gu } from "./_chunks/help-me-write-templates-BJSf24xS.js";
270
270
  import { L as Tu, a as xu, b as uu } from "./_chunks/login-dev-card-DYwbL5sD.js";
271
- import { C as Eu, M as Iu, P as Ru } from "./_chunks/marketplace-app-shell-vON3WhD0.js";
271
+ import { C as Eu, M as Iu, P as Ru } from "./_chunks/marketplace-app-shell-x_abo_ye.js";
272
272
  import { P as bu } from "./_chunks/payment-automation-upsell-D1YdO1xY.js";
273
273
  import { R as Du, a as Ou } from "./_chunks/registration-form-DmP3YUfp.js";
274
274
  import { R as Lu, a as hu } from "./_chunks/reset-password-form-Cf9QPEJu.js";
@@ -1,4 +1,4 @@
1
- import { A as e, a as i, L as r, P as n, S as o, T as t, b as l, c as d, d as g, e as A, f as m, g as c, h as E, i as P, j as f, k as S, l as h, m as u, n as T, o as I, p as N, r as R, q as _, s as C, t as L, u as b } from "../../_chunks/anamnesis-summary-rows-DjM_HkCS.js";
1
+ import { A as e, a as i, L as r, P as n, S as o, T as t, b as l, c as d, d as g, e as A, f as m, g as c, h as E, i as P, j as f, k as S, l as h, m as u, n as T, o as I, p as N, r as R, q as _, s as C, t as L, u as b } from "../../_chunks/anamnesis-summary-rows-DUMERHK3.js";
2
2
  export {
3
3
  e as Anamnesis,
4
4
  i as AnamnesisConfigEditor,
@@ -1,4 +1,4 @@
1
- import { A as s, C as r, a as o, b as t, c as E, D as P, d as S, S as i, V as A, W as C, e as d, i as n, m as D, r as l, u as p, f as W, g as _ } from "../../_chunks/calendar-appointment-editor-dialog-BuumJbcv.js";
1
+ import { A as s, C as r, a as o, b as t, c as E, D as P, d as S, S as i, V as A, W as C, e as d, i as n, m as D, r as l, u as p, f as W, g as _ } from "../../_chunks/calendar-appointment-editor-dialog-D8Wkbm8_.js";
2
2
  export {
3
3
  s as AppointmentEditorDialog,
4
4
  r as CALENDAR_PREFERENCE_KEYS,
@@ -1,4 +1,4 @@
1
- import { C as l, M as o } from "../../_chunks/marketplace-app-shell-vON3WhD0.js";
1
+ import { C as l, M as o } from "../../_chunks/marketplace-app-shell-x_abo_ye.js";
2
2
  export {
3
3
  l as ConnectWithAlfadocs,
4
4
  o as MarketplaceAppShell
@@ -1,6 +1,6 @@
1
- import { jsx as i } from "react/jsx-runtime";
2
- import s from "../_chunks/purify.es-Cm3utOpm.js";
3
- import { forwardRef as a, useMemo as m } from "react";
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import i from "../_chunks/purify.es-Lo4sC_pz.js";
3
+ import { forwardRef as s, useMemo as m } from "react";
4
4
  const c = {
5
5
  ALLOWED_TAGS: [
6
6
  "a",
@@ -57,15 +57,15 @@ function _(t) {
57
57
  }
58
58
  }
59
59
  function u(t, e) {
60
- return s.sanitize(t, _(e));
60
+ return i.sanitize(t, _(e));
61
61
  }
62
- const A = a(
62
+ const A = s(
63
63
  ({ html: t, profile: e = "markdown", ...o }, r) => {
64
64
  const n = m(
65
65
  () => u(t, e),
66
66
  [t, e]
67
67
  );
68
- return /* @__PURE__ */ i(
68
+ return /* @__PURE__ */ a(
69
69
  "div",
70
70
  {
71
71
  ref: r,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit-debug",
3
- "version": "1.88.1",
3
+ "version": "1.90.0",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
6
6
  "license": "BUSL-1.1",
@@ -1192,6 +1192,11 @@
1192
1192
  "optional": true
1193
1193
  }
1194
1194
  },
1195
+ "overrides": {
1196
+ "exceljs": {
1197
+ "uuid": "^11.1.1"
1198
+ }
1199
+ },
1195
1200
  "dependencies": {
1196
1201
  "@radix-ui/react-accordion": "^1.2.12",
1197
1202
  "@radix-ui/react-alert-dialog": "^1.1.15",
@@ -1215,9 +1220,8 @@
1215
1220
  "cmdk": "^1.1.1",
1216
1221
  "country-flag-icons": "^1.6.16",
1217
1222
  "date-fns": "^4.1.0",
1218
- "dompurify": "^3.4.0",
1223
+ "dompurify": "^3.4.16",
1219
1224
  "embla-carousel-react": "8.6.0",
1220
- "exceljs": "^4.4.0",
1221
1225
  "jspdf": "^4.2.1",
1222
1226
  "jspdf-autotable": "^5.0.8",
1223
1227
  "lucide-react": "^1.22.0",
@@ -1280,6 +1284,7 @@
1280
1284
  "eslint-plugin-jsx-a11y": "^6.10.2",
1281
1285
  "eslint-plugin-react": "^7.37.5",
1282
1286
  "eslint-plugin-react-hooks": "^5.2.0",
1287
+ "exceljs": "^4.4.0",
1283
1288
  "globals": "^17.6.0",
1284
1289
  "i18next": "^26.0.4",
1285
1290
  "jsqr": "^1.4.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"header-settings-CifwJEKB.js","sources":["../../src/components/header-settings/header-settings.agent.ts","../../src/components/header-settings/header-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HeaderSettings. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HeaderSettingsHandle } from './header-settings';\n\nexport const headerSettingsAgent: AgentAdapter<HeaderSettingsHandle> = {\n id: 'header-settings',\n // Each setter persists a single preference value (locale / theme /\n // accessibility) — `set_value` semantics, not an ephemeral view switch.\n capabilities: ['set_value'],\n // Read-back for all three setters. None of these preferences is\n // recoverable from the DOM — `useTheme` resolves preference + OS into\n // a single applied class, so `theme: 'system'` and `theme: 'light'`\n // both paint `.theme-light` — and `set_locale` swallows unknown tags.\n // Without these slots an agent cannot distinguish \"switched to\n // Italian\" from \"the tag was dropped on the floor\". All four are UI\n // preferences: no PHI, no patient-identifiable data (§7).\n state: {\n locale: {\n type: 'string',\n descriptionKey: 'ui.agent.headerSettings.state.locale',\n description:\n 'Active IETF language tag (e.g. \"en\", \"it\", \"ar\"). Initially uses storage, then HTML lang when initialLocaleFromHtmlLang is enabled, then the browser. Read after set_locale to confirm the switch; unknown tags leave it unchanged.',\n read: (handle) => handle.getLocale(),\n },\n theme: {\n type: \"'light' | 'dark' | 'system'\",\n descriptionKey: 'ui.agent.headerSettings.state.theme',\n description:\n \"Stored base-theme preference. `'system'` means no override is set and the OS decides — read `resolvedTheme` for what is actually painted.\",\n read: (handle) => handle.getTheme(),\n },\n accessibility: {\n type: \"'default' | 'accessible' | 'system'\",\n descriptionKey: 'ui.agent.headerSettings.state.accessibility',\n description:\n \"Stored AAA-contrast preference. `'system'` means no override is set and `prefers-contrast` decides.\",\n read: (handle) => handle.getAccessibility(),\n },\n resolvedTheme: {\n type: \"'light' | 'dark' | 'light-accessible' | 'dark-accessible'\",\n descriptionKey: 'ui.agent.headerSettings.state.resolvedTheme',\n description:\n 'The theme actually applied to the document once preference and OS signals resolve. This is what makes a `set_theme(\"system\")` or `set_accessibility(\"system\")` write verifiable.',\n read: (handle) => handle.getResolvedTheme(),\n },\n },\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n argsSchema: {\n type: 'object',\n properties: {\n locale: {\n type: 'string',\n description:\n 'IETF language tag (e.g. \"en\", \"it\", \"ar\"). Unknown tags are silently dropped.',\n },\n },\n required: ['locale'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setLocale',\n description:\n 'Switch the active locale to the given IETF tag. Unknown tags are silently dropped — read the `locale` state slot afterwards to confirm.',\n errors: [\n 'Silently ignored when the tag names a locale the kit ships no bundle for — `locale` is unchanged.',\n ],\n examples: [{ args: { locale: 'it' }, note: 'Switch to Italian.' }],\n invoke: (handle, args: { locale: string }) => {\n // Validation happens inside the handle so the agent surface\n // accepts arbitrary tags and silently drops unknown ones.\n handle.setLocale(args.locale);\n },\n },\n set_theme: {\n safety: 'write',\n argsType: '{ theme: \"light\" | \"dark\" | \"system\" }',\n argsSchema: {\n type: 'object',\n properties: { theme: { enum: ['light', 'dark', 'system'] } },\n required: ['theme'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setTheme',\n description:\n 'Switch the theme preference. Verify with the `theme` slot (the stored preference) and `resolvedTheme` (what is actually painted).',\n examples: [\n { args: { theme: 'dark' }, note: 'Switch to the dark theme.' },\n ],\n invoke: (handle, args: { theme: 'light' | 'dark' | 'system' }) => {\n handle.setTheme(args.theme);\n },\n },\n set_accessibility: {\n safety: 'write',\n argsType: '{ accessibility: \"default\" | \"accessible\" | \"system\" }',\n argsSchema: {\n type: 'object',\n properties: {\n accessibility: {\n enum: ['default', 'accessible', 'system'],\n description:\n \"`'system'` clears the override and follows `prefers-contrast`.\",\n },\n },\n required: ['accessibility'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setAccessibility',\n description:\n 'Switch the accessibility preference. Verify with the `accessibility` slot (the stored preference) and `resolvedTheme` (what is actually painted).',\n examples: [\n {\n args: { accessibility: 'accessible' },\n note: 'Enable the AAA-accessible profile.',\n },\n ],\n invoke: (\n handle,\n args: { accessibility: 'default' | 'accessible' | 'system' },\n ) => {\n handle.setAccessibility(args.accessibility);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'header-settings',\n description: 'Marks the HeaderSettings wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop (forwarded via HTMLAttributes).',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ArrowLeft, ChevronRight, Settings } from 'lucide-react';\nimport { Button } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu/dropdown-menu';\nimport {\n LocalePicker,\n persistLocalePreference,\n useInitialLocale,\n} from '../locale-picker/locale-picker';\nimport {\n useTheme,\n type AccessibilityPreference,\n type ResolvedTheme,\n type ThemePreference,\n} from '../../hooks';\nimport { useLocale } from '../../hooks/use-locale';\nimport { useMediaQuery } from '../../hooks/use-media-query';\nimport { useDocumentDirection } from '../../hooks/use-direction';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { headerSettingsAgent } from './header-settings.agent';\nimport { useLengthTokenPx } from '../_shared/length-token';\n\nfunction applyDocumentAttrs(locale: Locale): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n root.lang = locale;\n root.dir = LOCALE_META[locale].dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n align: {\n start: '',\n end: '',\n },\n },\n defaultVariants: { align: 'end' },\n});\n\n// The language flyout hosts the searchable locale list, so it takes a\n// popover width rather than the menu's minimum.\nconst languageFlyoutClasses = 'ds:w-[var(--popover-size-md)]';\n\nconst panelVariants = cva('', {\n variants: {\n language: {\n true: 'ds:[inline-size:var(--popover-size-md)] ds:[min-inline-size:0] ds:[max-inline-size:calc(100vw_-_2_*_var(--spacing-lg))] ds:[&_input]:min-w-0',\n false: '',\n },\n },\n});\n\ntype PhoneView = 'main' | 'language' | 'appearance';\n\nconst phoneRowClasses = cva(\n 'ds:flex ds:flex-1 ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]',\n);\n\nfunction SettingRowLabel({\n label,\n value,\n lang,\n}: {\n label: string;\n value: string;\n lang?: string;\n}) {\n return (\n <span className={phoneRowClasses()}>\n <span className=\"ds:truncate\">{label}</span>\n <span\n lang={lang}\n className=\"ds:shrink-0 ds:text-muted-foreground ds:[[data-highlighted]_&]:text-current\"\n >\n {value}\n </span>\n </span>\n );\n}\n\nfunction isLocale(tag: string): tag is Locale {\n return Object.prototype.hasOwnProperty.call(LOCALE_META, tag);\n}\n\n/* ------------------------------------------------------------------ */\n/* LanguageSub */\n/* */\n/* One menu row naming the setting and showing the current language */\n/* (\"Language · English ›\"), laid out like DropdownMenu.ChoiceSub. It */\n/* opens a flyout beside the menu holding LocalePicker.SearchList, so */\n/* the 18 locales stay searchable. The flyout is a dialog, not a menu: */\n/* it holds a search combobox and a listbox, which a menu may not own. */\n/* ------------------------------------------------------------------ */\n\nfunction LanguageSub({ locale }: { locale: string }) {\n const { t } = useTranslation('ui');\n const current = LOCALE_META[isLocale(locale) ? locale : 'en'];\n\n // Radix focuses the flyout itself when a keyboard user opens it. Hand\n // that focus on to the search field so typing filters at once.\n const handleFocus = (event: FocusEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n event.currentTarget\n .querySelector<HTMLInputElement>('input')\n ?.focus({ preventScroll: true });\n };\n\n // The flyout closes on the \"back\" arrow (ArrowLeft, or ArrowRight in\n // RTL). Inside the search field that key moves the caret instead,\n // unless the caret is already at the start of the field. Capture\n // phase, so Radix's own handler on the flyout never sees the key.\n const handleKeyDownCapture = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n // Keys pressed while an IME is composing (Japanese, Chinese) belong to\n // the composition, never to the menu.\n if (event.nativeEvent.isComposing) {\n event.stopPropagation();\n return;\n }\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n if (target.selectionStart !== 0 || target.selectionEnd !== 0) {\n event.stopPropagation();\n }\n };\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger aria-haspopup=\"dialog\" data-value={current.code}>\n <span className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:truncate\">\n {t('navigation.headerSettings.language.label')}\n </span>\n <span\n lang={current.code}\n className=\"ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:[[data-highlighted]_&]:text-current\"\n >\n {current.nativeName}\n </span>\n </span>\n </DropdownMenu.SubTrigger>\n {/* Radix renders a `menu`; override to `dialog` and drop the\n menu-only `aria-orientation`, which a dialog may not carry. */}\n <DropdownMenu.SubContent\n role=\"dialog\"\n aria-orientation={undefined}\n className={languageFlyoutClasses}\n onFocus={handleFocus}\n onKeyDownCapture={handleKeyDownCapture}\n // Escape that cancels an IME conversion must not close the menu.\n onEscapeKeyDown={(escapeEvent) => {\n if (escapeEvent.isComposing) escapeEvent.preventDefault();\n }}\n >\n <LocalePicker.SearchList />\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface HeaderSettingsProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n /** Anchor side for the dropdown. Defaults to `end` (matches LTR + RTL). */\n align?: 'start' | 'end';\n /**\n * Size of the cog trigger only. Forwards to the underlying\n * `IconButton`. Defaults to `md` to preserve the existing visual.\n * Use `sm` when composing alongside other `<Button size=\"sm\">`\n * actions in a header row — keeps the visual rhythm consistent.\n *\n * The menu itself (language, appearance and accessible-mode rows)\n * stays at kit defaults regardless — this prop only sizes the\n * trigger.\n */\n size?: 'sm' | 'md' | 'lg';\n /** Disable the trigger entirely. */\n disabled?: boolean;\n /**\n * With no saved choice, start from the page's HTML lang before falling back\n * to the browser. Defaults to false. The first locale surface's mount effect\n * decides for the app lifecycle; pass the same option to LocalePicker.\n */\n initialLocaleFromHtmlLang?: boolean;\n}\n\nexport interface HeaderSettingsHandle {\n /**\n * Switch the active locale. Widened to `string` (vs. `Locale`) so\n * agent surfaces with untyped inputs can call through without\n * extra casting — invalid tags no-op silently.\n */\n setLocale: (next: string) => void;\n setTheme: (next: ThemePreference) => void;\n setAccessibility: (next: AccessibilityPreference) => void;\n /* ---- read-back for the three setters above -------------------- */\n /** Active IETF language tag, as i18next resolved it. */\n getLocale: () => string;\n /** Stored base-theme preference (`'system'` when no override is set). */\n getTheme: () => ThemePreference;\n /** Stored AAA-contrast preference (`'system'` when no override is set). */\n getAccessibility: () => AccessibilityPreference;\n /**\n * The theme actually painted once preference + OS signals resolve.\n * `theme: 'system'` and `theme: 'light'` both render `.theme-light`,\n * so this is what makes a `setTheme('system')` write verifiable.\n */\n getResolvedTheme: () => ResolvedTheme;\n}\n\n/* ------------------------------------------------------------------ */\n/* HeaderSettings */\n/* */\n/* Single button → single DropdownMenu surface, laid out as a View */\n/* menu: Language, Appearance (light / dark / system) and an Accessible */\n/* mode SwitchItem. On phones the lists replace the panel with a Back */\n/* row; on larger screens they open beside it. Every row uses the hooks */\n/* (`useLocale`, `useTheme`) as the standalone components, so there is */\n/* no state duplication. */\n/* ------------------------------------------------------------------ */\n\nexport const HeaderSettings = forwardRef<HTMLDivElement, HeaderSettingsProps>(\n (props, ref) => {\n const {\n align = 'end',\n size = 'md',\n disabled = false,\n initialLocaleFromHtmlLang = false,\n className,\n id,\n ...rest\n } = props as HeaderSettingsProps & { id?: string };\n\n const { t } = useTranslation('ui');\n const theme = useTheme();\n const { locale, setLocale: setLocaleI18n } = useLocale();\n // The language search only mounts with its flyout, so apply the saved\n // (or HTML/browser) language here, on mount.\n useInitialLocale(initialLocaleFromHtmlLang);\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n // PublicHeader uses ds:md:hidden / ds:hidden ds:md:flex for its phone\n // sheet and inline actions. Match that same Tailwind md boundary (768px).\n const isPhone = useMediaQuery('(width < 48rem)');\n const direction = useDocumentDirection();\n const [phoneView, setPhoneView] = useState<PhoneView>('main');\n const view = isPhone ? phoneView : 'main';\n const panelRef = useRef<HTMLDivElement>(null);\n const languageRowRef = useRef<HTMLDivElement>(null);\n const appearanceRowRef = useRef<HTMLDivElement>(null);\n const returnFocusRef = useRef<Exclude<PhoneView, 'main'> | null>(null);\n const activationRef = useRef('keyboard');\n\n useIsomorphicLayoutEffect(() => {\n if (!isPhone && phoneView !== 'main') {\n returnFocusRef.current = phoneView;\n setPhoneView('main');\n }\n if (view === 'language') {\n panelRef.current\n ?.querySelector<HTMLElement>(\n activationRef.current === 'keyboard' ? 'input' : 'button',\n )\n ?.focus({ preventScroll: true });\n } else if (view === 'appearance') {\n panelRef.current\n ?.querySelector<HTMLElement>('[role=\"menuitem\"]')\n ?.focus({ preventScroll: true });\n } else if (returnFocusRef.current) {\n const section = returnFocusRef.current;\n // Desktop renders SubTrigger/ChoiceSub in place of the phone rows.\n const row = isPhone\n ? (section === 'language' ? languageRowRef : appearanceRowRef).current\n : panelRef.current?.querySelector<HTMLElement>(\n `[role=\"menuitem\"][aria-haspopup=\"${section === 'language' ? 'dialog' : 'menu'}\"]`,\n );\n row?.focus({ preventScroll: true });\n returnFocusRef.current = null;\n }\n }, [isPhone, phoneView, view]);\n\n const handlePhoneRowKeyDown = (\n event: KeyboardEvent<HTMLDivElement>,\n section: Exclude<PhoneView, 'main'>,\n ) => {\n if (event.nativeEvent.isComposing) return;\n const forwardKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n if (\n event.key === 'Enter' ||\n event.key === ' ' ||\n event.key === forwardKey\n )\n activationRef.current = 'keyboard';\n if (event.key === forwardKey) {\n event.preventDefault();\n setPhoneView(section);\n }\n };\n\n const goBack = () => {\n if (view === 'main') return;\n returnFocusRef.current = view;\n setPhoneView('main');\n };\n\n const handlePhoneKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (view === 'main') return;\n if (event.nativeEvent.isComposing) {\n event.stopPropagation();\n return;\n }\n if (event.key !== (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft'))\n return;\n const target = event.target;\n // As in LanguageSub, leave the caret alone until it reaches the start.\n if (\n target instanceof HTMLInputElement &&\n (target.selectionStart !== 0 || target.selectionEnd !== 0)\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n goBack();\n };\n\n // Same side-effect chain as LocalePicker's internal helper:\n // i18next.changeLanguage → document.dir/lang → persist.\n // Share persistence and session preference with every locale picker.\n const setLocaleWithPersistence = useCallback(\n (next: Locale) => {\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n persistLocalePreference(next);\n },\n [setLocaleI18n],\n );\n const setLocaleRef = useRef(setLocaleWithPersistence);\n setLocaleRef.current = setLocaleWithPersistence;\n // Assigned during render (not in an effect) so an agent reading the\n // slot immediately after `set_locale` sees the settled value rather\n // than the pre-commit one.\n const localeRef = useRef(locale);\n localeRef.current = locale;\n\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const agentHandle = useMemo<HeaderSettingsHandle>(\n () => ({\n setLocale: (next: string) => {\n // Mirrors LocalePicker's gating — silently drop unknown tags\n // rather than crash mid-cascade. `LOCALES_WITH_BUNDLES` is\n // re-imported via the LOCALE_META keys so this file doesn't\n // need the resources module on the build-agent-catalog path.\n if (Object.prototype.hasOwnProperty.call(LOCALE_META, next)) {\n setLocaleRef.current(next as Locale);\n }\n },\n setTheme: (next) => themeRef.current.setTheme(next),\n setAccessibility: (next) => themeRef.current.setAccessibility(next),\n // Read-back. None of the three preferences is recoverable from\n // the DOM: `useTheme` resolves preference + OS into one applied\n // class, so `theme: 'system'` and `theme: 'light'` both paint\n // `.theme-light`. Without these an agent cannot tell a switch\n // that landed from one that was dropped.\n getLocale: () => localeRef.current,\n getTheme: () => themeRef.current.theme,\n getAccessibility: () => themeRef.current.accessibility,\n getResolvedTheme: () => themeRef.current.resolvedTheme,\n }),\n [],\n );\n useAgentRegistration(headerSettingsAgent, agentHandle, id);\n\n const accessibleChecked = theme.accessibility === 'accessible';\n // Keep the panel clear of the screen edge by the phone menu's own\n // side margin. In the PublicHeader sheet the gear is\n // 24px from the edge and an end-aligned 224px panel would otherwise be\n // pushed flush against it. On desktop it never reaches the edge.\n const edgeMargin = useLengthTokenPx('--spacing-lg', forwardedRef, 24);\n const languageLabel = t('navigation.headerSettings.language.label');\n const appearanceLabel = t('navigation.headerSettings.appearance.label');\n const currentLocale = LOCALE_META[isLocale(locale) ? locale : 'en'];\n const appearanceOptions = [\n {\n value: 'light',\n label: t('navigation.headerSettings.appearance.light'),\n },\n { value: 'dark', label: t('navigation.headerSettings.appearance.dark') },\n {\n value: 'system',\n label: t('navigation.headerSettings.appearance.system'),\n },\n ] as const;\n const backLabel = t('navigation.headerSettings.back');\n\n return (\n <div\n ref={forwardedRef}\n data-component=\"header-settings\"\n data-component-id={id}\n className={wrapperVariants({ align, className })}\n {...rest}\n >\n <DropdownMenu.Root\n onOpenChange={(open) => {\n if (!open) {\n returnFocusRef.current = null;\n setPhoneView('main');\n }\n }}\n >\n <DropdownMenu.Trigger asChild>\n <IconButton\n size={size}\n disabled={disabled}\n icon={<Settings aria-hidden />}\n aria-label={t('navigation.headerSettings.trigger')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n ref={panelRef}\n align={align}\n collisionPadding={edgeMargin}\n className={panelVariants({ language: view === 'language' })}\n {...(view === 'language'\n ? {\n role: 'dialog',\n 'aria-orientation': undefined,\n 'aria-label': languageLabel,\n 'aria-labelledby': undefined,\n }\n : {})}\n onKeyDownCapture={handlePhoneKeyDown}\n onEscapeKeyDown={(event) => {\n if (event.isComposing) event.preventDefault();\n }}\n >\n {view === 'language' ? (\n <div\n role=\"presentation\"\n onKeyDown={(event) => {\n // The dialog owns typing and Tab, not Radix's menu\n // typeahead. Its two tab stops are Back and search.\n if (\n event.key === 'Tab' &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n event.currentTarget\n .querySelector<HTMLElement>(\n event.target instanceof HTMLInputElement\n ? 'button'\n : 'input',\n )\n ?.focus();\n }\n event.stopPropagation();\n }}\n >\n <Button\n intent=\"ghost\"\n size=\"sm\"\n className=\"ds:w-full ds:justify-start ds:text-start ds:font-normal ds:min-h-[var(--min-target-size)] ds:sm:min-h-[var(--min-target-size)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:gap-[var(--spacing-sm)] ds:[&>span:last-child]:flex-1\"\n startIcon={<ArrowLeft aria-hidden className=\"ds:size-4\" />}\n flipIconInRtl\n onClick={goBack}\n >\n <SettingRowLabel label={backLabel} value={languageLabel} />\n </Button>\n <DropdownMenu.Separator />\n <LocalePicker.SearchList />\n </div>\n ) : view === 'appearance' ? (\n <>\n <DropdownMenu.Item\n startIcon={\n <ArrowLeft\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onSelect={(event) => {\n event.preventDefault();\n goBack();\n }}\n >\n <SettingRowLabel label={backLabel} value={appearanceLabel} />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.RadioGroup\n aria-label={appearanceLabel}\n value={theme.theme}\n onValueChange={(next) =>\n theme.setTheme(next as ThemePreference)\n }\n >\n {appearanceOptions.map((option) => (\n <DropdownMenu.RadioItem\n key={option.value}\n value={option.value}\n onSelect={(event) => event.preventDefault()}\n >\n {option.label}\n </DropdownMenu.RadioItem>\n ))}\n </DropdownMenu.RadioGroup>\n </>\n ) : (\n <>\n {isPhone ? (\n <DropdownMenu.Item\n ref={languageRowRef}\n aria-haspopup=\"dialog\"\n data-value={currentLocale.code}\n endIcon={\n <ChevronRight\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onPointerDown={(event) => {\n activationRef.current = event.pointerType;\n }}\n onKeyDown={(event) =>\n handlePhoneRowKeyDown(event, 'language')\n }\n onSelect={(event) => {\n event.preventDefault();\n setPhoneView('language');\n }}\n >\n <SettingRowLabel\n label={languageLabel}\n value={currentLocale.nativeName}\n lang={currentLocale.code}\n />\n </DropdownMenu.Item>\n ) : (\n <LanguageSub locale={locale} />\n )}\n <DropdownMenu.Separator />\n {isPhone ? (\n <DropdownMenu.Item\n ref={appearanceRowRef}\n aria-haspopup=\"menu\"\n data-value={theme.theme}\n endIcon={\n <ChevronRight\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onPointerDown={(event) => {\n activationRef.current = event.pointerType;\n }}\n onKeyDown={(event) =>\n handlePhoneRowKeyDown(event, 'appearance')\n }\n onSelect={(event) => {\n event.preventDefault();\n setPhoneView('appearance');\n }}\n >\n <SettingRowLabel\n label={appearanceLabel}\n value={\n appearanceOptions.find(\n (option) => option.value === theme.theme,\n )?.label ?? ''\n }\n />\n </DropdownMenu.Item>\n ) : (\n <DropdownMenu.ChoiceSub\n label={appearanceLabel}\n value={theme.theme}\n onValueChange={theme.setTheme}\n options={appearanceOptions}\n />\n )}\n {/* Writes through useTheme, so the document gets the\n `theme-accessible` class at once (including the Lexend\n swap for Latin scripts, see src/tokens/index.css). */}\n <DropdownMenu.SwitchItem\n checked={accessibleChecked}\n onCheckedChange={(next) =>\n theme.setAccessibility(next ? 'accessible' : 'default')\n }\n >\n {t('navigation.headerSettings.appearance.accessible')}\n </DropdownMenu.SwitchItem>\n </>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n },\n);\n\nHeaderSettings.displayName = 'HeaderSettings';\n"],"names":["headerSettingsAgent","handle","args","applyDocumentAttrs","locale","root","LOCALE_META","wrapperVariants","cva","languageFlyoutClasses","panelVariants","phoneRowClasses","SettingRowLabel","label","value","lang","jsxs","jsx","isLocale","tag","LanguageSub","t","useTranslation","current","handleFocus","event","_a","handleKeyDownCapture","target","DropdownMenu","escapeEvent","LocalePicker","HeaderSettings","forwardRef","props","ref","align","size","disabled","initialLocaleFromHtmlLang","className","id","rest","theme","useTheme","setLocaleI18n","useLocale","useInitialLocale","forwardedRef","useRef","useImperativeHandle","isPhone","useMediaQuery","direction","useDocumentDirection","phoneView","setPhoneView","useState","view","panelRef","languageRowRef","appearanceRowRef","returnFocusRef","activationRef","useIsomorphicLayoutEffect","_b","_d","_c","section","row","_e","handlePhoneRowKeyDown","forwardKey","goBack","handlePhoneKeyDown","setLocaleWithPersistence","useCallback","next","persistLocalePreference","setLocaleRef","localeRef","themeRef","agentHandle","useMemo","useAgentRegistration","accessibleChecked","edgeMargin","useLengthTokenPx","languageLabel","appearanceLabel","currentLocale","appearanceOptions","backLabel","open","IconButton","Settings","Button","ArrowLeft","Fragment","option","ChevronRight"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"locale-picker-QbT1p60X.js","sources":["../../src/components/flag/flag-core.ts","../../src/i18n/locale-meta.ts","../../src/components/locale-picker/locale-picker.agent.ts","../../src/components/locale-picker/locale-picker.tsx"],"sourcesContent":["import { createElement, forwardRef } from 'react';\nimport {\n FlagView,\n flagClasses,\n safeFlagGlob,\n type FlagAssetMap,\n} from './flag-view';\nimport type { FlagProps } from './flag';\n\n/* ------------------------------------------------------------------ */\n/* CoreFlag — the locale-chrome flag binding. */\n/* */\n/* Identical component to `Flag` (same props, same FlagView, same DOM, */\n/* same synchronous paint) bound to a SUBSET of the asset set: only the */\n/* countries the kit's own locale chrome can ever ask for. */\n/* */\n/* Why it exists: LocalePicker ships inside HeaderSettings, which ships */\n/* inside MarketplaceAppShell, which is on every route of every */\n/* consumer — including login screens. Importing `Flag` there pulled */\n/* all 530 inlined SVGs (485,552 B of chunk) onto pages that offer a */\n/* three-item language menu. This binding pulls 36 (29,183 B). */\n/* */\n/* The glob pattern below MUST list every `LOCALE_META[…].countryCode`. */\n/* `flag.test.tsx` asserts that (it fails if a locale is added to */\n/* `src/i18n/locale-meta.ts` without its flag), so the two can't drift. */\n/* */\n/* Both patterns are spelled out as string literals (rather than built */\n/* from a shared constant) because `import.meta.glob` is a build macro: */\n/* Vite reads the pattern off the AST, so it must be a literal — an */\n/* interpolated template silently matches nothing. */\n/* ------------------------------------------------------------------ */\n\nconst CORE_RECTANGLE_URL_MAP: FlagAssetMap = safeFlagGlob(() =>\n import.meta.glob<string>(\n '/node_modules/country-flag-icons/3x2/{AL,CN,DE,ES,FR,GB,GR,IN,IT,JP,NL,PL,PT,RO,RU,SA,SE,TR}.svg',\n { query: '?url', import: 'default', eager: true },\n ),\n);\n\nconst CORE_SQUARE_URL_MAP: FlagAssetMap = safeFlagGlob(() =>\n import.meta.glob<string>(\n '/node_modules/country-flag-icons/1x1/{AL,CN,DE,ES,FR,GB,GR,IN,IT,JP,NL,PL,PT,RO,RU,SA,SE,TR}.svg',\n { query: '?url', import: 'default', eager: true },\n ),\n);\n\n/** Country codes bundled with `CoreFlag`. Subset of `FLAG_COUNTRIES`. */\nexport const CORE_FLAG_COUNTRIES: readonly string[] = Object.freeze(\n Object.keys(CORE_RECTANGLE_URL_MAP).sort(),\n);\n\n/** Does `CoreFlag` bundle an asset for this country code? Case-insensitive. */\nexport function hasCoreFlag(country: string): boolean {\n return country.toUpperCase() in CORE_RECTANGLE_URL_MAP;\n}\n\n/**\n * `Flag` restricted to the kit's own locale set. Internal — not exported\n * from `index.ts` or the root barrel. Renders `FlagView` with no JSX so\n * this file stays a `.ts` module alongside the glob it owns.\n */\nexport const CoreFlag = forwardRef<HTMLElement, FlagProps>(\n (\n {\n country,\n label,\n shape = 'rectangle',\n size = 'sm',\n rounded = 'sm',\n className,\n ...rest\n },\n ref,\n ) => {\n const code = country.toUpperCase();\n const urlMap =\n shape === 'square' ? CORE_SQUARE_URL_MAP : CORE_RECTANGLE_URL_MAP;\n\n return createElement(FlagView, {\n ref,\n code,\n src: urlMap[code],\n label,\n className: flagClasses({ shape, size, rounded }, className),\n ...rest,\n });\n },\n);\n\nCoreFlag.displayName = 'CoreFlag';\n","/* -------------------------------------------------------------------- */\n/* Locale metadata registry. */\n/* */\n/* Single source of truth for human-facing locale information — native */\n/* name, English name, flag emoji, and writing direction. Consumed by */\n/* LocalePicker / HeaderSettings to render the language switcher. */\n/* */\n/* Keys must match `LOCALES_WITH_BUNDLES` from `./supported-locales` */\n/* 1:1; the `locale-meta.test.ts` parity check fails the build if a code */\n/* is added to one and not the other. */\n/* */\n/* Flag emojis use the Regional Indicator pair convention — a few of */\n/* the codes are language tags rather than country tags (en, ar, hi); */\n/* the flag chosen is the \"default-region\" the kit ships marketing */\n/* surfaces in. Consumers that need a different region flag (e.g. */\n/* British vs. American English) can override via `LOCALE_META[code]`. */\n/* -------------------------------------------------------------------- */\n\nimport { LOCALES_WITH_BUNDLES } from './supported-locales';\n\n/** Reading direction. Mirrors the shape of `hooks/use-locale.ts#LocaleDir`. */\nexport type LocaleDir = 'ltr' | 'rtl';\n\n/** IETF locale tag from the kit's bundled set. */\nexport type Locale = (typeof LOCALES_WITH_BUNDLES)[number];\n\nexport interface LocaleMetaEntry {\n /** IETF locale tag (matches the key in `LOCALES_WITH_BUNDLES`). */\n code: Locale;\n /** Endonym — the locale's name in its own language (\"Italiano\", \"العربية\"). */\n nativeName: string;\n /** Exonym — the locale's name in English (\"Italian\", \"Arabic\"). */\n englishName: string;\n /**\n * ISO 3166-1 alpha-2 country code for the default-region flag. Feed\n * to the kit's `<Flag country={…} />` component to render the actual\n * flag SVG (NOT the emoji glyph — those don't paint on Windows and\n * lose fidelity at hero sizes). A few language tags here aren't tied\n * to a single country (en, ar, hi); we pick the AlfaDocs default\n * marketing region — consumers needing a different region flag\n * override at the call site.\n */\n countryCode: string;\n /**\n * Regional-indicator flag emoji. Retained as a fallback for non-DOM\n * contexts (terminal logs, plain-text exports) and the rare consumer\n * surface that can't mount the kit's `Flag` component. UI surfaces\n * should always reach for `countryCode` + `<Flag />` instead.\n */\n flag: string;\n /** Reading direction. */\n dir: LocaleDir;\n}\n\n/**\n * Canonical metadata for every locale shipped in `LOCALES_WITH_BUNDLES`.\n * Order matches the bundled-locales array so iteration is stable.\n */\nexport const LOCALE_META: Record<Locale, LocaleMetaEntry> = {\n en: {\n code: 'en',\n nativeName: 'English',\n englishName: 'English',\n countryCode: 'GB',\n flag: '🇬🇧',\n dir: 'ltr',\n },\n it: {\n code: 'it',\n nativeName: 'Italiano',\n englishName: 'Italian',\n countryCode: 'IT',\n flag: '🇮🇹',\n dir: 'ltr',\n },\n de: {\n code: 'de',\n nativeName: 'Deutsch',\n englishName: 'German',\n countryCode: 'DE',\n flag: '🇩🇪',\n dir: 'ltr',\n },\n ar: {\n code: 'ar',\n nativeName: 'العربية',\n englishName: 'Arabic',\n countryCode: 'SA',\n flag: '🇸🇦',\n dir: 'rtl',\n },\n fr: {\n code: 'fr',\n nativeName: 'Français',\n englishName: 'French',\n countryCode: 'FR',\n flag: '🇫🇷',\n dir: 'ltr',\n },\n es: {\n code: 'es',\n nativeName: 'Español',\n englishName: 'Spanish',\n countryCode: 'ES',\n flag: '🇪🇸',\n dir: 'ltr',\n },\n pt: {\n code: 'pt',\n nativeName: 'Português',\n englishName: 'Portuguese',\n countryCode: 'PT',\n flag: '🇵🇹',\n dir: 'ltr',\n },\n nl: {\n code: 'nl',\n nativeName: 'Nederlands',\n englishName: 'Dutch',\n countryCode: 'NL',\n flag: '🇳🇱',\n dir: 'ltr',\n },\n ro: {\n code: 'ro',\n nativeName: 'Română',\n englishName: 'Romanian',\n countryCode: 'RO',\n flag: '🇷🇴',\n dir: 'ltr',\n },\n sq: {\n code: 'sq',\n nativeName: 'Shqip',\n englishName: 'Albanian',\n countryCode: 'AL',\n flag: '🇦🇱',\n dir: 'ltr',\n },\n tr: {\n code: 'tr',\n nativeName: 'Türkçe',\n englishName: 'Turkish',\n countryCode: 'TR',\n flag: '🇹🇷',\n dir: 'ltr',\n },\n pl: {\n code: 'pl',\n nativeName: 'Polski',\n englishName: 'Polish',\n countryCode: 'PL',\n flag: '🇵🇱',\n dir: 'ltr',\n },\n sv: {\n code: 'sv',\n nativeName: 'Svenska',\n englishName: 'Swedish',\n countryCode: 'SE',\n flag: '🇸🇪',\n dir: 'ltr',\n },\n ru: {\n code: 'ru',\n nativeName: 'Русский',\n englishName: 'Russian',\n countryCode: 'RU',\n flag: '🇷🇺',\n dir: 'ltr',\n },\n el: {\n code: 'el',\n nativeName: 'Ελληνικά',\n englishName: 'Greek',\n countryCode: 'GR',\n flag: '🇬🇷',\n dir: 'ltr',\n },\n ja: {\n code: 'ja',\n nativeName: '日本語',\n englishName: 'Japanese',\n countryCode: 'JP',\n flag: '🇯🇵',\n dir: 'ltr',\n },\n zh: {\n code: 'zh',\n nativeName: '中文',\n englishName: 'Chinese',\n countryCode: 'CN',\n flag: '🇨🇳',\n dir: 'ltr',\n },\n hi: {\n code: 'hi',\n nativeName: 'हिन्दी',\n englishName: 'Hindi',\n countryCode: 'IN',\n flag: '🇮🇳',\n dir: 'ltr',\n },\n};\n\n/**\n * Canonical (i18n-parity) order — used when consumers need the same\n * sequence as `LOCALES_WITH_BUNDLES` (e.g. generating fixtures or\n * snapshot keys). Pickers / menus should use `LOCALE_LIST` instead,\n * which sorts alphabetically.\n */\nexport const LOCALE_LIST_CANONICAL: readonly LocaleMetaEntry[] =\n LOCALES_WITH_BUNDLES.map((code) => LOCALE_META[code]);\n\n/**\n * Picker-facing list — sorted alphabetically by English name so the\n * order is deterministic and language-independent. End users searching\n * by native name use the picker's input box to filter; the visible\n * order doesn't depend on the active locale's collation.\n *\n * \"System Default\" (the OS-driven fallback) is rendered separately at\n * the top of `LocalePicker.SearchList` — not in this list — so the\n * alphabetical order here applies to the 18 explicit locale rows only.\n */\nexport const LOCALE_LIST: readonly LocaleMetaEntry[] = [\n ...LOCALES_WITH_BUNDLES.map((code) => LOCALE_META[code]),\n].sort((a, b) => a.englishName.localeCompare(b.englishName, 'en'));\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — LocalePicker. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { LocalePickerHandle } from './locale-picker';\n\nexport const localePickerAgent: AgentAdapter<LocalePickerHandle> = {\n id: 'locale-picker',\n // Persists a single locale choice via the handle's `setLocale` → set_value.\n capabilities: ['set_value'],\n state: {\n locale: {\n type: 'string',\n descriptionKey: 'ui.agent.localePicker.state.locale',\n description:\n 'Resolved IETF tag of the locale currently applied to the page. Read this after `set_locale` — the setter silently drops tags the kit ships no bundle for, so this is the only confirmation the switch landed.',\n read: (handle) => handle.getLocale(),\n },\n isSystemDefault: {\n type: 'boolean',\n descriptionKey: 'ui.agent.localePicker.state.isSystemDefault',\n description:\n 'True when following navigator.language. False for a saved or explicit choice, or when initialLocaleFromHtmlLang used the page language. Read alongside locale to distinguish browser detection from a concrete language selection.',\n read: (handle) => handle.getIsSystemDefault(),\n },\n },\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n argsSchema: {\n type: 'object',\n properties: {\n locale: {\n type: 'string',\n description:\n 'IETF language tag (e.g. \"en\", \"it\"). Unsupported tags are a no-op.',\n },\n },\n required: ['locale'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.localePicker.actions.setLocale',\n description:\n 'Switch the active locale to the given IETF tag. Unsupported tags are a silent no-op — read the `locale` state slot afterwards to confirm the switch landed.',\n errors: [\n 'Silently ignored when the tag names a locale the kit ships no bundle for — `locale` is unchanged.',\n ],\n invoke: (handle, args: { locale: string }) => {\n // The handle's own implementation gates against\n // `LOCALES_WITH_BUNDLES`, so a tag the kit doesn't ship is a\n // no-op rather than a runtime crash.\n handle.setLocale(args.locale);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'locale-picker',\n description: 'Marks the LocalePicker wrapper.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type HTMLAttributes,\n type Ref,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, Globe, Monitor } from 'lucide-react';\nimport { Command, defaultFilter } from 'cmdk';\nimport { IconButton } from '../button/icon-button';\nimport { Popover } from '../popover/popover';\nimport { CoreFlag, hasCoreFlag } from '../flag/flag-core';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_PADDING_X,\n} from '../_shared/input-surface';\nimport { LOCALE_LIST, LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { LOCALES_WITH_BUNDLES, resolveUiLanguage } from '../../i18n/config';\nimport { useLocale } from '../../hooks/use-locale';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { localePickerAgent } from './locale-picker.agent';\n\n/* ------------------------------------------------------------------ */\n/* Persistence + initial locale detection */\n/* */\n/* Detection runs once per app lifecycle. The first effect chooses */\n/* storage, then (when opted in) html lang, then the browser locale. */\n/* Only an explicit language selection is persisted. The shared */\n/* preference also distinguishes HTML from System Default when both */\n/* leave storage empty, including after menus close and reopen. */\n/* ------------------------------------------------------------------ */\n\nexport const LOCALE_STORAGE_KEY = 'alfadocs-ui.locale';\n\n/**\n * Sentinel value (and Combobox-row key) for \"follow the browser /\n * OS locale\". Mirrors the ThemeToggle's `'system'` preference: the\n * picker doesn't store a concrete locale code; the runtime resolves\n * to `navigator.language` once per app lifecycle, or when selected.\n */\nexport const LOCALE_SYSTEM_DEFAULT = 'system' as const;\nexport type LocalePreference = Locale | typeof LOCALE_SYSTEM_DEFAULT;\n\nlet detectionFired = false;\nlet sessionPreference: LocalePreference | undefined;\nconst preferenceListeners = new Set<() => void>();\n\n/** @internal Simulate a fresh app lifecycle after test components unmount. */\nexport function __resetLocalePreferenceForTests(): void {\n detectionFired = false;\n sessionPreference = undefined;\n}\n\nfunction subscribePreference(listener: () => void): () => void {\n preferenceListeners.add(listener);\n return () => {\n preferenceListeners.delete(listener);\n };\n}\n\nfunction getPreference(): LocalePreference {\n if (sessionPreference !== undefined) return sessionPreference;\n const stored = safeReadStorage(LOCALE_STORAGE_KEY);\n if (stored === null) return LOCALE_SYSTEM_DEFAULT;\n // An unsupported stored value still counts as an explicit choice, as before.\n return isSupportedLocale(stored) ? stored : 'en';\n}\n\nfunction updatePreference(next: LocalePreference): void {\n sessionPreference = next;\n preferenceListeners.forEach((listener) => listener());\n}\n\nfunction isSupportedLocale(value: unknown): value is Locale {\n return (\n typeof value === 'string' &&\n (LOCALES_WITH_BUNDLES as readonly string[]).includes(value)\n );\n}\n\nfunction safeReadStorage(key: string): string | null {\n if (typeof window === 'undefined') return null;\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction safeWriteStorage(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* Storage can throw in private mode / when quota is exceeded — the\n in-memory state is the source of truth. Same silent-fail shape\n as use-theme.ts. */\n }\n}\n\nfunction detectBrowserLocale(): Locale {\n if (typeof navigator === 'undefined') return 'en';\n const raw = navigator.language;\n if (!raw) return 'en';\n const base = raw.toLowerCase().split('-')[0];\n return isSupportedLocale(base) ? base : 'en';\n}\n\nfunction applyDocumentAttrs(locale: Locale): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n root.lang = locale;\n root.dir = LOCALE_META[locale].dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* Shared state hook */\n/* */\n/* Centralises the setLocale wrapper so both the standalone picker */\n/* and the inline `LocalePicker.SearchList` share one source of truth: */\n/* 1. delegate to `useLocale().setLocale` (the i18next change) */\n/* 2. set `document.documentElement.dir` + `lang` */\n/* 3. persist to localStorage at `alfadocs-ui.locale` */\n/* ------------------------------------------------------------------ */\n\ninterface LocalePickerState {\n /** Resolved locale actually applied to the page (always concrete). */\n locale: Locale;\n /**\n * True when the resolved locale came from `navigator.language`\n * rather than HTML or an explicit user choice. Marks the\n * \"System Default\" row as the active selection.\n */\n isSystemDefault: boolean;\n /**\n * Switch to a specific locale (persists) OR back to the System\n * Default (clears the localStorage entry and re-detects).\n */\n setLocale: (next: LocalePreference) => void;\n}\n\nfunction safeRemoveStorage(key: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.removeItem(key);\n } catch {\n /* private mode etc. — silent fail per the rest of the file. */\n }\n}\n\n/** Shared persistence for picker selections and HeaderSettings agent actions. */\nexport function persistLocalePreference(next: LocalePreference): void {\n if (next === LOCALE_SYSTEM_DEFAULT) safeRemoveStorage(LOCALE_STORAGE_KEY);\n else safeWriteStorage(LOCALE_STORAGE_KEY, next);\n updatePreference(next);\n}\n\nfunction useLocalePickerState(\n initialLocaleFromHtmlLang = false,\n): LocalePickerState {\n const { locale: rawLocale, setLocale: setLocaleI18n } = useLocale();\n const preference = useSyncExternalStore(\n subscribePreference,\n getPreference,\n () => LOCALE_SYSTEM_DEFAULT,\n );\n\n // Coerce the i18next-reported locale to the supported set so consumers\n // never see an un-bundled tag (e.g. when the host app pre-loads\n // `en-US` before the kit's resources land).\n const locale: Locale = isSupportedLocale(rawLocale) ? rawLocale : 'en';\n\n const setLocale = useCallback(\n (next: LocalePreference) => {\n if (next === LOCALE_SYSTEM_DEFAULT) {\n // Clear persistence + re-resolve to navigator.language.\n persistLocalePreference(LOCALE_SYSTEM_DEFAULT);\n const detected = detectBrowserLocale();\n void setLocaleI18n(detected);\n applyDocumentAttrs(detected);\n return;\n }\n if (!isSupportedLocale(next)) return;\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n persistLocalePreference(next);\n },\n [setLocaleI18n],\n );\n\n useInitialLocale(initialLocaleFromHtmlLang);\n\n return {\n locale,\n isSystemDefault: preference === LOCALE_SYSTEM_DEFAULT,\n setLocale,\n };\n}\n\n/**\n * Applies storage, optionally HTML lang, then the browser, once per app lifecycle.\n * Every locale surface calls it on mount (the picker, and HeaderSettings,\n * whose search list only mounts when its flyout opens), so the page starts\n * in the right language and direction whichever one the host renders.\n * The first caller whose mount effect runs decides the option for all surfaces.\n * Pass the same option everywhere; later mounts or prop changes do not re-detect.\n */\nexport function useInitialLocale(initialLocaleFromHtmlLang = false): void {\n const { locale: rawLocale, setLocale: setLocaleI18n } = useLocale();\n useEffect(() => {\n if (detectionFired) return;\n detectionFired = true;\n const stored = safeReadStorage(LOCALE_STORAGE_KEY);\n if (isSupportedLocale(stored)) {\n // User-chosen value persists — keep i18next + document in sync.\n if (stored !== rawLocale) void setLocaleI18n(stored);\n applyDocumentAttrs(stored);\n updatePreference(stored);\n return;\n }\n const htmlLocale =\n initialLocaleFromHtmlLang && typeof document !== 'undefined'\n ? resolveUiLanguage(document.documentElement.lang.trim())\n : undefined;\n const supportedHtmlLocale = isSupportedLocale(htmlLocale)\n ? htmlLocale\n : undefined;\n const detected = supportedHtmlLocale ?? detectBrowserLocale();\n // Keep automatic choices in memory only. Choosing System Default later\n // follows the browser for this session, even when HTML was used initially.\n updatePreference(supportedHtmlLocale ?? LOCALE_SYSTEM_DEFAULT);\n void setLocaleI18n(detected);\n applyDocumentAttrs(detected);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- intentional one-shot detection\n }, []);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n variant: {\n icon: '',\n compact: '',\n },\n },\n defaultVariants: { variant: 'icon' },\n});\n\nconst compactTriggerClasses = [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:px-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:bg-transparent ds:text-foreground',\n 'ds:hover:bg-muted',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n 'type-body-sm',\n].join(' ');\n\nconst popoverContentClasses = [\n 'ds:w-[18rem] ds:rounded-[var(--radius-md)]',\n 'ds:bg-background ds:text-foreground ds:border ds:border-border',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:overflow-hidden',\n].join(' ');\n\nconst localeRowClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:select-none',\n 'ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:text-foreground ds:outline-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type LocalePickerVariant = 'icon' | 'compact';\n\nexport interface LocalePickerProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n variant?: LocalePickerVariant;\n /**\n * Controlled escape hatch — when omitted the picker reads/writes\n * `useLocale()` directly so a bare `<LocalePicker />` works with no\n * wiring. Pass both to opt into controlled mode.\n */\n value?: Locale;\n onValueChange?: (next: LocalePreference) => void;\n /** Disable interaction (greys out the trigger). */\n disabled?: boolean;\n /** Mark as busy (kept open / focusable but read-only). */\n loading?: boolean;\n /**\n * With no saved choice, start from the page's HTML lang before falling back\n * to the browser. Defaults to false. The first locale surface's mount effect\n * decides for the app lifecycle; pass the same option to HeaderSettings.\n */\n initialLocaleFromHtmlLang?: boolean;\n /**\n * Side the search popover opens onto, relative to the trigger.\n * Defaults to `bottom` (standard dropdown). Use `end` (inline-end —\n * right in LTR, left in RTL) when nesting the LocalePicker inside\n * another popover/menu so the search surface flies out to the side\n * rather than stacking below.\n */\n popoverSide?: 'top' | 'bottom' | 'start' | 'end';\n}\n\n/**\n * Curated imperative handle for agent / external automation. The\n * `setLocale` parameter is widened to `string` (rather than the\n * narrower `Locale`) so untyped agent inputs don't have to thread the\n * `LOCALES_WITH_BUNDLES` constraint at the call site — the\n * implementation validates internally and no-ops on an unsupported\n * tag.\n */\nexport interface LocalePickerHandle {\n setLocale: (next: string) => void;\n /** Resolved locale tag actually applied to the page (always concrete). */\n getLocale: () => string;\n /**\n * True when the resolved locale came from `navigator.language` rather\n * than HTML or an explicit user choice. Read-back for `set_locale`: the\n * resolved tag alone cannot tell \"the user chose English\" from\n * \"we are following the browser, which happens to be English\".\n */\n getIsSystemDefault: () => boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* LocalePicker.SearchList — the inline searchable list */\n/* */\n/* HeaderSettings renders this directly inside its DropdownMenu so the */\n/* same UX is reused without nesting another popover. Standalone the */\n/* root component renders this same widget inside a Popover. */\n/* ------------------------------------------------------------------ */\n\nexport interface LocalePickerSearchListProps {\n /**\n * Active selection. Either a `Locale` code or the\n * `LOCALE_SYSTEM_DEFAULT` sentinel (when the user hasn't made an\n * explicit choice and the kit is following `navigator.language`).\n * Defaults to the shared store.\n */\n value?: LocalePreference;\n /**\n * Fires after a successful selection. Accepts a concrete `Locale`\n * or `LOCALE_SYSTEM_DEFAULT` (when the user picks the \"System\n * Default\" row at the top of the list).\n *\n * Defaults to the shared setter (delegates to useLocale, persists\n * or clears storage, updates document.dir/lang).\n */\n onValueChange?: (next: LocalePreference) => void;\n /** Optional id for the search input (axe `aria-labelledby` chain). */\n inputId?: string;\n /** Disable the input + list interactions. */\n disabled?: boolean;\n /** Mark as busy (read-only). */\n loading?: boolean;\n className?: string;\n}\n\nconst searchListVariants = cva('ds:flex ds:flex-col', {\n variants: {\n loading: {\n true: 'ds:opacity-60 ds:pointer-events-none',\n false: '',\n },\n },\n defaultVariants: { loading: false },\n});\n\nexport const LocalePickerSearchList = forwardRef<\n HTMLDivElement,\n LocalePickerSearchListProps\n>(\n (\n {\n value: valueProp,\n onValueChange,\n inputId: inputIdProp,\n disabled = false,\n loading = false,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const store = useLocalePickerState();\n // Resolved-to-render-with: which locale name to display for\n // \"System Default ({{nativeName}})\". Always a concrete Locale.\n const resolvedLocale = store.locale;\n // Selection-state: the picker's current value is either an\n // explicit Locale or the System Default sentinel.\n const currentSelection: LocalePreference =\n valueProp ??\n (store.isSystemDefault ? LOCALE_SYSTEM_DEFAULT : store.locale);\n const generatedId = useId();\n const inputId = inputIdProp ?? `${generatedId}-search`;\n const [search, setSearch] = useState('');\n\n const handleSelect = useCallback(\n (code: string) => {\n if (disabled || loading) return;\n if (code === LOCALE_SYSTEM_DEFAULT) {\n if (onValueChange) {\n onValueChange(LOCALE_SYSTEM_DEFAULT);\n } else {\n store.setLocale(LOCALE_SYSTEM_DEFAULT);\n }\n return;\n }\n if (!isSupportedLocale(code)) return;\n if (onValueChange) {\n onValueChange(code);\n } else {\n store.setLocale(code);\n }\n },\n [disabled, loading, onValueChange, store],\n );\n\n return (\n <div\n ref={ref}\n className={[searchListVariants({ loading }), className]\n .filter(Boolean)\n .join(' ')}\n data-component=\"locale-picker-search-list\"\n >\n <Command\n label={t('navigation.localePicker.commandLabel')}\n // Defer to cmdk's defaultFilter — it ranks against both the\n // Item's `value` (the locale code) and `keywords` (the\n // native + English names), which is exactly the haystack we\n // want users to be able to match against. The Item's `value`\n // alone wouldn't surface \"jap\" → 日本語 because the code is\n // `ja`; the keyword \"Japanese\" handles that match.\n filter={defaultFilter}\n shouldFilter\n >\n {/* Input chrome borrows the kit's standard INPUT_SURFACE\n tokens (same as Combobox / Autocomplete) so the search\n field reads as a first-class kit input rather than a\n one-off list header. The wrapper carries the border /\n padding / focus-within ring; the inner Command.Input\n keeps its outline-less peer styling. */}\n <div\n className={[\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT.sm,\n INPUT_SURFACE_PADDING_X.sm,\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:m-[var(--spacing-xs)]',\n ].join(' ')}\n >\n <Globe\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-muted-foreground ds:shrink-0\"\n />\n <Command.Input\n id={inputId}\n value={search}\n onValueChange={setSearch}\n placeholder={t('navigation.localePicker.searchPlaceholder')}\n aria-label={t('navigation.localePicker.searchLabel')}\n disabled={disabled || loading}\n className={[\n 'ds:peer ds:flex-1 ds:bg-transparent ds:border-0 ds:outline-none',\n 'ds:placeholder:text-muted-foreground ds:text-foreground',\n 'ds:text-[length:var(--font-size-sm)]',\n ].join(' ')}\n />\n </div>\n <Command.List\n label={t('navigation.localePicker.commandLabel')}\n className={[\n 'ds:max-h-[18rem] ds:overflow-y-auto',\n 'ds:p-[var(--spacing-xs)]',\n ].join(' ')}\n >\n <Command.Empty\n className={[\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]',\n 'type-body-sm ds:text-muted-foreground',\n ].join(' ')}\n >\n {t('navigation.localePicker.empty')}\n </Command.Empty>\n\n {/* \"System Default\" — always the first row. Selected when\n following the browser; selecting it\n clears the localStorage entry and re-resolves to\n navigator.language. Mirrors the `'system'` value in\n ThemeToggle. */}\n {(() => {\n const isSystemSelected =\n currentSelection === LOCALE_SYSTEM_DEFAULT;\n const resolvedEntry = LOCALE_META[resolvedLocale];\n return (\n <Command.Item\n key={LOCALE_SYSTEM_DEFAULT}\n value={LOCALE_SYSTEM_DEFAULT}\n keywords={[\n 'system',\n 'default',\n 'auto',\n 'browser',\n resolvedEntry.nativeName,\n resolvedEntry.englishName,\n ]}\n disabled={disabled || loading}\n onSelect={handleSelect}\n className={localeRowClasses}\n aria-selected={isSystemSelected || undefined}\n data-current={isSystemSelected ? 'true' : undefined}\n >\n <Monitor\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-muted-foreground ds:shrink-0\"\n />\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate type-body-sm\">\n {t('navigation.localePicker.systemDefault', {\n locale: resolvedEntry.nativeName,\n })}\n </span>\n {isSystemSelected ? (\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-primary ds:shrink-0\"\n />\n ) : null}\n {isSystemSelected ? (\n <span className=\"ds:sr-only\">\n {t('navigation.localePicker.currentSelection')}\n </span>\n ) : null}\n </Command.Item>\n );\n })()}\n\n {LOCALE_LIST.map((entry) => {\n const isSelected = currentSelection === entry.code;\n return (\n <Command.Item\n key={entry.code}\n value={entry.code}\n keywords={[entry.nativeName, entry.englishName]}\n disabled={disabled || loading}\n onSelect={handleSelect}\n className={localeRowClasses}\n aria-selected={isSelected || undefined}\n data-current={isSelected ? 'true' : undefined}\n // `lang` on the row triggers font-cascade selection\n // so Arabic / Japanese / Devanagari / Greek glyphs\n // paint via the Noto Sans family. Intentionally\n // omits `dir` — the row layout follows the picker\n // surface's direction (LTR menu = LTR row, RTL menu\n // = RTL row). Setting `dir=\"rtl\"` per Arabic row\n // would flip just THAT row inside an LTR menu, which\n // breaks the visual rhythm with neighbouring rows.\n // Arabic text within the row still renders RTL at\n // the character level (script-driven) regardless.\n lang={entry.code}\n >\n {hasCoreFlag(entry.countryCode) ? (\n <CoreFlag\n country={entry.countryCode}\n size=\"sm\"\n shape=\"rectangle\"\n rounded=\"sm\"\n className=\"ds:shrink-0\"\n />\n ) : (\n /* hasCoreFlag fallback: render the emoji glyph only\n when the kit doesn't ship an SVG for this\n country code. All 18 bundled locales currently\n have SVG flags, so this is dead code on the\n canonical set — kept for resilience when\n consumers extend the registry. */\n <span\n aria-hidden=\"true\"\n className=\"ds:text-base ds:shrink-0\"\n >\n {entry.flag}\n </span>\n )}\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate type-body-sm\">\n {entry.nativeName}\n </span>\n {isSelected ? (\n <Check\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-primary ds:shrink-0\"\n />\n ) : null}\n {isSelected ? (\n <span className=\"ds:sr-only\">\n {t('navigation.localePicker.currentSelection')}\n </span>\n ) : null}\n </Command.Item>\n );\n })}\n </Command.List>\n </Command>\n </div>\n );\n },\n);\nLocalePickerSearchList.displayName = 'LocalePicker.SearchList';\n\n/* ------------------------------------------------------------------ */\n/* LocalePicker root — icon + compact trigger variants */\n/* ------------------------------------------------------------------ */\n\ninterface VariantRenderProps {\n state: LocalePickerState;\n selection: LocalePreference;\n rest: HTMLAttributes<HTMLDivElement>;\n forwardedRef: Ref<HTMLDivElement>;\n className?: string;\n disabled: boolean;\n loading: boolean;\n popoverSide: 'top' | 'bottom' | 'start' | 'end';\n}\n\nfunction IconTrigger({\n state,\n selection,\n rest,\n forwardedRef,\n className,\n disabled,\n loading,\n popoverSide,\n}: VariantRenderProps) {\n const { t } = useTranslation('ui');\n const entry = LOCALE_META[state.locale];\n return (\n <div\n ref={forwardedRef}\n data-component=\"locale-picker\"\n data-component-id={rest.id}\n className={wrapperVariants({ variant: 'icon', className })}\n {...rest}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <IconButton\n disabled={disabled || loading}\n icon={\n <span className=\"ds:relative ds:inline-flex ds:items-center ds:justify-center\">\n <Globe aria-hidden className=\"ds:size-5\" />\n {hasCoreFlag(entry.countryCode) ? (\n <CoreFlag\n country={entry.countryCode}\n size=\"sm\"\n shape=\"rectangle\"\n rounded=\"sm\"\n className={[\n // Corner chip overlaying the globe glyph.\n // `outline` paints a thin background-coloured\n // ring around the flag so it reads as a chip\n // rather than blending into the globe edge.\n 'ds:absolute ds:bottom-[-3px] ds:end-[-5px]',\n 'ds:outline ds:outline-2 ds:outline-background',\n // Scale down to chip size — Flag's sm tile is\n // larger than the original emoji glyph.\n 'ds:scale-75 ds:origin-bottom-end',\n ].join(' ')}\n />\n ) : null}\n </span>\n }\n aria-label={t('navigation.localePicker.trigger', {\n locale: entry.nativeName,\n })}\n />\n </Popover.Trigger>\n <Popover.Content\n side={popoverSide}\n align=\"start\"\n sideOffset={8}\n className={popoverContentClasses}\n aria-label={t('navigation.localePicker.popupLabel')}\n >\n <LocalePickerSearchList\n value={selection}\n onValueChange={state.setLocale}\n disabled={disabled}\n loading={loading}\n />\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nfunction CompactTrigger({\n state,\n selection,\n rest,\n forwardedRef,\n className,\n disabled,\n loading,\n popoverSide,\n}: VariantRenderProps) {\n const { t } = useTranslation('ui');\n const entry = LOCALE_META[state.locale];\n return (\n <div\n ref={forwardedRef}\n data-component=\"locale-picker\"\n data-component-id={rest.id}\n className={wrapperVariants({ variant: 'compact', className })}\n {...rest}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled || loading}\n className={compactTriggerClasses}\n aria-label={t('navigation.localePicker.trigger', {\n locale: entry.nativeName,\n })}\n >\n {hasCoreFlag(entry.countryCode) ? (\n <CoreFlag\n country={entry.countryCode}\n size=\"sm\"\n shape=\"rectangle\"\n rounded=\"sm\"\n className=\"ds:shrink-0\"\n />\n ) : (\n <Globe aria-hidden className=\"ds:size-4 ds:shrink-0\" />\n )}\n <span\n className=\"ds:flex-1 ds:truncate type-body-sm\"\n lang={entry.code}\n >\n {entry.nativeName}\n </span>\n </button>\n </Popover.Trigger>\n <Popover.Content\n side={popoverSide}\n align=\"start\"\n sideOffset={8}\n className={popoverContentClasses}\n aria-label={t('navigation.localePicker.popupLabel')}\n >\n <LocalePickerSearchList\n value={selection}\n onValueChange={state.setLocale}\n disabled={disabled}\n loading={loading}\n />\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n}\n\nconst LocalePickerRoot = forwardRef<HTMLDivElement, LocalePickerProps>(\n (props, ref) => {\n const {\n variant = 'icon',\n value,\n onValueChange,\n disabled = false,\n loading = false,\n initialLocaleFromHtmlLang = false,\n popoverSide = 'bottom',\n className,\n id,\n ...rest\n } = props as LocalePickerProps & { id?: string };\n\n const store = useLocalePickerState(initialLocaleFromHtmlLang);\n const resolvedLocale = value ?? store.locale;\n\n // Controlled overlay: when a consumer passes `onValueChange`, route\n // selections to them instead of the shared store. Document attrs +\n // localStorage are still updated so the picker behaves consistently\n // either way.\n const setLocale = useCallback(\n (next: LocalePreference) => {\n if (onValueChange) {\n onValueChange(next);\n // Side-effects in controlled mode: still write through to\n // the persistence + document attrs so the rest of the page\n // re-renders even though we're routing state to the consumer.\n if (next === LOCALE_SYSTEM_DEFAULT) {\n persistLocalePreference(LOCALE_SYSTEM_DEFAULT);\n const detected = detectBrowserLocale();\n applyDocumentAttrs(detected);\n } else if (isSupportedLocale(next)) {\n applyDocumentAttrs(next);\n persistLocalePreference(next);\n }\n return;\n }\n store.setLocale(next);\n },\n [onValueChange, store],\n );\n\n const state: LocalePickerState = useMemo(\n () => ({\n locale: resolvedLocale,\n isSystemDefault: store.isSystemDefault,\n setLocale,\n }),\n [resolvedLocale, store.isSystemDefault, setLocale],\n );\n // Preserve the existing standalone selection display unless opted in.\n // A controlled value always marks the locale supplied by the host.\n const selection =\n initialLocaleFromHtmlLang && value === undefined && store.isSystemDefault\n ? LOCALE_SYSTEM_DEFAULT\n : resolvedLocale;\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n const stateRef = useRef(state);\n stateRef.current = state;\n const agentHandle = useMemo<LocalePickerHandle>(\n () => ({\n setLocale: (next: string) => {\n if (isSupportedLocale(next)) {\n stateRef.current.setLocale(next);\n }\n },\n // Read-back for `set_locale` — the setter swallows unsupported\n // tags, so these are the only way an agent can tell a switch\n // landed from one that was dropped.\n getLocale: () => stateRef.current.locale,\n getIsSystemDefault: () => stateRef.current.isSystemDefault,\n }),\n [],\n );\n useAgentRegistration(localePickerAgent, agentHandle, id);\n\n if (variant === 'compact') {\n return (\n <CompactTrigger\n state={state}\n selection={selection}\n rest={rest}\n forwardedRef={forwardedRef}\n className={className}\n disabled={disabled}\n loading={loading}\n popoverSide={popoverSide}\n />\n );\n }\n return (\n <IconTrigger\n state={state}\n selection={selection}\n rest={rest}\n forwardedRef={forwardedRef}\n className={className}\n disabled={disabled}\n loading={loading}\n popoverSide={popoverSide}\n />\n );\n },\n);\nLocalePickerRoot.displayName = 'LocalePicker';\n\nexport const LocalePicker = Object.assign(LocalePickerRoot, {\n SearchList: LocalePickerSearchList,\n});\n"],"names":["CORE_RECTANGLE_URL_MAP","safeFlagGlob","__vite_glob_0_0","__vite_glob_0_1","__vite_glob_0_2","__vite_glob_0_3","__vite_glob_0_4","__vite_glob_0_5","__vite_glob_0_6","__vite_glob_0_7","__vite_glob_0_8","__vite_glob_0_9","__vite_glob_0_10","__vite_glob_0_11","__vite_glob_0_12","__vite_glob_0_13","__vite_glob_0_14","__vite_glob_0_15","__vite_glob_0_16","__vite_glob_0_17","CORE_SQUARE_URL_MAP","__vite_glob_1_0","__vite_glob_1_1","__vite_glob_1_2","__vite_glob_1_3","__vite_glob_1_4","__vite_glob_1_5","__vite_glob_1_6","__vite_glob_1_7","__vite_glob_1_8","__vite_glob_1_9","__vite_glob_1_10","__vite_glob_1_11","__vite_glob_1_12","__vite_glob_1_13","__vite_glob_1_14","__vite_glob_1_15","__vite_glob_1_16","__vite_glob_1_17","hasCoreFlag","country","CoreFlag","forwardRef","label","shape","size","rounded","className","rest","ref","code","createElement","FlagView","flagClasses","LOCALE_META","LOCALES_WITH_BUNDLES","LOCALE_LIST","a","b","localePickerAgent","handle","args","LOCALE_STORAGE_KEY","LOCALE_SYSTEM_DEFAULT","detectionFired","sessionPreference","preferenceListeners","subscribePreference","listener","getPreference","stored","safeReadStorage","isSupportedLocale","updatePreference","next","value","key","safeWriteStorage","detectBrowserLocale","raw","base","applyDocumentAttrs","locale","root","safeRemoveStorage","persistLocalePreference","useLocalePickerState","initialLocaleFromHtmlLang","rawLocale","setLocaleI18n","useLocale","preference","useSyncExternalStore","setLocale","useCallback","detected","useInitialLocale","useEffect","htmlLocale","resolveUiLanguage","supportedHtmlLocale","wrapperVariants","cva","compactTriggerClasses","popoverContentClasses","localeRowClasses","MENU_ROW_HIGHLIGHT","searchListVariants","LocalePickerSearchList","valueProp","onValueChange","inputIdProp","disabled","loading","t","useTranslation","store","resolvedLocale","currentSelection","generatedId","useId","inputId","search","setSearch","useState","handleSelect","jsx","jsxs","Command","defaultFilter","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_PADDING_X","Globe","isSystemSelected","resolvedEntry","Monitor","Check","entry","isSelected","IconTrigger","state","selection","forwardedRef","popoverSide","Popover","IconButton","CompactTrigger","LocalePickerRoot","props","variant","id","useMemo","useRef","useImperativeHandle","stateRef","agentHandle","useAgentRegistration","LocalePicker"],"mappings":"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"}