@alfadocs/ui-kit-debug 1.80.0 → 1.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/_chunks/{address-fields-GnoSkvh6.js → address-fields-CfnXK8RT.js} +4 -4
  2. package/dist/_chunks/{address-fields-GnoSkvh6.js.map → address-fields-CfnXK8RT.js.map} +1 -1
  3. package/dist/_chunks/{ai-prompt-input-M6u29f87.js → ai-prompt-input-DH_rnV-F.js} +33 -26
  4. package/dist/_chunks/{ai-prompt-input-M6u29f87.js.map → ai-prompt-input-DH_rnV-F.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js → anamnesis-summary-rows-6gMuu0ZK.js} +2 -2
  6. package/dist/_chunks/{anamnesis-summary-rows-lONg-zja.js.map → anamnesis-summary-rows-6gMuu0ZK.js.map} +1 -1
  7. package/dist/_chunks/{autocomplete-DosDnGie.js → autocomplete-CnB1mHGc.js} +65 -64
  8. package/dist/_chunks/{autocomplete-DosDnGie.js.map → autocomplete-CnB1mHGc.js.map} +1 -1
  9. package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js → balance-badge-cell-BHXJS8Ga.js} +2 -2
  10. package/dist/_chunks/{balance-badge-cell-Dzd-Z_5W.js.map → balance-badge-cell-BHXJS8Ga.js.map} +1 -1
  11. package/dist/_chunks/{benefit-card-BWBClvdF.js → benefit-card-BcPtRHgM.js} +37 -36
  12. package/dist/_chunks/{benefit-card-BWBClvdF.js.map → benefit-card-BcPtRHgM.js.map} +1 -1
  13. package/dist/_chunks/booking-dsgiuhKg.js +4304 -0
  14. package/dist/_chunks/booking-dsgiuhKg.js.map +1 -0
  15. package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js → calendar-appointment-editor-dialog-BuumJbcv.js} +4 -4
  16. package/dist/_chunks/{calendar-appointment-editor-dialog-DhTTWgXw.js.map → calendar-appointment-editor-dialog-BuumJbcv.js.map} +1 -1
  17. package/dist/_chunks/{city-input-3J3bz9EO.js → city-input-CJVGswxp.js} +2 -2
  18. package/dist/_chunks/{city-input-3J3bz9EO.js.map → city-input-CJVGswxp.js.map} +1 -1
  19. package/dist/_chunks/{combobox-vF9O-QoG.js → combobox-CDPm_n0p.js} +93 -92
  20. package/dist/_chunks/{combobox-vF9O-QoG.js.map → combobox-CDPm_n0p.js.map} +1 -1
  21. package/dist/_chunks/{command-palette-D9TBzmOG.js → command-palette-B3dVqm9D.js} +68 -68
  22. package/dist/_chunks/{command-palette-D9TBzmOG.js.map → command-palette-B3dVqm9D.js.map} +1 -1
  23. package/dist/_chunks/{contact-profile-card-DKk94l-d.js → contact-profile-card-Da1vmJQI.js} +115 -102
  24. package/dist/_chunks/contact-profile-card-Da1vmJQI.js.map +1 -0
  25. package/dist/_chunks/{country-select-CSE2Zm_s.js → country-select-DQ8q7ypA.js} +2 -2
  26. package/dist/_chunks/{country-select-CSE2Zm_s.js.map → country-select-DQ8q7ypA.js.map} +1 -1
  27. package/dist/_chunks/{face-scheme-BIPJqw9f.js → face-scheme-BgJGFDTa.js} +2 -2
  28. package/dist/_chunks/{face-scheme-BIPJqw9f.js.map → face-scheme-BgJGFDTa.js.map} +1 -1
  29. package/dist/_chunks/{header-settings-BYpVmLip.js → header-settings-CifwJEKB.js} +2 -2
  30. package/dist/_chunks/{header-settings-BYpVmLip.js.map → header-settings-CifwJEKB.js.map} +1 -1
  31. package/dist/_chunks/{link-cell-renderer-B0riA_h_.js → link-cell-renderer-C0ynDik7.js} +3 -3
  32. package/dist/_chunks/{link-cell-renderer-B0riA_h_.js.map → link-cell-renderer-C0ynDik7.js.map} +1 -1
  33. package/dist/_chunks/{locale-picker-DzdGDSBI.js → locale-picker-QbT1p60X.js} +39 -38
  34. package/dist/_chunks/{locale-picker-DzdGDSBI.js.map → locale-picker-QbT1p60X.js.map} +1 -1
  35. package/dist/_chunks/{map-view-C6MIVaqn.js → map-view-Bvi06RVh.js} +2 -2
  36. package/dist/_chunks/{map-view-C6MIVaqn.js.map → map-view-Bvi06RVh.js.map} +1 -1
  37. package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js → marketplace-app-shell-vON3WhD0.js} +2 -2
  38. package/dist/_chunks/{marketplace-app-shell-mS7Q2-81.js.map → marketplace-app-shell-vON3WhD0.js.map} +1 -1
  39. package/dist/_chunks/{multi-select-BOad3za9.js → multi-select-i5MFRpXg.js} +194 -187
  40. package/dist/_chunks/multi-select-i5MFRpXg.js.map +1 -0
  41. package/dist/_chunks/{otp-input-BgEZi0py.js → otp-input-gV1446Dw.js} +70 -70
  42. package/dist/_chunks/otp-input-gV1446Dw.js.map +1 -0
  43. package/dist/_chunks/{patient-details-B-I9Xkh9.js → patient-details-D0P5eog5.js} +2 -2
  44. package/dist/_chunks/{patient-details-B-I9Xkh9.js.map → patient-details-D0P5eog5.js.map} +1 -1
  45. package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js → patient-field-row-R73dZJY6.js} +5 -5
  46. package/dist/_chunks/{patient-field-row-Bn0z6lAZ.js.map → patient-field-row-R73dZJY6.js.map} +1 -1
  47. package/dist/_chunks/{patient-search-CxqNcth4.js → patient-search-Dy0sxcwv.js} +2 -2
  48. package/dist/_chunks/{patient-search-CxqNcth4.js.map → patient-search-Dy0sxcwv.js.map} +1 -1
  49. package/dist/_chunks/{patient-summary-card-bhDo0gVX.js → patient-summary-card-6U74-ivO.js} +2 -2
  50. package/dist/_chunks/{patient-summary-card-bhDo0gVX.js.map → patient-summary-card-6U74-ivO.js.map} +1 -1
  51. package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js → payment-automation-upsell-D1YdO1xY.js} +2 -2
  52. package/dist/_chunks/{payment-automation-upsell-AQpHOS1X.js.map → payment-automation-upsell-D1YdO1xY.js.map} +1 -1
  53. package/dist/_chunks/{phone-input-C3NrD-nl.js → phone-input-DJ4BN8tG.js} +70 -63
  54. package/dist/_chunks/{phone-input-C3NrD-nl.js.map → phone-input-DJ4BN8tG.js.map} +1 -1
  55. package/dist/_chunks/{practice-results-CtOanuzZ.js → practice-results-B61krlwu.js} +2 -2
  56. package/dist/_chunks/{practice-results-CtOanuzZ.js.map → practice-results-B61krlwu.js.map} +1 -1
  57. package/dist/_chunks/{province-select-CDjs5obD.js → province-select-CPdTwEob.js} +2 -2
  58. package/dist/_chunks/{province-select-CDjs5obD.js.map → province-select-CPdTwEob.js.map} +1 -1
  59. package/dist/_chunks/{registration-form-CNBfUduG.js → registration-form-DmP3YUfp.js} +3 -3
  60. package/dist/_chunks/{registration-form-CNBfUduG.js.map → registration-form-DmP3YUfp.js.map} +1 -1
  61. package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js → send-registration-link-form-CZYOO7NO.js} +2 -2
  62. package/dist/_chunks/{send-registration-link-form-vTn1HxjA.js.map → send-registration-link-form-CZYOO7NO.js.map} +1 -1
  63. package/dist/_chunks/{task-editor-Cpw-NmND.js → task-editor-BOETWbjU.js} +2 -2
  64. package/dist/_chunks/{task-editor-Cpw-NmND.js.map → task-editor-BOETWbjU.js.map} +1 -1
  65. package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js → use-appointment-details-read-CWN-nJCZ.js} +2 -2
  66. package/dist/_chunks/{use-appointment-details-read-lFUL4kkd.js.map → use-appointment-details-read-CWN-nJCZ.js.map} +1 -1
  67. package/dist/agent-catalog.json +4 -4
  68. package/dist/agent-i18n/en.json +1 -1
  69. package/dist/components/address-fields/index.js +1 -1
  70. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  71. package/dist/components/ai-prompt-input/index.js +1 -1
  72. package/dist/components/appointment-details-panel/index.js +1 -1
  73. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  74. package/dist/components/autocomplete/index.js +1 -1
  75. package/dist/components/benefit-card/benefit-card.d.ts +7 -1
  76. package/dist/components/benefit-card/benefit-card.d.ts.map +1 -1
  77. package/dist/components/benefit-card/index.js +1 -1
  78. package/dist/components/booking/booking-types.d.ts +35 -2
  79. package/dist/components/booking/booking-types.d.ts.map +1 -1
  80. package/dist/components/booking/booking.d.ts.map +1 -1
  81. package/dist/components/booking/code-step.d.ts +4 -2
  82. package/dist/components/booking/code-step.d.ts.map +1 -1
  83. package/dist/components/booking/details-form.d.ts +2 -0
  84. package/dist/components/booking/details-form.d.ts.map +1 -1
  85. package/dist/components/booking/handover.d.ts +12 -0
  86. package/dist/components/booking/handover.d.ts.map +1 -0
  87. package/dist/components/booking/index.js +1 -1
  88. package/dist/components/booking/reserved.d.ts +24 -0
  89. package/dist/components/booking/reserved.d.ts.map +1 -0
  90. package/dist/components/booking/use-booking-payment.d.ts +3 -1
  91. package/dist/components/booking/use-booking-payment.d.ts.map +1 -1
  92. package/dist/components/city-input/index.js +1 -1
  93. package/dist/components/combobox/combobox.d.ts.map +1 -1
  94. package/dist/components/combobox/index.js +1 -1
  95. package/dist/components/command-palette/index.js +1 -1
  96. package/dist/components/contact-profile-card/contact-profile-card.d.ts +4 -1
  97. package/dist/components/contact-profile-card/contact-profile-card.d.ts.map +1 -1
  98. package/dist/components/contact-profile-card/index.js +1 -1
  99. package/dist/components/country-select/index.js +1 -1
  100. package/dist/components/data-table/index.js +1 -1
  101. package/dist/components/face-scheme/index.js +1 -1
  102. package/dist/components/header-settings/index.js +1 -1
  103. package/dist/components/locale-picker/index.js +1 -1
  104. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  105. package/dist/components/map-view/index.js +1 -1
  106. package/dist/components/multi-select/index.js +1 -1
  107. package/dist/components/multi-select/multi-select.d.ts.map +1 -1
  108. package/dist/components/otp-input/index.js +1 -1
  109. package/dist/components/otp-input/otp-input.d.ts +1 -1
  110. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  111. package/dist/components/patient-details/index.js +1 -1
  112. package/dist/components/patient-search/index.js +1 -1
  113. package/dist/components/patient-summary-card/index.js +1 -1
  114. package/dist/components/patient-table/index.js +1 -1
  115. package/dist/components/phone-input/index.js +1 -1
  116. package/dist/components/phone-input/phone-input.d.ts.map +1 -1
  117. package/dist/components/practice-results/index.js +1 -1
  118. package/dist/components/province-select/index.js +1 -1
  119. package/dist/components/task-editor/index.js +1 -1
  120. package/dist/i18n/locales/ar.d.ts +8 -0
  121. package/dist/i18n/locales/ar.d.ts.map +1 -1
  122. package/dist/i18n/locales/ar.js +8 -0
  123. package/dist/i18n/locales/ar.js.map +1 -1
  124. package/dist/i18n/locales/de.d.ts +8 -0
  125. package/dist/i18n/locales/de.d.ts.map +1 -1
  126. package/dist/i18n/locales/de.js +8 -0
  127. package/dist/i18n/locales/de.js.map +1 -1
  128. package/dist/i18n/locales/el.d.ts +8 -0
  129. package/dist/i18n/locales/el.d.ts.map +1 -1
  130. package/dist/i18n/locales/el.js +8 -0
  131. package/dist/i18n/locales/el.js.map +1 -1
  132. package/dist/i18n/locales/en.d.ts +8 -0
  133. package/dist/i18n/locales/en.d.ts.map +1 -1
  134. package/dist/i18n/locales/en.js +8 -0
  135. package/dist/i18n/locales/en.js.map +1 -1
  136. package/dist/i18n/locales/es.d.ts +8 -0
  137. package/dist/i18n/locales/es.d.ts.map +1 -1
  138. package/dist/i18n/locales/es.js +8 -0
  139. package/dist/i18n/locales/es.js.map +1 -1
  140. package/dist/i18n/locales/fr.d.ts +8 -0
  141. package/dist/i18n/locales/fr.d.ts.map +1 -1
  142. package/dist/i18n/locales/fr.js +8 -0
  143. package/dist/i18n/locales/fr.js.map +1 -1
  144. package/dist/i18n/locales/hi.d.ts +8 -0
  145. package/dist/i18n/locales/hi.d.ts.map +1 -1
  146. package/dist/i18n/locales/hi.js +8 -0
  147. package/dist/i18n/locales/hi.js.map +1 -1
  148. package/dist/i18n/locales/it.d.ts +8 -0
  149. package/dist/i18n/locales/it.d.ts.map +1 -1
  150. package/dist/i18n/locales/it.js +8 -0
  151. package/dist/i18n/locales/it.js.map +1 -1
  152. package/dist/i18n/locales/ja.d.ts +8 -0
  153. package/dist/i18n/locales/ja.d.ts.map +1 -1
  154. package/dist/i18n/locales/ja.js +8 -0
  155. package/dist/i18n/locales/ja.js.map +1 -1
  156. package/dist/i18n/locales/nl.d.ts +8 -0
  157. package/dist/i18n/locales/nl.d.ts.map +1 -1
  158. package/dist/i18n/locales/nl.js +8 -0
  159. package/dist/i18n/locales/nl.js.map +1 -1
  160. package/dist/i18n/locales/pl.d.ts +8 -0
  161. package/dist/i18n/locales/pl.d.ts.map +1 -1
  162. package/dist/i18n/locales/pl.js +8 -0
  163. package/dist/i18n/locales/pl.js.map +1 -1
  164. package/dist/i18n/locales/pt.d.ts +8 -0
  165. package/dist/i18n/locales/pt.d.ts.map +1 -1
  166. package/dist/i18n/locales/pt.js +8 -0
  167. package/dist/i18n/locales/pt.js.map +1 -1
  168. package/dist/i18n/locales/ro.d.ts +8 -0
  169. package/dist/i18n/locales/ro.d.ts.map +1 -1
  170. package/dist/i18n/locales/ro.js +8 -0
  171. package/dist/i18n/locales/ro.js.map +1 -1
  172. package/dist/i18n/locales/ru.d.ts +8 -0
  173. package/dist/i18n/locales/ru.d.ts.map +1 -1
  174. package/dist/i18n/locales/ru.js +8 -0
  175. package/dist/i18n/locales/ru.js.map +1 -1
  176. package/dist/i18n/locales/sq.d.ts +8 -0
  177. package/dist/i18n/locales/sq.d.ts.map +1 -1
  178. package/dist/i18n/locales/sq.js +8 -0
  179. package/dist/i18n/locales/sq.js.map +1 -1
  180. package/dist/i18n/locales/sv.d.ts +8 -0
  181. package/dist/i18n/locales/sv.d.ts.map +1 -1
  182. package/dist/i18n/locales/sv.js +8 -0
  183. package/dist/i18n/locales/sv.js.map +1 -1
  184. package/dist/i18n/locales/tr.d.ts +8 -0
  185. package/dist/i18n/locales/tr.d.ts.map +1 -1
  186. package/dist/i18n/locales/tr.js +8 -0
  187. package/dist/i18n/locales/tr.js.map +1 -1
  188. package/dist/i18n/locales/zh.d.ts +8 -0
  189. package/dist/i18n/locales/zh.d.ts.map +1 -1
  190. package/dist/i18n/locales/zh.js +8 -0
  191. package/dist/i18n/locales/zh.js.map +1 -1
  192. package/dist/index.js +30 -30
  193. package/dist/locales/ar.json +8 -0
  194. package/dist/locales/de.json +8 -0
  195. package/dist/locales/el.json +8 -0
  196. package/dist/locales/en.json +8 -0
  197. package/dist/locales/es.json +8 -0
  198. package/dist/locales/fr.json +8 -0
  199. package/dist/locales/hi.json +8 -0
  200. package/dist/locales/it.json +8 -0
  201. package/dist/locales/ja.json +8 -0
  202. package/dist/locales/nl.json +8 -0
  203. package/dist/locales/pl.json +8 -0
  204. package/dist/locales/pt.json +8 -0
  205. package/dist/locales/ro.json +8 -0
  206. package/dist/locales/ru.json +8 -0
  207. package/dist/locales/sq.json +8 -0
  208. package/dist/locales/sv.json +8 -0
  209. package/dist/locales/tr.json +8 -0
  210. package/dist/locales/zh.json +8 -0
  211. package/dist/patterns/anamnesis/index.js +1 -1
  212. package/dist/patterns/calendar/index.js +1 -1
  213. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  214. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  215. package/dist/patterns/registration-form/index.js +1 -1
  216. package/dist/patterns/send-registration-link-form/index.js +1 -1
  217. package/dist/tokens.css +1 -1
  218. package/package.json +1 -1
  219. package/dist/_chunks/booking-By4I_1A-.js +0 -4068
  220. package/dist/_chunks/booking-By4I_1A-.js.map +0 -1
  221. package/dist/_chunks/contact-profile-card-DKk94l-d.js.map +0 -1
  222. package/dist/_chunks/multi-select-BOad3za9.js.map +0 -1
  223. package/dist/_chunks/otp-input-BgEZi0py.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"command-palette-D9TBzmOG.js","sources":["../../src/components/command-palette/command-palette.agent.ts","../../src/components/command-palette/command-palette.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { CommandPaletteHandle } from './command-palette';\n\nexport const commandPaletteAgent: AgentAdapter<CommandPaletteHandle> = {\n id: 'command-palette',\n // The curated handle exposes open/close + the filter query only. Running a\n // highlighted command is internal to the dialog (not on the handle), so no\n // 'submit'/'pick' capability is claimed here.\n capabilities: ['open', 'close', 'filter'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.commandPalette.state.query',\n description: 'Current filter query in the command palette input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.commandPalette.state.isOpen',\n description: 'True when the palette is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.open',\n description: 'Open the command palette.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.close',\n description: 'Close the command palette.',\n invoke: (handle) => {\n handle.close();\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Filter text matched against command labels.',\n },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.applyFilter',\n description: 'Set the filter query.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'command-palette' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-command-id',\n description: 'Each command item emits its key as data-command-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive, defaultFilter } from 'cmdk';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { useAgentRegistration } from '../../agent';\nimport { commandPaletteAgent } from './command-palette.agent';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface Command {\n id: string;\n label: string;\n group: string;\n keywords?: string[];\n shortcut?: string;\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\n/* -------------------------------------------------------------------- */\n/* Diacritic-insensitive normaliser */\n/* -------------------------------------------------------------------- */\n\nfunction normalise(value: string): string {\n return value\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n}\n\nexport const diacriticInsensitiveFilter = (\n value: string,\n search: string,\n keywords?: string[],\n) =>\n defaultFilter(normalise(value), normalise(search), keywords?.map(normalise));\n\n/* -------------------------------------------------------------------- */\n/* Recents (localStorage, SSR-safe) */\n/* -------------------------------------------------------------------- */\n\nconst RECENTS_KEY = 'ui.cmdk.recents';\nconst MAX_RECENTS = 5;\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.slice(0, MAX_RECENTS).filter((v) => typeof v === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeRecents(ids: string[]) {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(\n RECENTS_KEY,\n JSON.stringify(ids.slice(0, MAX_RECENTS)),\n );\n } catch {\n /* noop */\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* useCommandPalette — Cmd/Ctrl+K hook */\n/* -------------------------------------------------------------------- */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n function handler(event: KeyboardEvent) {\n // Cmd/Ctrl+K must work even from inside inputs; check the\n // modifier first and bail on edit-context only for plain keys.\n const isMeta = event.metaKey || event.ctrlKey;\n if (isMeta && event.key === 'k') {\n event.preventDefault();\n setOpen((v) => !v);\n return;\n }\n\n const target = event.target as HTMLElement | null;\n const tag = target?.tagName.toLowerCase();\n const isEditable =\n tag === 'input' || tag === 'textarea' || target?.isContentEditable;\n if (isEditable && !(open && event.key === 'Escape')) return;\n }\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n return { open, setOpen };\n}\n\n/* -------------------------------------------------------------------- */\n/* Primitives (forwardRef wrappers around cmdk + dialog chrome) */\n/* -------------------------------------------------------------------- */\n\nconst rootClasses = [\n 'ds:flex ds:h-full ds:w-full ds:flex-col ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n].join(' ');\n\nexport type CommandPaletteRootProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive\n>;\n\n// Curated agent-readiness handle — see command-palette.agent.ts.\nexport interface CommandPaletteHandle {\n getQuery: () => string;\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n setQuery: (query: string) => void;\n}\n\nconst CommandPalette = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n CommandPaletteRootProps\n>(({ className, filter = diacriticInsensitiveFilter, id, ...rest }, ref) => (\n <CommandPrimitive\n ref={ref}\n filter={filter}\n className={[rootClasses, className].filter(Boolean).join(' ')}\n data-component=\"command-palette\"\n data-component-id={id}\n {...rest}\n />\n));\nCommandPalette.displayName = 'CommandPalette';\n\n/* -------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------- */\n\nconst inputWrapClasses = [\n 'ds:flex ds:items-center',\n 'ds:border-block-end ds:border-[var(--border)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-sm)]',\n].join(' ');\n\nconst inputClasses = [\n 'ds:flex ds:w-full ds:bg-transparent',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[var(--font-size-base)] ds:text-[var(--foreground)]',\n 'ds:placeholder:text-[var(--muted-foreground)]',\n 'ds:outline-none',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:border-0',\n].join(' ');\n\nexport type CommandInputProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Input\n>;\n\nconst CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(({ className, placeholder, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n return (\n <div className={inputWrapClasses}>\n <Search\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:me-2 ds:text-[var(--muted-foreground)]\"\n />\n <CommandPrimitive.Input\n ref={ref}\n placeholder={\n placeholder ??\n t('navigation.cmdk.placeholder', 'Type a command or search\\u2026')\n }\n className={[inputClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\n/* -------------------------------------------------------------------- */\n/* List / Empty / Group / Item / Separator */\n/* -------------------------------------------------------------------- */\n\nconst CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={[\n 'ds:max-h-[20rem] ds:overflow-y-auto',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:py-[var(--spacing-xs)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, children, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={[\n 'ds:py-[var(--spacing-lg)] ds:text-center',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('navigation.cmdk.empty', 'No results found')}\n </CommandPrimitive.Empty>\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, heading, ...rest }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n heading={heading}\n className={[\n 'ds:overflow-hidden',\n 'ds:text-[var(--foreground)]',\n 'ds:[&_[cmdk-group-heading]]:ps-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:pe-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:py-[var(--spacing-xs)]',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandGroup.displayName = 'CommandGroup';\n\nconst itemClasses = [\n 'ds:relative ds:flex ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:text-[var(--font-size-sm)] ds:text-[var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nexport type CommandItemProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Item\n>;\n\nconst CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={[itemClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={[\n 'ds:-ms-[var(--spacing-xs)] ds:-me-[var(--spacing-xs)]',\n 'ds:my-[var(--spacing-xs)]',\n 'ds:h-px ds:bg-[var(--border)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport type CommandShortcutProps = ComponentPropsWithoutRef<'kbd'>;\n\nconst CommandShortcut = forwardRef<HTMLElement, CommandShortcutProps>(\n ({ className, children, ...rest }, ref) => (\n <kbd\n ref={ref}\n className={[\n 'ds:ms-auto',\n 'ds:inline-flex ds:items-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:h-5 ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--muted)]/20 ds:text-[var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-[var(--font-weight-medium)]',\n // On the lit row the chip matches the row fill, so an inset ring\n // keeps it a key cap.\n 'ds:group-data-[selected=true]/menu-row:ring-[length:var(--border-width-sm)] ds:group-data-[selected=true]/menu-row:ring-inset',\n 'ds:group-data-[selected=true]/menu-row:ring-[color:var(--accent-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </kbd>\n ),\n);\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -------------------------------------------------------------------- */\n/* Highlight helper */\n/* -------------------------------------------------------------------- */\n\n/**\n * Returns React nodes that wrap the matching segments of `label` in `<mark>`.\n * Diacritic-insensitive. No `dangerouslySetInnerHTML`.\n */\nexport function highlightMatch(label: string, query: string): ReactNode {\n if (!query) return label;\n const norm = normalise(label);\n const normQ = normalise(query);\n const idx = norm.indexOf(normQ);\n if (idx === -1) return label;\n // Walk the original label using character-by-character correspondence with the\n // normalised string. Since normalise may drop diacritics, we use index mapping.\n const before = label.slice(0, idx);\n const match = label.slice(idx, idx + normQ.length);\n const after = label.slice(idx + normQ.length);\n return (\n <>\n {before}\n <mark className=\"ds:bg-[var(--accent)]/20 ds:text-inherit ds:rounded-[var(--radius-sm)] ds:px-[0.125em] ds:group-data-[selected=true]/menu-row:bg-transparent ds:group-data-[selected=true]/menu-row:underline\">\n {match}\n </mark>\n {after}\n </>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* CommandPaletteDialog — Dialog shell + commands-as-data API */\n/* -------------------------------------------------------------------- */\n\nexport interface CommandPaletteDialogProps {\n /** Controlled open state. */\n open: boolean;\n /** Fires when the dialog opens/closes. */\n onOpenChange: (open: boolean) => void;\n /** Commands to display. */\n commands: Command[];\n /** Extra content rendered above the input (optional). */\n header?: ReactNode;\n /** Stable id for agent registration / DOM addressing. */\n id?: string;\n}\n\nconst overlayClasses = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/70 ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst dialogContentClasses = [\n 'ds:fixed ds:z-[var(--z-modal)]',\n // Logical-inset arbitrary-value positioning: `inset-inline-start-1/2`\n // isn't a real Tailwind class (the generator maps fractions only to\n // `start-*`), so use `start-1/2` for horizontal and `top-*` for the\n // top offset — matching the working Dialog component.\n 'ds:top-[12vh] ds:start-1/2 ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n 'ds:w-[92vw] ds:max-w-[var(--dialog-width-lg)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst VisuallyHidden = ({ children }: { children: ReactNode }) => (\n <span className=\"ds:sr-only\">{children}</span>\n);\n\nfunction CommandPaletteDialog({\n open,\n onOpenChange,\n commands,\n header,\n id,\n}: CommandPaletteDialogProps) {\n const { t } = useTranslation('ui');\n const [search, setSearch] = useState('');\n const [recents, setRecents] = useState<string[]>(readRecents);\n\n useEffect(() => {\n if (!open) setSearch('');\n }, [open]);\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n const searchRef = useRef(search);\n useEffect(() => {\n searchRef.current = search;\n }, [search]);\n const onOpenChangeRef = useRef(onOpenChange);\n useEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n }, [onOpenChange]);\n\n const agentHandle = useMemo<CommandPaletteHandle>(\n () => ({\n getQuery: () => searchRef.current,\n getIsOpen: () => openRef.current,\n open: () => onOpenChangeRef.current(true),\n close: () => onOpenChangeRef.current(false),\n setQuery: (query) => setSearch(query),\n }),\n [],\n );\n useAgentRegistration(commandPaletteAgent, agentHandle, id);\n\n const grouped = useMemo(() => {\n const byGroup = new Map<string, Command[]>();\n commands.forEach((c) => {\n const list = byGroup.get(c.group) ?? [];\n list.push(c);\n byGroup.set(c.group, list);\n });\n return byGroup;\n }, [commands]);\n\n const recentCommands = useMemo(() => {\n if (search) return [];\n const byId = new Map(commands.map((c) => [c.id, c]));\n return recents.map((id) => byId.get(id)).filter(Boolean) as Command[];\n }, [commands, recents, search]);\n\n const runCommand = useCallback(\n (cmd: Command) => {\n onOpenChange(false);\n const next = [cmd.id, ...recents.filter((id) => id !== cmd.id)].slice(\n 0,\n MAX_RECENTS,\n );\n setRecents(next);\n writeRecents(next);\n // Defer so Dialog unmount doesn't swallow the callback\n setTimeout(() => cmd.onSelect(), 0);\n },\n [recents, onOpenChange],\n );\n\n const clearRecents = useCallback(() => {\n setRecents([]);\n writeRecents([]);\n }, []);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"command-palette-overlay\"\n className={overlayClasses}\n />\n <RadixDialog.Content\n data-component=\"command-palette-dialog\"\n className={dialogContentClasses}\n aria-label={t('navigation.cmdk.title', 'Command palette')}\n >\n <RadixDialog.Title asChild>\n <VisuallyHidden>\n {t('navigation.cmdk.title', 'Command palette')}\n </VisuallyHidden>\n </RadixDialog.Title>\n <RadixDialog.Description asChild>\n <VisuallyHidden>\n {t(\n 'navigation.cmdk.description',\n 'Search for commands, pages, and actions',\n )}\n </VisuallyHidden>\n </RadixDialog.Description>\n <CommandPalette\n id={id}\n label={t('navigation.cmdk.title', 'Command palette')}\n >\n {header}\n <CommandInput value={search} onValueChange={setSearch} />\n <CommandList>\n <CommandEmpty />\n {recentCommands.length > 0 ? (\n <>\n <CommandGroup\n heading={t('navigation.cmdk.recents', 'Recent')}\n >\n {recentCommands.map((cmd) => (\n <CommandItem\n key={`recent-${cmd.id}`}\n value={`recent-${cmd.label}`}\n data-command-id={cmd.id}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{cmd.label}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n <CommandItem\n value=\"__clear-recents\"\n onSelect={clearRecents}\n >\n <span>\n {t(\n 'navigation.cmdk.clearRecents',\n 'Clear recent commands',\n )}\n </span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n </>\n ) : null}\n {Array.from(grouped.entries()).map(([group, list]) => (\n <CommandGroup key={group} heading={group}>\n {list.map((cmd) => (\n <CommandItem\n key={cmd.id}\n value={cmd.label}\n data-command-id={cmd.id}\n keywords={cmd.keywords}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{highlightMatch(cmd.label, search)}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandPalette>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem,\n CommandEmpty,\n CommandSeparator,\n CommandShortcut,\n};\n"],"names":["commandPaletteAgent","handle","args","normalise","value","diacriticInsensitiveFilter","search","keywords","defaultFilter","RECENTS_KEY","MAX_RECENTS","readRecents","raw","parsed","v","writeRecents","ids","useCommandPalette","open","setOpen","useState","useEffect","handler","event","target","tag","rootClasses","CommandPalette","forwardRef","className","filter","id","rest","ref","jsx","CommandPrimitive","inputWrapClasses","inputClasses","CommandInput","placeholder","t","useTranslation","jsxs","Search","CommandList","CommandEmpty","children","CommandGroup","heading","itemClasses","MENU_ROW_HIGHLIGHT","CommandItem","CommandSeparator","CommandShortcut","highlightMatch","label","query","norm","normQ","idx","before","match","after","Fragment","overlayClasses","dialogContentClasses","VisuallyHidden","CommandPaletteDialog","onOpenChange","commands","header","setSearch","recents","setRecents","openRef","useRef","searchRef","onOpenChangeRef","agentHandle","useMemo","useAgentRegistration","grouped","byGroup","list","recentCommands","byId","runCommand","useCallback","cmd","next","clearRecents","RadixDialog","group"],"mappings":"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"}
