@alfadocs/ui-kit-debug 1.35.0 → 1.36.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/{actions-cell-renderer-yy03OgRL.js → actions-cell-renderer-CUn1pqEq.js} +3 -3
- package/dist/_chunks/{actions-cell-renderer-yy03OgRL.js.map → actions-cell-renderer-CUn1pqEq.js.map} +1 -1
- package/dist/_chunks/{agenda-card-DVz3jwTf.js → agenda-card-DyQtHb9z.js} +2 -2
- package/dist/_chunks/{agenda-card-DVz3jwTf.js.map → agenda-card-DyQtHb9z.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-1oDWCJdB.js → agenda-tray-DYGCTIWB.js} +3 -3
- package/dist/_chunks/{agenda-tray-1oDWCJdB.js.map → agenda-tray-DYGCTIWB.js.map} +1 -1
- package/dist/_chunks/{ai-consent-banner-OggpS5hW.js → ai-consent-banner-De4gzSBZ.js} +4 -4
- package/dist/_chunks/{ai-consent-banner-OggpS5hW.js.map → ai-consent-banner-De4gzSBZ.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-Dt7tpCBh.js → ai-prompt-input-DdxlaI7q.js} +2 -2
- package/dist/_chunks/{ai-prompt-input-Dt7tpCBh.js.map → ai-prompt-input-DdxlaI7q.js.map} +1 -1
- package/dist/_chunks/{alert-CiJT540z.js → alert-CiQ5Pa3Q.js} +2 -2
- package/dist/_chunks/{alert-CiJT540z.js.map → alert-CiQ5Pa3Q.js.map} +1 -1
- package/dist/_chunks/{alia-sidebar-D18kp3p9.js → alia-sidebar-B6bXlZZk.js} +6 -6
- package/dist/_chunks/{alia-sidebar-D18kp3p9.js.map → alia-sidebar-B6bXlZZk.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-NTi4LLzI.js → anamnesis-card-DGwINeNn.js} +3 -3
- package/dist/_chunks/{anamnesis-card-NTi4LLzI.js.map → anamnesis-card-DGwINeNn.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-card-DGVKBQoq.js → anamnesis-summary-card-GYHa7VGp.js} +3 -3
- package/dist/_chunks/{anamnesis-summary-card-DGVKBQoq.js.map → anamnesis-summary-card-GYHa7VGp.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-BYgyp_i2.js → anamnesis-summary-rows-Cxtgo2ok.js} +12 -12
- package/dist/_chunks/{anamnesis-summary-rows-BYgyp_i2.js.map → anamnesis-summary-rows-Cxtgo2ok.js.map} +1 -1
- package/dist/_chunks/{antenatal-schedule-timeline-sXfIp5lp.js → antenatal-schedule-timeline-CXk_tzWG.js} +2 -2
- package/dist/_chunks/{antenatal-schedule-timeline-sXfIp5lp.js.map → antenatal-schedule-timeline-CXk_tzWG.js.map} +1 -1
- package/dist/_chunks/{appointment-card-Bh_CIlc6.js → appointment-card-WsDGBBut.js} +120 -126
- package/dist/_chunks/appointment-card-WsDGBBut.js.map +1 -0
- package/dist/_chunks/{appointment-timeline-De-Wqdkw.js → appointment-timeline-ByfovxqR.js} +5 -5
- package/dist/_chunks/{appointment-timeline-De-Wqdkw.js.map → appointment-timeline-ByfovxqR.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-4I9wTAi4.js → appointment-tray-D6UyJHej.js} +3 -3
- package/dist/_chunks/{appointment-tray-4I9wTAi4.js.map → appointment-tray-D6UyJHej.js.map} +1 -1
- package/dist/_chunks/arrow-right-KsIrLdt0.js +15 -0
- package/dist/_chunks/arrow-right-KsIrLdt0.js.map +1 -0
- package/dist/_chunks/{audio-recorder-11wClczr.js → audio-recorder-BlQBC7N_.js} +3 -3
- package/dist/_chunks/{audio-recorder-11wClczr.js.map → audio-recorder-BlQBC7N_.js.map} +1 -1
- package/dist/_chunks/{badge-sTusUqZD.js → badge-BudgzTe_.js} +2 -2
- package/dist/_chunks/{badge-sTusUqZD.js.map → badge-BudgzTe_.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-DhBtFRoW.js → balance-badge-cell-B0Z8Dwn8.js} +6 -6
- package/dist/_chunks/{balance-badge-cell-DhBtFRoW.js.map → balance-badge-cell-B0Z8Dwn8.js.map} +1 -1
- package/dist/_chunks/{bishop-score-CAl7C5hm.js → bishop-score-D5b8tktp.js} +2 -2
- package/dist/_chunks/{bishop-score-CAl7C5hm.js.map → bishop-score-D5b8tktp.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-Dwkih9a4.js → bmi-calculator-dOKP-vW4.js} +4 -4
- package/dist/_chunks/{bmi-calculator-Dwkih9a4.js.map → bmi-calculator-dOKP-vW4.js.map} +1 -1
- package/dist/_chunks/{booking-BqkEtsKx.js → booking-Dp-9qR6F.js} +9 -9
- package/dist/_chunks/{booking-BqkEtsKx.js.map → booking-Dp-9qR6F.js.map} +1 -1
- package/dist/_chunks/button-group-QmN1VdUW.js +307 -0
- package/dist/_chunks/button-group-QmN1VdUW.js.map +1 -0
- package/dist/_chunks/{calendar-Dgvl5L4T.js → calendar-7GAUlsNO.js} +3 -3
- package/dist/_chunks/{calendar-Dgvl5L4T.js.map → calendar-7GAUlsNO.js.map} +1 -1
- package/dist/_chunks/{calendar-event-card-DSh-69HT.js → calendar-event-card-DKUnT9Be.js} +91 -134
- package/dist/_chunks/calendar-event-card-DKUnT9Be.js.map +1 -0
- package/dist/_chunks/{calendar-workspace-UywR5gUl.js → calendar-workspace-Duv_5B4j.js} +2494 -2415
- package/dist/_chunks/calendar-workspace-Duv_5B4j.js.map +1 -0
- package/dist/_chunks/{care-plan-card-DHVhBcvs.js → care-plan-card-COFOI-fI.js} +5 -5
- package/dist/_chunks/{care-plan-card-DHVhBcvs.js.map → care-plan-card-COFOI-fI.js.map} +1 -1
- package/dist/_chunks/{care-plan-entry-card-Dx6IdTcR.js → care-plan-entry-card-BOKn0KW-.js} +6 -6
- package/dist/_chunks/{care-plan-entry-card-Dx6IdTcR.js.map → care-plan-entry-card-BOKn0KW-.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-UTX5ZD74.js → care-plan-header-CbuOuVBw.js} +4 -4
- package/dist/_chunks/{care-plan-header-UTX5ZD74.js.map → care-plan-header-CbuOuVBw.js.map} +1 -1
- package/dist/_chunks/{carousel.agent-CLxdHEBP.js → carousel.agent-Dv4a4M8L.js} +2 -2
- package/dist/_chunks/{carousel.agent-CLxdHEBP.js.map → carousel.agent-Dv4a4M8L.js.map} +1 -1
- package/dist/_chunks/{chart-C6eHTxkO.js → chart-iWl76PXv.js} +3 -3
- package/dist/_chunks/{chart-C6eHTxkO.js.map → chart-iWl76PXv.js.map} +1 -1
- package/dist/_chunks/{chat-input-BsB5Umpj.js → chat-input-qM5QpUSq.js} +2 -2
- package/dist/_chunks/{chat-input-BsB5Umpj.js.map → chat-input-qM5QpUSq.js.map} +1 -1
- package/dist/_chunks/{chat-message-C-8UU2av.js → chat-message-RniXtrCH.js} +2 -2
- package/dist/_chunks/{chat-message-C-8UU2av.js.map → chat-message-RniXtrCH.js.map} +1 -1
- package/dist/_chunks/{checkbox-BuZ1u__2.js → checkbox-CZkipDn7.js} +2 -2
- package/dist/_chunks/{checkbox-BuZ1u__2.js.map → checkbox-CZkipDn7.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-CfqMv57d.js → checkbox-group-DomUzpkF.js} +2 -2
- package/dist/_chunks/{checkbox-group-CfqMv57d.js.map → checkbox-group-DomUzpkF.js.map} +1 -1
- package/dist/_chunks/clinical-note-card-DdsGYMmI.js +325 -0
- package/dist/_chunks/clinical-note-card-DdsGYMmI.js.map +1 -0
- package/dist/_chunks/{code-block-BIkpRLkl.js → code-block-uVjNSI9g.js} +2 -2
- package/dist/_chunks/{code-block-BIkpRLkl.js.map → code-block-uVjNSI9g.js.map} +1 -1
- package/dist/_chunks/{connection-status-DRZIcMqM.js → connection-status-OEsWjmRk.js} +3 -3
- package/dist/_chunks/{connection-status-DRZIcMqM.js.map → connection-status-OEsWjmRk.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-DSI9uumA.js → contact-profile-card--My1H2UD.js} +3 -3
- package/dist/_chunks/{contact-profile-card-DSI9uumA.js.map → contact-profile-card--My1H2UD.js.map} +1 -1
- package/dist/_chunks/{control-room-rail-5MbhjsxN.js → control-room-rail-Ds45_g4f.js} +4 -4
- package/dist/_chunks/{control-room-rail-5MbhjsxN.js.map → control-room-rail-Ds45_g4f.js.map} +1 -1
- package/dist/_chunks/{counter-dRlTNC_y.js → counter-WsvRuum1.js} +50 -15
- package/dist/_chunks/counter-WsvRuum1.js.map +1 -0
- package/dist/_chunks/{cycle-calculator-DVgxBfP0.js → cycle-calculator-BJeaXiZv.js} +3 -3
- package/dist/_chunks/{cycle-calculator-DVgxBfP0.js.map → cycle-calculator-BJeaXiZv.js.map} +1 -1
- package/dist/_chunks/{dashboard-grid-BFtdHqfn.js → dashboard-grid-B23BFzRl.js} +2 -2
- package/dist/_chunks/{dashboard-grid-BFtdHqfn.js.map → dashboard-grid-B23BFzRl.js.map} +1 -1
- package/dist/_chunks/{data-table-DC96JJIq.js → data-table-BYGK-gUJ.js} +6 -6
- package/dist/_chunks/{data-table-DC96JJIq.js.map → data-table-BYGK-gUJ.js.map} +1 -1
- package/dist/_chunks/{data-table-tabs-DVIFkqx_.js → data-table-tabs-BMR0zsVQ.js} +3 -3
- package/dist/_chunks/{data-table-tabs-DVIFkqx_.js.map → data-table-tabs-BMR0zsVQ.js.map} +1 -1
- package/dist/_chunks/{date-picker-B6NW_PS5.js → date-picker-6tFnKFty.js} +14 -14
- package/dist/_chunks/{date-picker-B6NW_PS5.js.map → date-picker-6tFnKFty.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-yTKKsuc9.js → dependent-selector-BHDP0nBB.js} +3 -3
- package/dist/_chunks/{dependent-selector-yTKKsuc9.js.map → dependent-selector-BHDP0nBB.js.map} +1 -1
- package/dist/_chunks/{description-list-CjJqR8WK.js → description-list-C1RXMDZ_.js} +2 -2
- package/dist/_chunks/{description-list-CjJqR8WK.js.map → description-list-C1RXMDZ_.js.map} +1 -1
- package/dist/_chunks/{document-preview-BrhMHNh8.js → document-preview-DsEyRcNd.js} +4 -4
- package/dist/_chunks/{document-preview-BrhMHNh8.js.map → document-preview-DsEyRcNd.js.map} +1 -1
- package/dist/_chunks/{document-scanner-C5Vrbu21.js → document-scanner-CbWVtm7u.js} +53 -52
- package/dist/_chunks/{document-scanner-C5Vrbu21.js.map → document-scanner-CbWVtm7u.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-CxgK8vzt.js → due-date-calculator-Dhc9Ljkb.js} +6 -6
- package/dist/_chunks/{due-date-calculator-CxgK8vzt.js.map → due-date-calculator-Dhc9Ljkb.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-B7TVZ5ZJ.js → editable-currency-cell-renderer-D7blbDFY.js} +4 -4
- package/dist/_chunks/{editable-currency-cell-renderer-B7TVZ5ZJ.js.map → editable-currency-cell-renderer-D7blbDFY.js.map} +1 -1
- package/dist/_chunks/{editor-overlay-DEc5yYwo.js → editor-overlay-8fKAcRsm.js} +2 -2
- package/dist/_chunks/{editor-overlay-DEc5yYwo.js.map → editor-overlay-8fKAcRsm.js.map} +1 -1
- package/dist/_chunks/{entity-card-9_62gY7l.js → entity-card-I-Gio5wo.js} +36 -32
- package/dist/_chunks/entity-card-I-Gio5wo.js.map +1 -0
- package/dist/_chunks/{entity-summary-5o768XLU.js → entity-summary-BbW0mIzU.js} +4 -4
- package/dist/_chunks/{entity-summary-5o768XLU.js.map → entity-summary-BbW0mIzU.js.map} +1 -1
- package/dist/_chunks/{face-scheme-l-CQyLs-.js → face-scheme-uFvhqz6h.js} +4 -4
- package/dist/_chunks/{face-scheme-l-CQyLs-.js.map → face-scheme-uFvhqz6h.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-Dqy0T1fP.js → fetal-weight-C6SxchOv.js} +2 -2
- package/dist/_chunks/{fetal-weight-Dqy0T1fP.js.map → fetal-weight-C6SxchOv.js.map} +1 -1
- package/dist/_chunks/{field-array-BjkXZzSr.js → field-array-C9dmRaIM.js} +2 -2
- package/dist/_chunks/{field-array-BjkXZzSr.js.map → field-array-C9dmRaIM.js.map} +1 -1
- package/dist/_chunks/{file-manager-CI2Qn8qW.js → file-manager-DvkFgj7d.js} +7 -7
- package/dist/_chunks/{file-manager-CI2Qn8qW.js.map → file-manager-DvkFgj7d.js.map} +1 -1
- package/dist/_chunks/{file-upload-CwxdqkMK.js → file-upload-BDpb08GM.js} +71 -78
- package/dist/_chunks/file-upload-BDpb08GM.js.map +1 -0
- package/dist/_chunks/{fiscal-code-input-B_nYMSEM.js → fiscal-code-input-CkwIdB1y.js} +2 -2
- package/dist/_chunks/{fiscal-code-input-B_nYMSEM.js.map → fiscal-code-input-CkwIdB1y.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-DrXzYfv-.js → freemium-paywall-BqGk_SBU.js} +2 -2
- package/dist/_chunks/{freemium-paywall-DrXzYfv-.js.map → freemium-paywall-BqGk_SBU.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-CZHVrERT.js → gestational-age-calculator-DDOGaPvg.js} +6 -6
- package/dist/_chunks/{gestational-age-calculator-CZHVrERT.js.map → gestational-age-calculator-DDOGaPvg.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-C2fQxfXd.js → hcg-doubling-Bb_n6tEa.js} +2 -2
- package/dist/_chunks/{hcg-doubling-C2fQxfXd.js.map → hcg-doubling-Bb_n6tEa.js.map} +1 -1
- package/dist/_chunks/{header-DUXRIPyM.js → header-BZ4pZlJV.js} +2 -2
- package/dist/_chunks/{header-DUXRIPyM.js.map → header-BZ4pZlJV.js.map} +1 -1
- package/dist/_chunks/{header-settings-DvjZNMhD.js → header-settings-B8mLc03Q.js} +4 -4
- package/dist/_chunks/{header-settings-DvjZNMhD.js.map → header-settings-B8mLc03Q.js.map} +1 -1
- package/dist/_chunks/hover-card-Bcku1GQu.js +511 -0
- package/dist/_chunks/hover-card-Bcku1GQu.js.map +1 -0
- package/dist/_chunks/{icon-button-DA2CAGHZ.js → icon-button-8xqRnkdG.js} +2 -2
- package/dist/_chunks/{icon-button-DA2CAGHZ.js.map → icon-button-8xqRnkdG.js.map} +1 -1
- package/dist/_chunks/{icon-button-group-VCCod3Hz.js → icon-button-group-Dj6CRoYR.js} +2 -2
- package/dist/_chunks/{icon-button-group-VCCod3Hz.js.map → icon-button-group-Dj6CRoYR.js.map} +1 -1
- package/dist/_chunks/{icon-picker-DOa89vn3.js → icon-picker-CTWzlHJr.js} +2 -2
- package/dist/_chunks/{icon-picker-DOa89vn3.js.map → icon-picker-CTWzlHJr.js.map} +1 -1
- package/dist/_chunks/{info-tip-CADik6WN.js → info-tip-ey_Pon2y.js} +2 -2
- package/dist/_chunks/{info-tip-CADik6WN.js.map → info-tip-ey_Pon2y.js.map} +1 -1
- package/dist/_chunks/{key-value-pair-BIBdZBLg.js → key-value-pair-DczGb4yz.js} +42 -41
- package/dist/_chunks/key-value-pair-DczGb4yz.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-BEpMNtAa.js → link-cell-renderer-BNa8x6oJ.js} +6 -6
- package/dist/_chunks/{link-cell-renderer-BEpMNtAa.js.map → link-cell-renderer-BNa8x6oJ.js.map} +1 -1
- package/dist/_chunks/loader-circle-BECIU_8N.js +12 -0
- package/dist/_chunks/loader-circle-BECIU_8N.js.map +1 -0
- package/dist/_chunks/{locale-picker-CwFtqSkt.js → locale-picker-BLeHbFSc.js} +3 -3
- package/dist/_chunks/{locale-picker-CwFtqSkt.js.map → locale-picker-BLeHbFSc.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-CK_ND8Tr.js → marketplace-app-shell-BwH6Aruw.js} +6 -6
- package/dist/_chunks/{marketplace-app-shell-CK_ND8Tr.js.map → marketplace-app-shell-BwH6Aruw.js.map} +1 -1
- package/dist/_chunks/{message-card-BUMv16un.js → message-card-Dm5Xshup.js} +2 -2
- package/dist/_chunks/{message-card-BUMv16un.js.map → message-card-Dm5Xshup.js.map} +1 -1
- package/dist/_chunks/{message-tray-0zsv27xX.js → message-tray-BcLyaO-G.js} +3 -3
- package/dist/_chunks/{message-tray-0zsv27xX.js.map → message-tray-BcLyaO-G.js.map} +1 -1
- package/dist/_chunks/{multi-select-DYOvx2SJ.js → multi-select-CtPd7g4x.js} +15 -15
- package/dist/_chunks/{multi-select-DYOvx2SJ.js.map → multi-select-CtPd7g4x.js.map} +1 -1
- package/dist/_chunks/note-attachment-CwDir3kK.js +124 -0
- package/dist/_chunks/note-attachment-CwDir3kK.js.map +1 -0
- package/dist/_chunks/note-timeline-CXfSV3yX.js +231 -0
- package/dist/_chunks/note-timeline-CXfSV3yX.js.map +1 -0
- package/dist/_chunks/{notes-panel-BjLt-kiP.js → notes-panel-Co8D3uDd.js} +7 -7
- package/dist/_chunks/{notes-panel-BjLt-kiP.js.map → notes-panel-Co8D3uDd.js.map} +1 -1
- package/dist/_chunks/{notification-card-CtrzoTUO.js → notification-card-ChcK9Wat.js} +2 -2
- package/dist/_chunks/{notification-card-CtrzoTUO.js.map → notification-card-ChcK9Wat.js.map} +1 -1
- package/dist/_chunks/{notification-tray-BiRzXHDf.js → notification-tray-CJ8jOe-U.js} +4 -4
- package/dist/_chunks/{notification-tray-BiRzXHDf.js.map → notification-tray-CJ8jOe-U.js.map} +1 -1
- package/dist/_chunks/{operator-hero-aG_qyn6g.js → operator-hero-XIdwDmN2.js} +3 -3
- package/dist/_chunks/{operator-hero-aG_qyn6g.js.map → operator-hero-XIdwDmN2.js.map} +1 -1
- package/dist/_chunks/{optical-prescription-DUJOhKz_.js → optical-prescription-cphK41eP.js} +2 -2
- package/dist/_chunks/{optical-prescription-DUJOhKz_.js.map → optical-prescription-cphK41eP.js.map} +1 -1
- package/dist/_chunks/panel-header-D_mTdhUp.js +128 -0
- package/dist/_chunks/panel-header-D_mTdhUp.js.map +1 -0
- package/dist/_chunks/patient-details-f7SSXkTJ.js +371 -0
- package/dist/_chunks/patient-details-f7SSXkTJ.js.map +1 -0
- package/dist/_chunks/patient-field-row-BQZoP4m2.js +787 -0
- package/dist/_chunks/patient-field-row-BQZoP4m2.js.map +1 -0
- package/dist/_chunks/{patient-search-HeEUB-_X.js → patient-search-D08b6jgj.js} +2 -2
- package/dist/_chunks/{patient-search-HeEUB-_X.js.map → patient-search-D08b6jgj.js.map} +1 -1
- package/dist/_chunks/patient-summary-card-Bz7KdUin.js +533 -0
- package/dist/_chunks/patient-summary-card-Bz7KdUin.js.map +1 -0
- package/dist/_chunks/{payment-automation-upsell-DwQW2fRp.js → payment-automation-upsell-BLTdE2em.js} +50 -59
- package/dist/_chunks/payment-automation-upsell-BLTdE2em.js.map +1 -0
- package/dist/_chunks/{payment-form-Ds1I9KqB.js → payment-form-BHMDqW9C.js} +2 -2
- package/dist/_chunks/{payment-form-Ds1I9KqB.js.map → payment-form-BHMDqW9C.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-DvEsWEkC.js → payment-request-card-BxcdvxKR.js} +6 -6
- package/dist/_chunks/{payment-request-card-DvEsWEkC.js.map → payment-request-card-BxcdvxKR.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-DUIsV9s5.js → pdf-viewer-DUKdn5iq.js} +2 -2
- package/dist/_chunks/{pdf-viewer-DUIsV9s5.js.map → pdf-viewer-DUKdn5iq.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-B9fphroR.js → periodontal-chart-BF_e3wZp.js} +2 -2
- package/dist/_chunks/{periodontal-chart-B9fphroR.js.map → periodontal-chart-BF_e3wZp.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-card-qEZPXj83.js → periodontal-chart-card-BJEuJuzh.js} +3 -3
- package/dist/_chunks/{periodontal-chart-card-qEZPXj83.js.map → periodontal-chart-card-BJEuJuzh.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-lEwA8wqX.js → periodontal-diagnosis-C7pfPOct.js} +5 -5
- package/dist/_chunks/{periodontal-diagnosis-lEwA8wqX.js.map → periodontal-diagnosis-C7pfPOct.js.map} +1 -1
- package/dist/_chunks/{periodontal-risk-chart-0x7KVZjL.js → periodontal-risk-chart-B2tNFa15.js} +2 -2
- package/dist/_chunks/{periodontal-risk-chart-0x7KVZjL.js.map → periodontal-risk-chart-B2tNFa15.js.map} +1 -1
- package/dist/_chunks/{permission-matrix-BIJrGEmz.js → permission-matrix-VdAXjjHU.js} +3 -3
- package/dist/_chunks/{permission-matrix-BIJrGEmz.js.map → permission-matrix-VdAXjjHU.js.map} +1 -1
- package/dist/_chunks/{popover-DP6WCVwm.js → popover-DzR5QYxp.js} +24 -24
- package/dist/_chunks/{popover-DP6WCVwm.js.map → popover-DzR5QYxp.js.map} +1 -1
- package/dist/_chunks/{practice-profile-hero-DQyDvpJL.js → practice-profile-hero-DxoLlQr5.js} +2 -2
- package/dist/_chunks/{practice-profile-hero-DQyDvpJL.js.map → practice-profile-hero-DxoLlQr5.js.map} +1 -1
- package/dist/_chunks/{practice-results-kayDEorM.js → practice-results-DOcORTkP.js} +4 -4
- package/dist/_chunks/{practice-results-kayDEorM.js.map → practice-results-DOcORTkP.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-n5j5dAKy.js → pregnancy-dating-nV1_S6w0.js} +6 -6
- package/dist/_chunks/{pregnancy-dating-n5j5dAKy.js.map → pregnancy-dating-nV1_S6w0.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-D5A8vPjj.js → pregnancy-weight-gain-tRecShAD.js} +4 -4
- package/dist/_chunks/{pregnancy-weight-gain-D5A8vPjj.js.map → pregnancy-weight-gain-tRecShAD.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-CkAUo6Dz.js → privacy-lock-Be39vQUN.js} +2 -2
- package/dist/_chunks/{privacy-lock-CkAUo6Dz.js.map → privacy-lock-Be39vQUN.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-BScCotGD.js → product-hub-panel-C0TO69P7.js} +2 -2
- package/dist/_chunks/{product-hub-panel-BScCotGD.js.map → product-hub-panel-C0TO69P7.js.map} +1 -1
- package/dist/_chunks/{public-header.agent-kth2SdXn.js → public-header.agent-Bl1KFwSE.js} +3 -3
- package/dist/_chunks/{public-header.agent-kth2SdXn.js.map → public-header.agent-Bl1KFwSE.js.map} +1 -1
- package/dist/_chunks/{radio-DNRe6H_8.js → radio-6fml-pWk.js} +2 -2
- package/dist/_chunks/{radio-DNRe6H_8.js.map → radio-6fml-pWk.js.map} +1 -1
- package/dist/_chunks/{radio-group-DyVBgnA3.js → radio-group-CIjmyioi.js} +3 -3
- package/dist/_chunks/{radio-group-DyVBgnA3.js.map → radio-group-CIjmyioi.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-o4jwEJPC.js → radiograph-panel.agent-k0G7JuoM.js} +6 -6
- package/dist/_chunks/{radiograph-panel.agent-o4jwEJPC.js.map → radiograph-panel.agent-k0G7JuoM.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-BKHEfqVQ.js → reviews-panel-BaHZb_ai.js} +3 -3
- package/dist/_chunks/{reviews-panel-BKHEfqVQ.js.map → reviews-panel-BaHZb_ai.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-CCI-Y3DN.js → rich-text-editor-BTXlorm5.js} +7 -7
- package/dist/_chunks/{rich-text-editor-CCI-Y3DN.js.map → rich-text-editor-BTXlorm5.js.map} +1 -1
- package/dist/_chunks/{search-bar-CJj6sI9m.js → search-bar-CCmViqaa.js} +46 -46
- package/dist/_chunks/{search-bar-CJj6sI9m.js.map → search-bar-CCmViqaa.js.map} +1 -1
- package/dist/_chunks/section-card.agent-W18CHEgX.js +74 -0
- package/dist/_chunks/section-card.agent-W18CHEgX.js.map +1 -0
- package/dist/_chunks/{sheet-BSznOyJs.js → sheet-hm04DGFd.js} +2 -2
- package/dist/_chunks/{sheet-BSznOyJs.js.map → sheet-hm04DGFd.js.map} +1 -1
- package/dist/_chunks/{sign-document-jF4fZDJ5.js → sign-document-CRQuAn4W.js} +2 -2
- package/dist/_chunks/{sign-document-jF4fZDJ5.js.map → sign-document-CRQuAn4W.js.map} +1 -1
- package/dist/_chunks/{signature-request-vihDT8On.js → signature-request-Dej2g86d.js} +5 -5
- package/dist/_chunks/{signature-request-vihDT8On.js.map → signature-request-Dej2g86d.js.map} +1 -1
- package/dist/_chunks/{signature-status-chip-T5fyS-k9.js → signature-status-chip-D4NsrdeI.js} +3 -3
- package/dist/_chunks/{signature-status-chip-T5fyS-k9.js.map → signature-status-chip-D4NsrdeI.js.map} +1 -1
- package/dist/_chunks/{slot-grid-BuZOKfcd.js → slot-grid-8Ko6thzz.js} +2 -2
- package/dist/_chunks/{slot-grid-BuZOKfcd.js.map → slot-grid-8Ko6thzz.js.map} +1 -1
- package/dist/_chunks/{streaming-text-CvsjIQ7S.js → streaming-text-DjFqLSt_.js} +2 -2
- package/dist/_chunks/{streaming-text-CvsjIQ7S.js.map → streaming-text-DjFqLSt_.js.map} +1 -1
- package/dist/_chunks/{tab-bar-DvFJIQfL.js → tab-bar-rDkLiaA6.js} +2 -2
- package/dist/_chunks/{tab-bar-DvFJIQfL.js.map → tab-bar-rDkLiaA6.js.map} +1 -1
- package/dist/_chunks/{tag-3wgkwwDB.js → tag-Ci3xJPcH.js} +2 -2
- package/dist/_chunks/{tag-3wgkwwDB.js.map → tag-Ci3xJPcH.js.map} +1 -1
- package/dist/_chunks/{task-tray-COo-RlDv.js → task-tray-wl9eti6J.js} +2 -2
- package/dist/_chunks/{task-tray-COo-RlDv.js.map → task-tray-wl9eti6J.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-DLKpSNoE.js → tasks-panel-BDNB7hsZ.js} +5 -5
- package/dist/_chunks/{tasks-panel-DLKpSNoE.js.map → tasks-panel-BDNB7hsZ.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-uEwoKjl3.js → theme-toggle-CMz8YfC1.js} +3 -3
- package/dist/_chunks/{theme-toggle-uEwoKjl3.js.map → theme-toggle-CMz8YfC1.js.map} +1 -1
- package/dist/_chunks/{timeline-Bs9Erxlo.js → timeline-61AihzYz.js} +47 -47
- package/dist/_chunks/timeline-61AihzYz.js.map +1 -0
- package/dist/_chunks/{toast-YZz2sBzB.js → toast-8jqtbfAB.js} +2 -2
- package/dist/_chunks/{toast-YZz2sBzB.js.map → toast-8jqtbfAB.js.map} +1 -1
- package/dist/_chunks/{tool-rail-ONaV-Nzz.js → tool-rail-Bq5eiFMG.js} +3 -3
- package/dist/_chunks/{tool-rail-ONaV-Nzz.js.map → tool-rail-Bq5eiFMG.js.map} +1 -1
- package/dist/_chunks/{tooltip-DvmfrNvB.js → tooltip-Cp-PLePW.js} +41 -41
- package/dist/_chunks/tooltip-Cp-PLePW.js.map +1 -0
- package/dist/_chunks/{tooth-scheme-Qe7LO5Di.js → tooth-scheme-BWkYxxjR.js} +3 -3
- package/dist/_chunks/{tooth-scheme-Qe7LO5Di.js.map → tooth-scheme-BWkYxxjR.js.map} +1 -1
- package/dist/_chunks/{transaction-chip-DJCstquX.js → transaction-chip-Dth1nThY.js} +49 -48
- package/dist/_chunks/{transaction-chip-DJCstquX.js.map → transaction-chip-Dth1nThY.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-BGkEhvHO.js → transcript-panel-u2HHxZB6.js} +2 -2
- package/dist/_chunks/{transcript-panel-BGkEhvHO.js.map → transcript-panel-u2HHxZB6.js.map} +1 -1
- package/dist/_chunks/user-x-DYszNtIg.js +45 -0
- package/dist/_chunks/user-x-DYszNtIg.js.map +1 -0
- package/dist/_chunks/{warning-stack-DQz0Jyir.js → warning-stack-BW5Dwb3z.js} +3 -3
- package/dist/_chunks/{warning-stack-DQz0Jyir.js.map → warning-stack-BW5Dwb3z.js.map} +1 -1
- package/dist/_chunks/{widget-picker-DvUkBemi.js → widget-picker-B1sj6uyf.js} +2 -2
- package/dist/_chunks/{widget-picker-DvUkBemi.js.map → widget-picker-B1sj6uyf.js.map} +1 -1
- package/dist/_chunks/{workflow-map-dNzJjBWG.js → workflow-map-D-LEni11.js} +5 -5
- package/dist/_chunks/{workflow-map-dNzJjBWG.js.map → workflow-map-D-LEni11.js.map} +1 -1
- package/dist/_chunks/workflow-status-xeaJTzD3.js +476 -0
- package/dist/_chunks/workflow-status-xeaJTzD3.js.map +1 -0
- package/dist/agent-catalog.json +185 -1
- package/dist/agent-i18n/en.json +27 -0
- package/dist/components/_shared/entity-card/entity-card.d.ts +44 -0
- package/dist/components/_shared/entity-card/entity-card.d.ts.map +1 -1
- package/dist/components/_shared/entity-card/index.d.ts +1 -1
- package/dist/components/_shared/entity-card/index.d.ts.map +1 -1
- package/dist/components/_shared/note-attachment.d.ts +41 -0
- package/dist/components/_shared/note-attachment.d.ts.map +1 -0
- package/dist/components/_shared/note-markdown.d.ts +3 -0
- package/dist/components/_shared/note-markdown.d.ts.map +1 -0
- package/dist/components/_shared/patient-field-row.d.ts +40 -0
- package/dist/components/_shared/patient-field-row.d.ts.map +1 -0
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-consent-banner/index.js +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/anamnesis-card/index.js +1 -1
- package/dist/components/anamnesis-summary-card/index.js +1 -1
- package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/bishop-score/index.js +1 -1
- package/dist/components/bmi-calculator/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/button/index.js +1 -1
- package/dist/components/button-group/button-group.d.ts +20 -0
- package/dist/components/button-group/button-group.d.ts.map +1 -1
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/calendar-event-card/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/clinical-note-card/clinical-note-card.d.ts +2 -34
- package/dist/components/clinical-note-card/clinical-note-card.d.ts.map +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/connection-status/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/counter/counter.d.ts +6 -0
- package/dist/components/counter/counter.d.ts.map +1 -1
- package/dist/components/counter/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +4 -4
- package/dist/components/data-table-tabs/index.js +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/dependent-selector/index.js +1 -1
- package/dist/components/description-list/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/due-date-calculator/index.js +2 -2
- package/dist/components/editor-overlay/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/fetal-weight/index.js +1 -1
- package/dist/components/field-array/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/fiscal-code-input/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/hcg-doubling/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/header-settings/index.js +1 -1
- package/dist/components/hover-card/hover-card.agent.d.ts +4 -0
- package/dist/components/hover-card/hover-card.agent.d.ts.map +1 -0
- package/dist/components/hover-card/hover-card.d.ts +80 -0
- package/dist/components/hover-card/hover-card.d.ts.map +1 -0
- package/dist/components/hover-card/index.d.ts +4 -0
- package/dist/components/hover-card/index.d.ts.map +1 -0
- package/dist/components/hover-card/index.js +6 -0
- package/dist/components/hover-card/index.js.map +1 -0
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/icon-picker/index.js +1 -1
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/info-tip/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts +8 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +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/note-timeline/index.d.ts +4 -0
- package/dist/components/note-timeline/index.d.ts.map +1 -0
- package/dist/components/note-timeline/index.js +6 -0
- package/dist/components/note-timeline/index.js.map +1 -0
- package/dist/components/note-timeline/note-timeline.agent.d.ts +4 -0
- package/dist/components/note-timeline/note-timeline.agent.d.ts.map +1 -0
- package/dist/components/note-timeline/note-timeline.d.ts +77 -0
- package/dist/components/note-timeline/note-timeline.d.ts.map +1 -0
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/optical-prescription/index.js +1 -1
- package/dist/components/panel-header/index.js +1 -1
- package/dist/components/panel-header/panel-header.d.ts +7 -0
- package/dist/components/panel-header/panel-header.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-details/patient-details.d.ts.map +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-summary-card/patient-summary-card.d.ts +54 -0
- package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-card/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-chart/index.js +1 -1
- package/dist/components/periodontal-chart-card/index.js +1 -1
- package/dist/components/periodontal-diagnosis/index.js +1 -1
- package/dist/components/periodontal-risk-chart/index.js +1 -1
- package/dist/components/permission-matrix/index.js +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/practice-profile-hero/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/pregnancy-weight-gain/index.js +1 -1
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/section-card/index.d.ts +4 -0
- package/dist/components/section-card/index.d.ts.map +1 -0
- package/dist/components/section-card/index.js +6 -0
- package/dist/components/section-card/index.js.map +1 -0
- package/dist/components/section-card/section-card.agent.d.ts +3 -0
- package/dist/components/section-card/section-card.agent.d.ts.map +1 -0
- package/dist/components/section-card/section-card.d.ts +30 -0
- package/dist/components/section-card/section-card.d.ts.map +1 -0
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/signature-status-chip/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/tab-bar/index.js +1 -1
- package/dist/components/tag/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/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/transaction-chip/index.js +1 -1
- package/dist/components/transaction-chip/transaction-chip.d.ts +11 -0
- package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/widget-picker/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/components/workflow-status/index.d.ts +4 -0
- package/dist/components/workflow-status/index.d.ts.map +1 -0
- package/dist/components/workflow-status/index.js +7 -0
- package/dist/components/workflow-status/index.js.map +1 -0
- package/dist/components/workflow-status/workflow-status.agent.d.ts +4 -0
- package/dist/components/workflow-status/workflow-status.agent.d.ts.map +1 -0
- package/dist/components/workflow-status/workflow-status.d.ts +52 -0
- package/dist/components/workflow-status/workflow-status.d.ts.map +1 -0
- package/dist/host-compat.css +4 -1
- package/dist/i18n/locales/ar.d.ts +12 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +12 -0
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +12 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +12 -0
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +12 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +12 -0
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +12 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +12 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +12 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +12 -0
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +12 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +12 -0
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +12 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +12 -0
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +12 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +12 -0
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +12 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +12 -0
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +12 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +12 -0
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +12 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +12 -0
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +12 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +12 -0
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +12 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +12 -0
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +12 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +12 -0
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +12 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +12 -0
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +12 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +12 -0
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +12 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +12 -0
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +12 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +12 -0
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +929 -916
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +12 -0
- package/dist/locales/de.json +12 -0
- package/dist/locales/el.json +12 -0
- package/dist/locales/en.json +12 -0
- package/dist/locales/es.json +12 -0
- package/dist/locales/fr.json +12 -0
- package/dist/locales/hi.json +12 -0
- package/dist/locales/it.json +12 -0
- package/dist/locales/ja.json +12 -0
- package/dist/locales/nl.json +12 -0
- package/dist/locales/pl.json +12 -0
- package/dist/locales/pt.json +12 -0
- package/dist/locales/ro.json +12 -0
- package/dist/locales/ru.json +12 -0
- package/dist/locales/sq.json +12 -0
- package/dist/locales/sv.json +12 -0
- package/dist/locales/tr.json +12 -0
- package/dist/locales/zh.json +12 -0
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/calendar.model.d.ts +2 -0
- package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
- package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
- package/dist/patterns/calendar/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/signature-request/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +17 -1
- package/dist/_chunks/appointment-card-Bh_CIlc6.js.map +0 -1
- package/dist/_chunks/button-group-CaxRJsNG.js +0 -289
- package/dist/_chunks/button-group-CaxRJsNG.js.map +0 -1
- package/dist/_chunks/calendar-event-card-DSh-69HT.js.map +0 -1
- package/dist/_chunks/calendar-workspace-UywR5gUl.js.map +0 -1
- package/dist/_chunks/clinical-note-card-CTRzmqvv.js +0 -438
- package/dist/_chunks/clinical-note-card-CTRzmqvv.js.map +0 -1
- package/dist/_chunks/counter-dRlTNC_y.js.map +0 -1
- package/dist/_chunks/entity-card-9_62gY7l.js.map +0 -1
- package/dist/_chunks/field-value-BetdWMA2.js +0 -384
- package/dist/_chunks/field-value-BetdWMA2.js.map +0 -1
- package/dist/_chunks/file-upload-CwxdqkMK.js.map +0 -1
- package/dist/_chunks/key-value-pair-BIBdZBLg.js.map +0 -1
- package/dist/_chunks/panel-header-D313n_9-.js +0 -105
- package/dist/_chunks/panel-header-D313n_9-.js.map +0 -1
- package/dist/_chunks/patient-details-BGiawUHd.js +0 -760
- package/dist/_chunks/patient-details-BGiawUHd.js.map +0 -1
- package/dist/_chunks/patient-summary-card--CT_gbaQ.js +0 -454
- package/dist/_chunks/patient-summary-card--CT_gbaQ.js.map +0 -1
- package/dist/_chunks/payment-automation-upsell-DwQW2fRp.js.map +0 -1
- package/dist/_chunks/timeline-Bs9Erxlo.js.map +0 -1
- package/dist/_chunks/tooltip-DvmfrNvB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-message-C-8UU2av.js","sources":["../../src/components/chat-message/chat-message.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CircleAlert, Check, Clock, RotateCcw } from 'lucide-react';\nimport { Button } from '../button';\nimport { Avatar } from '../avatar';\nimport { Timestamp } from '../timestamp';\nimport { safeImageSrc } from '../_shared';\nimport { CodeBlock, splitCodeFences } from '../_shared/code-block';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type ChatMessageRole = 'user' | 'assistant' | 'system';\nexport type ChatMessageStatus = 'sending' | 'sent' | 'error' | 'edited';\n\nexport interface ChatMessageAvatar {\n name?: string;\n src?: string;\n /**\n * Optional custom avatar node. When provided, it REPLACES the built-in\n * `<Avatar>` (initials / image) for this message. Used by the Alia\n * pattern to render a Astroid identity tile instead of an avatar, and\n * by consumers that want to swap in a user-icon chip, brand glyph, etc.\n * The caller is responsible for accessible labelling on the custom node\n * — ChatMessage's own `aria-label` already announces the role/time, so\n * purely decorative nodes can be `aria-hidden`.\n */\n slot?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n 'ds:flex ds:w-full ds:items-start ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n role: {\n user: 'ds:flex-row-reverse',\n assistant: 'ds:flex-row',\n system: 'ds:flex-col ds:items-center ds:text-center',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\nconst bubbleVariants = cva(\n [\n // Cap at 42rem on wide surfaces; on narrow docks (Alia sidebar ≈22rem)\n // leave room for the avatar column (size-8 = 32px = --spacing-xl) +\n // `gap-sm` (8px = --spacing-sm) so avatars don't clip off the inline\n // edge when the row is width-constrained.\n 'ds:relative ds:max-w-[min(42rem,calc(100%-var(--spacing-xl)-var(--spacing-sm)))]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'type-body',\n 'ds:break-words',\n ].join(' '),\n {\n variants: {\n role: {\n user: 'ds:bg-[color:var(--primary)] ds:text-[color:var(--primary-foreground)] ds:rounded-[var(--radius-md)] ds:rounded-ee-[var(--radius-sm)]',\n assistant:\n 'ds:bg-muted/40 ds:text-foreground ds:rounded-[var(--radius-md)] ds:rounded-es-[var(--radius-sm)]',\n system:\n 'ds:bg-transparent ds:text-[color:var(--muted-foreground)] type-body-sm ds:italic',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Safe markdown-ish (bold, inline code, line-breaks, links as text) */\n/* No dangerouslySetInnerHTML. */\n/* ------------------------------------------------------------------ */\n\ntype Token =\n | { type: 'text'; value: string }\n | { type: 'bold'; value: string }\n | { type: 'code'; value: string }\n | { type: 'br' }\n | { type: 'link'; label: string; href: string };\n\nconst SAFE_SCHEMES = /^(https?:|mailto:)/i;\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let remaining = input;\n const pattern = /\\*\\*([^*]+)\\*\\*|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)|\\n/;\n while (remaining.length > 0) {\n const match = pattern.exec(remaining);\n if (!match) {\n tokens.push({ type: 'text', value: remaining });\n break;\n }\n if (match.index > 0) {\n tokens.push({ type: 'text', value: remaining.slice(0, match.index) });\n }\n if (match[1] !== undefined) {\n tokens.push({ type: 'bold', value: match[1] });\n } else if (match[2] !== undefined) {\n tokens.push({ type: 'code', value: match[2] });\n } else if (match[3] !== undefined && match[4] !== undefined) {\n tokens.push({ type: 'link', label: match[3], href: match[4] });\n } else {\n tokens.push({ type: 'br' });\n }\n remaining = remaining.slice(match.index + match[0].length);\n }\n return tokens;\n}\n\nfunction renderInline(input: string): ReactNode {\n return tokenize(input).map((tok, i) => {\n if (tok.type === 'bold') return <strong key={i}>{tok.value}</strong>;\n if (tok.type === 'code') {\n return (\n <code\n key={i}\n dir=\"ltr\"\n className=\"ds:rounded-[var(--radius-sm)] ds:bg-muted/30 ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:font-[family-name:var(--font-mono)]\"\n >\n {tok.value}\n </code>\n );\n }\n if (tok.type === 'br') return <br key={i} />;\n if (tok.type === 'link') {\n if (!SAFE_SCHEMES.test(tok.href)) {\n // Unsafe scheme (javascript:, data:) — render as inert text.\n return <Fragment key={i}>{tok.label}</Fragment>;\n }\n return (\n <a\n key={i}\n href={tok.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"ds:underline ds:underline-offset-2 ds:hover:opacity-80\"\n >\n {tok.label}\n </a>\n );\n }\n return <Fragment key={i}>{tok.value}</Fragment>;\n });\n}\n\n/**\n * Render a message body: split fenced code blocks out to `<CodeBlock>` and run\n * the inline tokenizer over the surrounding text runs.\n */\nfunction renderBody(input: string): ReactNode {\n return splitCodeFences(input).map((seg, i) => {\n if (seg.type === 'code') {\n return <CodeBlock key={i} code={seg.value} language={seg.lang} />;\n }\n return <Fragment key={i}>{renderInline(seg.value)}</Fragment>;\n });\n}\n\n/* ------------------------------------------------------------------ */\n/* ChatMessage */\n/* ------------------------------------------------------------------ */\n\ntype NativeProps = Omit<HTMLAttributes<HTMLElement>, 'content' | 'role'>;\n\nexport interface ChatMessageProps\n extends NativeProps, VariantProps<typeof bubbleVariants> {\n role: ChatMessageRole;\n content: string;\n avatar?: ChatMessageAvatar;\n timestamp?: Date | number | string;\n status?: ChatMessageStatus;\n /** Parse a small, safe subset of markdown. Never renders raw HTML. */\n renderMarkdown?: boolean;\n /** Invoked when the retry button is activated (error status only). */\n onRetry?: () => void;\n /**\n * Optional action row rendered beneath the message body + timestamp,\n * aligned with the message (e.g. the Alia pattern's Copy / Download\n * buttons on assistant messages). Default off → renders nothing.\n */\n actions?: ReactNode;\n /**\n * Custom body node rendered verbatim INSTEAD of `content`. When set, the\n * markdown tokenizer (`renderBody`) is skipped and the node is rendered\n * directly inside the bubble. `content` is still required (used for the\n * aria-label context and consumer copy / download). Default off.\n */\n body?: ReactNode;\n}\n\nexport const ChatMessage = forwardRef<HTMLElement, ChatMessageProps>(\n (\n {\n role,\n content,\n avatar,\n timestamp,\n status,\n renderMarkdown = false,\n onRetry,\n actions,\n body,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n // Local format — used for the aria-label interpolation only. Visible\n // label is rendered by `<Timestamp>` below, which computes the same\n // locale-aware HH:MM internally.\n const formattedTime = useMemo(() => {\n if (!timestamp) return null;\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) return null;\n return new Intl.DateTimeFormat(i18n.language, {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n }, [timestamp, i18n.language]);\n\n const roleLabel = t(`chat.message.role.${role}`);\n const messageLabel = formattedTime\n ? t('chat.message.label', { role: roleLabel, time: formattedTime })\n : t('chat.message.labelNoTime', { role: roleLabel });\n\n const resolvedBody =\n body ?? (renderMarkdown ? renderBody(content) : content);\n\n const statusIcon = (() => {\n if (!status || status === 'edited') return null;\n if (status === 'sending')\n return <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n if (status === 'sent')\n return <Check aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n return (\n <CircleAlert\n aria-hidden=\"true\"\n className=\"ds:size-3.5 ds:text-[color:var(--destructive)]\"\n />\n );\n })();\n\n const statusText = status ? t(`chat.message.status.${status}`) : null;\n\n return (\n <article\n ref={ref}\n aria-label={messageLabel}\n data-component=\"chat-message\"\n // Structural state surfaced for agent reads (see chat-message.agent.ts).\n // `status` is optional → the attribute is omitted when unset.\n data-role={role}\n data-status={status}\n className={[\n rowVariants({ role, className }),\n // Entrance: fade + slide up on mount. `--animation-duration` is 0ms\n // under `prefers-reduced-motion` and `.theme-accessible`, so both\n // collapse the animation to an instant state change automatically.\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-2',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n {...rest}\n >\n {role !== 'system' && avatar ? (\n avatar.slot ? (\n // Consumer-supplied avatar node (e.g. Alia's Astroid tile).\n avatar.slot\n ) : (\n // Allow-list the src: LLM-supplied values can carry\n // `javascript:` / `data:text/html` / `data:image/svg+xml` and so\n // are scrubbed here before reaching <Avatar>. Fallback to initials.\n <Avatar\n name={avatar.name}\n src={safeImageSrc(avatar.src)}\n size=\"sm\"\n />\n )\n ) : null}\n\n <div\n className={[\n // min-w-0 allows this flex item to shrink below its content's\n // natural width — without it, a single unbreakable token (URL,\n // CJK run, hash) can force the bubble wider than the parent\n // and spill outside narrow containers like the Alia sidebar.\n 'ds:flex ds:flex-col ds:min-w-0',\n role === 'user'\n ? 'ds:items-end'\n : role === 'assistant'\n ? 'ds:items-start'\n : 'ds:items-center',\n ].join(' ')}\n >\n <div\n dir=\"auto\"\n className={[\n bubbleVariants({ role }),\n // `break-words` (from bubbleVariants) handles soft hyphens;\n // `overflow-wrap: anywhere` is the last-resort break for\n // URLs, hashes, or CJK runs that would otherwise push the\n // bubble wider than its parent in narrow docks like Alia.\n 'ds:[overflow-wrap:anywhere]',\n ].join(' ')}\n >\n {resolvedBody}\n </div>\n\n {(formattedTime || statusText) && role !== 'system' ? (\n <div\n className={[\n 'ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-meta ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {timestamp ? (\n <Timestamp\n value={timestamp}\n format=\"absolute\"\n absoluteFormat={{ hour: '2-digit', minute: '2-digit' }}\n dir=\"ltr\"\n />\n ) : null}\n {statusIcon ? (\n // `key={status}` re-mounts the span on every status change so\n // `animate-in` re-runs — gives the sending → sent → error\n // swap a subtle cross-fade instead of an abrupt pop.\n <span\n key={status}\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n {statusIcon}\n <span className=\"ds:sr-only\">{statusText}</span>\n </span>\n ) : null}\n {status === 'error' && onRetry ? (\n <Button\n intent=\"ghost\"\n size=\"sm\"\n onClick={onRetry}\n startIcon={<RotateCcw />}\n >\n {t('chat.message.retry')}\n </Button>\n ) : null}\n </div>\n ) : null}\n {actions ? (\n <div className=\"ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {actions}\n </div>\n ) : null}\n </div>\n </article>\n );\n },\n);\n\nChatMessage.displayName = 'ChatMessage';\n"],"names":["rowVariants","cva","bubbleVariants","SAFE_SCHEMES","tokenize","input","tokens","remaining","pattern","match","renderInline","tok","i","jsx","Fragment","renderBody","splitCodeFences","seg","CodeBlock","ChatMessage","forwardRef","role","content","avatar","timestamp","status","renderMarkdown","onRetry","actions","body","className","rest","ref","t","i18n","useTranslation","formattedTime","useMemo","date","roleLabel","messageLabel","resolvedBody","statusIcon","Clock","Check","CircleAlert","statusText","jsxs","Avatar","safeImageSrc","Timestamp","Button","RotateCcw"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chat-message-RniXtrCH.js","sources":["../../src/components/chat-message/chat-message.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CircleAlert, Check, Clock, RotateCcw } from 'lucide-react';\nimport { Button } from '../button';\nimport { Avatar } from '../avatar';\nimport { Timestamp } from '../timestamp';\nimport { safeImageSrc } from '../_shared';\nimport { CodeBlock, splitCodeFences } from '../_shared/code-block';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type ChatMessageRole = 'user' | 'assistant' | 'system';\nexport type ChatMessageStatus = 'sending' | 'sent' | 'error' | 'edited';\n\nexport interface ChatMessageAvatar {\n name?: string;\n src?: string;\n /**\n * Optional custom avatar node. When provided, it REPLACES the built-in\n * `<Avatar>` (initials / image) for this message. Used by the Alia\n * pattern to render a Astroid identity tile instead of an avatar, and\n * by consumers that want to swap in a user-icon chip, brand glyph, etc.\n * The caller is responsible for accessible labelling on the custom node\n * — ChatMessage's own `aria-label` already announces the role/time, so\n * purely decorative nodes can be `aria-hidden`.\n */\n slot?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n 'ds:flex ds:w-full ds:items-start ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n role: {\n user: 'ds:flex-row-reverse',\n assistant: 'ds:flex-row',\n system: 'ds:flex-col ds:items-center ds:text-center',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\nconst bubbleVariants = cva(\n [\n // Cap at 42rem on wide surfaces; on narrow docks (Alia sidebar ≈22rem)\n // leave room for the avatar column (size-8 = 32px = --spacing-xl) +\n // `gap-sm` (8px = --spacing-sm) so avatars don't clip off the inline\n // edge when the row is width-constrained.\n 'ds:relative ds:max-w-[min(42rem,calc(100%-var(--spacing-xl)-var(--spacing-sm)))]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'type-body',\n 'ds:break-words',\n ].join(' '),\n {\n variants: {\n role: {\n user: 'ds:bg-[color:var(--primary)] ds:text-[color:var(--primary-foreground)] ds:rounded-[var(--radius-md)] ds:rounded-ee-[var(--radius-sm)]',\n assistant:\n 'ds:bg-muted/40 ds:text-foreground ds:rounded-[var(--radius-md)] ds:rounded-es-[var(--radius-sm)]',\n system:\n 'ds:bg-transparent ds:text-[color:var(--muted-foreground)] type-body-sm ds:italic',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Safe markdown-ish (bold, inline code, line-breaks, links as text) */\n/* No dangerouslySetInnerHTML. */\n/* ------------------------------------------------------------------ */\n\ntype Token =\n | { type: 'text'; value: string }\n | { type: 'bold'; value: string }\n | { type: 'code'; value: string }\n | { type: 'br' }\n | { type: 'link'; label: string; href: string };\n\nconst SAFE_SCHEMES = /^(https?:|mailto:)/i;\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let remaining = input;\n const pattern = /\\*\\*([^*]+)\\*\\*|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)|\\n/;\n while (remaining.length > 0) {\n const match = pattern.exec(remaining);\n if (!match) {\n tokens.push({ type: 'text', value: remaining });\n break;\n }\n if (match.index > 0) {\n tokens.push({ type: 'text', value: remaining.slice(0, match.index) });\n }\n if (match[1] !== undefined) {\n tokens.push({ type: 'bold', value: match[1] });\n } else if (match[2] !== undefined) {\n tokens.push({ type: 'code', value: match[2] });\n } else if (match[3] !== undefined && match[4] !== undefined) {\n tokens.push({ type: 'link', label: match[3], href: match[4] });\n } else {\n tokens.push({ type: 'br' });\n }\n remaining = remaining.slice(match.index + match[0].length);\n }\n return tokens;\n}\n\nfunction renderInline(input: string): ReactNode {\n return tokenize(input).map((tok, i) => {\n if (tok.type === 'bold') return <strong key={i}>{tok.value}</strong>;\n if (tok.type === 'code') {\n return (\n <code\n key={i}\n dir=\"ltr\"\n className=\"ds:rounded-[var(--radius-sm)] ds:bg-muted/30 ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:font-[family-name:var(--font-mono)]\"\n >\n {tok.value}\n </code>\n );\n }\n if (tok.type === 'br') return <br key={i} />;\n if (tok.type === 'link') {\n if (!SAFE_SCHEMES.test(tok.href)) {\n // Unsafe scheme (javascript:, data:) — render as inert text.\n return <Fragment key={i}>{tok.label}</Fragment>;\n }\n return (\n <a\n key={i}\n href={tok.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"ds:underline ds:underline-offset-2 ds:hover:opacity-80\"\n >\n {tok.label}\n </a>\n );\n }\n return <Fragment key={i}>{tok.value}</Fragment>;\n });\n}\n\n/**\n * Render a message body: split fenced code blocks out to `<CodeBlock>` and run\n * the inline tokenizer over the surrounding text runs.\n */\nfunction renderBody(input: string): ReactNode {\n return splitCodeFences(input).map((seg, i) => {\n if (seg.type === 'code') {\n return <CodeBlock key={i} code={seg.value} language={seg.lang} />;\n }\n return <Fragment key={i}>{renderInline(seg.value)}</Fragment>;\n });\n}\n\n/* ------------------------------------------------------------------ */\n/* ChatMessage */\n/* ------------------------------------------------------------------ */\n\ntype NativeProps = Omit<HTMLAttributes<HTMLElement>, 'content' | 'role'>;\n\nexport interface ChatMessageProps\n extends NativeProps, VariantProps<typeof bubbleVariants> {\n role: ChatMessageRole;\n content: string;\n avatar?: ChatMessageAvatar;\n timestamp?: Date | number | string;\n status?: ChatMessageStatus;\n /** Parse a small, safe subset of markdown. Never renders raw HTML. */\n renderMarkdown?: boolean;\n /** Invoked when the retry button is activated (error status only). */\n onRetry?: () => void;\n /**\n * Optional action row rendered beneath the message body + timestamp,\n * aligned with the message (e.g. the Alia pattern's Copy / Download\n * buttons on assistant messages). Default off → renders nothing.\n */\n actions?: ReactNode;\n /**\n * Custom body node rendered verbatim INSTEAD of `content`. When set, the\n * markdown tokenizer (`renderBody`) is skipped and the node is rendered\n * directly inside the bubble. `content` is still required (used for the\n * aria-label context and consumer copy / download). Default off.\n */\n body?: ReactNode;\n}\n\nexport const ChatMessage = forwardRef<HTMLElement, ChatMessageProps>(\n (\n {\n role,\n content,\n avatar,\n timestamp,\n status,\n renderMarkdown = false,\n onRetry,\n actions,\n body,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n // Local format — used for the aria-label interpolation only. Visible\n // label is rendered by `<Timestamp>` below, which computes the same\n // locale-aware HH:MM internally.\n const formattedTime = useMemo(() => {\n if (!timestamp) return null;\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) return null;\n return new Intl.DateTimeFormat(i18n.language, {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n }, [timestamp, i18n.language]);\n\n const roleLabel = t(`chat.message.role.${role}`);\n const messageLabel = formattedTime\n ? t('chat.message.label', { role: roleLabel, time: formattedTime })\n : t('chat.message.labelNoTime', { role: roleLabel });\n\n const resolvedBody =\n body ?? (renderMarkdown ? renderBody(content) : content);\n\n const statusIcon = (() => {\n if (!status || status === 'edited') return null;\n if (status === 'sending')\n return <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n if (status === 'sent')\n return <Check aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n return (\n <CircleAlert\n aria-hidden=\"true\"\n className=\"ds:size-3.5 ds:text-[color:var(--destructive)]\"\n />\n );\n })();\n\n const statusText = status ? t(`chat.message.status.${status}`) : null;\n\n return (\n <article\n ref={ref}\n aria-label={messageLabel}\n data-component=\"chat-message\"\n // Structural state surfaced for agent reads (see chat-message.agent.ts).\n // `status` is optional → the attribute is omitted when unset.\n data-role={role}\n data-status={status}\n className={[\n rowVariants({ role, className }),\n // Entrance: fade + slide up on mount. `--animation-duration` is 0ms\n // under `prefers-reduced-motion` and `.theme-accessible`, so both\n // collapse the animation to an instant state change automatically.\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-2',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n {...rest}\n >\n {role !== 'system' && avatar ? (\n avatar.slot ? (\n // Consumer-supplied avatar node (e.g. Alia's Astroid tile).\n avatar.slot\n ) : (\n // Allow-list the src: LLM-supplied values can carry\n // `javascript:` / `data:text/html` / `data:image/svg+xml` and so\n // are scrubbed here before reaching <Avatar>. Fallback to initials.\n <Avatar\n name={avatar.name}\n src={safeImageSrc(avatar.src)}\n size=\"sm\"\n />\n )\n ) : null}\n\n <div\n className={[\n // min-w-0 allows this flex item to shrink below its content's\n // natural width — without it, a single unbreakable token (URL,\n // CJK run, hash) can force the bubble wider than the parent\n // and spill outside narrow containers like the Alia sidebar.\n 'ds:flex ds:flex-col ds:min-w-0',\n role === 'user'\n ? 'ds:items-end'\n : role === 'assistant'\n ? 'ds:items-start'\n : 'ds:items-center',\n ].join(' ')}\n >\n <div\n dir=\"auto\"\n className={[\n bubbleVariants({ role }),\n // `break-words` (from bubbleVariants) handles soft hyphens;\n // `overflow-wrap: anywhere` is the last-resort break for\n // URLs, hashes, or CJK runs that would otherwise push the\n // bubble wider than its parent in narrow docks like Alia.\n 'ds:[overflow-wrap:anywhere]',\n ].join(' ')}\n >\n {resolvedBody}\n </div>\n\n {(formattedTime || statusText) && role !== 'system' ? (\n <div\n className={[\n 'ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-meta ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {timestamp ? (\n <Timestamp\n value={timestamp}\n format=\"absolute\"\n absoluteFormat={{ hour: '2-digit', minute: '2-digit' }}\n dir=\"ltr\"\n />\n ) : null}\n {statusIcon ? (\n // `key={status}` re-mounts the span on every status change so\n // `animate-in` re-runs — gives the sending → sent → error\n // swap a subtle cross-fade instead of an abrupt pop.\n <span\n key={status}\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n {statusIcon}\n <span className=\"ds:sr-only\">{statusText}</span>\n </span>\n ) : null}\n {status === 'error' && onRetry ? (\n <Button\n intent=\"ghost\"\n size=\"sm\"\n onClick={onRetry}\n startIcon={<RotateCcw />}\n >\n {t('chat.message.retry')}\n </Button>\n ) : null}\n </div>\n ) : null}\n {actions ? (\n <div className=\"ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {actions}\n </div>\n ) : null}\n </div>\n </article>\n );\n },\n);\n\nChatMessage.displayName = 'ChatMessage';\n"],"names":["rowVariants","cva","bubbleVariants","SAFE_SCHEMES","tokenize","input","tokens","remaining","pattern","match","renderInline","tok","i","jsx","Fragment","renderBody","splitCodeFences","seg","CodeBlock","ChatMessage","forwardRef","role","content","avatar","timestamp","status","renderMarkdown","onRetry","actions","body","className","rest","ref","t","i18n","useTranslation","formattedTime","useMemo","date","roleLabel","messageLabel","resolvedBody","statusIcon","Clock","Check","CircleAlert","statusText","jsxs","Avatar","safeImageSrc","Timestamp","Button","RotateCcw"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { createContext as T, useContext as _, forwardRef as M, useId as G, useRe
|
|
|
3
3
|
import * as b from "@radix-ui/react-checkbox";
|
|
4
4
|
import { c as A } from "./index-D2ZczOXr.js";
|
|
5
5
|
import { u as B } from "./use-controllable-state-BiY4xTzM.js";
|
|
6
|
-
import { T as F } from "./tooltip-
|
|
6
|
+
import { T as F } from "./tooltip-Cp-PLePW.js";
|
|
7
7
|
import { u as H } from "./registry-DvAUVLHh.js";
|
|
8
8
|
const W = T(null);
|
|
9
9
|
function q() {
|
|
@@ -219,4 +219,4 @@ export {
|
|
|
219
219
|
W as a,
|
|
220
220
|
q as u
|
|
221
221
|
};
|
|
222
|
-
//# sourceMappingURL=checkbox-
|
|
222
|
+
//# sourceMappingURL=checkbox-CZkipDn7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-BuZ1u__2.js","sources":["../../src/components/checkbox/checkbox-group-context.ts","../../src/components/checkbox/checkbox.agent.ts","../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport interface CheckboxGroupContextShape {\n name?: string;\n value: Set<string>;\n toggle: (itemValue: string) => void;\n disabled: boolean;\n}\n\nexport const CheckboxGroupContext =\n createContext<CheckboxGroupContextShape | null>(null);\n\nexport function useCheckboxGroup(): CheckboxGroupContextShape | null {\n return useContext(CheckboxGroupContext);\n}\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — Checkbox. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxHandle } from './checkbox';\n\nexport const checkboxAgent: AgentAdapter<CheckboxHandle> = {\n id: 'checkbox',\n // A checkbox is a boolean toggle, not a one-of-N picker — `set_value`,\n // not `select_single` (which is reserved for choosing one item among many).\n capabilities: ['set_value'],\n state: {\n checked: {\n type: 'boolean | \"indeterminate\"',\n descriptionKey: 'ui.agent.checkbox.state.checked',\n description: 'Current checked state.',\n read: (handle) => handle.getChecked(),\n },\n },\n actions: {\n set_checked: {\n safety: 'write',\n argsType: '{ checked: boolean | \"indeterminate\" }',\n argsSchema: {\n type: 'object',\n properties: {\n checked: {\n oneOf: [{ type: 'boolean' }, { const: 'indeterminate' }],\n description:\n 'Target state: true, false, or the tri-state \"indeterminate\".',\n },\n },\n required: ['checked'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.checkbox.actions.setChecked',\n description: 'Set the checked state to a specific value.',\n examples: [{ args: { checked: true }, note: 'Tick the box.' }],\n invoke: (handle, args: { checked: boolean | 'indeterminate' }) => {\n handle.setChecked(args.checked);\n },\n },\n toggle: {\n safety: 'write',\n descriptionKey: 'ui.agent.checkbox.actions.toggle',\n description: 'Flip the checked state between checked and unchecked.',\n invoke: (handle) => {\n handle.toggle();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox',\n description: 'Marks the Checkbox wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixCheckbox from '@radix-ui/react-checkbox';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useCheckboxGroup } from './checkbox-group-context';\nimport { Tooltip } from '../tooltip';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxAgent } from './checkbox.agent';\n\n/** Agent-readiness curated handle for Checkbox. */\nexport interface CheckboxHandle {\n getChecked: () => boolean | 'indeterminate';\n setChecked: (checked: boolean | 'indeterminate') => void;\n toggle: () => void;\n}\n\nconst drawClasses = [\n 'ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]',\n 'ds:animate-[checkbox-indicator-draw_var(--animation-duration)_ease-out_forwards]',\n].join(' ');\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-check-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12l5 5L20 7\" className={drawClasses} />\n </svg>\n );\n}\n\nfunction IndeterminateIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-indeterminate-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12h14\" className={drawClasses} />\n </svg>\n );\n}\n\nconst checkboxVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:border ds:border-border ds:rounded-[var(--radius-sm)] ds:bg-background',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:data-[state=checked]:bg-primary ds:data-[state=checked]:border-primary',\n 'ds:data-[state=indeterminate]:bg-primary ds:data-[state=indeterminate]:border-primary',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n ].join(' '),\n {\n variants: {\n // Per-size `mt` centers the box optically on the first line of the\n // label using the type-label line-box height — important when the\n // label wraps, because the wrapper uses `items-start` so children\n // align to the top edge rather than the multi-line block's centre.\n size: {\n sm: 'ds:size-3.5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-0.875rem)/2)]',\n md: 'ds:size-4 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1rem)/2)]',\n lg: 'ds:size-5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1.25rem)/2)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixCheckbox.Root>;\n\nexport interface CheckboxProps\n extends\n Omit<RadixRootProps, 'checked' | 'onCheckedChange' | 'children'>,\n VariantProps<typeof checkboxVariants> {\n /**\n * Visible label rendered next to the box. Accepts a string or any React\n * node — useful for consent labels that embed a privacy / T&C link.\n */\n label: ReactNode;\n checked?: boolean | 'indeterminate';\n onCheckedChange?: (checked: boolean | 'indeterminate') => void;\n size?: 'sm' | 'md' | 'lg';\n disabledReason?: string;\n value?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n label,\n checked,\n onCheckedChange,\n size = 'md',\n disabled,\n disabledReason,\n name,\n value,\n id,\n className,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id ?? generatedId;\n const group = useCheckboxGroup();\n\n const inGroup = group !== null && value !== undefined;\n const [ownCheckedRaw, setOwnChecked] = useControllableState<\n boolean | 'indeterminate'\n >({\n value: checked,\n defaultValue: false,\n onChange: onCheckedChange,\n });\n const ownChecked = ownCheckedRaw ?? false;\n const effectiveChecked = inGroup ? group.value.has(value) : ownChecked;\n const effectiveOnChange = inGroup\n ? () => group.toggle(value)\n : (next: boolean | 'indeterminate') => {\n setOwnChecked(next);\n };\n const effectiveName = group?.name ?? name;\n const effectiveDisabled = group?.disabled || disabled;\n\n const checkedRef = useRef<boolean | 'indeterminate'>(\n effectiveChecked ?? false,\n );\n checkedRef.current = effectiveChecked ?? false;\n\n const agentHandle = useMemo<CheckboxHandle>(\n () => ({\n getChecked: () => checkedRef.current,\n setChecked: (next) => {\n if (inGroup) {\n // Inside a group: toggle implements set via the group context.\n const isOn =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate';\n const want = next === true || next === 'indeterminate';\n if (isOn !== want) group.toggle(value);\n return;\n }\n setOwnChecked(next);\n },\n toggle: () => {\n if (inGroup) {\n group.toggle(value);\n return;\n }\n const next =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate'\n ? false\n : true;\n setOwnChecked(next);\n },\n }),\n [inGroup, group, value, setOwnChecked],\n );\n useAgentRegistration(checkboxAgent, agentHandle, id);\n\n // `text-primary-foreground` lives on the SVG (not the <button> Root) so\n // a legacy consumer rule like `button, input, … { color: inherit }`\n // can't intercept it — the unlayered consumer rule would beat any\n // @layer utilities rule on the button itself, leaving the tick paint\n // (currentColor) inheriting the consumer's body text colour. See\n // styles.css for the matching form-element revert inside [data-component].\n const iconSizeClass = [\n 'ds:text-primary-foreground',\n size === 'sm' ? 'ds:size-3' : size === 'lg' ? 'ds:size-4' : 'ds:size-3.5',\n ].join(' ');\n\n const labelClasses = [\n 'type-label ds:text-foreground ds:select-none',\n effectiveDisabled\n ? 'ds:cursor-not-allowed ds:opacity-50'\n : 'ds:cursor-pointer',\n ].join(' ');\n\n const content = (\n <div\n data-component=\"checkbox\"\n data-component-id={id}\n data-option-id={value}\n className=\"ds:inline-flex ds:items-start ds:gap-[var(--spacing-sm)]\"\n >\n <RadixCheckbox.Root\n ref={ref}\n id={checkboxId}\n checked={effectiveChecked}\n onCheckedChange={effectiveOnChange}\n disabled={effectiveDisabled}\n aria-disabled={effectiveDisabled || undefined}\n name={effectiveName}\n value={value}\n className={checkboxVariants({ size, className })}\n {...props}\n >\n <RadixCheckbox.Indicator>\n {effectiveChecked === 'indeterminate' ? (\n <IndeterminateIcon className={iconSizeClass} />\n ) : (\n <CheckIcon className={iconSizeClass} />\n )}\n </RadixCheckbox.Indicator>\n </RadixCheckbox.Root>\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n </div>\n );\n\n if (effectiveDisabled && disabledReason) {\n return <Tooltip label={disabledReason}>{content}</Tooltip>;\n }\n\n return content;\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"names":["CheckboxGroupContext","createContext","useCheckboxGroup","useContext","checkboxAgent","handle","args","drawClasses","CheckIcon","className","jsx","IndeterminateIcon","checkboxVariants","cva","Checkbox","forwardRef","label","checked","onCheckedChange","size","disabled","disabledReason","name","value","id","props","ref","generatedId","useId","checkboxId","group","inGroup","ownCheckedRaw","setOwnChecked","useControllableState","effectiveChecked","effectiveOnChange","next","effectiveName","effectiveDisabled","checkedRef","useRef","agentHandle","useMemo","useAgentRegistration","iconSizeClass","labelClasses","content","jsxs","RadixCheckbox","Tooltip"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkbox-CZkipDn7.js","sources":["../../src/components/checkbox/checkbox-group-context.ts","../../src/components/checkbox/checkbox.agent.ts","../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport interface CheckboxGroupContextShape {\n name?: string;\n value: Set<string>;\n toggle: (itemValue: string) => void;\n disabled: boolean;\n}\n\nexport const CheckboxGroupContext =\n createContext<CheckboxGroupContextShape | null>(null);\n\nexport function useCheckboxGroup(): CheckboxGroupContextShape | null {\n return useContext(CheckboxGroupContext);\n}\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — Checkbox. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxHandle } from './checkbox';\n\nexport const checkboxAgent: AgentAdapter<CheckboxHandle> = {\n id: 'checkbox',\n // A checkbox is a boolean toggle, not a one-of-N picker — `set_value`,\n // not `select_single` (which is reserved for choosing one item among many).\n capabilities: ['set_value'],\n state: {\n checked: {\n type: 'boolean | \"indeterminate\"',\n descriptionKey: 'ui.agent.checkbox.state.checked',\n description: 'Current checked state.',\n read: (handle) => handle.getChecked(),\n },\n },\n actions: {\n set_checked: {\n safety: 'write',\n argsType: '{ checked: boolean | \"indeterminate\" }',\n argsSchema: {\n type: 'object',\n properties: {\n checked: {\n oneOf: [{ type: 'boolean' }, { const: 'indeterminate' }],\n description:\n 'Target state: true, false, or the tri-state \"indeterminate\".',\n },\n },\n required: ['checked'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.checkbox.actions.setChecked',\n description: 'Set the checked state to a specific value.',\n examples: [{ args: { checked: true }, note: 'Tick the box.' }],\n invoke: (handle, args: { checked: boolean | 'indeterminate' }) => {\n handle.setChecked(args.checked);\n },\n },\n toggle: {\n safety: 'write',\n descriptionKey: 'ui.agent.checkbox.actions.toggle',\n description: 'Flip the checked state between checked and unchecked.',\n invoke: (handle) => {\n handle.toggle();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox',\n description: 'Marks the Checkbox wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport * as RadixCheckbox from '@radix-ui/react-checkbox';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useCheckboxGroup } from './checkbox-group-context';\nimport { Tooltip } from '../tooltip';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxAgent } from './checkbox.agent';\n\n/** Agent-readiness curated handle for Checkbox. */\nexport interface CheckboxHandle {\n getChecked: () => boolean | 'indeterminate';\n setChecked: (checked: boolean | 'indeterminate') => void;\n toggle: () => void;\n}\n\nconst drawClasses = [\n 'ds:[stroke-dasharray:1] ds:[stroke-dashoffset:1]',\n 'ds:animate-[checkbox-indicator-draw_var(--animation-duration)_ease-out_forwards]',\n].join(' ');\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-check-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12l5 5L20 7\" className={drawClasses} />\n </svg>\n );\n}\n\nfunction IndeterminateIcon({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n aria-hidden=\"true\"\n data-slot=\"checkbox-indeterminate-icon\"\n className={className}\n >\n <path pathLength=\"1\" d=\"M5 12h14\" className={drawClasses} />\n </svg>\n );\n}\n\nconst checkboxVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:border ds:border-border ds:rounded-[var(--radius-sm)] ds:bg-background',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:data-[state=checked]:bg-primary ds:data-[state=checked]:border-primary',\n 'ds:data-[state=indeterminate]:bg-primary ds:data-[state=indeterminate]:border-primary',\n 'ds:relative ds:before:absolute ds:before:inset-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"]',\n ].join(' '),\n {\n variants: {\n // Per-size `mt` centers the box optically on the first line of the\n // label using the type-label line-box height — important when the\n // label wraps, because the wrapper uses `items-start` so children\n // align to the top edge rather than the multi-line block's centre.\n size: {\n sm: 'ds:size-3.5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-0.875rem)/2)]',\n md: 'ds:size-4 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1rem)/2)]',\n lg: 'ds:size-5 ds:mt-[calc((var(--type-label-size)*var(--type-label-line-height)-1.25rem)/2)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\ntype RadixRootProps = ComponentPropsWithoutRef<typeof RadixCheckbox.Root>;\n\nexport interface CheckboxProps\n extends\n Omit<RadixRootProps, 'checked' | 'onCheckedChange' | 'children'>,\n VariantProps<typeof checkboxVariants> {\n /**\n * Visible label rendered next to the box. Accepts a string or any React\n * node — useful for consent labels that embed a privacy / T&C link.\n */\n label: ReactNode;\n checked?: boolean | 'indeterminate';\n onCheckedChange?: (checked: boolean | 'indeterminate') => void;\n size?: 'sm' | 'md' | 'lg';\n disabledReason?: string;\n value?: string;\n}\n\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n label,\n checked,\n onCheckedChange,\n size = 'md',\n disabled,\n disabledReason,\n name,\n value,\n id,\n className,\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id ?? generatedId;\n const group = useCheckboxGroup();\n\n const inGroup = group !== null && value !== undefined;\n const [ownCheckedRaw, setOwnChecked] = useControllableState<\n boolean | 'indeterminate'\n >({\n value: checked,\n defaultValue: false,\n onChange: onCheckedChange,\n });\n const ownChecked = ownCheckedRaw ?? false;\n const effectiveChecked = inGroup ? group.value.has(value) : ownChecked;\n const effectiveOnChange = inGroup\n ? () => group.toggle(value)\n : (next: boolean | 'indeterminate') => {\n setOwnChecked(next);\n };\n const effectiveName = group?.name ?? name;\n const effectiveDisabled = group?.disabled || disabled;\n\n const checkedRef = useRef<boolean | 'indeterminate'>(\n effectiveChecked ?? false,\n );\n checkedRef.current = effectiveChecked ?? false;\n\n const agentHandle = useMemo<CheckboxHandle>(\n () => ({\n getChecked: () => checkedRef.current,\n setChecked: (next) => {\n if (inGroup) {\n // Inside a group: toggle implements set via the group context.\n const isOn =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate';\n const want = next === true || next === 'indeterminate';\n if (isOn !== want) group.toggle(value);\n return;\n }\n setOwnChecked(next);\n },\n toggle: () => {\n if (inGroup) {\n group.toggle(value);\n return;\n }\n const next =\n checkedRef.current === true ||\n checkedRef.current === 'indeterminate'\n ? false\n : true;\n setOwnChecked(next);\n },\n }),\n [inGroup, group, value, setOwnChecked],\n );\n useAgentRegistration(checkboxAgent, agentHandle, id);\n\n // `text-primary-foreground` lives on the SVG (not the <button> Root) so\n // a legacy consumer rule like `button, input, … { color: inherit }`\n // can't intercept it — the unlayered consumer rule would beat any\n // @layer utilities rule on the button itself, leaving the tick paint\n // (currentColor) inheriting the consumer's body text colour. See\n // styles.css for the matching form-element revert inside [data-component].\n const iconSizeClass = [\n 'ds:text-primary-foreground',\n size === 'sm' ? 'ds:size-3' : size === 'lg' ? 'ds:size-4' : 'ds:size-3.5',\n ].join(' ');\n\n const labelClasses = [\n 'type-label ds:text-foreground ds:select-none',\n effectiveDisabled\n ? 'ds:cursor-not-allowed ds:opacity-50'\n : 'ds:cursor-pointer',\n ].join(' ');\n\n const content = (\n <div\n data-component=\"checkbox\"\n data-component-id={id}\n data-option-id={value}\n className=\"ds:inline-flex ds:items-start ds:gap-[var(--spacing-sm)]\"\n >\n <RadixCheckbox.Root\n ref={ref}\n id={checkboxId}\n checked={effectiveChecked}\n onCheckedChange={effectiveOnChange}\n disabled={effectiveDisabled}\n aria-disabled={effectiveDisabled || undefined}\n name={effectiveName}\n value={value}\n className={checkboxVariants({ size, className })}\n {...props}\n >\n <RadixCheckbox.Indicator>\n {effectiveChecked === 'indeterminate' ? (\n <IndeterminateIcon className={iconSizeClass} />\n ) : (\n <CheckIcon className={iconSizeClass} />\n )}\n </RadixCheckbox.Indicator>\n </RadixCheckbox.Root>\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n </div>\n );\n\n if (effectiveDisabled && disabledReason) {\n return <Tooltip label={disabledReason}>{content}</Tooltip>;\n }\n\n return content;\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"names":["CheckboxGroupContext","createContext","useCheckboxGroup","useContext","checkboxAgent","handle","args","drawClasses","CheckIcon","className","jsx","IndeterminateIcon","checkboxVariants","cva","Checkbox","forwardRef","label","checked","onCheckedChange","size","disabled","disabledReason","name","value","id","props","ref","generatedId","useId","checkboxId","group","inGroup","ownCheckedRaw","setOwnChecked","useControllableState","effectiveChecked","effectiveOnChange","next","effectiveName","effectiveDisabled","checkedRef","useRef","agentHandle","useMemo","useAgentRegistration","iconSizeClass","labelClasses","content","jsxs","RadixCheckbox","Tooltip"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { forwardRef as O, useId as Q, useMemo as S, useState as T, useRef as W,
|
|
|
3
3
|
import { c as Z } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as V } from "react-i18next";
|
|
5
5
|
import { u as ee } from "./use-controllable-state-BiY4xTzM.js";
|
|
6
|
-
import { C as M, a as te } from "./checkbox-
|
|
6
|
+
import { C as M, a as te } from "./checkbox-CZkipDn7.js";
|
|
7
7
|
import { u as se } from "./registry-DvAUVLHh.js";
|
|
8
8
|
import { C as ce } from "./circle-alert-rGDZ73Wh.js";
|
|
9
9
|
const re = {
|
|
@@ -210,4 +210,4 @@ oe.displayName = "CheckboxGroup";
|
|
|
210
210
|
export {
|
|
211
211
|
oe as C
|
|
212
212
|
};
|
|
213
|
-
//# sourceMappingURL=checkbox-group-
|
|
213
|
+
//# sourceMappingURL=checkbox-group-DomUzpkF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-group-CfqMv57d.js","sources":["../../src/components/checkbox-group/checkbox-group.agent.ts","../../src/components/checkbox-group/checkbox-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CheckboxGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxGroupHandle } from './checkbox-group';\n\nexport const checkboxGroupAgent: AgentAdapter<CheckboxGroupHandle> = {\n id: 'checkbox-group',\n capabilities: ['select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.checkboxGroup.state.selection',\n description: 'Values of currently-checked options.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'write',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.checkboxGroup.actions.setSelection',\n description:\n 'Replace the current selection with the given option values.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.checkboxGroup.actions.clearSelection',\n description: 'Uncheck every option in the group.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox-group',\n description: 'Marks the CheckboxGroup fieldset.',\n },\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:\n 'Stable opaque value emitted on each rendered Checkbox child within the group.',\n },\n },\n};\n","import {\n Children,\n forwardRef,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { CircleAlert } from 'lucide-react';\nimport { Checkbox } from '../checkbox/checkbox';\nimport {\n CheckboxGroupContext,\n type CheckboxGroupContextShape,\n} from '../checkbox/checkbox-group-context';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxGroupAgent } from './checkbox-group.agent';\n\n/** Agent-readiness curated handle for CheckboxGroup. */\nexport interface CheckboxGroupHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nconst checkboxGroupVariants = cva('', {\n variants: {\n orientation: {\n vertical: 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal:\n 'ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { orientation: 'vertical' },\n});\n\nexport interface CheckboxGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps extends VariantProps<\n typeof checkboxGroupVariants\n> {\n label: string;\n value?: string[];\n onChange?: (value: string[]) => void;\n name?: string;\n /** Stable id, used to address this instance from the agent runtime. */\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n min?: number;\n max?: number;\n onConstraintViolation?: (type: 'min' | 'max') => void;\n withSelectAll?: boolean;\n options?: CheckboxGroupOption[];\n error?: string;\n helperText?: string;\n className?: string;\n children?: ReactNode;\n}\n\nfunction collectChildValues(children: ReactNode): string[] {\n const values: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown };\n if (typeof props.value === 'string') values.push(props.value);\n });\n return values;\n}\n\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>(\n (\n {\n label,\n value: controlledValue,\n onChange,\n name,\n id,\n orientation = 'vertical',\n disabled = false,\n min,\n max,\n onConstraintViolation,\n withSelectAll = false,\n options,\n error,\n helperText,\n className,\n children,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const baseId = useId();\n const helperId = `${baseId}-helper`;\n const errorId = `${baseId}-error`;\n const counterId = `${baseId}-counter`;\n\n const [currentValueRaw, setCurrentValue] = useControllableState<string[]>({\n value: controlledValue,\n defaultValue: [] as string[],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const valueSet = useMemo(() => new Set(currentValue), [currentValue]);\n\n const [violationMsg, setViolationMsg] = useState<string>('');\n\n const allValues = useMemo<string[]>(\n () =>\n options ? options.map((o) => o.value) : collectChildValues(children),\n [options, children],\n );\n\n const commit = (next: string[]): void => {\n setCurrentValue(next);\n };\n\n const currentValueRef = useRef<string[]>(currentValue);\n currentValueRef.current = currentValue;\n\n const agentHandle = useMemo<CheckboxGroupHandle>(\n () => ({\n getSelection: () => currentValueRef.current.slice(),\n setSelection: (ids) => commit(ids),\n clearSelection: () => commit([]),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [setCurrentValue],\n );\n useAgentRegistration(checkboxGroupAgent, agentHandle, id);\n\n const toggle = (itemValue: string): void => {\n if (valueSet.has(itemValue)) {\n if (typeof min === 'number' && currentValue.length <= min) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n setViolationMsg('');\n commit(currentValue.filter((v) => v !== itemValue));\n return;\n }\n if (typeof max === 'number' && currentValue.length >= max) {\n setViolationMsg(t('inputs.checkboxGroup.maxReached', { max }));\n onConstraintViolation?.('max');\n return;\n }\n setViolationMsg('');\n commit([...currentValue, itemValue]);\n };\n\n const ctxValue: CheckboxGroupContextShape = {\n name,\n value: valueSet,\n toggle,\n disabled,\n };\n\n const total = allValues.length;\n const count = currentValue.length;\n\n const parentChecked: boolean | 'indeterminate' =\n total === 0 || count === 0\n ? false\n : count >= total\n ? true\n : 'indeterminate';\n\n const handleSelectAll = (): void => {\n if (parentChecked === true) {\n if (typeof min === 'number' && min > 0) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n commit([]);\n setViolationMsg('');\n return;\n }\n const toCheck =\n typeof max === 'number' ? allValues.slice(0, max) : allValues;\n commit(toCheck);\n setViolationMsg('');\n };\n\n const describedBy =\n [\n helperText ? helperId : null,\n error ? errorId : null,\n total > 0 ? counterId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const resolvedChildren =\n children ??\n (options\n ? options.map((opt) => (\n <Checkbox\n key={opt.value}\n value={opt.value}\n label={opt.label}\n disabled={opt.disabled}\n />\n ))\n : null);\n\n const fieldsetClasses = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0 ds:border-0 ds:p-0 ds:m-0',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <fieldset\n ref={ref}\n id={id}\n className={fieldsetClasses}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n data-component=\"checkbox-group\"\n data-component-id={id}\n >\n <legend className=\"type-label ds:text-foreground ds:p-0 ds:mb-[var(--spacing-sm)]\">\n {label}\n </legend>\n {withSelectAll ? (\n <Checkbox\n label={t('inputs.checkboxGroup.selectAll')}\n checked={parentChecked}\n onCheckedChange={handleSelectAll}\n disabled={disabled}\n />\n ) : null}\n <CheckboxGroupContext.Provider value={ctxValue}>\n <div className={checkboxGroupVariants({ orientation })}>\n {resolvedChildren}\n </div>\n </CheckboxGroupContext.Provider>\n {helperText ? (\n <p id={helperId} className=\"type-body-sm ds:text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n {error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null}\n <span\n id={counterId}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n >\n {total > 0 ? t('inputs.checkboxGroup.counter', { count, total }) : ''}\n </span>\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {violationMsg}\n </span>\n </fieldset>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["checkboxGroupAgent","handle","args","checkboxGroupVariants","cva","collectChildValues","children","values","Children","child","isValidElement","props","CheckboxGroup","forwardRef","label","controlledValue","onChange","name","id","orientation","disabled","min","max","onConstraintViolation","withSelectAll","options","error","helperText","className","ref","t","useTranslation","baseId","useId","helperId","errorId","counterId","currentValueRaw","setCurrentValue","useControllableState","currentValue","valueSet","useMemo","violationMsg","setViolationMsg","useState","allValues","o","commit","next","currentValueRef","useRef","agentHandle","ids","useAgentRegistration","ctxValue","itemValue","v","total","count","parentChecked","handleSelectAll","toCheck","describedBy","resolvedChildren","opt","jsx","Checkbox","fieldsetClasses","jsxs","CheckboxGroupContext","CircleAlert"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkbox-group-DomUzpkF.js","sources":["../../src/components/checkbox-group/checkbox-group.agent.ts","../../src/components/checkbox-group/checkbox-group.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CheckboxGroup. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CheckboxGroupHandle } from './checkbox-group';\n\nexport const checkboxGroupAgent: AgentAdapter<CheckboxGroupHandle> = {\n id: 'checkbox-group',\n capabilities: ['select_multiple'],\n state: {\n selection: {\n type: 'string[]',\n descriptionKey: 'ui.agent.checkboxGroup.state.selection',\n description: 'Values of currently-checked options.',\n read: (handle) => handle.getSelection(),\n },\n },\n actions: {\n set_selection: {\n safety: 'write',\n argsType: '{ ids: string[] }',\n descriptionKey: 'ui.agent.checkboxGroup.actions.setSelection',\n description:\n 'Replace the current selection with the given option values.',\n invoke: (handle, args: { ids: string[] }) => {\n handle.setSelection(args.ids);\n },\n },\n clear_selection: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.checkboxGroup.actions.clearSelection',\n description: 'Uncheck every option in the group.',\n invoke: (handle) => {\n handle.clearSelection();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'checkbox-group',\n description: 'Marks the CheckboxGroup fieldset.',\n },\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:\n 'Stable opaque value emitted on each rendered Checkbox child within the group.',\n },\n },\n};\n","import {\n Children,\n forwardRef,\n isValidElement,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { CircleAlert } from 'lucide-react';\nimport { Checkbox } from '../checkbox/checkbox';\nimport {\n CheckboxGroupContext,\n type CheckboxGroupContextShape,\n} from '../checkbox/checkbox-group-context';\nimport { useAgentRegistration } from '../../agent';\nimport { checkboxGroupAgent } from './checkbox-group.agent';\n\n/** Agent-readiness curated handle for CheckboxGroup. */\nexport interface CheckboxGroupHandle {\n getSelection: () => string[];\n setSelection: (ids: string[]) => void;\n clearSelection: () => void;\n}\n\nconst checkboxGroupVariants = cva('', {\n variants: {\n orientation: {\n vertical: 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n horizontal:\n 'ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { orientation: 'vertical' },\n});\n\nexport interface CheckboxGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps extends VariantProps<\n typeof checkboxGroupVariants\n> {\n label: string;\n value?: string[];\n onChange?: (value: string[]) => void;\n name?: string;\n /** Stable id, used to address this instance from the agent runtime. */\n id?: string;\n orientation?: 'vertical' | 'horizontal';\n disabled?: boolean;\n min?: number;\n max?: number;\n onConstraintViolation?: (type: 'min' | 'max') => void;\n withSelectAll?: boolean;\n options?: CheckboxGroupOption[];\n error?: string;\n helperText?: string;\n className?: string;\n children?: ReactNode;\n}\n\nfunction collectChildValues(children: ReactNode): string[] {\n const values: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n const props = child.props as { value?: unknown };\n if (typeof props.value === 'string') values.push(props.value);\n });\n return values;\n}\n\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>(\n (\n {\n label,\n value: controlledValue,\n onChange,\n name,\n id,\n orientation = 'vertical',\n disabled = false,\n min,\n max,\n onConstraintViolation,\n withSelectAll = false,\n options,\n error,\n helperText,\n className,\n children,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const baseId = useId();\n const helperId = `${baseId}-helper`;\n const errorId = `${baseId}-error`;\n const counterId = `${baseId}-counter`;\n\n const [currentValueRaw, setCurrentValue] = useControllableState<string[]>({\n value: controlledValue,\n defaultValue: [] as string[],\n onChange,\n });\n const currentValue = currentValueRaw ?? [];\n\n const valueSet = useMemo(() => new Set(currentValue), [currentValue]);\n\n const [violationMsg, setViolationMsg] = useState<string>('');\n\n const allValues = useMemo<string[]>(\n () =>\n options ? options.map((o) => o.value) : collectChildValues(children),\n [options, children],\n );\n\n const commit = (next: string[]): void => {\n setCurrentValue(next);\n };\n\n const currentValueRef = useRef<string[]>(currentValue);\n currentValueRef.current = currentValue;\n\n const agentHandle = useMemo<CheckboxGroupHandle>(\n () => ({\n getSelection: () => currentValueRef.current.slice(),\n setSelection: (ids) => commit(ids),\n clearSelection: () => commit([]),\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [setCurrentValue],\n );\n useAgentRegistration(checkboxGroupAgent, agentHandle, id);\n\n const toggle = (itemValue: string): void => {\n if (valueSet.has(itemValue)) {\n if (typeof min === 'number' && currentValue.length <= min) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n setViolationMsg('');\n commit(currentValue.filter((v) => v !== itemValue));\n return;\n }\n if (typeof max === 'number' && currentValue.length >= max) {\n setViolationMsg(t('inputs.checkboxGroup.maxReached', { max }));\n onConstraintViolation?.('max');\n return;\n }\n setViolationMsg('');\n commit([...currentValue, itemValue]);\n };\n\n const ctxValue: CheckboxGroupContextShape = {\n name,\n value: valueSet,\n toggle,\n disabled,\n };\n\n const total = allValues.length;\n const count = currentValue.length;\n\n const parentChecked: boolean | 'indeterminate' =\n total === 0 || count === 0\n ? false\n : count >= total\n ? true\n : 'indeterminate';\n\n const handleSelectAll = (): void => {\n if (parentChecked === true) {\n if (typeof min === 'number' && min > 0) {\n setViolationMsg(t('inputs.checkboxGroup.minReached', { min }));\n onConstraintViolation?.('min');\n return;\n }\n commit([]);\n setViolationMsg('');\n return;\n }\n const toCheck =\n typeof max === 'number' ? allValues.slice(0, max) : allValues;\n commit(toCheck);\n setViolationMsg('');\n };\n\n const describedBy =\n [\n helperText ? helperId : null,\n error ? errorId : null,\n total > 0 ? counterId : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n const resolvedChildren =\n children ??\n (options\n ? options.map((opt) => (\n <Checkbox\n key={opt.value}\n value={opt.value}\n label={opt.label}\n disabled={opt.disabled}\n />\n ))\n : null);\n\n const fieldsetClasses = [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:min-w-0 ds:border-0 ds:p-0 ds:m-0',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <fieldset\n ref={ref}\n id={id}\n className={fieldsetClasses}\n aria-describedby={describedBy}\n aria-invalid={Boolean(error) || undefined}\n data-component=\"checkbox-group\"\n data-component-id={id}\n >\n <legend className=\"type-label ds:text-foreground ds:p-0 ds:mb-[var(--spacing-sm)]\">\n {label}\n </legend>\n {withSelectAll ? (\n <Checkbox\n label={t('inputs.checkboxGroup.selectAll')}\n checked={parentChecked}\n onCheckedChange={handleSelectAll}\n disabled={disabled}\n />\n ) : null}\n <CheckboxGroupContext.Provider value={ctxValue}>\n <div className={checkboxGroupVariants({ orientation })}>\n {resolvedChildren}\n </div>\n </CheckboxGroupContext.Provider>\n {helperText ? (\n <p id={helperId} className=\"type-body-sm ds:text-muted-foreground\">\n {helperText}\n </p>\n ) : null}\n {error ? (\n <p\n id={errorId}\n role=\"alert\"\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-destructive\"\n >\n <CircleAlert aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{error}</span>\n </p>\n ) : null}\n <span\n id={counterId}\n role=\"status\"\n aria-live=\"polite\"\n className=\"ds:sr-only\"\n >\n {total > 0 ? t('inputs.checkboxGroup.counter', { count, total }) : ''}\n </span>\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {violationMsg}\n </span>\n </fieldset>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["checkboxGroupAgent","handle","args","checkboxGroupVariants","cva","collectChildValues","children","values","Children","child","isValidElement","props","CheckboxGroup","forwardRef","label","controlledValue","onChange","name","id","orientation","disabled","min","max","onConstraintViolation","withSelectAll","options","error","helperText","className","ref","t","useTranslation","baseId","useId","helperId","errorId","counterId","currentValueRaw","setCurrentValue","useControllableState","currentValue","valueSet","useMemo","violationMsg","setViolationMsg","useState","allValues","o","commit","next","currentValueRef","useRef","agentHandle","ids","useAgentRegistration","ctxValue","itemValue","v","total","count","parentChecked","handleSelectAll","toCheck","describedBy","resolvedChildren","opt","jsx","Checkbox","fieldsetClasses","jsxs","CheckboxGroupContext","CircleAlert"],"mappings":"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"}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import { jsxs as o, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as $, useId as P, useState as w, useMemo as F } from "react";
|
|
3
|
+
import { c as k } from "./index-D2ZczOXr.js";
|
|
4
|
+
import { useTranslation as T } from "react-i18next";
|
|
5
|
+
import { A as ee } from "./avatar-CkDeQOSI.js";
|
|
6
|
+
import { B as g } from "./badge-BudgzTe_.js";
|
|
7
|
+
import { C as S } from "./card-DPmk26CL.js";
|
|
8
|
+
import { T as B } from "./timestamp-BV2lC-wV.js";
|
|
9
|
+
import { SafeHtml as se } from "../safe-html/index.js";
|
|
10
|
+
import { n as ae, P as I, F as O, N as ie } from "./note-attachment-CwDir3kK.js";
|
|
11
|
+
import { u as te } from "./use-clamp-overflow-DQE2kwZ9.js";
|
|
12
|
+
import { u as re } from "./registry-DvAUVLHh.js";
|
|
13
|
+
const de = {
|
|
14
|
+
id: "clinical-note-card",
|
|
15
|
+
capabilities: [],
|
|
16
|
+
state: {
|
|
17
|
+
noteId: {
|
|
18
|
+
type: "string | undefined",
|
|
19
|
+
descriptionKey: "ui.agent.clinicalNoteCard.state.noteId",
|
|
20
|
+
description: "Stable identifier of the rendered note, when supplied.",
|
|
21
|
+
read: (a) => a.getNoteId()
|
|
22
|
+
},
|
|
23
|
+
pinned: {
|
|
24
|
+
type: "boolean",
|
|
25
|
+
descriptionKey: "ui.agent.clinicalNoteCard.state.pinned",
|
|
26
|
+
description: "Whether the note is pinned to the top of the timeline.",
|
|
27
|
+
read: (a) => a.isPinned()
|
|
28
|
+
},
|
|
29
|
+
flagged: {
|
|
30
|
+
type: "boolean",
|
|
31
|
+
descriptionKey: "ui.agent.clinicalNoteCard.state.flagged",
|
|
32
|
+
description: "Whether the note is flagged for follow-up.",
|
|
33
|
+
read: (a) => a.isFlagged()
|
|
34
|
+
},
|
|
35
|
+
attachmentKind: {
|
|
36
|
+
type: "'patient' | 'carePlan' | 'carePlanEntry' | 'phase' | 'xray' | undefined",
|
|
37
|
+
descriptionKey: "ui.agent.clinicalNoteCard.state.attachmentKind",
|
|
38
|
+
description: "Structural kind the note is attached to. Never the attachment identity or content.",
|
|
39
|
+
read: (a) => a.getAttachmentKind()
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
actions: {},
|
|
43
|
+
domHooks: {
|
|
44
|
+
root: {
|
|
45
|
+
attr: "data-component",
|
|
46
|
+
value: "clinical-note-card",
|
|
47
|
+
description: "Marks the ClinicalNoteCard root. Also emits data-pinned / data-flagged / data-attached-to structural hooks."
|
|
48
|
+
},
|
|
49
|
+
instanceId: {
|
|
50
|
+
attr: "data-component-id",
|
|
51
|
+
sourceProp: "id",
|
|
52
|
+
description: "Sourced from the id prop — addresses a specific note."
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}, ne = k("ds:w-full ds:text-[color:var(--foreground)]", {
|
|
56
|
+
variants: {
|
|
57
|
+
surface: { flat: "", elevated: "" }
|
|
58
|
+
},
|
|
59
|
+
defaultVariants: { surface: "elevated" }
|
|
60
|
+
}), oe = k(
|
|
61
|
+
[
|
|
62
|
+
"type-body-sm ds:text-[color:var(--foreground)]",
|
|
63
|
+
"ds:break-words",
|
|
64
|
+
"[&_a]:ds:underline [&_a]:ds:underline-offset-2",
|
|
65
|
+
"[&_code]:ds:rounded-[var(--radius-sm)] [&_code]:ds:bg-muted/30 [&_code]:ds:ps-[var(--spacing-xs)] [&_code]:ds:pe-[var(--spacing-xs)] [&_code]:ds:font-[family-name:var(--font-mono)]",
|
|
66
|
+
"[&_p]:ds:m-0 [&_p+p]:ds:mt-[var(--spacing-sm)]",
|
|
67
|
+
// `list-disc` / `list-decimal` are load-bearing: the card renders host
|
|
68
|
+
// HTML inside `[data-component]`, where preflight's `list-style: none`
|
|
69
|
+
// still applies. Without them the indent lands but the markers do not.
|
|
70
|
+
"ds:[&_ul]:m-0 ds:[&_ul]:ps-[var(--spacing-md)] ds:[&_ul]:list-disc ds:[&_ol]:m-0 ds:[&_ol]:ps-[var(--spacing-md)] ds:[&_ol]:list-decimal",
|
|
71
|
+
// Rich-text (Redactor) extras — harmless on markdown notes, which carry
|
|
72
|
+
// none of these tags. Headings, inline images and tables stay readable.
|
|
73
|
+
"[&_h2]:type-title-item [&_h3]:type-title-item [&_h2]:ds:m-0 [&_h3]:ds:m-0",
|
|
74
|
+
"[&_img]:ds:max-w-full [&_img]:ds:h-auto [&_img]:ds:rounded-[var(--radius-sm)]",
|
|
75
|
+
"[&_table]:ds:my-[var(--spacing-sm)] [&_table]:ds:w-full [&_table]:ds:border-collapse",
|
|
76
|
+
"[&_th]:ds:border [&_th]:ds:border-[color:var(--border)] [&_th]:ds:ps-[var(--spacing-xs)] [&_th]:ds:pe-[var(--spacing-xs)] [&_th]:ds:py-[var(--spacing-2xs)] [&_th]:ds:text-start",
|
|
77
|
+
"[&_td]:ds:border [&_td]:ds:border-[color:var(--border)] [&_td]:ds:ps-[var(--spacing-xs)] [&_td]:ds:pe-[var(--spacing-xs)] [&_td]:ds:py-[var(--spacing-2xs)]"
|
|
78
|
+
].join(" "),
|
|
79
|
+
{
|
|
80
|
+
variants: {
|
|
81
|
+
truncate: {
|
|
82
|
+
true: "ds:[overflow:hidden] ds:[display:-webkit-box] ds:[-webkit-box-orient:vertical] ds:[-webkit-line-clamp:5]",
|
|
83
|
+
false: ""
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
defaultVariants: { truncate: !1 }
|
|
87
|
+
}
|
|
88
|
+
), le = [
|
|
89
|
+
"ds:relative ds:inline-flex ds:items-center ds:justify-center ds:shrink-0",
|
|
90
|
+
"ds:size-7 ds:rounded-[var(--radius-sm)]",
|
|
91
|
+
'ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[""] ds:sm:before:hidden',
|
|
92
|
+
"ds:hover:bg-[color:var(--muted)]/20",
|
|
93
|
+
"ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid",
|
|
94
|
+
"ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
|
|
95
|
+
"ds:forced-colors:focus-visible:outline-[CanvasText]",
|
|
96
|
+
"ds:transition-[color,background-color] ds:duration-[var(--animation-duration)]",
|
|
97
|
+
"ds:motion-reduce:transition-none"
|
|
98
|
+
].join(" "), V = [
|
|
99
|
+
"ds:mt-[var(--spacing-2xs)] ds:inline-flex ds:items-center ds:self-start",
|
|
100
|
+
"ds:text-[length:var(--font-size-xs)] ds:font-semibold",
|
|
101
|
+
"ds:underline ds:underline-offset-2 ds:text-[color:var(--primary)] ds:hover:no-underline",
|
|
102
|
+
"ds:rounded-[var(--radius-sm)]",
|
|
103
|
+
"ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid",
|
|
104
|
+
"ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]",
|
|
105
|
+
"ds:forced-colors:focus-visible:outline-[CanvasText]"
|
|
106
|
+
].join(" "), ce = k([
|
|
107
|
+
V,
|
|
108
|
+
"ds:[min-block-size:var(--min-target-size)] ds:[min-inline-size:var(--min-target-size)]"
|
|
109
|
+
]);
|
|
110
|
+
function R({
|
|
111
|
+
icon: a,
|
|
112
|
+
pressed: l,
|
|
113
|
+
label: c,
|
|
114
|
+
activeClassName: d,
|
|
115
|
+
onToggle: p
|
|
116
|
+
}) {
|
|
117
|
+
return /* @__PURE__ */ e(
|
|
118
|
+
"button",
|
|
119
|
+
{
|
|
120
|
+
type: "button",
|
|
121
|
+
"aria-pressed": l,
|
|
122
|
+
"aria-label": c,
|
|
123
|
+
onClick: p,
|
|
124
|
+
className: [
|
|
125
|
+
le,
|
|
126
|
+
l ? d : "ds:text-[color:var(--muted-foreground)] ds:hover:text-[color:var(--foreground)]"
|
|
127
|
+
].join(" "),
|
|
128
|
+
children: a
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
const me = $(
|
|
133
|
+
({
|
|
134
|
+
id: a,
|
|
135
|
+
dateIso: l,
|
|
136
|
+
createdAtIso: c,
|
|
137
|
+
author: d,
|
|
138
|
+
operatorName: p,
|
|
139
|
+
deleted: i,
|
|
140
|
+
clinical: z,
|
|
141
|
+
attachedTo: n,
|
|
142
|
+
content: b,
|
|
143
|
+
contentFormat: x = "markdown",
|
|
144
|
+
pinned: t,
|
|
145
|
+
flagged: r,
|
|
146
|
+
headerActions: j,
|
|
147
|
+
onTogglePin: u,
|
|
148
|
+
onToggleFlag: f,
|
|
149
|
+
truncate: v = !1,
|
|
150
|
+
surface: K = "elevated",
|
|
151
|
+
"aria-label": L,
|
|
152
|
+
className: E,
|
|
153
|
+
...W
|
|
154
|
+
}, U) => {
|
|
155
|
+
const { t: s } = T(), N = P(), C = P(), [m, q] = w(!1), [y, A] = w(!1), [G, J] = w(!!i);
|
|
156
|
+
G !== !!i && (J(!!i), A(!1));
|
|
157
|
+
const h = !!i && !y, { ref: Q, isOverflowing: X } = te(
|
|
158
|
+
v && !m && !h
|
|
159
|
+
), Y = v && !h && (X || m), Z = F(
|
|
160
|
+
() => x === "html" ? b : ae(b),
|
|
161
|
+
[b, x]
|
|
162
|
+
), D = L ?? s("clinicalNoteCard.regionLabel");
|
|
163
|
+
re(
|
|
164
|
+
de,
|
|
165
|
+
{
|
|
166
|
+
getNoteId: () => a,
|
|
167
|
+
isPinned: () => !!t,
|
|
168
|
+
isFlagged: () => !!r,
|
|
169
|
+
getAttachmentKind: () => n == null ? void 0 : n.kind
|
|
170
|
+
},
|
|
171
|
+
a
|
|
172
|
+
);
|
|
173
|
+
const M = /* @__PURE__ */ e(ie, { attachedTo: n }), H = /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
|
|
174
|
+
/* @__PURE__ */ o("div", { className: "ds:flex ds:items-start ds:gap-[var(--spacing-sm)]", children: [
|
|
175
|
+
d ? /* @__PURE__ */ e(
|
|
176
|
+
ee,
|
|
177
|
+
{
|
|
178
|
+
name: d.name,
|
|
179
|
+
src: d.avatarUrl,
|
|
180
|
+
size: "sm",
|
|
181
|
+
className: "ds:shrink-0",
|
|
182
|
+
"aria-hidden": "true",
|
|
183
|
+
role: "presentation",
|
|
184
|
+
"aria-label": void 0
|
|
185
|
+
}
|
|
186
|
+
) : null,
|
|
187
|
+
/* @__PURE__ */ o("div", { className: "ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]", children: [
|
|
188
|
+
d ? /* @__PURE__ */ e(
|
|
189
|
+
"span",
|
|
190
|
+
{
|
|
191
|
+
id: N,
|
|
192
|
+
className: "type-title-item ds:text-[color:var(--foreground)] ds:truncate",
|
|
193
|
+
children: d.name
|
|
194
|
+
}
|
|
195
|
+
) : /* @__PURE__ */ e("span", { id: N, className: "ds:sr-only", children: D }),
|
|
196
|
+
p ? /* @__PURE__ */ e("span", { className: "type-meta ds:text-[color:var(--muted-foreground)] ds:break-words", children: s("clinicalNoteCard.operator", { name: p }) }) : null,
|
|
197
|
+
/* @__PURE__ */ o("span", { className: "ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-xs)] ds:gap-y-[var(--spacing-2xs)] ds:empty:hidden", children: [
|
|
198
|
+
l ? /* @__PURE__ */ e(B, { value: l, shape: "bare", size: "sm" }) : null,
|
|
199
|
+
c && c !== l ? /* @__PURE__ */ o("span", { className: "type-meta ds:text-[color:var(--muted-foreground)]", children: [
|
|
200
|
+
s("clinicalNoteCard.added"),
|
|
201
|
+
" ",
|
|
202
|
+
/* @__PURE__ */ e(B, { value: c, shape: "bare", size: "sm" })
|
|
203
|
+
] }) : null
|
|
204
|
+
] })
|
|
205
|
+
] }),
|
|
206
|
+
i || z || j || u || f || t || r ? /* @__PURE__ */ o("span", { className: "ds:ms-auto ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:justify-end ds:gap-[var(--spacing-xs)]", children: [
|
|
207
|
+
i ? /* @__PURE__ */ e(g, { variant: "error", size: "sm", children: s("clinicalNoteCard.deleted") }) : null,
|
|
208
|
+
z ? /* @__PURE__ */ e(g, { variant: "brand", size: "sm", children: s("clinicalNoteCard.clinical") }) : null,
|
|
209
|
+
u || f || t || r ? /* @__PURE__ */ o("span", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]", children: [
|
|
210
|
+
u ? /* @__PURE__ */ e(
|
|
211
|
+
R,
|
|
212
|
+
{
|
|
213
|
+
pressed: !!t,
|
|
214
|
+
onToggle: u,
|
|
215
|
+
label: s(t ? "clinicalNoteCard.unpin" : "clinicalNoteCard.pin"),
|
|
216
|
+
activeClassName: "ds:text-[color:var(--accent)]",
|
|
217
|
+
icon: /* @__PURE__ */ e(
|
|
218
|
+
I,
|
|
219
|
+
{
|
|
220
|
+
"aria-hidden": "true",
|
|
221
|
+
className: "ds:size-4",
|
|
222
|
+
fill: t ? "currentColor" : "none"
|
|
223
|
+
}
|
|
224
|
+
)
|
|
225
|
+
}
|
|
226
|
+
) : t ? /* @__PURE__ */ e(
|
|
227
|
+
g,
|
|
228
|
+
{
|
|
229
|
+
variant: "accent",
|
|
230
|
+
size: "sm",
|
|
231
|
+
leading: /* @__PURE__ */ e(I, { "aria-hidden": "true" }),
|
|
232
|
+
children: s("clinicalNoteCard.pinned")
|
|
233
|
+
}
|
|
234
|
+
) : null,
|
|
235
|
+
f ? /* @__PURE__ */ e(
|
|
236
|
+
R,
|
|
237
|
+
{
|
|
238
|
+
pressed: !!r,
|
|
239
|
+
onToggle: f,
|
|
240
|
+
label: s(r ? "clinicalNoteCard.unflag" : "clinicalNoteCard.flag"),
|
|
241
|
+
activeClassName: "ds:text-[color:var(--warning-readable)]",
|
|
242
|
+
icon: /* @__PURE__ */ e(
|
|
243
|
+
O,
|
|
244
|
+
{
|
|
245
|
+
"aria-hidden": "true",
|
|
246
|
+
className: "ds:size-4",
|
|
247
|
+
fill: r ? "currentColor" : "none"
|
|
248
|
+
}
|
|
249
|
+
)
|
|
250
|
+
}
|
|
251
|
+
) : r ? /* @__PURE__ */ e(
|
|
252
|
+
g,
|
|
253
|
+
{
|
|
254
|
+
variant: "warning",
|
|
255
|
+
size: "sm",
|
|
256
|
+
leading: /* @__PURE__ */ e(O, { "aria-hidden": "true" }),
|
|
257
|
+
children: s("clinicalNoteCard.flagged")
|
|
258
|
+
}
|
|
259
|
+
) : null
|
|
260
|
+
] }) : null,
|
|
261
|
+
j
|
|
262
|
+
] }) : null
|
|
263
|
+
] }),
|
|
264
|
+
i ? /* @__PURE__ */ e(
|
|
265
|
+
"button",
|
|
266
|
+
{
|
|
267
|
+
type: "button",
|
|
268
|
+
"aria-expanded": y,
|
|
269
|
+
"aria-controls": C,
|
|
270
|
+
onClick: () => A((_) => !_),
|
|
271
|
+
className: ce(),
|
|
272
|
+
children: s(y ? "clinicalNoteCard.hideDeleted" : "clinicalNoteCard.showDeleted")
|
|
273
|
+
}
|
|
274
|
+
) : null,
|
|
275
|
+
/* @__PURE__ */ e(
|
|
276
|
+
se,
|
|
277
|
+
{
|
|
278
|
+
ref: Q,
|
|
279
|
+
id: v || i ? C : void 0,
|
|
280
|
+
hidden: h,
|
|
281
|
+
html: h ? "" : Z,
|
|
282
|
+
profile: x === "html" ? "rich-text" : "markdown",
|
|
283
|
+
className: oe({ truncate: v && !m })
|
|
284
|
+
}
|
|
285
|
+
),
|
|
286
|
+
Y ? /* @__PURE__ */ e(
|
|
287
|
+
"button",
|
|
288
|
+
{
|
|
289
|
+
type: "button",
|
|
290
|
+
"aria-expanded": m,
|
|
291
|
+
"aria-controls": C,
|
|
292
|
+
onClick: () => q((_) => !_),
|
|
293
|
+
className: V,
|
|
294
|
+
children: s(m ? "clinicalNoteCard.readLess" : "clinicalNoteCard.readMore")
|
|
295
|
+
}
|
|
296
|
+
) : null,
|
|
297
|
+
M ? /* @__PURE__ */ e("div", { className: "ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]", children: M }) : null
|
|
298
|
+
] });
|
|
299
|
+
return /* @__PURE__ */ e(
|
|
300
|
+
"div",
|
|
301
|
+
{
|
|
302
|
+
ref: U,
|
|
303
|
+
role: "article",
|
|
304
|
+
"aria-label": D,
|
|
305
|
+
"aria-labelledby": N,
|
|
306
|
+
"data-component": "clinical-note-card",
|
|
307
|
+
"data-component-id": a,
|
|
308
|
+
"data-pinned": t ? "true" : void 0,
|
|
309
|
+
"data-flagged": r ? "true" : void 0,
|
|
310
|
+
"data-deleted": i ? "true" : void 0,
|
|
311
|
+
"data-attached-to": n == null ? void 0 : n.kind,
|
|
312
|
+
id: a,
|
|
313
|
+
className: ne({ surface: K, className: E }),
|
|
314
|
+
...W,
|
|
315
|
+
children: K === "elevated" ? /* @__PURE__ */ e(S, { variant: "elevated", children: /* @__PURE__ */ e(S.Body, { children: H }) }) : H
|
|
316
|
+
}
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
);
|
|
320
|
+
me.displayName = "ClinicalNoteCard";
|
|
321
|
+
export {
|
|
322
|
+
me as C,
|
|
323
|
+
de as c
|
|
324
|
+
};
|
|
325
|
+
//# sourceMappingURL=clinical-note-card-DdsGYMmI.js.map
|