@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.
- package/dist/_chunks/address-autocomplete-DR4Xn23Z.js +519 -0
- package/dist/_chunks/address-autocomplete-DR4Xn23Z.js.map +1 -0
- package/dist/_chunks/{address-fields-CfnXK8RT.js → address-fields-qxQkGwPf.js} +5 -5
- package/dist/_chunks/{address-fields-CfnXK8RT.js.map → address-fields-qxQkGwPf.js.map} +1 -1
- package/dist/_chunks/{agenda-card-BDuvreCe.js → agenda-card-BhY342MA.js} +2 -2
- package/dist/_chunks/{agenda-card-BDuvreCe.js.map → agenda-card-BhY342MA.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-D-jvptdo.js → agenda-tray-BmxBGEci.js} +2 -2
- package/dist/_chunks/{agenda-tray-D-jvptdo.js.map → agenda-tray-BmxBGEci.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-CoW22jx1.js → ai-permission-notice-VNh3W57L.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-CoW22jx1.js.map → ai-permission-notice-VNh3W57L.js.map} +1 -1
- package/dist/_chunks/{alia-sidebar-CsTRAxC8.js → alia-sidebar-ovRX_oti.js} +3 -3
- package/dist/_chunks/{alia-sidebar-CsTRAxC8.js.map → alia-sidebar-ovRX_oti.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-fbEQwcuW.js → anamnesis-summary-rows-EKPfVCmh.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-rows-fbEQwcuW.js.map → anamnesis-summary-rows-EKPfVCmh.js.map} +1 -1
- package/dist/_chunks/{appointment-card-5JMWi9_f.js → appointment-card-Bstc1p7a.js} +2 -2
- package/dist/_chunks/{appointment-card-5JMWi9_f.js.map → appointment-card-Bstc1p7a.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-39BwVMUf.js → appointment-peek-C0kKqnFk.js} +2 -2
- package/dist/_chunks/{appointment-peek-39BwVMUf.js.map → appointment-peek-C0kKqnFk.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-1-Za2miy.js → appointment-timeline-rbt9AwHO.js} +2 -2
- package/dist/_chunks/{appointment-timeline-1-Za2miy.js.map → appointment-timeline-rbt9AwHO.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-Dwc8MSIQ.js → appointment-tray-6zd8RLIL.js} +2 -2
- package/dist/_chunks/{appointment-tray-Dwc8MSIQ.js.map → appointment-tray-6zd8RLIL.js.map} +1 -1
- package/dist/_chunks/autocomplete-BXMcNoa3.js +562 -0
- package/dist/_chunks/autocomplete-BXMcNoa3.js.map +1 -0
- package/dist/_chunks/{avatar-BPiPL7ND.js → avatar-a6042Ox2.js} +52 -52
- package/dist/_chunks/avatar-a6042Ox2.js.map +1 -0
- package/dist/_chunks/{balance-badge-cell-C4FYwmrZ.js → balance-badge-cell-BtJvre1-.js} +3 -3
- package/dist/_chunks/{balance-badge-cell-C4FYwmrZ.js.map → balance-badge-cell-BtJvre1-.js.map} +1 -1
- package/dist/_chunks/booking-opt_h7Uc.js +4590 -0
- package/dist/_chunks/booking-opt_h7Uc.js.map +1 -0
- package/dist/_chunks/{calendar-ClB-jWH1.js → calendar-CmiMS4FJ.js} +2 -2
- package/dist/_chunks/{calendar-ClB-jWH1.js.map → calendar-CmiMS4FJ.js.map} +1 -1
- package/dist/_chunks/{calendar-appointment-editor-dialog-C1v2MNE4.js → calendar-appointment-editor-dialog-sJKLoVJ2.js} +11 -11
- package/dist/_chunks/{calendar-appointment-editor-dialog-C1v2MNE4.js.map → calendar-appointment-editor-dialog-sJKLoVJ2.js.map} +1 -1
- package/dist/_chunks/{care-plan-card-BYCPNDvA.js → care-plan-card-DD9rEWYN.js} +2 -2
- package/dist/_chunks/{care-plan-card-BYCPNDvA.js.map → care-plan-card-DD9rEWYN.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-BzsAg6oY.js → care-plan-header-CXUJQt8Q.js} +2 -2
- package/dist/_chunks/{care-plan-header-BzsAg6oY.js.map → care-plan-header-CXUJQt8Q.js.map} +1 -1
- package/dist/_chunks/{chat-message-CmFJdEre.js → chat-message-LRO_6Ee3.js} +2 -2
- package/dist/_chunks/{chat-message-CmFJdEre.js.map → chat-message-LRO_6Ee3.js.map} +1 -1
- package/dist/_chunks/{checkbox-BjDv-r3o.js → checkbox-a7Sh-dXb.js} +32 -31
- package/dist/_chunks/checkbox-a7Sh-dXb.js.map +1 -0
- package/dist/_chunks/{checkbox-group-Cw2H5qaq.js → checkbox-group-eGdv9fZc.js} +2 -2
- package/dist/_chunks/{checkbox-group-Cw2H5qaq.js.map → checkbox-group-eGdv9fZc.js.map} +1 -1
- package/dist/_chunks/{city-input-CJVGswxp.js → city-input-CA59CjnV.js} +2 -2
- package/dist/_chunks/{city-input-CJVGswxp.js.map → city-input-CA59CjnV.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-Caidqcwa.js → clinical-note-card-Cut2lNmu.js} +3 -3
- package/dist/_chunks/{clinical-note-card-Caidqcwa.js.map → clinical-note-card-Cut2lNmu.js.map} +1 -1
- package/dist/_chunks/{combobox-CDPm_n0p.js → combobox-D-gpgEDy.js} +314 -294
- package/dist/_chunks/combobox-D-gpgEDy.js.map +1 -0
- package/dist/_chunks/{contact-card-Czu60UvU.js → contact-card-ClvEDM9e.js} +2 -2
- package/dist/_chunks/{contact-card-Czu60UvU.js.map → contact-card-ClvEDM9e.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-Da1vmJQI.js → contact-profile-card-CX45mZA3.js} +106 -95
- package/dist/_chunks/contact-profile-card-CX45mZA3.js.map +1 -0
- package/dist/_chunks/{country-select-DQ8q7ypA.js → country-select-BfmX9y5i.js} +2 -2
- package/dist/_chunks/{country-select-DQ8q7ypA.js.map → country-select-BfmX9y5i.js.map} +1 -1
- package/dist/_chunks/{data-table-B_IcS0Ke.js → data-table-CqQgoNsU.js} +2 -2
- package/dist/_chunks/{data-table-B_IcS0Ke.js.map → data-table-CqQgoNsU.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-C4kOgO8b.js → dependent-selector-CyNi7M_f.js} +2 -2
- package/dist/_chunks/{dependent-selector-C4kOgO8b.js.map → dependent-selector-CyNi7M_f.js.map} +1 -1
- package/dist/_chunks/{entity-summary-BLxzSSXK.js → entity-summary-B_bOloqP.js} +3 -3
- package/dist/_chunks/{entity-summary-BLxzSSXK.js.map → entity-summary-B_bOloqP.js.map} +1 -1
- package/dist/_chunks/error-page-B0fGNTRB.js +419 -0
- package/dist/_chunks/error-page-B0fGNTRB.js.map +1 -0
- package/dist/_chunks/{face-scheme-BgJGFDTa.js → face-scheme-BKSE98bo.js} +2 -2
- package/dist/_chunks/{face-scheme-BgJGFDTa.js.map → face-scheme-BKSE98bo.js.map} +1 -1
- package/dist/_chunks/{file-manager-C9YOT-Dn.js → file-manager-BnI1ZWZu.js} +2 -2
- package/dist/_chunks/{file-manager-C9YOT-Dn.js.map → file-manager-BnI1ZWZu.js.map} +1 -1
- package/dist/_chunks/{header-settings-BVhjndtV.js → header-settings-BeA2fnol.js} +24 -23
- package/dist/_chunks/header-settings-BeA2fnol.js.map +1 -0
- package/dist/_chunks/{heatmap-HTz3Jvzy.js → heatmap-fCxwNz2o.js} +2 -2
- package/dist/_chunks/{heatmap-HTz3Jvzy.js.map → heatmap-fCxwNz2o.js.map} +1 -1
- package/dist/_chunks/{languages-CZqBaPwI.js → languages-CGLX6Qpe.js} +3 -15
- package/dist/_chunks/languages-CGLX6Qpe.js.map +1 -0
- package/dist/_chunks/link-DtCfnLnF.js +332 -0
- package/dist/_chunks/link-DtCfnLnF.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-C0ynDik7.js → link-cell-renderer-BS3V4LA6.js} +4 -4
- package/dist/_chunks/{link-cell-renderer-C0ynDik7.js.map → link-cell-renderer-BS3V4LA6.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-DYwbL5sD.js → login-dev-card-BZBR58mu.js} +2 -2
- package/dist/_chunks/{login-dev-card-DYwbL5sD.js.map → login-dev-card-BZBR58mu.js.map} +1 -1
- package/dist/_chunks/{map-view-Bvi06RVh.js → map-view-UrNgxBy3.js} +260 -237
- package/dist/_chunks/map-view-UrNgxBy3.js.map +1 -0
- package/dist/_chunks/{index.modern-BeRXQVdc.js → maps-core-gate-DkNqGkm3.js} +360 -319
- package/dist/_chunks/maps-core-gate-DkNqGkm3.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js → marketplace-app-shell-CJQtx3sv.js} +3 -3
- package/dist/_chunks/{marketplace-app-shell-x_abo_ye.js.map → marketplace-app-shell-CJQtx3sv.js.map} +1 -1
- package/dist/_chunks/{message-card-CvCnCssc.js → message-card-B6SduXJv.js} +2 -2
- package/dist/_chunks/{message-card-CvCnCssc.js.map → message-card-B6SduXJv.js.map} +1 -1
- package/dist/_chunks/{message-tray-IJYvy6Cf.js → message-tray-Cllf-v0G.js} +2 -2
- package/dist/_chunks/{message-tray-IJYvy6Cf.js.map → message-tray-Cllf-v0G.js.map} +1 -1
- package/dist/_chunks/{nav-grid-Oc4aCPrg.js → nav-grid-D2xVcHTO.js} +2 -2
- package/dist/_chunks/{nav-grid-Oc4aCPrg.js.map → nav-grid-D2xVcHTO.js.map} +1 -1
- package/dist/_chunks/{note-attachment-DIlIQ7JF.js → note-attachment-cnj2JRrg.js} +2 -2
- package/dist/_chunks/{note-attachment-DIlIQ7JF.js.map → note-attachment-cnj2JRrg.js.map} +1 -1
- package/dist/_chunks/{note-timeline-KzL52MmB.js → note-timeline-BrjHBQfx.js} +2 -2
- package/dist/_chunks/{note-timeline-KzL52MmB.js.map → note-timeline-BrjHBQfx.js.map} +1 -1
- package/dist/_chunks/{notes-panel-CZO1qsD-.js → notes-panel-ib7I3aNf.js} +3 -3
- package/dist/_chunks/{notes-panel-CZO1qsD-.js.map → notes-panel-ib7I3aNf.js.map} +1 -1
- package/dist/_chunks/{operator-hero-6aAIQaFZ.js → operator-hero-C_5B-8Qp.js} +43 -41
- package/dist/_chunks/operator-hero-C_5B-8Qp.js.map +1 -0
- package/dist/_chunks/{patient-details-D0P5eog5.js → patient-details-BjcUpD9S.js} +3 -3
- package/dist/_chunks/{patient-details-D0P5eog5.js.map → patient-details-BjcUpD9S.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-R73dZJY6.js → patient-field-row-B0tdiaWi.js} +6 -6
- package/dist/_chunks/{patient-field-row-R73dZJY6.js.map → patient-field-row-B0tdiaWi.js.map} +1 -1
- package/dist/_chunks/patient-search-Ca9j5cWb.js +1306 -0
- package/dist/_chunks/patient-search-Ca9j5cWb.js.map +1 -0
- package/dist/_chunks/{patient-summary-card-6U74-ivO.js → patient-summary-card-Cvv6_Ugk.js} +4 -4
- package/dist/_chunks/{patient-summary-card-6U74-ivO.js.map → patient-summary-card-Cvv6_Ugk.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-MndSlVoK.js → payment-request-card-BfGauFY0.js} +2 -2
- package/dist/_chunks/{payment-request-card-MndSlVoK.js.map → payment-request-card-BfGauFY0.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js → periodontal-diagnosis-DD3hrg9X.js} +2 -2
- package/dist/_chunks/{periodontal-diagnosis-B9YmmVmM.js.map → periodontal-diagnosis-DD3hrg9X.js.map} +1 -1
- package/dist/_chunks/{permission-matrix-BoQjENGV.js → permission-matrix-BJ6sg3Zp.js} +3 -3
- package/dist/_chunks/{permission-matrix-BoQjENGV.js.map → permission-matrix-BJ6sg3Zp.js.map} +1 -1
- package/dist/_chunks/{practice-profile-hero-qfrsFQI_.js → practice-profile-hero-ClzE-4CB.js} +76 -73
- package/dist/_chunks/practice-profile-hero-ClzE-4CB.js.map +1 -0
- package/dist/_chunks/{practice-results-B61krlwu.js → practice-results-CQ_KvEXK.js} +517 -514
- package/dist/_chunks/practice-results-CQ_KvEXK.js.map +1 -0
- package/dist/_chunks/{product-hub-panel-Blag8t8f.js → product-hub-panel-bHi7lkVD.js} +2 -2
- package/dist/_chunks/{product-hub-panel-Blag8t8f.js.map → product-hub-panel-bHi7lkVD.js.map} +1 -1
- package/dist/_chunks/{province-select-CPdTwEob.js → province-select-D64whw0m.js} +2 -2
- package/dist/_chunks/{province-select-CPdTwEob.js.map → province-select-D64whw0m.js.map} +1 -1
- package/dist/_chunks/public-footer-IoRWoAMz.js +596 -0
- package/dist/_chunks/public-footer-IoRWoAMz.js.map +1 -0
- package/dist/_chunks/{registration-form-DmP3YUfp.js → registration-form-CRm6DaB9.js} +2 -2
- package/dist/_chunks/{registration-form-DmP3YUfp.js.map → registration-form-CRm6DaB9.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-UzQQLb-z.js → reviews-panel-B7InBORU.js} +42 -41
- package/dist/_chunks/reviews-panel-B7InBORU.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-BZTyxQBd.js → rich-text-editor-BfEu57dk.js} +3 -3
- package/dist/_chunks/{rich-text-editor-BZTyxQBd.js.map → rich-text-editor-BfEu57dk.js.map} +1 -1
- package/dist/_chunks/{signature-request-DjY-X62H.js → signature-request-DvhyrRpn.js} +3 -3
- package/dist/_chunks/{signature-request-DjY-X62H.js.map → signature-request-DvhyrRpn.js.map} +1 -1
- package/dist/_chunks/{signed-out-frame-G-3ATOdu.js → signed-out-frame-CgRXOUzi.js} +2 -2
- package/dist/_chunks/{signed-out-frame-G-3ATOdu.js.map → signed-out-frame-CgRXOUzi.js.map} +1 -1
- package/dist/_chunks/{slot-grid-Bb13H9Rl.js → slot-grid-B-IAFX3C.js} +183 -170
- package/dist/_chunks/slot-grid-B-IAFX3C.js.map +1 -0
- package/dist/_chunks/{task-editor-BOETWbjU.js → task-editor-CI1SKUNc.js} +2 -2
- package/dist/_chunks/{task-editor-BOETWbjU.js.map → task-editor-CI1SKUNc.js.map} +1 -1
- package/dist/_chunks/{timeline-wUuTDFY_.js → timeline-BcYHdP56.js} +2 -2
- package/dist/_chunks/{timeline-wUuTDFY_.js.map → timeline-BcYHdP56.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js → use-appointment-details-read-D8vDg0sg.js} +5 -5
- package/dist/_chunks/{use-appointment-details-read-CWN-nJCZ.js.map → use-appointment-details-read-D8vDg0sg.js.map} +1 -1
- package/dist/_chunks/{voice-control-panel-BziKE-KK.js → voice-control-panel-BP0otrID.js} +2 -2
- package/dist/_chunks/{voice-control-panel-BziKE-KK.js.map → voice-control-panel-BP0otrID.js.map} +1 -1
- package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js → workflow-webhook-action-B_nBJ_ht.js} +2 -2
- package/dist/_chunks/{workflow-webhook-action-DulCpCRz.js.map → workflow-webhook-action-B_nBJ_ht.js.map} +1 -1
- package/dist/agent-catalog.json +3 -3
- package/dist/agent-i18n/en.json +1 -1
- package/dist/components/_shared/maps-core-gate.d.ts +18 -0
- package/dist/components/_shared/maps-core-gate.d.ts.map +1 -0
- package/dist/components/_shared/social-brand-icons.d.ts +29 -0
- package/dist/components/_shared/social-brand-icons.d.ts.map +1 -0
- package/dist/components/address-autocomplete/address-autocomplete.d.ts.map +1 -1
- package/dist/components/address-autocomplete/index.js +1 -1
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-peek/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts +14 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/booking/booking-types.d.ts +26 -0
- package/dist/components/booking/booking-types.d.ts.map +1 -1
- package/dist/components/booking/booking.d.ts.map +1 -1
- package/dist/components/booking/details-form.d.ts.map +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/booking/slot-load-state.d.ts +11 -0
- package/dist/components/booking/slot-load-state.d.ts.map +1 -0
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/city-input/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/data-table/index.js +2 -2
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/header-settings/header-settings.d.ts +2 -1
- package/dist/components/header-settings/header-settings.d.ts.map +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/heatmap/index.js +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/link/link.d.ts +10 -1
- package/dist/components/link/link.d.ts.map +1 -1
- package/dist/components/link/social-url.d.ts +71 -0
- package/dist/components/link/social-url.d.ts.map +1 -0
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/nav-grid/index.js +1 -1
- package/dist/components/note-timeline/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/operator-hero/operator-hero.d.ts +6 -0
- package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-search/patient-search.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/periodontal-diagnosis/index.js +1 -1
- package/dist/components/permission-matrix/index.js +1 -1
- package/dist/components/practice-profile-hero/index.js +1 -1
- package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +6 -0
- package/dist/components/practice-profile-hero/practice-profile-hero.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.d.ts +8 -2
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-footer/public-footer.d.ts +13 -1
- package/dist/components/public-footer/public-footer.d.ts.map +1 -1
- package/dist/components/public-footer/socials.d.ts +6 -5
- package/dist/components/public-footer/socials.d.ts.map +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/reviews-panel/reviews-panel.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/slot-grid/slot-grid.d.ts +2 -0
- package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/host-compat.css +1 -10
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/i18n/config.js +224 -96
- package/dist/i18n/config.js.map +1 -1
- package/dist/i18n/locales/ar.d.ts +3 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +4 -1
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +3 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +4 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +3 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +4 -1
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +3 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +3 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +3 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +4 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +3 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +4 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +3 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +4 -1
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +3 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +4 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +3 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +4 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +3 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +4 -1
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +3 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +4 -1
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +3 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +4 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +3 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +4 -1
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +3 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +4 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +3 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +4 -1
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +3 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +4 -1
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +3 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +4 -1
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +3 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +4 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +68 -68
- package/dist/locales/ar.json +4 -1
- package/dist/locales/de.json +4 -1
- package/dist/locales/el.json +4 -1
- package/dist/locales/en.json +3 -0
- package/dist/locales/es.json +4 -1
- package/dist/locales/fr.json +4 -1
- package/dist/locales/hi.json +4 -1
- package/dist/locales/it.json +4 -1
- package/dist/locales/ja.json +4 -1
- package/dist/locales/nl.json +4 -1
- package/dist/locales/pl.json +4 -1
- package/dist/locales/pt.json +4 -1
- package/dist/locales/ro.json +4 -1
- package/dist/locales/ru.json +4 -1
- package/dist/locales/sq.json +4 -1
- package/dist/locales/sv.json +4 -1
- package/dist/locales/tr.json +4 -1
- package/dist/locales/zh.json +4 -1
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/error-page/error-page-english.d.ts +71 -0
- package/dist/patterns/error-page/error-page-english.d.ts.map +1 -0
- package/dist/patterns/error-page/error-page.d.ts.map +1 -1
- package/dist/patterns/error-page/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/patterns/signed-out-frame/index.js +1 -1
- package/dist/patterns/workflow-webhook-action/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/address-autocomplete-bPR2mNBt.js +0 -498
- package/dist/_chunks/address-autocomplete-bPR2mNBt.js.map +0 -1
- package/dist/_chunks/autocomplete-CnB1mHGc.js +0 -539
- package/dist/_chunks/autocomplete-CnB1mHGc.js.map +0 -1
- package/dist/_chunks/avatar-BPiPL7ND.js.map +0 -1
- package/dist/_chunks/booking-C0FoW8Yx.js +0 -4336
- package/dist/_chunks/booking-C0FoW8Yx.js.map +0 -1
- package/dist/_chunks/checkbox-BjDv-r3o.js.map +0 -1
- package/dist/_chunks/combobox-CDPm_n0p.js.map +0 -1
- package/dist/_chunks/contact-profile-card-Da1vmJQI.js.map +0 -1
- package/dist/_chunks/error-page-Bhai-spN.js +0 -344
- package/dist/_chunks/error-page-Bhai-spN.js.map +0 -1
- package/dist/_chunks/header-settings-BVhjndtV.js.map +0 -1
- package/dist/_chunks/index.modern-BeRXQVdc.js.map +0 -1
- package/dist/_chunks/languages-CZqBaPwI.js.map +0 -1
- package/dist/_chunks/link-N5_YpLtm.js +0 -138
- package/dist/_chunks/link-N5_YpLtm.js.map +0 -1
- package/dist/_chunks/map-view-Bvi06RVh.js.map +0 -1
- package/dist/_chunks/operator-hero-6aAIQaFZ.js.map +0 -1
- package/dist/_chunks/patient-search-CCOUZABE.js +0 -1196
- package/dist/_chunks/patient-search-CCOUZABE.js.map +0 -1
- package/dist/_chunks/practice-profile-hero-qfrsFQI_.js.map +0 -1
- package/dist/_chunks/practice-results-B61krlwu.js.map +0 -1
- package/dist/_chunks/public-footer-CXOrdAaS.js +0 -568
- package/dist/_chunks/public-footer-CXOrdAaS.js.map +0 -1
- package/dist/_chunks/reviews-panel-UzQQLb-z.js.map +0 -1
- 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-
|
|
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-
|
|
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
|
|
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
|
|
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-
|
|
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
|
|
12
|
-
import { H } from "./heart--qCA4ffe.js";
|
|
13
|
-
import {
|
|
14
|
-
import { S as
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { M as
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
|
|
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
|
-
},
|
|
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
|
|
73
|
+
function Ce(i) {
|
|
63
74
|
return i.replace(/[^\d+]/g, "");
|
|
64
75
|
}
|
|
65
|
-
function
|
|
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
|
|
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
|
|
89
|
+
function ke(i) {
|
|
79
90
|
return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(i.line)}`;
|
|
80
91
|
}
|
|
81
|
-
function
|
|
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
|
|
87
|
-
const s =
|
|
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
|
|
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:
|
|
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:
|
|
140
|
+
id: C,
|
|
130
141
|
className: ee,
|
|
131
142
|
...ae
|
|
132
143
|
}, te) => {
|
|
133
|
-
const { t: r, i18n:
|
|
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]),
|
|
142
|
-
if (a &&
|
|
152
|
+
}, [b, y, A, r]), o = [];
|
|
153
|
+
if (a && o.push({
|
|
143
154
|
key: "address",
|
|
144
|
-
icon: /* @__PURE__ */ e(
|
|
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:
|
|
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 &&
|
|
170
|
+
}), l && o.push({
|
|
160
171
|
key: "phone",
|
|
161
|
-
icon: /* @__PURE__ */ e(
|
|
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:${
|
|
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 &&
|
|
183
|
+
}), s && o.push({
|
|
173
184
|
key: "whatsapp",
|
|
174
|
-
icon: /* @__PURE__ */ e(
|
|
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:
|
|
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 &&
|
|
197
|
+
}), h && o.push({
|
|
187
198
|
key: "email",
|
|
188
|
-
icon: /* @__PURE__ */ e(
|
|
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
|
|
201
|
-
|
|
211
|
+
const n = ye(p);
|
|
212
|
+
o.push({
|
|
202
213
|
key: "website",
|
|
203
|
-
icon: /* @__PURE__ */ e(
|
|
214
|
+
icon: /* @__PURE__ */ e(V, { "aria-hidden": "true" }),
|
|
204
215
|
label: r("contactProfileCard.label.website"),
|
|
205
|
-
value:
|
|
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
|
|
220
|
+
const n = (c) => {
|
|
210
221
|
if (f != null && f[c]) return f[c];
|
|
211
222
|
const I = `languages.${c}`;
|
|
212
|
-
return
|
|
223
|
+
return M.exists(I) ? r(I) : c.toUpperCase();
|
|
213
224
|
};
|
|
214
|
-
|
|
225
|
+
o.push({
|
|
215
226
|
key: "languages",
|
|
216
|
-
icon: /* @__PURE__ */ e(
|
|
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:
|
|
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 &&
|
|
232
|
+
v && v.length > 0 && o.push({
|
|
222
233
|
key: "insurances",
|
|
223
|
-
icon: /* @__PURE__ */ e(
|
|
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((
|
|
226
|
-
}),
|
|
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(
|
|
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:
|
|
231
|
-
}), G &&
|
|
241
|
+
value: /* @__PURE__ */ e(P, { variant: "accentSoft", size: "lg", children: R })
|
|
242
|
+
}), G && o.push({
|
|
232
243
|
key: "expertForAnxiousPatients",
|
|
233
|
-
icon: /* @__PURE__ */ e(
|
|
244
|
+
icon: /* @__PURE__ */ e(F, { "aria-hidden": "true" }),
|
|
234
245
|
label: r("contactProfileCard.label.expertForAnxiousPatients"),
|
|
235
246
|
value: r("contactProfileCard.value.yesShort")
|
|
236
|
-
}),
|
|
247
|
+
}), x && o.push({
|
|
237
248
|
key: "profession",
|
|
238
|
-
icon: /* @__PURE__ */ e(
|
|
249
|
+
icon: /* @__PURE__ */ e(_, { "aria-hidden": "true" }),
|
|
239
250
|
label: r("contactProfileCard.label.profession"),
|
|
240
|
-
value:
|
|
251
|
+
value: x
|
|
241
252
|
}), he(
|
|
242
|
-
|
|
243
|
-
{ getProfession: () =>
|
|
244
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
270
|
+
o.length > 0 ? /* @__PURE__ */ e(fe, { rowGap: "md", children: o.map((n) => /* @__PURE__ */ e(
|
|
260
271
|
ue,
|
|
261
272
|
{
|
|
262
|
-
icon:
|
|
263
|
-
label:
|
|
264
|
-
value:
|
|
273
|
+
icon: n.icon,
|
|
274
|
+
label: n.label,
|
|
275
|
+
value: n.value
|
|
265
276
|
},
|
|
266
|
-
|
|
277
|
+
n.key
|
|
267
278
|
)) }) : null,
|
|
268
|
-
|
|
279
|
+
oe,
|
|
269
280
|
Q
|
|
270
|
-
] }), S = /* @__PURE__ */ u(
|
|
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:
|
|
287
|
+
id: $,
|
|
277
288
|
className: "type-title-card ds:m-0 ds:text-[color:var(--foreground)]",
|
|
278
|
-
children:
|
|
289
|
+
children: N
|
|
279
290
|
}
|
|
280
291
|
)
|
|
281
292
|
] }),
|
|
282
|
-
|
|
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":
|
|
301
|
+
"aria-labelledby": $,
|
|
291
302
|
"data-component": "contact-profile-card",
|
|
292
|
-
"data-component-id":
|
|
293
|
-
id:
|
|
294
|
-
className:
|
|
303
|
+
"data-component-id": C,
|
|
304
|
+
id: C,
|
|
305
|
+
className: xe({ surface: w, className: ee }),
|
|
295
306
|
...ae,
|
|
296
|
-
children: w === "elevated" ? /* @__PURE__ */ e(
|
|
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
|
-
|
|
302
|
-
const
|
|
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
|
-
],
|
|
314
|
-
address:
|
|
315
|
-
phone:
|
|
316
|
-
whatsapp:
|
|
317
|
-
email:
|
|
318
|
-
website:
|
|
319
|
-
languages:
|
|
320
|
-
insurances:
|
|
321
|
-
firstVisitPrice:
|
|
322
|
-
expertForAnxiousPatients:
|
|
323
|
-
profession:
|
|
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
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
337
|
+
Ye as C,
|
|
338
|
+
De as a,
|
|
339
|
+
$e as b,
|
|
340
|
+
be as c
|
|
330
341
|
};
|
|
331
|
-
//# sourceMappingURL=contact-profile-card-
|
|
342
|
+
//# sourceMappingURL=contact-profile-card-CX45mZA3.js.map
|