@alfadocs/ui-kit-debug 1.80.0 → 1.82.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 (223) hide show
  1. package/dist/_chunks/{address-fields-GnoSkvh6.js → address-fields-CfnXK8RT.js} +4 -4
  2. package/dist/_chunks/{address-fields-GnoSkvh6.js.map → address-fields-CfnXK8RT.js.map} +1 -1
  3. package/dist/_chunks/{ai-prompt-input-M6u29f87.js → ai-prompt-input-DH_rnV-F.js} +33 -26
  4. package/dist/_chunks/{ai-prompt-input-M6u29f87.js.map → ai-prompt-input-DH_rnV-F.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js → anamnesis-summary-rows-6gMuu0ZK.js} +2 -2
  6. package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js.map → anamnesis-summary-rows-6gMuu0ZK.js.map} +1 -1
  7. package/dist/_chunks/{autocomplete-DosDnGie.js → autocomplete-CnB1mHGc.js} +65 -64
  8. package/dist/_chunks/{autocomplete-DosDnGie.js.map → autocomplete-CnB1mHGc.js.map} +1 -1
  9. package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js → balance-badge-cell-BHXJS8Ga.js} +2 -2
  10. package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js.map → balance-badge-cell-BHXJS8Ga.js.map} +1 -1
  11. package/dist/_chunks/{benefit-card-BWBClvdF.js → benefit-card-BcPtRHgM.js} +37 -36
  12. package/dist/_chunks/{benefit-card-BWBClvdF.js.map → benefit-card-BcPtRHgM.js.map} +1 -1
  13. package/dist/_chunks/booking-dsgiuhKg.js +4304 -0
  14. package/dist/_chunks/booking-dsgiuhKg.js.map +1 -0
  15. package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js → calendar-appointment-editor-dialog-BuumJbcv.js} +4 -4
  16. package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js.map → calendar-appointment-editor-dialog-BuumJbcv.js.map} +1 -1
  17. package/dist/_chunks/{city-input-3J3bz9EO.js → city-input-CJVGswxp.js} +2 -2
  18. package/dist/_chunks/{city-input-3J3bz9EO.js.map → city-input-CJVGswxp.js.map} +1 -1
  19. package/dist/_chunks/{combobox-vF9O-QoG.js → combobox-CDPm_n0p.js} +93 -92
  20. package/dist/_chunks/{combobox-vF9O-QoG.js.map → combobox-CDPm_n0p.js.map} +1 -1
  21. package/dist/_chunks/{command-palette-D9TBzmOG.js → command-palette-B3dVqm9D.js} +68 -68
  22. package/dist/_chunks/{command-palette-D9TBzmOG.js.map → command-palette-B3dVqm9D.js.map} +1 -1
  23. package/dist/_chunks/{contact-profile-card-DKk94l-d.js → contact-profile-card-Da1vmJQI.js} +115 -102
  24. package/dist/_chunks/contact-profile-card-Da1vmJQI.js.map +1 -0
  25. package/dist/_chunks/{country-select-CSE2Zm_s.js → country-select-DQ8q7ypA.js} +2 -2
  26. package/dist/_chunks/{country-select-CSE2Zm_s.js.map → country-select-DQ8q7ypA.js.map} +1 -1
  27. package/dist/_chunks/{face-scheme-BIPJqw9f.js → face-scheme-BgJGFDTa.js} +2 -2
  28. package/dist/_chunks/{face-scheme-BIPJqw9f.js.map → face-scheme-BgJGFDTa.js.map} +1 -1
  29. package/dist/_chunks/{header-settings-BYpVmLip.js → header-settings-CifwJEKB.js} +2 -2
  30. package/dist/_chunks/{header-settings-BYpVmLip.js.map → header-settings-CifwJEKB.js.map} +1 -1
  31. package/dist/_chunks/{link-cell-renderer-B0riA_h_.js → link-cell-renderer-C0ynDik7.js} +3 -3
  32. package/dist/_chunks/{link-cell-renderer-B0riA_h_.js.map → link-cell-renderer-C0ynDik7.js.map} +1 -1
  33. package/dist/_chunks/{locale-picker-DzdGDSBI.js → locale-picker-QbT1p60X.js} +39 -38
  34. package/dist/_chunks/{locale-picker-DzdGDSBI.js.map → locale-picker-QbT1p60X.js.map} +1 -1
  35. package/dist/_chunks/{map-view-C6MIVaqn.js → map-view-Bvi06RVh.js} +2 -2
  36. package/dist/_chunks/{map-view-C6MIVaqn.js.map → map-view-Bvi06RVh.js.map} +1 -1
  37. package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js → marketplace-app-shell-vON3WhD0.js} +2 -2
  38. package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js.map → marketplace-app-shell-vON3WhD0.js.map} +1 -1
  39. package/dist/_chunks/{multi-select-BOad3za9.js → multi-select-i5MFRpXg.js} +194 -187
  40. package/dist/_chunks/multi-select-i5MFRpXg.js.map +1 -0
  41. package/dist/_chunks/{otp-input-BgEZi0py.js → otp-input-gV1446Dw.js} +70 -70
  42. package/dist/_chunks/otp-input-gV1446Dw.js.map +1 -0
  43. package/dist/_chunks/{patient-details-B-I9Xkh9.js → patient-details-D0P5eog5.js} +2 -2
  44. package/dist/_chunks/{patient-details-B-I9Xkh9.js.map → patient-details-D0P5eog5.js.map} +1 -1
  45. package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js → patient-field-row-R73dZJY6.js} +5 -5
  46. package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js.map → patient-field-row-R73dZJY6.js.map} +1 -1
  47. package/dist/_chunks/{patient-search-CxqNcth4.js → patient-search-Dy0sxcwv.js} +2 -2
  48. package/dist/_chunks/{patient-search-CxqNcth4.js.map → patient-search-Dy0sxcwv.js.map} +1 -1
  49. package/dist/_chunks/{patient-summary-card-bhDo0gVX.js → patient-summary-card-6U74-ivO.js} +2 -2
  50. package/dist/_chunks/{patient-summary-card-bhDo0gVX.js.map → patient-summary-card-6U74-ivO.js.map} +1 -1
  51. package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js → payment-automation-upsell-D1YdO1xY.js} +2 -2
  52. package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js.map → payment-automation-upsell-D1YdO1xY.js.map} +1 -1
  53. package/dist/_chunks/{phone-input-C3NrD-nl.js → phone-input-DJ4BN8tG.js} +70 -63
  54. package/dist/_chunks/{phone-input-C3NrD-nl.js.map → phone-input-DJ4BN8tG.js.map} +1 -1
  55. package/dist/_chunks/{practice-results-CtOanuzZ.js → practice-results-B61krlwu.js} +2 -2
  56. package/dist/_chunks/{practice-results-CtOanuzZ.js.map → practice-results-B61krlwu.js.map} +1 -1
  57. package/dist/_chunks/{province-select-CDjs5obD.js → province-select-CPdTwEob.js} +2 -2
  58. package/dist/_chunks/{province-select-CDjs5obD.js.map → province-select-CPdTwEob.js.map} +1 -1
  59. package/dist/_chunks/{registration-form-CNBfUduG.js → registration-form-DmP3YUfp.js} +3 -3
  60. package/dist/_chunks/{registration-form-CNBfUduG.js.map → registration-form-DmP3YUfp.js.map} +1 -1
  61. package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js → send-registration-link-form-CZYOO7NO.js} +2 -2
  62. package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js.map → send-registration-link-form-CZYOO7NO.js.map} +1 -1
  63. package/dist/_chunks/{task-editor-Cpw-NmND.js → task-editor-BOETWbjU.js} +2 -2
  64. package/dist/_chunks/{task-editor-Cpw-NmND.js.map → task-editor-BOETWbjU.js.map} +1 -1
  65. package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js → use-appointment-details-read-CWN-nJCZ.js} +2 -2
  66. package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js.map → use-appointment-details-read-CWN-nJCZ.js.map} +1 -1
  67. package/dist/agent-catalog.json +4 -4
  68. package/dist/agent-i18n/en.json +1 -1
  69. package/dist/components/address-fields/index.js +1 -1
  70. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  71. package/dist/components/ai-prompt-input/index.js +1 -1
  72. package/dist/components/appointment-details-panel/index.js +1 -1
  73. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  74. package/dist/components/autocomplete/index.js +1 -1
  75. package/dist/components/benefit-card/benefit-card.d.ts +7 -1
  76. package/dist/components/benefit-card/benefit-card.d.ts.map +1 -1
  77. package/dist/components/benefit-card/index.js +1 -1
  78. package/dist/components/booking/booking-types.d.ts +35 -2
  79. package/dist/components/booking/booking-types.d.ts.map +1 -1
  80. package/dist/components/booking/booking.d.ts.map +1 -1
  81. package/dist/components/booking/code-step.d.ts +4 -2
  82. package/dist/components/booking/code-step.d.ts.map +1 -1
  83. package/dist/components/booking/details-form.d.ts +2 -0
  84. package/dist/components/booking/details-form.d.ts.map +1 -1
  85. package/dist/components/booking/handover.d.ts +12 -0
  86. package/dist/components/booking/handover.d.ts.map +1 -0
  87. package/dist/components/booking/index.js +1 -1
  88. package/dist/components/booking/reserved.d.ts +24 -0
  89. package/dist/components/booking/reserved.d.ts.map +1 -0
  90. package/dist/components/booking/use-booking-payment.d.ts +3 -1
  91. package/dist/components/booking/use-booking-payment.d.ts.map +1 -1
  92. package/dist/components/city-input/index.js +1 -1
  93. package/dist/components/combobox/combobox.d.ts.map +1 -1
  94. package/dist/components/combobox/index.js +1 -1
  95. package/dist/components/command-palette/index.js +1 -1
  96. package/dist/components/contact-profile-card/contact-profile-card.d.ts +4 -1
  97. package/dist/components/contact-profile-card/contact-profile-card.d.ts.map +1 -1
  98. package/dist/components/contact-profile-card/index.js +1 -1
  99. package/dist/components/country-select/index.js +1 -1
  100. package/dist/components/data-table/index.js +1 -1
  101. package/dist/components/face-scheme/index.js +1 -1
  102. package/dist/components/header-settings/index.js +1 -1
  103. package/dist/components/locale-picker/index.js +1 -1
  104. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  105. package/dist/components/map-view/index.js +1 -1
  106. package/dist/components/multi-select/index.js +1 -1
  107. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  108. package/dist/components/otp-input/index.js +1 -1
  109. package/dist/components/otp-input/otp-input.d.ts +1 -1
  110. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  111. package/dist/components/patient-details/index.js +1 -1
  112. package/dist/components/patient-search/index.js +1 -1
  113. package/dist/components/patient-summary-card/index.js +1 -1
  114. package/dist/components/patient-table/index.js +1 -1
  115. package/dist/components/phone-input/index.js +1 -1
  116. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  117. package/dist/components/practice-results/index.js +1 -1
  118. package/dist/components/province-select/index.js +1 -1
  119. package/dist/components/task-editor/index.js +1 -1
  120. package/dist/i18n/locales/ar.d.ts +8 -0
  121. package/dist/i18n/locales/ar.d.ts.map +1 -1
  122. package/dist/i18n/locales/ar.js +8 -0
  123. package/dist/i18n/locales/ar.js.map +1 -1
  124. package/dist/i18n/locales/de.d.ts +8 -0
  125. package/dist/i18n/locales/de.d.ts.map +1 -1
  126. package/dist/i18n/locales/de.js +8 -0
  127. package/dist/i18n/locales/de.js.map +1 -1
  128. package/dist/i18n/locales/el.d.ts +8 -0
  129. package/dist/i18n/locales/el.d.ts.map +1 -1
  130. package/dist/i18n/locales/el.js +8 -0
  131. package/dist/i18n/locales/el.js.map +1 -1
  132. package/dist/i18n/locales/en.d.ts +8 -0
  133. package/dist/i18n/locales/en.d.ts.map +1 -1
  134. package/dist/i18n/locales/en.js +8 -0
  135. package/dist/i18n/locales/en.js.map +1 -1
  136. package/dist/i18n/locales/es.d.ts +8 -0
  137. package/dist/i18n/locales/es.d.ts.map +1 -1
  138. package/dist/i18n/locales/es.js +8 -0
  139. package/dist/i18n/locales/es.js.map +1 -1
  140. package/dist/i18n/locales/fr.d.ts +8 -0
  141. package/dist/i18n/locales/fr.d.ts.map +1 -1
  142. package/dist/i18n/locales/fr.js +8 -0
  143. package/dist/i18n/locales/fr.js.map +1 -1
  144. package/dist/i18n/locales/hi.d.ts +8 -0
  145. package/dist/i18n/locales/hi.d.ts.map +1 -1
  146. package/dist/i18n/locales/hi.js +8 -0
  147. package/dist/i18n/locales/hi.js.map +1 -1
  148. package/dist/i18n/locales/it.d.ts +8 -0
  149. package/dist/i18n/locales/it.d.ts.map +1 -1
  150. package/dist/i18n/locales/it.js +8 -0
  151. package/dist/i18n/locales/it.js.map +1 -1
  152. package/dist/i18n/locales/ja.d.ts +8 -0
  153. package/dist/i18n/locales/ja.d.ts.map +1 -1
  154. package/dist/i18n/locales/ja.js +8 -0
  155. package/dist/i18n/locales/ja.js.map +1 -1
  156. package/dist/i18n/locales/nl.d.ts +8 -0
  157. package/dist/i18n/locales/nl.d.ts.map +1 -1
  158. package/dist/i18n/locales/nl.js +8 -0
  159. package/dist/i18n/locales/nl.js.map +1 -1
  160. package/dist/i18n/locales/pl.d.ts +8 -0
  161. package/dist/i18n/locales/pl.d.ts.map +1 -1
  162. package/dist/i18n/locales/pl.js +8 -0
  163. package/dist/i18n/locales/pl.js.map +1 -1
  164. package/dist/i18n/locales/pt.d.ts +8 -0
  165. package/dist/i18n/locales/pt.d.ts.map +1 -1
  166. package/dist/i18n/locales/pt.js +8 -0
  167. package/dist/i18n/locales/pt.js.map +1 -1
  168. package/dist/i18n/locales/ro.d.ts +8 -0
  169. package/dist/i18n/locales/ro.d.ts.map +1 -1
  170. package/dist/i18n/locales/ro.js +8 -0
  171. package/dist/i18n/locales/ro.js.map +1 -1
  172. package/dist/i18n/locales/ru.d.ts +8 -0
  173. package/dist/i18n/locales/ru.d.ts.map +1 -1
  174. package/dist/i18n/locales/ru.js +8 -0
  175. package/dist/i18n/locales/ru.js.map +1 -1
  176. package/dist/i18n/locales/sq.d.ts +8 -0
  177. package/dist/i18n/locales/sq.d.ts.map +1 -1
  178. package/dist/i18n/locales/sq.js +8 -0
  179. package/dist/i18n/locales/sq.js.map +1 -1
  180. package/dist/i18n/locales/sv.d.ts +8 -0
  181. package/dist/i18n/locales/sv.d.ts.map +1 -1
  182. package/dist/i18n/locales/sv.js +8 -0
  183. package/dist/i18n/locales/sv.js.map +1 -1
  184. package/dist/i18n/locales/tr.d.ts +8 -0
  185. package/dist/i18n/locales/tr.d.ts.map +1 -1
  186. package/dist/i18n/locales/tr.js +8 -0
  187. package/dist/i18n/locales/tr.js.map +1 -1
  188. package/dist/i18n/locales/zh.d.ts +8 -0
  189. package/dist/i18n/locales/zh.d.ts.map +1 -1
  190. package/dist/i18n/locales/zh.js +8 -0
  191. package/dist/i18n/locales/zh.js.map +1 -1
  192. package/dist/index.js +30 -30
  193. package/dist/locales/ar.json +8 -0
  194. package/dist/locales/de.json +8 -0
  195. package/dist/locales/el.json +8 -0
  196. package/dist/locales/en.json +8 -0
  197. package/dist/locales/es.json +8 -0
  198. package/dist/locales/fr.json +8 -0
  199. package/dist/locales/hi.json +8 -0
  200. package/dist/locales/it.json +8 -0
  201. package/dist/locales/ja.json +8 -0
  202. package/dist/locales/nl.json +8 -0
  203. package/dist/locales/pl.json +8 -0
  204. package/dist/locales/pt.json +8 -0
  205. package/dist/locales/ro.json +8 -0
  206. package/dist/locales/ru.json +8 -0
  207. package/dist/locales/sq.json +8 -0
  208. package/dist/locales/sv.json +8 -0
  209. package/dist/locales/tr.json +8 -0
  210. package/dist/locales/zh.json +8 -0
  211. package/dist/patterns/anamnesis/index.js +1 -1
  212. package/dist/patterns/calendar/index.js +1 -1
  213. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  214. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  215. package/dist/patterns/registration-form/index.js +1 -1
  216. package/dist/patterns/send-registration-link-form/index.js +1 -1
  217. package/dist/tokens.css +1 -1
  218. package/package.json +1 -1
  219. package/dist/_chunks/booking-By4I_1A-.js +0 -4068
  220. package/dist/_chunks/booking-By4I_1A-.js.map +0 -1
  221. package/dist/_chunks/contact-profile-card-DKk94l-d.js.map +0 -1
  222. package/dist/_chunks/multi-select-BOad3za9.js.map +0 -1
  223. package/dist/_chunks/otp-input-BgEZi0py.js.map +0 -1
