@alfadocs/ui-kit-debug 1.73.3 → 1.75.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.
- package/dist/_chunks/alia-sidebar-CsTRAxC8.js +1323 -0
- package/dist/_chunks/alia-sidebar-CsTRAxC8.js.map +1 -0
- package/dist/_chunks/{anamnesis-summary-rows-BedVmSAB.js → anamnesis-summary-rows-vNDyE5HW.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-BedVmSAB.js.map → anamnesis-summary-rows-vNDyE5HW.js.map} +1 -1
- package/dist/_chunks/{antenatal-schedule-timeline-DW_qkGo1.js → antenatal-schedule-timeline-BGewPfEX.js} +18 -18
- package/dist/_chunks/{antenatal-schedule-timeline-DW_qkGo1.js.map → antenatal-schedule-timeline-BGewPfEX.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-CKwMXUid.js → appointment-timeline-1-Za2miy.js} +2 -2
- package/dist/_chunks/{appointment-timeline-CKwMXUid.js.map → appointment-timeline-1-Za2miy.js.map} +1 -1
- package/dist/_chunks/{ar-pLopgMbL.js → ar-C4YQVTH6.js} +2 -2
- package/dist/_chunks/{ar-pLopgMbL.js.map → ar-C4YQVTH6.js.map} +1 -1
- package/dist/_chunks/{auth-form-parts-DHv6LVV2.js → auth-form-parts-B3GWChvG.js} +2 -2
- package/dist/_chunks/{auth-form-parts-DHv6LVV2.js.map → auth-form-parts-B3GWChvG.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-DG5JWB2p.js → balance-badge-cell-B49xgL6H.js} +2 -2
- package/dist/_chunks/{balance-badge-cell-DG5JWB2p.js.map → balance-badge-cell-B49xgL6H.js.map} +1 -1
- package/dist/_chunks/booking-ojunD_Y_.js +3901 -0
- package/dist/_chunks/booking-ojunD_Y_.js.map +1 -0
- package/dist/_chunks/brand-mark-DLk9kD8g.js +63 -0
- package/dist/_chunks/brand-mark-DLk9kD8g.js.map +1 -0
- package/dist/_chunks/{calendar-appointment-editor-dialog-Lji2y0qJ.js → calendar-appointment-editor-dialog-CctI6mpd.js} +8 -8
- package/dist/_chunks/{calendar-appointment-editor-dialog-Lji2y0qJ.js.map → calendar-appointment-editor-dialog-CctI6mpd.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-Ycp3li61.js → cycle-calculator-HO3s5InI.js} +5 -5
- package/dist/_chunks/{cycle-calculator-Ycp3li61.js.map → cycle-calculator-HO3s5InI.js.map} +1 -1
- package/dist/_chunks/{date-picker-KcoNNsM0.js → date-picker-CdhXlgVI.js} +4 -4
- package/dist/_chunks/{date-picker-KcoNNsM0.js.map → date-picker-CdhXlgVI.js.map} +1 -1
- package/dist/_chunks/{date-picker-variants-DN37Oj5-.js → date-picker-variants-Dt6UbonG.js} +25 -25
- package/dist/_chunks/{date-picker-variants-DN37Oj5-.js.map → date-picker-variants-Dt6UbonG.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-CjcjUJLW.js → date-range-picker-B_j4VQlV.js} +5 -5
- package/dist/_chunks/{date-range-picker-CjcjUJLW.js.map → date-range-picker-B_j4VQlV.js.map} +1 -1
- package/dist/_chunks/{date-time-picker-BVQNZ4yC.js → date-time-picker-n-yrlMJq.js} +3 -3
- package/dist/_chunks/{date-time-picker-BVQNZ4yC.js.map → date-time-picker-n-yrlMJq.js.map} +1 -1
- package/dist/_chunks/{de-lVkJRPnh.js → de-B1B3PIgY.js} +2 -2
- package/dist/_chunks/{de-lVkJRPnh.js.map → de-B1B3PIgY.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-B0gyOijA.js → due-date-calculator-CDWTSblh.js} +6 -6
- package/dist/_chunks/{due-date-calculator-B0gyOijA.js.map → due-date-calculator-CDWTSblh.js.map} +1 -1
- package/dist/_chunks/{el-CHzxNWPj.js → el-iLqGpapg.js} +16 -16
- package/dist/_chunks/{el-CHzxNWPj.js.map → el-iLqGpapg.js.map} +1 -1
- package/dist/_chunks/{en-GB-CwxYmmhU.js → en-GB-CxPRQbD6.js} +6 -6
- package/dist/_chunks/{en-GB-CwxYmmhU.js.map → en-GB-CxPRQbD6.js.map} +1 -1
- package/dist/_chunks/{es-Ck-oxbHW.js → es-Bg1oqwDs.js} +2 -2
- package/dist/_chunks/{es-Ck-oxbHW.js.map → es-Bg1oqwDs.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-D6kB72OD.js → forgot-password-form-BSOZVrZG.js} +3 -3
- package/dist/_chunks/{forgot-password-form-D6kB72OD.js.map → forgot-password-form-BSOZVrZG.js.map} +1 -1
- package/dist/_chunks/{format-D-1gTdHF.js → format--x5jypvH.js} +13 -13
- package/dist/_chunks/{format-D-1gTdHF.js.map → format--x5jypvH.js.map} +1 -1
- package/dist/_chunks/{fr-fWRnDcSD.js → fr-DpGxyOGI.js} +2 -2
- package/dist/_chunks/{fr-fWRnDcSD.js.map → fr-DpGxyOGI.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-Bu_a-K9z.js → gestational-age-calculator-CTHeJJdb.js} +7 -7
- package/dist/_chunks/{gestational-age-calculator-Bu_a-K9z.js.map → gestational-age-calculator-CTHeJJdb.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-BnopYgd-.js → hcg-doubling-BBk-a33g.js} +11 -11
- package/dist/_chunks/{hcg-doubling-BnopYgd-.js.map → hcg-doubling-BBk-a33g.js.map} +1 -1
- package/dist/_chunks/{header-settings-DBlTL6Qj.js → header-settings-Coh1r41O.js} +148 -154
- package/dist/_chunks/header-settings-Coh1r41O.js.map +1 -0
- package/dist/_chunks/{hi-B5uX0h3V.js → hi-3Dtsksrw.js} +2 -2
- package/dist/_chunks/{hi-B5uX0h3V.js.map → hi-3Dtsksrw.js.map} +1 -1
- package/dist/_chunks/{isSameWeek-u81Z-J7h.js → isSameWeek-DyVftHWi.js} +2 -2
- package/dist/_chunks/{isSameWeek-u81Z-J7h.js.map → isSameWeek-DyVftHWi.js.map} +1 -1
- package/dist/_chunks/{it-DBoNIelY.js → it-Cp0CA13d.js} +3 -3
- package/dist/_chunks/{it-DBoNIelY.js.map → it-Cp0CA13d.js.map} +1 -1
- package/dist/_chunks/{ja-Du8gfg8p.js → ja-9FOyR1lb.js} +22 -22
- package/dist/_chunks/{ja-Du8gfg8p.js.map → ja-9FOyR1lb.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-DgBi3tsK.js → kit-extensions-sNTZWkoo.js} +4 -4
- package/dist/_chunks/{kit-extensions-DgBi3tsK.js.map → kit-extensions-sNTZWkoo.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-BDxxpfJM.js → link-cell-renderer-B0riA_h_.js} +2 -2
- package/dist/_chunks/{link-cell-renderer-BDxxpfJM.js.map → link-cell-renderer-B0riA_h_.js.map} +1 -1
- package/dist/_chunks/{locale-picker-KT-Vz3bx.js → locale-picker-DzdGDSBI.js} +311 -282
- package/dist/_chunks/locale-picker-DzdGDSBI.js.map +1 -0
- package/dist/_chunks/{login-dev-card-pnJbVaoQ.js → login-dev-card-DRxTPkE9.js} +3 -3
- package/dist/_chunks/{login-dev-card-pnJbVaoQ.js.map → login-dev-card-DRxTPkE9.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-B0ix9yNI.js → marketplace-app-shell-Ck5NVJcO.js} +2 -2
- package/dist/_chunks/{marketplace-app-shell-B0ix9yNI.js.map → marketplace-app-shell-Ck5NVJcO.js.map} +1 -1
- package/dist/_chunks/{nl-BCBwxYi8.js → nl-sfx-zJgR.js} +2 -2
- package/dist/_chunks/{nl-BCBwxYi8.js.map → nl-sfx-zJgR.js.map} +1 -1
- package/dist/_chunks/{notes-panel-C_QshXyI.js → notes-panel-CxjMovCh.js} +2 -2
- package/dist/_chunks/{notes-panel-C_QshXyI.js.map → notes-panel-CxjMovCh.js.map} +1 -1
- package/dist/_chunks/{parse-UB4FJGNA.js → parse-B0s7bY4d.js} +3 -3
- package/dist/_chunks/{parse-UB4FJGNA.js.map → parse-B0s7bY4d.js.map} +1 -1
- package/dist/_chunks/{parseISO-y3LncvfO.js → parseISO-DZZ5a-zK.js} +2 -2
- package/dist/_chunks/{parseISO-y3LncvfO.js.map → parseISO-DZZ5a-zK.js.map} +1 -1
- package/dist/_chunks/{patient-details-Cd_dCqkg.js → patient-details-Dgd_tocD.js} +2 -2
- package/dist/_chunks/{patient-details-Cd_dCqkg.js.map → patient-details-Dgd_tocD.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-D6Ftm46u.js → patient-field-row-BFVlJnS9.js} +3 -3
- package/dist/_chunks/{patient-field-row-D6Ftm46u.js.map → patient-field-row-BFVlJnS9.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-BSOHR4Ol.js → patient-summary-card-BTKvFUmh.js} +2 -2
- package/dist/_chunks/{patient-summary-card-BSOHR4Ol.js.map → patient-summary-card-BTKvFUmh.js.map} +1 -1
- package/dist/_chunks/{phone-input-O9camxkq.js → phone-input-EwVuqFik.js} +74 -74
- package/dist/_chunks/phone-input-EwVuqFik.js.map +1 -0
- package/dist/_chunks/{pl-HwLM6gPs.js → pl-BLh7KO-s.js} +3 -3
- package/dist/_chunks/{pl-HwLM6gPs.js.map → pl-BLh7KO-s.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-CvNFirHt.js → pregnancy-dating-JBAUbM40.js} +7 -7
- package/dist/_chunks/{pregnancy-dating-CvNFirHt.js.map → pregnancy-dating-JBAUbM40.js.map} +1 -1
- package/dist/_chunks/{pt-BxhT5ZQH.js → pt-CPKOrOLj.js} +2 -2
- package/dist/_chunks/{pt-BxhT5ZQH.js.map → pt-CPKOrOLj.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-ESnkuDfH.js → radiograph-panel.agent-DQh2SX8G.js} +3 -3
- package/dist/_chunks/{radiograph-panel.agent-ESnkuDfH.js.map → radiograph-panel.agent-DQh2SX8G.js.map} +1 -1
- package/dist/_chunks/registration-form-B6qqeXP1.js +1310 -0
- package/dist/_chunks/registration-form-B6qqeXP1.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-BXFgcvBW.js → rich-text-editor-BZTyxQBd.js} +1683 -1673
- package/dist/_chunks/rich-text-editor-BZTyxQBd.js.map +1 -0
- package/dist/_chunks/{ro-Do9W55ae.js → ro-Dc-oNqbF.js} +2 -2
- package/dist/_chunks/{ro-Do9W55ae.js.map → ro-Dc-oNqbF.js.map} +1 -1
- package/dist/_chunks/{ru-PDBX5gdf.js → ru-BtNpDZRR.js} +3 -3
- package/dist/_chunks/{ru-PDBX5gdf.js.map → ru-BtNpDZRR.js.map} +1 -1
- package/dist/_chunks/send-registration-link-form-pO2bGjGa.js +409 -0
- package/dist/_chunks/send-registration-link-form-pO2bGjGa.js.map +1 -0
- package/dist/_chunks/{slot-grid-uA9j7Nik.js → slot-grid-Bb13H9Rl.js} +3 -3
- package/dist/_chunks/{slot-grid-uA9j7Nik.js.map → slot-grid-Bb13H9Rl.js.map} +1 -1
- package/dist/_chunks/{sq-DnvsgyIh.js → sq-D4c7olaV.js} +2 -2
- package/dist/_chunks/{sq-DnvsgyIh.js.map → sq-D4c7olaV.js.map} +1 -1
- package/dist/_chunks/subDays-DKISP2nE.js +8 -0
- package/dist/_chunks/{subDays-xH7cpN6B.js.map → subDays-DKISP2nE.js.map} +1 -1
- package/dist/_chunks/{sv-CpFSK8xS.js → sv-Bf_dHPvh.js} +2 -2
- package/dist/_chunks/{sv-CpFSK8xS.js.map → sv-Bf_dHPvh.js.map} +1 -1
- package/dist/_chunks/{task-editor-BTeUFGUX.js → task-editor-CRhfwP9T.js} +2 -2
- package/dist/_chunks/{task-editor-BTeUFGUX.js.map → task-editor-CRhfwP9T.js.map} +1 -1
- package/dist/_chunks/{tr-DW4oQYHT.js → tr-xqQ6cbGY.js} +2 -2
- package/dist/_chunks/{tr-DW4oQYHT.js.map → tr-xqQ6cbGY.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-BWbOiLVw.js → use-appointment-details-read-BFslxbRr.js} +2 -2
- package/dist/_chunks/{use-appointment-details-read-BWbOiLVw.js.map → use-appointment-details-read-BFslxbRr.js.map} +1 -1
- package/dist/_chunks/use-field-match-C8ug3sdQ.js +30 -0
- package/dist/_chunks/use-field-match-C8ug3sdQ.js.map +1 -0
- package/dist/_chunks/use-registration-submit-CLGHxwoT.js +112 -0
- package/dist/_chunks/use-registration-submit-CLGHxwoT.js.map +1 -0
- package/dist/_chunks/{zh-CN-QGEs29fQ.js → zh-CN-C657DBCO.js} +3 -3
- package/dist/_chunks/{zh-CN-QGEs29fQ.js.map → zh-CN-C657DBCO.js.map} +1 -1
- package/dist/agent-catalog.json +90 -6
- package/dist/agent-i18n/en.json +11 -4
- package/dist/alia-asteroid-icon/index.js +52 -0
- package/dist/alia-asteroid-icon/index.js.map +1 -0
- package/dist/aws-transcribe/index.js +320 -0
- package/dist/aws-transcribe/index.js.map +1 -0
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/booking/booking-types.d.ts +9 -1
- package/dist/components/booking/booking-types.d.ts.map +1 -1
- package/dist/components/booking/booking.agent.d.ts.map +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts +2 -0
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +2 -2
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/index.js +1 -1
- package/dist/components/header-settings/header-settings.d.ts +6 -0
- package/dist/components/header-settings/header-settings.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/locale-picker/locale-picker.d.ts +16 -4
- package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rich-text-editor/help-me-write-overlay.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/use-field-match.d.ts +2 -2
- package/dist/hooks/use-field-match.d.ts.map +1 -1
- package/dist/i18n/locales/ar.d.ts +36 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +38 -2
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +36 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +38 -2
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +36 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +38 -2
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +36 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +38 -2
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +36 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +38 -2
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +36 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +38 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +36 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +38 -2
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +36 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +38 -2
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +36 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +38 -2
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +36 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +38 -2
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +36 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +38 -2
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +36 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +38 -2
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +36 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +38 -2
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +36 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +38 -2
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +36 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +38 -2
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +36 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +38 -2
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +36 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +38 -2
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +36 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +38 -2
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +296 -292
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +38 -2
- package/dist/locales/de.json +38 -2
- package/dist/locales/el.json +38 -2
- package/dist/locales/en.json +38 -2
- package/dist/locales/es.json +38 -2
- package/dist/locales/fr.json +38 -2
- package/dist/locales/hi.json +38 -2
- package/dist/locales/it.json +38 -2
- package/dist/locales/ja.json +38 -2
- package/dist/locales/nl.json +38 -2
- package/dist/locales/pl.json +38 -2
- package/dist/locales/pt.json +38 -2
- package/dist/locales/ro.json +38 -2
- package/dist/locales/ru.json +38 -2
- package/dist/locales/sq.json +38 -2
- package/dist/locales/sv.json +38 -2
- package/dist/locales/tr.json +38 -2
- package/dist/locales/zh.json +38 -2
- package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-types.d.ts +22 -0
- package/dist/patterns/alia-assistant/alia-types.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.js +7 -6
- package/dist/patterns/alia-assistant/index.js.map +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/registration-form/index.d.ts +1 -0
- package/dist/patterns/registration-form/index.d.ts.map +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/registration-form/registration-form.d.ts +43 -0
- package/dist/patterns/registration-form/registration-form.d.ts.map +1 -1
- package/dist/patterns/registration-form/registration-verification.d.ts +38 -0
- package/dist/patterns/registration-form/registration-verification.d.ts.map +1 -0
- package/dist/patterns/registration-form/use-contact-verification.d.ts +107 -0
- package/dist/patterns/registration-form/use-contact-verification.d.ts.map +1 -0
- package/dist/patterns/registration-form/verification-requests.d.ts +9 -0
- package/dist/patterns/registration-form/verification-requests.d.ts.map +1 -0
- package/dist/patterns/send-registration-link-form/index.d.ts +3 -0
- package/dist/patterns/send-registration-link-form/index.d.ts.map +1 -0
- package/dist/patterns/send-registration-link-form/index.js +6 -0
- package/dist/patterns/send-registration-link-form/index.js.map +1 -0
- package/dist/patterns/send-registration-link-form/send-registration-link-form.d.ts +80 -0
- package/dist/patterns/send-registration-link-form/send-registration-link-form.d.ts.map +1 -0
- package/dist/speech/aws-transcribe.d.ts +65 -0
- package/dist/speech/aws-transcribe.d.ts.map +1 -0
- package/dist/speech/event-stream.d.ts +13 -0
- package/dist/speech/event-stream.d.ts.map +1 -0
- package/dist/tokens.css +1 -1
- package/package.json +13 -1
- package/dist/_chunks/alia-sidebar-DZoyUFW8.js +0 -1290
- package/dist/_chunks/alia-sidebar-DZoyUFW8.js.map +0 -1
- package/dist/_chunks/booking-4BCeh7OY.js +0 -3889
- package/dist/_chunks/booking-4BCeh7OY.js.map +0 -1
- package/dist/_chunks/header-settings-DBlTL6Qj.js.map +0 -1
- package/dist/_chunks/locale-picker-KT-Vz3bx.js.map +0 -1
- package/dist/_chunks/phone-input-O9camxkq.js.map +0 -1
- package/dist/_chunks/registration-form-BGSVMAga.js +0 -819
- package/dist/_chunks/registration-form-BGSVMAga.js.map +0 -1
- package/dist/_chunks/rich-text-editor-BXFgcvBW.js.map +0 -1
- package/dist/_chunks/subDays-xH7cpN6B.js +0 -8
- package/dist/_chunks/use-field-match-pdbEnKvO.js +0 -28
- package/dist/_chunks/use-field-match-pdbEnKvO.js.map +0 -1
- package/dist/_chunks/use-registration-submit-eWAECgUC.js +0 -171
- package/dist/_chunks/use-registration-submit-eWAECgUC.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"header-settings-DBlTL6Qj.js","sources":["../../src/components/header-settings/header-settings.agent.ts","../../src/components/header-settings/header-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HeaderSettings. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HeaderSettingsHandle } from './header-settings';\n\nexport const headerSettingsAgent: AgentAdapter<HeaderSettingsHandle> = {\n id: 'header-settings',\n // Each setter persists a single preference value (locale / theme /\n // accessibility) — `set_value` semantics, not an ephemeral view switch.\n capabilities: ['set_value'],\n // Read-back for all three setters. None of these preferences is\n // recoverable from the DOM — `useTheme` resolves preference + OS into\n // a single applied class, so `theme: 'system'` and `theme: 'light'`\n // both paint `.theme-light` — and `set_locale` swallows unknown tags.\n // Without these slots an agent cannot distinguish \"switched to\n // Italian\" from \"the tag was dropped on the floor\". All four are UI\n // preferences: no PHI, no patient-identifiable data (§7).\n state: {\n locale: {\n type: 'string',\n descriptionKey: 'ui.agent.headerSettings.state.locale',\n description:\n 'Active IETF language tag (e.g. \"en\", \"it\", \"ar\"). Read after `set_locale` to confirm the switch landed — an unknown tag is silently dropped and leaves this unchanged.',\n read: (handle) => handle.getLocale(),\n },\n theme: {\n type: \"'light' | 'dark' | 'system'\",\n descriptionKey: 'ui.agent.headerSettings.state.theme',\n description:\n \"Stored base-theme preference. `'system'` means no override is set and the OS decides — read `resolvedTheme` for what is actually painted.\",\n read: (handle) => handle.getTheme(),\n },\n accessibility: {\n type: \"'default' | 'accessible' | 'system'\",\n descriptionKey: 'ui.agent.headerSettings.state.accessibility',\n description:\n \"Stored AAA-contrast preference. `'system'` means no override is set and `prefers-contrast` decides.\",\n read: (handle) => handle.getAccessibility(),\n },\n resolvedTheme: {\n type: \"'light' | 'dark' | 'light-accessible' | 'dark-accessible'\",\n descriptionKey: 'ui.agent.headerSettings.state.resolvedTheme',\n description:\n 'The theme actually applied to the document once preference and OS signals resolve. This is what makes a `set_theme(\"system\")` or `set_accessibility(\"system\")` write verifiable.',\n read: (handle) => handle.getResolvedTheme(),\n },\n },\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n argsSchema: {\n type: 'object',\n properties: {\n locale: {\n type: 'string',\n description:\n 'IETF language tag (e.g. \"en\", \"it\", \"ar\"). Unknown tags are silently dropped.',\n },\n },\n required: ['locale'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setLocale',\n description:\n 'Switch the active locale to the given IETF tag. Unknown tags are silently dropped — read the `locale` state slot afterwards to confirm.',\n errors: [\n 'Silently ignored when the tag names a locale the kit ships no bundle for — `locale` is unchanged.',\n ],\n examples: [{ args: { locale: 'it' }, note: 'Switch to Italian.' }],\n invoke: (handle, args: { locale: string }) => {\n // Validation happens inside the handle so the agent surface\n // accepts arbitrary tags and silently drops unknown ones.\n handle.setLocale(args.locale);\n },\n },\n set_theme: {\n safety: 'write',\n argsType: '{ theme: \"light\" | \"dark\" | \"system\" }',\n argsSchema: {\n type: 'object',\n properties: { theme: { enum: ['light', 'dark', 'system'] } },\n required: ['theme'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setTheme',\n description:\n 'Switch the theme preference. Verify with the `theme` slot (the stored preference) and `resolvedTheme` (what is actually painted).',\n examples: [\n { args: { theme: 'dark' }, note: 'Switch to the dark theme.' },\n ],\n invoke: (handle, args: { theme: 'light' | 'dark' | 'system' }) => {\n handle.setTheme(args.theme);\n },\n },\n set_accessibility: {\n safety: 'write',\n argsType: '{ accessibility: \"default\" | \"accessible\" | \"system\" }',\n argsSchema: {\n type: 'object',\n properties: {\n accessibility: {\n enum: ['default', 'accessible', 'system'],\n description:\n \"`'system'` clears the override and follows `prefers-contrast`.\",\n },\n },\n required: ['accessibility'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.headerSettings.actions.setAccessibility',\n description:\n 'Switch the accessibility preference. Verify with the `accessibility` slot (the stored preference) and `resolvedTheme` (what is actually painted).',\n examples: [\n {\n args: { accessibility: 'accessible' },\n note: 'Enable the AAA-accessible profile.',\n },\n ],\n invoke: (\n handle,\n args: { accessibility: 'default' | 'accessible' | 'system' },\n ) => {\n handle.setAccessibility(args.accessibility);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'header-settings',\n description: 'Marks the HeaderSettings wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop (forwarded via HTMLAttributes).',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ArrowLeft, ChevronRight, Settings } from 'lucide-react';\nimport { Button } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu/dropdown-menu';\nimport {\n LocalePicker,\n LOCALE_STORAGE_KEY,\n useInitialLocale,\n} from '../locale-picker/locale-picker';\nimport {\n useTheme,\n type AccessibilityPreference,\n type ResolvedTheme,\n type ThemePreference,\n} from '../../hooks';\nimport { useLocale } from '../../hooks/use-locale';\nimport { useMediaQuery } from '../../hooks/use-media-query';\nimport { useDocumentDirection } from '../../hooks/use-direction';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { headerSettingsAgent } from './header-settings.agent';\nimport { useLengthTokenPx } from '../_shared/length-token';\n\nfunction 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 — silent-fail per use-theme.ts. */\n }\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/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n align: {\n start: '',\n end: '',\n },\n },\n defaultVariants: { align: 'end' },\n});\n\n// The language flyout hosts the searchable locale list, so it takes a\n// popover width rather than the menu's minimum.\nconst languageFlyoutClasses = 'ds:w-[var(--popover-size-md)]';\n\nconst panelVariants = cva('', {\n variants: {\n language: {\n true: 'ds:[inline-size:var(--popover-size-md)] ds:[min-inline-size:0] ds:[max-inline-size:calc(100vw_-_2_*_var(--spacing-lg))] ds:[&_input]:min-w-0',\n false: '',\n },\n },\n});\n\ntype PhoneView = 'main' | 'language' | 'appearance';\n\nconst phoneRowClasses = cva(\n 'ds:flex ds:flex-1 ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]',\n);\n\nfunction SettingRowLabel({\n label,\n value,\n lang,\n}: {\n label: string;\n value: string;\n lang?: string;\n}) {\n return (\n <span className={phoneRowClasses()}>\n <span className=\"ds:truncate\">{label}</span>\n <span\n lang={lang}\n className=\"ds:shrink-0 ds:text-muted-foreground ds:[[data-highlighted]_&]:text-current\"\n >\n {value}\n </span>\n </span>\n );\n}\n\nfunction isLocale(tag: string): tag is Locale {\n return Object.prototype.hasOwnProperty.call(LOCALE_META, tag);\n}\n\n/* ------------------------------------------------------------------ */\n/* LanguageSub */\n/* */\n/* One menu row naming the setting and showing the current language */\n/* (\"Language · English ›\"), laid out like DropdownMenu.ChoiceSub. It */\n/* opens a flyout beside the menu holding LocalePicker.SearchList, so */\n/* the 18 locales stay searchable. The flyout is a dialog, not a menu: */\n/* it holds a search combobox and a listbox, which a menu may not own. */\n/* ------------------------------------------------------------------ */\n\nfunction LanguageSub({ locale }: { locale: string }) {\n const { t } = useTranslation('ui');\n const current = LOCALE_META[isLocale(locale) ? locale : 'en'];\n\n // Radix focuses the flyout itself when a keyboard user opens it. Hand\n // that focus on to the search field so typing filters at once.\n const handleFocus = (event: FocusEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n event.currentTarget\n .querySelector<HTMLInputElement>('input')\n ?.focus({ preventScroll: true });\n };\n\n // The flyout closes on the \"back\" arrow (ArrowLeft, or ArrowRight in\n // RTL). Inside the search field that key moves the caret instead,\n // unless the caret is already at the start of the field. Capture\n // phase, so Radix's own handler on the flyout never sees the key.\n const handleKeyDownCapture = (event: KeyboardEvent<HTMLDivElement>) => {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) return;\n // Keys pressed while an IME is composing (Japanese, Chinese) belong to\n // the composition, never to the menu.\n if (event.nativeEvent.isComposing) {\n event.stopPropagation();\n return;\n }\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n if (target.selectionStart !== 0 || target.selectionEnd !== 0) {\n event.stopPropagation();\n }\n };\n\n return (\n <DropdownMenu.Sub>\n <DropdownMenu.SubTrigger aria-haspopup=\"dialog\" data-value={current.code}>\n <span className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:truncate\">\n {t('navigation.headerSettings.language.label')}\n </span>\n <span\n lang={current.code}\n className=\"ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:[[data-highlighted]_&]:text-current\"\n >\n {current.nativeName}\n </span>\n </span>\n </DropdownMenu.SubTrigger>\n {/* Radix renders a `menu`; override to `dialog` and drop the\n menu-only `aria-orientation`, which a dialog may not carry. */}\n <DropdownMenu.SubContent\n role=\"dialog\"\n aria-orientation={undefined}\n className={languageFlyoutClasses}\n onFocus={handleFocus}\n onKeyDownCapture={handleKeyDownCapture}\n // Escape that cancels an IME conversion must not close the menu.\n onEscapeKeyDown={(escapeEvent) => {\n if (escapeEvent.isComposing) escapeEvent.preventDefault();\n }}\n >\n <LocalePicker.SearchList />\n </DropdownMenu.SubContent>\n </DropdownMenu.Sub>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface HeaderSettingsProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n /** Anchor side for the dropdown. Defaults to `end` (matches LTR + RTL). */\n align?: 'start' | 'end';\n /**\n * Size of the cog trigger only. Forwards to the underlying\n * `IconButton`. Defaults to `md` to preserve the existing visual.\n * Use `sm` when composing alongside other `<Button size=\"sm\">`\n * actions in a header row — keeps the visual rhythm consistent.\n *\n * The menu itself (language, appearance and accessible-mode rows)\n * stays at kit defaults regardless — this prop only sizes the\n * trigger.\n */\n size?: 'sm' | 'md' | 'lg';\n /** Disable the trigger entirely. */\n disabled?: boolean;\n}\n\nexport interface HeaderSettingsHandle {\n /**\n * Switch the active locale. Widened to `string` (vs. `Locale`) so\n * agent surfaces with untyped inputs can call through without\n * extra casting — invalid tags no-op silently.\n */\n setLocale: (next: string) => void;\n setTheme: (next: ThemePreference) => void;\n setAccessibility: (next: AccessibilityPreference) => void;\n /* ---- read-back for the three setters above -------------------- */\n /** Active IETF language tag, as i18next resolved it. */\n getLocale: () => string;\n /** Stored base-theme preference (`'system'` when no override is set). */\n getTheme: () => ThemePreference;\n /** Stored AAA-contrast preference (`'system'` when no override is set). */\n getAccessibility: () => AccessibilityPreference;\n /**\n * The theme actually painted once preference + OS signals resolve.\n * `theme: 'system'` and `theme: 'light'` both render `.theme-light`,\n * so this is what makes a `setTheme('system')` write verifiable.\n */\n getResolvedTheme: () => ResolvedTheme;\n}\n\n/* ------------------------------------------------------------------ */\n/* HeaderSettings */\n/* */\n/* Single button → single DropdownMenu surface, laid out as a View */\n/* menu: Language, Appearance (light / dark / system) and an Accessible */\n/* mode SwitchItem. On phones the lists replace the panel with a Back */\n/* row; on larger screens they open beside it. Every row uses the hooks */\n/* (`useLocale`, `useTheme`) as the standalone components, so there is */\n/* no state duplication. */\n/* ------------------------------------------------------------------ */\n\nexport const HeaderSettings = forwardRef<HTMLDivElement, HeaderSettingsProps>(\n (props, ref) => {\n const {\n align = 'end',\n size = 'md',\n disabled = false,\n className,\n id,\n ...rest\n } = props as HeaderSettingsProps & { id?: string };\n\n const { t } = useTranslation('ui');\n const theme = useTheme();\n const { locale, setLocale: setLocaleI18n } = useLocale();\n // The language search only mounts with its flyout, so apply the saved\n // (or browser) language here, on mount.\n useInitialLocale();\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n // PublicHeader uses ds:md:hidden / ds:hidden ds:md:flex for its phone\n // sheet and inline actions. Match that same Tailwind md boundary (768px).\n const isPhone = useMediaQuery('(width < 48rem)');\n const direction = useDocumentDirection();\n const [phoneView, setPhoneView] = useState<PhoneView>('main');\n const view = isPhone ? phoneView : 'main';\n const panelRef = useRef<HTMLDivElement>(null);\n const languageRowRef = useRef<HTMLDivElement>(null);\n const appearanceRowRef = useRef<HTMLDivElement>(null);\n const returnFocusRef = useRef<Exclude<PhoneView, 'main'> | null>(null);\n const activationRef = useRef('keyboard');\n\n useIsomorphicLayoutEffect(() => {\n if (!isPhone && phoneView !== 'main') {\n returnFocusRef.current = phoneView;\n setPhoneView('main');\n }\n if (view === 'language') {\n panelRef.current\n ?.querySelector<HTMLElement>(\n activationRef.current === 'keyboard' ? 'input' : 'button',\n )\n ?.focus({ preventScroll: true });\n } else if (view === 'appearance') {\n panelRef.current\n ?.querySelector<HTMLElement>('[role=\"menuitem\"]')\n ?.focus({ preventScroll: true });\n } else if (returnFocusRef.current) {\n const section = returnFocusRef.current;\n // Desktop renders SubTrigger/ChoiceSub in place of the phone rows.\n const row = isPhone\n ? (section === 'language' ? languageRowRef : appearanceRowRef).current\n : panelRef.current?.querySelector<HTMLElement>(\n `[role=\"menuitem\"][aria-haspopup=\"${section === 'language' ? 'dialog' : 'menu'}\"]`,\n );\n row?.focus({ preventScroll: true });\n returnFocusRef.current = null;\n }\n }, [isPhone, phoneView, view]);\n\n const handlePhoneRowKeyDown = (\n event: KeyboardEvent<HTMLDivElement>,\n section: Exclude<PhoneView, 'main'>,\n ) => {\n if (event.nativeEvent.isComposing) return;\n const forwardKey = direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight';\n if (\n event.key === 'Enter' ||\n event.key === ' ' ||\n event.key === forwardKey\n )\n activationRef.current = 'keyboard';\n if (event.key === forwardKey) {\n event.preventDefault();\n setPhoneView(section);\n }\n };\n\n const goBack = () => {\n if (view === 'main') return;\n returnFocusRef.current = view;\n setPhoneView('main');\n };\n\n const handlePhoneKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (view === 'main') return;\n if (event.nativeEvent.isComposing) {\n event.stopPropagation();\n return;\n }\n if (event.key !== (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft'))\n return;\n const target = event.target;\n // As in LanguageSub, leave the caret alone until it reaches the start.\n if (\n target instanceof HTMLInputElement &&\n (target.selectionStart !== 0 || target.selectionEnd !== 0)\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n goBack();\n };\n\n // Same side-effect chain as LocalePicker's internal helper:\n // i18next.changeLanguage → document.dir/lang → persist.\n // Inlined here (rather than exported from locale-picker) because\n // it's three small calls; the LocalePicker.SearchList component\n // continues to own its own copy for inline use, and both apply\n // the same persistence key (`alfadocs-ui.locale`) so a write from\n // either path is visible to the other on next mount.\n const setLocaleWithPersistence = useCallback(\n (next: Locale) => {\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, next);\n },\n [setLocaleI18n],\n );\n const setLocaleRef = useRef(setLocaleWithPersistence);\n setLocaleRef.current = setLocaleWithPersistence;\n // Assigned during render (not in an effect) so an agent reading the\n // slot immediately after `set_locale` sees the settled value rather\n // than the pre-commit one.\n const localeRef = useRef(locale);\n localeRef.current = locale;\n\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const agentHandle = useMemo<HeaderSettingsHandle>(\n () => ({\n setLocale: (next: string) => {\n // Mirrors LocalePicker's gating — silently drop unknown tags\n // rather than crash mid-cascade. `LOCALES_WITH_BUNDLES` is\n // re-imported via the LOCALE_META keys so this file doesn't\n // need the resources module on the build-agent-catalog path.\n if (Object.prototype.hasOwnProperty.call(LOCALE_META, next)) {\n setLocaleRef.current(next as Locale);\n }\n },\n setTheme: (next) => themeRef.current.setTheme(next),\n setAccessibility: (next) => themeRef.current.setAccessibility(next),\n // Read-back. None of the three preferences is recoverable from\n // the DOM: `useTheme` resolves preference + OS into one applied\n // class, so `theme: 'system'` and `theme: 'light'` both paint\n // `.theme-light`. Without these an agent cannot tell a switch\n // that landed from one that was dropped.\n getLocale: () => localeRef.current,\n getTheme: () => themeRef.current.theme,\n getAccessibility: () => themeRef.current.accessibility,\n getResolvedTheme: () => themeRef.current.resolvedTheme,\n }),\n [],\n );\n useAgentRegistration(headerSettingsAgent, agentHandle, id);\n\n const accessibleChecked = theme.accessibility === 'accessible';\n // Keep the panel clear of the screen edge by the phone menu's own\n // side margin. In the PublicHeader sheet the gear is\n // 24px from the edge and an end-aligned 224px panel would otherwise be\n // pushed flush against it. On desktop it never reaches the edge.\n const edgeMargin = useLengthTokenPx('--spacing-lg', forwardedRef, 24);\n const languageLabel = t('navigation.headerSettings.language.label');\n const appearanceLabel = t('navigation.headerSettings.appearance.label');\n const currentLocale = LOCALE_META[isLocale(locale) ? locale : 'en'];\n const appearanceOptions = [\n {\n value: 'light',\n label: t('navigation.headerSettings.appearance.light'),\n },\n { value: 'dark', label: t('navigation.headerSettings.appearance.dark') },\n {\n value: 'system',\n label: t('navigation.headerSettings.appearance.system'),\n },\n ] as const;\n const backLabel = t('navigation.headerSettings.back');\n\n return (\n <div\n ref={forwardedRef}\n data-component=\"header-settings\"\n data-component-id={id}\n className={wrapperVariants({ align, className })}\n {...rest}\n >\n <DropdownMenu.Root\n onOpenChange={(open) => {\n if (!open) {\n returnFocusRef.current = null;\n setPhoneView('main');\n }\n }}\n >\n <DropdownMenu.Trigger asChild>\n <IconButton\n size={size}\n disabled={disabled}\n icon={<Settings aria-hidden />}\n aria-label={t('navigation.headerSettings.trigger')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content\n ref={panelRef}\n align={align}\n collisionPadding={edgeMargin}\n className={panelVariants({ language: view === 'language' })}\n {...(view === 'language'\n ? {\n role: 'dialog',\n 'aria-orientation': undefined,\n 'aria-label': languageLabel,\n 'aria-labelledby': undefined,\n }\n : {})}\n onKeyDownCapture={handlePhoneKeyDown}\n onEscapeKeyDown={(event) => {\n if (event.isComposing) event.preventDefault();\n }}\n >\n {view === 'language' ? (\n <div\n role=\"presentation\"\n onKeyDown={(event) => {\n // The dialog owns typing and Tab, not Radix's menu\n // typeahead. Its two tab stops are Back and search.\n if (\n event.key === 'Tab' &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey\n ) {\n event.preventDefault();\n event.currentTarget\n .querySelector<HTMLElement>(\n event.target instanceof HTMLInputElement\n ? 'button'\n : 'input',\n )\n ?.focus();\n }\n event.stopPropagation();\n }}\n >\n <Button\n intent=\"ghost\"\n size=\"sm\"\n className=\"ds:w-full ds:justify-start ds:text-start ds:font-normal ds:min-h-[var(--min-target-size)] ds:sm:min-h-[var(--min-target-size)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:gap-[var(--spacing-sm)] ds:[&>span:last-child]:flex-1\"\n startIcon={<ArrowLeft aria-hidden className=\"ds:size-4\" />}\n flipIconInRtl\n onClick={goBack}\n >\n <SettingRowLabel label={backLabel} value={languageLabel} />\n </Button>\n <DropdownMenu.Separator />\n <LocalePicker.SearchList />\n </div>\n ) : view === 'appearance' ? (\n <>\n <DropdownMenu.Item\n startIcon={\n <ArrowLeft\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onSelect={(event) => {\n event.preventDefault();\n goBack();\n }}\n >\n <SettingRowLabel label={backLabel} value={appearanceLabel} />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.RadioGroup\n aria-label={appearanceLabel}\n value={theme.theme}\n onValueChange={(next) =>\n theme.setTheme(next as ThemePreference)\n }\n >\n {appearanceOptions.map((option) => (\n <DropdownMenu.RadioItem\n key={option.value}\n value={option.value}\n onSelect={(event) => event.preventDefault()}\n >\n {option.label}\n </DropdownMenu.RadioItem>\n ))}\n </DropdownMenu.RadioGroup>\n </>\n ) : (\n <>\n {isPhone ? (\n <DropdownMenu.Item\n ref={languageRowRef}\n aria-haspopup=\"dialog\"\n data-value={currentLocale.code}\n endIcon={\n <ChevronRight\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onPointerDown={(event) => {\n activationRef.current = event.pointerType;\n }}\n onKeyDown={(event) =>\n handlePhoneRowKeyDown(event, 'language')\n }\n onSelect={(event) => {\n event.preventDefault();\n setPhoneView('language');\n }}\n >\n <SettingRowLabel\n label={languageLabel}\n value={currentLocale.nativeName}\n lang={currentLocale.code}\n />\n </DropdownMenu.Item>\n ) : (\n <LanguageSub locale={locale} />\n )}\n <DropdownMenu.Separator />\n {isPhone ? (\n <DropdownMenu.Item\n ref={appearanceRowRef}\n aria-haspopup=\"menu\"\n data-value={theme.theme}\n endIcon={\n <ChevronRight\n aria-hidden\n className=\"ds:size-4 ds:rtl:-scale-x-100\"\n />\n }\n onPointerDown={(event) => {\n activationRef.current = event.pointerType;\n }}\n onKeyDown={(event) =>\n handlePhoneRowKeyDown(event, 'appearance')\n }\n onSelect={(event) => {\n event.preventDefault();\n setPhoneView('appearance');\n }}\n >\n <SettingRowLabel\n label={appearanceLabel}\n value={\n appearanceOptions.find(\n (option) => option.value === theme.theme,\n )?.label ?? ''\n }\n />\n </DropdownMenu.Item>\n ) : (\n <DropdownMenu.ChoiceSub\n label={appearanceLabel}\n value={theme.theme}\n onValueChange={theme.setTheme}\n options={appearanceOptions}\n />\n )}\n {/* Writes through useTheme, so the document gets the\n `theme-accessible` class at once (including the Lexend\n swap for Latin scripts, see src/tokens/index.css). */}\n <DropdownMenu.SwitchItem\n checked={accessibleChecked}\n onCheckedChange={(next) =>\n theme.setAccessibility(next ? 'accessible' : 'default')\n }\n >\n {t('navigation.headerSettings.appearance.accessible')}\n </DropdownMenu.SwitchItem>\n </>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n },\n);\n\nHeaderSettings.displayName = 'HeaderSettings';\n"],"names":["headerSettingsAgent","handle","args","safeWriteStorage","key","value","applyDocumentAttrs","locale","root","LOCALE_META","wrapperVariants","cva","languageFlyoutClasses","panelVariants","phoneRowClasses","SettingRowLabel","label","lang","jsxs","jsx","isLocale","tag","LanguageSub","t","useTranslation","current","handleFocus","event","_a","handleKeyDownCapture","target","DropdownMenu","escapeEvent","LocalePicker","HeaderSettings","forwardRef","props","ref","align","size","disabled","className","id","rest","theme","useTheme","setLocaleI18n","useLocale","useInitialLocale","forwardedRef","useRef","useImperativeHandle","isPhone","useMediaQuery","direction","useDocumentDirection","phoneView","setPhoneView","useState","view","panelRef","languageRowRef","appearanceRowRef","returnFocusRef","activationRef","useIsomorphicLayoutEffect","_b","_d","_c","section","row","_e","handlePhoneRowKeyDown","forwardKey","goBack","handlePhoneKeyDown","setLocaleWithPersistence","useCallback","next","LOCALE_STORAGE_KEY","setLocaleRef","localeRef","themeRef","agentHandle","useMemo","useAgentRegistration","accessibleChecked","edgeMargin","useLengthTokenPx","languageLabel","appearanceLabel","currentLocale","appearanceOptions","backLabel","open","IconButton","Settings","Button","ArrowLeft","Fragment","option","ChevronRight"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"locale-picker-KT-Vz3bx.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 the resolved locale came from `navigator.language` rather than an explicit user choice. Distinguishes \"the user chose English\" from \"we are following the browser, which happens to be English\" — a distinction the resolved tag alone destroys.',\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 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 } from '../../i18n/config';\nimport { useLocale } from '../../hooks/use-locale';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { localePickerAgent } from './locale-picker.agent';\n\n/* ------------------------------------------------------------------ */\n/* Persistence + browser-locale detection */\n/* */\n/* The first mount of a LocalePicker after a fresh page load runs a */\n/* one-shot detection: if no locale has ever been persisted, read */\n/* navigator.language, normalise to the base tag (`it-IT` → `it`), */\n/* and adopt it if the kit ships a matching bundle. Fall back to */\n/* `en` if not. Result is persisted so a subsequent page load */\n/* respects the user choice without re-detecting. */\n/* */\n/* Module-level flag — the detection must fire once per app */\n/* lifecycle, not once per LocalePicker instance, since HeaderSettings */\n/* + a standalone picker can both be mounted simultaneously. */\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` on each mount.\n */\nexport const LOCALE_SYSTEM_DEFAULT = 'system' as const;\nexport type LocalePreference = Locale | typeof LOCALE_SYSTEM_DEFAULT;\n\nlet detectionFired = false;\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 an explicit user choice (i.e. no localStorage entry).\n * Used to mark the \"System Default\" row as the active selection\n * until the user picks a specific locale.\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\nfunction useLocalePickerState(): LocalePickerState {\n const { locale: rawLocale, setLocale: setLocaleI18n } = useLocale();\n const [isSystemDefault, setIsSystemDefault] = useState<boolean>(\n () => safeReadStorage(LOCALE_STORAGE_KEY) === null,\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 safeRemoveStorage(LOCALE_STORAGE_KEY);\n const detected = detectBrowserLocale();\n void setLocaleI18n(detected);\n applyDocumentAttrs(detected);\n setIsSystemDefault(true);\n return;\n }\n if (!isSupportedLocale(next)) return;\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, next);\n setIsSystemDefault(false);\n },\n [setLocaleI18n],\n );\n\n useInitialLocale();\n\n return { locale, isSystemDefault, setLocale };\n}\n\n/**\n * Applies the stored locale, or else the browser's, 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 */\nexport function useInitialLocale(): 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 return;\n }\n // No stored value → we're in System Default mode. Detect, apply,\n // but do NOT persist (so the System Default selection stays\n // sticky across reloads until the user explicitly chooses).\n const detected = detectBrowserLocale();\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 * 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 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 the user hasn't picked an explicit locale; 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 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 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={state.locale}\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 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={state.locale}\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 popoverSide = 'bottom',\n className,\n id,\n ...rest\n } = props as LocalePickerProps & { id?: string };\n\n const store = useLocalePickerState();\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 safeRemoveStorage(LOCALE_STORAGE_KEY);\n const detected = detectBrowserLocale();\n applyDocumentAttrs(detected);\n } else if (isSupportedLocale(next)) {\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, 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\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 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 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","isSupportedLocale","value","safeReadStorage","key","safeWriteStorage","detectBrowserLocale","raw","base","applyDocumentAttrs","locale","root","safeRemoveStorage","useLocalePickerState","rawLocale","setLocaleI18n","useLocale","isSystemDefault","setIsSystemDefault","useState","setLocale","useCallback","next","detected","useInitialLocale","useEffect","stored","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","handleSelect","jsx","jsxs","Command","defaultFilter","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_PADDING_X","Globe","isSystemSelected","resolvedEntry","Monitor","Check","entry","isSelected","IconTrigger","state","forwardedRef","popoverSide","Popover","IconButton","CompactTrigger","LocalePickerRoot","props","variant","id","useMemo","useRef","useImperativeHandle","stateRef","agentHandle","useAgentRegistration","LocalePicker"],"mappings":";;;;;;;;;;;;;;;;AAgCA,MAAMA,IAAuCC;AAAA,EAAa,MACxD,uBAAA,OAAA;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,EAAA,CAAA;AAIF,GAEMC,KAAoCnB;AAAA,EAAa,MACrD,uBAAA,OAAA;AAAA,IAAA,+CAAAoB;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,IAAA,+CAAAC;AAAA,EAAA,CAAA;AAIF;AAGsD,OAAO;AAAA,EAC3D,OAAO,KAAKtC,CAAsB,EAAE,KAAA;AACtC;AAGO,SAASuC,EAAYC,GAA0B;AACpD,SAAOA,EAAQ,iBAAiBxC;AAClC;AAOO,MAAMyC,IAAWC;AAAA,EACtB,CACE;AAAA,IACE,SAAAF;AAAA,IACA,OAAAG;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAOV,EAAQ,YAAA;AAIrB,WAAOW,GAAcC,IAAU;AAAA,MAC7B,KAAAH;AAAA,MACA,MAAAC;AAAA,MACA,MALAN,MAAU,WAAWxB,KAAsBpB,GAK/BkD,CAAI;AAAA,MAChB,OAAAP;AAAA,MACA,WAAWU,GAAY,EAAE,OAAAT,GAAO,MAAAC,GAAM,SAAAC,EAAA,GAAWC,CAAS;AAAA,MAC1D,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AACF;AAEAP,EAAS,cAAc;AC/BhB,MAAMa,IAA+C;AAAA,EAC1D,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAAA,EAEP,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EAAA;AAET;AASEC,EAAqB,IAAI,CAACL,MAASI,EAAYJ,CAAI,CAAC;AAY/C,MAAMM,KAA0C;AAAA,EACrD,GAAGD,EAAqB,IAAI,CAACL,MAASI,EAAYJ,CAAI,CAAC;AACzD,EAAE,KAAK,CAACO,GAAGC,MAAMD,EAAE,YAAY,cAAcC,EAAE,aAAa,IAAI,CAAC,GC3NpDC,KAAsD;AAAA,EACjE,IAAI;AAAA;AAAA,EAEJ,cAAc,CAAC,WAAW;AAAA,EAC1B,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,IAErC,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,mBAAA;AAAA,IAAmB;AAAA,EAC9C;AAAA,EAEF,SAAS;AAAA,IACP,YAAY;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,QAAQ;AAAA,MAAA;AAAA,MAErB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,QAAQ,CAACA,GAAQC,MAA6B;AAI5C,QAAAD,EAAO,UAAUC,EAAK,MAAM;AAAA,MAC9B;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GClBaC,IAAqB,sBAQrBC,IAAwB;AAGrC,IAAIC,IAAiB;AAErB,SAASC,EAAkBC,GAAiC;AAC1D,SACE,OAAOA,KAAU,YAChBX,EAA2C,SAASW,CAAK;AAE9D;AAEA,SAASC,EAAgBC,GAA4B;AACnD,MAAI,OAAO,SAAW,IAAa,QAAO;AAC1C,MAAI;AACF,WAAO,OAAO,aAAa,QAAQA,CAAG;AAAA,EACxC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASC,EAAiBD,GAAaF,GAAqB;AAC1D,MAAI,SAAO,SAAW;AACtB,QAAI;AACF,aAAO,aAAa,QAAQE,GAAKF,CAAK;AAAA,IACxC,QAAQ;AAAA,IAIR;AACF;AAEA,SAASI,IAA8B;AACrC,MAAI,OAAO,YAAc,IAAa,QAAO;AAC7C,QAAMC,IAAM,UAAU;AACtB,MAAI,CAACA,EAAK,QAAO;AACjB,QAAMC,IAAOD,EAAI,YAAA,EAAc,MAAM,GAAG,EAAE,CAAC;AAC3C,SAAON,EAAkBO,CAAI,IAAIA,IAAO;AAC1C;AAEA,SAASC,EAAmBC,GAAsB;AAChD,MAAI,OAAO,WAAa,IAAa;AACrC,QAAMC,IAAO,SAAS;AACtB,EAAAA,EAAK,OAAOD,GACZC,EAAK,MAAMrB,EAAYoB,CAAM,EAAE;AACjC;AA6BA,SAASE,EAAkBR,GAAmB;AAC5C,MAAI,SAAO,SAAW;AACtB,QAAI;AACF,aAAO,aAAa,WAAWA,CAAG;AAAA,IACpC,QAAQ;AAAA,IAER;AACF;AAEA,SAASS,IAA0C;AACjD,QAAM,EAAE,QAAQC,GAAW,WAAWC,EAAA,IAAkBC,EAAA,GAClD,CAACC,GAAiBC,CAAkB,IAAIC;AAAA,IAC5C,MAAMhB,EAAgBL,CAAkB,MAAM;AAAA,EAAA,GAM1CY,IAAiBT,EAAkBa,CAAS,IAAIA,IAAY,MAE5DM,IAAYC;AAAA,IAChB,CAACC,MAA2B;AAC1B,UAAIA,MAASvB,GAAuB;AAElC,QAAAa,EAAkBd,CAAkB;AACpC,cAAMyB,IAAWjB,EAAA;AACjB,QAAKS,EAAcQ,CAAQ,GAC3Bd,EAAmBc,CAAQ,GAC3BL,EAAmB,EAAI;AACvB;AAAA,MACF;AACA,MAAKjB,EAAkBqB,CAAI,MACtBP,EAAcO,CAAI,GACvBb,EAAmBa,CAAI,GACvBjB,EAAiBP,GAAoBwB,CAAI,GACzCJ,EAAmB,EAAK;AAAA,IAC1B;AAAA,IACA,CAACH,CAAa;AAAA,EAAA;AAGhB,SAAAS,GAAA,GAEO,EAAE,QAAAd,GAAQ,iBAAAO,GAAiB,WAAAG,EAAA;AACpC;AAQO,SAASI,KAAyB;AACvC,QAAM,EAAE,QAAQV,GAAW,WAAWC,EAAA,IAAkBC,EAAA;AACxD,EAAAS,GAAU,MAAM;AACd,QAAIzB,EAAgB;AACpB,IAAAA,IAAiB;AACjB,UAAM0B,IAASvB,EAAgBL,CAAkB;AACjD,QAAIG,EAAkByB,CAAM,GAAG;AAE7B,MAAIA,MAAWZ,KAAgBC,EAAcW,CAAM,GACnDjB,EAAmBiB,CAAM;AACzB;AAAA,IACF;AAIA,UAAMH,IAAWjB,EAAA;AACjB,IAAKS,EAAcQ,CAAQ,GAC3Bd,EAAmBc,CAAQ;AAAA,EAE7B,GAAG,CAAA,CAAE;AACP;AAMA,MAAMI,IAAkBC,EAAI,kCAAkC;AAAA,EAC5D,UAAU;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,iBAAiB,EAAE,SAAS,OAAA;AAC9B,CAAC,GAEKC,KAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,IAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,IAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACAC,GAAmB;AAAA,EACnB;AACF,EAAE,KAAK,GAAG,GAyFJC,KAAqBL,EAAI,uBAAuB;AAAA,EACpD,UAAU;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,iBAAiB,EAAE,SAAS,GAAA;AAC9B,CAAC,GAEYM,IAAyBxD;AAAA,EAIpC,CACE;AAAA,IACE,OAAOyD;AAAA,IACP,eAAAC;AAAA,IACA,SAASC;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,SAAAC,IAAU;AAAA,IACV,WAAAxD;AAAA,EAAA,GAEFE,MACG;AACH,UAAM,EAAE,GAAAuD,EAAA,IAAMC,EAAe,IAAI,GAC3BC,IAAQ7B,EAAA,GAGR8B,IAAiBD,EAAM,QAGvBE,IACJT,MACCO,EAAM,kBAAkB3C,IAAwB2C,EAAM,SACnDG,IAAcC,GAAA,GACdC,IAAUV,KAAe,GAAGQ,CAAW,WACvC,CAACG,GAAQC,CAAS,IAAI9B,EAAS,EAAE,GAEjC+B,IAAe7B;AAAA,MACnB,CAACnC,MAAiB;AAChB,YAAI,EAAAoD,KAAYC,IAChB;AAAA,cAAIrD,MAASa,GAAuB;AAClC,YAAIqC,IACFA,EAAcrC,CAAqB,IAEnC2C,EAAM,UAAU3C,CAAqB;AAEvC;AAAA,UACF;AACA,UAAKE,EAAkBf,CAAI,MACvBkD,IACFA,EAAclD,CAAI,IAElBwD,EAAM,UAAUxD,CAAI;AAAA;AAAA,MAExB;AAAA,MACA,CAACoD,GAAUC,GAASH,GAAeM,CAAK;AAAA,IAAA;AAG1C,WACE,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAlE;AAAA,QACA,WAAW,CAACgD,GAAmB,EAAE,SAAAM,GAAS,GAAGxD,CAAS,EACnD,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,kBAAe;AAAA,QAEf,UAAA,gBAAAqE;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,OAAOb,EAAE,sCAAsC;AAAA,YAO/C,QAAQc;AAAAA,YACR,cAAY;AAAA,YAQZ,UAAA;AAAA,cAAA,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW;AAAA,oBACTG;AAAA,oBACAC,GAAqB;AAAA,oBACrBC,GAAwB;AAAA,oBACxB;AAAA,oBACA;AAAA,kBAAA,EACA,KAAK,GAAG;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAN;AAAA,sBAACO;AAAA,sBAAA;AAAA,wBACC,eAAY;AAAA,wBACZ,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEZ,gBAAAP;AAAA,sBAACE,EAAQ;AAAA,sBAAR;AAAA,wBACC,IAAIN;AAAA,wBACJ,OAAOC;AAAA,wBACP,eAAeC;AAAA,wBACf,aAAaT,EAAE,2CAA2C;AAAA,wBAC1D,cAAYA,EAAE,qCAAqC;AAAA,wBACnD,UAAUF,KAAYC;AAAA,wBACtB,WAAW;AAAA,0BACT;AAAA,0BACA;AAAA,0BACA;AAAA,wBAAA,EACA,KAAK,GAAG;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACZ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF,gBAAAa;AAAA,gBAACC,EAAQ;AAAA,gBAAR;AAAA,kBACC,WAAW;AAAA,oBACT;AAAA,oBACA;AAAA,kBAAA,EACA,KAAK,GAAG;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAF;AAAA,sBAACE,EAAQ;AAAA,sBAAR;AAAA,wBACC,WAAW;AAAA,0BACT;AAAA,0BACA;AAAA,wBAAA,EACA,KAAK,GAAG;AAAA,wBAET,YAAE,+BAA+B;AAAA,sBAAA;AAAA,oBAAA;AAAA,qBAQlC,MAAM;AACN,4BAAMM,IACJf,MAAqB7C,GACjB6D,IAAgBtE,EAAYqD,CAAc;AAChD,6BACE,gBAAAS;AAAA,wBAACC,EAAQ;AAAA,wBAAR;AAAA,0BAEC,OAAOtD;AAAA,0BACP,UAAU;AAAA,4BACR;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA;AAAA,4BACA6D,EAAc;AAAA,4BACdA,EAAc;AAAA,0BAAA;AAAA,0BAEhB,UAAUtB,KAAYC;AAAA,0BACtB,UAAUW;AAAA,0BACV,WAAWnB;AAAA,0BACX,iBAAe4B,KAAoB;AAAA,0BACnC,gBAAcA,IAAmB,SAAS;AAAA,0BAE1C,UAAA;AAAA,4BAAA,gBAAAR;AAAA,8BAACU;AAAA,8BAAA;AAAA,gCACC,eAAY;AAAA,gCACZ,WAAU;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAEZ,gBAAAV,EAAC,QAAA,EAAK,WAAU,iDACb,YAAE,yCAAyC;AAAA,8BAC1C,QAAQS,EAAc;AAAA,4BAAA,CACvB,GACH;AAAA,4BACCD,IACC,gBAAAR;AAAA,8BAACW;AAAA,8BAAA;AAAA,gCACC,eAAY;AAAA,gCACZ,WAAU;AAAA,8BAAA;AAAA,4BAAA,IAEV;AAAA,4BACHH,sBACE,QAAA,EAAK,WAAU,cACb,UAAAnB,EAAE,0CAA0C,GAC/C,IACE;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAnCCzC;AAAA,sBAAA;AAAA,oBAsCX,GAAA;AAAA,oBAECP,GAAY,IAAI,CAACuE,MAAU;AAC1B,4BAAMC,IAAapB,MAAqBmB,EAAM;AAC9C,6BACE,gBAAAX;AAAA,wBAACC,EAAQ;AAAA,wBAAR;AAAA,0BAEC,OAAOU,EAAM;AAAA,0BACb,UAAU,CAACA,EAAM,YAAYA,EAAM,WAAW;AAAA,0BAC9C,UAAUzB,KAAYC;AAAA,0BACtB,UAAUW;AAAA,0BACV,WAAWnB;AAAA,0BACX,iBAAeiC,KAAc;AAAA,0BAC7B,gBAAcA,IAAa,SAAS;AAAA,0BAWpC,MAAMD,EAAM;AAAA,0BAEX,UAAA;AAAA,4BAAAxF,EAAYwF,EAAM,WAAW,IAC5B,gBAAAZ;AAAA,8BAAC1E;AAAA,8BAAA;AAAA,gCACC,SAASsF,EAAM;AAAA,gCACf,MAAK;AAAA,gCACL,OAAM;AAAA,gCACN,SAAQ;AAAA,gCACR,WAAU;AAAA,8BAAA;AAAA,4BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BASZ,gBAAAZ;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,eAAY;AAAA,kCACZ,WAAU;AAAA,kCAET,UAAAY,EAAM;AAAA,gCAAA;AAAA,8BAAA;AAAA;AAAA,4BAGX,gBAAAZ,EAAC,QAAA,EAAK,WAAU,iDACb,YAAM,YACT;AAAA,4BACCa,IACC,gBAAAb;AAAA,8BAACW;AAAA,8BAAA;AAAA,gCACC,eAAY;AAAA,gCACZ,WAAU;AAAA,8BAAA;AAAA,4BAAA,IAEV;AAAA,4BACHE,sBACE,QAAA,EAAK,WAAU,cACb,UAAAxB,EAAE,0CAA0C,GAC/C,IACE;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAvDCuB,EAAM;AAAA,sBAAA;AAAA,oBA0DjB,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAGN;AACF;AACA7B,EAAuB,cAAc;AAgBrC,SAAS+B,GAAY;AAAA,EACnB,OAAAC;AAAA,EACA,MAAAlF;AAAA,EACA,cAAAmF;AAAA,EACA,WAAApF;AAAA,EACA,UAAAuD;AAAA,EACA,SAAAC;AAAA,EACA,aAAA6B;AACF,GAAuB;AACrB,QAAM,EAAE,GAAA5B,EAAA,IAAMC,EAAe,IAAI,GAC3BsB,IAAQzE,EAAY4E,EAAM,MAAM;AACtC,SACE,gBAAAf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKgB;AAAA,MACL,kBAAe;AAAA,MACf,qBAAmBnF,EAAK;AAAA,MACxB,WAAW2C,EAAgB,EAAE,SAAS,QAAQ,WAAA5C,GAAW;AAAA,MACxD,GAAGC;AAAA,MAEJ,UAAA,gBAAAoE,EAACiB,EAAQ,MAAR,EACC,UAAA;AAAA,QAAA,gBAAAlB,EAACkB,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAAlB;AAAA,UAACmB;AAAA,UAAA;AAAA,YACC,UAAUhC,KAAYC;AAAA,YACtB,MACE,gBAAAa,EAAC,QAAA,EAAK,WAAU,gEACd,UAAA;AAAA,cAAA,gBAAAD,EAACO,GAAA,EAAM,eAAW,IAAC,WAAU,aAAY;AAAA,cACxCnF,EAAYwF,EAAM,WAAW,IAC5B,gBAAAZ;AAAA,gBAAC1E;AAAA,gBAAA;AAAA,kBACC,SAASsF,EAAM;AAAA,kBACf,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,SAAQ;AAAA,kBACR,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKT;AAAA,oBACA;AAAA;AAAA;AAAA,oBAGA;AAAA,kBAAA,EACA,KAAK,GAAG;AAAA,gBAAA;AAAA,cAAA,IAEV;AAAA,YAAA,GACN;AAAA,YAEF,cAAYvB,EAAE,mCAAmC;AAAA,cAC/C,QAAQuB,EAAM;AAAA,YAAA,CACf;AAAA,UAAA;AAAA,QAAA,GAEL;AAAA,QACA,gBAAAZ;AAAA,UAACkB,EAAQ;AAAA,UAAR;AAAA,YACC,MAAMD;AAAA,YACN,OAAM;AAAA,YACN,YAAY;AAAA,YACZ,WAAWtC;AAAA,YACX,cAAYU,EAAE,oCAAoC;AAAA,YAElD,UAAA,gBAAAW;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,OAAOgC,EAAM;AAAA,gBACb,eAAeA,EAAM;AAAA,gBACrB,UAAA5B;AAAA,gBACA,SAAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASgC,GAAe;AAAA,EACtB,OAAAL;AAAA,EACA,MAAAlF;AAAA,EACA,cAAAmF;AAAA,EACA,WAAApF;AAAA,EACA,UAAAuD;AAAA,EACA,SAAAC;AAAA,EACA,aAAA6B;AACF,GAAuB;AACrB,QAAM,EAAE,GAAA5B,EAAA,IAAMC,EAAe,IAAI,GAC3BsB,IAAQzE,EAAY4E,EAAM,MAAM;AACtC,SACE,gBAAAf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKgB;AAAA,MACL,kBAAe;AAAA,MACf,qBAAmBnF,EAAK;AAAA,MACxB,WAAW2C,EAAgB,EAAE,SAAS,WAAW,WAAA5C,GAAW;AAAA,MAC3D,GAAGC;AAAA,MAEJ,UAAA,gBAAAoE,EAACiB,EAAQ,MAAR,EACC,UAAA;AAAA,QAAA,gBAAAlB,EAACkB,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAAjB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,UAAUd,KAAYC;AAAA,YACtB,WAAWV;AAAA,YACX,cAAYW,EAAE,mCAAmC;AAAA,cAC/C,QAAQuB,EAAM;AAAA,YAAA,CACf;AAAA,YAEA,UAAA;AAAA,cAAAxF,EAAYwF,EAAM,WAAW,IAC5B,gBAAAZ;AAAA,gBAAC1E;AAAA,gBAAA;AAAA,kBACC,SAASsF,EAAM;AAAA,kBACf,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,SAAQ;AAAA,kBACR,WAAU;AAAA,gBAAA;AAAA,cAAA,IAGZ,gBAAAZ,EAACO,GAAA,EAAM,eAAW,IAAC,WAAU,yBAAwB;AAAA,cAEvD,gBAAAP;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAMY,EAAM;AAAA,kBAEX,UAAAA,EAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YACT;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAZ;AAAA,UAACkB,EAAQ;AAAA,UAAR;AAAA,YACC,MAAMD;AAAA,YACN,OAAM;AAAA,YACN,YAAY;AAAA,YACZ,WAAWtC;AAAA,YACX,cAAYU,EAAE,oCAAoC;AAAA,YAElD,UAAA,gBAAAW;AAAA,cAACjB;AAAA,cAAA;AAAA,gBACC,OAAOgC,EAAM;AAAA,gBACb,eAAeA,EAAM;AAAA,gBACrB,UAAA5B;AAAA,gBACA,SAAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,MAAMiC,IAAmB9F;AAAA,EACvB,CAAC+F,GAAOxF,MAAQ;AACd,UAAM;AAAA,MACJ,SAAAyF,IAAU;AAAA,MACV,OAAAxE;AAAA,MACA,eAAAkC;AAAA,MACA,UAAAE,IAAW;AAAA,MACX,SAAAC,IAAU;AAAA,MACV,aAAA6B,IAAc;AAAA,MACd,WAAArF;AAAA,MACA,IAAA4F;AAAA,MACA,GAAG3F;AAAA,IAAA,IACDyF,GAEE/B,IAAQ7B,EAAA,GACR8B,IAAiBzC,KAASwC,EAAM,QAMhCtB,IAAYC;AAAA,MAChB,CAACC,MAA2B;AAC1B,YAAIc,GAAe;AAKjB,cAJAA,EAAcd,CAAI,GAIdA,MAASvB,GAAuB;AAClC,YAAAa,EAAkBd,CAAkB;AACpC,kBAAMyB,KAAWjB,EAAA;AACjB,YAAAG,EAAmBc,EAAQ;AAAA,UAC7B,MAAA,CAAWtB,EAAkBqB,CAAI,MAC/Bb,EAAmBa,CAAI,GACvBjB,EAAiBP,GAAoBwB,CAAI;AAE3C;AAAA,QACF;AACA,QAAAoB,EAAM,UAAUpB,CAAI;AAAA,MACtB;AAAA,MACA,CAACc,GAAeM,CAAK;AAAA,IAAA,GAGjBwB,IAA2BU;AAAA,MAC/B,OAAO;AAAA,QACL,QAAQjC;AAAA,QACR,iBAAiBD,EAAM;AAAA,QACvB,WAAAtB;AAAA,MAAA;AAAA,MAEF,CAACuB,GAAgBD,EAAM,iBAAiBtB,CAAS;AAAA,IAAA,GAG7C+C,IAAeU,EAA8B,IAAI;AACvD,IAAAC,GAAoB7F,GAAK,MAAMkF,EAAa,SAA2B,CAAA,CAAE;AAEzE,UAAMY,IAAWF,EAAOX,CAAK;AAC7B,IAAAa,EAAS,UAAUb;AACnB,UAAMc,IAAcJ;AAAA,MAClB,OAAO;AAAA,QACL,WAAW,CAACtD,MAAiB;AAC3B,UAAIrB,EAAkBqB,CAAI,KACxByD,EAAS,QAAQ,UAAUzD,CAAI;AAAA,QAEnC;AAAA;AAAA;AAAA;AAAA,QAIA,WAAW,MAAMyD,EAAS,QAAQ;AAAA,QAClC,oBAAoB,MAAMA,EAAS,QAAQ;AAAA,MAAA;AAAA,MAE7C,CAAA;AAAA,IAAC;AAIH,WAFAE,GAAqBtF,IAAmBqF,GAAaL,CAAE,GAEnDD,MAAY,YAEZ,gBAAAvB;AAAA,MAACoB;AAAA,MAAA;AAAA,QACC,OAAAL;AAAA,QACA,MAAAlF;AAAA,QACA,cAAAmF;AAAA,QACA,WAAApF;AAAA,QACA,UAAAuD;AAAA,QACA,SAAAC;AAAA,QACA,aAAA6B;AAAA,MAAA;AAAA,IAAA,IAKJ,gBAAAjB;AAAA,MAACc;AAAA,MAAA;AAAA,QACC,OAAAC;AAAA,QACA,MAAAlF;AAAA,QACA,cAAAmF;AAAA,QACA,WAAApF;AAAA,QACA,UAAAuD;AAAA,QACA,SAAAC;AAAA,QACA,aAAA6B;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAI,EAAiB,cAAc;AAExB,MAAMU,KAAe,OAAO,OAAOV,GAAkB;AAAA,EAC1D,YAAYtC;AACd,CAAC;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phone-input-O9camxkq.js","sources":["../../src/components/phone-input/phone-input.agent.ts","../../src/components/phone-input/phone-input.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PhoneInput. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PhoneInputHandle } from './phone-input';\n\nexport const phoneInputAgent: AgentAdapter<PhoneInputHandle> = {\n id: 'phone-input',\n // A phone number is a single form value, not free-form rich text — `set_value`\n // (not `edit_inline`, which is reserved for in-place rich/cell editing).\n capabilities: ['set_value'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.phoneInput.state.value',\n description:\n 'Current E.164 phone number, or empty string when not yet valid.',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.phoneInput.state.isEmpty',\n description: 'Whether the input has no value.',\n read: (handle) => handle.getValue() === '',\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n description:\n 'Phone number in E.164 or national format; the parser infers the country.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.phoneInput.actions.setValue',\n description:\n 'Replace the phone number (E.164 or national format; parser will infer country).',\n examples: [\n { args: { value: '+393331234567' }, note: 'Set an Italian mobile.' },\n ],\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.phoneInput.actions.clear',\n description: 'Empty the input. Loses any typed value.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.phoneInput.actions.focus',\n description: 'Move keyboard focus to the phone-number input.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'phone-input',\n description: 'Marks the PhoneInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n} from 'react';\nimport { useAgentRegistration } from '../../agent';\nimport { phoneInputAgent } from './phone-input.agent';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useDomValue } from '../_shared/use-dom-value';\n\n/** Agent-readiness curated handle for PhoneInput. */\nexport interface PhoneInputHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n focus: () => void;\n}\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n findPopoverTrigger,\n useNonModalTabExit,\n} from '../_shared/non-modal-tab-exit';\nimport { Command, defaultFilter } from 'cmdk';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport {\n AsYouType,\n getCountries,\n getCountryCallingCode,\n parsePhoneNumberFromString,\n type CountryCode,\n} from 'libphonenumber-js/min';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlId,\n} from '../form-field/form-field-context';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { normalizeDiacritics } from '../_shared/normalize-diacritics';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { Flag } from '../flag';\n\nexport interface PhoneInputChangeMeta {\n country: CountryCode;\n isValid: boolean;\n isPossible: boolean;\n type?: string;\n}\n\nexport interface PhoneInputProps {\n value?: string;\n defaultValue?: string;\n /**\n * Country pre-selected when no value is supplied. Defaults to `IT`\n * (AlfaDocs's dominant user base is Italian). Pass a different\n * `CountryCode` to override, or enable `detectBrowserCountry` to\n * derive it from the browser locale.\n */\n defaultCountry?: CountryCode;\n /**\n * When true, infer the default country from `navigator.language` /\n * `Intl.Locale` before falling back to `defaultCountry` (or `IT`).\n * Off by default — most AlfaDocs flows should stay on IT regardless\n * of the visitor's browser locale.\n */\n detectBrowserCountry?: boolean;\n onChange?: (e164: string, meta: PhoneInputChangeMeta) => void;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n disabled?: boolean;\n readOnly?: boolean;\n placeholder?: string;\n popularCountries?: CountryCode[];\n /**\n * Restrict the country picker to this set (ISO 3166-1 alpha-2 codes), in\n * the order given. Unsupported or duplicate codes are dropped; an empty /\n * all-invalid list is ignored (every country stays selectable).\n * `popularCountries` is intersected with this set. When the list resolves\n * to a single country the picker collapses to a fixed, non-interactive\n * dial code — only the national-number field stays editable.\n */\n allowedCountries?: CountryCode[];\n className?: string;\n id?: string;\n name?: string;\n /**\n * What `name` posts in a native form. `national` (the default) posts the\n * number field's own text, e.g. `333 123 4567`. `e164` posts the full\n * number from a hidden field instead, e.g. `+393331234567`: the string\n * `onChange` reports, so it is empty while the text is not yet a number.\n */\n nameFormat?: 'national' | 'e164';\n required?: boolean;\n /**\n * Fires once when focus has left the whole control. Moving between the\n * country picker and the number field does not fire it. It takes no\n * event: the control has several parts, so there is no single target.\n */\n onBlur?: () => void;\n 'aria-label'?: string;\n}\n\nconst phoneInputWrapperVariants = cva(\n [\n 'ds:group ds:relative ds:inline-flex ds:items-stretch ds:w-full',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--control-border)] ds:bg-input',\n 'ds:shadow-[var(--shadow-input)]',\n 'ds:text-foreground',\n 'ds:transition-[colors,box-shadow] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n /* The ring is for the number field only. The country button draws its\n own, and `focus-within` here would draw a second one around it. */\n 'ds:has-[input:focus]:outline-[length:var(--focus-ring-width)] ds:has-[input:focus]:outline-solid',\n 'ds:has-[input:focus]:outline-ring ds:has-[input:focus]:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:has-[input:focus]:outline-[CanvasText]',\n 'ds:has-[:disabled]:cursor-not-allowed ds:has-[:disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: '',\n error: 'ds:border-destructive ds:has-[input:focus]:outline-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst countryTriggerVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:bg-transparent ds:text-foreground',\n 'ds:border-0 ds:border-e ds:border-e-border',\n 'ds:rounded-s-[var(--radius-sm)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted',\n 'ds:focus:outline-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:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-3 ds:pe-2',\n md: 'ds:ps-3 ds:pe-2',\n lg: 'ds:ps-4 ds:pe-3',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst phoneNumberInputVariants = cva(\n [\n 'ds:flex-1 ds:min-w-0 ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:border-0 ds:outline-none',\n 'ds:disabled:cursor-not-allowed',\n 'ds:read-only:cursor-default',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:ps-2 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:ps-2 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:ps-3 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\nconst pickerContentClasses = [\n 'ds:z-[var(--z-popover)] ds:overflow-hidden ds:w-72',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst pickerSearchClasses = [\n 'ds:w-full ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:border-0 ds:border-b ds:border-b-border ds:outline-none',\n 'ds:ps-3 ds:pe-3 ds:py-2 ds:text-[var(--font-size-sm)]',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst pickerListClasses =\n 'ds:max-h-72 ds:overflow-y-auto ds:p-[var(--spacing-xs)]';\n\nconst pickerItemClasses = [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)] ds:ps-3 ds:pe-3 ds:py-2 ds:text-[var(--font-size-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n].join(' ');\n\nconst pickerGroupHeadingClasses = [\n 'ds:ps-3 ds:pe-3 ds:py-1.5',\n 'type-eyebrow ds:text-muted-foreground',\n].join(' ');\n\nconst pickerEmptyClasses =\n 'ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground';\n\nconst chevronSizeBySize = {\n sm: 'ds:size-3.5',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n} as const;\n\nconst flagSizeBySize = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n} as const satisfies Record<'sm' | 'md' | 'lg', 'sm' | 'md' | 'lg'>;\n\nfunction countDigitsBefore(str: string, position: number): number {\n let digits = 0;\n for (let i = 0; i < position && i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') digits++;\n }\n return digits;\n}\n\nfunction positionAfterDigits(str: string, targetDigits: number): number {\n if (targetDigits === 0) return 0;\n let count = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] >= '0' && str[i] <= '9') {\n count++;\n if (count === targetDigits) return i + 1;\n }\n }\n return str.length;\n}\n\nfunction resolveDefaultCountry(\n explicit: CountryCode | undefined,\n supported: Set<string>,\n detectBrowser: boolean,\n locale: string,\n allowedList: CountryCode[] | null,\n): CountryCode {\n const allowed =\n allowedList && allowedList.length ? new Set<string>(allowedList) : null;\n const ok = (code: string) =>\n supported.has(code) && (!allowed || allowed.has(code));\n\n if (explicit && ok(explicit)) return explicit;\n\n if (detectBrowser) {\n const fromNavigator =\n typeof navigator !== 'undefined' ? navigator.language : undefined;\n if (fromNavigator) {\n const match = fromNavigator.match(/-([A-Za-z]{2})/);\n if (match) {\n const candidate = match[1].toUpperCase();\n if (ok(candidate)) return candidate as CountryCode;\n }\n }\n\n try {\n const region = new Intl.Locale(locale).region;\n if (region && ok(region.toUpperCase())) {\n return region.toUpperCase() as CountryCode;\n }\n } catch {\n // Intl.Locale may throw on malformed BCP-47 — fall through.\n }\n }\n\n // A restricted list with no explicit / detected hit defaults to the\n // consumer's first listed country; otherwise AlfaDocs's Italian-first\n // fallback.\n if (allowed) return allowedList![0];\n return 'IT';\n}\n\ninterface CountryRow {\n code: CountryCode;\n name: string;\n dialCode: string;\n}\n\nfunction buildCountryRows(\n locale: string,\n countries: CountryCode[],\n): CountryRow[] {\n let displayNames: Intl.DisplayNames;\n try {\n displayNames = new Intl.DisplayNames([locale], { type: 'region' });\n } catch {\n displayNames = new Intl.DisplayNames(['en'], { type: 'region' });\n }\n const rows = countries.map<CountryRow>((code) => ({\n code,\n name: displayNames.of(code) ?? code,\n dialCode: getCountryCallingCode(code),\n }));\n const collator = new Intl.Collator(locale);\n return rows.sort((a, b) => collator.compare(a.name, b.name));\n}\n\nexport const PhoneInput = forwardRef<HTMLInputElement, PhoneInputProps>(\n function PhoneInput(\n {\n value,\n defaultValue,\n defaultCountry,\n detectBrowserCountry = false,\n onChange,\n size = 'md',\n tone = 'default',\n disabled,\n readOnly,\n placeholder,\n popularCountries,\n allowedCountries,\n className,\n id,\n name,\n nameFormat = 'national',\n required,\n onBlur,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const supportedCountries = useMemo(\n () => new Set(getCountries() as string[]),\n [],\n );\n\n // Consumer-restricted country set, filtered to supported + deduped with\n // order preserved. `null` means \"no restriction\" (every country shown).\n const allowedList = useMemo<CountryCode[] | null>(() => {\n if (!allowedCountries || allowedCountries.length === 0) return null;\n const seen = new Set<string>();\n const filtered = allowedCountries.filter((code) => {\n if (!supportedCountries.has(code) || seen.has(code)) return false;\n seen.add(code);\n return true;\n });\n return filtered.length > 0 ? filtered : null;\n }, [allowedCountries, supportedCountries]);\n\n // A single allowed country has nothing to pick — render the dial code as a\n // fixed, non-interactive prefix instead of a one-item picker.\n const isCountryFixed = allowedList !== null && allowedList.length === 1;\n\n const initialState = useMemo(() => {\n const resolvedCountry = resolveDefaultCountry(\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n i18n.language,\n allowedList,\n );\n const raw = value ?? defaultValue;\n if (raw) {\n const parsed = parsePhoneNumberFromString(raw);\n if (parsed?.country) {\n // Clamp the parsed country to `allowedCountries` so the rendered dial\n // code can never leave the allowed set — a single-country lock stays\n // on its country even when handed an off-set value.\n if (!allowedList || allowedList.includes(parsed.country)) {\n return {\n country: parsed.country,\n display: parsed.formatNational(),\n pinned: true,\n };\n }\n return {\n country: resolvedCountry,\n display: new AsYouType(resolvedCountry).input(\n parsed.nationalNumber,\n ),\n pinned: true,\n };\n }\n return { country: resolvedCountry, display: raw, pinned: false };\n }\n return { country: resolvedCountry, display: '', pinned: false };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [country, setCountry] = useState<CountryCode>(initialState.country);\n const [displayValue, setDisplayValue] = useState<string>(\n initialState.display,\n );\n const [pickerOpen, setPickerOpen] = useState(false);\n const [pickerSearch, setPickerSearch] = useState('');\n\n const isControlled = value !== undefined;\n const lastEmittedRef = useRef<string>('');\n const pendingCaretRef = useRef<number | null>(null);\n // Pins the country once the user (or an incoming value) selects one,\n // so the locale-flip effect below stops re-resolving.\n const userSelectedCountryRef = useRef(initialState.pinned);\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const composedInputRef = composeRefs(ref, inputRef);\n // The number is written to the input's DOM property, never to its\n // `value` attribute, where a copied outerHTML or a session replay\n // could read it. Declared before the caret effect below, which places\n // the caret in the text this one writes.\n const syncDisplay = useDomValue(inputRef, displayValue);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const pickerContentRef = useRef<HTMLDivElement | null>(null);\n\n // Re-resolve the country when i18n.language flips from the bootstrap\n // fallback to the real locale on first paint, unless the user has\n // already pinned a country.\n useEffect(() => {\n if (userSelectedCountryRef.current) return;\n const next = resolveDefaultCountry(\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n i18n.language,\n allowedList,\n );\n setCountry((prev) => (prev === next ? prev : next));\n }, [\n i18n.language,\n defaultCountry,\n supportedCountries,\n detectBrowserCountry,\n allowedList,\n ]);\n\n // Sync state back from a controlled `value` prop change that did not\n // originate from this component (e.g. parent reset). Skip the sync when\n // the incoming value matches what we just emitted.\n useEffect(() => {\n if (!isControlled) return;\n const current = value ?? '';\n if (current === lastEmittedRef.current) return;\n if (current === '') {\n setDisplayValue('');\n return;\n }\n const parsed = parsePhoneNumberFromString(current);\n if (\n parsed?.country &&\n (!allowedList || allowedList.includes(parsed.country))\n ) {\n userSelectedCountryRef.current = true;\n setCountry(parsed.country);\n setDisplayValue(parsed.formatNational());\n } else {\n // Off-set or unparseable controlled value — keep the country within the\n // allowed set; only sync the displayed digits.\n setDisplayValue(parsed ? parsed.formatNational() : current);\n }\n }, [value, isControlled, allowedList]);\n\n useIsomorphicLayoutEffect(() => {\n if (pendingCaretRef.current == null) return;\n const pos = pendingCaretRef.current;\n pendingCaretRef.current = null;\n const node = inputRef.current;\n if (node && document.activeElement === node) {\n node.setSelectionRange(pos, pos);\n }\n });\n\n const emit = useCallback(\n (nextDisplay: string, nextCountry: CountryCode) => {\n const parsed = parsePhoneNumberFromString(nextDisplay, nextCountry);\n const e164 = parsed?.number ?? '';\n lastEmittedRef.current = e164;\n onChange?.(e164, {\n country: nextCountry,\n isValid: parsed?.isValid() ?? false,\n isPossible: parsed?.isPossible() ?? false,\n type: parsed?.getType(),\n });\n },\n [onChange],\n );\n\n const controlId = useFormFieldControlId(ctx, id);\n const inputId = id ?? (inFormField ? controlId : undefined);\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.phone.placeholder', 'Phone number');\n\n /* Focus leaving the whole control. The picker is portalled, so it is\n outside the wrapper in the DOM but still part of the control. */\n const onBlurRef = useRef(onBlur);\n onBlurRef.current = onBlur;\n const focusInsideRef = useRef(false);\n const pressInsideRef = useRef(false);\n const isInside = useCallback(\n (node: EventTarget | null) =>\n node instanceof Node &&\n Boolean(\n wrapperRef.current?.contains(node) ||\n pickerContentRef.current?.contains(node),\n ),\n [],\n );\n const leave = useCallback(() => {\n if (!focusInsideRef.current) return;\n focusInsideRef.current = false;\n onBlurRef.current?.();\n }, []);\n const handleFocus = () => {\n focusInsideRef.current = true;\n };\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n const next = event.relatedTarget;\n if (isInside(next)) return;\n /* Safari does not focus a button on click: pressing the country\n button blurs the number field to nowhere. */\n if (next === null && pressInsideRef.current) return;\n leave();\n };\n const listensForBlur = onBlur !== undefined;\n useEffect(() => {\n if (!listensForBlur) return;\n let check: number | undefined;\n const onPointerDown = (event: PointerEvent) => {\n pressInsideRef.current = isInside(event.target);\n if (pressInsideRef.current) return;\n /* A press outside closes the picker, and its focused search box\n can unmount without a blur event. */\n check = window.setTimeout(() => {\n if (!isInside(document.activeElement)) leave();\n }, 0);\n };\n const onPointerUp = () => {\n pressInsideRef.current = false;\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('pointerup', onPointerUp, true);\n document.addEventListener('pointercancel', onPointerUp, true);\n return () => {\n window.clearTimeout(check);\n document.removeEventListener('pointerdown', onPointerDown, true);\n document.removeEventListener('pointerup', onPointerUp, true);\n document.removeEventListener('pointercancel', onPointerUp, true);\n };\n }, [listensForBlur, isInside, leave]);\n\n const postsE164 = nameFormat === 'e164' && name !== undefined;\n const e164Value = postsE164\n ? (parsePhoneNumberFromString(displayValue, country)?.number ?? '')\n : '';\n\n const handleInputChange = (event: ChangeEvent<HTMLInputElement>) => {\n // A keystroke the formatter drops (or a read-only field refuses)\n // leaves the text as it was, so no render follows: ask for one, to\n // take the refused character out.\n syncDisplay();\n if (readOnly) return;\n const target = event.target;\n const raw = target.value;\n const caret = target.selectionStart ?? raw.length;\n const digitsBefore = countDigitsBefore(raw, caret);\n\n const formatter = new AsYouType(country);\n const formatted = formatter.input(raw);\n\n pendingCaretRef.current = positionAfterDigits(formatted, digitsBefore);\n setDisplayValue(formatted);\n emit(formatted, country);\n };\n\n const lastEmittedRefForHandle = lastEmittedRef;\n const agentHandle = useMemo<PhoneInputHandle>(\n () => ({\n getValue: () => lastEmittedRefForHandle.current,\n setValue: (next) => {\n if (next === '') {\n setDisplayValue('');\n emit('', country);\n return;\n }\n const parsed = parsePhoneNumberFromString(next);\n if (parsed?.country) {\n userSelectedCountryRef.current = true;\n setCountry(parsed.country);\n setDisplayValue(parsed.formatNational());\n emit(parsed.formatNational(), parsed.country);\n } else {\n const formatter = new AsYouType(country);\n const formatted = formatter.input(next);\n setDisplayValue(formatted);\n emit(formatted, country);\n }\n },\n clear: () => {\n setDisplayValue('');\n emit('', country);\n },\n focus: () => inputRef.current?.focus(),\n }),\n [country, emit, lastEmittedRefForHandle],\n );\n useAgentRegistration(phoneInputAgent, agentHandle, id);\n const exitOnTab = useNonModalTabExit(true, {\n getAnchor: findPopoverTrigger,\n onReturnToTrigger: () => setPickerOpen(false),\n });\n\n const handleCountrySelect = (nextCountry: CountryCode) => {\n if (nextCountry === country) {\n setPickerOpen(false);\n return;\n }\n const digits = displayValue.replace(/\\D/g, '');\n const formatter = new AsYouType(nextCountry);\n const reformatted = digits ? formatter.input(digits) : '';\n userSelectedCountryRef.current = true;\n setCountry(nextCountry);\n setDisplayValue(reformatted);\n setPickerOpen(false);\n setPickerSearch('');\n emit(reformatted, nextCountry);\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n };\n\n const countryRows = useMemo(\n () =>\n buildCountryRows(\n i18n.language,\n allowedList ?? (Array.from(supportedCountries) as CountryCode[]),\n ),\n [i18n.language, supportedCountries, allowedList],\n );\n\n const popularRows = useMemo(() => {\n if (!popularCountries || popularCountries.length === 0) return [];\n const byCode = new Map(countryRows.map((row) => [row.code, row]));\n return popularCountries\n .filter((code): code is CountryCode => supportedCountries.has(code))\n .map((code) => byCode.get(code))\n .filter((row): row is CountryRow => Boolean(row));\n }, [popularCountries, countryRows, supportedCountries]);\n\n const popularCodes = useMemo(\n () => new Set(popularRows.map((row) => row.code)),\n [popularRows],\n );\n\n const remainingRows = useMemo(\n () =>\n popularCodes.size > 0\n ? countryRows.filter((row) => !popularCodes.has(row.code))\n : countryRows,\n [countryRows, popularCodes],\n );\n\n const selected = useMemo(\n () => countryRows.find((row) => row.code === country),\n [countryRows, country],\n );\n const selectedDialCode = selected ? selected.dialCode : '';\n const selectedName = selected ? selected.name : country;\n\n const triggerLabel = t('inputs.phone.countryPickerLabel', 'Country');\n const triggerAccessibleName = `${triggerLabel}: ${selectedName}, +${selectedDialCode}`;\n\n const filterFn = useCallback(\n (candidate: string, searchStr: string, keywords?: string[]) => {\n const normalizedCandidate = normalizeDiacritics(candidate);\n const normalizedSearch = normalizeDiacritics(searchStr);\n const normalizedKeywords = keywords?.map(normalizeDiacritics);\n return defaultFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords,\n );\n },\n [],\n );\n\n const renderRow = (row: CountryRow) => {\n const accessibleLabel = `${row.name}, +${row.dialCode}`;\n return (\n <Command.Item\n key={row.code}\n value={row.code}\n keywords={[row.name, row.dialCode, `+${row.dialCode}`]}\n onSelect={() => handleCountrySelect(row.code)}\n className={pickerItemClasses}\n aria-label={accessibleLabel}\n >\n <Flag country={row.code} size={flagSizeBySize[size]} />\n <span className=\"ds:flex-1 ds:truncate\">{row.name}</span>\n <bdi dir=\"ltr\" className=\"ds:text-muted-foreground ds:tabular-nums\">\n +{row.dialCode}\n </bdi>\n </Command.Item>\n );\n };\n\n return (\n <div\n ref={wrapperRef}\n onFocus={handleFocus}\n onBlur={handleBlur}\n data-component=\"phone-input\"\n data-component-id={id}\n data-slot=\"phone-input\"\n className={phoneInputWrapperVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n {isCountryFixed ? (\n <span\n data-slot=\"phone-country-fixed\"\n className={`${countryTriggerVariants({ size })} ds:cursor-default ds:hover:bg-transparent`}\n >\n <span className=\"ds:sr-only\">{`${triggerLabel}: ${selectedName}`}</span>\n <Flag country={country} size={flagSizeBySize[size]} />\n <bdi dir=\"ltr\" className=\"ds:tabular-nums\">\n +{selectedDialCode}\n </bdi>\n </span>\n ) : (\n <Popover.Root open={pickerOpen} onOpenChange={setPickerOpen}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={effectiveDisabled}\n // What opens is a dialog: a search box over the list.\n aria-haspopup=\"dialog\"\n aria-expanded={pickerOpen}\n aria-label={triggerAccessibleName}\n className={countryTriggerVariants({ size })}\n >\n <Flag country={country} size={flagSizeBySize[size]} />\n <bdi dir=\"ltr\" className=\"ds:tabular-nums\">\n +{selectedDialCode}\n </bdi>\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n chevronSizeBySize[size],\n 'ds:shrink-0 ds:text-muted-foreground',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n pickerOpen ? 'ds:rotate-180' : '',\n ].join(' ')}\n />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n ref={pickerContentRef}\n onKeyDown={exitOnTab}\n sideOffset={6}\n align=\"start\"\n // Radix gives the content role=\"dialog\" with no name.\n aria-label={triggerLabel}\n className={pickerContentClasses}\n >\n <Command\n filter={filterFn}\n shouldFilter\n loop\n label={triggerLabel}\n >\n <Command.Input\n asChild\n value={pickerSearch}\n onValueChange={setPickerSearch}\n >\n <input\n data-phone-country-search=\"true\"\n type=\"text\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n placeholder={t(\n 'inputs.phone.searchCountry',\n 'Search countries…',\n )}\n className={pickerSearchClasses}\n />\n </Command.Input>\n <Command.List className={pickerListClasses}>\n <Command.Empty className={pickerEmptyClasses}>\n {t('inputs.phone.noCountryFound', 'No country found')}\n </Command.Empty>\n {popularRows.length > 0 ? (\n <Command.Group\n heading={\n <span className={pickerGroupHeadingClasses}>\n {t('inputs.phone.popularCountries', 'Popular')}\n </span>\n }\n >\n {popularRows.map(renderRow)}\n </Command.Group>\n ) : null}\n <Command.Group\n heading={\n popularRows.length > 0 ? (\n <span className={pickerGroupHeadingClasses}>\n {t('inputs.phone.allCountries', 'All countries')}\n </span>\n ) : undefined\n }\n >\n {remainingRows.map(renderRow)}\n </Command.Group>\n </Command.List>\n </Command>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n )}\n <input\n ref={composedInputRef}\n id={inputId}\n name={postsE164 ? undefined : name}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={readOnly}\n required={effectiveRequired}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n onChange={handleInputChange}\n className={phoneNumberInputVariants({ size })}\n />\n {postsE164 ? (\n <input\n type=\"hidden\"\n name={name}\n value={e164Value}\n disabled={effectiveDisabled}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPhoneInput.displayName = 'PhoneInput';\n\nexport {\n phoneInputWrapperVariants,\n countryTriggerVariants,\n phoneNumberInputVariants,\n};\n"],"names":["phoneInputAgent","handle","args","phoneInputWrapperVariants","cva","countryTriggerVariants","phoneNumberInputVariants","pickerContentClasses","pickerSearchClasses","pickerListClasses","pickerItemClasses","MENU_ROW_HIGHLIGHT","pickerGroupHeadingClasses","pickerEmptyClasses","chevronSizeBySize","flagSizeBySize","countDigitsBefore","str","position","digits","i","positionAfterDigits","targetDigits","count","resolveDefaultCountry","explicit","supported","detectBrowser","locale","allowedList","allowed","ok","code","fromNavigator","match","candidate","region","buildCountryRows","countries","displayNames","rows","getCountryCallingCode","collator","a","b","PhoneInput","forwardRef","value","defaultValue","defaultCountry","detectBrowserCountry","onChange","size","tone","disabled","readOnly","placeholder","popularCountries","allowedCountries","className","id","name","nameFormat","required","onBlur","ariaLabel","ref","t","i18n","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","supportedCountries","useMemo","getCountries","seen","filtered","isCountryFixed","initialState","resolvedCountry","raw","parsed","parsePhoneNumberFromString","AsYouType","country","setCountry","useState","displayValue","setDisplayValue","pickerOpen","setPickerOpen","pickerSearch","setPickerSearch","isControlled","lastEmittedRef","useRef","pendingCaretRef","userSelectedCountryRef","inputRef","composedInputRef","composeRefs","syncDisplay","useDomValue","wrapperRef","pickerContentRef","useEffect","next","prev","current","useIsomorphicLayoutEffect","pos","node","emit","useCallback","nextDisplay","nextCountry","e164","controlId","useFormFieldControlId","inputId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","resolvedPlaceholder","onBlurRef","focusInsideRef","pressInsideRef","isInside","_a","_b","leave","handleFocus","handleBlur","event","listensForBlur","check","onPointerDown","onPointerUp","postsE164","e164Value","handleInputChange","target","caret","digitsBefore","formatted","lastEmittedRefForHandle","agentHandle","useAgentRegistration","exitOnTab","useNonModalTabExit","findPopoverTrigger","handleCountrySelect","formatter","reformatted","countryRows","popularRows","byCode","row","popularCodes","remainingRows","selected","selectedDialCode","selectedName","triggerLabel","triggerAccessibleName","filterFn","searchStr","keywords","normalizedCandidate","normalizeDiacritics","normalizedSearch","normalizedKeywords","defaultFilter","renderRow","accessibleLabel","jsxs","Command","jsx","Flag","Popover","ChevronDown"],"mappings":";;;;;;;;;;;;;;;;;AASO,MAAMA,KAAkD;AAAA,EAC7D,IAAI;AAAA;AAAA;AAAA,EAGJ,cAAc,CAAC,WAAW;AAAA,EAC1B,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,eAAe;AAAA,IAAA;AAAA,EAC1C;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,OAAO;AAAA,YACL,MAAM;AAAA,YACN,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,OAAO;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,UAAU;AAAA,QACR,EAAE,MAAM,EAAE,OAAO,gBAAA,GAAmB,MAAM,yBAAA;AAAA,MAAyB;AAAA,MAErE,QAAQ,CAACA,GAAQC,MAA4B;AAC3C,QAAAD,EAAO,SAASC,EAAK,KAAK;AAAA,MAC5B;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GCwBME,KAA4BC;AAAA,EAChC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA,IAGA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,MAEN,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAEMC,KAAyBD;AAAA,EAC7B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEME,KAA2BF;AAAA,EAC/B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAEMG,KAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KACJ,2DAEIC,KAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACAC,GAAmB;AACrB,EAAE,KAAK,GAAG,GAEJC,KAA4B;AAAA,EAChC;AAAA,EACA;AACF,EAAE,KAAK,GAAG,GAEJC,KACJ,iEAEIC,KAAoB;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN,GAEMC,KAAiB;AAAA,EACrB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,SAASC,GAAkBC,GAAaC,GAA0B;AAChE,MAAIC,IAAS;AACb,WAASC,IAAI,GAAGA,IAAIF,KAAYE,IAAIH,EAAI,QAAQG;AAC9C,IAAIH,EAAIG,CAAC,KAAK,OAAOH,EAAIG,CAAC,KAAK,OAAKD;AAEtC,SAAOA;AACT;AAEA,SAASE,GAAoBJ,GAAaK,GAA8B;AACtE,MAAIA,MAAiB,EAAG,QAAO;AAC/B,MAAIC,IAAQ;AACZ,WAASH,IAAI,GAAGA,IAAIH,EAAI,QAAQG;AAC9B,QAAIH,EAAIG,CAAC,KAAK,OAAOH,EAAIG,CAAC,KAAK,QAC7BG,KACIA,MAAUD;AAAc,aAAOF,IAAI;AAG3C,SAAOH,EAAI;AACb;AAEA,SAASO,GACPC,GACAC,GACAC,GACAC,GACAC,GACa;AACb,QAAMC,IACJD,KAAeA,EAAY,SAAS,IAAI,IAAYA,CAAW,IAAI,MAC/DE,IAAK,CAACC,MACVN,EAAU,IAAIM,CAAI,MAAM,CAACF,KAAWA,EAAQ,IAAIE,CAAI;AAEtD,MAAIP,KAAYM,EAAGN,CAAQ,EAAG,QAAOA;AAErC,MAAIE,GAAe;AACjB,UAAMM,IACJ,OAAO,YAAc,MAAc,UAAU,WAAW;AAC1D,QAAIA,GAAe;AACjB,YAAMC,IAAQD,EAAc,MAAM,gBAAgB;AAClD,UAAIC,GAAO;AACT,cAAMC,IAAYD,EAAM,CAAC,EAAE,YAAA;AAC3B,YAAIH,EAAGI,CAAS,EAAG,QAAOA;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI;AACF,YAAMC,IAAS,IAAI,KAAK,OAAOR,CAAM,EAAE;AACvC,UAAIQ,KAAUL,EAAGK,EAAO,YAAA,CAAa;AACnC,eAAOA,EAAO,YAAA;AAAA,IAElB,QAAQ;AAAA,IAER;AAAA,EACF;AAKA,SAAIN,IAAgBD,EAAa,CAAC,IAC3B;AACT;AAQA,SAASQ,GACPT,GACAU,GACc;AACd,MAAIC;AACJ,MAAI;AACF,IAAAA,IAAe,IAAI,KAAK,aAAa,CAACX,CAAM,GAAG,EAAE,MAAM,UAAU;AAAA,EACnE,QAAQ;AACN,IAAAW,IAAe,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG,EAAE,MAAM,UAAU;AAAA,EACjE;AACA,QAAMC,IAAOF,EAAU,IAAgB,CAACN,OAAU;AAAA,IAChD,MAAAA;AAAA,IACA,MAAMO,EAAa,GAAGP,CAAI,KAAKA;AAAA,IAC/B,UAAUS,GAAsBT,CAAI;AAAA,EAAA,EACpC,GACIU,IAAW,IAAI,KAAK,SAASd,CAAM;AACzC,SAAOY,EAAK,KAAK,CAACG,GAAGC,MAAMF,EAAS,QAAQC,EAAE,MAAMC,EAAE,IAAI,CAAC;AAC7D;AAEO,MAAMC,KAAaC;AAAA,EACxB,SACE;AAAA,IACE,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,sBAAAC,IAAuB;AAAA,IACvB,UAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,MAAAC,IAAO;AAAA,IACP,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,IAAAC;AAAA,IACA,MAAAC;AAAA,IACA,YAAAC,KAAa;AAAA,IACb,UAAAC;AAAA,IACA,QAAAC;AAAA,IACA,cAAcC;AAAA,EAAA,GAEhBC,IACA;;AACA,UAAM,EAAE,GAAAC,GAAG,MAAAC,MAASC,GAAe,IAAI,GACjCC,IAAMC,GAAA,GACNC,IAAcC,GAAWC,EAAgB,MAAM,MAE/CC,IAAqBC;AAAA,MACzB,MAAM,IAAI,IAAIC,IAA0B;AAAA,MACxC,CAAA;AAAA,IAAC,GAKGhD,IAAc+C,EAA8B,MAAM;AACtD,UAAI,CAAClB,KAAoBA,EAAiB,WAAW,EAAG,QAAO;AAC/D,YAAMoB,wBAAW,IAAA,GACXC,IAAWrB,EAAiB,OAAO,CAAC1B,MACpC,CAAC2C,EAAmB,IAAI3C,CAAI,KAAK8C,EAAK,IAAI9C,CAAI,IAAU,MAC5D8C,EAAK,IAAI9C,CAAI,GACN,GACR;AACD,aAAO+C,EAAS,SAAS,IAAIA,IAAW;AAAA,IAC1C,GAAG,CAACrB,GAAkBiB,CAAkB,CAAC,GAInCK,KAAiBnD,MAAgB,QAAQA,EAAY,WAAW,GAEhEoD,IAAeL,EAAQ,MAAM;AACjC,YAAMM,IAAkB1D;AAAA,QACtByB;AAAA,QACA0B;AAAA,QACAzB;AAAA,QACAkB,EAAK;AAAA,QACLvC;AAAA,MAAA,GAEIsD,IAAMpC,KAASC;AACrB,UAAImC,GAAK;AACP,cAAMC,IAASC,EAA2BF,CAAG;AAC7C,eAAIC,KAAA,QAAAA,EAAQ,UAIN,CAACvD,KAAeA,EAAY,SAASuD,EAAO,OAAO,IAC9C;AAAA,UACL,SAASA,EAAO;AAAA,UAChB,SAASA,EAAO,eAAA;AAAA,UAChB,QAAQ;AAAA,QAAA,IAGL;AAAA,UACL,SAASF;AAAA,UACT,SAAS,IAAII,EAAUJ,CAAe,EAAE;AAAA,YACtCE,EAAO;AAAA,UAAA;AAAA,UAET,QAAQ;AAAA,QAAA,IAGL,EAAE,SAASF,GAAiB,SAASC,GAAK,QAAQ,GAAA;AAAA,MAC3D;AACA,aAAO,EAAE,SAASD,GAAiB,SAAS,IAAI,QAAQ,GAAA;AAAA,IAE1D,GAAG,CAAA,CAAE,GAEC,CAACK,GAASC,CAAU,IAAIC,EAAsBR,EAAa,OAAO,GAClE,CAACS,GAAcC,CAAe,IAAIF;AAAA,MACtCR,EAAa;AAAA,IAAA,GAET,CAACW,GAAYC,CAAa,IAAIJ,EAAS,EAAK,GAC5C,CAACK,IAAcC,EAAe,IAAIN,EAAS,EAAE,GAE7CO,KAAejD,MAAU,QACzBkD,KAAiBC,EAAe,EAAE,GAClCC,IAAkBD,EAAsB,IAAI,GAG5CE,IAAyBF,EAAOjB,EAAa,MAAM,GAEnDoB,IAAWH,EAAgC,IAAI,GAC/CI,KAAmBC,GAAYrC,IAAKmC,CAAQ,GAK5CG,KAAcC,GAAYJ,GAAUX,CAAY,GAChDgB,KAAaR,EAA8B,IAAI,GAC/CS,KAAmBT,EAA8B,IAAI;AAK3D,IAAAU,GAAU,MAAM;AACd,UAAIR,EAAuB,QAAS;AACpC,YAAMS,IAAOrF;AAAA,QACXyB;AAAA,QACA0B;AAAA,QACAzB;AAAA,QACAkB,EAAK;AAAA,QACLvC;AAAA,MAAA;AAEF,MAAA2D,EAAW,CAACsB,MAAUA,MAASD,IAAOC,IAAOD,CAAK;AAAA,IACpD,GAAG;AAAA,MACDzC,EAAK;AAAA,MACLnB;AAAA,MACA0B;AAAA,MACAzB;AAAA,MACArB;AAAA,IAAA,CACD,GAKD+E,GAAU,MAAM;AACd,UAAI,CAACZ,GAAc;AACnB,YAAMe,IAAUhE,KAAS;AACzB,UAAIgE,MAAYd,GAAe,QAAS;AACxC,UAAIc,MAAY,IAAI;AAClB,QAAApB,EAAgB,EAAE;AAClB;AAAA,MACF;AACA,YAAMP,IAASC,EAA2B0B,CAAO;AACjD,MACE3B,KAAA,QAAAA,EAAQ,YACP,CAACvD,KAAeA,EAAY,SAASuD,EAAO,OAAO,MAEpDgB,EAAuB,UAAU,IACjCZ,EAAWJ,EAAO,OAAO,GACzBO,EAAgBP,EAAO,gBAAgB,KAIvCO,EAAgBP,IAASA,EAAO,eAAA,IAAmB2B,CAAO;AAAA,IAE9D,GAAG,CAAChE,GAAOiD,IAAcnE,CAAW,CAAC,GAErCmF,GAA0B,MAAM;AAC9B,UAAIb,EAAgB,WAAW,KAAM;AACrC,YAAMc,IAAMd,EAAgB;AAC5B,MAAAA,EAAgB,UAAU;AAC1B,YAAMe,IAAOb,EAAS;AACtB,MAAIa,KAAQ,SAAS,kBAAkBA,KACrCA,EAAK,kBAAkBD,GAAKA,CAAG;AAAA,IAEnC,CAAC;AAED,UAAME,IAAOC;AAAA,MACX,CAACC,GAAqBC,MAA6B;AACjD,cAAMlC,IAASC,EAA2BgC,GAAaC,CAAW,GAC5DC,KAAOnC,KAAA,gBAAAA,EAAQ,WAAU;AAC/B,QAAAa,GAAe,UAAUsB,GACzBpE,KAAA,QAAAA,EAAWoE,GAAM;AAAA,UACf,SAASD;AAAA,UACT,UAASlC,KAAA,gBAAAA,EAAQ,cAAa;AAAA,UAC9B,aAAYA,KAAA,gBAAAA,EAAQ,iBAAgB;AAAA,UACpC,MAAMA,KAAA,gBAAAA,EAAQ;AAAA,QAAQ;AAAA,MAE1B;AAAA,MACA,CAACjC,CAAQ;AAAA,IAAA,GAGLqE,KAAYC,GAAsBnD,GAAKV,CAAE,GACzC8D,KAAU9D,MAAOY,IAAcgD,KAAY,SAC3CG,MACHnD,IAAcF,EAAI,WAAW,OAAU,EAAQhB,GAC5CsE,MACHpD,IAAcF,EAAI,WAAW,OAAU,EAAQP,IAC5C8D,KAAmBrD,IAAcF,EAAI,UAAU,IAC/CwD,KAAgBD,KAAmB,UAAUxE,GAC7C0E,KACJvD,KAAeF,EAAI,cAAcA,EAAI,cAAc,QAE/C0D,KACJxE,MAAeW,EAAE,4BAA4B,cAAc,GAIvD8D,IAAY/B,EAAOlC,CAAM;AAC/B,IAAAiE,EAAU,UAAUjE;AACpB,UAAMkE,KAAiBhC,EAAO,EAAK,GAC7BiC,IAAiBjC,EAAO,EAAK,GAC7BkC,IAAWhB;AAAA,MACf,CAACF,MAAA;;AACC,eAAAA,aAAgB,QAChB,IACEmB,IAAA3B,GAAW,YAAX,QAAA2B,EAAoB,SAASnB,OAC7BoB,IAAA3B,GAAiB,YAAjB,QAAA2B,EAA0B,SAASpB;AAAA;AAAA,MAEvC,CAAA;AAAA,IAAC,GAEGqB,KAAQnB,EAAY,MAAM;;AAC9B,MAAKc,GAAe,YACpBA,GAAe,UAAU,KACzBG,IAAAJ,EAAU,YAAV,QAAAI,EAAA,KAAAJ;AAAA,IACF,GAAG,CAAA,CAAE,GACCO,KAAc,MAAM;AACxB,MAAAN,GAAe,UAAU;AAAA,IAC3B,GACMO,KAAa,CAACC,MAAsC;AACxD,YAAM7B,IAAO6B,EAAM;AACnB,MAAIN,EAASvB,CAAI,KAGbA,MAAS,QAAQsB,EAAe,WACpCI,GAAA;AAAA,IACF,GACMI,KAAiB3E,MAAW;AAClC,IAAA4C,GAAU,MAAM;AACd,UAAI,CAAC+B,GAAgB;AACrB,UAAIC;AACJ,YAAMC,IAAgB,CAACH,MAAwB;AAE7C,QADAP,EAAe,UAAUC,EAASM,EAAM,MAAM,GAC1C,CAAAP,EAAe,YAGnBS,IAAQ,OAAO,WAAW,MAAM;AAC9B,UAAKR,EAAS,SAAS,aAAa,KAAGG,GAAA;AAAA,QACzC,GAAG,CAAC;AAAA,MACN,GACMO,IAAc,MAAM;AACxB,QAAAX,EAAe,UAAU;AAAA,MAC3B;AACA,sBAAS,iBAAiB,eAAeU,GAAe,EAAI,GAC5D,SAAS,iBAAiB,aAAaC,GAAa,EAAI,GACxD,SAAS,iBAAiB,iBAAiBA,GAAa,EAAI,GACrD,MAAM;AACX,eAAO,aAAaF,CAAK,GACzB,SAAS,oBAAoB,eAAeC,GAAe,EAAI,GAC/D,SAAS,oBAAoB,aAAaC,GAAa,EAAI,GAC3D,SAAS,oBAAoB,iBAAiBA,GAAa,EAAI;AAAA,MACjE;AAAA,IACF,GAAG,CAACH,IAAgBP,GAAUG,EAAK,CAAC;AAEpC,UAAMQ,KAAYjF,OAAe,UAAUD,MAAS,QAC9CmF,KAAYD,OACbV,KAAAhD,EAA2BK,GAAcH,CAAO,MAAhD,gBAAA8C,GAAmD,WAAU,KAC9D,IAEEY,KAAoB,CAACP,MAAyC;AAKlE,UADAlC,GAAA,GACIjD,EAAU;AACd,YAAM2F,IAASR,EAAM,QACfvD,IAAM+D,EAAO,OACbC,IAAQD,EAAO,kBAAkB/D,EAAI,QACrCiE,IAAepI,GAAkBmE,GAAKgE,CAAK,GAG3CE,KADY,IAAI/D,EAAUC,CAAO,EACX,MAAMJ,CAAG;AAErC,MAAAgB,EAAgB,UAAU9E,GAAoBgI,IAAWD,CAAY,GACrEzD,EAAgB0D,EAAS,GACzBlC,EAAKkC,IAAW9D,CAAO;AAAA,IACzB,GAEM+D,KAA0BrD,IAC1BsD,KAAc3E;AAAA,MAClB,OAAO;AAAA,QACL,UAAU,MAAM0E,GAAwB;AAAA,QACxC,UAAU,CAACzC,MAAS;AAClB,cAAIA,MAAS,IAAI;AACf,YAAAlB,EAAgB,EAAE,GAClBwB,EAAK,IAAI5B,CAAO;AAChB;AAAA,UACF;AACA,gBAAMH,IAASC,EAA2BwB,CAAI;AAC9C,cAAIzB,KAAA,QAAAA,EAAQ;AACV,YAAAgB,EAAuB,UAAU,IACjCZ,EAAWJ,EAAO,OAAO,GACzBO,EAAgBP,EAAO,gBAAgB,GACvC+B,EAAK/B,EAAO,kBAAkBA,EAAO,OAAO;AAAA,eACvC;AAEL,kBAAMiE,IADY,IAAI/D,EAAUC,CAAO,EACX,MAAMsB,CAAI;AACtC,YAAAlB,EAAgB0D,CAAS,GACzBlC,EAAKkC,GAAW9D,CAAO;AAAA,UACzB;AAAA,QACF;AAAA,QACA,OAAO,MAAM;AACX,UAAAI,EAAgB,EAAE,GAClBwB,EAAK,IAAI5B,CAAO;AAAA,QAClB;AAAA,QACA,OAAO,MAAA;;AAAM,kBAAA8C,IAAAhC,EAAS,YAAT,gBAAAgC,EAAkB;AAAA;AAAA,MAAM;AAAA,MAEvC,CAAC9C,GAAS4B,GAAMmC,EAAuB;AAAA,IAAA;AAEzC,IAAAE,GAAqBxJ,IAAiBuJ,IAAa3F,CAAE;AACrD,UAAM6F,KAAYC,GAAmB,IAAM;AAAA,MACzC,WAAWC;AAAA,MACX,mBAAmB,MAAM9D,EAAc,EAAK;AAAA,IAAA,CAC7C,GAEK+D,KAAsB,CAACtC,MAA6B;AACxD,UAAIA,MAAgB/B,GAAS;AAC3B,QAAAM,EAAc,EAAK;AACnB;AAAA,MACF;AACA,YAAM1E,IAASuE,EAAa,QAAQ,OAAO,EAAE,GACvCmE,IAAY,IAAIvE,EAAUgC,CAAW,GACrCwC,IAAc3I,IAAS0I,EAAU,MAAM1I,CAAM,IAAI;AACvD,MAAAiF,EAAuB,UAAU,IACjCZ,EAAW8B,CAAW,GACtB3B,EAAgBmE,CAAW,GAC3BjE,EAAc,EAAK,GACnBE,GAAgB,EAAE,GAClBoB,EAAK2C,GAAaxC,CAAW,GAC7B,sBAAsB,MAAM;;AAC1B,SAAAe,IAAAhC,EAAS,YAAT,QAAAgC,EAAkB;AAAA,MACpB,CAAC;AAAA,IACH,GAEM0B,IAAcnF;AAAA,MAClB,MACEvC;AAAA,QACE+B,EAAK;AAAA,QACLvC,KAAgB,MAAM,KAAK8C,CAAkB;AAAA,MAAA;AAAA,MAEjD,CAACP,EAAK,UAAUO,GAAoB9C,CAAW;AAAA,IAAA,GAG3CmI,IAAcpF,EAAQ,MAAM;AAChC,UAAI,CAACnB,KAAoBA,EAAiB,WAAW,UAAU,CAAA;AAC/D,YAAMwG,IAAS,IAAI,IAAIF,EAAY,IAAI,CAACG,MAAQ,CAACA,EAAI,MAAMA,CAAG,CAAC,CAAC;AAChE,aAAOzG,EACJ,OAAO,CAACzB,MAA8B2C,EAAmB,IAAI3C,CAAI,CAAC,EAClE,IAAI,CAACA,MAASiI,EAAO,IAAIjI,CAAI,CAAC,EAC9B,OAAO,CAACkI,MAA2B,EAAQA,CAAI;AAAA,IACpD,GAAG,CAACzG,GAAkBsG,GAAapF,CAAkB,CAAC,GAEhDwF,KAAevF;AAAA,MACnB,MAAM,IAAI,IAAIoF,EAAY,IAAI,CAACE,MAAQA,EAAI,IAAI,CAAC;AAAA,MAChD,CAACF,CAAW;AAAA,IAAA,GAGRI,KAAgBxF;AAAA,MACpB,MACEuF,GAAa,OAAO,IAChBJ,EAAY,OAAO,CAACG,MAAQ,CAACC,GAAa,IAAID,EAAI,IAAI,CAAC,IACvDH;AAAA,MACN,CAACA,GAAaI,EAAY;AAAA,IAAA,GAGtBE,IAAWzF;AAAA,MACf,MAAMmF,EAAY,KAAK,CAACG,MAAQA,EAAI,SAAS3E,CAAO;AAAA,MACpD,CAACwE,GAAaxE,CAAO;AAAA,IAAA,GAEjB+E,KAAmBD,IAAWA,EAAS,WAAW,IAClDE,KAAeF,IAAWA,EAAS,OAAO9E,GAE1CiF,IAAerG,EAAE,mCAAmC,SAAS,GAC7DsG,KAAwB,GAAGD,CAAY,KAAKD,EAAY,MAAMD,EAAgB,IAE9EI,KAAWtD;AAAA,MACf,CAACjF,GAAmBwI,GAAmBC,MAAwB;AAC7D,cAAMC,IAAsBC,GAAoB3I,CAAS,GACnD4I,IAAmBD,GAAoBH,CAAS,GAChDK,KAAqBJ,KAAA,gBAAAA,EAAU,IAAIE;AACzC,eAAOG;AAAAA,UACLJ;AAAA,UACAE;AAAA,UACAC;AAAA,QAAA;AAAA,MAEJ;AAAA,MACA,CAAA;AAAA,IAAC,GAGGE,KAAY,CAAChB,MAAoB;AACrC,YAAMiB,IAAkB,GAAGjB,EAAI,IAAI,MAAMA,EAAI,QAAQ;AACrD,aACE,gBAAAkB;AAAA,QAACC,EAAQ;AAAA,QAAR;AAAA,UAEC,OAAOnB,EAAI;AAAA,UACX,UAAU,CAACA,EAAI,MAAMA,EAAI,UAAU,IAAIA,EAAI,QAAQ,EAAE;AAAA,UACrD,UAAU,MAAMN,GAAoBM,EAAI,IAAI;AAAA,UAC5C,WAAWxJ;AAAA,UACX,cAAYyK;AAAA,UAEZ,UAAA;AAAA,YAAA,gBAAAG,EAACC,MAAK,SAASrB,EAAI,MAAM,MAAMnJ,GAAeqC,CAAI,GAAG;AAAA,YACrD,gBAAAkI,EAAC,QAAA,EAAK,WAAU,yBAAyB,YAAI,MAAK;AAAA,YAClD,gBAAAF,EAAC,OAAA,EAAI,KAAI,OAAM,WAAU,4CAA2C,UAAA;AAAA,cAAA;AAAA,cAChElB,EAAI;AAAA,YAAA,EAAA,CACR;AAAA,UAAA;AAAA,QAAA;AAAA,QAXKA,EAAI;AAAA,MAAA;AAAA,IAcf;AAEA,WACE,gBAAAkB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK1E;AAAA,QACL,SAAS8B;AAAA,QACT,QAAQC;AAAA,QACR,kBAAe;AAAA,QACf,qBAAmB7E;AAAA,QACnB,aAAU;AAAA,QACV,WAAWzD,GAA0B;AAAA,UACnC,MAAAiD;AAAA,UACA,MAAM0E;AAAA,UACN,WAAAnE;AAAA,QAAA,CACD;AAAA,QAEA,UAAA;AAAA,UAAAqB,KACC,gBAAAoG;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAW,GAAG/K,GAAuB,EAAE,MAAA+C,EAAA,CAAM,CAAC;AAAA,cAE9C,UAAA;AAAA,gBAAA,gBAAAkI,EAAC,UAAK,WAAU,cAAc,aAAGd,CAAY,KAAKD,EAAY,GAAA,CAAG;AAAA,kCAChEgB,IAAA,EAAK,SAAAhG,GAAkB,MAAMxE,GAAeqC,CAAI,GAAG;AAAA,gBACpD,gBAAAgI,EAAC,OAAA,EAAI,KAAI,OAAM,WAAU,mBAAkB,UAAA;AAAA,kBAAA;AAAA,kBACvCd;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,sBAGDkB,EAAQ,MAAR,EAAa,MAAM5F,GAAY,cAAcC,GAC5C,UAAA;AAAA,YAAA,gBAAAyF,EAACE,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAAJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,UAAUzD;AAAA,gBAEV,iBAAc;AAAA,gBACd,iBAAe/B;AAAA,gBACf,cAAY6E;AAAA,gBACZ,WAAWpK,GAAuB,EAAE,MAAA+C,GAAM;AAAA,gBAE1C,UAAA;AAAA,kBAAA,gBAAAkI,EAACC,IAAA,EAAK,SAAAhG,GAAkB,MAAMxE,GAAeqC,CAAI,GAAG;AAAA,kBACpD,gBAAAgI,EAAC,OAAA,EAAI,KAAI,OAAM,WAAU,mBAAkB,UAAA;AAAA,oBAAA;AAAA,oBACvCd;AAAA,kBAAA,GACJ;AAAA,kBACA,gBAAAgB;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,eAAY;AAAA,sBACZ,WAAW;AAAA,wBACT3K,GAAkBsC,CAAI;AAAA,wBACtB;AAAA,wBACA;AAAA,wBACAwC,IAAa,kBAAkB;AAAA,sBAAA,EAC/B,KAAK,GAAG;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,YAAA,GAEJ;AAAA,YACA,gBAAA0F,EAACE,EAAQ,QAAR,EACC,UAAA,gBAAAF;AAAA,cAACE,EAAQ;AAAA,cAAR;AAAA,gBACC,KAAK7E;AAAA,gBACL,WAAW8C;AAAA,gBACX,YAAY;AAAA,gBACZ,OAAM;AAAA,gBAEN,cAAYe;AAAA,gBACZ,WAAWjK;AAAA,gBAEX,UAAA,gBAAA6K;AAAA,kBAACC;AAAAA,kBAAA;AAAA,oBACC,QAAQX;AAAA,oBACR,cAAY;AAAA,oBACZ,MAAI;AAAA,oBACJ,OAAOF;AAAA,oBAEP,UAAA;AAAA,sBAAA,gBAAAc;AAAA,wBAACD,EAAQ;AAAA,wBAAR;AAAA,0BACC,SAAO;AAAA,0BACP,OAAOvF;AAAA,0BACP,eAAeC;AAAA,0BAEf,UAAA,gBAAAuF;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,6BAA0B;AAAA,8BAC1B,MAAK;AAAA,8BACL,cAAa;AAAA,8BACb,aAAY;AAAA,8BACZ,YAAY;AAAA,8BACZ,aAAanH;AAAA,gCACX;AAAA,gCACA;AAAA,8BAAA;AAAA,8BAEF,WAAW3D;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACb;AAAA,sBAAA;AAAA,sBAEF,gBAAA4K,EAACC,EAAQ,MAAR,EAAa,WAAW5K,IACvB,UAAA;AAAA,wBAAA,gBAAA6K,EAACD,EAAQ,OAAR,EAAc,WAAWxK,IACvB,UAAAsD,EAAE,+BAA+B,kBAAkB,GACtD;AAAA,wBACC6F,EAAY,SAAS,IACpB,gBAAAsB;AAAA,0BAACD,EAAQ;AAAA,0BAAR;AAAA,4BACC,2BACG,QAAA,EAAK,WAAWzK,IACd,UAAAuD,EAAE,iCAAiC,SAAS,GAC/C;AAAA,4BAGD,UAAA6F,EAAY,IAAIkB,EAAS;AAAA,0BAAA;AAAA,wBAAA,IAE1B;AAAA,wBACJ,gBAAAI;AAAA,0BAACD,EAAQ;AAAA,0BAAR;AAAA,4BACC,SACErB,EAAY,SAAS,IACnB,gBAAAsB,EAAC,QAAA,EAAK,WAAW1K,IACd,UAAAuD,EAAE,6BAA6B,eAAe,EAAA,CACjD,IACE;AAAA,4BAGL,UAAAiG,GAAc,IAAIc,EAAS;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAC9B,EAAA,CACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA,EACF,CACF;AAAA,UAAA,GACF;AAAA,UAEF,gBAAAI;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKhF;AAAA,cACL,IAAIoB;AAAA,cACJ,MAAMqB,KAAY,SAAYlF;AAAA,cAC9B,MAAK;AAAA,cACL,WAAU;AAAA,cACV,cAAa;AAAA,cACb,aAAamE;AAAA,cACb,UAAUL;AAAA,cACV,UAAApE;AAAA,cACA,UAAUqE;AAAA,cACV,cAAY3D;AAAA,cACZ,oBAAkB8D;AAAA,cAClB,gBAAcF,MAAoB;AAAA,cAClC,UAAUoB;AAAA,cACV,WAAW3I,GAAyB,EAAE,MAAA8C,EAAA,CAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAE7C2F,KACC,gBAAAuC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAAzH;AAAA,cACA,OAAOmF;AAAA,cACP,UAAUrB;AAAA,YAAA;AAAA,UAAA,IAEV;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEA9E,GAAW,cAAc;"}
|