@alfadocs/ui-kit-debug 1.90.1 → 1.91.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 (380) hide show
  1. package/dist/_chunks/address-autocomplete-DR4Xn23Z.js +519 -0
  2. package/dist/_chunks/address-autocomplete-DR4Xn23Z.js.map +1 -0
  3. package/dist/_chunks/{address-fields-CfnXK8RT.js → address-fields-qxQkGwPf.js} +5 -5
  4. package/dist/_chunks/{address-fields-CfnXK8RT.js.map → address-fields-qxQkGwPf.js.map} +1 -1
  5. package/dist/_chunks/{agenda-card-BDuvreCe.js → agenda-card-BhY342MA.js} +2 -2
  6. package/dist/_chunks/{agenda-card-BDuvreCe.js.map → agenda-card-BhY342MA.js.map} +1 -1
  7. package/dist/_chunks/{agenda-tray-D-jvptdo.js → agenda-tray-BmxBGEci.js} +2 -2
  8. package/dist/_chunks/{agenda-tray-D-jvptdo.js.map → agenda-tray-BmxBGEci.js.map} +1 -1
  9. package/dist/_chunks/{ai-permission-notice-CoW22jx1.js → ai-permission-notice-VNh3W57L.js} +2 -2
  10. package/dist/_chunks/{ai-permission-notice-CoW22jx1.js.map → ai-permission-notice-VNh3W57L.js.map} +1 -1
  11. package/dist/_chunks/{alia-sidebar-CsTRAxC8.js → alia-sidebar-ovRX_oti.js} +3 -3
  12. package/dist/_chunks/{alia-sidebar-CsTRAxC8.js.map → alia-sidebar-ovRX_oti.js.map} +1 -1
  13. package/dist/_chunks/{anamnesis-summary-rows-fbEQwcuW.js → anamnesis-summary-rows-EKPfVCmh.js} +2 -2
  14. package/dist/_chunks/{anamnesis-summary-rows-fbEQwcuW.js.map → anamnesis-summary-rows-EKPfVCmh.js.map} +1 -1
  15. package/dist/_chunks/{appointment-card-5JMWi9_f.js → appointment-card-Bstc1p7a.js} +2 -2
  16. package/dist/_chunks/{appointment-card-5JMWi9_f.js.map → appointment-card-Bstc1p7a.js.map} +1 -1
  17. package/dist/_chunks/{appointment-peek-39BwVMUf.js → appointment-peek-C0kKqnFk.js} +2 -2
  18. package/dist/_chunks/{appointment-peek-39BwVMUf.js.map → appointment-peek-C0kKqnFk.js.map} +1 -1
  19. package/dist/_chunks/{appointment-timeline-1-Za2miy.js → appointment-timeline-rbt9AwHO.js} +2 -2
  20. package/dist/_chunks/{appointment-timeline-1-Za2miy.js.map → appointment-timeline-rbt9AwHO.js.map} +1 -1
  21. package/dist/_chunks/{appointment-tray-Dwc8MSIQ.js → appointment-tray-6zd8RLIL.js} +2 -2
  22. package/dist/_chunks/{appointment-tray-Dwc8MSIQ.js.map → appointment-tray-6zd8RLIL.js.map} +1 -1
  23. package/dist/_chunks/autocomplete-BXMcNoa3.js +562 -0
  24. package/dist/_chunks/autocomplete-BXMcNoa3.js.map +1 -0
  25. package/dist/_chunks/{avatar-BPiPL7ND.js → avatar-a6042Ox2.js} +52 -52
  26. package/dist/_chunks/avatar-a6042Ox2.js.map +1 -0
  27. package/dist/_chunks/{balance-badge-cell-C4FYwmrZ.js → balance-badge-cell-BtJvre1-.js} +3 -3
  28. package/dist/_chunks/{balance-badge-cell-C4FYwmrZ.js.map → balance-badge-cell-BtJvre1-.js.map} +1 -1
  29. package/dist/_chunks/booking-opt_h7Uc.js +4590 -0
  30. package/dist/_chunks/booking-opt_h7Uc.js.map +1 -0
  31. package/dist/_chunks/{calendar-ClB-jWH1.js → calendar-CmiMS4FJ.js} +2 -2
  32. package/dist/_chunks/{calendar-ClB-jWH1.js.map → calendar-CmiMS4FJ.js.map} +1 -1
  33. package/dist/_chunks/{calendar-appointment-editor-dialog-C1v2MNE4.js → calendar-appointment-editor-dialog-sJKLoVJ2.js} +11 -11
  34. package/dist/_chunks/{calendar-appointment-editor-dialog-C1v2MNE4.js.map → calendar-appointment-editor-dialog-sJKLoVJ2.js.map} +1 -1
  35. package/dist/_chunks/{care-plan-card-BYCPNDvA.js → care-plan-card-DD9rEWYN.js} +2 -2
  36. package/dist/_chunks/{care-plan-card-BYCPNDvA.js.map → care-plan-card-DD9rEWYN.js.map} +1 -1
  37. package/dist/_chunks/{care-plan-header-BzsAg6oY.js → care-plan-header-CXUJQt8Q.js} +2 -2
  38. package/dist/_chunks/{care-plan-header-BzsAg6oY.js.map → care-plan-header-CXUJQt8Q.js.map} +1 -1
  39. package/dist/_chunks/{chat-message-CmFJdEre.js → chat-message-LRO_6Ee3.js} +2 -2
  40. package/dist/_chunks/{chat-message-CmFJdEre.js.map → chat-message-LRO_6Ee3.js.map} +1 -1
  41. package/dist/_chunks/{checkbox-BjDv-r3o.js → checkbox-a7Sh-dXb.js} +32 -31
  42. package/dist/_chunks/checkbox-a7Sh-dXb.js.map +1 -0
  43. package/dist/_chunks/{checkbox-group-Cw2H5qaq.js → checkbox-group-eGdv9fZc.js} +2 -2
  44. package/dist/_chunks/{checkbox-group-Cw2H5qaq.js.map → checkbox-group-eGdv9fZc.js.map} +1 -1
  45. package/dist/_chunks/{city-input-CJVGswxp.js → city-input-CA59CjnV.js} +2 -2
  46. package/dist/_chunks/{city-input-CJVGswxp.js.map → city-input-CA59CjnV.js.map} +1 -1
  47. package/dist/_chunks/{clinical-note-card-Caidqcwa.js → clinical-note-card-Cut2lNmu.js} +3 -3
  48. package/dist/_chunks/{clinical-note-card-Caidqcwa.js.map → clinical-note-card-Cut2lNmu.js.map} +1 -1
  49. package/dist/_chunks/{combobox-CDPm_n0p.js → combobox-D-gpgEDy.js} +314 -294
  50. package/dist/_chunks/combobox-D-gpgEDy.js.map +1 -0
  51. package/dist/_chunks/{contact-card-Czu60UvU.js → contact-card-ClvEDM9e.js} +2 -2
  52. package/dist/_chunks/{contact-card-Czu60UvU.js.map → contact-card-ClvEDM9e.js.map} +1 -1
  53. package/dist/_chunks/{contact-profile-card-Da1vmJQI.js → contact-profile-card-CX45mZA3.js} +106 -95
  54. package/dist/_chunks/contact-profile-card-CX45mZA3.js.map +1 -0
  55. package/dist/_chunks/{country-select-DQ8q7ypA.js → country-select-BfmX9y5i.js} +2 -2
  56. package/dist/_chunks/{country-select-DQ8q7ypA.js.map → country-select-BfmX9y5i.js.map} +1 -1
  57. package/dist/_chunks/{data-table-B_IcS0Ke.js → data-table-CqQgoNsU.js} +2 -2
  58. package/dist/_chunks/{data-table-B_IcS0Ke.js.map → data-table-CqQgoNsU.js.map} +1 -1
  59. package/dist/_chunks/{dependent-selector-C4kOgO8b.js → dependent-selector-CyNi7M_f.js} +2 -2
  60. package/dist/_chunks/{dependent-selector-C4kOgO8b.js.map → dependent-selector-CyNi7M_f.js.map} +1 -1
  61. package/dist/_chunks/{entity-summary-BLxzSSXK.js → entity-summary-B_bOloqP.js} +3 -3
  62. package/dist/_chunks/{entity-summary-BLxzSSXK.js.map → entity-summary-B_bOloqP.js.map} +1 -1
  63. package/dist/_chunks/error-page-B0fGNTRB.js +419 -0
  64. package/dist/_chunks/error-page-B0fGNTRB.js.map +1 -0
  65. package/dist/_chunks/{face-scheme-BgJGFDTa.js → face-scheme-BKSE98bo.js} +2 -2
  66. package/dist/_chunks/{face-scheme-BgJGFDTa.js.map → face-scheme-BKSE98bo.js.map} +1 -1
  67. package/dist/_chunks/{file-manager-C9YOT-Dn.js → file-manager-BnI1ZWZu.js} +2 -2
  68. package/dist/_chunks/{file-manager-C9YOT-Dn.js.map → file-manager-BnI1ZWZu.js.map} +1 -1
  69. package/dist/_chunks/{header-settings-BVhjndtV.js → header-settings-BeA2fnol.js} +24 -23
  70. package/dist/_chunks/header-settings-BeA2fnol.js.map +1 -0
  71. package/dist/_chunks/{heatmap-HTz3Jvzy.js → heatmap-fCxwNz2o.js} +2 -2
  72. package/dist/_chunks/{heatmap-HTz3Jvzy.js.map → heatmap-fCxwNz2o.js.map} +1 -1
  73. package/dist/_chunks/{languages-CZqBaPwI.js → languages-CGLX6Qpe.js} +3 -15
  74. package/dist/_chunks/languages-CGLX6Qpe.js.map +1 -0
  75. package/dist/_chunks/link-DtCfnLnF.js +332 -0
  76. package/dist/_chunks/link-DtCfnLnF.js.map +1 -0
  77. package/dist/_chunks/{link-cell-renderer-C0ynDik7.js → link-cell-renderer-BS3V4LA6.js} +4 -4
  78. package/dist/_chunks/{link-cell-renderer-C0ynDik7.js.map → link-cell-renderer-BS3V4LA6.js.map} +1 -1
  79. package/dist/_chunks/{login-dev-card-DYwbL5sD.js → login-dev-card-BZBR58mu.js} +2 -2
  80. package/dist/_chunks/{login-dev-card-DYwbL5sD.js.map → login-dev-card-BZBR58mu.js.map} +1 -1
  81. package/dist/_chunks/{map-view-Bvi06RVh.js → map-view-UrNgxBy3.js} +260 -237
  82. package/dist/_chunks/map-view-UrNgxBy3.js.map +1 -0
  83. package/dist/_chunks/{index.modern-BeRXQVdc.js → maps-core-gate-DkNqGkm3.js} +360 -319
  84. package/dist/_chunks/maps-core-gate-DkNqGkm3.js.map +1 -0
  85. package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js → marketplace-app-shell-CJQtx3sv.js} +3 -3
  86. package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js.map → marketplace-app-shell-CJQtx3sv.js.map} +1 -1
  87. package/dist/_chunks/{message-card-CvCnCssc.js → message-card-B6SduXJv.js} +2 -2
  88. package/dist/_chunks/{message-card-CvCnCssc.js.map → message-card-B6SduXJv.js.map} +1 -1
  89. package/dist/_chunks/{message-tray-IJYvy6Cf.js → message-tray-Cllf-v0G.js} +2 -2
  90. package/dist/_chunks/{message-tray-IJYvy6Cf.js.map → message-tray-Cllf-v0G.js.map} +1 -1
  91. package/dist/_chunks/{nav-grid-Oc4aCPrg.js → nav-grid-D2xVcHTO.js} +2 -2
  92. package/dist/_chunks/{nav-grid-Oc4aCPrg.js.map → nav-grid-D2xVcHTO.js.map} +1 -1
  93. package/dist/_chunks/{note-attachment-DIlIQ7JF.js → note-attachment-cnj2JRrg.js} +2 -2
  94. package/dist/_chunks/{note-attachment-DIlIQ7JF.js.map → note-attachment-cnj2JRrg.js.map} +1 -1
  95. package/dist/_chunks/{note-timeline-KzL52MmB.js → note-timeline-BrjHBQfx.js} +2 -2
  96. package/dist/_chunks/{note-timeline-KzL52MmB.js.map → note-timeline-BrjHBQfx.js.map} +1 -1
  97. package/dist/_chunks/{notes-panel-CZO1qsD-.js → notes-panel-ib7I3aNf.js} +3 -3
  98. package/dist/_chunks/{notes-panel-CZO1qsD-.js.map → notes-panel-ib7I3aNf.js.map} +1 -1
  99. package/dist/_chunks/{operator-hero-6aAIQaFZ.js → operator-hero-C_5B-8Qp.js} +43 -41
  100. package/dist/_chunks/operator-hero-C_5B-8Qp.js.map +1 -0
  101. package/dist/_chunks/{patient-details-D0P5eog5.js → patient-details-BjcUpD9S.js} +3 -3
  102. package/dist/_chunks/{patient-details-D0P5eog5.js.map → patient-details-BjcUpD9S.js.map} +1 -1
  103. package/dist/_chunks/{patient-field-row-R73dZJY6.js → patient-field-row-B0tdiaWi.js} +6 -6
  104. package/dist/_chunks/{patient-field-row-R73dZJY6.js.map → patient-field-row-B0tdiaWi.js.map} +1 -1
  105. package/dist/_chunks/patient-search-Ca9j5cWb.js +1306 -0
  106. package/dist/_chunks/patient-search-Ca9j5cWb.js.map +1 -0
  107. package/dist/_chunks/{patient-summary-card-6U74-ivO.js → patient-summary-card-Cvv6_Ugk.js} +4 -4
  108. package/dist/_chunks/{patient-summary-card-6U74-ivO.js.map → patient-summary-card-Cvv6_Ugk.js.map} +1 -1
  109. package/dist/_chunks/{payment-request-card-MndSlVoK.js → payment-request-card-BfGauFY0.js} +2 -2
  110. package/dist/_chunks/{payment-request-card-MndSlVoK.js.map → payment-request-card-BfGauFY0.js.map} +1 -1
  111. package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js → periodontal-diagnosis-DD3hrg9X.js} +2 -2
  112. package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js.map → periodontal-diagnosis-DD3hrg9X.js.map} +1 -1
  113. package/dist/_chunks/{permission-matrix-BoQjENGV.js → permission-matrix-BJ6sg3Zp.js} +3 -3
  114. package/dist/_chunks/{permission-matrix-BoQjENGV.js.map → permission-matrix-BJ6sg3Zp.js.map} +1 -1
  115. package/dist/_chunks/{practice-profile-hero-qfrsFQI_.js → practice-profile-hero-ClzE-4CB.js} +76 -73
  116. package/dist/_chunks/practice-profile-hero-ClzE-4CB.js.map +1 -0
  117. package/dist/_chunks/{practice-results-B61krlwu.js → practice-results-CQ_KvEXK.js} +517 -514
  118. package/dist/_chunks/practice-results-CQ_KvEXK.js.map +1 -0
  119. package/dist/_chunks/{product-hub-panel-Blag8t8f.js → product-hub-panel-bHi7lkVD.js} +2 -2
  120. package/dist/_chunks/{product-hub-panel-Blag8t8f.js.map → product-hub-panel-bHi7lkVD.js.map} +1 -1
  121. package/dist/_chunks/{province-select-CPdTwEob.js → province-select-D64whw0m.js} +2 -2
  122. package/dist/_chunks/{province-select-CPdTwEob.js.map → province-select-D64whw0m.js.map} +1 -1
  123. package/dist/_chunks/public-footer-IoRWoAMz.js +596 -0
  124. package/dist/_chunks/public-footer-IoRWoAMz.js.map +1 -0
  125. package/dist/_chunks/{registration-form-DmP3YUfp.js → registration-form-CRm6DaB9.js} +2 -2
  126. package/dist/_chunks/{registration-form-DmP3YUfp.js.map → registration-form-CRm6DaB9.js.map} +1 -1
  127. package/dist/_chunks/{reviews-panel-UzQQLb-z.js → reviews-panel-B7InBORU.js} +42 -41
  128. package/dist/_chunks/reviews-panel-B7InBORU.js.map +1 -0
  129. package/dist/_chunks/{rich-text-editor-BZTyxQBd.js → rich-text-editor-BfEu57dk.js} +3 -3
  130. package/dist/_chunks/{rich-text-editor-BZTyxQBd.js.map → rich-text-editor-BfEu57dk.js.map} +1 -1
  131. package/dist/_chunks/{signature-request-DjY-X62H.js → signature-request-DvhyrRpn.js} +3 -3
  132. package/dist/_chunks/{signature-request-DjY-X62H.js.map → signature-request-DvhyrRpn.js.map} +1 -1
  133. package/dist/_chunks/{signed-out-frame-G-3ATOdu.js → signed-out-frame-CgRXOUzi.js} +2 -2
  134. package/dist/_chunks/{signed-out-frame-G-3ATOdu.js.map → signed-out-frame-CgRXOUzi.js.map} +1 -1
  135. package/dist/_chunks/{slot-grid-Bb13H9Rl.js → slot-grid-B-IAFX3C.js} +183 -170
  136. package/dist/_chunks/slot-grid-B-IAFX3C.js.map +1 -0
  137. package/dist/_chunks/{task-editor-BOETWbjU.js → task-editor-CI1SKUNc.js} +2 -2
  138. package/dist/_chunks/{task-editor-BOETWbjU.js.map → task-editor-CI1SKUNc.js.map} +1 -1
  139. package/dist/_chunks/{timeline-wUuTDFY_.js → timeline-BcYHdP56.js} +2 -2
  140. package/dist/_chunks/{timeline-wUuTDFY_.js.map → timeline-BcYHdP56.js.map} +1 -1
  141. package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js → use-appointment-details-read-D8vDg0sg.js} +5 -5
  142. package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js.map → use-appointment-details-read-D8vDg0sg.js.map} +1 -1
  143. package/dist/_chunks/{voice-control-panel-BziKE-KK.js → voice-control-panel-BP0otrID.js} +2 -2
  144. package/dist/_chunks/{voice-control-panel-BziKE-KK.js.map → voice-control-panel-BP0otrID.js.map} +1 -1
  145. package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js} +2 -2
  146. package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js.map → workflow-webhook-action-B_nBJ_ht.js.map} +1 -1
  147. package/dist/agent-catalog.json +3 -3
  148. package/dist/agent-i18n/en.json +1 -1
  149. package/dist/components/_shared/maps-core-gate.d.ts +18 -0
  150. package/dist/components/_shared/maps-core-gate.d.ts.map +1 -0
  151. package/dist/components/_shared/social-brand-icons.d.ts +29 -0
  152. package/dist/components/_shared/social-brand-icons.d.ts.map +1 -0
  153. package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
  154. package/dist/components/address-autocomplete/index.js +1 -1
  155. package/dist/components/address-fields/index.js +1 -1
  156. package/dist/components/agenda-card/index.js +1 -1
  157. package/dist/components/agenda-tray/index.js +1 -1
  158. package/dist/components/ai-permission-notice/index.js +1 -1
  159. package/dist/components/appointment-card/index.js +2 -2
  160. package/dist/components/appointment-details-panel/index.js +1 -1
  161. package/dist/components/appointment-peek/index.js +1 -1
  162. package/dist/components/appointment-timeline/index.js +1 -1
  163. package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
  164. package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
  165. package/dist/components/autocomplete/index.js +1 -1
  166. package/dist/components/avatar/avatar.d.ts +14 -0
  167. package/dist/components/avatar/avatar.d.ts.map +1 -1
  168. package/dist/components/avatar/index.js +1 -1
  169. package/dist/components/booking/booking-types.d.ts +26 -0
  170. package/dist/components/booking/booking-types.d.ts.map +1 -1
  171. package/dist/components/booking/booking.d.ts.map +1 -1
  172. package/dist/components/booking/details-form.d.ts.map +1 -1
  173. package/dist/components/booking/index.js +1 -1
  174. package/dist/components/booking/slot-load-state.d.ts +11 -0
  175. package/dist/components/booking/slot-load-state.d.ts.map +1 -0
  176. package/dist/components/calendar/index.js +1 -1
  177. package/dist/components/care-plan-card/index.js +1 -1
  178. package/dist/components/care-plan-header/index.js +1 -1
  179. package/dist/components/chat-message/index.js +1 -1
  180. package/dist/components/checkbox/checkbox.d.ts.map +1 -1
  181. package/dist/components/checkbox/index.js +1 -1
  182. package/dist/components/checkbox-group/index.js +1 -1
  183. package/dist/components/city-input/index.js +1 -1
  184. package/dist/components/clinical-note-card/index.js +1 -1
  185. package/dist/components/combobox/combobox.d.ts.map +1 -1
  186. package/dist/components/combobox/index.js +1 -1
  187. package/dist/components/contact-card/index.js +1 -1
  188. package/dist/components/contact-profile-card/index.js +1 -1
  189. package/dist/components/country-select/index.js +1 -1
  190. package/dist/components/data-table/index.js +2 -2
  191. package/dist/components/dependent-selector/index.js +1 -1
  192. package/dist/components/entity-summary/index.js +1 -1
  193. package/dist/components/face-scheme/index.js +1 -1
  194. package/dist/components/file-manager/index.js +1 -1
  195. package/dist/components/header-settings/header-settings.d.ts +2 -1
  196. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  197. package/dist/components/header-settings/index.js +1 -1
  198. package/dist/components/heatmap/index.js +1 -1
  199. package/dist/components/link/index.js +1 -1
  200. package/dist/components/link/link.d.ts +10 -1
  201. package/dist/components/link/link.d.ts.map +1 -1
  202. package/dist/components/link/social-url.d.ts +71 -0
  203. package/dist/components/link/social-url.d.ts.map +1 -0
  204. package/dist/components/map-view/index.js +1 -1
  205. package/dist/components/map-view/map-view.d.ts.map +1 -1
  206. package/dist/components/message-card/index.js +1 -1
  207. package/dist/components/message-tray/index.js +1 -1
  208. package/dist/components/nav-grid/index.js +1 -1
  209. package/dist/components/note-timeline/index.js +1 -1
  210. package/dist/components/notes-panel/index.js +1 -1
  211. package/dist/components/operator-hero/index.js +1 -1
  212. package/dist/components/operator-hero/operator-hero.d.ts +6 -0
  213. package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
  214. package/dist/components/patient-details/index.js +1 -1
  215. package/dist/components/patient-search/index.js +1 -1
  216. package/dist/components/patient-search/patient-search.d.ts.map +1 -1
  217. package/dist/components/patient-summary-card/index.js +1 -1
  218. package/dist/components/patient-table/index.js +1 -1
  219. package/dist/components/payment-card/index.js +1 -1
  220. package/dist/components/periodontal-diagnosis/index.js +1 -1
  221. package/dist/components/permission-matrix/index.js +1 -1
  222. package/dist/components/practice-profile-hero/index.js +1 -1
  223. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +6 -0
  224. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts.map +1 -1
  225. package/dist/components/practice-results/index.js +1 -1
  226. package/dist/components/practice-results/practice-results.d.ts +8 -2
  227. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  228. package/dist/components/product-hub-tray/index.js +1 -1
  229. package/dist/components/province-select/index.js +1 -1
  230. package/dist/components/public-footer/index.js +1 -1
  231. package/dist/components/public-footer/public-footer.d.ts +13 -1
  232. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  233. package/dist/components/public-footer/socials.d.ts +6 -5
  234. package/dist/components/public-footer/socials.d.ts.map +1 -1
  235. package/dist/components/reviews-panel/index.js +1 -1
  236. package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
  237. package/dist/components/rich-text-editor/index.js +1 -1
  238. package/dist/components/slot-grid/index.js +1 -1
  239. package/dist/components/slot-grid/slot-grid.d.ts +2 -0
  240. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
  241. package/dist/components/task-editor/index.js +1 -1
  242. package/dist/components/timeline/index.js +1 -1
  243. package/dist/components/voice-control-panel/index.js +1 -1
  244. package/dist/host-compat.css +1 -10
  245. package/dist/i18n/config.d.ts.map +1 -1
  246. package/dist/i18n/config.js +224 -96
  247. package/dist/i18n/config.js.map +1 -1
  248. package/dist/i18n/locales/ar.d.ts +3 -0
  249. package/dist/i18n/locales/ar.d.ts.map +1 -1
  250. package/dist/i18n/locales/ar.js +4 -1
  251. package/dist/i18n/locales/ar.js.map +1 -1
  252. package/dist/i18n/locales/de.d.ts +3 -0
  253. package/dist/i18n/locales/de.d.ts.map +1 -1
  254. package/dist/i18n/locales/de.js +4 -1
  255. package/dist/i18n/locales/de.js.map +1 -1
  256. package/dist/i18n/locales/el.d.ts +3 -0
  257. package/dist/i18n/locales/el.d.ts.map +1 -1
  258. package/dist/i18n/locales/el.js +4 -1
  259. package/dist/i18n/locales/el.js.map +1 -1
  260. package/dist/i18n/locales/en.d.ts +3 -0
  261. package/dist/i18n/locales/en.d.ts.map +1 -1
  262. package/dist/i18n/locales/en.js +3 -0
  263. package/dist/i18n/locales/en.js.map +1 -1
  264. package/dist/i18n/locales/es.d.ts +3 -0
  265. package/dist/i18n/locales/es.d.ts.map +1 -1
  266. package/dist/i18n/locales/es.js +4 -1
  267. package/dist/i18n/locales/es.js.map +1 -1
  268. package/dist/i18n/locales/fr.d.ts +3 -0
  269. package/dist/i18n/locales/fr.d.ts.map +1 -1
  270. package/dist/i18n/locales/fr.js +4 -1
  271. package/dist/i18n/locales/fr.js.map +1 -1
  272. package/dist/i18n/locales/hi.d.ts +3 -0
  273. package/dist/i18n/locales/hi.d.ts.map +1 -1
  274. package/dist/i18n/locales/hi.js +4 -1
  275. package/dist/i18n/locales/hi.js.map +1 -1
  276. package/dist/i18n/locales/it.d.ts +3 -0
  277. package/dist/i18n/locales/it.d.ts.map +1 -1
  278. package/dist/i18n/locales/it.js +4 -1
  279. package/dist/i18n/locales/it.js.map +1 -1
  280. package/dist/i18n/locales/ja.d.ts +3 -0
  281. package/dist/i18n/locales/ja.d.ts.map +1 -1
  282. package/dist/i18n/locales/ja.js +4 -1
  283. package/dist/i18n/locales/ja.js.map +1 -1
  284. package/dist/i18n/locales/nl.d.ts +3 -0
  285. package/dist/i18n/locales/nl.d.ts.map +1 -1
  286. package/dist/i18n/locales/nl.js +4 -1
  287. package/dist/i18n/locales/nl.js.map +1 -1
  288. package/dist/i18n/locales/pl.d.ts +3 -0
  289. package/dist/i18n/locales/pl.d.ts.map +1 -1
  290. package/dist/i18n/locales/pl.js +4 -1
  291. package/dist/i18n/locales/pl.js.map +1 -1
  292. package/dist/i18n/locales/pt.d.ts +3 -0
  293. package/dist/i18n/locales/pt.d.ts.map +1 -1
  294. package/dist/i18n/locales/pt.js +4 -1
  295. package/dist/i18n/locales/pt.js.map +1 -1
  296. package/dist/i18n/locales/ro.d.ts +3 -0
  297. package/dist/i18n/locales/ro.d.ts.map +1 -1
  298. package/dist/i18n/locales/ro.js +4 -1
  299. package/dist/i18n/locales/ro.js.map +1 -1
  300. package/dist/i18n/locales/ru.d.ts +3 -0
  301. package/dist/i18n/locales/ru.d.ts.map +1 -1
  302. package/dist/i18n/locales/ru.js +4 -1
  303. package/dist/i18n/locales/ru.js.map +1 -1
  304. package/dist/i18n/locales/sq.d.ts +3 -0
  305. package/dist/i18n/locales/sq.d.ts.map +1 -1
  306. package/dist/i18n/locales/sq.js +4 -1
  307. package/dist/i18n/locales/sq.js.map +1 -1
  308. package/dist/i18n/locales/sv.d.ts +3 -0
  309. package/dist/i18n/locales/sv.d.ts.map +1 -1
  310. package/dist/i18n/locales/sv.js +4 -1
  311. package/dist/i18n/locales/sv.js.map +1 -1
  312. package/dist/i18n/locales/tr.d.ts +3 -0
  313. package/dist/i18n/locales/tr.d.ts.map +1 -1
  314. package/dist/i18n/locales/tr.js +4 -1
  315. package/dist/i18n/locales/tr.js.map +1 -1
  316. package/dist/i18n/locales/zh.d.ts +3 -0
  317. package/dist/i18n/locales/zh.d.ts.map +1 -1
  318. package/dist/i18n/locales/zh.js +4 -1
  319. package/dist/i18n/locales/zh.js.map +1 -1
  320. package/dist/index.js +68 -68
  321. package/dist/locales/ar.json +4 -1
  322. package/dist/locales/de.json +4 -1
  323. package/dist/locales/el.json +4 -1
  324. package/dist/locales/en.json +3 -0
  325. package/dist/locales/es.json +4 -1
  326. package/dist/locales/fr.json +4 -1
  327. package/dist/locales/hi.json +4 -1
  328. package/dist/locales/it.json +4 -1
  329. package/dist/locales/ja.json +4 -1
  330. package/dist/locales/nl.json +4 -1
  331. package/dist/locales/pl.json +4 -1
  332. package/dist/locales/pt.json +4 -1
  333. package/dist/locales/ro.json +4 -1
  334. package/dist/locales/ru.json +4 -1
  335. package/dist/locales/sq.json +4 -1
  336. package/dist/locales/sv.json +4 -1
  337. package/dist/locales/tr.json +4 -1
  338. package/dist/locales/zh.json +4 -1
  339. package/dist/patterns/alia-assistant/index.js +1 -1
  340. package/dist/patterns/anamnesis/index.js +1 -1
  341. package/dist/patterns/calendar/index.js +1 -1
  342. package/dist/patterns/error-page/error-page-english.d.ts +71 -0
  343. package/dist/patterns/error-page/error-page-english.d.ts.map +1 -0
  344. package/dist/patterns/error-page/error-page.d.ts.map +1 -1
  345. package/dist/patterns/error-page/index.js +1 -1
  346. package/dist/patterns/login-form/index.js +1 -1
  347. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  348. package/dist/patterns/registration-form/index.js +1 -1
  349. package/dist/patterns/signature-request/index.js +1 -1
  350. package/dist/patterns/signed-out-frame/index.js +1 -1
  351. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  352. package/dist/tokens.css +1 -1
  353. package/package.json +1 -1
  354. package/dist/_chunks/address-autocomplete-bPR2mNBt.js +0 -498
  355. package/dist/_chunks/address-autocomplete-bPR2mNBt.js.map +0 -1
  356. package/dist/_chunks/autocomplete-CnB1mHGc.js +0 -539
  357. package/dist/_chunks/autocomplete-CnB1mHGc.js.map +0 -1
  358. package/dist/_chunks/avatar-BPiPL7ND.js.map +0 -1
  359. package/dist/_chunks/booking-C0FoW8Yx.js +0 -4336
  360. package/dist/_chunks/booking-C0FoW8Yx.js.map +0 -1
  361. package/dist/_chunks/checkbox-BjDv-r3o.js.map +0 -1
  362. package/dist/_chunks/combobox-CDPm_n0p.js.map +0 -1
  363. package/dist/_chunks/contact-profile-card-Da1vmJQI.js.map +0 -1
  364. package/dist/_chunks/error-page-Bhai-spN.js +0 -344
  365. package/dist/_chunks/error-page-Bhai-spN.js.map +0 -1
  366. package/dist/_chunks/header-settings-BVhjndtV.js.map +0 -1
  367. package/dist/_chunks/index.modern-BeRXQVdc.js.map +0 -1
  368. package/dist/_chunks/languages-CZqBaPwI.js.map +0 -1
  369. package/dist/_chunks/link-N5_YpLtm.js +0 -138
  370. package/dist/_chunks/link-N5_YpLtm.js.map +0 -1
  371. package/dist/_chunks/map-view-Bvi06RVh.js.map +0 -1
  372. package/dist/_chunks/operator-hero-6aAIQaFZ.js.map +0 -1
  373. package/dist/_chunks/patient-search-CCOUZABE.js +0 -1196
  374. package/dist/_chunks/patient-search-CCOUZABE.js.map +0 -1
  375. package/dist/_chunks/practice-profile-hero-qfrsFQI_.js.map +0 -1
  376. package/dist/_chunks/practice-results-B61krlwu.js.map +0 -1
  377. package/dist/_chunks/public-footer-CXOrdAaS.js +0 -568
  378. package/dist/_chunks/public-footer-CXOrdAaS.js.map +0 -1
  379. package/dist/_chunks/reviews-panel-UzQQLb-z.js.map +0 -1
  380. package/dist/_chunks/slot-grid-Bb13H9Rl.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox-D-gpgEDy.js","sources":["../../src/components/combobox/combobox.agent.ts","../../src/components/combobox/combobox.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { ComboboxHandle } from './combobox';\n\nexport const comboboxAgent: AgentAdapter<ComboboxHandle> = {\n id: 'combobox',\n // Persisted single choice (value state + set_value) → select_single + set_value,\n // plus type-to-filter and open/close of the option list.\n capabilities: ['select_single', 'set_value', 'filter', 'open', 'close'],\n state: {\n value: {\n type: 'string | null',\n descriptionKey: 'ui.agent.combobox.state.value',\n description:\n 'Currently-selected option value, or null when nothing is selected.',\n read: (handle) => handle.getValue(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.combobox.state.query',\n description: 'Current filter query in the combobox input.',\n read: (handle) => handle.getQuery(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.combobox.state.isOpen',\n description: 'True when the option list is visible.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n set_value: {\n // Persists the user's chosen option — reversible via the same UI.\n safety: 'write',\n argsType: '{ value: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n value: {\n type: ['string', 'null'],\n description: 'Option value to select, or null to clear.',\n },\n },\n required: ['value'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.combobox.actions.setValue',\n description: 'Set the selected value programmatically.',\n examples: [{ args: { value: 'it' }, note: 'Select the \"it\" option.' }],\n invoke: (handle, args: { value: string | null }) => {\n handle.setValue(args.value);\n },\n },\n apply_filter: {\n // Pure ephemeral filter of the visible options — no persisted change.\n safety: 'read',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: { type: 'string', description: 'Filter text for the list.' },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.combobox.actions.applyFilter',\n description: 'Set the filter query for the option list.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear_selection: {\n // Discards the persisted choice — destructive (loses the selection).\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.combobox.actions.clearSelection',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.combobox.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.combobox.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'combobox' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Each option emits its value as data-option-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport * as Popover from '@radix-ui/react-popover';\nimport { Command, defaultFilter, useCommandState } from 'cmdk';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n useFormFieldControlRef,\n} from '../form-field/form-field-context';\nimport type { OptionShape } from '../_shared/option';\nimport { composeRefs } from '../_shared/compose-refs';\nimport { normalizeDiacritics } from '../_shared/normalize-diacritics';\nimport { groupOptions } from '../_shared/group-options';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport {\n OPTION_BODY_CLASSES,\n OPTION_END_CLASSES,\n OPTION_LABEL_ROW_CLASSES,\n optionDescriptionVariants,\n optionLabelVariants,\n} from '../_shared/option-row';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport {\n INPUT_SURFACE_CHROME,\n INPUT_SURFACE_HEIGHT,\n INPUT_SURFACE_PADDING_X,\n INPUT_SURFACE_TONE,\n} from '../_shared/input-surface';\nimport { useAgentRegistration } from '../../agent';\nimport { comboboxAgent } from './combobox.agent';\n\nexport type ComboboxOption<T extends string = string> = OptionShape<T>;\n\n// Curated agent-readiness handle — see combobox.agent.ts.\nexport interface ComboboxHandle {\n getValue: () => string | null;\n getQuery: () => string;\n getIsOpen: () => boolean;\n setValue: (value: string | null) => void;\n setQuery: (query: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n}\n\nexport interface ComboboxProps<T extends string = string> {\n options: ComboboxOption<T>[];\n value?: T | '';\n defaultValue?: T;\n onValueChange?: (value: T | '') => void;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n /** Custom score. All three arguments are diacritics-stripped and\n * lower-cased. `label` is the option's label ('' for the create row).\n * The filter is not consulted while the query is still the chosen\n * option's own label: then every option shows. */\n filter?: (value: string, search: string, label: string) => number;\n allowCreate?: boolean;\n onCreate?: (value: string) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Query typed by the user (including IME commits and Clear), or set\n * through the agent handle. Selection and closing do not emit queries.\n * Pair with `filter` for host-provided results and `emptyMessage` for\n * their state. This callback also fires when there are no options. */\n onQueryChange?: (query: string) => void;\n emptyMessage?: ReactNode;\n 'aria-label'?: string;\n /**\n * Invalid-state fallback for use OUTSIDE a `<FormField>` (e.g. an inline\n * editor). Inside a FormField the context wins. Drives the error border and\n * the input's `aria-invalid`.\n */\n 'aria-invalid'?: boolean;\n /**\n * Error-message id fallback for use OUTSIDE a `<FormField>`. Inside a\n * FormField the context's `describedBy` wins.\n */\n 'aria-describedby'?: string;\n /**\n * The input's HTML `autocomplete` token (e.g. `country`,\n * `address-level1`, WCAG 2.1 §1.3.5). With a token, the browser can fill\n * the field from a saved address: text it fills in is matched to an\n * option (see `matchAutofill`) and that option is chosen.\n */\n autoComplete?: string;\n /**\n * Which option the browser's filled-in text means: return its `value`,\n * or `undefined` for none. Used only with `autoComplete`. The default\n * matches an option's value or label, ignoring case and accents.\n */\n matchAutofill?: (text: string) => string | undefined;\n /**\n * Let a long option label wrap onto a second line instead of ending in an\n * ellipsis. Longer still, it is clipped after two lines. Off by default.\n * An option's `description` always sits on its own line under the label.\n */\n wrapOptionLabels?: boolean;\n className?: string;\n}\n\nconst comboboxInputVariants = cva(\n [\n 'ds:peer ds:w-full ds:bg-transparent ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:outline-none ds:border-0',\n 'ds:disabled:cursor-not-allowed',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst comboboxWrapperVariants = cva(\n [\n 'ds:group ds:relative ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)] ds:w-full',\n INPUT_SURFACE_CHROME,\n ].join(' '),\n {\n variants: {\n size: {\n sm: `${INPUT_SURFACE_HEIGHT.sm} ${INPUT_SURFACE_PADDING_X.sm}`,\n md: `${INPUT_SURFACE_HEIGHT.md} ${INPUT_SURFACE_PADDING_X.md}`,\n lg: `${INPUT_SURFACE_HEIGHT.lg} ${INPUT_SURFACE_PADDING_X.lg}`,\n },\n tone: INPUT_SURFACE_TONE,\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst comboboxContentVariants = cva(\n [\n 'ds:z-[var(--z-popover)] ds:overflow-hidden ds:w-[var(--radix-popover-trigger-width)]',\n // A guard: the list is as wide as the field, so only a field that is\n // itself wider than the screen could take it past the edge.\n 'ds:max-w-[var(--radix-popover-content-available-width)]',\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-[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);\n\nconst comboboxItemVariants = cva(\n [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n MENU_ROW_HIGHLIGHT.selected,\n 'ds:aria-disabled:pointer-events-none ds:aria-disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:min-h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:min-h-12 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst comboboxGroupHeadingClasses = [\n 'ds:ps-3 ds:pe-3 ds:py-1.5',\n 'type-eyebrow ds:text-muted-foreground',\n].join(' ');\n\nconst comboboxListClasses =\n 'ds:max-h-[18rem] ds:overflow-y-auto ds:p-[var(--spacing-xs)]';\n\nconst comboboxEmptyClasses =\n 'ds:ps-3 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground';\n\nconst iconSizeBySize = {\n sm: 'ds:size-3.5',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n} as const;\n\ninterface CreateRowProps {\n search: string;\n label: string;\n iconClass: string;\n size: 'sm' | 'md' | 'lg';\n onSelect: (value: string) => void;\n}\n\nfunction ComboboxCreateRow({\n search,\n label,\n iconClass,\n size,\n onSelect,\n}: CreateRowProps): ReactElement | null {\n // Only surface the create row when no existing item matches the query.\n const filteredCount = useCommandState((state) => state.filtered.count);\n if (filteredCount > 0) return null;\n return (\n <Command.Item\n value={`__combobox-create__${search}`}\n keywords={[]}\n forceMount\n onSelect={() => onSelect(search)}\n className={comboboxItemVariants({ size })}\n >\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ds:justify-center ${iconClass}`}\n />\n <span className=\"ds:flex-1 ds:truncate\">{label}</span>\n </Command.Item>\n );\n}\n\nconst ComboboxImpl = forwardRef<HTMLInputElement, ComboboxProps>(\n function Combobox(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n clearable = false,\n disabled,\n readOnly,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n filter: externalFilter,\n allowCreate = false,\n onCreate,\n open: openProp,\n onOpenChange,\n onQueryChange,\n emptyMessage,\n className,\n 'aria-label': ariaLabel,\n 'aria-invalid': ariaInvalid,\n 'aria-describedby': ariaDescribedBy,\n autoComplete,\n matchAutofill,\n wrapOptionLabels = false,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [currentValueRaw, setComboboxValue] = useControllableState<string>({\n value,\n defaultValue: defaultValue ?? '',\n onChange: onValueChange as ((next: string) => void) | undefined,\n });\n const currentValue = currentValueRaw ?? '';\n\n const selectedOption = useMemo(\n () => options.find((o) => o.value === currentValue),\n [options, currentValue],\n );\n const selectedLabel = selectedOption?.label ?? '';\n\n const [search, setSearch] = useState<string>(selectedLabel);\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpenControlled = openProp !== undefined;\n const open = isOpenControlled ? openProp : internalOpen;\n const composingRef = useRef(false);\n /* The query is still the chosen option's own label: nothing typed yet. */\n const untouched = selectedLabel !== '' && search === selectedLabel;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const anchorRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n const [mountedList, setMountedList] = useState<HTMLDivElement | null>(null);\n\n /* cmdk writes its own id on the input and focuses it by that id, so\n the field's label follows that id. */\n useFormFieldControlRef(ctx, inputRef);\n\n /* cmdk's relevance sort moves DOM nodes. Remounting the list once the\n query is untouched again puts the options back in source order. */\n const [listEpoch, setListEpoch] = useState(0);\n const listMountedRef = useRef(false);\n useIsomorphicLayoutEffect(() => {\n /* The first render is already in source order. */\n if (!listMountedRef.current) {\n listMountedRef.current = true;\n return;\n }\n if (untouched) setListEpoch((n) => n + 1);\n }, [untouched]);\n\n /* Whether the user has reached a row since the list opened or the\n query changed: arrow keys, Home, End or the pointer. */\n const navigatedRef = useRef(false);\n useEffect(() => {\n navigatedRef.current = false;\n }, [search, open]);\n /* True while the kit itself makes the chosen option the active row. */\n const activatingRef = useRef(false);\n\n /* Opening on an untouched value shows the chosen option mid-list.\n Rect maths rather than scrollIntoView, which would scroll the page. */\n const centredListRef = useRef<HTMLDivElement | null>(null);\n useIsomorphicLayoutEffect(() => {\n const list = listRef.current;\n if (list !== mountedList) return;\n if (!open || !untouched || !currentValue) return;\n /* Only on opening: once per mounted list. A value that changes while\n the list is open must not scroll it or reset the active row. */\n if (list === centredListRef.current) return;\n const item = list?.querySelector<HTMLElement>(\n `[data-option-id=\"${CSS.escape(currentValue)}\"]`,\n );\n if (!list || !item) return;\n centredListRef.current = list;\n const centrePickedOption = () => {\n if (navigatedRef.current) return;\n const listRect = list.getBoundingClientRect();\n const itemRect = item.getBoundingClientRect();\n /* The opening zoom scales both rects; scrollTop is unscaled. */\n const scale =\n list.offsetHeight > 0 ? listRect.height / list.offsetHeight : 1;\n const offset = (itemRect.top - listRect.top) / (scale || 1);\n const itemHeight = itemRect.height / (scale || 1);\n list.scrollTop += offset - (list.clientHeight - itemHeight) / 2;\n };\n centrePickedOption();\n // cmdk measures a newly mounted list on the next frame. Centre it\n // again after that measurement without scrolling the page.\n const frame = requestAnimationFrame(centrePickedOption);\n /* The chosen option becomes the active row, so the arrow keys move on\n from it. cmdk's pointer path sets the row and the input's\n aria-activedescendant without scrolling. */\n activatingRef.current = true;\n try {\n item.dispatchEvent(new PointerEvent('pointermove', { bubbles: true }));\n } finally {\n activatingRef.current = false;\n }\n // A remounted option has a new id even when cmdk keeps the value.\n inputRef.current?.setAttribute('aria-activedescendant', item.id);\n return () => cancelAnimationFrame(frame);\n }, [open, mountedList, untouched, currentValue]);\n\n const autofillToken =\n autoComplete && autoComplete !== 'off' ? autoComplete : undefined;\n const syncPopupAria = useCallback(() => {\n const input = inputRef.current;\n if (!input) return;\n input.setAttribute('aria-expanded', String(open));\n if (open && listRef.current?.id) {\n input.setAttribute('aria-controls', listRef.current.id);\n } else if (!open) {\n input.removeAttribute('aria-controls');\n input.removeAttribute('aria-activedescendant');\n }\n /* cmdk writes autocomplete=\"off\" over the prop on every render. */\n if (autofillToken) input.setAttribute('autocomplete', autofillToken);\n }, [open, autofillToken]);\n useIsomorphicLayoutEffect(syncPopupAria);\n const setListRef = useCallback(\n (node: HTMLDivElement | null) => {\n listRef.current = node;\n syncPopupAria();\n if (node) setMountedList(node);\n },\n [syncPopupAria],\n );\n\n /* Text the browser fills in arrives as an input event that is not\n typing: no input type, or a replacement. The listener sits on the\n input itself, so it runs before React hands the change to cmdk. */\n const autofilledRef = useRef(false);\n useEffect(() => {\n const input = inputRef.current;\n if (!input || !autofillToken) return;\n const onInput = (event: Event) => {\n const inputType = (event as InputEvent).inputType;\n autofilledRef.current =\n !inputType || inputType === 'insertReplacementText';\n };\n input.addEventListener('input', onInput);\n return () => input.removeEventListener('input', onInput);\n }, [autofillToken]);\n\n useEffect(() => {\n if (!open) {\n setSearch(selectedLabel);\n }\n }, [selectedLabel, open]);\n\n const effectiveDisabled =\n (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveReadOnly = Boolean(readOnly);\n const effectiveRequired =\n (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : Boolean(ariaInvalid);\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy =\n inFormField && ctx.describedBy ? ctx.describedBy : ariaDescribedBy;\n\n const resolvedPlaceholder =\n placeholder ?? t('inputs.combobox.placeholder', 'Search…');\n\n const filterFn = useMemo(\n () => (candidate: string, searchStr: string, keywords?: string[]) => {\n if (composingRef.current) return 1;\n /* Untouched query: every option shows, whatever the filter says. */\n if (selectedLabel !== '' && searchStr === selectedLabel) return 1;\n const normalizedCandidate = normalizeDiacritics(candidate);\n const normalizedSearch = normalizeDiacritics(searchStr);\n const normalizedKeywords = keywords?.map(normalizeDiacritics);\n if (externalFilter) {\n return externalFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords?.[0] ?? '',\n );\n }\n return defaultFilter(\n normalizedCandidate,\n normalizedSearch,\n normalizedKeywords,\n );\n },\n [externalFilter, selectedLabel],\n );\n\n const commit = (next: string) => {\n setComboboxValue(next);\n };\n\n const setOpen = (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n const handleSelect = (optValue: string) => {\n const option = options.find((o) => o.value === optValue);\n commit(optValue);\n setSearch(option?.label ?? '');\n setOpen(false);\n };\n\n const handleCreate = (nextValue: string) => {\n onCreate?.(nextValue);\n setOpen(false);\n };\n\n const optionForAutofill = (text: string) => {\n const wanted = normalizeDiacritics(text.trim());\n if (!wanted) return undefined;\n const match = matchAutofill\n ? matchAutofill(text.trim())\n : options.find(\n (o) =>\n normalizeDiacritics(o.value) === wanted ||\n normalizeDiacritics(o.label) === wanted,\n )?.value;\n return options.find((o) => o.value === match && !o.disabled);\n };\n\n const handleSearchChange = (next: string) => {\n if (effectiveReadOnly) return;\n if (autofilledRef.current) {\n autofilledRef.current = false;\n const option = optionForAutofill(next);\n if (option) {\n commit(option.value);\n setSearch(option.label);\n if (open) setOpen(false);\n return;\n }\n /* Filled from another field and no option means it: the list\n must not open over a field the user is not in. */\n if (document.activeElement !== inputRef.current) {\n setSearch(selectedLabel);\n return;\n }\n }\n setSearch(next);\n if (!composingRef.current) onQueryChange?.(next);\n if (!open && next.length > 0 && !composingRef.current) {\n setOpen(true);\n }\n };\n\n const handleFocus = () => {\n if (!effectiveDisabled && !effectiveReadOnly) setOpen(true);\n };\n\n /* A pick keeps focus in the input, so no focus event follows. A\n click on the focused input reopens the list instead. */\n const handleClick = () => {\n if (!open && !effectiveDisabled && !effectiveReadOnly) setOpen(true);\n };\n\n const handleCompositionStart = () => {\n composingRef.current = true;\n };\n\n const handleCompositionEnd = () => {\n composingRef.current = false;\n if (effectiveReadOnly) return;\n const next = inputRef.current?.value ?? '';\n setSearch(next);\n onQueryChange?.(next);\n if (next.length > 0) setOpen(true);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (\n (event.key === 'ArrowDown' || event.key === 'ArrowUp') &&\n !open &&\n !effectiveDisabled &&\n !effectiveReadOnly\n ) {\n /* The arrow that opens the list only opens it. The next arrow\n moves on from the chosen option, or from the top. */\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'Home' ||\n event.key === 'End' ||\n /* cmdk's own Ctrl+N, J, P and K move the highlight too. */\n (event.ctrlKey && ['n', 'j', 'p', 'k'].includes(event.key))\n ) {\n navigatedRef.current = true;\n }\n /* Handled before cmdk sees it: Enter commits only a row the user\n reached, never from a closed list. On an untouched open the lit\n row is the chosen option, so keeping the value matches it. */\n if (\n event.key === 'Enter' &&\n (!open || (!navigatedRef.current && (untouched || search === '')))\n ) {\n event.preventDefault();\n if (open) setOpen(false);\n return;\n }\n if (event.key === 'Escape' && open) {\n event.preventDefault();\n setOpen(false);\n setSearch(selectedLabel);\n }\n };\n\n const handleClear = (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n commit('');\n setSearch('');\n onQueryChange?.('');\n setOpen(true);\n inputRef.current?.focus();\n };\n\n const handleOpenChange = (next: boolean) => {\n if (effectiveReadOnly && next) return;\n setOpen(next);\n if (!next) setSearch(selectedLabel);\n };\n\n // Agent handle — refs mirror state for fresh reads.\n const valueRef = useRef<string>(currentValue);\n useEffect(() => {\n valueRef.current = currentValue;\n }, [currentValue]);\n const searchRef = useRef<string>(search);\n useEffect(() => {\n searchRef.current = search;\n }, [search]);\n const openRef = useRef<boolean>(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const setOpenStable = useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isOpenControlled, onOpenChange],\n );\n\n const agentHandle = useMemo<ComboboxHandle>(\n () => ({\n getValue: () => valueRef.current || null,\n getQuery: () => searchRef.current,\n getIsOpen: () => openRef.current,\n setValue: (next) => {\n const v = next ?? '';\n setComboboxValue(v);\n const opt = options.find((o) => o.value === v);\n setSearch(opt?.label ?? '');\n },\n setQuery: (query) => {\n setSearch(query);\n onQueryChange?.(query);\n },\n clear: () => {\n setComboboxValue('');\n setSearch('');\n onQueryChange?.('');\n },\n open: () => setOpenStable(true),\n close: () => setOpenStable(false),\n }),\n [setComboboxValue, options, setOpenStable, onQueryChange],\n );\n useAgentRegistration(comboboxAgent, agentHandle, id);\n\n const showClear =\n clearable &&\n Boolean(currentValue) &&\n !effectiveDisabled &&\n !effectiveReadOnly;\n\n const groups = groupOptions(options);\n const iconClass = iconSizeBySize[size];\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange}>\n <Command\n filter={filterFn}\n shouldFilter\n loop\n // cmdk points the input's `aria-labelledby` at its own hidden\n // `<label cmdk-label>`, whose text is this `label`: it is the\n // input's accessible name. The caller's `aria-label` wins, then\n // the FormField's label. The placeholder is the last resort, so\n // the input is never unnamed.\n label={ariaLabel ?? (ctx.label || resolvedPlaceholder)}\n className=\"ds:w-full\"\n >\n <Popover.Anchor asChild>\n <div\n ref={anchorRef}\n className={comboboxWrapperVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n data-component=\"combobox\"\n data-component-id={id}\n >\n <Command.Input\n ref={composeRefs(ref, inputRef)}\n value={search}\n onValueChange={handleSearchChange}\n // The picked label shows in the field: keep its direction.\n dir={selectedOption?.dir}\n name={name}\n placeholder={resolvedPlaceholder}\n disabled={effectiveDisabled}\n readOnly={effectiveReadOnly}\n required={effectiveRequired}\n autoComplete={autoComplete}\n // cmdk writes `id` and `aria-labelledby` after the props it\n // is given, so neither can be set here: the name goes through\n // the Command root's `label` above.\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n onFocus={handleFocus}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n className={comboboxInputVariants({ size })}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={t('inputs.combobox.clear', 'Clear selection')}\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\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:size-4 ds:shrink-0',\n /* A 24px hit area with no visual change. */\n \"ds:relative ds:before:absolute ds:before:inset-[calc(var(--spacing-xs)*-1)] ds:before:content-['']\",\n ].join(' ')}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n ) : null}\n </div>\n </Popover.Anchor>\n <Popover.Portal forceMount>\n {open ? (\n <Popover.Content\n // Radix Popover.Content carries `role=\"dialog\"`; axe's\n // `aria-dialog-name` rule requires a name. Surface the\n // surrounding combobox label so the popover is named after\n // the field it serves (or fall back to the i18n default).\n aria-label={\n ariaLabel ?? t('inputs.combobox.popupLabel', 'Options')\n }\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n onInteractOutside={(event) => {\n const target = event.target as Node | null;\n if (target && anchorRef.current?.contains(target)) {\n event.preventDefault();\n }\n }}\n sideOffset={4}\n align=\"start\"\n className={comboboxContentVariants()}\n >\n <Command.List\n key={listEpoch}\n ref={setListRef}\n // cmdk names the listbox \"Suggestions\" in English otherwise.\n label={ariaLabel ?? (ctx.label || resolvedPlaceholder)}\n className={comboboxListClasses}\n onPointerMove={() => {\n if (!activatingRef.current) navigatedRef.current = true;\n }}\n /* The list is focusable: without this a pointer pick\n moves focus into it, then loses it to the page when\n the list hides. */\n onMouseDown={(event) => event.preventDefault()}\n >\n <Command.Empty className={comboboxEmptyClasses}>\n {/* cmdk owns the presentational wrapper. This unavailable\n option gives an empty list valid semantics without\n registering a selectable cmdk item. */}\n <div\n role=\"option\"\n aria-selected={false}\n aria-disabled=\"true\"\n >\n {emptyMessage ??\n t('inputs.combobox.empty', 'No results found')}\n </div>\n </Command.Empty>\n {groups.map(({ group, items }, groupIndex) => {\n const body = items.map((option) => {\n const isSelected = option.value === currentValue;\n return (\n <Command.Item\n /* The label is in the key because cmdk only reads\n keywords when the value changes. */\n key={`${option.value}\\u0000${option.label}`}\n value={option.value}\n data-option-id={option.value}\n keywords={[option.label]}\n disabled={option.disabled}\n onSelect={handleSelect}\n className={comboboxItemVariants({ size })}\n >\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ds:justify-center ${iconClass}`}\n >\n {isSelected ? (\n <Check className={iconClass} />\n ) : null}\n </span>\n {option.startAdornment ? (\n // Decorative by contract — the option's accessible\n // name comes from its label. Hide so a text-bearing\n // adornment can't leak into the computed name.\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:shrink-0\"\n >\n {option.startAdornment}\n </span>\n ) : null}\n {option.description || wrapOptionLabels ? (\n // Stacked: the label and its end content on one\n // row, the description on a line of its own\n // under them. In this DOM order the option's\n // name reads label, end content, description.\n <span\n className={`${OPTION_BODY_CLASSES} ds:py-[var(--spacing-xs)]`}\n >\n <span className={OPTION_LABEL_ROW_CLASSES}>\n <span\n dir={option.dir}\n className={optionLabelVariants({\n wrap: wrapOptionLabels,\n className: 'ds:flex-1',\n })}\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Announced, as below.\n <span className={OPTION_END_CLASSES}>\n {option.endContent}\n </span>\n ) : null}\n </span>\n {option.description ? (\n <span\n className={optionDescriptionVariants({\n tone: option.descriptionTone,\n })}\n >\n {option.description}\n </span>\n ) : null}\n </span>\n ) : (\n <>\n <span\n dir={option.dir}\n className=\"ds:flex-1 ds:truncate\"\n >\n {option.label}\n </span>\n {option.endContent ? (\n // Deliberately NOT aria-hidden — unlike\n // `startAdornment`, this slot carries meaning\n // (a price, a count) and must reach the\n // option's accessible name. `ms-auto` pins it\n // to the inline-end and flips under RTL.\n <span className=\"ds:inline-flex ds:items-center ds:ms-auto ds:shrink-0\">\n {option.endContent}\n </span>\n ) : null}\n </>\n )}\n </Command.Item>\n );\n });\n if (!group) {\n return (\n <Command.Group key={`group-${groupIndex}`}>\n {body}\n </Command.Group>\n );\n }\n return (\n <Command.Group\n key={`group-${group}`}\n heading={\n <span className={comboboxGroupHeadingClasses}>\n {group}\n </span>\n }\n >\n {body}\n </Command.Group>\n );\n })}\n {allowCreate && search.length > 0 ? (\n <ComboboxCreateRow\n search={search}\n label={t('inputs.combobox.create', 'Create \"{{value}}\"', {\n value: search,\n })}\n iconClass={iconClass}\n size={size}\n onSelect={handleCreate}\n />\n ) : null}\n </Command.List>\n </Popover.Content>\n ) : null}\n </Popover.Portal>\n </Command>\n </Popover.Root>\n );\n },\n);\nComboboxImpl.displayName = 'Combobox';\n\ninterface ComboboxComponent {\n <T extends string = string>(\n props: ComboboxProps<T> & { ref?: Ref<HTMLInputElement> },\n ): ReactElement | null;\n displayName?: string;\n}\n\n// forwardRef erases component-level generics, so we re-widen via a callable\n// interface to preserve the `<T extends string>` signature at the call site.\nexport const Combobox = ComboboxImpl as unknown as ComboboxComponent;\n\nexport {\n comboboxInputVariants,\n comboboxWrapperVariants,\n comboboxContentVariants,\n comboboxItemVariants,\n};\n"],"names":["comboboxAgent","handle","args","comboboxInputVariants","cva","comboboxWrapperVariants","INPUT_SURFACE_CHROME","INPUT_SURFACE_HEIGHT","INPUT_SURFACE_PADDING_X","INPUT_SURFACE_TONE","comboboxContentVariants","comboboxItemVariants","MENU_ROW_HIGHLIGHT","comboboxGroupHeadingClasses","comboboxListClasses","comboboxEmptyClasses","iconSizeBySize","ComboboxCreateRow","search","label","iconClass","size","onSelect","useCommandState","state","jsxs","Command","jsx","ComboboxImpl","forwardRef","options","value","defaultValue","onValueChange","placeholder","clearable","disabled","readOnly","required","name","id","tone","externalFilter","allowCreate","onCreate","openProp","onOpenChange","onQueryChange","emptyMessage","className","ariaLabel","ariaInvalid","ariaDescribedBy","autoComplete","matchAutofill","wrapOptionLabels","ref","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","currentValueRaw","setComboboxValue","useControllableState","currentValue","selectedOption","useMemo","o","selectedLabel","setSearch","useState","internalOpen","setInternalOpen","isOpenControlled","open","composingRef","useRef","untouched","inputRef","anchorRef","listRef","mountedList","setMountedList","useFormFieldControlRef","listEpoch","setListEpoch","listMountedRef","useIsomorphicLayoutEffect","n","navigatedRef","useEffect","activatingRef","centredListRef","list","item","centrePickedOption","listRect","itemRect","scale","offset","itemHeight","frame","_a","autofillToken","syncPopupAria","useCallback","input","setListRef","node","autofilledRef","onInput","event","inputType","effectiveDisabled","effectiveReadOnly","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","resolvedPlaceholder","filterFn","candidate","searchStr","keywords","normalizedCandidate","normalizeDiacritics","normalizedSearch","normalizedKeywords","defaultFilter","commit","next","setOpen","handleSelect","optValue","option","handleCreate","nextValue","optionForAutofill","text","wanted","match","handleSearchChange","handleFocus","handleClick","handleCompositionStart","handleCompositionEnd","handleKeyDown","handleClear","handleOpenChange","valueRef","searchRef","openRef","setOpenStable","agentHandle","v","opt","query","useAgentRegistration","showClear","groups","groupOptions","Popover","composeRefs","X","target","group","items","groupIndex","body","isSelected","Check","OPTION_BODY_CLASSES","OPTION_LABEL_ROW_CLASSES","optionLabelVariants","OPTION_END_CLASSES","optionDescriptionVariants","Fragment","Combobox"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsxs as t, jsx as a } from "react/jsx-runtime";
2
2
  import { forwardRef as r, Fragment as b } from "react";
3
3
  import { useTranslation as k } from "react-i18next";
4
4
  import { C as o } from "./card-BA4Ig_kn.js";
5
- import { L as p } from "./link-N5_YpLtm.js";
5
+ import { L as p } from "./link-DtCfnLnF.js";
6
6
  import { M as v } from "./map-pin-BaY37-Km.js";
7
7
  function L(s) {
8
8
  return `tel:${s.replace(/\(0\)/g, "").replace(/[^\d+]/g, "")}`;
@@ -118,4 +118,4 @@ const M = Object.assign(f, {
118
118
  export {
119
119
  M as C
120
120
  };
121
- //# sourceMappingURL=contact-card-Czu60UvU.js.map
121
+ //# sourceMappingURL=contact-card-ClvEDM9e.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contact-card-Czu60UvU.js","sources":["../../src/components/contact-card/contact-card.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MapPin } from 'lucide-react';\nimport { Card } from '../card/card';\nimport { Link } from '../link/link';\n\n/* ------------------------------------------------------------------ */\n/* Phone helper */\n/* ------------------------------------------------------------------ */\n\n/**\n * Strip everything that's not a digit or a leading `+` so the display\n * string (`\"+49 (0)89 51871478\"`) becomes a valid `tel:` URI target\n * (`\"tel:+498951871478\"`). RFC 3966 allows visual separators, but most\n * dialer apps still trip on them — collapsing to a strict E.164-ish\n * form is the safe default. The `(0)` trunk-prefix convention is\n * intentionally dropped: it's not a real digit in international\n * dialling, only a hint for in-country dialling.\n */\nfunction buildTelHref(display: string): string {\n const trunkStripped = display.replace(/\\(0\\)/g, '');\n const digits = trunkStripped.replace(/[^\\d+]/g, '');\n return `tel:${digits}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /**\n * Optional card heading rendered inside `Card.Header` as an `<h2>` —\n * e.g. \"Contact information\" above one or more office blocks. Omit\n * when the card sits inside a section that already has a heading.\n */\n title?: ReactNode;\n /**\n * `Card` variant. Defaults to `default` (subtle border on `--card`\n * surface) to match the marketing site's treatment.\n */\n variant?: 'default' | 'outlined' | 'elevated';\n children: ReactNode;\n}\n\nconst ContactCardRoot = forwardRef<HTMLElement, ContactCardProps>(\n ({ title, variant = 'default', className, children, ...props }, ref) => (\n <Card\n ref={ref}\n variant={variant}\n data-component=\"contact-card\"\n className={className}\n {...props}\n >\n {title !== undefined ? (\n <Card.Header>\n <h2 className=\"type-title-card ds:text-foreground\">{title}</h2>\n </Card.Header>\n ) : null}\n <Card.Body\n className={[\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-md)]',\n // Tighten the body padding-block-start when a header sits\n // above so the whole card reads as one cohesive block rather\n // than two stacked sections — Card.Header already paints\n // bottom padding via `pb-0` + Card.Body's `p-md`.\n ].join(' ')}\n >\n {children}\n </Card.Body>\n </Card>\n ),\n);\nContactCardRoot.displayName = 'ContactCard';\n\n/* ------------------------------------------------------------------ */\n/* Office */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardOfficeProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'children'\n> {\n /**\n * Office name — rendered as the block's bold label next to the pin\n * glyph. Not a heading element by default so a card with multiple\n * offices doesn't fragment the heading outline; pass `nameAs=\"h3\"`\n * (or `h4` etc.) when the consuming page wants a real heading.\n */\n name: ReactNode;\n /**\n * Address lines in document order, one per `<br>`-equivalent. Country\n * / region / postcode formatting is the consumer's responsibility —\n * the kit only inserts the line breaks.\n */\n lines: ReadonlyArray<string>;\n /**\n * VAT / tax-ID number. Rendered on its own line with the kit-owned\n * `ui.contactCard.vatNumberLabel` prefix.\n */\n vatNumber?: string;\n /**\n * Phone number as it should display (with separators, parens, trunk\n * prefix). The kit normalises this into a `tel:` URI internally —\n * see `buildTelHref` for the rules.\n */\n phone?: string;\n /** Heading element used for `name`. Defaults to a non-heading `<p>`. */\n nameAs?: 'p' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst ContactCardOffice = forwardRef<HTMLElement, ContactCardOfficeProps>(\n (\n { name, lines, vatNumber, phone, nameAs = 'p', className, ...props },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const NameTag = nameAs as 'p';\n\n return (\n <address\n ref={ref as React.Ref<HTMLElement>}\n data-component=\"contact-card-office\"\n className={[\n // `not-italic` overrides the UA default for `<address>` since\n // the kit's type ramp already encodes intent — italic would\n // double up with a heading-bold name and read as emphasis.\n 'ds:not-italic ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <NameTag className=\"ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] type-label ds:font-semibold ds:text-foreground\">\n <MapPin\n aria-hidden=\"true\"\n className=\"ds:size-[1.25em] ds:text-primary ds:shrink-0\"\n />\n <span>{name}</span>\n </NameTag>\n <div className=\"type-body-sm ds:text-foreground ds:[unicode-bidi:isolate]\">\n {lines.map((line, i) => (\n <Fragment key={i}>\n {line}\n {i < lines.length - 1 ? <br /> : null}\n </Fragment>\n ))}\n </div>\n {vatNumber ? (\n <div className=\"type-body-sm ds:text-muted-foreground\">\n <span className=\"ds:me-[var(--spacing-2xs)]\">\n {t('contactCard.vatNumberLabel')}\n </span>\n <span className=\"ds:[unicode-bidi:isolate]\">{vatNumber}</span>\n </div>\n ) : null}\n {phone ? (\n <div className=\"type-body-sm ds:text-muted-foreground ds:inline-flex ds:items-baseline ds:gap-[var(--spacing-2xs)] ds:flex-wrap\">\n <span>{t('contactCard.phoneLabel')}</span>\n <Link href={buildTelHref(phone)} intent=\"default\">\n <span className=\"ds:[unicode-bidi:isolate]\">{phone}</span>\n </Link>\n </div>\n ) : null}\n </address>\n );\n },\n);\nContactCardOffice.displayName = 'ContactCard.Office';\n\n/* ------------------------------------------------------------------ */\n/* Links */\n/* ------------------------------------------------------------------ */\n\nexport type ContactCardLinksProps = HTMLAttributes<HTMLUListElement>;\n\nconst ContactCardLinks = forwardRef<HTMLUListElement, ContactCardLinksProps>(\n ({ className, children, ...props }, ref) => (\n <ul\n ref={ref}\n data-component=\"contact-card-links\"\n className={[\n 'ds:m-0 ds:p-0 ds:list-none',\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </ul>\n ),\n);\nContactCardLinks.displayName = 'ContactCard.Links';\n\n/* ------------------------------------------------------------------ */\n/* Link */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardLinkProps {\n href: string;\n /**\n * Leading glyph. Rendered with `--primary` so the link list reads as\n * a coloured-icon menu (matches the marketing site's treatment).\n * Consumers pass a bare lucide-react icon; the kit handles colour /\n * size / aria-hidden.\n */\n icon: ReactNode;\n /** Open in a new tab — adds `target=\"_blank\"` and `rel` via `Link`. */\n external?: boolean;\n children: ReactNode;\n}\n\nconst ContactCardLink = forwardRef<HTMLLIElement, ContactCardLinkProps>(\n ({ href, icon, external, children }, ref) => (\n <li ref={ref} className=\"ds:m-0\">\n <Link\n href={href}\n external={external}\n // Wrap in a `text-primary` span so the lucide glyph (which uses\n // `currentColor`) picks up the brand tint without the consumer\n // having to thread a className through every icon. Link adds\n // its own aria-hidden wrapper + `[&_svg]:size-[1em]` outside\n // this; the colour cascades through.\n startIcon={<span className=\"ds:text-primary\">{icon}</span>}\n >\n {children}\n </Link>\n </li>\n ),\n);\nContactCardLink.displayName = 'ContactCard.Link';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const ContactCard = Object.assign(ContactCardRoot, {\n Office: ContactCardOffice,\n Links: ContactCardLinks,\n Link: ContactCardLink,\n});\n\nexport { buildTelHref as __buildTelHref };\n"],"names":["buildTelHref","display","ContactCardRoot","forwardRef","title","variant","className","children","props","ref","jsxs","Card","jsx","ContactCardOffice","name","lines","vatNumber","phone","nameAs","t","useTranslation","NameTag","MapPin","line","i","Fragment","Link","ContactCardLinks","ContactCardLink","href","icon","external","ContactCard"],"mappings":"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"}
1
+ {"version":3,"file":"contact-card-ClvEDM9e.js","sources":["../../src/components/contact-card/contact-card.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { MapPin } from 'lucide-react';\nimport { Card } from '../card/card';\nimport { Link } from '../link/link';\n\n/* ------------------------------------------------------------------ */\n/* Phone helper */\n/* ------------------------------------------------------------------ */\n\n/**\n * Strip everything that's not a digit or a leading `+` so the display\n * string (`\"+49 (0)89 51871478\"`) becomes a valid `tel:` URI target\n * (`\"tel:+498951871478\"`). RFC 3966 allows visual separators, but most\n * dialer apps still trip on them — collapsing to a strict E.164-ish\n * form is the safe default. The `(0)` trunk-prefix convention is\n * intentionally dropped: it's not a real digit in international\n * dialling, only a hint for in-country dialling.\n */\nfunction buildTelHref(display: string): string {\n const trunkStripped = display.replace(/\\(0\\)/g, '');\n const digits = trunkStripped.replace(/[^\\d+]/g, '');\n return `tel:${digits}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /**\n * Optional card heading rendered inside `Card.Header` as an `<h2>` —\n * e.g. \"Contact information\" above one or more office blocks. Omit\n * when the card sits inside a section that already has a heading.\n */\n title?: ReactNode;\n /**\n * `Card` variant. Defaults to `default` (subtle border on `--card`\n * surface) to match the marketing site's treatment.\n */\n variant?: 'default' | 'outlined' | 'elevated';\n children: ReactNode;\n}\n\nconst ContactCardRoot = forwardRef<HTMLElement, ContactCardProps>(\n ({ title, variant = 'default', className, children, ...props }, ref) => (\n <Card\n ref={ref}\n variant={variant}\n data-component=\"contact-card\"\n className={className}\n {...props}\n >\n {title !== undefined ? (\n <Card.Header>\n <h2 className=\"type-title-card ds:text-foreground\">{title}</h2>\n </Card.Header>\n ) : null}\n <Card.Body\n className={[\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-md)]',\n // Tighten the body padding-block-start when a header sits\n // above so the whole card reads as one cohesive block rather\n // than two stacked sections — Card.Header already paints\n // bottom padding via `pb-0` + Card.Body's `p-md`.\n ].join(' ')}\n >\n {children}\n </Card.Body>\n </Card>\n ),\n);\nContactCardRoot.displayName = 'ContactCard';\n\n/* ------------------------------------------------------------------ */\n/* Office */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardOfficeProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'children'\n> {\n /**\n * Office name — rendered as the block's bold label next to the pin\n * glyph. Not a heading element by default so a card with multiple\n * offices doesn't fragment the heading outline; pass `nameAs=\"h3\"`\n * (or `h4` etc.) when the consuming page wants a real heading.\n */\n name: ReactNode;\n /**\n * Address lines in document order, one per `<br>`-equivalent. Country\n * / region / postcode formatting is the consumer's responsibility —\n * the kit only inserts the line breaks.\n */\n lines: ReadonlyArray<string>;\n /**\n * VAT / tax-ID number. Rendered on its own line with the kit-owned\n * `ui.contactCard.vatNumberLabel` prefix.\n */\n vatNumber?: string;\n /**\n * Phone number as it should display (with separators, parens, trunk\n * prefix). The kit normalises this into a `tel:` URI internally —\n * see `buildTelHref` for the rules.\n */\n phone?: string;\n /** Heading element used for `name`. Defaults to a non-heading `<p>`. */\n nameAs?: 'p' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst ContactCardOffice = forwardRef<HTMLElement, ContactCardOfficeProps>(\n (\n { name, lines, vatNumber, phone, nameAs = 'p', className, ...props },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const NameTag = nameAs as 'p';\n\n return (\n <address\n ref={ref as React.Ref<HTMLElement>}\n data-component=\"contact-card-office\"\n className={[\n // `not-italic` overrides the UA default for `<address>` since\n // the kit's type ramp already encodes intent — italic would\n // double up with a heading-bold name and read as emphasis.\n 'ds:not-italic ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <NameTag className=\"ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] type-label ds:font-semibold ds:text-foreground\">\n <MapPin\n aria-hidden=\"true\"\n className=\"ds:size-[1.25em] ds:text-primary ds:shrink-0\"\n />\n <span>{name}</span>\n </NameTag>\n <div className=\"type-body-sm ds:text-foreground ds:[unicode-bidi:isolate]\">\n {lines.map((line, i) => (\n <Fragment key={i}>\n {line}\n {i < lines.length - 1 ? <br /> : null}\n </Fragment>\n ))}\n </div>\n {vatNumber ? (\n <div className=\"type-body-sm ds:text-muted-foreground\">\n <span className=\"ds:me-[var(--spacing-2xs)]\">\n {t('contactCard.vatNumberLabel')}\n </span>\n <span className=\"ds:[unicode-bidi:isolate]\">{vatNumber}</span>\n </div>\n ) : null}\n {phone ? (\n <div className=\"type-body-sm ds:text-muted-foreground ds:inline-flex ds:items-baseline ds:gap-[var(--spacing-2xs)] ds:flex-wrap\">\n <span>{t('contactCard.phoneLabel')}</span>\n <Link href={buildTelHref(phone)} intent=\"default\">\n <span className=\"ds:[unicode-bidi:isolate]\">{phone}</span>\n </Link>\n </div>\n ) : null}\n </address>\n );\n },\n);\nContactCardOffice.displayName = 'ContactCard.Office';\n\n/* ------------------------------------------------------------------ */\n/* Links */\n/* ------------------------------------------------------------------ */\n\nexport type ContactCardLinksProps = HTMLAttributes<HTMLUListElement>;\n\nconst ContactCardLinks = forwardRef<HTMLUListElement, ContactCardLinksProps>(\n ({ className, children, ...props }, ref) => (\n <ul\n ref={ref}\n data-component=\"contact-card-links\"\n className={[\n 'ds:m-0 ds:p-0 ds:list-none',\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </ul>\n ),\n);\nContactCardLinks.displayName = 'ContactCard.Links';\n\n/* ------------------------------------------------------------------ */\n/* Link */\n/* ------------------------------------------------------------------ */\n\nexport interface ContactCardLinkProps {\n href: string;\n /**\n * Leading glyph. Rendered with `--primary` so the link list reads as\n * a coloured-icon menu (matches the marketing site's treatment).\n * Consumers pass a bare lucide-react icon; the kit handles colour /\n * size / aria-hidden.\n */\n icon: ReactNode;\n /** Open in a new tab — adds `target=\"_blank\"` and `rel` via `Link`. */\n external?: boolean;\n children: ReactNode;\n}\n\nconst ContactCardLink = forwardRef<HTMLLIElement, ContactCardLinkProps>(\n ({ href, icon, external, children }, ref) => (\n <li ref={ref} className=\"ds:m-0\">\n <Link\n href={href}\n external={external}\n // Wrap in a `text-primary` span so the lucide glyph (which uses\n // `currentColor`) picks up the brand tint without the consumer\n // having to thread a className through every icon. Link adds\n // its own aria-hidden wrapper + `[&_svg]:size-[1em]` outside\n // this; the colour cascades through.\n startIcon={<span className=\"ds:text-primary\">{icon}</span>}\n >\n {children}\n </Link>\n </li>\n ),\n);\nContactCardLink.displayName = 'ContactCard.Link';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const ContactCard = Object.assign(ContactCardRoot, {\n Office: ContactCardOffice,\n Links: ContactCardLinks,\n Link: ContactCardLink,\n});\n\nexport { buildTelHref as __buildTelHref };\n"],"names":["buildTelHref","display","ContactCardRoot","forwardRef","title","variant","className","children","props","ref","jsxs","Card","jsx","ContactCardOffice","name","lines","vatNumber","phone","nameAs","t","useTranslation","NameTag","MapPin","line","i","Fragment","Link","ContactCardLinks","ContactCardLink","href","icon","external","ContactCard"],"mappings":"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"}
@@ -1,23 +1,34 @@
1
- import { jsxs as u, jsx as e, Fragment as T } from "react/jsx-runtime";
1
+ import { jsxs as u, jsx as e, Fragment as z } from "react/jsx-runtime";
2
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 z } from "./card-BA4Ig_kn.js";
6
+ import { C as T } from "./card-BA4Ig_kn.js";
7
7
  import { K as fe, a as ue } from "./key-value-pair-BoXOtBL1.js";
8
- import { L as d } from "./link-N5_YpLtm.js";
8
+ import { L as d } from "./link-DtCfnLnF.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 F } from "./stethoscope-sZXGC43m.js";
12
- import { H } from "./heart--qCA4ffe.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
- const ge = {
11
+ import { S as _ } from "./stethoscope-sZXGC43m.js";
12
+ import { H as F } from "./heart--qCA4ffe.js";
13
+ import { c as ge } from "./createLucideIcon-DhHxpK9K.js";
14
+ import { S as H } from "./shield-check-DCJALLVh.js";
15
+ import { L as O } from "./languages-CGLX6Qpe.js";
16
+ import { G as V } from "./globe-sHBW1JN5.js";
17
+ import { M as L } from "./mail-BqXVF2zH.js";
18
+ import { M as U } from "./message-circle-Bepl9JT5.js";
19
+ import { P as E } from "./phone-FceYcIFQ.js";
20
+ import { M as K } from "./map-pin-BaY37-Km.js";
21
+ /**
22
+ * @license lucide-react v1.22.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */
27
+ const ve = [
28
+ ["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }],
29
+ ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }],
30
+ ["path", { d: "M6 12h.01M18 12h.01", key: "113zkx" }]
31
+ ], B = ge("banknote", ve), be = {
21
32
  id: "contact-profile-card",
22
33
  // Passive presentation surface — only exposes the rendered profession for
23
34
  // introspection. No interactive capability is backed by the handle.
@@ -43,7 +54,7 @@ const ge = {
43
54
  description: "Sourced from the id prop."
44
55
  }
45
56
  }
46
- }, ve = de(
57
+ }, xe = de(
47
58
  "ds:w-full ds:text-[color:var(--foreground)] ds:[--key-value-pair-icon-color:var(--accent)]",
48
59
  {
49
60
  variants: {
@@ -59,14 +70,14 @@ const ge = {
59
70
  defaultVariants: { surface: "elevated" }
60
71
  }
61
72
  );
62
- function be(i) {
73
+ function Ce(i) {
63
74
  return i.replace(/[^\d+]/g, "");
64
75
  }
65
- function Ce(i, t) {
76
+ function Pe(i, t) {
66
77
  const a = `https://wa.me/${i}`;
67
78
  return t ? `${a}?text=${encodeURIComponent(t)}` : a;
68
79
  }
69
- function xe(i) {
80
+ function ye(i) {
70
81
  const t = i.trim(), a = /^[a-z][a-z0-9+.-]*:/i.test(t) ? t : `https://${t}`;
71
82
  try {
72
83
  const { protocol: l } = new URL(a);
@@ -75,16 +86,16 @@ function xe(i) {
75
86
  return;
76
87
  }
77
88
  }
78
- function Pe(i) {
89
+ function ke(i) {
79
90
  return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(i.line)}`;
80
91
  }
81
- function ye() {
92
+ function we() {
82
93
  if (typeof document > "u") return "4945a3";
83
94
  const i = getComputedStyle(document.documentElement).getPropertyValue("--map-marker-color").trim(), t = /^#?([0-9a-fA-F]{6})$/.exec(i);
84
95
  return t ? t[1] : "4945a3";
85
96
  }
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)}`;
97
+ function Me({ apiKey: i, center: t, zoom: a, altText: l }) {
98
+ const s = we(), 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)}`;
88
99
  return /* @__PURE__ */ e(
89
100
  "img",
90
101
  {
@@ -98,7 +109,7 @@ function ke({ apiKey: i, center: t, zoom: a, altText: l }) {
98
109
  }
99
110
  );
100
111
  }
101
- const we = le(
112
+ const $e = le(
102
113
  ({
103
114
  heading: i,
104
115
  description: t,
@@ -113,7 +124,7 @@ const we = le(
113
124
  insurances: v,
114
125
  firstVisitPriceCents: b,
115
126
  currencyCode: y = "EUR",
116
- profession: C,
127
+ profession: x,
117
128
  specializedInFearPatients: G,
118
129
  googleMapsApiKey: k,
119
130
  mapZoom: j = 14,
@@ -126,11 +137,11 @@ const we = le(
126
137
  mapSlot: X,
127
138
  surface: w = "elevated",
128
139
  "aria-label": Z,
129
- id: x,
140
+ id: C,
130
141
  className: ee,
131
142
  ...ae
132
143
  }, te) => {
133
- const { t: r, i18n: $ } = pe("ui"), M = ce(), A = $.language ?? "en", R = i ?? r("contactProfileCard.heading"), re = Z ?? R, N = se(() => {
144
+ const { t: r, i18n: M } = pe("ui"), $ = ce(), A = M.language ?? "en", N = i ?? r("contactProfileCard.heading"), re = Z ?? N, R = se(() => {
134
145
  if (b != null)
135
146
  return me(
136
147
  b,
@@ -138,17 +149,17 @@ const we = le(
138
149
  A,
139
150
  r("common.freeOfCharge")
140
151
  );
141
- }, [b, y, A, r]), n = [];
142
- if (a && n.push({
152
+ }, [b, y, A, r]), o = [];
153
+ if (a && o.push({
143
154
  key: "address",
144
- icon: /* @__PURE__ */ e(L, { "aria-hidden": "true" }),
155
+ icon: /* @__PURE__ */ e(K, { "aria-hidden": "true" }),
145
156
  label: r("contactProfileCard.label.address"),
146
157
  value: /* @__PURE__ */ u("span", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
147
158
  /* @__PURE__ */ e("span", { dir: "auto", children: a.line }),
148
159
  a.lat != null && a.lng != null ? /* @__PURE__ */ e(
149
160
  d,
150
161
  {
151
- href: Pe(a),
162
+ href: ke(a),
152
163
  external: !0,
153
164
  intent: "default",
154
165
  onClick: D,
@@ -156,36 +167,36 @@ const we = le(
156
167
  }
157
168
  ) : null
158
169
  ] })
159
- }), l && n.push({
170
+ }), l && o.push({
160
171
  key: "phone",
161
- icon: /* @__PURE__ */ e(K, { "aria-hidden": "true" }),
172
+ icon: /* @__PURE__ */ e(E, { "aria-hidden": "true" }),
162
173
  label: r("contactProfileCard.label.phone"),
163
174
  value: /* @__PURE__ */ e(
164
175
  d,
165
176
  {
166
- href: `tel:${be(l)}`,
177
+ href: `tel:${Ce(l)}`,
167
178
  intent: "default",
168
179
  onClick: q,
169
180
  children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: l })
170
181
  }
171
182
  )
172
- }), s && n.push({
183
+ }), s && o.push({
173
184
  key: "whatsapp",
174
- icon: /* @__PURE__ */ e(E, { "aria-hidden": "true" }),
185
+ icon: /* @__PURE__ */ e(U, { "aria-hidden": "true" }),
175
186
  label: r("contactProfileCard.label.whatsapp"),
176
187
  value: /* @__PURE__ */ e(
177
188
  d,
178
189
  {
179
- href: Ce(s, m),
190
+ href: Pe(s, m),
180
191
  external: !0,
181
192
  intent: "default",
182
193
  onClick: W,
183
194
  children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: s })
184
195
  }
185
196
  )
186
- }), h && n.push({
197
+ }), h && o.push({
187
198
  key: "email",
188
- icon: /* @__PURE__ */ e(B, { "aria-hidden": "true" }),
199
+ icon: /* @__PURE__ */ e(L, { "aria-hidden": "true" }),
189
200
  label: r("contactProfileCard.label.email"),
190
201
  value: /* @__PURE__ */ e(
191
202
  d,
@@ -197,54 +208,54 @@ const we = le(
197
208
  }
198
209
  )
199
210
  }), p) {
200
- const o = xe(p);
201
- n.push({
211
+ const n = ye(p);
212
+ o.push({
202
213
  key: "website",
203
- icon: /* @__PURE__ */ e(U, { "aria-hidden": "true" }),
214
+ icon: /* @__PURE__ */ e(V, { "aria-hidden": "true" }),
204
215
  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 })
216
+ value: n ? /* @__PURE__ */ e(d, { href: n, external: !0, intent: "default", children: /* @__PURE__ */ e("bdi", { dir: "ltr", children: p }) }) : /* @__PURE__ */ e("bdi", { dir: "ltr", children: p })
206
217
  });
207
218
  }
208
219
  if (g && g.length > 0) {
209
- const o = (c) => {
220
+ const n = (c) => {
210
221
  if (f != null && f[c]) return f[c];
211
222
  const I = `languages.${c}`;
212
- return $.exists(I) ? r(I) : c.toUpperCase();
223
+ return M.exists(I) ? r(I) : c.toUpperCase();
213
224
  };
214
- n.push({
225
+ o.push({
215
226
  key: "languages",
216
- icon: /* @__PURE__ */ e(V, { "aria-hidden": "true" }),
227
+ icon: /* @__PURE__ */ e(O, { "aria-hidden": "true" }),
217
228
  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)) })
229
+ 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: n(c) }, c)) })
219
230
  });
220
231
  }
221
- v && v.length > 0 && n.push({
232
+ v && v.length > 0 && o.push({
222
233
  key: "insurances",
223
- icon: /* @__PURE__ */ e(_, { "aria-hidden": "true" }),
234
+ icon: /* @__PURE__ */ e(H, { "aria-hidden": "true" }),
224
235
  label: r("contactProfileCard.label.insurances"),
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)) })
226
- }), N && n.push({
236
+ value: /* @__PURE__ */ e("span", { className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]", children: v.map((n) => /* @__PURE__ */ e(P, { variant: "info", children: n }, n)) })
237
+ }), R && o.push({
227
238
  key: "firstVisitPrice",
228
- icon: /* @__PURE__ */ e(O, { "aria-hidden": "true" }),
239
+ icon: /* @__PURE__ */ e(B, { "aria-hidden": "true" }),
229
240
  label: r("contactProfileCard.label.firstVisitPrice"),
230
- value: /* @__PURE__ */ e(P, { variant: "accentSoft", size: "lg", children: N })
231
- }), G && n.push({
241
+ value: /* @__PURE__ */ e(P, { variant: "accentSoft", size: "lg", children: R })
242
+ }), G && o.push({
232
243
  key: "expertForAnxiousPatients",
233
- icon: /* @__PURE__ */ e(H, { "aria-hidden": "true" }),
244
+ icon: /* @__PURE__ */ e(F, { "aria-hidden": "true" }),
234
245
  label: r("contactProfileCard.label.expertForAnxiousPatients"),
235
246
  value: r("contactProfileCard.value.yesShort")
236
- }), C && n.push({
247
+ }), x && o.push({
237
248
  key: "profession",
238
- icon: /* @__PURE__ */ e(F, { "aria-hidden": "true" }),
249
+ icon: /* @__PURE__ */ e(_, { "aria-hidden": "true" }),
239
250
  label: r("contactProfileCard.label.profession"),
240
- value: C
251
+ value: x
241
252
  }), he(
242
- ge,
243
- { getProfession: () => C },
244
- x
253
+ be,
254
+ { getProfession: () => x },
255
+ C
245
256
  );
246
257
  const ie = !!k && (a == null ? void 0 : a.lat) !== void 0 && (a == null ? void 0 : a.lng) !== void 0 ? /* @__PURE__ */ e(
247
- ke,
258
+ Me,
248
259
  {
249
260
  apiKey: k,
250
261
  center: { lat: a.lat, lng: a.lng },
@@ -254,32 +265,32 @@ const we = le(
254
265
  defaultValue: "Map showing {{address}}"
255
266
  })
256
267
  }
257
- ) : null, ne = X ?? ie, oe = /* @__PURE__ */ u(T, { children: [
268
+ ) : null, oe = X ?? ie, ne = /* @__PURE__ */ u(z, { children: [
258
269
  t ? /* @__PURE__ */ e("p", { dir: "auto", className: "type-body-sm ds:m-0 ds:whitespace-pre-line", children: t }) : null,
259
- n.length > 0 ? /* @__PURE__ */ e(fe, { rowGap: "md", children: n.map((o) => /* @__PURE__ */ e(
270
+ o.length > 0 ? /* @__PURE__ */ e(fe, { rowGap: "md", children: o.map((n) => /* @__PURE__ */ e(
260
271
  ue,
261
272
  {
262
- icon: o.icon,
263
- label: o.label,
264
- value: o.value
273
+ icon: n.icon,
274
+ label: n.label,
275
+ value: n.value
265
276
  },
266
- o.key
277
+ n.key
267
278
  )) }) : null,
268
- ne,
279
+ oe,
269
280
  Q
270
- ] }), S = /* @__PURE__ */ u(T, { children: [
281
+ ] }), S = /* @__PURE__ */ u(z, { children: [
271
282
  /* @__PURE__ */ u("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
272
283
  J,
273
284
  /* @__PURE__ */ e(
274
285
  "h2",
275
286
  {
276
- id: M,
287
+ id: $,
277
288
  className: "type-title-card ds:m-0 ds:text-[color:var(--foreground)]",
278
- children: R
289
+ children: N
279
290
  }
280
291
  )
281
292
  ] }),
282
- oe
293
+ ne
283
294
  ] });
284
295
  return /* @__PURE__ */ e(
285
296
  "div",
@@ -287,19 +298,19 @@ const we = le(
287
298
  ref: te,
288
299
  role: "region",
289
300
  "aria-label": re,
290
- "aria-labelledby": M,
301
+ "aria-labelledby": $,
291
302
  "data-component": "contact-profile-card",
292
- "data-component-id": x,
293
- id: x,
294
- className: ve({ surface: w, className: ee }),
303
+ "data-component-id": C,
304
+ id: C,
305
+ className: xe({ surface: w, className: ee }),
295
306
  ...ae,
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 })
307
+ children: w === "elevated" ? /* @__PURE__ */ e(T, { variant: "elevated", children: /* @__PURE__ */ e(T.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 })
297
308
  }
298
309
  );
299
310
  }
300
311
  );
301
- we.displayName = "ContactProfileCard";
302
- const je = [
312
+ $e.displayName = "ContactProfileCard";
313
+ const De = [
303
314
  "address",
304
315
  "phone",
305
316
  "whatsapp",
@@ -310,22 +321,22 @@ const je = [
310
321
  "firstVisitPrice",
311
322
  "expertForAnxiousPatients",
312
323
  "profession"
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,
322
- expertForAnxiousPatients: H,
323
- profession: F
324
+ ], Ye = {
325
+ address: K,
326
+ phone: E,
327
+ whatsapp: U,
328
+ email: L,
329
+ website: V,
330
+ languages: O,
331
+ insurances: H,
332
+ firstVisitPrice: B,
333
+ expertForAnxiousPatients: F,
334
+ profession: _
324
335
  };
325
336
  export {
326
- qe as C,
327
- je as a,
328
- we as b,
329
- ge as c
337
+ Ye as C,
338
+ De as a,
339
+ $e as b,
340
+ be as c
330
341
  };
331
- //# sourceMappingURL=contact-profile-card-Da1vmJQI.js.map
342
+ //# sourceMappingURL=contact-profile-card-CX45mZA3.js.map