@@ -67,19 +67,19 @@ const R = F(
67
67
  ({
68
68
  country: e,
69
69
  label: s,
70
- shape: r = "rectangle",
70
+ shape: l = "rectangle",
71
71
  size: t = "sm",
72
72
  rounded: n = "sm",
73
73
  className: d,
74
74
  ...i
75
- }, l) => {
75
+ }, r) => {
76
76
  const c = e.toUpperCase();
77
77
  return te(ge, {
78
- ref: l,
78
+ ref: r,
79
79
  code: c,
80
- src: (r === "square" ? as : z)[c],
80
+ src: (l === "square" ? as : z)[c],
81
81
  label: s,
82
- className: me({ shape: r, size: t, rounded: n }, d),
82
+ className: me({ shape: l, size: t, rounded: n }, d),
83
83
  ...i
84
84
  });
85
85
  }
@@ -341,7 +341,7 @@ function E(e) {
341
341
  e === u ? cs(P) : ls(P, e), D(e);
342
342
  }
343
343
  function $(e = !1) {
344
- const { locale: s, setLocale: r } = Q(), t = ce(
344
+ const { locale: s, setLocale: l } = Q(), t = ce(
345
345
  is,
346
346
  rs,
347
347
  () => u
@@ -349,13 +349,13 @@ function $(e = !1) {
349
349
  (i) => {
350
350
  if (i === u) {
351
351
  E(u);
352
- const l = M();
353
- r(l), N(l);
352
+ const r = M();
353
+ l(r), N(r);
354
354
  return;
355
355
  }
356
- v(i) && (r(i), N(i), E(i));
356
+ v(i) && (l(i), N(i), E(i));
357
357
  },
358
- [r]
358
+ [l]
359
359
  );
360
360
  return ds(e), {
361
361
  locale: n,
@@ -364,17 +364,17 @@ function $(e = !1) {
364
364
  };
365
365
  }
366
366
  function ds(e = !1) {
367
- const { locale: s, setLocale: r } = Q();
367
+ const { locale: s, setLocale: l } = Q();
368
368
  re(() => {
369
369
  if (K) return;
370
370
  K = !0;
371
371
  const t = X(P);
372
372
  if (v(t)) {
373
- t !== s && r(t), N(t), D(t);
373
+ t !== s && l(t), N(t), D(t);
374
374
  return;
375
375
  }
376
376
  const n = e && typeof document < "u" ? es(document.documentElement.lang.trim()) : void 0, d = v(n) ? n : void 0, i = d ?? M();
377
- D(d ?? u), r(i), N(i);
377
+ D(d ?? u), l(i), N(i);
378
378
  }, []);
379
379
  }
380
380
  const Z = W("ds:inline-flex ds:items-center", {
@@ -422,12 +422,12 @@ const Z = W("ds:inline-flex ds:items-center", {
422
422
  ({
423
423
  value: e,
424
424
  onValueChange: s,
425
- inputId: r,
425
+ inputId: l,
426
426
  disabled: t = !1,
427
427
  loading: n = !1,
428
428
  className: d
429
429
  }, i) => {
430
- const { t: l } = O("ui"), c = $(), g = c.locale, x = e ?? (c.isSystemDefault ? u : c.locale), C = ne(), p = r ?? `${C}-search`, [S, k] = ie(""), h = j(
430
+ const { t: r } = O("ui"), c = $(), g = c.locale, x = e ?? (c.isSystemDefault ? u : c.locale), C = ne(), p = l ?? `${C}-search`, [S, k] = ie(""), h = j(
431
431
  (a) => {
432
432
  if (!(t || n)) {
433
433
  if (a === u) {
@@ -448,7 +448,7 @@ const Z = W("ds:inline-flex ds:items-center", {
448
448
  children: /* @__PURE__ */ f(
449
449
  y,
450
450
  {
451
- label: l("navigation.localePicker.commandLabel"),
451
+ label: r("navigation.localePicker.commandLabel"),
452
452
  filter: de,
453
453
  shouldFilter: !0,
454
454
  children: [
@@ -476,8 +476,8 @@ const Z = W("ds:inline-flex ds:items-center", {
476
476
  id: p,
477
477
  value: S,
478
478
  onValueChange: k,
479
- placeholder: l("navigation.localePicker.searchPlaceholder"),
480
- "aria-label": l("navigation.localePicker.searchLabel"),
479
+ placeholder: r("navigation.localePicker.searchPlaceholder"),
480
+ "aria-label": r("navigation.localePicker.searchLabel"),
481
481
  disabled: t || n,
482
482
  className: [
483
483
  "ds:peer ds:flex-1 ds:bg-transparent ds:border-0 ds:outline-none",
@@ -492,6 +492,7 @@ const Z = W("ds:inline-flex ds:items-center", {
492
492
  /* @__PURE__ */ f(
493
493
  y.List,
494
494
  {
495
+ label: r("navigation.localePicker.commandLabel"),
495
496
  className: [
496
497
  "ds:max-h-[18rem] ds:overflow-y-auto",
497
498
  "ds:p-[var(--spacing-xs)]"
@@ -504,7 +505,7 @@ const Z = W("ds:inline-flex ds:items-center", {
504
505
  "ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]",
505
506
  "type-body-sm ds:text-muted-foreground"
506
507
  ].join(" "),
507
- children: l("navigation.localePicker.empty")
508
+ children: r("navigation.localePicker.empty")
508
509
  }
509
510
  ),
510
511
  (() => {
@@ -534,7 +535,7 @@ const Z = W("ds:inline-flex ds:items-center", {
534
535
  className: "ds:size-4 ds:text-muted-foreground ds:shrink-0"
535
536
  }
536
537
  ),
537
- /* @__PURE__ */ o("span", { className: "ds:flex-1 ds:min-w-0 ds:truncate type-body-sm", children: l("navigation.localePicker.systemDefault", {
538
+ /* @__PURE__ */ o("span", { className: "ds:flex-1 ds:min-w-0 ds:truncate type-body-sm", children: r("navigation.localePicker.systemDefault", {
538
539
  locale: m.nativeName
539
540
  }) }),
540
541
  a ? /* @__PURE__ */ o(
@@ -544,7 +545,7 @@ const Z = W("ds:inline-flex ds:items-center", {
544
545
  className: "ds:size-4 ds:text-primary ds:shrink-0"
545
546
  }
546
547
  ) : null,
547
- a ? /* @__PURE__ */ o("span", { className: "ds:sr-only", children: l("navigation.localePicker.currentSelection") }) : null
548
+ a ? /* @__PURE__ */ o("span", { className: "ds:sr-only", children: r("navigation.localePicker.currentSelection") }) : null
548
549
  ]
549
550
  },
550
551
  u
@@ -597,7 +598,7 @@ const Z = W("ds:inline-flex ds:items-center", {
597
598
  className: "ds:size-4 ds:text-primary ds:shrink-0"
598
599
  }
599
600
  ) : null,
600
- m ? /* @__PURE__ */ o("span", { className: "ds:sr-only", children: l("navigation.localePicker.currentSelection") }) : null
601
+ m ? /* @__PURE__ */ o("span", { className: "ds:sr-only", children: r("navigation.localePicker.currentSelection") }) : null
601
602
  ]
602
603
  },
603
604
  a.code
@@ -617,12 +618,12 @@ I.displayName = "LocalePicker.SearchList";
617
618
  function ms({
618
619
  state: e,
619
620
  selection: s,
620
- rest: r,
621
+ rest: l,
621
622
  forwardedRef: t,
622
623
  className: n,
623
624
  disabled: d,
624
625
  loading: i,
625
- popoverSide: l
626
+ popoverSide: r
626
627
  }) {
627
628
  const { t: c } = O("ui"), g = L[e.locale];
628
629
  return /* @__PURE__ */ o(
@@ -630,9 +631,9 @@ function ms({
630
631
  {
631
632
  ref: t,
632
633
  "data-component": "locale-picker",
633
- "data-component-id": r.id,
634
+ "data-component-id": l.id,
634
635
  className: Z({ variant: "icon", className: n }),
635
- ...r,
636
+ ...l,
636
637
  children: /* @__PURE__ */ f(b.Root, { children: [
637
638
  /* @__PURE__ */ o(b.Trigger, { asChild: !0, children: /* @__PURE__ */ o(
638
639
  ue,
@@ -669,7 +670,7 @@ function ms({
669
670
  /* @__PURE__ */ o(
670
671
  b.Content,
671
672
  {
672
- side: l,
673
+ side: r,
673
674
  align: "start",
674
675
  sideOffset: 8,
675
676
  className: ee,
@@ -692,12 +693,12 @@ function ms({
692
693
  function _s({
693
694
  state: e,
694
695
  selection: s,
695
- rest: r,
696
+ rest: l,
696
697
  forwardedRef: t,
697
698
  className: n,
698
699
  disabled: d,
699
700
  loading: i,
700
- popoverSide: l
701
+ popoverSide: r
701
702
  }) {
702
703
  const { t: c } = O("ui"), g = L[e.locale];
703
704
  return /* @__PURE__ */ o(
@@ -705,9 +706,9 @@ function _s({
705
706
  {
706
707
  ref: t,
707
708
  "data-component": "locale-picker",
708
- "data-component-id": r.id,
709
+ "data-component-id": l.id,
709
710
  className: Z({ variant: "compact", className: n }),
710
- ...r,
711
+ ...l,
711
712
  children: /* @__PURE__ */ f(b.Root, { children: [
712
713
  /* @__PURE__ */ o(b.Trigger, { asChild: !0, children: /* @__PURE__ */ f(
713
714
  "button",
@@ -743,7 +744,7 @@ function _s({
743
744
  /* @__PURE__ */ o(
744
745
  b.Content,
745
746
  {
746
- side: l,
747
+ side: r,
747
748
  align: "start",
748
749
  sideOffset: 8,
749
750
  className: ee,
@@ -766,17 +767,17 @@ function _s({
766
767
  const se = F(
767
768
  (e, s) => {
768
769
  const {
769
- variant: r = "icon",
770
+ variant: l = "icon",
770
771
  value: t,
771
772
  onValueChange: n,
772
773
  disabled: d = !1,
773
774
  loading: i = !1,
774
- initialLocaleFromHtmlLang: l = !1,
775
+ initialLocaleFromHtmlLang: r = !1,
775
776
  popoverSide: c = "bottom",
776
777
  className: g,
777
778
  id: x,
778
779
  ...C
779
- } = e, p = $(l), S = t ?? p.locale, k = j(
780
+ } = e, p = $(r), S = t ?? p.locale, k = j(
780
781
  (_) => {
781
782
  if (n) {
782
783
  if (n(_), _ === u) {
@@ -796,7 +797,7 @@ const se = F(
796
797
  setLocale: k
797
798
  }),
798
799
  [S, p.isSystemDefault, k]
799
- ), a = l && t === void 0 && p.isSystemDefault ? u : S, m = q(null);
800
+ ), a = r && t === void 0 && p.isSystemDefault ? u : S, m = q(null);
800
801
  le(s, () => m.current, []);
801
802
  const w = q(h);
802
803
  w.current = h;
@@ -813,7 +814,7 @@ const se = F(
813
814
  }),
814
815
  []
815
816
  );
816
- return ss(ns, oe, x), r === "compact" ? /* @__PURE__ */ o(
817
+ return ss(ns, oe, x), l === "compact" ? /* @__PURE__ */ o(
817
818
  _s,
818
819
  {
819
820
  state: h,
@@ -852,4 +853,4 @@ export {
852
853
  E as p,
853
854
  ds as u
854
855
  };
855
- //# sourceMappingURL=locale-picker-DzdGDSBI.js.map
856
+ //# sourceMappingURL=locale-picker-QbT1p60X.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale-picker-DzdGDSBI.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 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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"}
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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"}
@@ -377,7 +377,7 @@ function $e({
377
377
  href: t,
378
378
  target: "_blank",
379
379
  rel: "noopener noreferrer",
380
- className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:text-[var(--primary)] ds:underline ds:underline-offset-2",
380
+ className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:text-[var(--primary-readable)] ds:underline ds:underline-offset-2",
381
381
  children: [
382
382
  l("mapView.openInGoogleMaps"),
383
383
  /* @__PURE__ */ i(Ve, { "aria-hidden": "true", className: "ds:size-3" })
@@ -580,4 +580,4 @@ qe.displayName = "MapView";
580
580
  export {
581
581
  qe as M
582
582
  };
583
- //# sourceMappingURL=map-view-C6MIVaqn.js.map
583
+ //# sourceMappingURL=map-view-Bvi06RVh.js.map