1
+ {"version":3,"file":"command-palette-B3dVqm9D.js","sources":["../../src/components/command-palette/command-palette.agent.ts","../../src/components/command-palette/command-palette.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { CommandPaletteHandle } from './command-palette';\n\nexport const commandPaletteAgent: AgentAdapter<CommandPaletteHandle> = {\n id: 'command-palette',\n // The curated handle exposes open/close + the filter query only. Running a\n // highlighted command is internal to the dialog (not on the handle), so no\n // 'submit'/'pick' capability is claimed here.\n capabilities: ['open', 'close', 'filter'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.commandPalette.state.query',\n description: 'Current filter query in the command palette input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.commandPalette.state.isOpen',\n description: 'True when the palette is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.open',\n description: 'Open the command palette.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.close',\n description: 'Close the command palette.',\n invoke: (handle) => {\n handle.close();\n },\n },\n apply_filter: {\n safety: 'read',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Filter text matched against command labels.',\n },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.commandPalette.actions.applyFilter',\n description: 'Set the filter query.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'command-palette' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-command-id',\n description: 'Each command item emits its key as data-command-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive, defaultFilter } from 'cmdk';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { useAgentRegistration } from '../../agent';\nimport { commandPaletteAgent } from './command-palette.agent';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface Command {\n id: string;\n label: string;\n group: string;\n keywords?: string[];\n shortcut?: string;\n onSelect: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n}\n\n/* -------------------------------------------------------------------- */\n/* Diacritic-insensitive normaliser */\n/* -------------------------------------------------------------------- */\n\nfunction normalise(value: string): string {\n return value\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n}\n\nexport const diacriticInsensitiveFilter = (\n value: string,\n search: string,\n keywords?: string[],\n) =>\n defaultFilter(normalise(value), normalise(search), keywords?.map(normalise));\n\n/* -------------------------------------------------------------------- */\n/* Recents (localStorage, SSR-safe) */\n/* -------------------------------------------------------------------- */\n\nconst RECENTS_KEY = 'ui.cmdk.recents';\nconst MAX_RECENTS = 5;\n\nfunction readRecents(): string[] {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(RECENTS_KEY);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.slice(0, MAX_RECENTS).filter((v) => typeof v === 'string')\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeRecents(ids: string[]) {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(\n RECENTS_KEY,\n JSON.stringify(ids.slice(0, MAX_RECENTS)),\n );\n } catch {\n /* noop */\n }\n}\n\n/* -------------------------------------------------------------------- */\n/* useCommandPalette — Cmd/Ctrl+K hook */\n/* -------------------------------------------------------------------- */\n\nexport function useCommandPalette() {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n function handler(event: KeyboardEvent) {\n // Cmd/Ctrl+K must work even from inside inputs; check the\n // modifier first and bail on edit-context only for plain keys.\n const isMeta = event.metaKey || event.ctrlKey;\n if (isMeta && event.key === 'k') {\n event.preventDefault();\n setOpen((v) => !v);\n return;\n }\n\n const target = event.target as HTMLElement | null;\n const tag = target?.tagName.toLowerCase();\n const isEditable =\n tag === 'input' || tag === 'textarea' || target?.isContentEditable;\n if (isEditable && !(open && event.key === 'Escape')) return;\n }\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n return { open, setOpen };\n}\n\n/* -------------------------------------------------------------------- */\n/* Primitives (forwardRef wrappers around cmdk + dialog chrome) */\n/* -------------------------------------------------------------------- */\n\nconst rootClasses = [\n 'ds:flex ds:h-full ds:w-full ds:flex-col ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n].join(' ');\n\nexport type CommandPaletteRootProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive\n>;\n\n// Curated agent-readiness handle — see command-palette.agent.ts.\nexport interface CommandPaletteHandle {\n getQuery: () => string;\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n setQuery: (query: string) => void;\n}\n\nconst CommandPalette = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n CommandPaletteRootProps\n>(({ className, filter = diacriticInsensitiveFilter, id, ...rest }, ref) => (\n <CommandPrimitive\n ref={ref}\n filter={filter}\n className={[rootClasses, className].filter(Boolean).join(' ')}\n data-component=\"command-palette\"\n data-component-id={id}\n {...rest}\n />\n));\nCommandPalette.displayName = 'CommandPalette';\n\n/* -------------------------------------------------------------------- */\n/* Input */\n/* -------------------------------------------------------------------- */\n\nconst inputWrapClasses = [\n 'ds:flex ds:items-center',\n 'ds:border-block-end ds:border-[var(--border)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-sm)]',\n].join(' ');\n\nconst inputClasses = [\n 'ds:flex ds:w-full ds:bg-transparent',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[var(--font-size-base)] ds:text-[var(--foreground)]',\n 'ds:placeholder:text-[var(--muted-foreground)]',\n 'ds:outline-none',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:border-0',\n].join(' ');\n\nexport type CommandInputProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Input\n>;\n\nconst CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n CommandInputProps\n>(({ className, placeholder, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n return (\n <div className={inputWrapClasses}>\n <Search\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:me-2 ds:text-[var(--muted-foreground)]\"\n />\n <CommandPrimitive.Input\n ref={ref}\n placeholder={\n placeholder ??\n t('navigation.cmdk.placeholder', 'Type a command or search\\u2026')\n }\n className={[inputClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\n/* -------------------------------------------------------------------- */\n/* List / Empty / Group / Item / Separator */\n/* -------------------------------------------------------------------- */\n\nconst CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={[\n 'ds:max-h-[20rem] ds:overflow-y-auto',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:py-[var(--spacing-xs)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(({ className, children, ...rest }, ref) => {\n const { t } = useTranslation('ui');\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={[\n 'ds:py-[var(--spacing-lg)] ds:text-center',\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children ?? t('navigation.cmdk.empty', 'No results found')}\n </CommandPrimitive.Empty>\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, heading, ...rest }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n heading={heading}\n className={[\n 'ds:overflow-hidden',\n 'ds:text-[var(--foreground)]',\n 'ds:[&_[cmdk-group-heading]]:ps-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:pe-[var(--spacing-sm)]',\n 'ds:[&_[cmdk-group-heading]]:py-[var(--spacing-xs)]',\n 'ds:[&_[cmdk-group-heading]]:type-eyebrow',\n 'ds:[&_[cmdk-group-heading]]:text-[var(--muted-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandGroup.displayName = 'CommandGroup';\n\nconst itemClasses = [\n 'ds:relative ds:flex ds:items-center',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:text-[var(--font-size-sm)] ds:text-[var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:data-[disabled=true]:pointer-events-none ds:data-[disabled=true]:opacity-50',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nexport type CommandItemProps = ComponentPropsWithoutRef<\n typeof CommandPrimitive.Item\n>;\n\nconst CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n CommandItemProps\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={[itemClasses, className].filter(Boolean).join(' ')}\n {...rest}\n />\n));\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...rest }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={[\n 'ds:-ms-[var(--spacing-xs)] ds:-me-[var(--spacing-xs)]',\n 'ds:my-[var(--spacing-xs)]',\n 'ds:h-px ds:bg-[var(--border)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n />\n));\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport type CommandShortcutProps = ComponentPropsWithoutRef<'kbd'>;\n\nconst CommandShortcut = forwardRef<HTMLElement, CommandShortcutProps>(\n ({ className, children, ...rest }, ref) => (\n <kbd\n ref={ref}\n className={[\n 'ds:ms-auto',\n 'ds:inline-flex ds:items-center',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:h-5 ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--muted)]/20 ds:text-[var(--muted-foreground)]',\n 'ds:text-[length:var(--font-size-xs)] ds:font-[var(--font-weight-medium)]',\n // On the lit row the chip matches the row fill, so an inset ring\n // keeps it a key cap.\n 'ds:group-data-[selected=true]/menu-row:ring-[length:var(--border-width-sm)] ds:group-data-[selected=true]/menu-row:ring-inset',\n 'ds:group-data-[selected=true]/menu-row:ring-[color:var(--accent-foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </kbd>\n ),\n);\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -------------------------------------------------------------------- */\n/* Highlight helper */\n/* -------------------------------------------------------------------- */\n\n/**\n * Returns React nodes that wrap the matching segments of `label` in `<mark>`.\n * Diacritic-insensitive. No `dangerouslySetInnerHTML`.\n */\nexport function highlightMatch(label: string, query: string): ReactNode {\n if (!query) return label;\n const norm = normalise(label);\n const normQ = normalise(query);\n const idx = norm.indexOf(normQ);\n if (idx === -1) return label;\n // Walk the original label using character-by-character correspondence with the\n // normalised string. Since normalise may drop diacritics, we use index mapping.\n const before = label.slice(0, idx);\n const match = label.slice(idx, idx + normQ.length);\n const after = label.slice(idx + normQ.length);\n return (\n <>\n {before}\n <mark className=\"ds:bg-[var(--accent)]/20 ds:text-inherit ds:rounded-[var(--radius-sm)] ds:px-[0.125em] ds:group-data-[selected=true]/menu-row:bg-transparent ds:group-data-[selected=true]/menu-row:underline\">\n {match}\n </mark>\n {after}\n </>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* CommandPaletteDialog — Dialog shell + commands-as-data API */\n/* -------------------------------------------------------------------- */\n\nexport interface CommandPaletteDialogProps {\n /** Controlled open state. */\n open: boolean;\n /** Fires when the dialog opens/closes. */\n onOpenChange: (open: boolean) => void;\n /** Commands to display. */\n commands: Command[];\n /** Extra content rendered above the input (optional). */\n header?: ReactNode;\n /** Stable id for agent registration / DOM addressing. */\n id?: string;\n}\n\nconst overlayClasses = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/70 ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n].join(' ');\n\nconst dialogContentClasses = [\n 'ds:fixed ds:z-[var(--z-modal)]',\n // Logical-inset arbitrary-value positioning: `inset-inline-start-1/2`\n // isn't a real Tailwind class (the generator maps fractions only to\n // `start-*`), so use `start-1/2` for horizontal and `top-*` for the\n // top offset — matching the working Dialog component.\n 'ds:top-[12vh] ds:start-1/2 ds:-translate-x-1/2 ds:rtl:translate-x-1/2',\n 'ds:w-[92vw] ds:max-w-[var(--dialog-width-lg)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:border ds:border-[var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:motion-reduce:animate-none',\n 'ds:focus:outline-none',\n].join(' ');\n\nconst VisuallyHidden = ({ children }: { children: ReactNode }) => (\n <span className=\"ds:sr-only\">{children}</span>\n);\n\nfunction CommandPaletteDialog({\n open,\n onOpenChange,\n commands,\n header,\n id,\n}: CommandPaletteDialogProps) {\n const { t } = useTranslation('ui');\n const [search, setSearch] = useState('');\n const [recents, setRecents] = useState<string[]>(readRecents);\n\n useEffect(() => {\n if (!open) setSearch('');\n }, [open]);\n\n // Agent handle — refs mirror state for fresh reads from the memoized handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n const searchRef = useRef(search);\n useEffect(() => {\n searchRef.current = search;\n }, [search]);\n const onOpenChangeRef = useRef(onOpenChange);\n useEffect(() => {\n onOpenChangeRef.current = onOpenChange;\n }, [onOpenChange]);\n\n const agentHandle = useMemo<CommandPaletteHandle>(\n () => ({\n getQuery: () => searchRef.current,\n getIsOpen: () => openRef.current,\n open: () => onOpenChangeRef.current(true),\n close: () => onOpenChangeRef.current(false),\n setQuery: (query) => setSearch(query),\n }),\n [],\n );\n useAgentRegistration(commandPaletteAgent, agentHandle, id);\n\n const grouped = useMemo(() => {\n const byGroup = new Map<string, Command[]>();\n commands.forEach((c) => {\n const list = byGroup.get(c.group) ?? [];\n list.push(c);\n byGroup.set(c.group, list);\n });\n return byGroup;\n }, [commands]);\n\n const recentCommands = useMemo(() => {\n if (search) return [];\n const byId = new Map(commands.map((c) => [c.id, c]));\n return recents.map((id) => byId.get(id)).filter(Boolean) as Command[];\n }, [commands, recents, search]);\n\n const runCommand = useCallback(\n (cmd: Command) => {\n onOpenChange(false);\n const next = [cmd.id, ...recents.filter((id) => id !== cmd.id)].slice(\n 0,\n MAX_RECENTS,\n );\n setRecents(next);\n writeRecents(next);\n // Defer so Dialog unmount doesn't swallow the callback\n setTimeout(() => cmd.onSelect(), 0);\n },\n [recents, onOpenChange],\n );\n\n const clearRecents = useCallback(() => {\n setRecents([]);\n writeRecents([]);\n }, []);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n data-component=\"command-palette-overlay\"\n className={overlayClasses}\n />\n <RadixDialog.Content\n data-component=\"command-palette-dialog\"\n className={dialogContentClasses}\n aria-label={t('navigation.cmdk.title', 'Command palette')}\n >\n <RadixDialog.Title asChild>\n <VisuallyHidden>\n {t('navigation.cmdk.title', 'Command palette')}\n </VisuallyHidden>\n </RadixDialog.Title>\n <RadixDialog.Description asChild>\n <VisuallyHidden>\n {t(\n 'navigation.cmdk.description',\n 'Search for commands, pages, and actions',\n )}\n </VisuallyHidden>\n </RadixDialog.Description>\n <CommandPalette\n id={id}\n label={t('navigation.cmdk.title', 'Command palette')}\n >\n {header}\n <CommandInput value={search} onValueChange={setSearch} />\n <CommandList label={t('navigation.cmdk.title', 'Command palette')}>\n <CommandEmpty />\n {recentCommands.length > 0 ? (\n <>\n <CommandGroup\n heading={t('navigation.cmdk.recents', 'Recent')}\n >\n {recentCommands.map((cmd) => (\n <CommandItem\n key={`recent-${cmd.id}`}\n value={`recent-${cmd.label}`}\n data-command-id={cmd.id}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{cmd.label}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n <CommandItem\n value=\"__clear-recents\"\n onSelect={clearRecents}\n >\n <span>\n {t(\n 'navigation.cmdk.clearRecents',\n 'Clear recent commands',\n )}\n </span>\n </CommandItem>\n </CommandGroup>\n <CommandSeparator />\n </>\n ) : null}\n {Array.from(grouped.entries()).map(([group, list]) => (\n <CommandGroup key={group} heading={group}>\n {list.map((cmd) => (\n <CommandItem\n key={cmd.id}\n value={cmd.label}\n data-command-id={cmd.id}\n keywords={cmd.keywords}\n onSelect={() => runCommand(cmd)}\n >\n {cmd.icon ? (\n <span aria-hidden=\"true\">{cmd.icon}</span>\n ) : null}\n <span>{highlightMatch(cmd.label, search)}</span>\n {cmd.shortcut ? (\n <CommandShortcut>{cmd.shortcut}</CommandShortcut>\n ) : null}\n </CommandItem>\n ))}\n </CommandGroup>\n ))}\n </CommandList>\n </CommandPalette>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\nexport {\n CommandPalette,\n CommandPaletteDialog,\n CommandInput,\n CommandList,\n CommandGroup,\n CommandItem,\n CommandEmpty,\n CommandSeparator,\n CommandShortcut,\n};\n"],"names":["commandPaletteAgent","handle","args","normalise","value","diacriticInsensitiveFilter","search","keywords","defaultFilter","RECENTS_KEY","MAX_RECENTS","readRecents","raw","parsed","v","writeRecents","ids","useCommandPalette","open","setOpen","useState","useEffect","handler","event","target","tag","rootClasses","CommandPalette","forwardRef","className","filter","id","rest","ref","jsx","CommandPrimitive","inputWrapClasses","inputClasses","CommandInput","placeholder","t","useTranslation","jsxs","Search","CommandList","CommandEmpty","children","CommandGroup","heading","itemClasses","MENU_ROW_HIGHLIGHT","CommandItem","CommandSeparator","CommandShortcut","highlightMatch","label","query","norm","normQ","idx","before","match","after","Fragment","overlayClasses","dialogContentClasses","VisuallyHidden","CommandPaletteDialog","onOpenChange","commands","header","setSearch","recents","setRecents","openRef","useRef","searchRef","onOpenChangeRef","agentHandle","useMemo","useAgentRegistration","grouped","byGroup","list","recentCommands","byId","runCommand","useCallback","cmd","next","clearRecents","RadixDialog","group"],"mappings":"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"}
@@ -1,22 +1,22 @@
1
- import { jsxs as f, jsx as e, Fragment as T } from "react/jsx-runtime";
2
- import { forwardRef as le, useId as se, useMemo as ce } from "react";
1
+ import { jsxs as u, jsx as e, Fragment as T } from "react/jsx-runtime";
2
+ import { forwardRef as le, useId as ce, useMemo as se } from "react";
3
3
  import { c as de } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as pe } from "react-i18next";
