@alfadocs/ui-kit-debug 1.67.0 → 1.68.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-fields-CJtu7LQU.js → address-fields-BUPRs3n-.js} +3 -3
- package/dist/_chunks/{address-fields-CJtu7LQU.js.map → address-fields-BUPRs3n-.js.map} +1 -1
- package/dist/_chunks/{agenda-card-DR9gDdKp.js → agenda-card-BDuvreCe.js} +2 -2
- package/dist/_chunks/{agenda-card-DR9gDdKp.js.map → agenda-card-BDuvreCe.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-DGB1Zup-.js → agenda-tray-CfwylhWf.js} +3 -3
- package/dist/_chunks/{agenda-tray-DGB1Zup-.js.map → agenda-tray-CfwylhWf.js.map} +1 -1
- package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js → ai-credits-exhausted-notice-Bg8NpW2K.js} +2 -2
- package/dist/_chunks/{ai-credits-exhausted-notice-DfAgfZDF.js.map → ai-credits-exhausted-notice-Bg8NpW2K.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js → ai-permission-notice-C00i6VhY.js} +2 -2
- package/dist/_chunks/{ai-permission-notice-qsdm4Sx4.js.map → ai-permission-notice-C00i6VhY.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-DSGSe4LH.js → ai-prompt-input-DzgyoKyk.js} +141 -139
- package/dist/_chunks/ai-prompt-input-DzgyoKyk.js.map +1 -0
- package/dist/_chunks/{alert-DjsJMGRE.js → alert-9kEwDza3.js} +122 -112
- package/dist/_chunks/alert-9kEwDza3.js.map +1 -0
- package/dist/_chunks/{alia-sidebar-qe0quZkB.js → alia-sidebar-B06ZSOaF.js} +3 -3
- package/dist/_chunks/{alia-sidebar-qe0quZkB.js.map → alia-sidebar-B06ZSOaF.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js → anamnesis-summary-card-DQ3iE1gD.js} +2 -2
- package/dist/_chunks/{anamnesis-summary-card-CMzBLTiN.js.map → anamnesis-summary-card-DQ3iE1gD.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-BQ_EokKz.js → anamnesis-summary-rows-CNK0fIJk.js} +392 -388
- package/dist/_chunks/anamnesis-summary-rows-CNK0fIJk.js.map +1 -0
- package/dist/_chunks/{appointment-card-CL32sux-.js → appointment-card-5JMWi9_f.js} +2 -2
- package/dist/_chunks/{appointment-card-CL32sux-.js.map → appointment-card-5JMWi9_f.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-B5mcDcXt.js → appointment-peek-D5XCfYKu.js} +2 -2
- package/dist/_chunks/{appointment-peek-B5mcDcXt.js.map → appointment-peek-D5XCfYKu.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-CCqjORFb.js → appointment-timeline-VFP6HoXT.js} +4 -4
- package/dist/_chunks/{appointment-timeline-CCqjORFb.js.map → appointment-timeline-VFP6HoXT.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-qtpJt8e0.js → appointment-tray-B3PDER3I.js} +3 -3
- package/dist/_chunks/{appointment-tray-qtpJt8e0.js.map → appointment-tray-B3PDER3I.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-B11RR-rC.js → audio-recorder-4Ll0pwYK.js} +3 -3
- package/dist/_chunks/{audio-recorder-B11RR-rC.js.map → audio-recorder-4Ll0pwYK.js.map} +1 -1
- package/dist/_chunks/{auth-form-parts-DwUTH6YN.js → auth-form-parts-B40zvD-a.js} +2 -2
- package/dist/_chunks/{auth-form-parts-DwUTH6YN.js.map → auth-form-parts-B40zvD-a.js.map} +1 -1
- package/dist/_chunks/avatar-BPiPL7ND.js +199 -0
- package/dist/_chunks/avatar-BPiPL7ND.js.map +1 -0
- package/dist/_chunks/{balance-badge-cell-DZNthHO1.js → balance-badge-cell-BG3DMly4.js} +4 -4
- package/dist/_chunks/{balance-badge-cell-DZNthHO1.js.map → balance-badge-cell-BG3DMly4.js.map} +1 -1
- package/dist/_chunks/{bishop-score-CaNTrikJ.js → bishop-score-Df8nF1qg.js} +2 -2
- package/dist/_chunks/{bishop-score-CaNTrikJ.js.map → bishop-score-Df8nF1qg.js.map} +1 -1
- package/dist/_chunks/{booking-tTVxKPQY.js → booking-B1pDbERi.js} +377 -335
- package/dist/_chunks/booking-B1pDbERi.js.map +1 -0
- package/dist/_chunks/{calendar-BhN-jisv.js → calendar-BvOM8rG3.js} +2 -2
- package/dist/_chunks/{calendar-BhN-jisv.js.map → calendar-BvOM8rG3.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-MRrzcxAy.js → calendar-workspace-CYK1M83j.js} +18 -18
- package/dist/_chunks/{calendar-workspace-MRrzcxAy.js.map → calendar-workspace-CYK1M83j.js.map} +1 -1
- package/dist/_chunks/{chat-message-fRLZ95O5.js → chat-message-Be-9vIIQ.js} +2 -2
- package/dist/_chunks/{chat-message-fRLZ95O5.js.map → chat-message-Be-9vIIQ.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-BnFTIs6x.js → clinical-note-card-Caidqcwa.js} +2 -2
- package/dist/_chunks/{clinical-note-card-BnFTIs6x.js.map → clinical-note-card-Caidqcwa.js.map} +1 -1
- package/dist/_chunks/{color-picker-BsggJovx.js → color-picker-AcaWuKah.js} +99 -95
- package/dist/_chunks/color-picker-AcaWuKah.js.map +1 -0
- package/dist/_chunks/{combobox-U5yfO6o0.js → combobox-vF9O-QoG.js} +92 -83
- package/dist/_chunks/combobox-vF9O-QoG.js.map +1 -0
- package/dist/_chunks/{contact-profile-card-C4-OCshj.js → contact-profile-card-CAwwOqHl.js} +40 -40
- package/dist/_chunks/contact-profile-card-CAwwOqHl.js.map +1 -0
- package/dist/_chunks/{control-room-rail-DUerqHeo.js → control-room-rail-BB6rCDWI.js} +3 -3
- package/dist/_chunks/{control-room-rail-DUerqHeo.js.map → control-room-rail-BB6rCDWI.js.map} +1 -1
- package/dist/_chunks/{country-select-DF5Bd_mn.js → country-select-CSE2Zm_s.js} +2 -2
- package/dist/_chunks/{country-select-DF5Bd_mn.js.map → country-select-CSE2Zm_s.js.map} +1 -1
- package/dist/_chunks/dashboard-grid-7JzaiKnk.js +1487 -0
- package/dist/_chunks/dashboard-grid-7JzaiKnk.js.map +1 -0
- package/dist/_chunks/{data-table-COoCQ4n_.js → data-table-Cty4-Jht.js} +3 -3
- package/dist/_chunks/{data-table-COoCQ4n_.js.map → data-table-Cty4-Jht.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-DBr1AhLg.js → dependent-selector-C4kOgO8b.js} +2 -2
- package/dist/_chunks/{dependent-selector-DBr1AhLg.js.map → dependent-selector-C4kOgO8b.js.map} +1 -1
- package/dist/_chunks/{document-preview-VyQOjFVL.js → document-preview-513f3iPn.js} +4 -4
- package/dist/_chunks/{document-preview-VyQOjFVL.js.map → document-preview-513f3iPn.js.map} +1 -1
- package/dist/_chunks/{document-scanner-CXH_GYh4.js → document-scanner-Bd3wbzpI.js} +2 -2
- package/dist/_chunks/{document-scanner-CXH_GYh4.js.map → document-scanner-Bd3wbzpI.js.map} +1 -1
- package/dist/_chunks/{editable-description-ChGNdYY8.js → editable-description-DnAFi360.js} +2 -2
- package/dist/_chunks/{editable-description-ChGNdYY8.js.map → editable-description-DnAFi360.js.map} +1 -1
- package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js → entity-summary-C2B8yNmc.js} +4 -4
- package/dist/_chunks/{entity-summary-Bj-Wxq7Y.js.map → entity-summary-C2B8yNmc.js.map} +1 -1
- package/dist/_chunks/{error-summary-PUE5Zxp9.js → error-summary-mGxIyDAY.js} +2 -2
- package/dist/_chunks/{error-summary-PUE5Zxp9.js.map → error-summary-mGxIyDAY.js.map} +1 -1
- package/dist/_chunks/{face-scheme-DAD-mXzM.js → face-scheme-CSJdRNad.js} +248 -244
- package/dist/_chunks/{face-scheme-DAD-mXzM.js.map → face-scheme-CSJdRNad.js.map} +1 -1
- package/dist/_chunks/{file-manager-RiV7-OEE.js → file-manager-D4cPnRhL.js} +3 -3
- package/dist/_chunks/{file-manager-RiV7-OEE.js.map → file-manager-D4cPnRhL.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-CPOfRE0C.js → forgot-password-form-Dqi7R-NL.js} +4 -4
- package/dist/_chunks/{forgot-password-form-CPOfRE0C.js.map → forgot-password-form-Dqi7R-NL.js.map} +1 -1
- package/dist/_chunks/format-number-DdzqwMs1.js +13 -0
- package/dist/_chunks/format-number-DdzqwMs1.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-6DO7noHX.js → freemium-paywall-C73C8Rgd.js} +2 -2
- package/dist/_chunks/{freemium-paywall-6DO7noHX.js.map → freemium-paywall-C73C8Rgd.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js → gestational-age-calculator-Du53p8MH.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-CZYa2D6m.js.map → gestational-age-calculator-Du53p8MH.js.map} +1 -1
- package/dist/_chunks/{header-settings-BSH9Gk0J.js → header-settings-DlUbvAUx.js} +37 -36
- package/dist/_chunks/header-settings-DlUbvAUx.js.map +1 -0
- package/dist/_chunks/{heatmap-C1TeC7wT.js → heatmap-DbZIQg14.js} +4 -4
- package/dist/_chunks/{heatmap-C1TeC7wT.js.map → heatmap-DbZIQg14.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js → help-me-write-templates-5WkUfvc_.js} +3 -3
- package/dist/_chunks/{help-me-write-templates-Bw3Q58x-.js.map → help-me-write-templates-5WkUfvc_.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-DWs1UEXb.js → kit-extensions-CYvLL4ee.js} +3 -3
- package/dist/_chunks/{kit-extensions-DWs1UEXb.js.map → kit-extensions-CYvLL4ee.js.map} +1 -1
- package/dist/_chunks/length-token-DwMnGEYT.js +24 -0
- package/dist/_chunks/length-token-DwMnGEYT.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js → link-cell-renderer-DtIsQWDO.js} +4 -4
- package/dist/_chunks/{link-cell-renderer-CtTsvfPY.js.map → link-cell-renderer-DtIsQWDO.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-A-CL3mjt.js → login-dev-card-vEL-o5wq.js} +3 -3
- package/dist/_chunks/{login-dev-card-A-CL3mjt.js.map → login-dev-card-vEL-o5wq.js.map} +1 -1
- package/dist/_chunks/{map-view-BuVfJMEa.js → map-view-CtohteZD.js} +300 -191
- package/dist/_chunks/map-view-CtohteZD.js.map +1 -0
- package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js → marketplace-app-shell-CcLQ0Dn-.js} +4 -4
- package/dist/_chunks/{marketplace-app-shell-DtSX8sYb.js.map → marketplace-app-shell-CcLQ0Dn-.js.map} +1 -1
- package/dist/_chunks/{message-card-A3mJNqfy.js → message-card-C_ksqIYM.js} +2 -2
- package/dist/_chunks/{message-card-A3mJNqfy.js.map → message-card-C_ksqIYM.js.map} +1 -1
- package/dist/_chunks/{message-tray-Ft6vSr71.js → message-tray-DCoQ4GQb.js} +3 -3
- package/dist/_chunks/{message-tray-Ft6vSr71.js.map → message-tray-DCoQ4GQb.js.map} +1 -1
- package/dist/_chunks/{multi-select-CMaAQQgb.js → multi-select-BOad3za9.js} +110 -98
- package/dist/_chunks/multi-select-BOad3za9.js.map +1 -0
- package/dist/_chunks/{muscle-scheme-YoN3rYXV.js → muscle-scheme-C66WlCxG.js} +2 -2
- package/dist/_chunks/{muscle-scheme-YoN3rYXV.js.map → muscle-scheme-C66WlCxG.js.map} +1 -1
- package/dist/_chunks/{note-timeline-DDqNU46n.js → note-timeline-KzL52MmB.js} +2 -2
- package/dist/_chunks/{note-timeline-DDqNU46n.js.map → note-timeline-KzL52MmB.js.map} +1 -1
- package/dist/_chunks/{notes-panel-IdsmqRFC.js → notes-panel-BXN46XkF.js} +6 -6
- package/dist/_chunks/{notes-panel-IdsmqRFC.js.map → notes-panel-BXN46XkF.js.map} +1 -1
- package/dist/_chunks/notice-group-DkYzKyAZ.js +291 -0
- package/dist/_chunks/notice-group-DkYzKyAZ.js.map +1 -0
- package/dist/_chunks/{notification-tray-BR3seWA7.js → notification-tray-Cp18MW5b.js} +2 -2
- package/dist/_chunks/{notification-tray-BR3seWA7.js.map → notification-tray-Cp18MW5b.js.map} +1 -1
- package/dist/_chunks/{operator-hero-3_RG4Dkj.js → operator-hero-6aAIQaFZ.js} +83 -66
- package/dist/_chunks/operator-hero-6aAIQaFZ.js.map +1 -0
- package/dist/_chunks/{optical-prescription-CxfMsbxi.js → optical-prescription-ulXnDbBe.js} +525 -509
- package/dist/_chunks/optical-prescription-ulXnDbBe.js.map +1 -0
- package/dist/_chunks/panel-header-CbtlTe85.js +190 -0
- package/dist/_chunks/panel-header-CbtlTe85.js.map +1 -0
- package/dist/_chunks/{panel-subview-yP4qIbKS.js → panel-subview-BPU7220K.js} +2 -2
- package/dist/_chunks/{panel-subview-yP4qIbKS.js.map → panel-subview-BPU7220K.js.map} +1 -1
- package/dist/_chunks/{patient-details-C-EWQTms.js → patient-details-C4Dyo7Ck.js} +4 -4
- package/dist/_chunks/{patient-details-C-EWQTms.js.map → patient-details-C4Dyo7Ck.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js → patient-field-row-DROvUkFu.js} +4 -4
- package/dist/_chunks/{patient-field-row-lY-Tb5Mo.js.map → patient-field-row-DROvUkFu.js.map} +1 -1
- package/dist/_chunks/{patient-search-DpAKidZ5.js → patient-search-BADdx3M1.js} +2 -2
- package/dist/_chunks/{patient-search-DpAKidZ5.js.map → patient-search-BADdx3M1.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-Bpto_VCD.js → patient-summary-card-CAimxbuI.js} +4 -4
- package/dist/_chunks/{patient-summary-card-Bpto_VCD.js.map → patient-summary-card-CAimxbuI.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js → payment-automation-upsell-CiwF5UrC.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-BQ307qEX.js.map → payment-automation-upsell-CiwF5UrC.js.map} +1 -1
- package/dist/_chunks/{payment-form-XKtinW8r.js → payment-form-PBuh8PIa.js} +2 -2
- package/dist/_chunks/{payment-form-XKtinW8r.js.map → payment-form-PBuh8PIa.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-BvoVMjH4.js → pdf-viewer-gAsNUsA8.js} +2 -2
- package/dist/_chunks/{pdf-viewer-BvoVMjH4.js.map → pdf-viewer-gAsNUsA8.js.map} +1 -1
- package/dist/_chunks/{periodontal-risk-chart-CPy7CNFe.js → periodontal-risk-chart-B7S9OmPC.js} +97 -89
- package/dist/_chunks/periodontal-risk-chart-B7S9OmPC.js.map +1 -0
- package/dist/_chunks/practice-profile-hero-qfrsFQI_.js +236 -0
- package/dist/_chunks/practice-profile-hero-qfrsFQI_.js.map +1 -0
- package/dist/_chunks/{practice-results-BrUDDMXC.js → practice-results-BzThnpnm.js} +328 -298
- package/dist/_chunks/practice-results-BzThnpnm.js.map +1 -0
- package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js → pregnancy-dating-EFcFUJkQ.js} +2 -2
- package/dist/_chunks/{pregnancy-dating-B8wo4l_r.js.map → pregnancy-dating-EFcFUJkQ.js.map} +1 -1
- package/dist/_chunks/{privacy-mask-Ch7743uk.js → privacy-mask-CCz9zuIh.js} +2 -2
- package/dist/_chunks/{privacy-mask-Ch7743uk.js.map → privacy-mask-CCz9zuIh.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-C_ZosrBt.js → product-hub-panel-YuFbNPlT.js} +2 -2
- package/dist/_chunks/{product-hub-panel-C_ZosrBt.js.map → product-hub-panel-YuFbNPlT.js.map} +1 -1
- package/dist/_chunks/progress-notice-DiHWZ8Ms.js +279 -0
- package/dist/_chunks/progress-notice-DiHWZ8Ms.js.map +1 -0
- package/dist/_chunks/{province-select-Bd20Z9Br.js → province-select-CDjs5obD.js} +2 -2
- package/dist/_chunks/{province-select-Bd20Z9Br.js.map → province-select-CDjs5obD.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js → radiograph-panel.agent-4UllIoTQ.js} +2 -2
- package/dist/_chunks/{radiograph-panel.agent-8Ewv8-d7.js.map → radiograph-panel.agent-4UllIoTQ.js.map} +1 -1
- package/dist/_chunks/{rating-C1Vrmpsi.js → rating-CGYpg5dj.js} +43 -44
- package/dist/_chunks/rating-CGYpg5dj.js.map +1 -0
- package/dist/_chunks/{registration-form-BxwqUZzk.js → registration-form-1B0PTDal.js} +4 -4
- package/dist/_chunks/{registration-form-BxwqUZzk.js.map → registration-form-1B0PTDal.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-AvsVgtJu.js → reviews-panel-CosDZyow.js} +29 -7
- package/dist/_chunks/reviews-panel-CosDZyow.js.map +1 -0
- package/dist/_chunks/{rich-text-editor-aCIoptbg.js → rich-text-editor-56dSsyZI.js} +3 -3
- package/dist/_chunks/{rich-text-editor-aCIoptbg.js.map → rich-text-editor-56dSsyZI.js.map} +1 -1
- package/dist/_chunks/{select-k4gBdS8N.js → select-4S-eYZUf.js} +244 -214
- package/dist/_chunks/select-4S-eYZUf.js.map +1 -0
- package/dist/_chunks/{sign-document-D1P1nUQA.js → sign-document-BiOTs1P4.js} +2 -2
- package/dist/_chunks/{sign-document-D1P1nUQA.js.map → sign-document-BiOTs1P4.js.map} +1 -1
- package/dist/_chunks/{signature-request-3u6TvRt2.js → signature-request-DAmNj_uq.js} +5 -5
- package/dist/_chunks/{signature-request-3u6TvRt2.js.map → signature-request-DAmNj_uq.js.map} +1 -1
- package/dist/_chunks/skeleton-tTWJpvAq.js +415 -0
- package/dist/_chunks/skeleton-tTWJpvAq.js.map +1 -0
- package/dist/_chunks/{slot-grid-dj5f6R2w.js → slot-grid-D_gix9mJ.js} +2 -2
- package/dist/_chunks/{slot-grid-dj5f6R2w.js.map → slot-grid-D_gix9mJ.js.map} +1 -1
- package/dist/_chunks/{tabs-2x3L13jn.js → tabs-BTj-2qMZ.js} +2 -2
- package/dist/_chunks/{tabs-2x3L13jn.js.map → tabs-BTj-2qMZ.js.map} +1 -1
- package/dist/_chunks/{task-card-BS7Uqevr.js → task-card-Ci2XbLmq.js} +2 -2
- package/dist/_chunks/{task-card-BS7Uqevr.js.map → task-card-Ci2XbLmq.js.map} +1 -1
- package/dist/_chunks/{task-editor-Bb5MMcid.js → task-editor-BomyxGoZ.js} +8 -8
- package/dist/_chunks/{task-editor-Bb5MMcid.js.map → task-editor-BomyxGoZ.js.map} +1 -1
- package/dist/_chunks/{task-tray-eQU4KJcA.js → task-tray-Dnc72nl-.js} +3 -3
- package/dist/_chunks/{task-tray-eQU4KJcA.js.map → task-tray-Dnc72nl-.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-BOb57Ysw.js → tasks-panel-ATz9JDy8.js} +6 -6
- package/dist/_chunks/{tasks-panel-BOb57Ysw.js.map → tasks-panel-ATz9JDy8.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-Ctb77x6O.js → theme-toggle-DT_Jn4DC.js} +147 -138
- package/dist/_chunks/theme-toggle-DT_Jn4DC.js.map +1 -0
- package/dist/_chunks/{timeline-DEIuHrWz.js → timeline-wUuTDFY_.js} +2 -2
- package/dist/_chunks/{timeline-DEIuHrWz.js.map → timeline-wUuTDFY_.js.map} +1 -1
- package/dist/_chunks/{tool-rail-C-03rH2I.js → tool-rail-C-M3eVdY.js} +2 -2
- package/dist/_chunks/{tool-rail-C-03rH2I.js.map → tool-rail-C-M3eVdY.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-XudW5l6l.js → transcript-panel-CoHHpcFg.js} +2 -2
- package/dist/_chunks/{transcript-panel-XudW5l6l.js.map → transcript-panel-CoHHpcFg.js.map} +1 -1
- package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js → treatment-receipt-pFqWFyD_.js} +2 -2
- package/dist/_chunks/{treatment-receipt-Cpm8tqQN.js.map → treatment-receipt-pFqWFyD_.js.map} +1 -1
- package/dist/_chunks/{unit-converter-BPZ0Ldkb.js → unit-converter-CIoTmCmP.js} +2 -2
- package/dist/_chunks/{unit-converter-BPZ0Ldkb.js.map → unit-converter-CIoTmCmP.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js → use-appointment-details-read-CUGfE0hV.js} +12 -12
- package/dist/_chunks/{use-appointment-details-read-CVSPoP5j.js.map → use-appointment-details-read-CUGfE0hV.js.map} +1 -1
- package/dist/_chunks/use-dismissed-CTOWqA0e.js +177 -0
- package/dist/_chunks/use-dismissed-CTOWqA0e.js.map +1 -0
- package/dist/_chunks/{voice-control-panel-BJIEbDq6.js → voice-control-panel-B8Lrk0C4.js} +4 -4
- package/dist/_chunks/{voice-control-panel-BJIEbDq6.js.map → voice-control-panel-B8Lrk0C4.js.map} +1 -1
- package/dist/_chunks/{warning-stack-BdY-0bd3.js → warning-stack-BhHUmRiD.js} +2 -2
- package/dist/_chunks/{warning-stack-BdY-0bd3.js.map → warning-stack-BhHUmRiD.js.map} +1 -1
- package/dist/_chunks/{workflow-map-CYbRD9ek.js → workflow-map-ln4_OG8A.js} +2 -2
- package/dist/_chunks/{workflow-map-CYbRD9ek.js.map → workflow-map-ln4_OG8A.js.map} +1 -1
- package/dist/agent-catalog.json +172 -4
- package/dist/agent-i18n/en.json +25 -1
- package/dist/components/_shared/format-number.d.ts +20 -0
- package/dist/components/_shared/format-number.d.ts.map +1 -0
- package/dist/components/_shared/length-token.d.ts +12 -0
- package/dist/components/_shared/length-token.d.ts.map +1 -0
- package/dist/components/_shared/option.d.ts +1 -0
- package/dist/components/_shared/option.d.ts.map +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-credits-notice/index.js +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/alert.d.ts +26 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/anamnesis-summary-card/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/audio-recorder/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts +2 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/bishop-score/index.js +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/calendar/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/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-profile-card/index.js +1 -1
- package/dist/components/control-room-rail/index.js +1 -1
- package/dist/components/country-select/index.js +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts +20 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/components/dashboard-grid/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/document-preview/index.js +1 -1
- package/dist/components/document-scanner/index.js +1 -1
- package/dist/components/editable-description/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/error-summary/index.js +1 -1
- package/dist/components/face-scheme/face-scheme.d.ts.map +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -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/index.d.ts +4 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/map-view/index.d.ts +1 -1
- package/dist/components/map-view/index.d.ts.map +1 -1
- package/dist/components/map-view/index.js +1 -1
- package/dist/components/map-view/map-view.d.ts +51 -0
- 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/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/muscle-scheme/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/notice-group/index.d.ts +3 -0
- package/dist/components/notice-group/index.d.ts.map +1 -0
- package/dist/components/notice-group/index.js +6 -0
- package/dist/components/notice-group/index.js.map +1 -0
- package/dist/components/notice-group/notice-group.agent.d.ts +4 -0
- package/dist/components/notice-group/notice-group.agent.d.ts.map +1 -0
- package/dist/components/notice-group/notice-group.d.ts +43 -0
- package/dist/components/notice-group/notice-group.d.ts.map +1 -0
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/operator-hero/operator-hero.d.ts.map +1 -1
- package/dist/components/optical-prescription/index.js +1 -1
- package/dist/components/optical-prescription/optical-prescription-data.d.ts +8 -8
- package/dist/components/optical-prescription/optical-prescription-data.d.ts.map +1 -1
- package/dist/components/optical-prescription/optical-prescription.d.ts.map +1 -1
- package/dist/components/panel-header/index.js +1 -1
- package/dist/components/panel-header/panel-header.d.ts +10 -0
- package/dist/components/panel-header/panel-header.d.ts.map +1 -1
- package/dist/components/panel-subview/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/periodontal-risk-chart/index.js +1 -1
- package/dist/components/periodontal-risk-chart/periodontal-risk-chart.d.ts.map +1 -1
- package/dist/components/practice-profile-hero/index.js +1 -1
- package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +4 -1
- 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 +10 -2
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/progress-notice/index.d.ts +3 -0
- package/dist/components/progress-notice/index.d.ts.map +1 -0
- package/dist/components/progress-notice/index.js +6 -0
- package/dist/components/progress-notice/index.js.map +1 -0
- package/dist/components/progress-notice/progress-notice.agent.d.ts +4 -0
- package/dist/components/progress-notice/progress-notice.agent.d.ts.map +1 -0
- package/dist/components/progress-notice/progress-notice.d.ts +81 -0
- package/dist/components/progress-notice/progress-notice.d.ts.map +1 -0
- package/dist/components/province-select/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rating/index.js +1 -1
- package/dist/components/rating/rating.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 +2 -2
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.d.ts +6 -0
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/skeleton/index.d.ts +1 -1
- package/dist/components/skeleton/index.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/skeleton/skeleton.d.ts +41 -1
- package/dist/components/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton-scheme/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/tasks-panel/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/treatment-receipt/index.js +1 -1
- package/dist/components/unit-converter/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +81 -76
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-dismissed.d.ts +58 -0
- package/dist/hooks/use-dismissed.d.ts.map +1 -0
- package/dist/i18n/locales/ar.d.ts +22 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +22 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +22 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +22 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +22 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +22 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +22 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +22 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +22 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +22 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +22 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +22 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +22 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +22 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +22 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +22 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +22 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +22 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +22 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +22 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +22 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +22 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +22 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +22 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +22 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +22 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +22 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +22 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +22 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +22 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +22 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +22 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +22 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +22 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +22 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +22 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +1194 -1183
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +22 -0
- package/dist/locales/de.json +22 -0
- package/dist/locales/el.json +22 -0
- package/dist/locales/en.json +22 -0
- package/dist/locales/es.json +22 -0
- package/dist/locales/fr.json +22 -0
- package/dist/locales/hi.json +22 -0
- package/dist/locales/it.json +22 -0
- package/dist/locales/ja.json +22 -0
- package/dist/locales/nl.json +22 -0
- package/dist/locales/pl.json +22 -0
- package/dist/locales/pt.json +22 -0
- package/dist/locales/ro.json +22 -0
- package/dist/locales/ru.json +22 -0
- package/dist/locales/sq.json +22 -0
- package/dist/locales/sv.json +22 -0
- package/dist/locales/tr.json +22 -0
- package/dist/locales/zh.json +22 -0
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/anamnesis-export-pdf.d.ts.map +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/help-me-write-templates/index.js +2 -2
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +9 -1
- package/dist/_chunks/ai-prompt-input-DSGSe4LH.js.map +0 -1
- package/dist/_chunks/alert-DjsJMGRE.js.map +0 -1
- package/dist/_chunks/anamnesis-summary-rows-BQ_EokKz.js.map +0 -1
- package/dist/_chunks/avatar-WZY3eGE7.js +0 -123
- package/dist/_chunks/avatar-WZY3eGE7.js.map +0 -1
- package/dist/_chunks/booking-tTVxKPQY.js.map +0 -1
- package/dist/_chunks/color-picker-BsggJovx.js.map +0 -1
- package/dist/_chunks/combobox-U5yfO6o0.js.map +0 -1
- package/dist/_chunks/contact-profile-card-C4-OCshj.js.map +0 -1
- package/dist/_chunks/dashboard-grid-B2MB7SRS.js +0 -1428
- package/dist/_chunks/dashboard-grid-B2MB7SRS.js.map +0 -1
- package/dist/_chunks/header-settings-BSH9Gk0J.js.map +0 -1
- package/dist/_chunks/map-view-BuVfJMEa.js.map +0 -1
- package/dist/_chunks/multi-select-CMaAQQgb.js.map +0 -1
- package/dist/_chunks/operator-hero-3_RG4Dkj.js.map +0 -1
- package/dist/_chunks/optical-prescription-CxfMsbxi.js.map +0 -1
- package/dist/_chunks/panel-header-BJkaUwnl.js +0 -128
- package/dist/_chunks/panel-header-BJkaUwnl.js.map +0 -1
- package/dist/_chunks/periodontal-risk-chart-CPy7CNFe.js.map +0 -1
- package/dist/_chunks/practice-profile-hero-Dfc0F60y.js +0 -193
- package/dist/_chunks/practice-profile-hero-Dfc0F60y.js.map +0 -1
- package/dist/_chunks/practice-results-BrUDDMXC.js.map +0 -1
- package/dist/_chunks/rating-C1Vrmpsi.js.map +0 -1
- package/dist/_chunks/reviews-panel-AvsVgtJu.js.map +0 -1
- package/dist/_chunks/select-k4gBdS8N.js.map +0 -1
- package/dist/_chunks/skeleton-B1KTdJ4N.js +0 -116
- package/dist/_chunks/skeleton-B1KTdJ4N.js.map +0 -1
- package/dist/_chunks/theme-toggle-Ctb77x6O.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panel-header-BJkaUwnl.js","sources":["../../src/components/panel-header/panel-header.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Tooltip } from '../tooltip';\n\n/* -------------------------------------------------------------------- */\n/* PanelHeader */\n/* */\n/* The single header pattern every rail panel adopts: a title row */\n/* (optional leading glyph + heading on the start, an action cluster on */\n/* the end), an optional sticky second row of filters, an optional */\n/* bottom divider, and edge handling (shrink-0 vs sticky). It */\n/* standardises the bespoke <header> markup that AppointmentTimeline, */\n/* TasksPanel and friends each re-authored. */\n/* */\n/* The title is a SINGLE LINE. A rail panel is narrow and its width is */\n/* user-resizable, so a long title (a patient name, a document title) */\n/* would otherwise wrap and push the action cluster down. It truncates */\n/* with an ellipsis instead, and — only when the text is really cut — */\n/* carries a Tooltip with the full title. The full text stays in the */\n/* DOM, so assistive tech reads it whether or not it is clipped. */\n/* */\n/* The action cluster holds the PANEL-OWNED `actions` first, then any */\n/* RAIL-INJECTED actions read from context (PanelHeaderActionsProvider). */\n/* Standalone — with no provider — nothing is injected. The component */\n/* owns no user-visible strings of its own: `title`, `actions` and */\n/* `filters` are all caller-supplied nodes already translated upstream. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Rail-actions context */\n/* -------------------------------------------------------------------- */\n\nconst PanelHeaderActionsContext = createContext<ReactNode>(null);\n\n/**\n * Provides rail-injected actions that every descendant `PanelHeader`\n * appends to its action cluster, after the panel's own `actions`. The\n * rail (or any host) wraps the panel subtree once; standalone panels\n * render without a provider and inject nothing.\n */\nexport function PanelHeaderActionsProvider({\n actions,\n children,\n}: {\n actions: ReactNode;\n children: ReactNode;\n}) {\n return (\n <PanelHeaderActionsContext.Provider value={actions}>\n {children}\n </PanelHeaderActionsContext.Provider>\n );\n}\n\n/** Reads the rail-injected actions for the current subtree (default `null`). */\nexport function usePanelHeaderActions(): ReactNode {\n return useContext(PanelHeaderActionsContext);\n}\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst headerVariants = cva(\n [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n 'ds:px-[var(--spacing-md)] ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-sm)]',\n ].join(' '),\n {\n variants: {\n // `sticky` pins the header to the top of the panel's scroll region;\n // otherwise it stays a fixed-height band that never shrinks.\n sticky: {\n true: 'ds:sticky ds:top-0 ds:z-[1] ds:bg-[color:var(--background)]',\n false: 'ds:shrink-0',\n },\n divider: {\n true: 'ds:border-b ds:border-[color:var(--border)]',\n false: '',\n },\n },\n defaultVariants: {\n sticky: false,\n divider: true,\n },\n },\n);\n\nconst headingVariants = cva(\n [\n // `min-w-0` lets the heading shrink below its content width so the\n // title span can clip; without it the flex row refuses to shrink and\n // the action cluster is pushed out of the panel.\n 'ds:m-0 ds:flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:text-[color:var(--foreground)]',\n ].join(' '),\n {\n variants: {\n titleScale: {\n card: 'type-title-card',\n section: 'type-title-section',\n },\n },\n defaultVariants: {\n titleScale: 'card',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Public API */\n/* -------------------------------------------------------------------- */\n\nexport interface PanelHeaderProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'title'>,\n VariantProps<typeof headerVariants> {\n /** Heading content. Already translated upstream. */\n title: ReactNode;\n /** Optional leading glyph — auto `aria-hidden` and sized to `--spacing` 4. */\n icon?: ReactNode;\n /** `id` applied to the heading so panels can wire `aria-labelledby`. */\n headingId?: string;\n /** Semantic heading level. Default `2`. */\n headingLevel?: 2 | 3;\n /** Panel-owned actions, rendered inline-end of the title row. */\n actions?: ReactNode;\n /** Optional second row, typically filter controls. */\n filters?: ReactNode;\n /** Pin to the top of the scroll region. Default `false`. */\n sticky?: boolean;\n /** Bottom hairline. Default `true`. */\n divider?: boolean;\n /** Type scale of the heading. Default `'card'`. */\n titleScale?: 'card' | 'section';\n /**\n * Full title for the overflow tooltip when `title` is not a plain string.\n * A string `title` is used as-is and needs nothing here. Pass this when\n * the title is composed (a name plus a badge, say) and there is still a\n * plain-text form worth showing.\n */\n titleTooltip?: string;\n}\n\nexport const PanelHeader = forwardRef<HTMLElement, PanelHeaderProps>(\n (\n {\n title,\n icon,\n headingId,\n headingLevel = 2,\n actions,\n filters,\n sticky = false,\n divider = true,\n titleScale = 'card',\n titleTooltip,\n className,\n ...rest\n },\n ref,\n ) => {\n const injected = usePanelHeaderActions();\n const Heading = headingLevel === 3 ? 'h3' : 'h2';\n const hasActions = actions != null || injected != null;\n\n const fullTitle =\n titleTooltip ?? (typeof title === 'string' ? title : undefined);\n // A callback ref, not `useRef`: wrapping the span in the Tooltip moves it\n // in the tree, so React mounts a NEW node. A plain ref would leave the\n // observer watching the detached one, which reports 0 × 0 and flips the\n // tooltip straight back off. Re-observing on every node swap is what\n // keeps it stable.\n const [titleNode, setTitleNode] = useState<HTMLSpanElement | null>(null);\n const [isTruncated, setIsTruncated] = useState(false);\n\n // Re-measure on resize: the rail is user-resizable, so a title that\n // fits at one width clips at the next.\n useEffect(() => {\n if (!titleNode || fullTitle == null) {\n setIsTruncated(false);\n return;\n }\n const measure = () =>\n setIsTruncated(titleNode.scrollWidth > titleNode.clientWidth);\n measure();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(measure);\n observer.observe(titleNode);\n return () => observer.disconnect();\n }, [titleNode, fullTitle]);\n\n const titleEl = (\n <span\n ref={setTitleNode}\n className=\"ds:min-w-0 ds:overflow-hidden ds:text-ellipsis ds:whitespace-nowrap\"\n >\n {title}\n </span>\n );\n\n return (\n <header\n ref={ref}\n data-component=\"panel-header\"\n className={headerVariants({ sticky, divider, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <Heading id={headingId} className={headingVariants({ titleScale })}>\n {icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:shrink-0 ds:text-[color:var(--accent)] ds:[&_svg]:size-4\"\n >\n {icon}\n </span>\n ) : null}\n {isTruncated && fullTitle != null ? (\n <Tooltip label={fullTitle}>{titleEl}</Tooltip>\n ) : (\n titleEl\n )}\n </Heading>\n {hasActions ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:shrink-0\">\n {actions}\n {injected}\n </div>\n ) : null}\n </div>\n\n {filters != null ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {filters}\n </div>\n ) : null}\n </header>\n );\n },\n);\n\nPanelHeader.displayName = 'PanelHeader';\n"],"names":["PanelHeaderActionsContext","createContext","PanelHeaderActionsProvider","actions","children","usePanelHeaderActions","useContext","headerVariants","cva","headingVariants","PanelHeader","forwardRef","title","icon","headingId","headingLevel","filters","sticky","divider","titleScale","titleTooltip","className","rest","ref","injected","Heading","hasActions","fullTitle","titleNode","setTitleNode","useState","isTruncated","setIsTruncated","useEffect","measure","observer","titleEl","jsx","jsxs","Tooltip"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"periodontal-risk-chart-CPy7CNFe.js","sources":["../../src/components/periodontal-risk-chart/periodontal-risk-chart.agent.ts","../../src/components/periodontal-risk-chart/periodontal-risk-data.ts","../../src/components/periodontal-risk-chart/periodontal-risk-chart.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { PeriodontalRiskChartHandle } from './periodontal-risk-chart';\n\n/* -------------------------------------------------------------------- */\n/* PeriodontalRiskChart — agent adapter */\n/* */\n/* Read-only. Exposes the derived risk verdict and per-factor levels — */\n/* ordinal risk bands only, never the raw clinical inputs or any patient */\n/* identity. */\n/* -------------------------------------------------------------------- */\n\nexport const periodontalRiskChartAgent: AgentAdapter<PeriodontalRiskChartHandle> =\n {\n id: 'periodontal-risk-chart',\n capabilities: [],\n state: {\n overall: {\n type: 'string',\n descriptionKey: 'ui.agent.periodontalRiskChart.state.overall',\n description:\n 'Overall periodontal risk verdict — \"low\" | \"moderate\" | \"high\". Aggregate only.',\n read: (handle) => handle.getOverall(),\n },\n factorLevels: {\n type: 'object',\n descriptionKey: 'ui.agent.periodontalRiskChart.state.factorLevels',\n description:\n 'Per-factor risk levels keyed by factor (bleeding, pockets, toothLoss, boneLossAge, smoking, systemic) — each \"low\" | \"moderate\" | \"high\". No raw values.',\n read: (handle) => handle.getFactorLevels(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'periodontal-risk-chart',\n description: 'Marks the PeriodontalRiskChart root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n };\n","/* -------------------------------------------------------------------- */\n/* PeriodontalRiskChart — data model */\n/* */\n/* The Lang & Tonetti (2003) periodontal risk assessment — six vectors, */\n/* each scored low / moderate / high, drawn as a hexagon \"spider web\". */\n/* This module owns the thresholds and the pure scoring function; the */\n/* component owns only the geometry + a11y presentation. */\n/* -------------------------------------------------------------------- */\n\n/** The six risk vectors of the Lang & Tonetti diagram. */\nexport const PERIODONTAL_RISK_FACTORS = [\n 'bleeding',\n 'pockets',\n 'toothLoss',\n 'boneLossAge',\n 'smoking',\n 'systemic',\n] as const;\n\nexport type PeriodontalRiskFactor = (typeof PERIODONTAL_RISK_FACTORS)[number];\n\n/** Ordinal risk level for one factor and for the whole assessment. */\nexport type PeriodontalRiskLevel = 'low' | 'moderate' | 'high';\n\n/** Environmental (smoking) exposure bands. */\nexport type SmokingExposure =\n | 'none'\n | 'former'\n | 'light'\n | 'moderate'\n | 'heavy';\n\n/** Consumer-supplied risk inputs. All optional — an absent factor scores low. */\nexport interface PeriodontalRiskInputs {\n /** Bleeding on probing, % of sites (0–100). */\n bleedingPercent?: number;\n /** Number of residual pockets ≥ 5 mm. */\n pocketsOver5mm?: number;\n /** Number of teeth lost (of 28, third molars excluded). */\n toothLoss?: number;\n /** % bone loss at the worst site — combined with `ageYears` into BL/age. */\n boneLossPercent?: number;\n /** Patient age in years (denominator of the bone-loss/age ratio). */\n ageYears?: number;\n /** Smoking exposure band. */\n smoking?: SmokingExposure;\n /** A relevant systemic / genetic factor is present (e.g. diabetes, IL-1). */\n systemic?: boolean;\n}\n\n/** Scored result for one factor. */\nexport interface PeriodontalRiskFactorScore {\n factor: PeriodontalRiskFactor;\n level: PeriodontalRiskLevel;\n /** 0 (best) → 1 (worst): the normalised radius used to plot the vertex. */\n radius: number;\n /** Raw value formatted for the accessible summary, or null when unset. */\n valueText: string | null;\n}\n\n/** The whole assessment. */\nexport interface PeriodontalRiskResult {\n factors: PeriodontalRiskFactorScore[];\n overall: PeriodontalRiskLevel;\n}\n\nconst LEVEL_RADIUS: Record<PeriodontalRiskLevel, number> = {\n low: 0.4,\n moderate: 0.7,\n high: 1,\n};\n\n/** Order a level to an ordinal (low 0 … high 2). */\nexport function riskOrdinal(level: PeriodontalRiskLevel): 0 | 1 | 2 {\n return level === 'high' ? 2 : level === 'moderate' ? 1 : 0;\n}\n\nfunction band(\n value: number,\n moderateAt: number,\n highAt: number,\n): PeriodontalRiskLevel {\n if (value >= highAt) return 'high';\n if (value >= moderateAt) return 'moderate';\n return 'low';\n}\n\nconst SMOKING_LEVEL: Record<SmokingExposure, PeriodontalRiskLevel> = {\n none: 'low',\n former: 'low',\n light: 'moderate',\n moderate: 'high',\n heavy: 'high',\n};\n\n/**\n * Score the six vectors and the overall risk. Overall follows the Lang &\n * Tonetti reading: high if any vector is high or two-or-more are moderate;\n * low only when every vector is low; moderate otherwise.\n */\nexport function computePeriodontalRisk(\n inputs: PeriodontalRiskInputs,\n): PeriodontalRiskResult {\n const scores: PeriodontalRiskFactorScore[] = [];\n\n const push = (\n factor: PeriodontalRiskFactor,\n level: PeriodontalRiskLevel,\n valueText: string | null,\n ) => scores.push({ factor, level, radius: LEVEL_RADIUS[level], valueText });\n\n // Bleeding on probing (%): <10 low, 10–25 moderate, >25 high.\n {\n const v = inputs.bleedingPercent;\n push(\n 'bleeding',\n v == null ? 'low' : band(v, 10, 26),\n v == null ? null : `${Math.round(v)}%`,\n );\n }\n // Residual pockets ≥5 mm: ≤4 low, 5–8 moderate, ≥9 high.\n {\n const v = inputs.pocketsOver5mm;\n push(\n 'pockets',\n v == null ? 'low' : band(v, 5, 9),\n v == null ? null : String(v),\n );\n }\n // Tooth loss: ≤4 low, 5–8 moderate, ≥9 high.\n {\n const v = inputs.toothLoss;\n push(\n 'toothLoss',\n v == null ? 'low' : band(v, 5, 9),\n v == null ? null : String(v),\n );\n }\n // Bone loss / age ratio: <0.5 low, 0.5–1.0 moderate, >1.0 high.\n {\n const bl = inputs.boneLossPercent;\n const age = inputs.ageYears;\n if (bl == null || age == null || age <= 0) {\n push('boneLossAge', 'low', null);\n } else {\n const ratio = bl / age;\n push(\n 'boneLossAge',\n ratio > 1 ? 'high' : ratio >= 0.5 ? 'moderate' : 'low',\n ratio.toFixed(2),\n );\n }\n }\n // Environmental (smoking).\n {\n const v = inputs.smoking;\n push('smoking', v == null ? 'low' : SMOKING_LEVEL[v], v ?? null);\n }\n // Systemic / genetic: present → high.\n {\n const v = inputs.systemic;\n push('systemic', v ? 'high' : 'low', v == null ? null : v ? 'yes' : 'no');\n }\n\n const highs = scores.filter((s) => s.level === 'high').length;\n const moderates = scores.filter((s) => s.level === 'moderate').length;\n const overall: PeriodontalRiskLevel =\n highs > 0 || moderates >= 2 ? 'high' : moderates === 1 ? 'moderate' : 'low';\n\n return { factors: scores, overall };\n}\n","import {\n forwardRef,\n useId,\n useMemo,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '../badge/badge';\nimport { Card } from '../card/card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { periodontalRiskChartAgent } from './periodontal-risk-chart.agent';\nimport {\n computePeriodontalRisk,\n PERIODONTAL_RISK_FACTORS,\n type PeriodontalRiskFactor,\n type PeriodontalRiskInputs,\n type PeriodontalRiskLevel,\n} from './periodontal-risk-data';\n\n/* -------------------------------------------------------------------- */\n/* PeriodontalRiskChart */\n/* */\n/* The Lang & Tonetti (2003) periodontal risk \"spider web\": six vectors */\n/* (bleeding, residual pockets, tooth loss, bone-loss/age, smoking, */\n/* systemic) each scored low / moderate / high, drawn as a hexagon. */\n/* */\n/* The hexagon SVG is DECORATIVE (aria-hidden) — the accessible source */\n/* of truth is the worded summary: an overall-risk Badge plus a <dl> of */\n/* the six factors with their level and value. Colour is never the sole */\n/* cue (every band and the overall verdict is also worded). */\n/* -------------------------------------------------------------------- */\n\nconst VIEW = 240;\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n surface: { flat: '', elevated: '' },\n },\n defaultVariants: { surface: 'elevated' },\n});\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface PeriodontalRiskChartHandle {\n /** The overall risk verdict. */\n getOverall: () => PeriodontalRiskLevel;\n /** Per-factor risk levels, keyed by factor. */\n getFactorLevels: () => Record<PeriodontalRiskFactor, PeriodontalRiskLevel>;\n}\n\nexport interface PeriodontalRiskChartProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children'\n> {\n /** The six risk inputs. Absent factors score low. */\n inputs: PeriodontalRiskInputs;\n /** `'elevated'` (default) wraps in a Card; `'flat'` drops the chrome. */\n surface?: 'flat' | 'elevated';\n /** Locale for number formatting. Falls back to `i18n.language`. */\n locale?: string;\n /** Override the default region aria-label. */\n 'aria-label'?: string;\n /** Agent-readiness consumer id, surfaced as `data-component-id`. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Geometry */\n/* -------------------------------------------------------------------- */\n\nconst CENTER = VIEW / 2;\nconst RADIUS = VIEW / 2 - 16;\n\n/** Vertex `i` (0 = top, clockwise) at a given radius. */\nfunction vertex(i: number, r: number): { x: number; y: number } {\n const angle = ((-90 + i * 60) * Math.PI) / 180;\n return { x: CENTER + r * Math.cos(angle), y: CENTER + r * Math.sin(angle) };\n}\n\n/** The six-point polygon string for a ring at fraction `f` of the radius. */\nfunction hexPoints(f: number): string {\n return PERIODONTAL_RISK_FACTORS.map((_, i) => {\n const v = vertex(i, RADIUS * f);\n return `${v.x.toFixed(1)},${v.y.toFixed(1)}`;\n }).join(' ');\n}\n\nconst BADGE_TONE: Record<\n PeriodontalRiskLevel,\n 'success' | 'warning' | 'error'\n> = {\n low: 'success',\n moderate: 'warning',\n high: 'error',\n};\n\nconst LEVEL_DEFAULT: Record<PeriodontalRiskLevel, string> = {\n low: 'Low',\n moderate: 'Moderate',\n high: 'High',\n};\n\nconst FACTOR_DEFAULT: Record<PeriodontalRiskFactor, string> = {\n bleeding: 'Bleeding on probing',\n pockets: 'Residual pockets ≥5 mm',\n toothLoss: 'Tooth loss',\n boneLossAge: 'Bone loss / age',\n smoking: 'Smoking',\n systemic: 'Systemic / genetic',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const PeriodontalRiskChart = forwardRef<\n HTMLDivElement,\n PeriodontalRiskChartProps\n>(\n (\n {\n inputs,\n surface = 'elevated',\n locale,\n 'aria-label': ariaLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const headingId = useId();\n const resolvedLocale = locale ?? i18n.language ?? 'en';\n\n const result = useMemo(() => computePeriodontalRisk(inputs), [inputs]);\n\n useAgentRegistration(\n periodontalRiskChartAgent,\n {\n getOverall: () => result.overall,\n getFactorLevels: () =>\n Object.fromEntries(\n result.factors.map((f) => [f.factor, f.level]),\n ) as Record<PeriodontalRiskFactor, PeriodontalRiskLevel>,\n },\n id,\n );\n\n const patientPoints = result.factors\n .map((f, i) => {\n const v = vertex(i, RADIUS * f.radius);\n return `${v.x.toFixed(1)},${v.y.toFixed(1)}`;\n })\n .join(' ');\n\n const levelLabel = (level: PeriodontalRiskLevel): string =>\n t(`periodontalRiskChart.level.${level}`, {\n defaultValue: LEVEL_DEFAULT[level],\n });\n\n const factorValueText = (\n factor: PeriodontalRiskFactor,\n raw: string | null,\n ): string => {\n if (raw == null)\n return t('periodontalRiskChart.valueUnset', 'not recorded');\n if (factor === 'smoking')\n return t(`periodontalRiskChart.smoking.${raw}`, { defaultValue: raw });\n if (factor === 'systemic')\n return t(`periodontalRiskChart.systemic.${raw}`, { defaultValue: raw });\n if (factor === 'bleeding') {\n // raw already carries the '%' glyph from the data layer; localise digits.\n const n = Number.parseFloat(raw);\n if (Number.isFinite(n)) {\n try {\n return t('periodontalRiskChart.percent', {\n value: new Intl.NumberFormat(resolvedLocale, {\n maximumFractionDigits: 0,\n }).format(n),\n defaultValue: '{{value}}%',\n });\n } catch {\n return raw;\n }\n }\n }\n return raw;\n };\n\n const heading = t('periodontalRiskChart.heading', 'Periodontal risk');\n const resolvedAriaLabel = ariaLabel ?? heading;\n\n const inner = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <h2\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {heading}\n </h2>\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {t('periodontalRiskChart.overall.label', 'Overall')}\n </span>\n <Badge variant={BADGE_TONE[result.overall]} size=\"sm\">\n {levelLabel(result.overall)}\n </Badge>\n </span>\n </div>\n\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-lg)]\">\n {/* Decorative hexagon — the <dl> below is the accessible source. */}\n <svg\n viewBox={`0 0 ${VIEW} ${VIEW}`}\n className=\"ds:w-full ds:max-w-[240px] ds:aspect-square\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <polygon\n points={hexPoints(1)}\n fill=\"var(--destructive)\"\n fillOpacity={0.1}\n />\n <polygon\n points={hexPoints(0.7)}\n fill=\"var(--warning)\"\n fillOpacity={0.12}\n />\n <polygon\n points={hexPoints(0.4)}\n fill=\"var(--success)\"\n fillOpacity={0.14}\n />\n {[1, 0.7, 0.4].map((f) => (\n <polygon\n key={f}\n points={hexPoints(f)}\n fill=\"none\"\n stroke=\"var(--border)\"\n strokeWidth={1}\n />\n ))}\n {PERIODONTAL_RISK_FACTORS.map((_, i) => {\n const v = vertex(i, RADIUS);\n return (\n <line\n key={i}\n x1={CENTER}\n y1={CENTER}\n x2={v.x}\n y2={v.y}\n stroke=\"var(--border)\"\n strokeWidth={1}\n />\n );\n })}\n <polygon\n points={patientPoints}\n fill=\"var(--primary)\"\n fillOpacity={0.18}\n stroke=\"var(--primary)\"\n strokeWidth={2}\n strokeLinejoin=\"round\"\n />\n {result.factors.map((f, i) => {\n const v = vertex(i, RADIUS * f.radius);\n return (\n <circle\n key={f.factor}\n cx={v.x}\n cy={v.y}\n r={3}\n fill=\"var(--primary)\"\n />\n );\n })}\n </svg>\n\n <dl\n className=\"type-body-sm ds:grid ds:min-w-[12rem] ds:flex-1 ds:grid-cols-[auto_1fr] ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)] ds:m-0\"\n aria-label={t('periodontalRiskChart.factors.label', 'Risk factors')}\n >\n {result.factors.map((f) => (\n <div key={f.factor} className=\"ds:contents\">\n <dt className=\"ds:text-[color:var(--muted-foreground)]\">\n {t(`periodontalRiskChart.factor.${f.factor}`, {\n defaultValue: FACTOR_DEFAULT[f.factor],\n })}\n </dt>\n <dd className=\"ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <Badge variant={BADGE_TONE[f.level]} size=\"sm\">\n {levelLabel(f.level)}\n </Badge>\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {factorValueText(f.factor, f.valueText)}\n </span>\n </dd>\n </div>\n ))}\n </dl>\n </div>\n </div>\n );\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={resolvedAriaLabel}\n data-component=\"periodontal-risk-chart\"\n data-component-id={id}\n id={id}\n className={rootVariants({ surface, className })}\n {...rest}\n >\n {surface === 'elevated' ? (\n <Card variant=\"elevated\">\n <Card.Body>{inner}</Card.Body>\n </Card>\n ) : (\n inner\n )}\n </div>\n );\n },\n);\n\nPeriodontalRiskChart.displayName = 'PeriodontalRiskChart';\n\nexport type PeriodontalRiskChartSurface = NonNullable<\n VariantProps<typeof rootVariants>['surface']\n>;\n"],"names":["periodontalRiskChartAgent","handle","PERIODONTAL_RISK_FACTORS","LEVEL_RADIUS","riskOrdinal","level","band","value","moderateAt","highAt","SMOKING_LEVEL","computePeriodontalRisk","inputs","scores","push","factor","valueText","v","bl","age","ratio","highs","s","moderates","overall","VIEW","rootVariants","cva","CENTER","RADIUS","vertex","i","r","angle","hexPoints","f","_","BADGE_TONE","LEVEL_DEFAULT","FACTOR_DEFAULT","PeriodontalRiskChart","forwardRef","surface","locale","ariaLabel","id","className","rest","ref","t","i18n","useTranslation","headingId","useId","resolvedLocale","result","useMemo","useAgentRegistration","patientPoints","levelLabel","factorValueText","raw","n","heading","resolvedAriaLabel","inner","jsxs","jsx","Badge","Card"],"mappings":"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"}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { jsxs as s, jsx as e, Fragment as w } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as k, useId as C, useMemo as R, useRef as j } from "react";
|
|
3
|
-
import { c as A } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { A as x } from "./avatar-WZY3eGE7.js";
|
|
5
|
-
import { B } from "./badge-BUk4RjTS.js";
|
|
6
|
-
import { C as y } from "./card-BA4Ig_kn.js";
|
|
7
|
-
import { R as z } from "./rating-C1Vrmpsi.js";
|
|
8
|
-
import { u as I } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
|
|
9
|
-
import { u as K } from "./registry-DvAUVLHh.js";
|
|
10
|
-
const M = {
|
|
11
|
-
id: "practice-profile-hero",
|
|
12
|
-
// Purely observable hero region — no interactive affordances and no
|
|
13
|
-
// imperative actions on the handle (getName / getHasCover are read-only
|
|
14
|
-
// projections).
|
|
15
|
-
capabilities: [],
|
|
16
|
-
state: {
|
|
17
|
-
name: {
|
|
18
|
-
type: "string",
|
|
19
|
-
descriptionKey: "ui.agent.practiceProfileHero.state.name",
|
|
20
|
-
description: "Practice display name currently rendered.",
|
|
21
|
-
read: (r) => r.getName()
|
|
22
|
-
},
|
|
23
|
-
hasCover: {
|
|
24
|
-
type: "boolean",
|
|
25
|
-
descriptionKey: "ui.agent.practiceProfileHero.state.hasCover",
|
|
26
|
-
description: "Whether a cover-image strip is rendered. Structural flag only — never the image URL or any PHI.",
|
|
27
|
-
read: (r) => r.getHasCover()
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
actions: {},
|
|
31
|
-
domHooks: {
|
|
32
|
-
root: {
|
|
33
|
-
attr: "data-component",
|
|
34
|
-
value: "practice-profile-hero",
|
|
35
|
-
description: "Marks the PracticeProfileHero root region."
|
|
36
|
-
},
|
|
37
|
-
instanceId: {
|
|
38
|
-
attr: "data-component-id",
|
|
39
|
-
sourceProp: "id",
|
|
40
|
-
description: "Sourced from the id prop."
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}, V = A("ds:w-full ds:text-[color:var(--foreground)]", {
|
|
44
|
-
variants: {
|
|
45
|
-
// Matches the kit's other `surface` props (Booking, ReviewsPanel,
|
|
46
|
-
// OperatorHero). `'elevated'` wraps in `<Card>`.
|
|
47
|
-
surface: {
|
|
48
|
-
flat: "",
|
|
49
|
-
elevated: ""
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
defaultVariants: {
|
|
53
|
-
surface: "elevated"
|
|
54
|
-
}
|
|
55
|
-
}), E = k(
|
|
56
|
-
({
|
|
57
|
-
name: r,
|
|
58
|
-
tagline: c,
|
|
59
|
-
imageUrl: n,
|
|
60
|
-
coverImageUrl: t,
|
|
61
|
-
rating: o,
|
|
62
|
-
badges: d,
|
|
63
|
-
actionSlot: p,
|
|
64
|
-
surface: m = "elevated",
|
|
65
|
-
"aria-label": f,
|
|
66
|
-
id: l,
|
|
67
|
-
className: N,
|
|
68
|
-
...P
|
|
69
|
-
}, H) => {
|
|
70
|
-
const v = C(), i = !!t, b = R(
|
|
71
|
-
() => ({ getName: () => r, getHasCover: () => i }),
|
|
72
|
-
[r, i]
|
|
73
|
-
);
|
|
74
|
-
K(M, b, l);
|
|
75
|
-
const h = j(null);
|
|
76
|
-
I(() => {
|
|
77
|
-
const a = h.current;
|
|
78
|
-
a && (t ? a.style.setProperty(
|
|
79
|
-
"--practice-profile-hero-cover",
|
|
80
|
-
`url("${t.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}")`
|
|
81
|
-
) : a.style.removeProperty("--practice-profile-hero-cover"));
|
|
82
|
-
}, [t]);
|
|
83
|
-
const u = i ? /* @__PURE__ */ e(
|
|
84
|
-
"div",
|
|
85
|
-
{
|
|
86
|
-
ref: h,
|
|
87
|
-
"aria-hidden": "true",
|
|
88
|
-
"data-slot": "cover",
|
|
89
|
-
className: [
|
|
90
|
-
"ds:h-32 ds:sm:h-40 ds:w-full",
|
|
91
|
-
// Cover image layered over the brand gradient — the gradient is
|
|
92
|
-
// the visible underlay while the image streams in (or 404s). The
|
|
93
|
-
// `none` fallback keeps the declaration valid before the layout
|
|
94
|
-
// effect sets the custom property (SSR / first paint).
|
|
95
|
-
"ds:bg-[image:var(--practice-profile-hero-cover,none),var(--gradient-hero-brand)]",
|
|
96
|
-
"ds:bg-cover ds:bg-center"
|
|
97
|
-
].join(" ")
|
|
98
|
-
}
|
|
99
|
-
) : null, g = /* @__PURE__ */ s(
|
|
100
|
-
"div",
|
|
101
|
-
{
|
|
102
|
-
className: [
|
|
103
|
-
// Phones: stacked column, smaller avatar — the practice name,
|
|
104
|
-
// tagline and rating keep the full line width instead of being
|
|
105
|
-
// squeezed beside a 3xl avatar. sm+: classic row layout.
|
|
106
|
-
"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-md)]",
|
|
107
|
-
"ds:sm:flex-row ds:sm:gap-[var(--spacing-lg)]"
|
|
108
|
-
].join(" "),
|
|
109
|
-
children: [
|
|
110
|
-
/* @__PURE__ */ e("div", { className: "ds:shrink-0 ds:sm:hidden", children: /* @__PURE__ */ e(x, { size: "xl", name: r, src: n, "aria-hidden": "true" }) }),
|
|
111
|
-
/* @__PURE__ */ e("div", { className: "ds:hidden ds:shrink-0 ds:sm:block", children: /* @__PURE__ */ e(x, { size: "3xl", name: r, src: n, "aria-hidden": "true" }) }),
|
|
112
|
-
/* @__PURE__ */ s("div", { className: "ds:flex ds:w-full ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
|
|
113
|
-
/* @__PURE__ */ s("div", { className: "ds:flex ds:flex-wrap ds:items-start ds:gap-[var(--spacing-md)]", children: [
|
|
114
|
-
/* @__PURE__ */ e(
|
|
115
|
-
"h1",
|
|
116
|
-
{
|
|
117
|
-
id: v,
|
|
118
|
-
className: "type-title-page ds:m-0 ds:text-[color:var(--foreground)]",
|
|
119
|
-
children: r
|
|
120
|
-
}
|
|
121
|
-
),
|
|
122
|
-
p ? (
|
|
123
|
-
// `ms-auto` + `shrink-0` are the desktop contract, and both are
|
|
124
|
-
// wrong once the row wraps on a phone: they stranded the action
|
|
125
|
-
// at the inline-end of a start-aligned stack and stopped a wide
|
|
126
|
-
// control fitting the column. Hence `sm:` and up only.
|
|
127
|
-
/* @__PURE__ */ e("div", { className: "ds:flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-xs)] ds:sm:ms-auto ds:sm:shrink-0", children: p })
|
|
128
|
-
) : null
|
|
129
|
-
] }),
|
|
130
|
-
c ? /* @__PURE__ */ e("p", { className: "type-body ds:m-0 ds:text-[color:var(--foreground)]", children: c }) : null,
|
|
131
|
-
o ? (
|
|
132
|
-
// Rating owns the whole line: locale-formatted value, plural-
|
|
133
|
-
// aware review count, and a single role="img" announcement.
|
|
134
|
-
/* @__PURE__ */ e(
|
|
135
|
-
z,
|
|
136
|
-
{
|
|
137
|
-
value: o.value,
|
|
138
|
-
max: 5,
|
|
139
|
-
size: "md",
|
|
140
|
-
reviews: { count: o.count }
|
|
141
|
-
}
|
|
142
|
-
)
|
|
143
|
-
) : null,
|
|
144
|
-
d && d.length > 0 ? /* @__PURE__ */ e(
|
|
145
|
-
"div",
|
|
146
|
-
{
|
|
147
|
-
role: "list",
|
|
148
|
-
className: "ds:mt-[var(--spacing-2xs)] ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-2xs)]",
|
|
149
|
-
children: d.map((a) => /* @__PURE__ */ e(
|
|
150
|
-
B,
|
|
151
|
-
{
|
|
152
|
-
variant: a.variant ?? "neutral",
|
|
153
|
-
role: "listitem",
|
|
154
|
-
children: a.label
|
|
155
|
-
},
|
|
156
|
-
a.key
|
|
157
|
-
))
|
|
158
|
-
}
|
|
159
|
-
) : null
|
|
160
|
-
] })
|
|
161
|
-
]
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
return /* @__PURE__ */ e(
|
|
165
|
-
"div",
|
|
166
|
-
{
|
|
167
|
-
ref: H,
|
|
168
|
-
role: "region",
|
|
169
|
-
"aria-label": f,
|
|
170
|
-
"aria-labelledby": f ? void 0 : v,
|
|
171
|
-
"data-component": "practice-profile-hero",
|
|
172
|
-
"data-component-id": l,
|
|
173
|
-
"data-has-cover": i ? "true" : "false",
|
|
174
|
-
id: l,
|
|
175
|
-
className: V({ surface: m, className: N }),
|
|
176
|
-
...P,
|
|
177
|
-
children: m === "elevated" ? /* @__PURE__ */ s(y, { variant: "elevated", children: [
|
|
178
|
-
u,
|
|
179
|
-
/* @__PURE__ */ e(y.Body, { children: g })
|
|
180
|
-
] }) : /* @__PURE__ */ s(w, { children: [
|
|
181
|
-
u,
|
|
182
|
-
/* @__PURE__ */ e("div", { className: "ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]", children: g })
|
|
183
|
-
] })
|
|
184
|
-
}
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
);
|
|
188
|
-
E.displayName = "PracticeProfileHero";
|
|
189
|
-
export {
|
|
190
|
-
E as P,
|
|
191
|
-
M as p
|
|
192
|
-
};
|
|
193
|
-
//# sourceMappingURL=practice-profile-hero-Dfc0F60y.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"practice-profile-hero-Dfc0F60y.js","sources":["../../src/components/practice-profile-hero/practice-profile-hero.agent.ts","../../src/components/practice-profile-hero/practice-profile-hero.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { PracticeProfileHeroHandle } from './practice-profile-hero';\n\nexport const practiceProfileHeroAgent: AgentAdapter<PracticeProfileHeroHandle> =\n {\n id: 'practice-profile-hero',\n // Purely observable hero region — no interactive affordances and no\n // imperative actions on the handle (getName / getHasCover are read-only\n // projections).\n capabilities: [],\n state: {\n name: {\n type: 'string',\n descriptionKey: 'ui.agent.practiceProfileHero.state.name',\n description: 'Practice display name currently rendered.',\n read: (handle) => handle.getName(),\n },\n hasCover: {\n type: 'boolean',\n descriptionKey: 'ui.agent.practiceProfileHero.state.hasCover',\n description:\n 'Whether a cover-image strip is rendered. Structural flag only — never the image URL or any PHI.',\n read: (handle) => handle.getHasCover(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'practice-profile-hero',\n description: 'Marks the PracticeProfileHero root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n };\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Avatar } from '../avatar/avatar';\nimport { Badge } from '../badge/badge';\nimport { Card } from '../card/card';\nimport { Rating } from '../rating/rating';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { practiceProfileHeroAgent } from './practice-profile-hero.agent';\n\n/* -------------------------------------------------------------------- */\n/* PracticeProfileHero */\n/* */\n/* The practice-page counterpart to `<OperatorHero>` — the top-of-page */\n/* hero for a practice profile (booking site `/p/<seoUrl>`, marketplace */\n/* practice views). Differences from the operator hero: */\n/* */\n/* - Optional cover strip: renders ONLY when `coverImageUrl` is set. */\n/* A practice without a configured cover image gets no strip at all */\n/* — never an empty brand-gradient band eating page space. */\n/* - Larger avatar at desktop widths (3xl), stepped down to xl and */\n/* stacked above the text on small viewports so the practice name, */\n/* tagline and rating keep the full line width on phones. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n // Matches the kit's other `surface` props (Booking, ReviewsPanel,\n // OperatorHero). `'elevated'` wraps in `<Card>`.\n surface: {\n flat: '',\n elevated: '',\n },\n },\n defaultVariants: {\n surface: 'elevated',\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\nexport interface PracticeProfileHeroBadge {\n /** Display key — i18n is up to the consumer. */\n key: string;\n /** Display label. */\n label: string;\n /** Badge variant — falls back to `neutral`. */\n variant?: 'neutral' | 'info' | 'success' | 'warning' | 'error';\n}\n\nexport interface PracticeProfileHeroRating {\n /** Mean rating, 0–5. */\n value: number;\n /** Total number of reviews. */\n count: number;\n}\n\nexport interface PracticeProfileHeroHandle {\n getName: () => string;\n /** Structural flag — whether a cover strip is rendered. No PHI. */\n getHasCover: () => boolean;\n}\n\nexport interface PracticeProfileHeroProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children'\n> {\n /** Practice display name. Rendered as the H1 heading. */\n name: string;\n /** Slogan / tagline subtitle (e.g. \"15 anni di esperienza nel cuore di Brera\"). */\n tagline?: string;\n /**\n * Optional practice photo / logo URL. The kit always renders an\n * `<Avatar>` — when `imageUrl` is missing the avatar falls back to\n * initials.\n */\n imageUrl?: string;\n /**\n * Optional cover image painted as a full-width strip above the body.\n * The strip renders ONLY when this is set — a practice without a cover\n * image gets no strip (and no empty gradient band). While the image\n * loads, the brand gradient shows underneath it.\n */\n coverImageUrl?: string;\n /** Rating summary — when present, renders a Rating + numeric breakdown line. */\n rating?: PracticeProfileHeroRating;\n /**\n * Optional badge row beneath the rating. Use sparingly — 1–3 chips\n * suit the hero's density; longer lists belong in `<ContactProfileCard>`.\n */\n badges?: PracticeProfileHeroBadge[];\n\n /* ----- Slots ----- */\n\n /**\n * Rendered at the inline-end of the heading row (right side on LTR)\n * from `sm` up. The heading row wraps, so on a phone the action drops\n * onto its own line, starts flush with the practice name, and is free\n * to shrink into the column rather than overflow it.\n *\n * Use for a \"Book an appointment\" `<Button>` or a share action.\n */\n actionSlot?: ReactNode;\n\n /* ----- Styling ----- */\n\n /**\n * `elevated` (default) wraps in `<Card variant=\"elevated\">`. `flat`\n * drops the Card — use inside another card / sheet.\n */\n surface?: 'flat' | 'elevated';\n\n /* ----- a11y ----- */\n\n 'aria-label'?: string;\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const PracticeProfileHero = forwardRef<\n HTMLDivElement,\n PracticeProfileHeroProps\n>(\n (\n {\n name,\n tagline,\n imageUrl,\n coverImageUrl,\n rating,\n badges,\n actionSlot,\n surface = 'elevated',\n 'aria-label': ariaLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const headingId = useId();\n const hasCover = Boolean(coverImageUrl);\n\n // Memoised so the registry doesn't see a fresh handle identity (and\n // fire unregister+register) on every render — mirrors Booking.\n const agentHandle = useMemo(\n () => ({ getName: () => name, getHasCover: () => hasCover }),\n [name, hasCover],\n );\n useAgentRegistration(practiceProfileHeroAgent, agentHandle, id);\n\n // Cover image URL lands as a component-scoped CSS custom property set\n // imperatively on a ref — mirrors the Avatar `--avatar-color-override`\n // idiom so no `style={{…}}` attribute lands on the JSX (constraint §4).\n const coverRef = useRef<HTMLDivElement>(null);\n useIsomorphicLayoutEffect(() => {\n const el = coverRef.current;\n if (!el) return;\n if (coverImageUrl) {\n el.style.setProperty(\n '--practice-profile-hero-cover',\n `url(\"${coverImageUrl.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\")`,\n );\n } else {\n el.style.removeProperty('--practice-profile-hero-cover');\n }\n }, [coverImageUrl]);\n\n const cover = hasCover ? (\n <div\n ref={coverRef}\n aria-hidden=\"true\"\n data-slot=\"cover\"\n className={[\n 'ds:h-32 ds:sm:h-40 ds:w-full',\n // Cover image layered over the brand gradient — the gradient is\n // the visible underlay while the image streams in (or 404s). The\n // `none` fallback keeps the declaration valid before the layout\n // effect sets the custom property (SSR / first paint).\n 'ds:bg-[image:var(--practice-profile-hero-cover,none),var(--gradient-hero-brand)]',\n 'ds:bg-cover ds:bg-center',\n ].join(' ')}\n />\n ) : null;\n\n const body = (\n <div\n className={[\n // Phones: stacked column, smaller avatar — the practice name,\n // tagline and rating keep the full line width instead of being\n // squeezed beside a 3xl avatar. sm+: classic row layout.\n 'ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-md)]',\n 'ds:sm:flex-row ds:sm:gap-[var(--spacing-lg)]',\n ].join(' ')}\n >\n {/* Responsive avatar — `ds:hidden` removes the inactive size from\n both the layout and the accessibility tree. Both renders are\n aria-hidden: the H1 right beside them already carries the\n practice name, so the avatar is decorative here. */}\n <div className=\"ds:shrink-0 ds:sm:hidden\">\n <Avatar size=\"xl\" name={name} src={imageUrl} aria-hidden=\"true\" />\n </div>\n <div className=\"ds:hidden ds:shrink-0 ds:sm:block\">\n <Avatar size=\"3xl\" name={name} src={imageUrl} aria-hidden=\"true\" />\n </div>\n <div className=\"ds:flex ds:w-full ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-start ds:gap-[var(--spacing-md)]\">\n <h1\n id={headingId}\n className=\"type-title-page ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {name}\n </h1>\n {actionSlot ? (\n // `ms-auto` + `shrink-0` are the desktop contract, and both are\n // wrong once the row wraps on a phone: they stranded the action\n // at the inline-end of a start-aligned stack and stopped a wide\n // control fitting the column. Hence `sm:` and up only.\n <div className=\"ds:flex ds:min-w-0 ds:items-center ds:gap-[var(--spacing-xs)] ds:sm:ms-auto ds:sm:shrink-0\">\n {actionSlot}\n </div>\n ) : null}\n </div>\n {tagline ? (\n <p className=\"type-body ds:m-0 ds:text-[color:var(--foreground)]\">\n {tagline}\n </p>\n ) : null}\n {rating ? (\n // Rating owns the whole line: locale-formatted value, plural-\n // aware review count, and a single role=\"img\" announcement.\n <Rating\n value={rating.value}\n max={5}\n size=\"md\"\n reviews={{ count: rating.count }}\n />\n ) : null}\n {badges && badges.length > 0 ? (\n <div\n role=\"list\"\n className=\"ds:mt-[var(--spacing-2xs)] ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-2xs)]\"\n >\n {badges.map((badge) => (\n <Badge\n key={badge.key}\n variant={badge.variant ?? 'neutral'}\n role=\"listitem\"\n >\n {badge.label}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n // A consumer-supplied aria-label wins; otherwise the region is\n // named by the practice-name H1 via aria-labelledby.\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"practice-profile-hero\"\n data-component-id={id}\n data-has-cover={hasCover ? 'true' : 'false'}\n id={id}\n className={rootVariants({ surface, className })}\n {...rest}\n >\n {surface === 'elevated' ? (\n <Card variant=\"elevated\">\n {cover}\n <Card.Body>{body}</Card.Body>\n </Card>\n ) : (\n <>\n {cover}\n <div className=\"ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]\">\n {body}\n </div>\n </>\n )}\n </div>\n );\n },\n);\n\nPracticeProfileHero.displayName = 'PracticeProfileHero';\n"],"names":["practiceProfileHeroAgent","handle","rootVariants","cva","PracticeProfileHero","forwardRef","name","tagline","imageUrl","coverImageUrl","rating","badges","actionSlot","surface","ariaLabel","id","className","rest","ref","headingId","useId","hasCover","agentHandle","useMemo","useAgentRegistration","coverRef","useRef","useIsomorphicLayoutEffect","el","cover","jsx","body","jsxs","Avatar","Rating","badge","Badge","Card","Fragment"],"mappings":";;;;;;;;;AAGO,MAAMA,IACX;AAAA,EACE,IAAI;AAAA;AAAA;AAAA;AAAA,EAIJ,cAAc,CAAA;AAAA,EACd,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,QAAA;AAAA,IAAQ;AAAA,IAEnC,UAAU;AAAA,MACR,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,YAAA;AAAA,IAAY;AAAA,EACvC;AAAA,EAEF,SAAS,CAAA;AAAA,EACT,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GCFIC,IAAeC,EAAI,+CAA+C;AAAA,EACtE,UAAU;AAAA;AAAA;AAAA,IAGR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,iBAAiB;AAAA,IACf,SAAS;AAAA,EAAA;AAEb,CAAC,GAuFYC,IAAsBC;AAAA,EAIjC,CACE;AAAA,IACE,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,cAAcC;AAAA,IACd,IAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAYC,EAAA,GACZC,IAAW,EAAQZ,GAInBa,IAAcC;AAAA,MAClB,OAAO,EAAE,SAAS,MAAMjB,GAAM,aAAa,MAAMe,EAAA;AAAA,MACjD,CAACf,GAAMe,CAAQ;AAAA,IAAA;AAEjB,IAAAG,EAAqBxB,GAA0BsB,GAAaP,CAAE;AAK9D,UAAMU,IAAWC,EAAuB,IAAI;AAC5C,IAAAC,EAA0B,MAAM;AAC9B,YAAMC,IAAKH,EAAS;AACpB,MAAKG,MACDnB,IACFmB,EAAG,MAAM;AAAA,QACP;AAAA,QACA,QAAQnB,EAAc,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK,CAAC;AAAA,MAAA,IAGnEmB,EAAG,MAAM,eAAe,+BAA+B;AAAA,IAE3D,GAAG,CAACnB,CAAa,CAAC;AAElB,UAAMoB,IAAQR,IACZ,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKL;AAAA,QACL,eAAY;AAAA,QACZ,aAAU;AAAA,QACV,WAAW;AAAA,UACT;AAAA;AAAA;AAAA;AAAA;AAAA,UAKA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,MAAA;AAAA,IAAA,IAEV,MAEEM,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA;AAAA;AAAA,UAIT;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QAMV,UAAA;AAAA,UAAA,gBAAAF,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA,gBAAAA,EAACG,GAAA,EAAO,MAAK,MAAK,MAAA3B,GAAY,KAAKE,GAAU,eAAY,OAAA,CAAO,GAClE;AAAA,UACA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,qCACb,UAAA,gBAAAA,EAACG,GAAA,EAAO,MAAK,OAAM,MAAA3B,GAAY,KAAKE,GAAU,eAAY,QAAO,GACnE;AAAA,UACA,gBAAAwB,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kEACb,UAAA;AAAA,cAAA,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAIX;AAAA,kBACJ,WAAU;AAAA,kBAET,UAAAb;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEFM;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKC,gBAAAkB,EAAC,OAAA,EAAI,WAAU,8FACZ,UAAAlB,EAAA,CACH;AAAA,kBACE;AAAA,YAAA,GACN;AAAA,YACCL,IACC,gBAAAuB,EAAC,KAAA,EAAE,WAAU,sDACV,aACH,IACE;AAAA,YACHpB;AAAA;AAAA;AAAA,cAGC,gBAAAoB;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,OAAOxB,EAAO;AAAA,kBACd,KAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAS,EAAE,OAAOA,EAAO,MAAA;AAAA,gBAAM;AAAA,cAAA;AAAA,gBAE/B;AAAA,YACHC,KAAUA,EAAO,SAAS,IACzB,gBAAAmB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBAET,UAAAnB,EAAO,IAAI,CAACwB,MACX,gBAAAL;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBAEC,SAASD,EAAM,WAAW;AAAA,oBAC1B,MAAK;AAAA,oBAEJ,UAAAA,EAAM;AAAA,kBAAA;AAAA,kBAJFA,EAAM;AAAA,gBAAA,CAMd;AAAA,cAAA;AAAA,YAAA,IAED;AAAA,UAAA,EAAA,CACN;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIJ,WACE,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAZ;AAAA,QACA,MAAK;AAAA,QAGL,cAAYJ;AAAA,QACZ,mBAAiBA,IAAY,SAAYK;AAAA,QACzC,kBAAe;AAAA,QACf,qBAAmBJ;AAAA,QACnB,kBAAgBM,IAAW,SAAS;AAAA,QACpC,IAAAN;AAAA,QACA,WAAWb,EAAa,EAAE,SAAAW,GAAS,WAAAG,GAAW;AAAA,QAC7C,GAAGC;AAAA,QAEH,UAAAJ,MAAY,aACX,gBAAAmB,EAACK,GAAA,EAAK,SAAQ,YACX,UAAA;AAAA,UAAAR;AAAA,UACD,gBAAAC,EAACO,EAAK,MAAL,EAAW,UAAAN,EAAA,CAAK;AAAA,QAAA,EAAA,CACnB,IAEA,gBAAAC,EAAAM,GAAA,EACG,UAAA;AAAA,UAAAT;AAAA,UACD,gBAAAC,EAAC,OAAA,EAAI,WAAU,uDACZ,UAAAC,EAAA,CACH;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEA3B,EAAoB,cAAc;"}
|