@alfadocs/ui-kit-debug 1.61.0 → 1.63.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-CZWGQFKV.js → actions-cell-renderer-BXCpK2_0.js} +3 -3
- package/dist/_chunks/{actions-cell-renderer-CZWGQFKV.js.map → actions-cell-renderer-BXCpK2_0.js.map} +1 -1
- package/dist/_chunks/{agenda-card-DauvvKX6.js → agenda-card-DR9gDdKp.js} +2 -2
- package/dist/_chunks/{agenda-card-DauvvKX6.js.map → agenda-card-DR9gDdKp.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-DU7O5Z7R.js → agenda-tray-DGB1Zup-.js} +3 -3
- package/dist/_chunks/{agenda-tray-DU7O5Z7R.js.map → agenda-tray-DGB1Zup-.js.map} +1 -1
- package/dist/_chunks/{ai-credits-notice-MBgQXxsx.js → ai-credits-notice-pK9BOmEz.js} +2 -2
- package/dist/_chunks/{ai-credits-notice-MBgQXxsx.js.map → ai-credits-notice-pK9BOmEz.js.map} +1 -1
- package/dist/_chunks/{ai-permission-notice-BJHutKLE.js → ai-permission-notice-DpRmZ9Q3.js} +4 -4
- package/dist/_chunks/{ai-permission-notice-BJHutKLE.js.map → ai-permission-notice-DpRmZ9Q3.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-Dzos37rf.js → ai-prompt-input-DSGSe4LH.js} +2 -2
- package/dist/_chunks/{ai-prompt-input-Dzos37rf.js.map → ai-prompt-input-DSGSe4LH.js.map} +1 -1
- package/dist/_chunks/{alert-BhCstf2h.js → alert-DdDpOi-P.js} +2 -2
- package/dist/_chunks/{alert-BhCstf2h.js.map → alert-DdDpOi-P.js.map} +1 -1
- package/dist/_chunks/{alia-sidebar-CU3mVL9J.js → alia-sidebar-qe0quZkB.js} +6 -6
- package/dist/_chunks/{alia-sidebar-CU3mVL9J.js.map → alia-sidebar-qe0quZkB.js.map} +1 -1
- package/dist/_chunks/{anamnesis-card-VjJOUl-t.js → anamnesis-card-CsUBOG32.js} +3 -3
- package/dist/_chunks/{anamnesis-card-VjJOUl-t.js.map → anamnesis-card-CsUBOG32.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-card-cCj7LPh3.js → anamnesis-summary-card-CMzBLTiN.js} +3 -3
- package/dist/_chunks/{anamnesis-summary-card-cCj7LPh3.js.map → anamnesis-summary-card-CMzBLTiN.js.map} +1 -1
- package/dist/_chunks/{anamnesis-summary-rows-C5F08WT6.js → anamnesis-summary-rows-DFWws7mM.js} +11 -11
- package/dist/_chunks/{anamnesis-summary-rows-C5F08WT6.js.map → anamnesis-summary-rows-DFWws7mM.js.map} +1 -1
- package/dist/_chunks/{antenatal-schedule-timeline-CfNFrej5.js → antenatal-schedule-timeline-DuaAQj1m.js} +2 -2
- package/dist/_chunks/{antenatal-schedule-timeline-CfNFrej5.js.map → antenatal-schedule-timeline-DuaAQj1m.js.map} +1 -1
- package/dist/_chunks/app-frame-DUPEwu4E.js +179 -0
- package/dist/_chunks/app-frame-DUPEwu4E.js.map +1 -0
- package/dist/_chunks/app-frame-context-CPszhDDb.js +10 -0
- package/dist/_chunks/app-frame-context-CPszhDDb.js.map +1 -0
- package/dist/_chunks/{appointment-card-BXQUZlAJ.js → appointment-card-CL32sux-.js} +3 -3
- package/dist/_chunks/{appointment-card-BXQUZlAJ.js.map → appointment-card-CL32sux-.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-BvzXHYiD.js → appointment-peek-B5mcDcXt.js} +3 -3
- package/dist/_chunks/{appointment-peek-BvzXHYiD.js.map → appointment-peek-B5mcDcXt.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-r-q97cec.js → appointment-timeline-DaHKV81s.js} +4 -4
- package/dist/_chunks/{appointment-timeline-r-q97cec.js.map → appointment-timeline-DaHKV81s.js.map} +1 -1
- package/dist/_chunks/{appointment-tray-DF_R9ldY.js → appointment-tray-qtpJt8e0.js} +3 -3
- package/dist/_chunks/{appointment-tray-DF_R9ldY.js.map → appointment-tray-qtpJt8e0.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-Cssm6jVh.js → audio-recorder-DR-u1qbl.js} +3 -3
- package/dist/_chunks/{audio-recorder-Cssm6jVh.js.map → audio-recorder-DR-u1qbl.js.map} +1 -1
- package/dist/_chunks/{auth-form-parts-CravOf0L.js → auth-form-parts-Cmb41LSQ.js} +2 -2
- package/dist/_chunks/{auth-form-parts-CravOf0L.js.map → auth-form-parts-Cmb41LSQ.js.map} +1 -1
- package/dist/_chunks/{badge-hnBt8o7n.js → badge-BUk4RjTS.js} +2 -2
- package/dist/_chunks/{badge-hnBt8o7n.js.map → badge-BUk4RjTS.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-DMG06b2C.js → balance-badge-cell-tB4u0Nr4.js} +5 -5
- package/dist/_chunks/{balance-badge-cell-DMG06b2C.js.map → balance-badge-cell-tB4u0Nr4.js.map} +1 -1
- package/dist/_chunks/{bishop-score-DxfkcxiV.js → bishop-score-CaNTrikJ.js} +2 -2
- package/dist/_chunks/{bishop-score-DxfkcxiV.js.map → bishop-score-CaNTrikJ.js.map} +1 -1
- package/dist/_chunks/{bmi-calculator-B4kgPqt5.js → bmi-calculator-DjmQ04Ch.js} +4 -4
- package/dist/_chunks/{bmi-calculator-B4kgPqt5.js.map → bmi-calculator-DjmQ04Ch.js.map} +1 -1
- package/dist/_chunks/{booking-CXaqmdF7.js → booking-CGhOtxad.js} +8 -8
- package/dist/_chunks/{booking-CXaqmdF7.js.map → booking-CGhOtxad.js.map} +1 -1
- package/dist/_chunks/{button-group-Cfpyu6pc.js → button-group-DCOJhvm3.js} +3 -3
- package/dist/_chunks/{button-group-Cfpyu6pc.js.map → button-group-DCOJhvm3.js.map} +1 -1
- package/dist/_chunks/{calendar-DNTVaK6b.js → calendar-DCr65Kt1.js} +3 -3
- package/dist/_chunks/{calendar-DNTVaK6b.js.map → calendar-DCr65Kt1.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-UL5xcpWa.js → calendar-workspace-BgcqB0PI.js} +29 -29
- package/dist/_chunks/{calendar-workspace-UL5xcpWa.js.map → calendar-workspace-BgcqB0PI.js.map} +1 -1
- package/dist/_chunks/{care-plan-card-DFQbU_Gd.js → care-plan-card-DJzbwJLl.js} +4 -4
- package/dist/_chunks/{care-plan-card-DFQbU_Gd.js.map → care-plan-card-DJzbwJLl.js.map} +1 -1
- package/dist/_chunks/{care-plan-entry-card-bj784KRk.js → care-plan-entry-card-DPJcP34v.js} +4 -4
- package/dist/_chunks/{care-plan-entry-card-bj784KRk.js.map → care-plan-entry-card-DPJcP34v.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-DDhyAfVK.js → care-plan-header-1HzbkYcR.js} +4 -4
- package/dist/_chunks/{care-plan-header-DDhyAfVK.js.map → care-plan-header-1HzbkYcR.js.map} +1 -1
- package/dist/_chunks/{carousel.agent-Csn24G1k.js → carousel.agent-BaRsN-8H.js} +2 -2
- package/dist/_chunks/{carousel.agent-Csn24G1k.js.map → carousel.agent-BaRsN-8H.js.map} +1 -1
- package/dist/_chunks/chart-BAeJ7pvD.js +1120 -0
- package/dist/_chunks/chart-BAeJ7pvD.js.map +1 -0
- package/dist/_chunks/{chat-input-Ck34Pnmp.js → chat-input-HtTbUUD6.js} +2 -2
- package/dist/_chunks/{chat-input-Ck34Pnmp.js.map → chat-input-HtTbUUD6.js.map} +1 -1
- package/dist/_chunks/{chat-message-DU0X3Xnl.js → chat-message-fRLZ95O5.js} +2 -2
- package/dist/_chunks/{chat-message-DU0X3Xnl.js.map → chat-message-fRLZ95O5.js.map} +1 -1
- package/dist/_chunks/{checkbox--ndmyokr.js → checkbox-BjDv-r3o.js} +2 -2
- package/dist/_chunks/{checkbox--ndmyokr.js.map → checkbox-BjDv-r3o.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-B0oZHNT3.js → checkbox-group-Cw2H5qaq.js} +2 -2
- package/dist/_chunks/{checkbox-group-B0oZHNT3.js.map → checkbox-group-Cw2H5qaq.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-L6FVM9Gx.js → clinical-note-card-D2bbWksq.js} +3 -3
- package/dist/_chunks/{clinical-note-card-L6FVM9Gx.js.map → clinical-note-card-D2bbWksq.js.map} +1 -1
- package/dist/_chunks/{code-block-DiC4bg-o.js → code-block-vwEv1jEa.js} +2 -2
- package/dist/_chunks/{code-block-DiC4bg-o.js.map → code-block-vwEv1jEa.js.map} +1 -1
- package/dist/_chunks/{connection-status-BAnuwayz.js → connection-status--wYsgreh.js} +3 -3
- package/dist/_chunks/{connection-status-BAnuwayz.js.map → connection-status--wYsgreh.js.map} +1 -1
- package/dist/_chunks/{contact-card-C8rEsC4Q.js → contact-card-Czu60UvU.js} +2 -2
- package/dist/_chunks/{contact-card-C8rEsC4Q.js.map → contact-card-Czu60UvU.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-JTRbnbxy.js → contact-profile-card-B4sjoIqf.js} +4 -4
- package/dist/_chunks/{contact-profile-card-JTRbnbxy.js.map → contact-profile-card-B4sjoIqf.js.map} +1 -1
- package/dist/_chunks/control-room-rail-DUerqHeo.js +416 -0
- package/dist/_chunks/control-room-rail-DUerqHeo.js.map +1 -0
- package/dist/_chunks/{cycle-calculator-BuFi6ZJa.js → cycle-calculator-D-rwX9Pj.js} +2 -2
- package/dist/_chunks/{cycle-calculator-BuFi6ZJa.js.map → cycle-calculator-D-rwX9Pj.js.map} +1 -1
- package/dist/_chunks/{dashboard-grid-DRnhIlT-.js → dashboard-grid-B2MB7SRS.js} +627 -603
- package/dist/_chunks/dashboard-grid-B2MB7SRS.js.map +1 -0
- package/dist/_chunks/{data-table-DAPkhyXO.js → data-table-Ck2rIwWF.js} +6 -6
- package/dist/_chunks/{data-table-DAPkhyXO.js.map → data-table-Ck2rIwWF.js.map} +1 -1
- package/dist/_chunks/{data-table-tabs-2t0cdk0h.js → data-table-tabs-BfrnefV5.js} +3 -3
- package/dist/_chunks/{data-table-tabs-2t0cdk0h.js.map → data-table-tabs-BfrnefV5.js.map} +1 -1
- package/dist/_chunks/{dependent-selector-DgaAQc-c.js → dependent-selector-DBr1AhLg.js} +3 -3
- package/dist/_chunks/{dependent-selector-DgaAQc-c.js.map → dependent-selector-DBr1AhLg.js.map} +1 -1
- package/dist/_chunks/{description-list-CFEw__MT.js → description-list-Q8640NHu.js} +2 -2
- package/dist/_chunks/{description-list-CFEw__MT.js.map → description-list-Q8640NHu.js.map} +1 -1
- package/dist/_chunks/{dev-bypass-button-dTuUuzsT.js → dev-bypass-button--CPzzRSj.js} +2 -2
- package/dist/_chunks/{dev-bypass-button-dTuUuzsT.js.map → dev-bypass-button--CPzzRSj.js.map} +1 -1
- package/dist/_chunks/{document-preview-DYX669jE.js → document-preview-B1dQm292.js} +4 -4
- package/dist/_chunks/{document-preview-DYX669jE.js.map → document-preview-B1dQm292.js.map} +1 -1
- package/dist/_chunks/{document-scanner-C41n4pNq.js → document-scanner-CVPVLK7z.js} +2 -2
- package/dist/_chunks/{document-scanner-C41n4pNq.js.map → document-scanner-CVPVLK7z.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-yYvX8Ww_.js → due-date-calculator-DTfxFJCM.js} +5 -5
- package/dist/_chunks/{due-date-calculator-yYvX8Ww_.js.map → due-date-calculator-DTfxFJCM.js.map} +1 -1
- package/dist/_chunks/{editable-currency-cell-renderer-6LDFAWUE.js → editable-currency-cell-renderer-1ijmzNWh.js} +4 -4
- package/dist/_chunks/{editable-currency-cell-renderer-6LDFAWUE.js.map → editable-currency-cell-renderer-1ijmzNWh.js.map} +1 -1
- package/dist/_chunks/{editable-description-D9FsTi8e.js → editable-description-ChGNdYY8.js} +2 -2
- package/dist/_chunks/{editable-description-D9FsTi8e.js.map → editable-description-ChGNdYY8.js.map} +1 -1
- package/dist/_chunks/{editor-overlay-BYkcaLCj.js → editor-overlay-CpVO1-Kk.js} +2 -2
- package/dist/_chunks/{editor-overlay-BYkcaLCj.js.map → editor-overlay-CpVO1-Kk.js.map} +1 -1
- package/dist/_chunks/{entity-summary-oD_63dlz.js → entity-summary-BQ9_KA8S.js} +5 -5
- package/dist/_chunks/{entity-summary-oD_63dlz.js.map → entity-summary-BQ9_KA8S.js.map} +1 -1
- package/dist/_chunks/{error-summary-BhM8FEkl.js → error-summary-DrUfuKu1.js} +2 -2
- package/dist/_chunks/{error-summary-BhM8FEkl.js.map → error-summary-DrUfuKu1.js.map} +1 -1
- package/dist/_chunks/{face-scheme-C-5V3MsY.js → face-scheme-DAD-mXzM.js} +4 -4
- package/dist/_chunks/{face-scheme-C-5V3MsY.js.map → face-scheme-DAD-mXzM.js.map} +1 -1
- package/dist/_chunks/{fetal-weight-CHv2winC.js → fetal-weight-DycD_Vqr.js} +2 -2
- package/dist/_chunks/{fetal-weight-CHv2winC.js.map → fetal-weight-DycD_Vqr.js.map} +1 -1
- package/dist/_chunks/{field-array-dSkD_ePA.js → field-array-BJYc1xSu.js} +2 -2
- package/dist/_chunks/{field-array-dSkD_ePA.js.map → field-array-BJYc1xSu.js.map} +1 -1
- package/dist/_chunks/{file-manager-C8bdHsYy.js → file-manager-k85OOFr4.js} +6 -6
- package/dist/_chunks/{file-manager-C8bdHsYy.js.map → file-manager-k85OOFr4.js.map} +1 -1
- package/dist/_chunks/{fiscal-code-input-BSWwda0C.js → fiscal-code-input-DwHb2nVW.js} +2 -2
- package/dist/_chunks/{fiscal-code-input-BSWwda0C.js.map → fiscal-code-input-DwHb2nVW.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-CGWV5Q1-.js → forgot-password-form-CgZkEvZy.js} +4 -4
- package/dist/_chunks/{forgot-password-form-CGWV5Q1-.js.map → forgot-password-form-CgZkEvZy.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-DjjVPC-5.js → freemium-paywall-r-z48YaT.js} +2 -2
- package/dist/_chunks/{freemium-paywall-DjjVPC-5.js.map → freemium-paywall-r-z48YaT.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-BLccWS_4.js → gestational-age-calculator-BnCAL5a-.js} +5 -5
- package/dist/_chunks/{gestational-age-calculator-BLccWS_4.js.map → gestational-age-calculator-BnCAL5a-.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-CnrY2OVu.js → hcg-doubling-DVDiqFyp.js} +2 -2
- package/dist/_chunks/{hcg-doubling-CnrY2OVu.js.map → hcg-doubling-DVDiqFyp.js.map} +1 -1
- package/dist/_chunks/{header-BVHAt7Fi.js → header-_TppWBpK.js} +2 -2
- package/dist/_chunks/{header-BVHAt7Fi.js.map → header-_TppWBpK.js.map} +1 -1
- package/dist/_chunks/{header-settings-C200bKyp.js → header-settings-BSH9Gk0J.js} +3 -3
- package/dist/_chunks/{header-settings-C200bKyp.js.map → header-settings-BSH9Gk0J.js.map} +1 -1
- package/dist/_chunks/{heatmap-CRMr7VWC.js → heatmap-Cp8Gn9q-.js} +4 -4
- package/dist/_chunks/{heatmap-CRMr7VWC.js.map → heatmap-Cp8Gn9q-.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-C9T8-DcT.js → help-me-write-templates-DFmqnsAa.js} +4 -4
- package/dist/_chunks/{help-me-write-templates-C9T8-DcT.js.map → help-me-write-templates-DFmqnsAa.js.map} +1 -1
- package/dist/_chunks/{hover-card-DbTmj-ea.js → hover-card-CTNhQXWS.js} +2 -2
- package/dist/_chunks/{hover-card-DbTmj-ea.js.map → hover-card-CTNhQXWS.js.map} +1 -1
- package/dist/_chunks/{icon-button-dNE6ENLn.js → icon-button-C_1TgRiK.js} +2 -2
- package/dist/_chunks/{icon-button-dNE6ENLn.js.map → icon-button-C_1TgRiK.js.map} +1 -1
- package/dist/_chunks/{icon-button-group-Du8IvZek.js → icon-button-group-NIHji7_y.js} +2 -2
- package/dist/_chunks/{icon-button-group-Du8IvZek.js.map → icon-button-group-NIHji7_y.js.map} +1 -1
- package/dist/_chunks/{icon-picker-D5NdDbCL.js → icon-picker-Dq4O32K8.js} +2 -2
- package/dist/_chunks/{icon-picker-D5NdDbCL.js.map → icon-picker-Dq4O32K8.js.map} +1 -1
- package/dist/_chunks/{info-tip-DObdz3w3.js → info-tip-cYszyg6h.js} +2 -2
- package/dist/_chunks/{info-tip-DObdz3w3.js.map → info-tip-cYszyg6h.js.map} +1 -1
- package/dist/_chunks/{key-value-pair-BNYHAZwD.js → key-value-pair-BscGwZsJ.js} +2 -2
- package/dist/_chunks/{key-value-pair-BNYHAZwD.js.map → key-value-pair-BscGwZsJ.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-DI2nHVNw.js → kit-extensions-RnddkrXn.js} +6 -6
- package/dist/_chunks/{kit-extensions-DI2nHVNw.js.map → kit-extensions-RnddkrXn.js.map} +1 -1
- package/dist/_chunks/{link-gRw3NtOt.js → link-N5_YpLtm.js} +7 -6
- package/dist/_chunks/link-N5_YpLtm.js.map +1 -0
- package/dist/_chunks/{link-cell-renderer-DvhzS6lu.js → link-cell-renderer-dtEYlxi2.js} +6 -6
- package/dist/_chunks/{link-cell-renderer-DvhzS6lu.js.map → link-cell-renderer-dtEYlxi2.js.map} +1 -1
- package/dist/_chunks/{locale-picker-Bu4YE5b2.js → locale-picker-CeveTnDK.js} +3 -3
- package/dist/_chunks/{locale-picker-Bu4YE5b2.js.map → locale-picker-CeveTnDK.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-DwWWHclZ.js → login-dev-card-PnADNcI9.js} +3 -3
- package/dist/_chunks/{login-dev-card-DwWWHclZ.js.map → login-dev-card-PnADNcI9.js.map} +1 -1
- package/dist/_chunks/{marketplace-app-shell-p6hPgVwy.js → marketplace-app-shell-C-2e4eCD.js} +139 -136
- package/dist/_chunks/marketplace-app-shell-C-2e4eCD.js.map +1 -0
- package/dist/_chunks/{message-card-CvZlo3Fn.js → message-card-A3mJNqfy.js} +2 -2
- package/dist/_chunks/{message-card-CvZlo3Fn.js.map → message-card-A3mJNqfy.js.map} +1 -1
- package/dist/_chunks/{message-tray-DrS_LOed.js → message-tray-Ft6vSr71.js} +3 -3
- package/dist/_chunks/{message-tray-DrS_LOed.js.map → message-tray-Ft6vSr71.js.map} +1 -1
- package/dist/_chunks/{multi-select-BT23EnSA.js → multi-select-CMaAQQgb.js} +2 -2
- package/dist/_chunks/{multi-select-BT23EnSA.js.map → multi-select-CMaAQQgb.js.map} +1 -1
- package/dist/_chunks/{nav-grid-Byx8PxuB.js → nav-grid-Oc4aCPrg.js} +2 -2
- package/dist/_chunks/{nav-grid-Byx8PxuB.js.map → nav-grid-Oc4aCPrg.js.map} +1 -1
- package/dist/_chunks/{note-attachment-Bt2cddsZ.js → note-attachment-D8V7PUiR.js} +3 -3
- package/dist/_chunks/{note-attachment-Bt2cddsZ.js.map → note-attachment-D8V7PUiR.js.map} +1 -1
- package/dist/_chunks/{note-timeline-CX9nAgAR.js → note-timeline-CwxPQ2Ak.js} +2 -2
- package/dist/_chunks/{note-timeline-CX9nAgAR.js.map → note-timeline-CwxPQ2Ak.js.map} +1 -1
- package/dist/_chunks/{notes-panel-6TElt7jQ.js → notes-panel-BRLc2ozF.js} +7 -7
- package/dist/_chunks/{notes-panel-6TElt7jQ.js.map → notes-panel-BRLc2ozF.js.map} +1 -1
- package/dist/_chunks/{notification-card-Qrs52HIA.js → notification-card-c2oX8j3F.js} +2 -2
- package/dist/_chunks/{notification-card-Qrs52HIA.js.map → notification-card-c2oX8j3F.js.map} +1 -1
- package/dist/_chunks/{notification-tray-DRm1z97G.js → notification-tray-BR3seWA7.js} +3 -3
- package/dist/_chunks/{notification-tray-DRm1z97G.js.map → notification-tray-BR3seWA7.js.map} +1 -1
- package/dist/_chunks/{operator-hero-C_Khr5IU.js → operator-hero-3_RG4Dkj.js} +2 -2
- package/dist/_chunks/{operator-hero-C_Khr5IU.js.map → operator-hero-3_RG4Dkj.js.map} +1 -1
- package/dist/_chunks/{optical-prescription-DLIAhJ6f.js → optical-prescription-CxfMsbxi.js} +2 -2
- package/dist/_chunks/{optical-prescription-DLIAhJ6f.js.map → optical-prescription-CxfMsbxi.js.map} +1 -1
- package/dist/_chunks/{panel-header-D_mTdhUp.js → panel-header-BJkaUwnl.js} +2 -2
- package/dist/_chunks/{panel-header-D_mTdhUp.js.map → panel-header-BJkaUwnl.js.map} +1 -1
- package/dist/_chunks/{panel-subview-CjZgdWwO.js → panel-subview-yP4qIbKS.js} +3 -3
- package/dist/_chunks/{panel-subview-CjZgdWwO.js.map → panel-subview-yP4qIbKS.js.map} +1 -1
- package/dist/_chunks/{patient-details-BjqKBY2x.js → patient-details-BY8Rwwpi.js} +4 -4
- package/dist/_chunks/{patient-details-BjqKBY2x.js.map → patient-details-BY8Rwwpi.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-BiI0BPPK.js → patient-field-row-C8ymfffP.js} +8 -8
- package/dist/_chunks/{patient-field-row-BiI0BPPK.js.map → patient-field-row-C8ymfffP.js.map} +1 -1
- package/dist/_chunks/{patient-search-B5R7FyFO.js → patient-search-DOnDUVsl.js} +2 -2
- package/dist/_chunks/{patient-search-B5R7FyFO.js.map → patient-search-DOnDUVsl.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-BOgnWKRV.js → patient-summary-card-cmqjIXMk.js} +9 -9
- package/dist/_chunks/{patient-summary-card-BOgnWKRV.js.map → patient-summary-card-cmqjIXMk.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-39d5ykBi.js → payment-automation-upsell-C8MEu0t6.js} +4 -4
- package/dist/_chunks/{payment-automation-upsell-39d5ykBi.js.map → payment-automation-upsell-C8MEu0t6.js.map} +1 -1
- package/dist/_chunks/{payment-form-v6zZuV1_.js → payment-form-i90DUuNK.js} +2 -2
- package/dist/_chunks/{payment-form-v6zZuV1_.js.map → payment-form-i90DUuNK.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-E3G4aVt6.js → payment-request-card-0DjQgVgX.js} +5 -5
- package/dist/_chunks/{payment-request-card-E3G4aVt6.js.map → payment-request-card-0DjQgVgX.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-CNQxa4tv.js → pdf-viewer-DJ9VN7cu.js} +2 -2
- package/dist/_chunks/{pdf-viewer-CNQxa4tv.js.map → pdf-viewer-DJ9VN7cu.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-BZ1d6S36.js → periodontal-chart-DCcOEYC6.js} +2 -2
- package/dist/_chunks/{periodontal-chart-BZ1d6S36.js.map → periodontal-chart-DCcOEYC6.js.map} +1 -1
- package/dist/_chunks/{periodontal-chart-card-BE5hiQnn.js → periodontal-chart-card-CxdjXFb3.js} +3 -3
- package/dist/_chunks/{periodontal-chart-card-BE5hiQnn.js.map → periodontal-chart-card-CxdjXFb3.js.map} +1 -1
- package/dist/_chunks/{periodontal-diagnosis-6wybid_W.js → periodontal-diagnosis-B9YmmVmM.js} +5 -5
- package/dist/_chunks/{periodontal-diagnosis-6wybid_W.js.map → periodontal-diagnosis-B9YmmVmM.js.map} +1 -1
- package/dist/_chunks/{periodontal-risk-chart-CgLwBj5c.js → periodontal-risk-chart-CPy7CNFe.js} +2 -2
- package/dist/_chunks/{periodontal-risk-chart-CgLwBj5c.js.map → periodontal-risk-chart-CPy7CNFe.js.map} +1 -1
- package/dist/_chunks/{permission-matrix-DuTkUHxe.js → permission-matrix-BoQjENGV.js} +3 -3
- package/dist/_chunks/{permission-matrix-DuTkUHxe.js.map → permission-matrix-BoQjENGV.js.map} +1 -1
- package/dist/_chunks/{popover-DQr_tljb.js → popover-4ZVtH_At.js} +2 -2
- package/dist/_chunks/{popover-DQr_tljb.js.map → popover-4ZVtH_At.js.map} +1 -1
- package/dist/_chunks/{practice-profile-hero-DPbvYfCs.js → practice-profile-hero-Dfc0F60y.js} +2 -2
- package/dist/_chunks/{practice-profile-hero-DPbvYfCs.js.map → practice-profile-hero-Dfc0F60y.js.map} +1 -1
- package/dist/_chunks/{practice-results-Cktx7KaC.js → practice-results-B8L9ZmtR.js} +4 -4
- package/dist/_chunks/{practice-results-Cktx7KaC.js.map → practice-results-B8L9ZmtR.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-26fcvhAx.js → pregnancy-dating-D2XTELiw.js} +5 -5
- package/dist/_chunks/{pregnancy-dating-26fcvhAx.js.map → pregnancy-dating-D2XTELiw.js.map} +1 -1
- package/dist/_chunks/{pregnancy-weight-gain-D8q1IUCT.js → pregnancy-weight-gain-BVvyL-j1.js} +4 -4
- package/dist/_chunks/{pregnancy-weight-gain-D8q1IUCT.js.map → pregnancy-weight-gain-BVvyL-j1.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-BpVgSgMb.js → privacy-lock-CEYJ8ehu.js} +2 -2
- package/dist/_chunks/{privacy-lock-BpVgSgMb.js.map → privacy-lock-CEYJ8ehu.js.map} +1 -1
- package/dist/_chunks/{privacy-mask-BfMC57ST.js → privacy-mask-Ch7743uk.js} +2 -2
- package/dist/_chunks/{privacy-mask-BfMC57ST.js.map → privacy-mask-Ch7743uk.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-CH4B49ij.js → product-hub-panel-C_ZosrBt.js} +3 -3
- package/dist/_chunks/{product-hub-panel-CH4B49ij.js.map → product-hub-panel-C_ZosrBt.js.map} +1 -1
- package/dist/_chunks/{public-footer-ZWTEG1Rq.js → public-footer-CXOrdAaS.js} +2 -2
- package/dist/_chunks/{public-footer-ZWTEG1Rq.js.map → public-footer-CXOrdAaS.js.map} +1 -1
- package/dist/_chunks/{public-header.agent-BHTDKMsw.js → public-header.agent-DXRA7ebK.js} +3 -3
- package/dist/_chunks/{public-header.agent-BHTDKMsw.js.map → public-header.agent-DXRA7ebK.js.map} +1 -1
- package/dist/_chunks/{radio-BBbMdbE_.js → radio-BZQs6_36.js} +2 -2
- package/dist/_chunks/{radio-BBbMdbE_.js.map → radio-BZQs6_36.js.map} +1 -1
- package/dist/_chunks/{radio-group-DicxWJXP.js → radio-group-ChIKyeSJ.js} +3 -3
- package/dist/_chunks/{radio-group-DicxWJXP.js.map → radio-group-ChIKyeSJ.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-DR0gOeSc.js → radiograph-panel.agent-DDNUo4Ul.js} +4 -4
- package/dist/_chunks/{radiograph-panel.agent-DR0gOeSc.js.map → radiograph-panel.agent-DDNUo4Ul.js.map} +1 -1
- package/dist/_chunks/{registration-form-B8IeB9kd.js → registration-form-BQyT_kBX.js} +5 -5
- package/dist/_chunks/{registration-form-B8IeB9kd.js.map → registration-form-BQyT_kBX.js.map} +1 -1
- package/dist/_chunks/{resource-chip-DQeCJzJf.js → resource-chip-DB5jDwUO.js} +2 -2
- package/dist/_chunks/{resource-chip-DQeCJzJf.js.map → resource-chip-DB5jDwUO.js.map} +1 -1
- package/dist/_chunks/{reviews-panel-CHzDqerd.js → reviews-panel-AvsVgtJu.js} +3 -3
- package/dist/_chunks/{reviews-panel-CHzDqerd.js.map → reviews-panel-AvsVgtJu.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-BRuTo2hm.js → rich-text-editor-M2gT_E7f.js} +9 -9
- package/dist/_chunks/{rich-text-editor-BRuTo2hm.js.map → rich-text-editor-M2gT_E7f.js.map} +1 -1
- package/dist/_chunks/{sheet-CqvPYNLn.js → sheet-D2PfJl8n.js} +2 -2
- package/dist/_chunks/{sheet-CqvPYNLn.js.map → sheet-D2PfJl8n.js.map} +1 -1
- package/dist/_chunks/{sidebar-C9Zof0z1.js → sidebar-BS24EnYd.js} +2 -2
- package/dist/_chunks/{sidebar-C9Zof0z1.js.map → sidebar-BS24EnYd.js.map} +1 -1
- package/dist/_chunks/{sign-document-D4iHS_Ug.js → sign-document-CY7xTXbm.js} +2 -2
- package/dist/_chunks/{sign-document-D4iHS_Ug.js.map → sign-document-CY7xTXbm.js.map} +1 -1
- package/dist/_chunks/{signature-request-BH7yKI01.js → signature-request-BMCHy2ZO.js} +5 -5
- package/dist/_chunks/{signature-request-BH7yKI01.js.map → signature-request-BMCHy2ZO.js.map} +1 -1
- package/dist/_chunks/{signature-status-chip-DP3qRijv.js → signature-status-chip-pIoQjvH8.js} +3 -3
- package/dist/_chunks/{signature-status-chip-DP3qRijv.js.map → signature-status-chip-pIoQjvH8.js.map} +1 -1
- package/dist/_chunks/{signed-out-frame-eaOWHpDr.js → signed-out-frame-Rg_GVDnl.js} +4 -4
- package/dist/_chunks/{signed-out-frame-eaOWHpDr.js.map → signed-out-frame-Rg_GVDnl.js.map} +1 -1
- package/dist/_chunks/{slot-grid-DELa2Nwz.js → slot-grid-dj5f6R2w.js} +2 -2
- package/dist/_chunks/{slot-grid-DELa2Nwz.js.map → slot-grid-dj5f6R2w.js.map} +1 -1
- package/dist/_chunks/{stat-DmjGfXND.js → stat-D2PNJujA.js} +2 -2
- package/dist/_chunks/stat-D2PNJujA.js.map +1 -0
- package/dist/_chunks/{streaming-text-bPDoG7Y3.js → streaming-text-zFViGexf.js} +2 -2
- package/dist/_chunks/{streaming-text-bPDoG7Y3.js.map → streaming-text-zFViGexf.js.map} +1 -1
- package/dist/_chunks/{tab-bar-5GppbMGc.js → tab-bar-BEODTG6k.js} +2 -2
- package/dist/_chunks/{tab-bar-5GppbMGc.js.map → tab-bar-BEODTG6k.js.map} +1 -1
- package/dist/_chunks/{tag-CS5cXpfx.js → tag-DOZGz0fT.js} +2 -2
- package/dist/_chunks/{tag-CS5cXpfx.js.map → tag-DOZGz0fT.js.map} +1 -1
- package/dist/_chunks/{task-card-zaTU1rQa.js → task-card-BS7Uqevr.js} +2 -2
- package/dist/_chunks/{task-card-zaTU1rQa.js.map → task-card-BS7Uqevr.js.map} +1 -1
- package/dist/_chunks/{task-editor-CgGcg-2c.js → task-editor-DoiOzNiC.js} +9 -9
- package/dist/_chunks/{task-editor-CgGcg-2c.js.map → task-editor-DoiOzNiC.js.map} +1 -1
- package/dist/_chunks/{task-tray-DGMwogWu.js → task-tray-eQU4KJcA.js} +3 -3
- package/dist/_chunks/{task-tray-DGMwogWu.js.map → task-tray-eQU4KJcA.js.map} +1 -1
- package/dist/_chunks/{tasks-panel-xGtiEdcj.js → tasks-panel-8nLwBw6P.js} +7 -7
- package/dist/_chunks/{tasks-panel-xGtiEdcj.js.map → tasks-panel-8nLwBw6P.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-_cfYEK73.js → theme-toggle-Ctb77x6O.js} +3 -3
- package/dist/_chunks/{theme-toggle-_cfYEK73.js.map → theme-toggle-Ctb77x6O.js.map} +1 -1
- package/dist/_chunks/{toast-CNUydTgT.js → toast-6T519aLz.js} +2 -2
- package/dist/_chunks/{toast-CNUydTgT.js.map → toast-6T519aLz.js.map} +1 -1
- package/dist/_chunks/tool-rail-C-03rH2I.js +973 -0
- package/dist/_chunks/tool-rail-C-03rH2I.js.map +1 -0
- package/dist/_chunks/tooltip-uEBdD1-5.js +178 -0
- package/dist/_chunks/tooltip-uEBdD1-5.js.map +1 -0
- package/dist/_chunks/{tooth-scheme-05DsRMA5.js → tooth-scheme-Dkh4JwzT.js} +2 -2
- package/dist/_chunks/{tooth-scheme-05DsRMA5.js.map → tooth-scheme-Dkh4JwzT.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-CjsiDB1K.js → transcript-panel-XudW5l6l.js} +2 -2
- package/dist/_chunks/{transcript-panel-CjsiDB1K.js.map → transcript-panel-XudW5l6l.js.map} +1 -1
- package/dist/_chunks/{treatment-receipt-BSVOfStA.js → treatment-receipt-BdJ36vNP.js} +3 -3
- package/dist/_chunks/{treatment-receipt-BSVOfStA.js.map → treatment-receipt-BdJ36vNP.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-BGVthJFx.js → use-appointment-details-read-D6Gb_OuN.js} +16 -16
- package/dist/_chunks/{use-appointment-details-read-BGVthJFx.js.map → use-appointment-details-read-D6Gb_OuN.js.map} +1 -1
- package/dist/_chunks/use-edge-resize-CBtem0j2.js +171 -0
- package/dist/_chunks/use-edge-resize-CBtem0j2.js.map +1 -0
- package/dist/_chunks/{voice-control-panel-DyKEaFxt.js → voice-control-panel-C0BfY23Y.js} +4 -4
- package/dist/_chunks/{voice-control-panel-DyKEaFxt.js.map → voice-control-panel-C0BfY23Y.js.map} +1 -1
- package/dist/_chunks/{warning-stack-CAL9xVo1.js → warning-stack-HYWAytZV.js} +3 -3
- package/dist/_chunks/{warning-stack-CAL9xVo1.js.map → warning-stack-HYWAytZV.js.map} +1 -1
- package/dist/_chunks/{widget-picker-CkhoG4Rj.js → widget-picker-DlNPGcnu.js} +2 -2
- package/dist/_chunks/{widget-picker-CkhoG4Rj.js.map → widget-picker-DlNPGcnu.js.map} +1 -1
- package/dist/_chunks/{workflow-map-BUYG1oXU.js → workflow-map-C2B2qIr1.js} +5 -5
- package/dist/_chunks/{workflow-map-BUYG1oXU.js.map → workflow-map-C2B2qIr1.js.map} +1 -1
- package/dist/agent-catalog.json +13 -1
- package/dist/agent-i18n/en.json +10 -0
- package/dist/components/_shared/use-apex-legend-scroll.d.ts +11 -0
- package/dist/components/_shared/use-apex-legend-scroll.d.ts.map +1 -0
- package/dist/components/_shared/use-apex-x-label-spacing.d.ts +11 -0
- package/dist/components/_shared/use-apex-x-label-spacing.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-credits-notice/index.js +1 -1
- package/dist/components/ai-permission-notice/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/app-frame/app-frame-context.d.ts +19 -0
- package/dist/components/app-frame/app-frame-context.d.ts.map +1 -0
- package/dist/components/app-frame/app-frame.d.ts +3 -0
- package/dist/components/app-frame/app-frame.d.ts.map +1 -1
- package/dist/components/app-frame/index.d.ts +2 -0
- package/dist/components/app-frame/index.d.ts.map +1 -1
- package/dist/components/app-frame/index.js +4 -2
- package/dist/components/app-frame/index.js.map +1 -1
- package/dist/components/appointment-card/index.js +2 -2
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-peek/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/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/index.js +1 -1
- package/dist/components/calendar/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/chart.d.ts +3 -1
- package/dist/components/chart/chart.d.ts.map +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/index.js +1 -1
- package/dist/components/connection-status/index.js +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/contact-profile-card/index.js +1 -1
- package/dist/components/control-room-rail/control-room-context.d.ts +10 -4
- package/dist/components/control-room-rail/control-room-context.d.ts.map +1 -1
- package/dist/components/control-room-rail/control-room-rail.agent.d.ts.map +1 -1
- package/dist/components/control-room-rail/control-room-rail.d.ts.map +1 -1
- package/dist/components/control-room-rail/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +4 -4
- package/dist/components/data-table-tabs/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/dev-bypass-button/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/editable-description/index.js +1 -1
- package/dist/components/editor-overlay/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/error-summary/index.js +1 -1
- package/dist/components/face-scheme/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/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/heatmap/index.js +1 -1
- package/dist/components/hover-card/index.js +1 -1
- 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/info-tip/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/link/link.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/nav-grid/index.js +1 -1
- package/dist/components/note-timeline/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/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-subview/index.js +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-search/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/patient-table/index.js +1 -1
- package/dist/components/payment-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-footer/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/resource-chip/index.js +1 -1
- package/dist/components/reviews-panel/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sidebar/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/stat/index.js +1 -1
- package/dist/components/stat/stat.d.ts +7 -2
- package/dist/components/stat/stat.d.ts.map +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-card/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/tasks-panel/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/tool-rail/tool-rail.agent.d.ts.map +1 -1
- package/dist/components/tool-rail/tool-rail.d.ts +7 -0
- package/dist/components/tool-rail/tool-rail.d.ts.map +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/transcript-panel/index.js +1 -1
- package/dist/components/treatment-receipt/index.js +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/widget-picker/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/use-edge-resize.d.ts +5 -1
- package/dist/hooks/use-edge-resize.d.ts.map +1 -1
- package/dist/index.js +781 -779
- package/dist/index.js.map +1 -1
- package/dist/patterns/alia-assistant/index.js +1 -1
- package/dist/patterns/anamnesis/index.js +1 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/help-me-write-templates/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/index.js +1 -1
- package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +3 -0
- package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
- package/dist/patterns/payment-automation-upsell/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/patterns/signed-out-frame/index.js +1 -1
- package/dist/tokens.css +10 -1
- package/package.json +1 -1
- package/dist/_chunks/app-frame-CqmDh2v5.js +0 -134
- package/dist/_chunks/app-frame-CqmDh2v5.js.map +0 -1
- package/dist/_chunks/chart-D7PbNO_M.js +0 -920
- package/dist/_chunks/chart-D7PbNO_M.js.map +0 -1
- package/dist/_chunks/control-room-rail-BbBEIdws.js +0 -379
- package/dist/_chunks/control-room-rail-BbBEIdws.js.map +0 -1
- package/dist/_chunks/dashboard-grid-DRnhIlT-.js.map +0 -1
- package/dist/_chunks/link-gRw3NtOt.js.map +0 -1
- package/dist/_chunks/marketplace-app-shell-p6hPgVwy.js.map +0 -1
- package/dist/_chunks/stat-DmjGfXND.js.map +0 -1
- package/dist/_chunks/tool-rail-Blgibz0a.js +0 -816
- package/dist/_chunks/tool-rail-Blgibz0a.js.map +0 -1
- package/dist/_chunks/tooltip-Cp-PLePW.js +0 -119
- package/dist/_chunks/tooltip-Cp-PLePW.js.map +0 -1
- package/dist/_chunks/use-edge-resize-DHbyQwu8.js +0 -149
- package/dist/_chunks/use-edge-resize-DHbyQwu8.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"description-list-CFEw__MT.js","sources":["../../src/components/description-list/description-list.tsx"],"sourcesContent":["import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type CSSProperties,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Copy, Check } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\n/* ------------------------------------------------------------------ */\n/* labelWidth → label / value track resolver */\n/* */\n/* The `inline` / `responsive` layouts render a two- or three-column */\n/* grid (icon? · label · value · copy?). The label column's width is */\n/* parameterised so consumers can pick the right behaviour for the */\n/* surrounding container: */\n/* */\n/* - `auto` (default): label sizes to its intrinsic content; the */\n/* value column takes the remainder. Long labels wrap word-by-word */\n/* in narrow contexts instead of being squeezed into a 1fr column */\n/* that can collapse below the longest word. */\n/* - `fixed`: legacy ⅓ / ⅔ ratio (label `minmax(0,1fr)`, value */\n/* `minmax(0,2fr)`). Use for wide forms where consistent alignment */\n/* across rows is more important than fitting the longest label. */\n/* - any CSS length / track size (`'8rem'`, `'min-content'`, …): */\n/* forces the label column to that width. */\n/* */\n/* The resolved values are surfaced as `--description-list-label-track` */\n/* and `--description-list-value-track` on the root `<dl>` so each Row */\n/* can compose them with the icon / copy auto columns it needs. */\n/* ------------------------------------------------------------------ */\n\ntype LabelWidthPreset = 'auto' | 'fixed';\nexport type DescriptionListLabelWidth = LabelWidthPreset | (string & {});\n\nfunction resolveLabelTrack(labelWidth: DescriptionListLabelWidth): string {\n // `auto` uses `fit-content(50%)` rather than the bare `auto` keyword.\n // CSS `auto` resolves to `minmax(min-content, max-content)`, which can't\n // shrink the term column below the dt's max-content in a narrow container\n // (the failure mode booking-website hit with long Italian medical labels\n // in a 320 px Carousel slide). `fit-content(50%)` clamps to\n // `max(min-content, min(50%-of-container, max-content))`:\n // - in narrow containers it caps at 50 % of the row width, leaving the\n // other half for the detail column; the dt wraps at word boundaries\n // via `overflow-wrap: break-word`.\n // - in wide containers it expands to the dt's max-content, so short\n // labels don't stretch unnecessarily.\n if (labelWidth === 'auto') return 'fit-content(50%)';\n if (labelWidth === 'fixed') return 'minmax(0,1fr)';\n return labelWidth;\n}\n\nfunction resolveValueTrack(labelWidth: DescriptionListLabelWidth): string {\n return labelWidth === 'fixed' ? 'minmax(0,2fr)' : 'minmax(0,1fr)';\n}\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface DescriptionListContextShape {\n layout: 'inline' | 'stacked' | 'responsive';\n density: 'default' | 'compact';\n divider: 'none' | 'between' | 'bordered';\n /**\n * True when at least one direct child Row was rendered with a\n * non-null `icon` prop. Every Row in the list then reserves a\n * leading icon column (rendering a `size-4` empty placeholder\n * when this row has no icon) so the grid's `auto` column resolves\n * to the same width across all rows and sibling Rows align.\n */\n hasIcons: boolean;\n}\n\nconst DescriptionListContext = createContext<DescriptionListContextShape>({\n layout: 'inline',\n density: 'default',\n divider: 'none',\n hasIcons: false,\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — root <dl> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListVariants = cva('ds:flex ds:flex-col', {\n variants: {\n layout: {\n inline: '',\n stacked: '',\n responsive: '',\n },\n density: {\n default: 'ds:gap-[var(--spacing-md)]',\n compact: 'ds:gap-[var(--spacing-sm)]',\n },\n divider: {\n none: '',\n between: '',\n bordered: '',\n },\n },\n defaultVariants: {\n layout: 'inline',\n density: 'default',\n divider: 'none',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — row <div> */\n/* */\n/* The grid template is selected per (layout × hasIcons × copyable). */\n/* Inline / responsive (above sm) layouts use a 2-, 3-, or 4-column */\n/* grid. Stacked layouts use flex-col when there are no icons, and a */\n/* 2- or 3-column grid when icons are present (so the icon can sit at */\n/* the leading edge of the dt/dd stack without breaking the dl/dt/dd */\n/* parent-child relationship the HTML5 spec requires). */\n/* */\n/* The icon column is `auto` — it resolves to the icon wrapper's */\n/* intrinsic box (`size-4` = 1rem), which matches the empty placeholder */\n/* rendered on rows without an icon. That keeps sibling rows aligned */\n/* even when only some rows carry an icon. */\n/* */\n/* The copy IconButton is pinned to the trailing column via */\n/* `[&>button]:col-start-N` so it does not wrap to an unrelated cell */\n/* when the row also contains multiple `<dd>` siblings. */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListRowVariants = cva('', {\n variants: {\n layout: {\n inline: '',\n stacked: '',\n responsive: '',\n },\n divider: {\n none: '',\n between:\n 'ds:[&:not(:last-child)]:border-b ds:[&:not(:last-child)]:border-[color:var(--border)] ds:[&:not(:last-child)]:pb-[var(--spacing-md)]',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-sm)] ds:p-[var(--spacing-sm)]',\n },\n copyable: {\n true: '',\n false: '',\n },\n hasIcons: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n /* ----- inline / no icons ----- */\n {\n layout: 'inline',\n hasIcons: false,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline',\n },\n {\n layout: 'inline',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>button]:col-start-3 ds:[&>button]:self-start',\n },\n /* ----- inline / with icons -----\n `items-baseline` aligns Term (`type-label` 14 px / 1.4 lh) and\n Detail (`type-body` 16 px / 1.6 lh) by their text baselines so\n their cap-heights line up — without it Detail's larger\n line-box pushed plain-text values visibly below the label.\n Per-cell overrides keep the icon at row-top (with the\n `mt-[5px]` cap-height nudge intact) and the copy button at\n row-start too. Chip cells (Badges / Tags inside the Detail\n column) baseline-align via their internal text baseline; the\n shift is sub-pixel and the chip rows remain visually anchored\n with the row's label. */\n {\n layout: 'inline',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start',\n },\n {\n layout: 'inline',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:[&>button]:col-start-4 ds:[&>button]:self-start',\n },\n /* ----- stacked / no icons / no copyable ----- */\n {\n layout: 'stacked',\n hasIcons: false,\n copyable: false,\n className: 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n },\n /* ----- stacked / no icons / copyable — 2-col grid so the copy\n button sits in a trailing column instead of below dd ----- */\n {\n layout: 'stacked',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[minmax(0,1fr)_auto] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>button]:col-start-2 ds:[&>button]:row-span-full',\n },\n /* ----- stacked / with icons — explicit grid so dt/dd remain\n direct children of the row div while the icon sits at the\n leading edge of the column-2 stack. `labelWidth` does not\n apply here (single content column). ----- */\n {\n layout: 'stacked',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_minmax(0,1fr)] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>dt]:col-start-2 ds:[&>dd]:col-start-2 ds:[&>[data-dl-icon-slot]]:row-span-full',\n },\n {\n layout: 'stacked',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_minmax(0,1fr)_auto] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>dt]:col-start-2 ds:[&>dd]:col-start-2 ds:[&>[data-dl-icon-slot]]:row-span-full ds:[&>button]:col-start-3 ds:[&>button]:row-span-full',\n },\n /* ----- responsive / no icons (inline above sm, stacked below) ----- */\n {\n layout: 'responsive',\n hasIcons: false,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:max-sm:flex ds:max-sm:flex-col ds:max-sm:gap-[var(--spacing-xs)]',\n },\n {\n layout: 'responsive',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>button]:col-start-3 ds:[&>button]:self-start ds:max-sm:flex ds:max-sm:flex-col ds:max-sm:gap-[var(--spacing-xs)]',\n },\n /* ----- responsive / with icons ----- */\n {\n layout: 'responsive',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:max-sm:grid-cols-[auto_minmax(0,1fr)] ds:max-sm:gap-x-[var(--spacing-sm)] ds:max-sm:gap-y-[var(--spacing-xs)] ds:max-sm:[&>dt]:col-start-2 ds:max-sm:[&>dd]:col-start-2 ds:max-sm:[&>[data-dl-icon-slot]]:row-span-full',\n },\n {\n layout: 'responsive',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:[&>button]:col-start-4 ds:[&>button]:self-start ds:max-sm:grid-cols-[auto_minmax(0,1fr)_auto] ds:max-sm:gap-x-[var(--spacing-sm)] ds:max-sm:gap-y-[var(--spacing-xs)] ds:max-sm:[&>dt]:col-start-2 ds:max-sm:[&>dd]:col-start-2 ds:max-sm:[&>[data-dl-icon-slot]]:row-span-full ds:max-sm:[&>button]:col-start-3 ds:max-sm:[&>button]:row-span-full',\n },\n ],\n defaultVariants: {\n layout: 'inline',\n divider: 'none',\n copyable: false,\n hasIcons: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {\n layout?: 'inline' | 'stacked' | 'responsive';\n density?: 'default' | 'compact';\n divider?: 'none' | 'between' | 'bordered';\n /**\n * Width of the term column in `inline` and `responsive` layouts.\n *\n * - `'auto'` (default): the term column sizes to its intrinsic content\n * per row, so labels wrap at word boundaries in narrow contexts (carousel\n * cards, sidebar panels) and the detail column takes the remaining inline\n * space. **Sibling rows do NOT share column widths under this preset** —\n * each row's columns size to its own content. Use this when intrinsic\n * per-row sizing matters more than vertical alignment of values.\n * - `'fixed'`: ⅓ / ⅔ split — term column is `minmax(0, 1fr)` and detail\n * column is `minmax(0, 2fr)`. Sibling rows share the same proportional\n * widths, so values align vertically across rows. Use this when shared\n * value-column alignment matters (the typical use case for a list of\n * contact rows, profile fields, or any tabular-feeling metadata).\n * - any CSS track size (`'8rem'`, `'min-content'`, `'40%'`, …): pins the\n * term column to that width and lets the detail column take the rest.\n *\n * Ignored when `layout=\"stacked\"` (single content column).\n */\n labelWidth?: DescriptionListLabelWidth;\n}\n\nexport interface DescriptionListRowProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, shows a copy-to-clipboard button using KeyValuePair's established mechanism */\n copyable?: boolean;\n /** Text written to the clipboard when copyable=true */\n copyText?: string;\n /** Label used in the copy button's aria-label: \"Copy {copyLabel}\". Falls back to copyText. */\n copyLabel?: string;\n /**\n * Optional decorative icon rendered at the leading edge of the row.\n * Pass a `lucide-react` icon (or any single React element) for visual\n * consistency. The wrapper applies `aria-hidden=\"true\"` and paints\n * the icon with `var(--description-list-icon-color)` (defaults to\n * `--muted-foreground`); consumers can recolour the slot via that\n * token without forking the component.\n *\n * When any row in the list passes an `icon`, every row reserves a\n * leading icon column so values align across siblings — including\n * rows that did not pass an icon.\n *\n * Type is `ReactElement` (not the broader `ReactNode`) so the intent\n * is clear at the call site: this slot is for a single SVG/icon,\n * not arbitrary fragments, strings, or numbers.\n */\n icon?: React.ReactElement | null;\n}\n\nexport type DescriptionListTermProps = React.HTMLAttributes<HTMLElement>;\n\nexport interface DescriptionListDetailProps extends React.HTMLAttributes<HTMLElement> {\n /** Right-aligns numeric values via text-end */\n numeric?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root — <dl> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRoot = forwardRef<HTMLDListElement, DescriptionListProps>(\n (\n {\n layout = 'inline',\n density = 'default',\n divider = 'none',\n labelWidth = 'auto',\n className,\n children,\n style,\n ...props\n },\n ref,\n ) => {\n // Detect whether any direct child Row carries a non-null `icon` prop.\n // `Children.toArray` flattens nested arrays from `.map()` calls; fragments\n // (`<>…</>`) and deeper wrappers (HOCs, custom containers) are NOT\n // unwrapped. Consumers who hit that edge case can force the icon column\n // by passing `icon={<></>}` on at least one direct-child Row.\n const hasIcons = useMemo(\n () =>\n Children.toArray(children).some(\n (child) =>\n isValidElement(child) &&\n (child.props as { icon?: unknown }).icon != null,\n ),\n [children],\n );\n\n // Inline style — permitted per 23-constraints §Runtime-computed dimensions\n // (CSS custom property setter; the grid-template-columns rule that\n // consumes these variables lives in CVA on each Row).\n const gridStyle = useMemo<CSSProperties>(\n () =>\n ({\n ...style,\n '--description-list-label-track': resolveLabelTrack(labelWidth),\n '--description-list-value-track': resolveValueTrack(labelWidth),\n }) as CSSProperties,\n [style, labelWidth],\n );\n\n return (\n <DescriptionListContext.Provider\n value={{ layout, density, divider, hasIcons }}\n >\n <dl\n ref={ref}\n className={descriptionListVariants({\n layout,\n density,\n divider,\n className,\n })}\n data-component=\"description-list\"\n data-label-width={\n labelWidth === 'auto' || labelWidth === 'fixed'\n ? labelWidth\n : 'custom'\n }\n // eslint-disable-next-line react/forbid-dom-props -- 23-constraints §Runtime-computed dimensions: labelWidth resolves to a CSS track size set on `--description-list-label-track`. The grid-template-columns rule that consumes the variable lives in CVA on each Row.\n style={gridStyle}\n {...props}\n >\n {children}\n </dl>\n </DescriptionListContext.Provider>\n );\n },\n);\nDescriptionListRoot.displayName = 'DescriptionList';\n\n/* ------------------------------------------------------------------ */\n/* Row — <div> that groups a <dt> with its <dd>(s) */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRow = forwardRef<HTMLDivElement, DescriptionListRowProps>(\n (\n {\n copyable = false,\n copyText,\n copyLabel,\n icon,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { layout, divider, hasIcons } = useContext(DescriptionListContext);\n const { t } = useTranslation('ui');\n const [copied, setCopied] = useState(false);\n const [announcement, setAnnouncement] = useState('');\n\n const handleCopy = useCallback(async () => {\n if (!copyText) {\n if (import.meta.env.DEV) {\n console.warn(\n 'DescriptionList.Row: copyable=true but no copyText provided. Copy is a no-op.',\n );\n }\n return;\n }\n try {\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setAnnouncement(t('keyValuePair.copied'));\n setTimeout(() => {\n setCopied(false);\n setAnnouncement('');\n }, 2000);\n } catch {\n setAnnouncement(t('keyValuePair.notAvailable'));\n setTimeout(() => setAnnouncement(''), 3000);\n }\n }, [copyText, t]);\n\n const ariaLabel = t('keyValuePair.copy', {\n label: copyLabel ?? copyText ?? '',\n });\n\n return (\n <div\n ref={ref}\n className={descriptionListRowVariants({\n layout,\n divider,\n copyable,\n hasIcons,\n className,\n })}\n {...props}\n >\n {/* Icon slot — rendered on every row when the list has any icons\n so column-1 width is consistent across siblings. The wrapper\n is `size-4` regardless of whether it contains an SVG, so the\n grid's `auto` column resolves to the same 1rem width for\n both icon-bearing and icon-less rows. `aria-hidden` keeps SR\n announcements as \"term: definition\" without an interstitial\n icon role. */}\n {hasIcons && (\n <span\n data-dl-icon-slot\n aria-hidden=\"true\"\n // Cap-height alignment for the icon vs the label's first\n // line. The previous `mt-0.5` (2 px) left the icon\n // visibly above the label — `type-label` at 14 px /\n // 1.4 lh has its cap-height roughly 5 px below the row\n // top, so a 16 px icon centred at row+10 was painting\n // above the label's letter tops. `mt-[5px]` lands the\n // icon's visible glyph (after lucide's internal ~2 px\n // padding) right on the label cap-height.\n // `align-self` defers to the parent grid's\n // `items-start` so the icon stays anchored to the row's\n // first line — multi-line values (badge chips, wrapped\n // text) don't drag the icon down.\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:mt-[5px] ds:items-center ds:justify-center ds:[&_svg]:size-4 ds:text-[color:var(--description-list-icon-color)]\"\n >\n {icon}\n </span>\n )}\n {children}\n {copyable && (\n <IconButton\n icon={copied ? <Check /> : <Copy />}\n size=\"sm\"\n aria-label={ariaLabel}\n onClick={handleCopy}\n intent=\"ghost\"\n className=\"ds:self-start\"\n />\n )}\n {copyable && (\n <span role=\"status\" className=\"ds:sr-only\">\n {announcement}\n </span>\n )}\n </div>\n );\n },\n);\nDescriptionListRow.displayName = 'DescriptionList.Row';\n\n/* ------------------------------------------------------------------ */\n/* CVA — term <dt> */\n/* ------------------------------------------------------------------ */\n\n// Term / Detail use `overflow-wrap: break-word` (not `anywhere`) so natural-\n// language content wraps at word boundaries first. `anywhere` introduces a\n// soft-wrap opportunity at every character boundary, which combines with\n// `minmax(0, …)` grid tracks to break Italian / German labels mid-word in\n// narrow contexts (carousel cards, sidebar panels). `break-word` still breaks\n// genuinely unbreakable strings — URLs, hashes, long IDs — at the column\n// edge, so transaction IDs and email addresses don't push the layout wider.\nconst descriptionListTermVariants = cva(\n 'type-label ds:text-[color:var(--muted-foreground)] ds:text-start ds:[overflow-wrap:break-word] ds:[word-break:normal]',\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — detail <dd> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListDetailVariants = cva(\n 'type-body ds:text-[color:var(--foreground)] ds:m-0 ds:[overflow-wrap:break-word] ds:[word-break:normal]',\n {\n variants: {\n numeric: {\n true: 'ds:text-end',\n false: 'ds:text-start',\n },\n },\n defaultVariants: {\n numeric: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Term — <dt> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListTerm = forwardRef<HTMLElement, DescriptionListTermProps>(\n ({ className, ...props }, ref) => (\n <dt\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListTermVariants({ className })}\n {...props}\n />\n ),\n);\nDescriptionListTerm.displayName = 'DescriptionList.Term';\n\n/* ------------------------------------------------------------------ */\n/* Detail — <dd> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListDetail = forwardRef<\n HTMLElement,\n DescriptionListDetailProps\n>(({ numeric = false, className, ...props }, ref) => (\n <dd\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListDetailVariants({ numeric, className })}\n {...props}\n />\n));\nDescriptionListDetail.displayName = 'DescriptionList.Detail';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const DescriptionList = Object.assign(DescriptionListRoot, {\n Row: DescriptionListRow,\n Term: DescriptionListTerm,\n Detail: DescriptionListDetail,\n});\n"],"names":["resolveLabelTrack","labelWidth","resolveValueTrack","DescriptionListContext","createContext","descriptionListVariants","cva","descriptionListRowVariants","DescriptionListRoot","forwardRef","layout","density","divider","className","children","style","props","ref","hasIcons","useMemo","Children","child","isValidElement","gridStyle","jsx","DescriptionListRow","copyable","copyText","copyLabel","icon","useContext","t","useTranslation","copied","setCopied","useState","announcement","setAnnouncement","handleCopy","useCallback","ariaLabel","jsxs","IconButton","Check","Copy","descriptionListTermVariants","descriptionListDetailVariants","DescriptionListTerm","DescriptionListDetail","numeric","DescriptionList"],"mappings":";;;;;;;AA0CA,SAASA,EAAkBC,GAA+C;AAYxE,SAAIA,MAAe,SAAe,qBAC9BA,MAAe,UAAgB,kBAC5BA;AACT;AAEA,SAASC,EAAkBD,GAA+C;AACxE,SAAOA,MAAe,UAAU,kBAAkB;AACpD;AAoBA,MAAME,IAAyBC,EAA2C;AAAA,EACxE,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ,CAAC,GAMKC,IAA0BC,EAAI,uBAAuB;AAAA,EACzD,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IAAA;AAAA,IAEd,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,IAEX,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EAEF,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,EAAA;AAEb,CAAC,GAsBKC,IAA6BD,EAAI,IAAI;AAAA,EACzC,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,IAAA;AAAA,IAEd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SACE;AAAA,MACF,UACE;AAAA,IAAA;AAAA,IAEJ,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,IAET,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF,kBAAkB;AAAA;AAAA,IAEhB;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,IAEJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,IAEJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA;AAAA,IAGJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,IAAA;AAAA;AAAA;AAAA,IAIb;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,IAEJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA;AAAA,IAGJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,IAEJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA;AAAA,IAGJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,IAEJ;AAAA,MACE,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WACE;AAAA,IAAA;AAAA,EACJ;AAAA,EAEF,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd,CAAC,GAqEKE,IAAsBC;AAAA,EAC1B,CACE;AAAA,IACE,QAAAC,IAAS;AAAA,IACT,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,YAAAX,IAAa;AAAA,IACb,WAAAY;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AAMH,UAAMC,IAAWC;AAAA,MACf,MACEC,EAAS,QAAQN,CAAQ,EAAE;AAAA,QACzB,CAACO,MACCC,EAAeD,CAAK,KACnBA,EAAM,MAA6B,QAAQ;AAAA,MAAA;AAAA,MAElD,CAACP,CAAQ;AAAA,IAAA,GAMLS,IAAYJ;AAAA,MAChB,OACG;AAAA,QACC,GAAGJ;AAAA,QACH,kCAAkCf,EAAkBC,CAAU;AAAA,QAC9D,kCAAkCC,EAAkBD,CAAU;AAAA,MAAA;AAAA,MAElE,CAACc,GAAOd,CAAU;AAAA,IAAA;AAGpB,WACE,gBAAAuB;AAAA,MAACrB,EAAuB;AAAA,MAAvB;AAAA,QACC,OAAO,EAAE,QAAAO,GAAQ,SAAAC,GAAS,SAAAC,GAAS,UAAAM,EAAA;AAAA,QAEnC,UAAA,gBAAAM;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAP;AAAA,YACA,WAAWZ,EAAwB;AAAA,cACjC,QAAAK;AAAA,cACA,SAAAC;AAAA,cACA,SAAAC;AAAA,cACA,WAAAC;AAAA,YAAA,CACD;AAAA,YACD,kBAAe;AAAA,YACf,oBACEZ,MAAe,UAAUA,MAAe,UACpCA,IACA;AAAA,YAGN,OAAOsB;AAAA,YACN,GAAGP;AAAA,YAEH,UAAAF;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AACF;AACAN,EAAoB,cAAc;AAMlC,MAAMiB,IAAqBhB;AAAA,EACzB,CACE;AAAA,IACE,UAAAiB,IAAW;AAAA,IACX,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC;AAAA,IACA,WAAAhB;AAAA,IACA,UAAAC;AAAA,IACA,GAAGE;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,QAAAP,GAAQ,SAAAE,GAAS,UAAAM,EAAA,IAAaY,EAAW3B,CAAsB,GACjE,EAAE,GAAA4B,EAAA,IAAMC,EAAe,IAAI,GAC3B,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAE,GAE7CG,IAAaC,EAAY,YAAY;AACzC,UAAKZ;AAQL,YAAI;AACF,gBAAM,UAAU,UAAU,UAAUA,CAAQ,GAC5CO,EAAU,EAAI,GACdG,EAAgBN,EAAE,qBAAqB,CAAC,GACxC,WAAW,MAAM;AACf,YAAAG,EAAU,EAAK,GACfG,EAAgB,EAAE;AAAA,UACpB,GAAG,GAAI;AAAA,QACT,QAAQ;AACN,UAAAA,EAAgBN,EAAE,2BAA2B,CAAC,GAC9C,WAAW,MAAMM,EAAgB,EAAE,GAAG,GAAI;AAAA,QAC5C;AAAA,IACF,GAAG,CAACV,GAAUI,CAAC,CAAC,GAEVS,IAAYT,EAAE,qBAAqB;AAAA,MACvC,OAAOH,KAAaD,KAAY;AAAA,IAAA,CACjC;AAED,WACE,gBAAAc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAxB;AAAA,QACA,WAAWV,EAA2B;AAAA,UACpC,QAAAG;AAAA,UACA,SAAAE;AAAA,UACA,UAAAc;AAAA,UACA,UAAAR;AAAA,UACA,WAAAL;AAAA,QAAA,CACD;AAAA,QACA,GAAGG;AAAA,QASH,UAAA;AAAA,UAAAE,KACC,gBAAAM;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,qBAAiB;AAAA,cACjB,eAAY;AAAA,cAaZ,WAAU;AAAA,cAET,UAAAK;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJf;AAAA,UACAY,KACC,gBAAAF;AAAA,YAACkB;AAAA,YAAA;AAAA,cACC,MAAMT,IAAS,gBAAAT,EAACmB,GAAA,CAAA,CAAM,sBAAMC,GAAA,EAAK;AAAA,cACjC,MAAK;AAAA,cACL,cAAYJ;AAAA,cACZ,SAASF;AAAA,cACT,QAAO;AAAA,cACP,WAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAGbZ,KACC,gBAAAF,EAAC,QAAA,EAAK,MAAK,UAAS,WAAU,cAC3B,UAAAY,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AACAX,EAAmB,cAAc;AAajC,MAAMoB,IAA8BvC;AAAA,EAClC;AACF,GAMMwC,IAAgCxC;AAAA,EACpC;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAMMyC,IAAsBtC;AAAA,EAC1B,CAAC,EAAE,WAAAI,GAAW,GAAGG,EAAA,GAASC,MACxB,gBAAAO;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAP;AAAA,MACA,WAAW4B,EAA4B,EAAE,WAAAhC,GAAW;AAAA,MACnD,GAAGG;AAAA,IAAA;AAAA,EAAA;AAGV;AACA+B,EAAoB,cAAc;AAMlC,MAAMC,IAAwBvC,EAG5B,CAAC,EAAE,SAAAwC,IAAU,IAAO,WAAApC,GAAW,GAAGG,KAASC,MAC3C,gBAAAO;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAP;AAAA,IACA,WAAW6B,EAA8B,EAAE,SAAAG,GAAS,WAAApC,GAAW;AAAA,IAC9D,GAAGG;AAAA,EAAA;AACN,CACD;AACDgC,EAAsB,cAAc;AAM7B,MAAME,IAAkB,OAAO,OAAO1C,GAAqB;AAAA,EAChE,KAAKiB;AAAA,EACL,MAAMsB;AAAA,EACN,QAAQC;AACV,CAAC;"}
|
|
1
|
+
{"version":3,"file":"description-list-Q8640NHu.js","sources":["../../src/components/description-list/description-list.tsx"],"sourcesContent":["import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type CSSProperties,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Copy, Check } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\n/* ------------------------------------------------------------------ */\n/* labelWidth → label / value track resolver */\n/* */\n/* The `inline` / `responsive` layouts render a two- or three-column */\n/* grid (icon? · label · value · copy?). The label column's width is */\n/* parameterised so consumers can pick the right behaviour for the */\n/* surrounding container: */\n/* */\n/* - `auto` (default): label sizes to its intrinsic content; the */\n/* value column takes the remainder. Long labels wrap word-by-word */\n/* in narrow contexts instead of being squeezed into a 1fr column */\n/* that can collapse below the longest word. */\n/* - `fixed`: legacy ⅓ / ⅔ ratio (label `minmax(0,1fr)`, value */\n/* `minmax(0,2fr)`). Use for wide forms where consistent alignment */\n/* across rows is more important than fitting the longest label. */\n/* - any CSS length / track size (`'8rem'`, `'min-content'`, …): */\n/* forces the label column to that width. */\n/* */\n/* The resolved values are surfaced as `--description-list-label-track` */\n/* and `--description-list-value-track` on the root `<dl>` so each Row */\n/* can compose them with the icon / copy auto columns it needs. */\n/* ------------------------------------------------------------------ */\n\ntype LabelWidthPreset = 'auto' | 'fixed';\nexport type DescriptionListLabelWidth = LabelWidthPreset | (string & {});\n\nfunction resolveLabelTrack(labelWidth: DescriptionListLabelWidth): string {\n // `auto` uses `fit-content(50%)` rather than the bare `auto` keyword.\n // CSS `auto` resolves to `minmax(min-content, max-content)`, which can't\n // shrink the term column below the dt's max-content in a narrow container\n // (the failure mode booking-website hit with long Italian medical labels\n // in a 320 px Carousel slide). `fit-content(50%)` clamps to\n // `max(min-content, min(50%-of-container, max-content))`:\n // - in narrow containers it caps at 50 % of the row width, leaving the\n // other half for the detail column; the dt wraps at word boundaries\n // via `overflow-wrap: break-word`.\n // - in wide containers it expands to the dt's max-content, so short\n // labels don't stretch unnecessarily.\n if (labelWidth === 'auto') return 'fit-content(50%)';\n if (labelWidth === 'fixed') return 'minmax(0,1fr)';\n return labelWidth;\n}\n\nfunction resolveValueTrack(labelWidth: DescriptionListLabelWidth): string {\n return labelWidth === 'fixed' ? 'minmax(0,2fr)' : 'minmax(0,1fr)';\n}\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface DescriptionListContextShape {\n layout: 'inline' | 'stacked' | 'responsive';\n density: 'default' | 'compact';\n divider: 'none' | 'between' | 'bordered';\n /**\n * True when at least one direct child Row was rendered with a\n * non-null `icon` prop. Every Row in the list then reserves a\n * leading icon column (rendering a `size-4` empty placeholder\n * when this row has no icon) so the grid's `auto` column resolves\n * to the same width across all rows and sibling Rows align.\n */\n hasIcons: boolean;\n}\n\nconst DescriptionListContext = createContext<DescriptionListContextShape>({\n layout: 'inline',\n density: 'default',\n divider: 'none',\n hasIcons: false,\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — root <dl> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListVariants = cva('ds:flex ds:flex-col', {\n variants: {\n layout: {\n inline: '',\n stacked: '',\n responsive: '',\n },\n density: {\n default: 'ds:gap-[var(--spacing-md)]',\n compact: 'ds:gap-[var(--spacing-sm)]',\n },\n divider: {\n none: '',\n between: '',\n bordered: '',\n },\n },\n defaultVariants: {\n layout: 'inline',\n density: 'default',\n divider: 'none',\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* CVA — row <div> */\n/* */\n/* The grid template is selected per (layout × hasIcons × copyable). */\n/* Inline / responsive (above sm) layouts use a 2-, 3-, or 4-column */\n/* grid. Stacked layouts use flex-col when there are no icons, and a */\n/* 2- or 3-column grid when icons are present (so the icon can sit at */\n/* the leading edge of the dt/dd stack without breaking the dl/dt/dd */\n/* parent-child relationship the HTML5 spec requires). */\n/* */\n/* The icon column is `auto` — it resolves to the icon wrapper's */\n/* intrinsic box (`size-4` = 1rem), which matches the empty placeholder */\n/* rendered on rows without an icon. That keeps sibling rows aligned */\n/* even when only some rows carry an icon. */\n/* */\n/* The copy IconButton is pinned to the trailing column via */\n/* `[&>button]:col-start-N` so it does not wrap to an unrelated cell */\n/* when the row also contains multiple `<dd>` siblings. */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListRowVariants = cva('', {\n variants: {\n layout: {\n inline: '',\n stacked: '',\n responsive: '',\n },\n divider: {\n none: '',\n between:\n 'ds:[&:not(:last-child)]:border-b ds:[&:not(:last-child)]:border-[color:var(--border)] ds:[&:not(:last-child)]:pb-[var(--spacing-md)]',\n bordered:\n 'ds:border ds:border-[color:var(--border)] ds:rounded-[var(--radius-sm)] ds:p-[var(--spacing-sm)]',\n },\n copyable: {\n true: '',\n false: '',\n },\n hasIcons: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n /* ----- inline / no icons ----- */\n {\n layout: 'inline',\n hasIcons: false,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline',\n },\n {\n layout: 'inline',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>button]:col-start-3 ds:[&>button]:self-start',\n },\n /* ----- inline / with icons -----\n `items-baseline` aligns Term (`type-label` 14 px / 1.4 lh) and\n Detail (`type-body` 16 px / 1.6 lh) by their text baselines so\n their cap-heights line up — without it Detail's larger\n line-box pushed plain-text values visibly below the label.\n Per-cell overrides keep the icon at row-top (with the\n `mt-[5px]` cap-height nudge intact) and the copy button at\n row-start too. Chip cells (Badges / Tags inside the Detail\n column) baseline-align via their internal text baseline; the\n shift is sub-pixel and the chip rows remain visually anchored\n with the row's label. */\n {\n layout: 'inline',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start',\n },\n {\n layout: 'inline',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:[&>button]:col-start-4 ds:[&>button]:self-start',\n },\n /* ----- stacked / no icons / no copyable ----- */\n {\n layout: 'stacked',\n hasIcons: false,\n copyable: false,\n className: 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]',\n },\n /* ----- stacked / no icons / copyable — 2-col grid so the copy\n button sits in a trailing column instead of below dd ----- */\n {\n layout: 'stacked',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[minmax(0,1fr)_auto] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>button]:col-start-2 ds:[&>button]:row-span-full',\n },\n /* ----- stacked / with icons — explicit grid so dt/dd remain\n direct children of the row div while the icon sits at the\n leading edge of the column-2 stack. `labelWidth` does not\n apply here (single content column). ----- */\n {\n layout: 'stacked',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_minmax(0,1fr)] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>dt]:col-start-2 ds:[&>dd]:col-start-2 ds:[&>[data-dl-icon-slot]]:row-span-full',\n },\n {\n layout: 'stacked',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_minmax(0,1fr)_auto] ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-xs)] ds:items-start ds:[&>dt]:col-start-2 ds:[&>dd]:col-start-2 ds:[&>[data-dl-icon-slot]]:row-span-full ds:[&>button]:col-start-3 ds:[&>button]:row-span-full',\n },\n /* ----- responsive / no icons (inline above sm, stacked below) ----- */\n {\n layout: 'responsive',\n hasIcons: false,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:max-sm:flex ds:max-sm:flex-col ds:max-sm:gap-[var(--spacing-xs)]',\n },\n {\n layout: 'responsive',\n hasIcons: false,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>button]:col-start-3 ds:[&>button]:self-start ds:max-sm:flex ds:max-sm:flex-col ds:max-sm:gap-[var(--spacing-xs)]',\n },\n /* ----- responsive / with icons ----- */\n {\n layout: 'responsive',\n hasIcons: true,\n copyable: false,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:max-sm:grid-cols-[auto_minmax(0,1fr)] ds:max-sm:gap-x-[var(--spacing-sm)] ds:max-sm:gap-y-[var(--spacing-xs)] ds:max-sm:[&>dt]:col-start-2 ds:max-sm:[&>dd]:col-start-2 ds:max-sm:[&>[data-dl-icon-slot]]:row-span-full',\n },\n {\n layout: 'responsive',\n hasIcons: true,\n copyable: true,\n className:\n 'ds:grid ds:grid-cols-[auto_var(--description-list-label-track)_var(--description-list-value-track)_auto] ds:gap-[var(--spacing-md)] ds:items-baseline ds:[&>[data-dl-icon-slot]]:self-start ds:[&>button]:col-start-4 ds:[&>button]:self-start ds:max-sm:grid-cols-[auto_minmax(0,1fr)_auto] ds:max-sm:gap-x-[var(--spacing-sm)] ds:max-sm:gap-y-[var(--spacing-xs)] ds:max-sm:[&>dt]:col-start-2 ds:max-sm:[&>dd]:col-start-2 ds:max-sm:[&>[data-dl-icon-slot]]:row-span-full ds:max-sm:[&>button]:col-start-3 ds:max-sm:[&>button]:row-span-full',\n },\n ],\n defaultVariants: {\n layout: 'inline',\n divider: 'none',\n copyable: false,\n hasIcons: false,\n },\n});\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\nexport interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {\n layout?: 'inline' | 'stacked' | 'responsive';\n density?: 'default' | 'compact';\n divider?: 'none' | 'between' | 'bordered';\n /**\n * Width of the term column in `inline` and `responsive` layouts.\n *\n * - `'auto'` (default): the term column sizes to its intrinsic content\n * per row, so labels wrap at word boundaries in narrow contexts (carousel\n * cards, sidebar panels) and the detail column takes the remaining inline\n * space. **Sibling rows do NOT share column widths under this preset** —\n * each row's columns size to its own content. Use this when intrinsic\n * per-row sizing matters more than vertical alignment of values.\n * - `'fixed'`: ⅓ / ⅔ split — term column is `minmax(0, 1fr)` and detail\n * column is `minmax(0, 2fr)`. Sibling rows share the same proportional\n * widths, so values align vertically across rows. Use this when shared\n * value-column alignment matters (the typical use case for a list of\n * contact rows, profile fields, or any tabular-feeling metadata).\n * - any CSS track size (`'8rem'`, `'min-content'`, `'40%'`, …): pins the\n * term column to that width and lets the detail column take the rest.\n *\n * Ignored when `layout=\"stacked\"` (single content column).\n */\n labelWidth?: DescriptionListLabelWidth;\n}\n\nexport interface DescriptionListRowProps extends React.HTMLAttributes<HTMLDivElement> {\n /** When true, shows a copy-to-clipboard button using KeyValuePair's established mechanism */\n copyable?: boolean;\n /** Text written to the clipboard when copyable=true */\n copyText?: string;\n /** Label used in the copy button's aria-label: \"Copy {copyLabel}\". Falls back to copyText. */\n copyLabel?: string;\n /**\n * Optional decorative icon rendered at the leading edge of the row.\n * Pass a `lucide-react` icon (or any single React element) for visual\n * consistency. The wrapper applies `aria-hidden=\"true\"` and paints\n * the icon with `var(--description-list-icon-color)` (defaults to\n * `--muted-foreground`); consumers can recolour the slot via that\n * token without forking the component.\n *\n * When any row in the list passes an `icon`, every row reserves a\n * leading icon column so values align across siblings — including\n * rows that did not pass an icon.\n *\n * Type is `ReactElement` (not the broader `ReactNode`) so the intent\n * is clear at the call site: this slot is for a single SVG/icon,\n * not arbitrary fragments, strings, or numbers.\n */\n icon?: React.ReactElement | null;\n}\n\nexport type DescriptionListTermProps = React.HTMLAttributes<HTMLElement>;\n\nexport interface DescriptionListDetailProps extends React.HTMLAttributes<HTMLElement> {\n /** Right-aligns numeric values via text-end */\n numeric?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root — <dl> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRoot = forwardRef<HTMLDListElement, DescriptionListProps>(\n (\n {\n layout = 'inline',\n density = 'default',\n divider = 'none',\n labelWidth = 'auto',\n className,\n children,\n style,\n ...props\n },\n ref,\n ) => {\n // Detect whether any direct child Row carries a non-null `icon` prop.\n // `Children.toArray` flattens nested arrays from `.map()` calls; fragments\n // (`<>…</>`) and deeper wrappers (HOCs, custom containers) are NOT\n // unwrapped. Consumers who hit that edge case can force the icon column\n // by passing `icon={<></>}` on at least one direct-child Row.\n const hasIcons = useMemo(\n () =>\n Children.toArray(children).some(\n (child) =>\n isValidElement(child) &&\n (child.props as { icon?: unknown }).icon != null,\n ),\n [children],\n );\n\n // Inline style — permitted per 23-constraints §Runtime-computed dimensions\n // (CSS custom property setter; the grid-template-columns rule that\n // consumes these variables lives in CVA on each Row).\n const gridStyle = useMemo<CSSProperties>(\n () =>\n ({\n ...style,\n '--description-list-label-track': resolveLabelTrack(labelWidth),\n '--description-list-value-track': resolveValueTrack(labelWidth),\n }) as CSSProperties,\n [style, labelWidth],\n );\n\n return (\n <DescriptionListContext.Provider\n value={{ layout, density, divider, hasIcons }}\n >\n <dl\n ref={ref}\n className={descriptionListVariants({\n layout,\n density,\n divider,\n className,\n })}\n data-component=\"description-list\"\n data-label-width={\n labelWidth === 'auto' || labelWidth === 'fixed'\n ? labelWidth\n : 'custom'\n }\n // eslint-disable-next-line react/forbid-dom-props -- 23-constraints §Runtime-computed dimensions: labelWidth resolves to a CSS track size set on `--description-list-label-track`. The grid-template-columns rule that consumes the variable lives in CVA on each Row.\n style={gridStyle}\n {...props}\n >\n {children}\n </dl>\n </DescriptionListContext.Provider>\n );\n },\n);\nDescriptionListRoot.displayName = 'DescriptionList';\n\n/* ------------------------------------------------------------------ */\n/* Row — <div> that groups a <dt> with its <dd>(s) */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListRow = forwardRef<HTMLDivElement, DescriptionListRowProps>(\n (\n {\n copyable = false,\n copyText,\n copyLabel,\n icon,\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const { layout, divider, hasIcons } = useContext(DescriptionListContext);\n const { t } = useTranslation('ui');\n const [copied, setCopied] = useState(false);\n const [announcement, setAnnouncement] = useState('');\n\n const handleCopy = useCallback(async () => {\n if (!copyText) {\n if (import.meta.env.DEV) {\n console.warn(\n 'DescriptionList.Row: copyable=true but no copyText provided. Copy is a no-op.',\n );\n }\n return;\n }\n try {\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setAnnouncement(t('keyValuePair.copied'));\n setTimeout(() => {\n setCopied(false);\n setAnnouncement('');\n }, 2000);\n } catch {\n setAnnouncement(t('keyValuePair.notAvailable'));\n setTimeout(() => setAnnouncement(''), 3000);\n }\n }, [copyText, t]);\n\n const ariaLabel = t('keyValuePair.copy', {\n label: copyLabel ?? copyText ?? '',\n });\n\n return (\n <div\n ref={ref}\n className={descriptionListRowVariants({\n layout,\n divider,\n copyable,\n hasIcons,\n className,\n })}\n {...props}\n >\n {/* Icon slot — rendered on every row when the list has any icons\n so column-1 width is consistent across siblings. The wrapper\n is `size-4` regardless of whether it contains an SVG, so the\n grid's `auto` column resolves to the same 1rem width for\n both icon-bearing and icon-less rows. `aria-hidden` keeps SR\n announcements as \"term: definition\" without an interstitial\n icon role. */}\n {hasIcons && (\n <span\n data-dl-icon-slot\n aria-hidden=\"true\"\n // Cap-height alignment for the icon vs the label's first\n // line. The previous `mt-0.5` (2 px) left the icon\n // visibly above the label — `type-label` at 14 px /\n // 1.4 lh has its cap-height roughly 5 px below the row\n // top, so a 16 px icon centred at row+10 was painting\n // above the label's letter tops. `mt-[5px]` lands the\n // icon's visible glyph (after lucide's internal ~2 px\n // padding) right on the label cap-height.\n // `align-self` defers to the parent grid's\n // `items-start` so the icon stays anchored to the row's\n // first line — multi-line values (badge chips, wrapped\n // text) don't drag the icon down.\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:mt-[5px] ds:items-center ds:justify-center ds:[&_svg]:size-4 ds:text-[color:var(--description-list-icon-color)]\"\n >\n {icon}\n </span>\n )}\n {children}\n {copyable && (\n <IconButton\n icon={copied ? <Check /> : <Copy />}\n size=\"sm\"\n aria-label={ariaLabel}\n onClick={handleCopy}\n intent=\"ghost\"\n className=\"ds:self-start\"\n />\n )}\n {copyable && (\n <span role=\"status\" className=\"ds:sr-only\">\n {announcement}\n </span>\n )}\n </div>\n );\n },\n);\nDescriptionListRow.displayName = 'DescriptionList.Row';\n\n/* ------------------------------------------------------------------ */\n/* CVA — term <dt> */\n/* ------------------------------------------------------------------ */\n\n// Term / Detail use `overflow-wrap: break-word` (not `anywhere`) so natural-\n// language content wraps at word boundaries first. `anywhere` introduces a\n// soft-wrap opportunity at every character boundary, which combines with\n// `minmax(0, …)` grid tracks to break Italian / German labels mid-word in\n// narrow contexts (carousel cards, sidebar panels). `break-word` still breaks\n// genuinely unbreakable strings — URLs, hashes, long IDs — at the column\n// edge, so transaction IDs and email addresses don't push the layout wider.\nconst descriptionListTermVariants = cva(\n 'type-label ds:text-[color:var(--muted-foreground)] ds:text-start ds:[overflow-wrap:break-word] ds:[word-break:normal]',\n);\n\n/* ------------------------------------------------------------------ */\n/* CVA — detail <dd> */\n/* ------------------------------------------------------------------ */\n\nconst descriptionListDetailVariants = cva(\n 'type-body ds:text-[color:var(--foreground)] ds:m-0 ds:[overflow-wrap:break-word] ds:[word-break:normal]',\n {\n variants: {\n numeric: {\n true: 'ds:text-end',\n false: 'ds:text-start',\n },\n },\n defaultVariants: {\n numeric: false,\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Term — <dt> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListTerm = forwardRef<HTMLElement, DescriptionListTermProps>(\n ({ className, ...props }, ref) => (\n <dt\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListTermVariants({ className })}\n {...props}\n />\n ),\n);\nDescriptionListTerm.displayName = 'DescriptionList.Term';\n\n/* ------------------------------------------------------------------ */\n/* Detail — <dd> */\n/* ------------------------------------------------------------------ */\n\nconst DescriptionListDetail = forwardRef<\n HTMLElement,\n DescriptionListDetailProps\n>(({ numeric = false, className, ...props }, ref) => (\n <dd\n ref={ref as React.Ref<HTMLElement>}\n className={descriptionListDetailVariants({ numeric, className })}\n {...props}\n />\n));\nDescriptionListDetail.displayName = 'DescriptionList.Detail';\n\n/* ------------------------------------------------------------------ */\n/* Compound export */\n/* ------------------------------------------------------------------ */\n\nexport const DescriptionList = Object.assign(DescriptionListRoot, {\n Row: DescriptionListRow,\n Term: DescriptionListTerm,\n Detail: DescriptionListDetail,\n});\n"],"names":["resolveLabelTrack","labelWidth","resolveValueTrack","DescriptionListContext","createContext","descriptionListVariants","cva","descriptionListRowVariants","DescriptionListRoot","forwardRef","layout","density","divider","className","children","style","props","ref","hasIcons","useMemo","Children","child","isValidElement","gridStyle","jsx","DescriptionListRow","copyable","copyText","copyLabel","icon","useContext","t","useTranslation","copied","setCopied","useState","announcement","setAnnouncement","handleCopy","useCallback","ariaLabel","jsxs","IconButton","Check","Copy","descriptionListTermVariants","descriptionListDetailVariants","DescriptionListTerm","DescriptionListDetail","numeric","DescriptionList"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as p } from "react";
|
|
3
3
|
import { c as r } from "./index-D2ZczOXr.js";
|
|
4
|
-
import { I as c } from "./icon-button-
|
|
4
|
+
import { I as c } from "./icon-button-C_1TgRiK.js";
|
|
5
5
|
import { c as i } from "./createLucideIcon-DhHxpK9K.js";
|
|
6
6
|
/**
|
|
7
7
|
* @license lucide-react v1.22.0 - ISC
|
|
@@ -30,4 +30,4 @@ f.displayName = "DevBypassButton";
|
|
|
30
30
|
export {
|
|
31
31
|
f as D
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=dev-bypass-button
|
|
33
|
+
//# sourceMappingURL=dev-bypass-button--CPzzRSj.js.map
|
package/dist/_chunks/{dev-bypass-button-dTuUuzsT.js.map → dev-bypass-button--CPzzRSj.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-bypass-button
|
|
1
|
+
{"version":3,"file":"dev-bypass-button--CPzzRSj.js","sources":["../../node_modules/lucide-react/dist/esm/icons/code.mjs","../../src/components/dev-bypass-button/dev-bypass-button.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 18 6-6-6-6\", key: \"eg8j8\" }],\n [\"path\", { d: \"m8 6-6 6 6 6\", key: \"ppft3o\" }]\n];\nconst Code = createLucideIcon(\"code\", __iconNode);\n\nexport { __iconNode, Code as default };\n//# sourceMappingURL=code.mjs.map\n","/* -------------------------------------------------------------------- */\n/* DevBypassButton — the standard development-only shortcut button. */\n/* */\n/* An outline icon button with the `<>` icon, for a shortcut that only */\n/* exists while developing: fill a form with test data, skip a step. */\n/* The kit only draws it. The host decides whether it is rendered, and */\n/* its server must refuse the action outside development. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, type ButtonHTMLAttributes } from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Code } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\n// One look on purpose: outline, so it reads as a tool and never as the\n// form's main action. It keeps its square when a flex row runs out of room.\nconst devBypassButtonVariants = cva('ds:shrink-0');\n\nexport interface DevBypassButtonProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'children' | 'aria-label' | 'type'\n> {\n /**\n * What the shortcut does, e.g. \"Fill in test data\". It is the button's\n * accessible name and its tooltip. The host supplies it, so the kit\n * ships no text for a button that users never see.\n */\n label: string;\n /** Button size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * The development-only shortcut button. Render it only when the server\n * says this is a development environment: it never checks the\n * environment itself.\n */\nexport const DevBypassButton = forwardRef<\n HTMLButtonElement,\n DevBypassButtonProps\n>(({ label, size = 'md', className, ...props }, ref) => (\n <IconButton\n ref={ref}\n icon={<Code aria-hidden=\"true\" />}\n intent=\"outline\"\n size={size}\n tooltip={label}\n className={devBypassButtonVariants({ className })}\n {...props}\n // Fixed: it never submits the form it sits in, and keeps its marker.\n type=\"button\"\n data-component=\"dev-bypass-button\"\n />\n));\n\nDevBypassButton.displayName = 'DevBypassButton';\n"],"names":["__iconNode","Code","createLucideIcon","devBypassButtonVariants","cva","DevBypassButton","forwardRef","label","size","className","props","ref","jsx","IconButton"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,kBAAkB,KAAK,QAAO,CAAE;AAAA,EAC9C,CAAC,QAAQ,EAAE,GAAG,gBAAgB,KAAK,SAAQ,CAAE;AAC/C,GACMC,IAAOC,EAAiB,QAAQF,CAAU,GCG1CG,IAA0BC,EAAI,aAAa,GAqBpCC,IAAkBC,EAG7B,CAAC,EAAE,OAAAC,GAAO,MAAAC,IAAO,MAAM,WAAAC,GAAW,GAAGC,KAASC,MAC9C,gBAAAC;AAAA,EAACC;AAAA,EAAA;AAAA,IACC,KAAAF;AAAA,IACA,MAAM,gBAAAC,EAACX,GAAA,EAAK,eAAY,OAAA,CAAO;AAAA,IAC/B,QAAO;AAAA,IACP,MAAAO;AAAA,IACA,SAASD;AAAA,IACT,WAAWJ,EAAwB,EAAE,WAAAM,GAAW;AAAA,IAC/C,GAAGC;AAAA,IAEJ,MAAK;AAAA,IACL,kBAAe;AAAA,EAAA;AACjB,CACD;AAEDL,EAAgB,cAAc;","x_google_ignoreList":[0]}
|
|
@@ -2,11 +2,11 @@ import { jsxs as m, Fragment as W, jsx as i } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as j, useMemo as I, useState as q, useImperativeHandle as E, Fragment as H } from "react";
|
|
3
3
|
import { c as $ } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as U } from "react-i18next";
|
|
5
|
-
import { B as b } from "./badge-
|
|
5
|
+
import { B as b } from "./badge-BUk4RjTS.js";
|
|
6
6
|
import { C as B } from "./card-BA4Ig_kn.js";
|
|
7
7
|
import { E as G } from "./empty-state-pL1qum99.js";
|
|
8
|
-
import { P as Y } from "./panel-header-
|
|
9
|
-
import { P as J } from "./pdf-viewer-
|
|
8
|
+
import { P as Y } from "./panel-header-BJkaUwnl.js";
|
|
9
|
+
import { P as J } from "./pdf-viewer-DJ9VN7cu.js";
|
|
10
10
|
import { T as O, b as Q, c as X, a as Z } from "./tabs-2x3L13jn.js";
|
|
11
11
|
import { u as ee } from "./registry-DvAUVLHh.js";
|
|
12
12
|
import { F as ie } from "./file-image-cDgE-BTy.js";
|
|
@@ -288,4 +288,4 @@ export {
|
|
|
288
288
|
ue as D,
|
|
289
289
|
de as d
|
|
290
290
|
};
|
|
291
|
-
//# sourceMappingURL=document-preview-
|
|
291
|
+
//# sourceMappingURL=document-preview-B1dQm292.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-preview-DYX669jE.js","sources":["../../node_modules/lucide-react/dist/esm/icons/files.mjs","../../src/components/document-preview/document-preview.agent.ts","../../src/components/document-preview/document-preview.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8\", key: \"14sh0y\" }],\n [\n \"path\",\n {\n d: \"M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z\",\n key: \"1970lx\"\n }\n ],\n [\"path\", { d: \"M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1\", key: \"l4dndm\" }]\n];\nconst Files = createLucideIcon(\"files\", __iconNode);\n\nexport { __iconNode, Files as default };\n//# sourceMappingURL=files.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — DocumentPreview. */\n/* */\n/* A passive, read-only viewer, so it declares no interactive */\n/* capabilities. The always-on state slot carries only the structural */\n/* render `kind` (pdf / image / metadata / empty) — never the document */\n/* name. */\n/* */\n/* PHI rule (PRS §26 §7): the document display name can identify a */\n/* patient (e.g. \"Rossi Maria — referto 2026.pdf\"). It renders as text */\n/* (fine) but the only name-returning read is the deliberate get_name */\n/* action with `safety: 'phi'`, so the host gates it behind confirm + */\n/* audit. No name is ever emitted in a data-* hook. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DocumentPreviewHandle } from './document-preview';\n\nexport const documentPreviewAgent: AgentAdapter<DocumentPreviewHandle> = {\n id: 'document-preview',\n capabilities: [],\n state: {\n kind: {\n type: \"'pdf' | 'image' | 'metadata' | 'empty'\",\n descriptionKey: 'ui.agent.documentPreview.state.kind',\n description:\n 'Which render branch is active: pdf, image, metadata (no inline preview), or empty (no document). Structural — never the document name.',\n read: (handle) => handle.getKind(),\n },\n },\n actions: {\n get_name: {\n // phi (not read): resolves the document display name, which can identify\n // patients. PRS §26 — phi outranks read so the host gates it behind\n // stricter confirm + audit. The always-on kind slot stays name-free.\n safety: 'phi',\n returns: 'string | undefined',\n returnsSchema: { type: ['string', 'null'] },\n idempotent: true,\n descriptionKey: 'ui.agent.documentPreview.actions.getName',\n description:\n 'Read the display name of the previewed document. May identify a patient (PHI).',\n invoke: (handle) => handle.getName(),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'document-preview',\n description: 'Marks the DocumentPreview region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* DocumentPreview — a standalone, reusable document viewer. */\n/* */\n/* Decoupled from FileManager: it takes primitive props (name, mimeType, */\n/* src, metadata) rather than a FileManagerItem, so signing, the patient */\n/* portal, and the Control Room rail can all reuse it. The body is an */\n/* elevated Card: a bounded preview viewport (PDF → kit PDFViewer; */\n/* image/* → <img>; otherwise a MIME-icon placeholder) above an always-on */\n/* Details block (badges + every structural field the host supplies), so */\n/* the metadata is never dropped when a real preview renders. No name → */\n/* EmptyState. */\n/* */\n/* Title lives in the canonical PanelHeader (the same header every rail */\n/* panel adopts) so the Control Room rail can inject its pin / close */\n/* controls into it. Pass `documents` (≥ 2) to preview a SELECTION as */\n/* tabs — one tab per document, the active one shown below; a single */\n/* entry (or the single-document props) renders without a tab strip. */\n/* */\n/* The root is a `<section>` (region landmark) so the PanelHeader's */\n/* <header> is scoped and never exposed as a page banner — the same */\n/* shape RadiographPanel uses. It is also a keyboard-focusable scroll */\n/* region (tabIndex 0 + labelled focus ring). */\n/* */\n/* PHI: the visible name renders as text (fine), but the only */\n/* name-returning handle read is surfaced by document-preview.agent.ts */\n/* as a `safety: 'phi'` action — never in always-on state, never in a */\n/* data-* hook. In tabbed mode the handle reflects the ACTIVE tab. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n Fragment,\n useImperativeHandle,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n File as FileIcon,\n FileImage,\n FileText,\n Files,\n type LucideIcon,\n} from 'lucide-react';\nimport { Badge } from '../badge';\nimport { Card } from '../card';\nimport { EmptyState } from '../empty-state';\nimport { PanelHeader } from '../panel-header';\nimport { PDFViewer } from '../pdf-viewer';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../tabs';\nimport { useAgentRegistration } from '../../agent';\nimport { documentPreviewAgent } from './document-preview.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type DocumentPreviewSignatureStatus = 'none' | 'pending' | 'signed';\n\n/** Which render branch DocumentPreview is showing — structural, never PHI. */\nexport type DocumentPreviewKind = 'pdf' | 'image' | 'metadata' | 'empty';\n\nexport interface DocumentPreviewMetadata {\n /** Size in bytes. */\n size?: number;\n /** Display name of whoever created the document (host-supplied). */\n createdBy?: string;\n /** ISO 8601 timestamp the document was created. */\n createdAt?: string;\n /** ISO 8601 timestamp of the last modification. */\n updatedAt?: string;\n /** ISO 8601 timestamp a signature was requested from the patient. */\n signatureRequestedAt?: string;\n /** ISO 8601 timestamp the document was signed. */\n signedAt?: string;\n /** ISO 8601 timestamp the document was shared with the patient. */\n sharedAt?: string;\n /** Open document-type category (non-identifying), e.g. `'xray'`. */\n documentType?: string;\n /** Signature workflow state. */\n signatureStatus?: DocumentPreviewSignatureStatus;\n /** Clinical-document flag (host-defined semantics). */\n clinical?: boolean;\n /** ISO 8601 expiry (e.g. identification documents). */\n expiresAt?: string;\n}\n\n/**\n * A single previewable document. In multi-document mode each becomes a tab;\n * `id` is the tab value (never a patient name) and `name` is the tab label.\n */\nexport interface DocumentPreviewDocument {\n /** Stable, non-identifying id. Emitted as the tab value — never PHI. */\n id: string;\n /** Display name (PHI). Also the tab label in multi-document mode. */\n name: string;\n /** MIME type — drives the render branch and the fallback icon. */\n mimeType?: string;\n /** Resolved URL / data URI for the PDF or image viewer. */\n src?: string;\n /** Structural metadata rendered by the metadata-card branch. */\n metadata?: DocumentPreviewMetadata;\n}\n\nexport interface DocumentPreviewProps extends VariantProps<\n typeof documentPreviewVariants\n> {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Display name. Absent (and no `documents`) → empty state. PHI. */\n name?: string;\n /** MIME type — drives the render branch and the fallback icon. */\n mimeType?: string;\n /** Resolved URL / data URI for the PDF or image viewer. The host owns auth. */\n src?: string;\n /** Structural metadata rendered by the metadata-card branch. */\n metadata?: DocumentPreviewMetadata;\n /**\n * Multiple documents to preview as tabs — e.g. a multi-row selection. Two\n * or more render a tab per document (label = name) with the active one\n * shown below; a single entry renders without a tab strip. When non-empty\n * this takes precedence over the single-document props. Names are PHI.\n */\n documents?: DocumentPreviewDocument[];\n className?: string;\n}\n\nexport interface DocumentPreviewHandle {\n /** Which render branch is active — structural, safe for always-on reads. */\n getKind: () => DocumentPreviewKind;\n /** The active document's display name (PHI). Surfaced by the adapter as a `phi` action. */\n getName: () => string | undefined;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst documentPreviewVariants = cva(\n [\n 'ds:flex ds:h-full ds:min-h-0 ds:min-w-0 ds:flex-col ds:overflow-auto',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring',\n ].join(' '),\n);\n\nconst SIGNATURE_VARIANT: Record<\n Exclude<DocumentPreviewSignatureStatus, 'none'>,\n 'success' | 'warning'\n> = {\n signed: 'success',\n pending: 'warning',\n};\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction resolveKind(\n name: string | undefined,\n mimeType: string | undefined,\n src: string | undefined,\n): DocumentPreviewKind {\n if (!name) return 'empty';\n const mime = mimeType ?? '';\n if (mime === 'application/pdf' && src) return 'pdf';\n if (mime.startsWith('image/') && src) return 'image';\n return 'metadata';\n}\n\n/** Fallback icon for the header / metadata card — a small MIME-family lookup. */\nfunction iconForMime(mimeType: string | undefined): LucideIcon {\n const mime = mimeType ?? '';\n if (mime.startsWith('image/')) return FileImage;\n if (\n mime === 'application/pdf' ||\n mime.startsWith('text/') ||\n mime.includes('word')\n ) {\n return FileText;\n }\n return FileIcon;\n}\n\nconst UNIT_KEYS = [\n 'documentPreview.units.bytes',\n 'documentPreview.units.kilobytes',\n 'documentPreview.units.megabytes',\n 'documentPreview.units.gigabytes',\n] as const;\n\nconst UNIT_FALLBACKS = ['B', 'KB', 'MB', 'GB'] as const;\n\nfunction formatBytes(\n bytes: number,\n locale: string,\n t: (key: string, fallback: string) => string,\n): string {\n let value = bytes;\n let unitIndex = 0;\n while (value >= 1024 && unitIndex < UNIT_FALLBACKS.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n const formatted = new Intl.NumberFormat(locale, {\n maximumFractionDigits: unitIndex === 0 ? 0 : 1,\n }).format(value);\n return `${formatted} ${t(UNIT_KEYS[unitIndex], UNIT_FALLBACKS[unitIndex])}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const DocumentPreview = forwardRef<\n DocumentPreviewHandle,\n DocumentPreviewProps\n>(({ id, name, mimeType, src, metadata, documents, className }, ref) => {\n const { t, i18n } = useTranslation('ui');\n\n // Resolve the document list: an explicit `documents` list wins; otherwise\n // the single-document props form a one-item list; nothing → empty. The\n // synthetic single-doc id is never emitted as a tab value (a lone doc\n // renders without a tab strip), so falling back to the name is PHI-safe.\n const docs = useMemo<DocumentPreviewDocument[]>(() => {\n if (documents && documents.length > 0) return documents;\n if (name) return [{ id: id ?? name, name, mimeType, src, metadata }];\n return [];\n }, [documents, id, name, mimeType, src, metadata]);\n\n const isTabbed = docs.length > 1;\n\n // Active tab (multi mode). When the current id is stale after the selection\n // changes we fall back to the first document — no reconciling effect needed.\n const [activeId, setActiveId] = useState<string | undefined>(undefined);\n const activeDoc = docs.find((doc) => doc.id === activeId) ?? docs[0];\n\n const handle = useMemo<DocumentPreviewHandle>(\n () => ({\n getKind: () =>\n activeDoc\n ? resolveKind(activeDoc.name, activeDoc.mimeType, activeDoc.src)\n : 'empty',\n getName: () => activeDoc?.name,\n }),\n [activeDoc],\n );\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(documentPreviewAgent, handle, id);\n\n /* The per-document body — an elevated Card with a bounded preview viewport\n (pdf / image / placeholder) above an always-on Details block. The title is\n NOT rendered here (the PanelHeader owns it, or the tab label in multi mode). */\n const renderBody = (doc: DocumentPreviewDocument): ReactNode => {\n const kind = resolveKind(doc.name, doc.mimeType, doc.src);\n const meta = doc.metadata;\n const PlaceholderIcon = iconForMime(doc.mimeType);\n\n // Preview viewport — the rendered document, or a MIME-icon placeholder when\n // no source resolves. Bounded to a consistent aspect so the Details below\n // stay reachable in the rail.\n let viewport: ReactNode;\n if (kind === 'pdf' && doc.src) {\n viewport = (\n <PDFViewer\n src={doc.src}\n toolbarVariant=\"minimal\"\n // Name the embedded viewer after the document so it stays distinct\n // from the surrounding \"Document preview\" region (nested landmarks\n // must not share an accessible name). Mirrors visible header text.\n ariaLabel={doc.name}\n className=\"ds:h-full ds:w-full\"\n />\n );\n } else if (kind === 'image' && doc.src) {\n viewport = (\n <img\n src={doc.src}\n alt={t('documentPreview.imageAlt', 'Preview of {{name}}', {\n name: doc.name,\n })}\n className=\"ds:max-h-full ds:max-w-full ds:object-contain\"\n />\n );\n } else {\n viewport = (\n <span className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-sm)] ds:text-muted-foreground\">\n <PlaceholderIcon aria-hidden=\"true\" className=\"ds:size-10\" />\n <span className=\"type-body-sm\">\n {t('documentPreview.noPreview', 'No preview available.')}\n </span>\n </span>\n );\n }\n\n // Badges: type / clinical / signature status.\n const status = meta?.signatureStatus;\n const hasBadges =\n Boolean(meta?.documentType) ||\n Boolean(meta?.clinical) ||\n (status !== undefined && status !== 'none');\n\n // Detail rows — every structural field the host supplies, so nothing is\n // dropped when a real preview renders. Only present fields render a row.\n const fmtDate = (iso: string): string =>\n new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }).format(\n new Date(iso),\n );\n const rows: Array<{ key: string; label: string; value: string }> = [];\n if (meta?.createdBy)\n rows.push({\n key: 'createdBy',\n label: t('documentPreview.fields.createdBy', 'Created by'),\n value: meta.createdBy,\n });\n if (meta?.createdAt)\n rows.push({\n key: 'created',\n label: t('documentPreview.fields.created', 'Created'),\n value: fmtDate(meta.createdAt),\n });\n if (meta?.updatedAt)\n rows.push({\n key: 'modified',\n label: t('documentPreview.fields.modified', 'Modified'),\n value: fmtDate(meta.updatedAt),\n });\n if (meta?.signatureRequestedAt)\n rows.push({\n key: 'signatureRequested',\n label: t(\n 'documentPreview.fields.signatureRequested',\n 'Signature requested',\n ),\n value: fmtDate(meta.signatureRequestedAt),\n });\n if (meta?.signedAt)\n rows.push({\n key: 'signed',\n label: t('documentPreview.fields.signed', 'Signed'),\n value: fmtDate(meta.signedAt),\n });\n if (meta?.sharedAt)\n rows.push({\n key: 'sharedWithPatient',\n label: t(\n 'documentPreview.fields.sharedWithPatient',\n 'Shared with patient',\n ),\n value: fmtDate(meta.sharedAt),\n });\n if (meta?.size !== undefined)\n rows.push({\n key: 'size',\n label: t('documentPreview.fields.size', 'Size'),\n value: formatBytes(meta.size, i18n.language, t),\n });\n if (meta?.expiresAt)\n rows.push({\n key: 'expires',\n label: t('documentPreview.fields.expires', 'Expires'),\n value: fmtDate(meta.expiresAt),\n });\n\n const hasDetails = hasBadges || rows.length > 0;\n\n return (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <Card\n variant=\"elevated\"\n className=\"ds:flex ds:flex-col ds:overflow-hidden\"\n >\n <div className=\"ds:flex ds:aspect-[4/3] ds:min-h-0 ds:items-center ds:justify-center ds:overflow-hidden ds:border-b ds:border-[color:var(--card-border)] ds:bg-muted\">\n {viewport}\n </div>\n {hasDetails && (\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <h3 className=\"type-eyebrow ds:m-0 ds:text-muted-foreground\">\n {t('documentPreview.detailsTitle', 'Details')}\n </h3>\n {hasBadges && (\n <span className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {meta?.documentType && (\n <Badge variant=\"neutral\" size=\"sm\">\n {meta.documentType}\n </Badge>\n )}\n {meta?.clinical && (\n <Badge variant=\"info\" size=\"sm\">\n {t('documentPreview.clinical', 'Clinical')}\n </Badge>\n )}\n {status && status !== 'none' && (\n <Badge\n variant={SIGNATURE_VARIANT[status]}\n size=\"sm\"\n withDot\n >\n {t(`documentPreview.signature.${status}`, status)}\n </Badge>\n )}\n </span>\n )}\n {rows.length > 0 && (\n <dl className=\"ds:grid ds:grid-cols-[auto_1fr] ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-xs)] type-body-sm\">\n {rows.map((row) => (\n <Fragment key={row.key}>\n <dt className=\"ds:text-muted-foreground\">{row.label}</dt>\n <dd className=\"ds:m-0\">{row.value}</dd>\n </Fragment>\n ))}\n </dl>\n )}\n </Card.Body>\n )}\n </Card>\n </div>\n );\n };\n\n // Header: a MIME icon + the document name for a single doc; a Files glyph +\n // a count badge (RadiographPanel's title-plus-badge shape) when tabbed.\n const HeaderMimeIcon = iconForMime(activeDoc?.mimeType);\n const headerIcon = isTabbed ? (\n <Files aria-hidden=\"true\" />\n ) : (\n <HeaderMimeIcon aria-hidden=\"true\" />\n );\n const headerTitle: ReactNode = isTabbed ? (\n <>\n {t('documentPreview.multiTitle', 'Documents')}\n <Badge variant=\"neutral\" size=\"sm\">\n {docs.length}\n </Badge>\n </>\n ) : (\n activeDoc?.name\n );\n\n let content: ReactNode;\n if (docs.length === 0) {\n content = (\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={t('documentPreview.emptyTitle', 'No document selected')}\n description={t(\n 'documentPreview.emptyDescription',\n 'Select a document to preview it here.',\n )}\n />\n );\n } else if (isTabbed) {\n content = (\n <Tabs\n value={activeDoc?.id ?? ''}\n onValueChange={setActiveId}\n variant=\"underlined\"\n size=\"sm\"\n // Each tab shows its full file name when there's room and shrinks with\n // an ellipsis only when the tabs would otherwise overflow the width\n // (`min-inline-size:0` lets a tab shrink below its content; the label\n // truncates). The full name stays the accessible name and shows in the\n // body, so nothing is lost.\n className=\"ds:min-h-0 ds:flex-1 ds:pt-[var(--spacing-sm)]\"\n >\n <TabsList\n aria-label={t('documentPreview.tabsLabel', 'Selected documents')}\n className=\"ds:gap-[var(--spacing-sm)]\"\n >\n {docs.map((doc) => {\n const TabIcon = iconForMime(doc.mimeType);\n return (\n <TabsTrigger\n key={doc.id}\n value={doc.id}\n // Match the header glyph: same 16px size (never larger) and the\n // accent tint that marks a file across the grid and the rail.\n icon={\n <TabIcon\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n }\n className=\"ds:[min-inline-size:0]\"\n >\n <span className=\"ds:block ds:truncate ds:[min-inline-size:0]\">\n {doc.name}\n </span>\n </TabsTrigger>\n );\n })}\n </TabsList>\n {docs.map((doc) => (\n <TabsContent\n key={doc.id}\n value={doc.id}\n className=\"ds:min-h-0 ds:flex-1\"\n >\n {renderBody(doc)}\n </TabsContent>\n ))}\n </Tabs>\n );\n } else {\n content = renderBody(activeDoc);\n }\n\n return (\n <section\n data-component=\"document-preview\"\n data-component-id={id}\n // The preview body scrolls (PDF pages, tall images, long metadata), so\n // the region needs a keyboard tab stop (axe scrollable-region-focusable).\n // A labelled <section> is a region landmark, which also scopes the\n // PanelHeader's <header> so it is never exposed as a page banner.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- keyboard-focusable scroll region (see comment above)\n tabIndex={0}\n aria-label={t('documentPreview.regionLabel', 'Document preview')}\n className={documentPreviewVariants({ className })}\n >\n {docs.length > 0 && (\n <PanelHeader sticky icon={headerIcon} title={headerTitle} />\n )}\n {content}\n </section>\n );\n});\n\nDocumentPreview.displayName = 'DocumentPreview';\n"],"names":["__iconNode","Files","createLucideIcon","documentPreviewAgent","handle","documentPreviewVariants","cva","SIGNATURE_VARIANT","resolveKind","name","mimeType","src","mime","iconForMime","FileImage","FileText","FileIcon","UNIT_KEYS","UNIT_FALLBACKS","formatBytes","bytes","locale","t","value","unitIndex","DocumentPreview","forwardRef","id","metadata","documents","className","ref","i18n","useTranslation","docs","useMemo","isTabbed","activeId","setActiveId","useState","activeDoc","doc","useImperativeHandle","useAgentRegistration","renderBody","kind","meta","PlaceholderIcon","viewport","jsx","PDFViewer","jsxs","status","hasBadges","fmtDate","iso","rows","hasDetails","Card","Badge","row","Fragment","HeaderMimeIcon","headerIcon","headerTitle","content","EmptyState","Tabs","TabsList","TabIcon","TabsTrigger","TabsContent","PanelHeader"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"document-preview-B1dQm292.js","sources":["../../node_modules/lucide-react/dist/esm/icons/files.mjs","../../src/components/document-preview/document-preview.agent.ts","../../src/components/document-preview/document-preview.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8\", key: \"14sh0y\" }],\n [\n \"path\",\n {\n d: \"M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z\",\n key: \"1970lx\"\n }\n ],\n [\"path\", { d: \"M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1\", key: \"l4dndm\" }]\n];\nconst Files = createLucideIcon(\"files\", __iconNode);\n\nexport { __iconNode, Files as default };\n//# sourceMappingURL=files.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — DocumentPreview. */\n/* */\n/* A passive, read-only viewer, so it declares no interactive */\n/* capabilities. The always-on state slot carries only the structural */\n/* render `kind` (pdf / image / metadata / empty) — never the document */\n/* name. */\n/* */\n/* PHI rule (PRS §26 §7): the document display name can identify a */\n/* patient (e.g. \"Rossi Maria — referto 2026.pdf\"). It renders as text */\n/* (fine) but the only name-returning read is the deliberate get_name */\n/* action with `safety: 'phi'`, so the host gates it behind confirm + */\n/* audit. No name is ever emitted in a data-* hook. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DocumentPreviewHandle } from './document-preview';\n\nexport const documentPreviewAgent: AgentAdapter<DocumentPreviewHandle> = {\n id: 'document-preview',\n capabilities: [],\n state: {\n kind: {\n type: \"'pdf' | 'image' | 'metadata' | 'empty'\",\n descriptionKey: 'ui.agent.documentPreview.state.kind',\n description:\n 'Which render branch is active: pdf, image, metadata (no inline preview), or empty (no document). Structural — never the document name.',\n read: (handle) => handle.getKind(),\n },\n },\n actions: {\n get_name: {\n // phi (not read): resolves the document display name, which can identify\n // patients. PRS §26 — phi outranks read so the host gates it behind\n // stricter confirm + audit. The always-on kind slot stays name-free.\n safety: 'phi',\n returns: 'string | undefined',\n returnsSchema: { type: ['string', 'null'] },\n idempotent: true,\n descriptionKey: 'ui.agent.documentPreview.actions.getName',\n description:\n 'Read the display name of the previewed document. May identify a patient (PHI).',\n invoke: (handle) => handle.getName(),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'document-preview',\n description: 'Marks the DocumentPreview region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* DocumentPreview — a standalone, reusable document viewer. */\n/* */\n/* Decoupled from FileManager: it takes primitive props (name, mimeType, */\n/* src, metadata) rather than a FileManagerItem, so signing, the patient */\n/* portal, and the Control Room rail can all reuse it. The body is an */\n/* elevated Card: a bounded preview viewport (PDF → kit PDFViewer; */\n/* image/* → <img>; otherwise a MIME-icon placeholder) above an always-on */\n/* Details block (badges + every structural field the host supplies), so */\n/* the metadata is never dropped when a real preview renders. No name → */\n/* EmptyState. */\n/* */\n/* Title lives in the canonical PanelHeader (the same header every rail */\n/* panel adopts) so the Control Room rail can inject its pin / close */\n/* controls into it. Pass `documents` (≥ 2) to preview a SELECTION as */\n/* tabs — one tab per document, the active one shown below; a single */\n/* entry (or the single-document props) renders without a tab strip. */\n/* */\n/* The root is a `<section>` (region landmark) so the PanelHeader's */\n/* <header> is scoped and never exposed as a page banner — the same */\n/* shape RadiographPanel uses. It is also a keyboard-focusable scroll */\n/* region (tabIndex 0 + labelled focus ring). */\n/* */\n/* PHI: the visible name renders as text (fine), but the only */\n/* name-returning handle read is surfaced by document-preview.agent.ts */\n/* as a `safety: 'phi'` action — never in always-on state, never in a */\n/* data-* hook. In tabbed mode the handle reflects the ACTIVE tab. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n Fragment,\n useImperativeHandle,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n File as FileIcon,\n FileImage,\n FileText,\n Files,\n type LucideIcon,\n} from 'lucide-react';\nimport { Badge } from '../badge';\nimport { Card } from '../card';\nimport { EmptyState } from '../empty-state';\nimport { PanelHeader } from '../panel-header';\nimport { PDFViewer } from '../pdf-viewer';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../tabs';\nimport { useAgentRegistration } from '../../agent';\nimport { documentPreviewAgent } from './document-preview.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type DocumentPreviewSignatureStatus = 'none' | 'pending' | 'signed';\n\n/** Which render branch DocumentPreview is showing — structural, never PHI. */\nexport type DocumentPreviewKind = 'pdf' | 'image' | 'metadata' | 'empty';\n\nexport interface DocumentPreviewMetadata {\n /** Size in bytes. */\n size?: number;\n /** Display name of whoever created the document (host-supplied). */\n createdBy?: string;\n /** ISO 8601 timestamp the document was created. */\n createdAt?: string;\n /** ISO 8601 timestamp of the last modification. */\n updatedAt?: string;\n /** ISO 8601 timestamp a signature was requested from the patient. */\n signatureRequestedAt?: string;\n /** ISO 8601 timestamp the document was signed. */\n signedAt?: string;\n /** ISO 8601 timestamp the document was shared with the patient. */\n sharedAt?: string;\n /** Open document-type category (non-identifying), e.g. `'xray'`. */\n documentType?: string;\n /** Signature workflow state. */\n signatureStatus?: DocumentPreviewSignatureStatus;\n /** Clinical-document flag (host-defined semantics). */\n clinical?: boolean;\n /** ISO 8601 expiry (e.g. identification documents). */\n expiresAt?: string;\n}\n\n/**\n * A single previewable document. In multi-document mode each becomes a tab;\n * `id` is the tab value (never a patient name) and `name` is the tab label.\n */\nexport interface DocumentPreviewDocument {\n /** Stable, non-identifying id. Emitted as the tab value — never PHI. */\n id: string;\n /** Display name (PHI). Also the tab label in multi-document mode. */\n name: string;\n /** MIME type — drives the render branch and the fallback icon. */\n mimeType?: string;\n /** Resolved URL / data URI for the PDF or image viewer. */\n src?: string;\n /** Structural metadata rendered by the metadata-card branch. */\n metadata?: DocumentPreviewMetadata;\n}\n\nexport interface DocumentPreviewProps extends VariantProps<\n typeof documentPreviewVariants\n> {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Display name. Absent (and no `documents`) → empty state. PHI. */\n name?: string;\n /** MIME type — drives the render branch and the fallback icon. */\n mimeType?: string;\n /** Resolved URL / data URI for the PDF or image viewer. The host owns auth. */\n src?: string;\n /** Structural metadata rendered by the metadata-card branch. */\n metadata?: DocumentPreviewMetadata;\n /**\n * Multiple documents to preview as tabs — e.g. a multi-row selection. Two\n * or more render a tab per document (label = name) with the active one\n * shown below; a single entry renders without a tab strip. When non-empty\n * this takes precedence over the single-document props. Names are PHI.\n */\n documents?: DocumentPreviewDocument[];\n className?: string;\n}\n\nexport interface DocumentPreviewHandle {\n /** Which render branch is active — structural, safe for always-on reads. */\n getKind: () => DocumentPreviewKind;\n /** The active document's display name (PHI). Surfaced by the adapter as a `phi` action. */\n getName: () => string | undefined;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst documentPreviewVariants = cva(\n [\n 'ds:flex ds:h-full ds:min-h-0 ds:min-w-0 ds:flex-col ds:overflow-auto',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring',\n ].join(' '),\n);\n\nconst SIGNATURE_VARIANT: Record<\n Exclude<DocumentPreviewSignatureStatus, 'none'>,\n 'success' | 'warning'\n> = {\n signed: 'success',\n pending: 'warning',\n};\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nfunction resolveKind(\n name: string | undefined,\n mimeType: string | undefined,\n src: string | undefined,\n): DocumentPreviewKind {\n if (!name) return 'empty';\n const mime = mimeType ?? '';\n if (mime === 'application/pdf' && src) return 'pdf';\n if (mime.startsWith('image/') && src) return 'image';\n return 'metadata';\n}\n\n/** Fallback icon for the header / metadata card — a small MIME-family lookup. */\nfunction iconForMime(mimeType: string | undefined): LucideIcon {\n const mime = mimeType ?? '';\n if (mime.startsWith('image/')) return FileImage;\n if (\n mime === 'application/pdf' ||\n mime.startsWith('text/') ||\n mime.includes('word')\n ) {\n return FileText;\n }\n return FileIcon;\n}\n\nconst UNIT_KEYS = [\n 'documentPreview.units.bytes',\n 'documentPreview.units.kilobytes',\n 'documentPreview.units.megabytes',\n 'documentPreview.units.gigabytes',\n] as const;\n\nconst UNIT_FALLBACKS = ['B', 'KB', 'MB', 'GB'] as const;\n\nfunction formatBytes(\n bytes: number,\n locale: string,\n t: (key: string, fallback: string) => string,\n): string {\n let value = bytes;\n let unitIndex = 0;\n while (value >= 1024 && unitIndex < UNIT_FALLBACKS.length - 1) {\n value /= 1024;\n unitIndex++;\n }\n const formatted = new Intl.NumberFormat(locale, {\n maximumFractionDigits: unitIndex === 0 ? 0 : 1,\n }).format(value);\n return `${formatted} ${t(UNIT_KEYS[unitIndex], UNIT_FALLBACKS[unitIndex])}`;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const DocumentPreview = forwardRef<\n DocumentPreviewHandle,\n DocumentPreviewProps\n>(({ id, name, mimeType, src, metadata, documents, className }, ref) => {\n const { t, i18n } = useTranslation('ui');\n\n // Resolve the document list: an explicit `documents` list wins; otherwise\n // the single-document props form a one-item list; nothing → empty. The\n // synthetic single-doc id is never emitted as a tab value (a lone doc\n // renders without a tab strip), so falling back to the name is PHI-safe.\n const docs = useMemo<DocumentPreviewDocument[]>(() => {\n if (documents && documents.length > 0) return documents;\n if (name) return [{ id: id ?? name, name, mimeType, src, metadata }];\n return [];\n }, [documents, id, name, mimeType, src, metadata]);\n\n const isTabbed = docs.length > 1;\n\n // Active tab (multi mode). When the current id is stale after the selection\n // changes we fall back to the first document — no reconciling effect needed.\n const [activeId, setActiveId] = useState<string | undefined>(undefined);\n const activeDoc = docs.find((doc) => doc.id === activeId) ?? docs[0];\n\n const handle = useMemo<DocumentPreviewHandle>(\n () => ({\n getKind: () =>\n activeDoc\n ? resolveKind(activeDoc.name, activeDoc.mimeType, activeDoc.src)\n : 'empty',\n getName: () => activeDoc?.name,\n }),\n [activeDoc],\n );\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(documentPreviewAgent, handle, id);\n\n /* The per-document body — an elevated Card with a bounded preview viewport\n (pdf / image / placeholder) above an always-on Details block. The title is\n NOT rendered here (the PanelHeader owns it, or the tab label in multi mode). */\n const renderBody = (doc: DocumentPreviewDocument): ReactNode => {\n const kind = resolveKind(doc.name, doc.mimeType, doc.src);\n const meta = doc.metadata;\n const PlaceholderIcon = iconForMime(doc.mimeType);\n\n // Preview viewport — the rendered document, or a MIME-icon placeholder when\n // no source resolves. Bounded to a consistent aspect so the Details below\n // stay reachable in the rail.\n let viewport: ReactNode;\n if (kind === 'pdf' && doc.src) {\n viewport = (\n <PDFViewer\n src={doc.src}\n toolbarVariant=\"minimal\"\n // Name the embedded viewer after the document so it stays distinct\n // from the surrounding \"Document preview\" region (nested landmarks\n // must not share an accessible name). Mirrors visible header text.\n ariaLabel={doc.name}\n className=\"ds:h-full ds:w-full\"\n />\n );\n } else if (kind === 'image' && doc.src) {\n viewport = (\n <img\n src={doc.src}\n alt={t('documentPreview.imageAlt', 'Preview of {{name}}', {\n name: doc.name,\n })}\n className=\"ds:max-h-full ds:max-w-full ds:object-contain\"\n />\n );\n } else {\n viewport = (\n <span className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-sm)] ds:text-muted-foreground\">\n <PlaceholderIcon aria-hidden=\"true\" className=\"ds:size-10\" />\n <span className=\"type-body-sm\">\n {t('documentPreview.noPreview', 'No preview available.')}\n </span>\n </span>\n );\n }\n\n // Badges: type / clinical / signature status.\n const status = meta?.signatureStatus;\n const hasBadges =\n Boolean(meta?.documentType) ||\n Boolean(meta?.clinical) ||\n (status !== undefined && status !== 'none');\n\n // Detail rows — every structural field the host supplies, so nothing is\n // dropped when a real preview renders. Only present fields render a row.\n const fmtDate = (iso: string): string =>\n new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }).format(\n new Date(iso),\n );\n const rows: Array<{ key: string; label: string; value: string }> = [];\n if (meta?.createdBy)\n rows.push({\n key: 'createdBy',\n label: t('documentPreview.fields.createdBy', 'Created by'),\n value: meta.createdBy,\n });\n if (meta?.createdAt)\n rows.push({\n key: 'created',\n label: t('documentPreview.fields.created', 'Created'),\n value: fmtDate(meta.createdAt),\n });\n if (meta?.updatedAt)\n rows.push({\n key: 'modified',\n label: t('documentPreview.fields.modified', 'Modified'),\n value: fmtDate(meta.updatedAt),\n });\n if (meta?.signatureRequestedAt)\n rows.push({\n key: 'signatureRequested',\n label: t(\n 'documentPreview.fields.signatureRequested',\n 'Signature requested',\n ),\n value: fmtDate(meta.signatureRequestedAt),\n });\n if (meta?.signedAt)\n rows.push({\n key: 'signed',\n label: t('documentPreview.fields.signed', 'Signed'),\n value: fmtDate(meta.signedAt),\n });\n if (meta?.sharedAt)\n rows.push({\n key: 'sharedWithPatient',\n label: t(\n 'documentPreview.fields.sharedWithPatient',\n 'Shared with patient',\n ),\n value: fmtDate(meta.sharedAt),\n });\n if (meta?.size !== undefined)\n rows.push({\n key: 'size',\n label: t('documentPreview.fields.size', 'Size'),\n value: formatBytes(meta.size, i18n.language, t),\n });\n if (meta?.expiresAt)\n rows.push({\n key: 'expires',\n label: t('documentPreview.fields.expires', 'Expires'),\n value: fmtDate(meta.expiresAt),\n });\n\n const hasDetails = hasBadges || rows.length > 0;\n\n return (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <Card\n variant=\"elevated\"\n className=\"ds:flex ds:flex-col ds:overflow-hidden\"\n >\n <div className=\"ds:flex ds:aspect-[4/3] ds:min-h-0 ds:items-center ds:justify-center ds:overflow-hidden ds:border-b ds:border-[color:var(--card-border)] ds:bg-muted\">\n {viewport}\n </div>\n {hasDetails && (\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <h3 className=\"type-eyebrow ds:m-0 ds:text-muted-foreground\">\n {t('documentPreview.detailsTitle', 'Details')}\n </h3>\n {hasBadges && (\n <span className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {meta?.documentType && (\n <Badge variant=\"neutral\" size=\"sm\">\n {meta.documentType}\n </Badge>\n )}\n {meta?.clinical && (\n <Badge variant=\"info\" size=\"sm\">\n {t('documentPreview.clinical', 'Clinical')}\n </Badge>\n )}\n {status && status !== 'none' && (\n <Badge\n variant={SIGNATURE_VARIANT[status]}\n size=\"sm\"\n withDot\n >\n {t(`documentPreview.signature.${status}`, status)}\n </Badge>\n )}\n </span>\n )}\n {rows.length > 0 && (\n <dl className=\"ds:grid ds:grid-cols-[auto_1fr] ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-xs)] type-body-sm\">\n {rows.map((row) => (\n <Fragment key={row.key}>\n <dt className=\"ds:text-muted-foreground\">{row.label}</dt>\n <dd className=\"ds:m-0\">{row.value}</dd>\n </Fragment>\n ))}\n </dl>\n )}\n </Card.Body>\n )}\n </Card>\n </div>\n );\n };\n\n // Header: a MIME icon + the document name for a single doc; a Files glyph +\n // a count badge (RadiographPanel's title-plus-badge shape) when tabbed.\n const HeaderMimeIcon = iconForMime(activeDoc?.mimeType);\n const headerIcon = isTabbed ? (\n <Files aria-hidden=\"true\" />\n ) : (\n <HeaderMimeIcon aria-hidden=\"true\" />\n );\n const headerTitle: ReactNode = isTabbed ? (\n <>\n {t('documentPreview.multiTitle', 'Documents')}\n <Badge variant=\"neutral\" size=\"sm\">\n {docs.length}\n </Badge>\n </>\n ) : (\n activeDoc?.name\n );\n\n let content: ReactNode;\n if (docs.length === 0) {\n content = (\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={t('documentPreview.emptyTitle', 'No document selected')}\n description={t(\n 'documentPreview.emptyDescription',\n 'Select a document to preview it here.',\n )}\n />\n );\n } else if (isTabbed) {\n content = (\n <Tabs\n value={activeDoc?.id ?? ''}\n onValueChange={setActiveId}\n variant=\"underlined\"\n size=\"sm\"\n // Each tab shows its full file name when there's room and shrinks with\n // an ellipsis only when the tabs would otherwise overflow the width\n // (`min-inline-size:0` lets a tab shrink below its content; the label\n // truncates). The full name stays the accessible name and shows in the\n // body, so nothing is lost.\n className=\"ds:min-h-0 ds:flex-1 ds:pt-[var(--spacing-sm)]\"\n >\n <TabsList\n aria-label={t('documentPreview.tabsLabel', 'Selected documents')}\n className=\"ds:gap-[var(--spacing-sm)]\"\n >\n {docs.map((doc) => {\n const TabIcon = iconForMime(doc.mimeType);\n return (\n <TabsTrigger\n key={doc.id}\n value={doc.id}\n // Match the header glyph: same 16px size (never larger) and the\n // accent tint that marks a file across the grid and the rail.\n icon={\n <TabIcon\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:text-[color:var(--accent)]\"\n />\n }\n className=\"ds:[min-inline-size:0]\"\n >\n <span className=\"ds:block ds:truncate ds:[min-inline-size:0]\">\n {doc.name}\n </span>\n </TabsTrigger>\n );\n })}\n </TabsList>\n {docs.map((doc) => (\n <TabsContent\n key={doc.id}\n value={doc.id}\n className=\"ds:min-h-0 ds:flex-1\"\n >\n {renderBody(doc)}\n </TabsContent>\n ))}\n </Tabs>\n );\n } else {\n content = renderBody(activeDoc);\n }\n\n return (\n <section\n data-component=\"document-preview\"\n data-component-id={id}\n // The preview body scrolls (PDF pages, tall images, long metadata), so\n // the region needs a keyboard tab stop (axe scrollable-region-focusable).\n // A labelled <section> is a region landmark, which also scopes the\n // PanelHeader's <header> so it is never exposed as a page banner.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- keyboard-focusable scroll region (see comment above)\n tabIndex={0}\n aria-label={t('documentPreview.regionLabel', 'Document preview')}\n className={documentPreviewVariants({ className })}\n >\n {docs.length > 0 && (\n <PanelHeader sticky icon={headerIcon} title={headerTitle} />\n )}\n {content}\n </section>\n );\n});\n\nDocumentPreview.displayName = 'DocumentPreview';\n"],"names":["__iconNode","Files","createLucideIcon","documentPreviewAgent","handle","documentPreviewVariants","cva","SIGNATURE_VARIANT","resolveKind","name","mimeType","src","mime","iconForMime","FileImage","FileText","FileIcon","UNIT_KEYS","UNIT_FALLBACKS","formatBytes","bytes","locale","t","value","unitIndex","DocumentPreview","forwardRef","id","metadata","documents","className","ref","i18n","useTranslation","docs","useMemo","isTabbed","activeId","setActiveId","useState","activeDoc","doc","useImperativeHandle","useAgentRegistration","renderBody","kind","meta","PlaceholderIcon","viewport","jsx","PDFViewer","jsxs","status","hasBadges","fmtDate","iso","rows","hasDetails","Card","Badge","row","Fragment","HeaderMimeIcon","headerIcon","headerTitle","content","EmptyState","Tabs","TabsList","TabIcon","TabsTrigger","TabsContent","PanelHeader"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -3,7 +3,7 @@ import { forwardRef as Fe, useId as Me, useRef as m, useState as W, useEffect as
|
|
|
3
3
|
import { c as k } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as Ye } from "react-i18next";
|
|
5
5
|
import { B as K } from "./button-D-MQxsA_.js";
|
|
6
|
-
import { A as ae } from "./alert-
|
|
6
|
+
import { A as ae } from "./alert-DdDpOi-P.js";
|
|
7
7
|
import { F as Xe } from "./file-upload-CxjCs7TX.js";
|
|
8
8
|
import { u as Ze } from "./use-controllable-state-BiY4xTzM.js";
|
|
9
9
|
import { u as $e } from "./registry-DvAUVLHh.js";
|
|
@@ -677,4 +677,4 @@ export {
|
|
|
677
677
|
or as D,
|
|
678
678
|
Qe as d
|
|
679
679
|
};
|
|
680
|
-
//# sourceMappingURL=document-scanner-
|
|
680
|
+
//# sourceMappingURL=document-scanner-CVPVLK7z.js.map
|