5
5
  import { B as P } from "./badge-BUk4RjTS.js";
6
- import { C as F } from "./card-BA4Ig_kn.js";
6
+ import { C as z } from "./card-BA4Ig_kn.js";
7
7
  import { K as fe, a as ue } from "./key-value-pair-BoXOtBL1.js";
8
8
  import { L as d } from "./link-N5_YpLtm.js";
9
9
  import { b as me } from "./format-price-BcFBa-WP.js";
10
10
  import { u as he } from "./registry-DvAUVLHh.js";
11
- import { S as O } from "./stethoscope-sZXGC43m.js";
11
+ import { S as F } from "./stethoscope-sZXGC43m.js";
12
12
  import { H } from "./heart--qCA4ffe.js";
13
- import { B as V, L as _ } from "./languages-CZqBaPwI.js";
14
- import { S as z } from "./shield-check-DCJALLVh.js";
15
- import { G as B } from "./globe-sHBW1JN5.js";
16
- import { M as E } from "./mail-BqXVF2zH.js";
17
- import { M as K } from "./message-circle-Bepl9JT5.js";
18
- import { P as U } from "./phone-FceYcIFQ.js";
19
- import { M as G } from "./map-pin-BaY37-Km.js";
13
+ import { B as O, L as V } from "./languages-CZqBaPwI.js";
14
+ import { S as _ } from "./shield-check-DCJALLVh.js";
15
+ import { G as U } from "./globe-sHBW1JN5.js";
16
+ import { M as B } from "./mail-BqXVF2zH.js";
17
+ import { M as E } from "./message-circle-Bepl9JT5.js";
18
+ import { P as K } from "./phone-FceYcIFQ.js";
19
+ import { M as L } from "./map-pin-BaY37-Km.js";
20
20
  const ge = {
21
21
  id: "contact-profile-card",
22
22
  // Passive presentation surface — only exposes the rendered profession for
@@ -62,25 +62,34 @@ const ge = {
62
62
  function be(i) {
63
63
  return i.replace(/[^\d+]/g, "");
64
64
  }
65
- function Ce(i, r) {
65
+ function Ce(i, t) {
66
66
  const a = `https://wa.me/${i}`;
67
- return r ? `${a}?text=${encodeURIComponent(r)}` : a;
67
+ return t ? `${a}?text=${encodeURIComponent(t)}` : a;
68
68
  }
69
69
  function xe(i) {
70
+ const t = i.trim(), a = /^[a-z][a-z0-9+.-]*:/i.test(t) ? t : `https://${t}`;
71
+ try {
72
+ const { protocol: l } = new URL(a);
73
+ return l === "http:" || l === "https:" ? a : void 0;
74
+ } catch {
75
+ return;
76
+ }
77
+ }
78
+ function Pe(i) {
70
79
  return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(i.line)}`;
71
80
  }
72
- function Pe() {
81
+ function ye() {
73
82
  if (typeof document > "u") return "4945a3";
74
- const i = getComputedStyle(document.documentElement).getPropertyValue("--map-marker-color").trim(), r = /^#?([0-9a-fA-F]{6})$/.exec(i);
75
- return r ? r[1] : "4945a3";
83
+ const i = getComputedStyle(document.documentElement).getPropertyValue("--map-marker-color").trim(), t = /^#?([0-9a-fA-F]{6})$/.exec(i);
84
+ return t ? t[1] : "4945a3";
76
85
  }
77
- function ye({ apiKey: i, center: r, zoom: a, altText: s }) {
78
- const c = Pe(), u = `https://maps.googleapis.com/maps/api/staticmap?center=${r.lat},${r.lng}&zoom=${a}&size=640x192&scale=2&markers=color:0x${c}%7C${r.lat},${r.lng}&key=${encodeURIComponent(i)}`;
86
+ function ke({ apiKey: i, center: t, zoom: a, altText: l }) {
87
+ const s = ye(), m = `https://maps.googleapis.com/maps/api/staticmap?center=${t.lat},${t.lng}&zoom=${a}&size=640x192&scale=2&markers=color:0x${s}%7C${t.lat},${t.lng}&key=${encodeURIComponent(i)}`;
79
88
  return /* @__PURE__ */ e(
80
89
  "img",
81
90
  {
82
- src: u,
83
- alt: s,
91
+ src: m,
92
+ alt: l,
84
93
  loading: "lazy",
85
94
  decoding: "async",
86
95
  width: 640,
@@ -89,23 +98,23 @@ function ye({ apiKey: i, center: r, zoom: a, altText: s }) {
89
98
  }
90
99
  );
91
100
  }
92
- const ke = le(
101
+ const we = le(
93
102
  ({
94
103
  heading: i,
95
- description: r,
104
+ description: t,
96
105
  address: a,
97
- phone: s,
98
- whatsappNumber: c,
99
- whatsappMessage: u,
100
- email: m,
101
- website: h,
106
+ phone: l,
107
+ whatsappNumber: s,
108
+ whatsappMessage: m,
109
+ email: h,
110
+ website: p,
102
111
  languages: g,
103
- languageLabels: p,
112
+ languageLabels: f,
104
113
  insurances: v,
105
114
  firstVisitPriceCents: b,
106
115
  currencyCode: y = "EUR",
107
116
  profession: C,
108
- specializedInFearPatients: L,
117
+ specializedInFearPatients: G,
109
118
  googleMapsApiKey: k,
110
119
  mapZoom: j = 14,
111
120
  onPhoneClick: q,
@@ -121,109 +130,113 @@ const ke = le(
121
130
  className: ee,
122
131
  ...ae
123
132
  }, te) => {
124
- const { t, i18n: M } = pe("ui"), $ = se(), A = M.language ?? "en", N = i ?? t("contactProfileCard.heading"), re = Z ?? N, R = ce(() => {
133
+ const { t: r, i18n: $ } = pe("ui"), M = ce(), A = $.language ?? "en", R = i ?? r("contactProfileCard.heading"), re = Z ?? R, N = se(() => {
125
134
  if (b != null)
126
135
  return me(
127
136
  b,
128
137
  y,
129
138
  A,
130
- t("common.freeOfCharge")
139
+ r("common.freeOfCharge")
131
140
  );
132
- }, [b, y, A, t]), n = [];
141
+ }, [b, y, A, r]), n = [];
133
142
  if (a && n.push({
134
143
  key: "address",
135
- icon: /* @__PURE__ */ e(G, { "aria-hidden": "true" }),
136
- label: t("contactProfileCard.label.address"),
137
- value: /* @__PURE__ */ f("span", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
144
+ icon: /* @__PURE__ */ e(L, { "aria-hidden": "true" }),
145
+ label: r("contactProfileCard.label.address"),
146
+ value: /* @__PURE__ */ u("span", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
138
147
  /* @__PURE__ */ e("span", { dir: "auto", children: a.line }),
139
148
  a.lat != null && a.lng != null ? /* @__PURE__ */ e(
140
149
  d,
141
150
  {
142
- href: xe(a),
151
+ href: Pe(a),
143
152
  external: !0,
144
153
  intent: "default",
145
154
  onClick: D,
146
- children: t("contactProfileCard.openInGoogleMaps")
155
+ children: r("contactProfileCard.openInGoogleMaps")
147
156
  }
148
157
  ) : null
149
158
  ] })
150
- }), s && n.push({
159
+ }), l && n.push({
151
160
  key: "phone",
152
- icon: /* @__PURE__ */ e(U, { "aria-hidden": "true" }),
153
- label: t("contactProfileCard.label.phone"),
161
+ icon: /* @__PURE__ */ e(K, { "aria-hidden": "true" }),
162
+ label: r("contactProfileCard.label.phone"),
154
163
  value: /* @__PURE__ */ e(
155
164
  d,
156
165
  {
157
- href: `tel:${be(s)}`,
166
+ href: `tel:${be(l)}`,
158
167
  intent: "default",
159
168
  onClick: q,
160
- children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: s })
169
+ children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: l })
161
170
  }
162
171
  )
163
- }), c && n.push({
172
+ }), s && n.push({
164
173
  key: "whatsapp",
165
- icon: /* @__PURE__ */ e(K, { "aria-hidden": "true" }),
166
- label: t("contactProfileCard.label.whatsapp"),
174
+ icon: /* @__PURE__ */ e(E, { "aria-hidden": "true" }),
175
+ label: r("contactProfileCard.label.whatsapp"),
167
176
  value: /* @__PURE__ */ e(
168
177
  d,
169
178
  {
170
- href: Ce(c, u),
179
+ href: Ce(s, m),
171
180
  external: !0,
172
181
  intent: "default",
173
182
  onClick: W,
174
- children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: c })
183
+ children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: s })
175
184
  }
176
185
  )
177
- }), m && n.push({
186
+ }), h && n.push({
178
187
  key: "email",
179
- icon: /* @__PURE__ */ e(E, { "aria-hidden": "true" }),
180
- label: t("contactProfileCard.label.email"),
188
+ icon: /* @__PURE__ */ e(B, { "aria-hidden": "true" }),
189
+ label: r("contactProfileCard.label.email"),
181
190
  value: /* @__PURE__ */ e(
182
191
  d,
183
192
  {
184
- href: `mailto:${m}`,
193
+ href: `mailto:${h}`,
185
194
  intent: "default",
186
195
  onClick: Y,
187
- children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: m })
196
+ children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: h })
188
197
  }
189
198
  )
190
- }), h && n.push({
191
- key: "website",
192
- icon: /* @__PURE__ */ e(B, { "aria-hidden": "true" }),
193
- label: t("contactProfileCard.label.website"),
194
- value: /* @__PURE__ */ e(d, { href: h, external: !0, intent: "default", children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: h }) })
195
- }), g && g.length > 0) {
196
- const o = (l) => {
197
- if (p != null && p[l]) return p[l];
198
- const I = `languages.${l}`;
199
- return M.exists(I) ? t(I) : l.toUpperCase();
199
+ }), p) {
200
+ const o = xe(p);
201
+ n.push({
202
+ key: "website",
203
+ icon: /* @__PURE__ */ e(U, { "aria-hidden": "true" }),
204
+ label: r("contactProfileCard.label.website"),
205
+ value: o ? /* @__PURE__ */ e(d, { href: o, external: !0, intent: "default", children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: p }) }) : /* @__PURE__ */ e("bdi", { dir: "ltr", children: p })
206
+ });
207
+ }
208
+ if (g && g.length > 0) {
209
+ const o = (c) => {
210
+ if (f != null && f[c]) return f[c];
211
+ const I = `languages.${c}`;
212
+ return $.exists(I) ? r(I) : c.toUpperCase();
200
213
  };
201
214
  n.push({
202
215
  key: "languages",
203
- icon: /* @__PURE__ */ e(_, { "aria-hidden": "true" }),
204
- label: t("contactProfileCard.label.languages"),
205
- value: /* @__PURE__ */ e("span", { className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]", children: g.map((l) => /* @__PURE__ */ e(P, { variant: "neutral", children: o(l) }, l)) })
216
+ icon: /* @__PURE__ */ e(V, { "aria-hidden": "true" }),
217
+ label: r("contactProfileCard.label.languages"),
218
+ value: /* @__PURE__ */ e("span", { className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]", children: g.map((c) => /* @__PURE__ */ e(P, { variant: "neutral", children: o(c) }, c)) })
206
219
  });
207
220
  }
208
221
  v && v.length > 0 && n.push({
209
222
  key: "insurances",
210
- icon: /* @__PURE__ */ e(z, { "aria-hidden": "true" }),
211
- label: t("contactProfileCard.label.insurances"),
223
+ icon: /* @__PURE__ */ e(_, { "aria-hidden": "true" }),
224
+ label: r("contactProfileCard.label.insurances"),
212
225
  value: /* @__PURE__ */ e("span", { className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]", children: v.map((o) => /* @__PURE__ */ e(P, { variant: "info", children: o }, o)) })
213
- }), R && n.push({
226
+ }), N && n.push({
214
227
  key: "firstVisitPrice",
215
- icon: /* @__PURE__ */ e(V, { "aria-hidden": "true" }),
216
- label: t("contactProfileCard.label.firstVisitPrice"),
217
- value: /* @__PURE__ */ e(P, { variant: "accentSoft", size: "lg", children: R })
218
- }), L && n.push({
228
+ icon: /* @__PURE__ */ e(O, { "aria-hidden": "true" }),
229
+ label: r("contactProfileCard.label.firstVisitPrice"),
230
+ value: /* @__PURE__ */ e(P, { variant: "accentSoft", size: "lg", children: N })
231
+ }), G && n.push({
219
232
  key: "expertForAnxiousPatients",
220
233
  icon: /* @__PURE__ */ e(H, { "aria-hidden": "true" }),
221
- label: t("contactProfileCard.label.expertForAnxiousPatients"),
222
- value: t("contactProfileCard.value.yesShort")
234
+ label: r("contactProfileCard.label.expertForAnxiousPatients"),
235
+ value: r("contactProfileCard.value.yesShort")
223
236
  }), C && n.push({
224
237
  key: "profession",
225
- icon: /* @__PURE__ */ e(O, { "aria-hidden": "true" }),
226
- label: t("contactProfileCard.label.profession"),
238
+ icon: /* @__PURE__ */ e(F, { "aria-hidden": "true" }),
239
+ label: r("contactProfileCard.label.profession"),
227
240
  value: C
228
241
  }), he(
229
242
  ge,
@@ -231,18 +244,18 @@ const ke = le(
231
244
  x
232
245
  );
233
246
  const ie = !!k && (a == null ? void 0 : a.lat) !== void 0 && (a == null ? void 0 : a.lng) !== void 0 ? /* @__PURE__ */ e(
234
- ye,
247
+ ke,
235
248
  {
236
249
  apiKey: k,
237
250
  center: { lat: a.lat, lng: a.lng },
238
251
  zoom: j,
239
- altText: t("contactProfileCard.map.alt", {
252
+ altText: r("contactProfileCard.map.alt", {
240
253
  address: a.line,
241
254
  defaultValue: "Map showing {{address}}"
242
255
  })
243
256
  }
244
- ) : null, ne = X ?? ie, oe = /* @__PURE__ */ f(T, { children: [
245
- r ? /* @__PURE__ */ e("p", { dir: "auto", className: "type-body-sm ds:m-0 ds:whitespace-pre-line", children: r }) : null,
257
+ ) : null, ne = X ?? ie, oe = /* @__PURE__ */ u(T, { children: [
258
+ t ? /* @__PURE__ */ e("p", { dir: "auto", className: "type-body-sm ds:m-0 ds:whitespace-pre-line", children: t }) : null,
246
259
  n.length > 0 ? /* @__PURE__ */ e(fe, { rowGap: "md", children: n.map((o) => /* @__PURE__ */ e(
247
260
  ue,
248
261
  {
@@ -254,15 +267,15 @@ const ke = le(
254
267
  )) }) : null,
255
268
  ne,
256
269
  Q
257
- ] }), S = /* @__PURE__ */ f(T, { children: [
258
- /* @__PURE__ */ f("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
270
+ ] }), S = /* @__PURE__ */ u(T, { children: [
271
+ /* @__PURE__ */ u("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
259
272
  J,
260
273
  /* @__PURE__ */ e(
261
274
  "h2",
262
275
  {
263
- id: $,
276
+ id: M,
264
277
  className: "type-title-card ds:m-0 ds:text-[color:var(--foreground)]",
265
- children: N
278
+ children: R
266
279
  }
267
280
  )
268
281
  ] }),
@@ -274,19 +287,19 @@ const ke = le(
274
287
  ref: te,
275
288
  role: "region",
276
289
  "aria-label": re,
277
- "aria-labelledby": $,
290
+ "aria-labelledby": M,
278
291
  "data-component": "contact-profile-card",
279
292
  "data-component-id": x,
280
293
  id: x,
281
294
  className: ve({ surface: w, className: ee }),
282
295
  ...ae,
283
- children: w === "elevated" ? /* @__PURE__ */ e(F, { variant: "elevated", children: /* @__PURE__ */ e(F.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: S }) }) : /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: S })
296
+ children: w === "elevated" ? /* @__PURE__ */ e(z, { variant: "elevated", children: /* @__PURE__ */ e(z.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: S }) }) : /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: S })
284
297
  }
285
298
  );
286
299
  }
287
300
  );
288
- ke.displayName = "ContactProfileCard";
289
- const Le = [
301
+ we.displayName = "ContactProfileCard";
302
+ const je = [
290
303
  "address",
291
304
  "phone",
292
305
  "whatsapp",
@@ -297,22 +310,22 @@ const Le = [
297
310
  "firstVisitPrice",
298
311
  "expertForAnxiousPatients",
299
312
  "profession"
300
- ], je = {
301
- address: G,
302
- phone: U,
303
- whatsapp: K,
304
- email: E,
305
- website: B,
306
- languages: _,
307
- insurances: z,
308
- firstVisitPrice: V,
313
+ ], qe = {
314
+ address: L,
315
+ phone: K,
316
+ whatsapp: E,
317
+ email: B,
318
+ website: U,
319
+ languages: V,
320
+ insurances: _,
321
+ firstVisitPrice: O,
309
322
  expertForAnxiousPatients: H,
310
- profession: O
323
+ profession: F
311
324
  };
312
325
  export {
313
- je as C,
314
- Le as a,
315
- ke as b,
326
+ qe as C,
327
+ je as a,
328
+ we as b,
316
329
  ge as c
317
330
  };
318
- //# sourceMappingURL=contact-profile-card-DKk94l-d.js.map
331
+ //# sourceMappingURL=contact-profile-card-Da1vmJQI.js.map