@alfadocs/ui-kit-debug 1.56.0 → 1.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{address-fields-BfjxS05Z.js → address-fields-CJtu7LQU.js} +2 -2
- package/dist/_chunks/{address-fields-BfjxS05Z.js.map → address-fields-CJtu7LQU.js.map} +1 -1
- package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js → ai-credits-notice-ktklr8fy.js} +2 -2
- package/dist/_chunks/{ai-credits-notice-BoNJtOuE.js.map → ai-credits-notice-ktklr8fy.js.map} +1 -1
- package/dist/_chunks/ai-permission-notice-DyuEGwAt.js +206 -0
- package/dist/_chunks/ai-permission-notice-DyuEGwAt.js.map +1 -0
- package/dist/_chunks/alia-sidebar-dybRpWml.js +1284 -0
- package/dist/_chunks/alia-sidebar-dybRpWml.js.map +1 -0
- package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js → anamnesis-summary-rows-M-FUkw9p.js} +6 -6
- package/dist/_chunks/{anamnesis-summary-rows-CQ-XGr0T.js.map → anamnesis-summary-rows-M-FUkw9p.js.map} +1 -1
- package/dist/_chunks/{app-frame-B-0O9CrU.js → app-frame-CqmDh2v5.js} +2 -2
- package/dist/_chunks/{app-frame-B-0O9CrU.js.map → app-frame-CqmDh2v5.js.map} +1 -1
- package/dist/_chunks/{appointment-peek-BIZaDeCi.js → appointment-peek-WvNbE4JG.js} +2 -2
- package/dist/_chunks/{appointment-peek-BIZaDeCi.js.map → appointment-peek-WvNbE4JG.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-DmqYEIT9.js → appointment-timeline-Z0494xO-.js} +2 -2
- package/dist/_chunks/{appointment-timeline-DmqYEIT9.js.map → appointment-timeline-Z0494xO-.js.map} +1 -1
- package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js → balance-badge-cell-CGoJZlKf.js} +3 -3
- package/dist/_chunks/{balance-badge-cell-DmDcXw0c.js.map → balance-badge-cell-CGoJZlKf.js.map} +1 -1
- package/dist/_chunks/{booking-WyNGKPE2.js → booking-CiFSAMR-.js} +4 -4
- package/dist/_chunks/{booking-WyNGKPE2.js.map → booking-CiFSAMR-.js.map} +1 -1
- package/dist/_chunks/{calculator-dialog-pCPWta7h.js → calculator-dialog-CzQv03p0.js} +2 -2
- package/dist/_chunks/{calculator-dialog-pCPWta7h.js.map → calculator-dialog-CzQv03p0.js.map} +1 -1
- package/dist/_chunks/{calendar-workspace-Du2ryaI-.js → calendar-workspace-DNHzjG7O.js} +19 -19
- package/dist/_chunks/calendar-workspace-DNHzjG7O.js.map +1 -0
- package/dist/_chunks/{care-plan-card-Ddjh5Doc.js → care-plan-card-DxrRLRdW.js} +2 -2
- package/dist/_chunks/{care-plan-card-Ddjh5Doc.js.map → care-plan-card-DxrRLRdW.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-DUX_SVvF.js → care-plan-header-BMwZIgHJ.js} +2 -2
- package/dist/_chunks/{care-plan-header-DUX_SVvF.js.map → care-plan-header-BMwZIgHJ.js.map} +1 -1
- package/dist/_chunks/{chart-HsF1KHbx.js → chart-ZMkX-Gqy.js} +338 -341
- package/dist/_chunks/chart-ZMkX-Gqy.js.map +1 -0
- package/dist/_chunks/{city-input-BC_nYINn.js → city-input-3J3bz9EO.js} +2 -2
- package/dist/_chunks/{city-input-BC_nYINn.js.map → city-input-3J3bz9EO.js.map} +1 -1
- package/dist/_chunks/{clinical-note-card-14JIoUR0.js → clinical-note-card-hx939bvw.js} +2 -2
- package/dist/_chunks/{clinical-note-card-14JIoUR0.js.map → clinical-note-card-hx939bvw.js.map} +1 -1
- package/dist/_chunks/{color-picker-BRQ4Y9SO.js → color-picker-BsggJovx.js} +128 -123
- package/dist/_chunks/color-picker-BsggJovx.js.map +1 -0
- package/dist/_chunks/{contact-card-CmK05vNb.js → contact-card-fHBMwEsx.js} +2 -2
- package/dist/_chunks/{contact-card-CmK05vNb.js.map → contact-card-fHBMwEsx.js.map} +1 -1
- package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js → contact-profile-card-CMyBYgRR.js} +2 -2
- package/dist/_chunks/{contact-profile-card-Ci8lBQ6a.js.map → contact-profile-card-CMyBYgRR.js.map} +1 -1
- package/dist/_chunks/{control-room-rail-Tx2jW250.js → control-room-rail-CJ85HkS2.js} +2 -2
- package/dist/_chunks/{control-room-rail-Tx2jW250.js.map → control-room-rail-CJ85HkS2.js.map} +1 -1
- package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js → cycle-calculator-Cww9DzIa.js} +2 -2
- package/dist/_chunks/{cycle-calculator-Dgfqr4Q4.js.map → cycle-calculator-Cww9DzIa.js.map} +1 -1
- package/dist/_chunks/dashboard-grid-Cs7cJAsA.js +933 -0
- package/dist/_chunks/dashboard-grid-Cs7cJAsA.js.map +1 -0
- package/dist/_chunks/{data-table-D8fuhqO1.js → data-table-Yn5xiGzs.js} +3 -3
- package/dist/_chunks/{data-table-D8fuhqO1.js.map → data-table-Yn5xiGzs.js.map} +1 -1
- package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js → data-table-tabs-CHYAAeHy.js} +2 -2
- package/dist/_chunks/{data-table-tabs-Xhg5G0gU.js.map → data-table-tabs-CHYAAeHy.js.map} +1 -1
- package/dist/_chunks/{date-picker-wRAcq2lt.js → date-picker-BSZuKo13.js} +69 -62
- package/dist/_chunks/date-picker-BSZuKo13.js.map +1 -0
- package/dist/_chunks/{date-range-picker-CtUOI38x.js → date-range-picker-CFk-5O3R.js} +176 -171
- package/dist/_chunks/date-range-picker-CFk-5O3R.js.map +1 -0
- package/dist/_chunks/{date-time-picker-CLeLKuv9.js → date-time-picker-CjxTkblD.js} +92 -85
- package/dist/_chunks/date-time-picker-CjxTkblD.js.map +1 -0
- package/dist/_chunks/{dialog-CUzbnKLw.js → dialog-Dn-iQ0Jp.js} +2 -2
- package/dist/_chunks/{dialog-CUzbnKLw.js.map → dialog-Dn-iQ0Jp.js.map} +1 -1
- package/dist/_chunks/{document-preview-uoTekVR7.js → document-preview-CHGGG0l_.js} +2 -2
- package/dist/_chunks/{document-preview-uoTekVR7.js.map → document-preview-CHGGG0l_.js.map} +1 -1
- package/dist/_chunks/{due-date-calculator-CSjklbyw.js → due-date-calculator-D_qFUiHp.js} +2 -2
- package/dist/_chunks/{due-date-calculator-CSjklbyw.js.map → due-date-calculator-D_qFUiHp.js.map} +1 -1
- package/dist/_chunks/{entity-summary-DcB0fIiv.js → entity-summary-CWcCSThK.js} +2 -2
- package/dist/_chunks/{entity-summary-DcB0fIiv.js.map → entity-summary-CWcCSThK.js.map} +1 -1
- package/dist/_chunks/{face-scheme-BicuUA2K.js → face-scheme-DSKDdIsb.js} +2 -2
- package/dist/_chunks/{face-scheme-BicuUA2K.js.map → face-scheme-DSKDdIsb.js.map} +1 -1
- package/dist/_chunks/{file-manager-Cc_uO8r2.js → file-manager-DEtkQR1F.js} +4 -4
- package/dist/_chunks/{file-manager-Cc_uO8r2.js.map → file-manager-DEtkQR1F.js.map} +1 -1
- package/dist/_chunks/{forgot-password-form-DEx-M_QR.js → forgot-password-form-CEqOmNuX.js} +2 -2
- package/dist/_chunks/{forgot-password-form-DEx-M_QR.js.map → forgot-password-form-CEqOmNuX.js.map} +1 -1
- package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js → gestational-age-calculator-CZi43xKG.js} +2 -2
- package/dist/_chunks/{gestational-age-calculator-DqVeJke2.js.map → gestational-age-calculator-CZi43xKG.js.map} +1 -1
- package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js → hcg-doubling-Ccvh7OaU.js} +2 -2
- package/dist/_chunks/{hcg-doubling-BIYyI2Yo.js.map → hcg-doubling-Ccvh7OaU.js.map} +1 -1
- package/dist/_chunks/{header-settings-ge_3gYEq.js → header-settings-BMcCx2LC.js} +2 -2
- package/dist/_chunks/{header-settings-ge_3gYEq.js.map → header-settings-BMcCx2LC.js.map} +1 -1
- package/dist/_chunks/{heatmap-Gf9r7Tn1.js → heatmap-DiyOSQk9.js} +2 -2
- package/dist/_chunks/{heatmap-Gf9r7Tn1.js.map → heatmap-DiyOSQk9.js.map} +1 -1
- package/dist/_chunks/{help-me-write-templates-fV-Apf72.js → help-me-write-templates-CM1p6qkm.js} +3 -3
- package/dist/_chunks/{help-me-write-templates-fV-Apf72.js.map → help-me-write-templates-CM1p6qkm.js.map} +1 -1
- package/dist/_chunks/{hover-card-BnTueNS2.js → hover-card-U_ZYoh1n.js} +201 -187
- package/dist/_chunks/hover-card-U_ZYoh1n.js.map +1 -0
- package/dist/_chunks/{icon-picker-DWrqmI1c.js → icon-picker-rOFTawXk.js} +3 -3
- package/dist/_chunks/{icon-picker-DWrqmI1c.js.map → icon-picker-rOFTawXk.js.map} +1 -1
- package/dist/_chunks/{info-tip-B0jmIt6M.js → info-tip-CJpNpzZe.js} +2 -2
- package/dist/_chunks/{info-tip-B0jmIt6M.js.map → info-tip-CJpNpzZe.js.map} +1 -1
- package/dist/_chunks/{kit-extensions-Byfxy6sy.js → kit-extensions-DYVxWcqv.js} +4 -4
- package/dist/_chunks/{kit-extensions-Byfxy6sy.js.map → kit-extensions-DYVxWcqv.js.map} +1 -1
- package/dist/_chunks/{link-cell-renderer-TeJNvymP.js → link-cell-renderer-C1wOyxDF.js} +3 -3
- package/dist/_chunks/{link-cell-renderer-TeJNvymP.js.map → link-cell-renderer-C1wOyxDF.js.map} +1 -1
- package/dist/_chunks/link-gRw3NtOt.js +137 -0
- package/dist/_chunks/link-gRw3NtOt.js.map +1 -0
- package/dist/_chunks/{list-RRN2TJ_7.js → list-CNnn7DOD.js} +75 -73
- package/dist/_chunks/list-CNnn7DOD.js.map +1 -0
- package/dist/_chunks/{locale-picker-DfNSdOpy.js → locale-picker-BGfrZyTw.js} +2 -2
- package/dist/_chunks/{locale-picker-DfNSdOpy.js.map → locale-picker-BGfrZyTw.js.map} +1 -1
- package/dist/_chunks/{login-dev-card-DmZ1B0lB.js → login-dev-card-CIim81VB.js} +2 -2
- package/dist/_chunks/{login-dev-card-DmZ1B0lB.js.map → login-dev-card-CIim81VB.js.map} +1 -1
- package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js +613 -0
- package/dist/_chunks/marketplace-app-shell-CSDmGLPW.js.map +1 -0
- package/dist/_chunks/{message-tray-BB95DA82.js → message-tray-DmU0poD7.js} +76 -69
- package/dist/_chunks/message-tray-DmU0poD7.js.map +1 -0
- package/dist/_chunks/{nav-grid-BqCPH8sm.js → nav-grid-Byx8PxuB.js} +2 -2
- package/dist/_chunks/{nav-grid-BqCPH8sm.js.map → nav-grid-Byx8PxuB.js.map} +1 -1
- package/dist/_chunks/navigation-dismiss-B1mcW1CT.js +9 -0
- package/dist/_chunks/navigation-dismiss-B1mcW1CT.js.map +1 -0
- package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js +89 -0
- package/dist/_chunks/non-modal-tab-exit-j3CPOuE3.js.map +1 -0
- package/dist/_chunks/{note-attachment-I1NLoeRZ.js → note-attachment-Bt2cddsZ.js} +2 -2
- package/dist/_chunks/{note-attachment-I1NLoeRZ.js.map → note-attachment-Bt2cddsZ.js.map} +1 -1
- package/dist/_chunks/{note-timeline-CsY8YOE7.js → note-timeline-CX9nAgAR.js} +2 -2
- package/dist/_chunks/{note-timeline-CsY8YOE7.js.map → note-timeline-CX9nAgAR.js.map} +1 -1
- package/dist/_chunks/{notes-panel-DceRhthG.js → notes-panel-DHLHsxpW.js} +4 -4
- package/dist/_chunks/{notes-panel-DceRhthG.js.map → notes-panel-DHLHsxpW.js.map} +1 -1
- package/dist/_chunks/{notification-tray-__sJXnsz.js → notification-tray-DPU-Xg0i.js} +83 -76
- package/dist/_chunks/notification-tray-DPU-Xg0i.js.map +1 -0
- package/dist/_chunks/{panel-subview-BT-Apwgb.js → panel-subview-D4o6ar6_.js} +61 -47
- package/dist/_chunks/panel-subview-D4o6ar6_.js.map +1 -0
- package/dist/_chunks/{patient-details-DsTtjpuX.js → patient-details-BCaVuaXz.js} +2 -2
- package/dist/_chunks/{patient-details-DsTtjpuX.js.map → patient-details-BCaVuaXz.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-BvZ9luz-.js → patient-field-row-jcRSTrp4.js} +7 -7
- package/dist/_chunks/{patient-field-row-BvZ9luz-.js.map → patient-field-row-jcRSTrp4.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-9nQWTQf6.js → patient-summary-card-kQIfPQOE.js} +4 -4
- package/dist/_chunks/{patient-summary-card-9nQWTQf6.js.map → patient-summary-card-kQIfPQOE.js.map} +1 -1
- package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js → payment-automation-upsell-C4wHOxsp.js} +2 -2
- package/dist/_chunks/{payment-automation-upsell-DiHovmUL.js.map → payment-automation-upsell-C4wHOxsp.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-CwDpwXUC.js → payment-request-card-DAniJNLX.js} +2 -2
- package/dist/_chunks/{payment-request-card-CwDpwXUC.js.map → payment-request-card-DAniJNLX.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-C3minW5b.js → pdf-viewer-CNQxa4tv.js} +396 -391
- package/dist/_chunks/pdf-viewer-CNQxa4tv.js.map +1 -0
- package/dist/_chunks/{phone-input-DxkHMYmu.js → phone-input-O9camxkq.js} +156 -151
- package/dist/_chunks/phone-input-O9camxkq.js.map +1 -0
- package/dist/_chunks/popover-BG75rYjN.js +367 -0
- package/dist/_chunks/popover-BG75rYjN.js.map +1 -0
- package/dist/_chunks/{practice-results-Dhbo-fc_.js → practice-results-D07wgCqV.js} +2 -2
- package/dist/_chunks/{practice-results-Dhbo-fc_.js.map → practice-results-D07wgCqV.js.map} +1 -1
- package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js → pregnancy-dating-BFzv9g1N.js} +2 -2
- package/dist/_chunks/{pregnancy-dating-Bfu0Cq4H.js.map → pregnancy-dating-BFzv9g1N.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-BSSiGGG4.js → product-hub-panel-DCYX0rPG.js} +103 -96
- package/dist/_chunks/product-hub-panel-DCYX0rPG.js.map +1 -0
- package/dist/_chunks/{public-footer-CxpG6J1M.js → public-footer-ZWTEG1Rq.js} +2 -2
- package/dist/_chunks/{public-footer-CxpG6J1M.js.map → public-footer-ZWTEG1Rq.js.map} +1 -1
- package/dist/_chunks/{public-header.agent-pr2hyiND.js → public-header.agent-C1SlVSYt.js} +2 -2
- package/dist/_chunks/{public-header.agent-pr2hyiND.js.map → public-header.agent-C1SlVSYt.js.map} +1 -1
- package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js → radiograph-panel.agent-DyqbTECc.js} +4 -4
- package/dist/_chunks/{radiograph-panel.agent-DkUokbEa.js.map → radiograph-panel.agent-DyqbTECc.js.map} +1 -1
- package/dist/_chunks/{registration-form-D7iNqMBF.js → registration-form-DrSR9Sjk.js} +4 -4
- package/dist/_chunks/{registration-form-D7iNqMBF.js.map → registration-form-DrSR9Sjk.js.map} +1 -1
- package/dist/_chunks/{rich-text-editor-CkFfmA3v.js → rich-text-editor-UgXri8h6.js} +490 -485
- package/dist/_chunks/rich-text-editor-UgXri8h6.js.map +1 -0
- package/dist/_chunks/{scroll-area-ZtFCv9K7.js → scroll-area-CY5SLYNw.js} +104 -74
- package/dist/_chunks/scroll-area-CY5SLYNw.js.map +1 -0
- package/dist/_chunks/{search-bar-DQJS0wJN.js → search-bar-mA4bPe3t.js} +294 -255
- package/dist/_chunks/search-bar-mA4bPe3t.js.map +1 -0
- package/dist/_chunks/{sheet-C7SwIxwB.js → sheet-Dtjk0CVv.js} +3 -3
- package/dist/_chunks/{sheet-C7SwIxwB.js.map → sheet-Dtjk0CVv.js.map} +1 -1
- package/dist/_chunks/sidebar-D4Wllqfz.js +2029 -0
- package/dist/_chunks/sidebar-D4Wllqfz.js.map +1 -0
- package/dist/_chunks/{sign-document-B6HlyCGV.js → sign-document-D4iHS_Ug.js} +2 -2
- package/dist/_chunks/{sign-document-B6HlyCGV.js.map → sign-document-D4iHS_Ug.js.map} +1 -1
- package/dist/_chunks/{signature-request-DhbpB9N9.js → signature-request-dAVgE0_5.js} +3 -3
- package/dist/_chunks/{signature-request-DhbpB9N9.js.map → signature-request-dAVgE0_5.js.map} +1 -1
- package/dist/_chunks/{signed-out-frame-B2GTIeqA.js → signed-out-frame-DOJpobp8.js} +3 -3
- package/dist/_chunks/{signed-out-frame-B2GTIeqA.js.map → signed-out-frame-DOJpobp8.js.map} +1 -1
- package/dist/_chunks/{state-backed-text-input-DECQy5aA.js → state-backed-text-input-Cgh4ms3p.js} +2 -2
- package/dist/_chunks/{state-backed-text-input-DECQy5aA.js.map → state-backed-text-input-Cgh4ms3p.js.map} +1 -1
- package/dist/_chunks/{task-editor-ByyRu29Y.js → task-editor-BflEZmcF.js} +7 -6
- package/dist/_chunks/task-editor-BflEZmcF.js.map +1 -0
- package/dist/_chunks/{tool-rail-Bwyuw_Ot.js → tool-rail-CTq1KwxW.js} +115 -114
- package/dist/_chunks/{tool-rail-Bwyuw_Ot.js.map → tool-rail-CTq1KwxW.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js → use-appointment-details-read-izwoXh-G.js} +8 -8
- package/dist/_chunks/{use-appointment-details-read-JsDM48tf.js.map → use-appointment-details-read-izwoXh-G.js.map} +1 -1
- package/dist/_chunks/use-state-backed-input-DhRQo6gM.js +57 -0
- package/dist/_chunks/use-state-backed-input-DhRQo6gM.js.map +1 -0
- package/dist/_chunks/{voice-control-panel-Bg1eklL0.js → voice-control-panel-an-bpQfF.js} +3 -3
- package/dist/_chunks/{voice-control-panel-Bg1eklL0.js.map → voice-control-panel-an-bpQfF.js.map} +1 -1
- package/dist/_chunks/{widget-picker-DXYBMTfe.js → widget-picker-DlJOgYrZ.js} +80 -57
- package/dist/_chunks/widget-picker-DlJOgYrZ.js.map +1 -0
- package/dist/agent-catalog.json +3 -3
- package/dist/agent-i18n/en.json +1 -1
- package/dist/components/_shared/navigation-dismiss.d.ts +8 -0
- package/dist/components/_shared/navigation-dismiss.d.ts.map +1 -0
- package/dist/components/_shared/non-modal-tab-exit.d.ts +15 -4
- package/dist/components/_shared/non-modal-tab-exit.d.ts.map +1 -1
- package/dist/components/_shared/use-state-backed-input.d.ts +3 -2
- package/dist/components/_shared/use-state-backed-input.d.ts.map +1 -1
- package/dist/components/address-fields/index.js +1 -1
- package/dist/components/ai-credits-notice/index.js +1 -1
- package/dist/components/ai-permission-notice/ai-permission-notice.d.ts +32 -0
- package/dist/components/ai-permission-notice/ai-permission-notice.d.ts.map +1 -1
- package/dist/components/ai-permission-notice/index.d.ts +1 -1
- package/dist/components/ai-permission-notice/index.d.ts.map +1 -1
- package/dist/components/ai-permission-notice/index.js +1 -1
- package/dist/components/app-frame/index.js +1 -1
- 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/booking/index.js +1 -1
- package/dist/components/calculator-dialog/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/chart/chart.d.ts +5 -5
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/city-input/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/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/index.js +1 -1
- package/dist/components/cycle-calculator/index.js +1 -1
- package/dist/components/dashboard-grid/dashboard-grid.d.ts +33 -8
- package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -1
- package/dist/components/dashboard-grid/index.js +1 -1
- package/dist/components/data-table/index.js +2 -2
- package/dist/components/data-table-tabs/index.js +1 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/date-time-picker.d.ts.map +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/due-date-calculator/index.js +1 -1
- package/dist/components/entity-summary/index.js +1 -1
- package/dist/components/face-scheme/index.js +1 -1
- package/dist/components/file-manager/index.js +1 -1
- package/dist/components/gestational-age-calculator/index.js +1 -1
- package/dist/components/hcg-doubling/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/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card/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/link/index.js +1 -1
- package/dist/components/link/link.d.ts +5 -3
- package/dist/components/link/link.d.ts.map +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.d.ts.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts.map +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-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +1 -1
- package/dist/components/panel-subview/index.js +1 -1
- package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
- package/dist/components/patient-details/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/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.d.ts +1 -1
- package/dist/components/popover/popover.d.ts.map +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/pregnancy-dating/index.js +1 -1
- package/dist/components/product-hub-tray/index.js +1 -1
- package/dist/components/product-hub-tray/product-hub-tray.d.ts.map +1 -1
- package/dist/components/public-footer/index.js +1 -1
- package/dist/components/public-header/index.js +1 -1
- package/dist/components/radiograph-panel/index.js +1 -1
- package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
- package/dist/components/rich-text-editor/index.js +2 -2
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/scroll-area/scroll-area.d.ts +6 -5
- package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-bar/search-bar.d.ts +1 -1
- package/dist/components/search-bar/search-bar.d.ts.map +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sidebar/index.d.ts +1 -1
- package/dist/components/sidebar/index.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar-move.d.ts +88 -0
- package/dist/components/sidebar/sidebar-move.d.ts.map +1 -0
- package/dist/components/sidebar/sidebar.d.ts +26 -1
- package/dist/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/task-editor/task-editor.d.ts.map +1 -1
- package/dist/components/tool-rail/index.js +1 -1
- package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
- package/dist/components/voice-control-panel/index.js +1 -1
- package/dist/components/widget-picker/index.js +1 -1
- package/dist/components/widget-picker/widget-picker.d.ts.map +1 -1
- package/dist/host-compat.css +2 -1
- package/dist/i18n/locales/ar.d.ts +24 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +26 -2
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +24 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +26 -2
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +24 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +26 -2
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +24 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +26 -2
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +24 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +26 -2
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +24 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +26 -2
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +24 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +26 -2
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +24 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +26 -2
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +24 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +26 -2
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +24 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +26 -2
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +24 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +26 -2
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +24 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +26 -2
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +24 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +26 -2
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +24 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +26 -2
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +24 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +26 -2
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +24 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +26 -2
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +24 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +26 -2
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +24 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +26 -2
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +204 -203
- package/dist/locales/ar.json +26 -2
- package/dist/locales/de.json +26 -2
- package/dist/locales/el.json +26 -2
- package/dist/locales/en.json +26 -2
- package/dist/locales/es.json +26 -2
- package/dist/locales/fr.json +26 -2
- package/dist/locales/hi.json +26 -2
- package/dist/locales/it.json +26 -2
- package/dist/locales/ja.json +26 -2
- package/dist/locales/nl.json +26 -2
- package/dist/locales/pl.json +26 -2
- package/dist/locales/pt.json +26 -2
- package/dist/locales/ro.json +26 -2
- package/dist/locales/ru.json +26 -2
- package/dist/locales/sq.json +26 -2
- package/dist/locales/sv.json +26 -2
- package/dist/locales/tr.json +26 -2
- package/dist/locales/zh.json +26 -2
- package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts +10 -13
- package/dist/patterns/alia-assistant/alia-asteroid-icon.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-chat-surface.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/alia-popout.d.ts +5 -3
- package/dist/patterns/alia-assistant/alia-popout.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.d.ts +2 -0
- package/dist/patterns/alia-assistant/index.d.ts.map +1 -1
- package/dist/patterns/alia-assistant/index.js +6 -5
- 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 +40 -10
- 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 +1 -1
- package/package.json +1 -1
- package/dist/_chunks/ai-permission-notice-5vpblPCx.js +0 -171
- package/dist/_chunks/ai-permission-notice-5vpblPCx.js.map +0 -1
- package/dist/_chunks/alia-sidebar-DOei4Iyu.js +0 -1183
- package/dist/_chunks/alia-sidebar-DOei4Iyu.js.map +0 -1
- package/dist/_chunks/calendar-workspace-Du2ryaI-.js.map +0 -1
- package/dist/_chunks/chart-HsF1KHbx.js.map +0 -1
- package/dist/_chunks/color-picker-BRQ4Y9SO.js.map +0 -1
- package/dist/_chunks/dashboard-grid-DfEY2qci.js +0 -844
- package/dist/_chunks/dashboard-grid-DfEY2qci.js.map +0 -1
- package/dist/_chunks/date-picker-wRAcq2lt.js.map +0 -1
- package/dist/_chunks/date-range-picker-CtUOI38x.js.map +0 -1
- package/dist/_chunks/date-time-picker-CLeLKuv9.js.map +0 -1
- package/dist/_chunks/hover-card-BnTueNS2.js.map +0 -1
- package/dist/_chunks/link-2HokYuIi.js +0 -130
- package/dist/_chunks/link-2HokYuIi.js.map +0 -1
- package/dist/_chunks/list-RRN2TJ_7.js.map +0 -1
- package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js +0 -541
- package/dist/_chunks/marketplace-app-shell-Dcx-JEjg.js.map +0 -1
- package/dist/_chunks/message-tray-BB95DA82.js.map +0 -1
- package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js +0 -65
- package/dist/_chunks/non-modal-tab-exit-D2Bd93Bq.js.map +0 -1
- package/dist/_chunks/notification-tray-__sJXnsz.js.map +0 -1
- package/dist/_chunks/panel-subview-BT-Apwgb.js.map +0 -1
- package/dist/_chunks/pdf-viewer-C3minW5b.js.map +0 -1
- package/dist/_chunks/phone-input-DxkHMYmu.js.map +0 -1
- package/dist/_chunks/popover-BI3oV3eY.js +0 -305
- package/dist/_chunks/popover-BI3oV3eY.js.map +0 -1
- package/dist/_chunks/product-hub-panel-BSSiGGG4.js.map +0 -1
- package/dist/_chunks/rich-text-editor-CkFfmA3v.js.map +0 -1
- package/dist/_chunks/scroll-area-ZtFCv9K7.js.map +0 -1
- package/dist/_chunks/search-bar-DQJS0wJN.js.map +0 -1
- package/dist/_chunks/sidebar-DLsG2AIk.js +0 -1349
- package/dist/_chunks/sidebar-DLsG2AIk.js.map +0 -1
- package/dist/_chunks/task-editor-ByyRu29Y.js.map +0 -1
- package/dist/_chunks/use-state-backed-input-C7ESmxKB.js +0 -59
- package/dist/_chunks/use-state-backed-input-C7ESmxKB.js.map +0 -1
- package/dist/_chunks/widget-picker-DXYBMTfe.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-card-U_ZYoh1n.js","sources":["../../src/components/hover-card/hover-card.agent.ts","../../src/components/hover-card/hover-card.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HoverCard. */\n/* */\n/* Unlike Tooltip, a hover card holds interactive content, so an agent */\n/* has a legitimate reason to open one and read its state. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HoverCardHandle } from './hover-card';\n\nexport const hoverCardAgent: AgentAdapter<HoverCardHandle> = {\n id: 'hover-card',\n capabilities: ['open', 'close'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.hoverCard.state.isOpen',\n description: 'True when the hover card is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.hoverCard.actions.open',\n description: 'Open the hover card without moving focus into it.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.hoverCard.actions.close',\n description: 'Close the hover card.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'hover-card' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on HoverCard.Root.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport {\n findPopoverTrigger,\n useNonModalTabExit,\n} from '../_shared/non-modal-tab-exit';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { useAgentRegistration } from '../../agent';\nimport { hoverCardAgent } from './hover-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* Logical → physical side */\n/* -------------------------------------------------------------------- */\n\nexport type HoverCardSide = 'top' | 'end' | 'bottom' | 'start';\n\nfunction resolvePhysicalSide(\n logicalSide: HoverCardSide,\n isRtl: boolean,\n): 'left' | 'top' | 'right' | 'bottom' {\n if (logicalSide === 'top' || logicalSide === 'bottom') return logicalSide;\n if (logicalSide === 'start') return isRtl ? 'right' : 'left';\n /* logicalSide === 'end' */\n return isRtl ? 'left' : 'right';\n}\n\n/* -------------------------------------------------------------------- */\n/* Contexts */\n/* -------------------------------------------------------------------- */\n\ninterface HoverCardA11yContext {\n headingId: string | undefined;\n setHeadingId: (id: string | undefined) => void;\n}\n\nconst A11yContext = createContext<HoverCardA11yContext>({\n headingId: undefined,\n setHeadingId: () => {},\n});\n\ninterface HoverCardRootContext {\n /** Keeps the card open while the pointer or focus is inside the content. */\n cancelClose: () => void;\n closeWithDelay: () => void;\n /** True when this open should move focus into the card. */\n shouldFocusOnOpen: () => boolean;\n /** True when focus was actually moved in, so closing may return it. */\n didMoveFocus: () => boolean;\n noteMovedFocus: () => void;\n /** Called when closing hands focus back, so the trigger's focus handler\n * does not read that return as a fresh Tab and reopen the card. */\n noteFocusReturn: () => void;\n clearMovedFocus: () => void;\n registerContent: (node: HTMLDivElement | null) => void;\n /** The trigger node, used to resolve the reading direction. Content is\n * portalled to body, so only the trigger can see a scoped [dir]. */\n triggerRef: React.MutableRefObject<HTMLElement | null>;\n instanceId: string | undefined;\n}\n\nconst RootContext = createContext<HoverCardRootContext>({\n cancelClose: () => {},\n closeWithDelay: () => {},\n shouldFocusOnOpen: () => false,\n didMoveFocus: () => false,\n noteMovedFocus: () => {},\n noteFocusReturn: () => {},\n clearMovedFocus: () => {},\n registerContent: () => {},\n triggerRef: { current: null },\n instanceId: undefined,\n});\n\n/** `flush` moves padding from the Content onto the inner slots, so Media can\n * bleed to the card's edge. */\nconst PaddingContext = createContext<'default' | 'flush'>('default');\n\n/* -------------------------------------------------------------------- */\n/* CVA — content surface */\n/* -------------------------------------------------------------------- */\n\nconst contentVariants = cva(\n [\n // Same elevated surface as Popover: `--card-border` at 32% alpha reads as\n // a subtle edge in both themes, where the shadow alone lets the card\n // float as an unbounded blob on dark. Forced colours upgrade it to a\n // fully visible `CanvasText` edge.\n 'ds:relative ds:bg-[var(--popover)] ds:border ds:border-[color:var(--card-border)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:max-w-[calc(100vw-var(--spacing-lg))]',\n 'ds:z-[var(--z-popover)]',\n 'ds:text-[var(--popover-foreground)] ds:text-[length:var(--font-size-sm)]',\n 'ds:break-words',\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=closed]:fade-out-0 ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:zoom-out-95 ds:data-[state=open]:zoom-in-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2 ds:data-[side=left]:slide-in-from-right-2',\n 'ds:data-[side=right]:slide-in-from-left-2 ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:transition-none ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n 'ds:focus-visible:outline-none',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:w-[var(--popover-size-sm)]',\n md: 'ds:w-[var(--popover-size-md)]',\n lg: 'ds:w-[var(--popover-size-lg)]',\n },\n padding: {\n default: 'ds:p-[var(--spacing-md)]',\n // Media bleeds to the edge, so the slots pad themselves instead.\n flush: 'ds:p-[var(--spacing-none)] ds:overflow-hidden',\n },\n },\n defaultVariants: {\n size: 'md',\n padding: 'default',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Root */\n/* -------------------------------------------------------------------- */\n\n// Curated agent-readiness handle — see hover-card.agent.ts.\nexport interface HoverCardHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface HoverCardProps {\n children: ReactNode;\n /**\n * How the card opens. `hover-or-click` (the default) opens on pointer hover\n * without taking focus, and on click, tap or Enter with focus moved into the\n * card so the footer actions are reachable. `click` disables hover entirely.\n */\n openOn?: 'hover-or-click' | 'click';\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Delay before a hover opens the card, in ms. Default 300. */\n openDelay?: number;\n /** Grace period before a pointer leaving closes the card, in ms. Default 300. */\n closeDelay?: number;\n /** Opaque instance id — emitted on Content as `data-component-id`. */\n id?: string;\n}\n\nfunction HoverCardRoot({\n children,\n openOn = 'hover-or-click',\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n openDelay = 300,\n closeDelay = 300,\n id,\n}: HoverCardProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const isOpenRef = useRef(isOpen);\n useEffect(() => {\n isOpenRef.current = isOpen;\n }, [isOpen]);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n useEffect(() => clearTimer, [clearTimer]);\n\n /* Focus bookkeeping. A hover must never pull focus off whatever the user is\n doing; a click or Enter must move focus in, or the footer buttons are\n unreachable. `focusOnOpen` decides which, and `movedFocus` records whether\n closing is allowed to hand focus back to the trigger. */\n const focusOnOpenRef = useRef(false);\n const movedFocusRef = useRef(false);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const openWithDelay = useCallback(() => {\n clearTimer();\n timerRef.current = setTimeout(() => {\n focusOnOpenRef.current = false;\n setOpen(true);\n }, openDelay);\n }, [clearTimer, openDelay, setOpen]);\n\n const closeWithDelay = useCallback(() => {\n clearTimer();\n timerRef.current = setTimeout(() => setOpen(false), closeDelay);\n }, [clearTimer, closeDelay, setOpen]);\n\n /* Closing hands focus back to the trigger, which fires the trigger's focus\n handler and would reopen the card it just closed — an Escape that does\n nothing. The return is swallowed once, with a timeout as a safety net so\n a suppression can never outlive the interaction that armed it. */\n const suppressFocusOpenRef = useRef(false);\n const suppressTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const noteFocusReturn = useCallback(() => {\n suppressFocusOpenRef.current = true;\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current);\n suppressTimerRef.current = setTimeout(() => {\n suppressFocusOpenRef.current = false;\n }, 100);\n }, []);\n useEffect(\n () => () => {\n if (suppressTimerRef.current) clearTimeout(suppressTimerRef.current);\n },\n [],\n );\n\n /** Tabbing onto the trigger reveals the card at once, but leaves focus on\n * the trigger so a keyboard user can pass by without being pulled in. */\n const openOnFocus = useCallback(() => {\n if (suppressFocusOpenRef.current) {\n suppressFocusOpenRef.current = false;\n return;\n }\n clearTimer();\n focusOnOpenRef.current = false;\n setOpen(true);\n }, [clearTimer, setOpen]);\n\n const focusContent = useCallback(() => {\n movedFocusRef.current = true;\n contentRef.current?.focus();\n }, []);\n\n /* Press bookkeeping. \"Was the card open?\" is the wrong question: hover and\n Tab both reveal it, so by the time Enter or a click arrives it is already\n open and a naive toggle would close what the user is trying to enter.\n The right question is whether focus was already INSIDE the card, which\n separates \"take me in\" from \"I am in, let me out\".\n\n It must be snapshotted at press start, not read at click time, because\n pointerdown moves focus to the trigger and would erase the answer.\n `null` means an orphan press (a programmatic `.click()`, or assistive\n tech dispatching click alone) and is treated as \"take me in\". */\n const focusWasInsideRef = useRef<boolean | null>(null);\n const notePressStart = useCallback(() => {\n const content = contentRef.current;\n focusWasInsideRef.current = Boolean(\n content && content.contains(document.activeElement),\n );\n }, []);\n\n const handleTriggerClick = useCallback(() => {\n const focusWasInside = focusWasInsideRef.current;\n focusWasInsideRef.current = null;\n if (focusWasInside === true) {\n setOpen(false);\n return;\n }\n focusOnOpenRef.current = true;\n if (isOpenRef.current) {\n // Hover or Tab already opened it, so no state change will fire\n // onOpenAutoFocus. Move focus in directly.\n focusContent();\n } else {\n setOpen(true);\n }\n }, [focusContent, setOpen]);\n\n const agentHandle = useMemo<HoverCardHandle>(\n () => ({\n getIsOpen: () => isOpenRef.current,\n open: () => {\n focusOnOpenRef.current = false;\n setOpen(true);\n },\n close: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(hoverCardAgent, agentHandle, id);\n\n const [headingId, setHeadingId] = useState<string | undefined>(undefined);\n\n const isHoverMode = openOn === 'hover-or-click';\n\n const rootValue = useMemo<HoverCardRootContext>(\n () => ({\n cancelClose: clearTimer,\n closeWithDelay: isHoverMode ? closeWithDelay : () => {},\n shouldFocusOnOpen: () => focusOnOpenRef.current,\n didMoveFocus: () => movedFocusRef.current,\n noteMovedFocus: () => {\n movedFocusRef.current = true;\n },\n noteFocusReturn,\n clearMovedFocus: () => {\n movedFocusRef.current = false;\n },\n registerContent: (node) => {\n contentRef.current = node;\n },\n triggerRef,\n instanceId: id,\n }),\n [clearTimer, closeWithDelay, id, isHoverMode, noteFocusReturn],\n );\n\n const triggerValue = useMemo<HoverCardTriggerContext>(\n () => ({\n isHoverMode,\n openOnFocus,\n openWithDelay,\n closeWithDelay,\n cancelClose: clearTimer,\n notePressStart,\n onClick: handleTriggerClick,\n }),\n [\n clearTimer,\n closeWithDelay,\n handleTriggerClick,\n isHoverMode,\n notePressStart,\n openOnFocus,\n openWithDelay,\n ],\n );\n\n return (\n <A11yContext.Provider value={{ headingId, setHeadingId }}>\n <RootContext.Provider value={rootValue}>\n <TriggerContext.Provider value={triggerValue}>\n <RadixPopover.Root open={isOpen} onOpenChange={setOpen}>\n {children}\n </RadixPopover.Root>\n </TriggerContext.Provider>\n </RootContext.Provider>\n </A11yContext.Provider>\n );\n}\nHoverCardRoot.displayName = 'HoverCard.Root';\n\n/* -------------------------------------------------------------------- */\n/* Trigger */\n/* -------------------------------------------------------------------- */\n\ninterface HoverCardTriggerContext {\n isHoverMode: boolean;\n openOnFocus: () => void;\n openWithDelay: () => void;\n closeWithDelay: () => void;\n cancelClose: () => void;\n notePressStart: () => void;\n onClick: () => void;\n}\n\nconst TriggerContext = createContext<HoverCardTriggerContext>({\n isHoverMode: true,\n openOnFocus: () => {},\n openWithDelay: () => {},\n closeWithDelay: () => {},\n cancelClose: () => {},\n notePressStart: () => {},\n onClick: () => {},\n});\n\nexport type HoverCardTriggerProps = ComponentPropsWithoutRef<\n typeof RadixPopover.Trigger\n>;\n\nconst HoverCardTrigger = forwardRef<HTMLButtonElement, HoverCardTriggerProps>(\n (\n {\n children,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onPointerDown,\n onKeyDown,\n onClick,\n ...props\n },\n ref,\n ) => {\n const ctx = useContext(TriggerContext);\n const { triggerRef } = useContext(RootContext);\n\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref, triggerRef],\n );\n\n return (\n <RadixPopover.Trigger\n ref={setRefs}\n onMouseEnter={(event) => {\n if (ctx.isHoverMode) ctx.openWithDelay();\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n if (ctx.isHoverMode) ctx.closeWithDelay();\n onMouseLeave?.(event);\n }}\n onFocus={(event) => {\n if (ctx.isHoverMode) ctx.openOnFocus();\n onFocus?.(event);\n }}\n onBlur={(event) => {\n if (ctx.isHoverMode) ctx.closeWithDelay();\n onBlur?.(event);\n }}\n onPointerDown={(event) => {\n ctx.notePressStart();\n onPointerDown?.(event);\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') ctx.notePressStart();\n onKeyDown?.(event);\n }}\n onClick={(event) => {\n // Own the toggle outright: Radix's own click toggle would close a\n // card that this very press had just opened via focus.\n event.preventDefault();\n ctx.onClick();\n onClick?.(event);\n }}\n {...props}\n >\n {children}\n </RadixPopover.Trigger>\n );\n },\n);\nHoverCardTrigger.displayName = 'HoverCard.Trigger';\n\nexport type HoverCardAnchorProps = ComponentPropsWithoutRef<\n typeof RadixPopover.Anchor\n>;\n\nconst HoverCardAnchor = forwardRef<\n ElementRef<typeof RadixPopover.Anchor>,\n HoverCardAnchorProps\n>((props, ref) => {\n const { triggerRef } = useContext(RootContext);\n const setRefs = useCallback(\n (node: ElementRef<typeof RadixPopover.Anchor> | null) => {\n triggerRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref, triggerRef],\n );\n // A virtual anchor renders nothing, so record the element it measures, and\n // forget it when it changes or unmounts, unless something else replaced it.\n const virtual = props.virtualRef?.current;\n useEffect(() => {\n if (!(virtual instanceof HTMLElement)) return;\n triggerRef.current = virtual;\n return () => {\n if (triggerRef.current === virtual) triggerRef.current = null;\n };\n }, [virtual, triggerRef]);\n\n return <RadixPopover.Anchor ref={setRefs} {...props} />;\n});\nHoverCardAnchor.displayName = 'HoverCard.Anchor';\n\n/* -------------------------------------------------------------------- */\n/* Content */\n/* -------------------------------------------------------------------- */\n\nexport interface HoverCardContentProps\n extends\n Omit<\n ComponentPropsWithoutRef<typeof RadixPopover.Content>,\n 'side' | 'align'\n >,\n VariantProps<typeof contentVariants> {\n /** Logical side, resolved against the reading direction. Default `'top'`. */\n side?: HoverCardSide;\n align?: 'start' | 'center' | 'end';\n size?: 'sm' | 'md' | 'lg';\n padding?: 'default' | 'flush';\n /** Render the arrow. Default `true`. */\n showArrow?: boolean;\n /** Render a close button, for touch users on a card with actions. */\n showClose?: boolean;\n /**\n * An action pinned to the top-end corner — the same slot `showClose` uses.\n * For a card whose ANCHOR has a real open action, so the card mirrors it\n * instead of describing it in prose (\"Click to open …\"). Only give a card\n * one when the trigger genuinely opens something; a card that merely points\n * somewhere else should say so in a hint line, because an icon button there\n * promises a click the anchor does not have.\n *\n * A card carrying one must be interactive — the pointer has to be able to\n * travel into it — so do not combine it with a pointer-events-none peek.\n */\n headerAction?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\nconst HoverCardContent = forwardRef<HTMLDivElement, HoverCardContentProps>(\n (\n {\n side = 'top',\n align = 'center',\n size = 'md',\n padding = 'default',\n showArrow = true,\n showClose = false,\n headerAction,\n dir: providedDirection,\n className,\n children,\n onOpenAutoFocus,\n onCloseAutoFocus,\n onMouseEnter,\n onMouseLeave,\n onFocusCapture,\n onKeyDown,\n ...props\n },\n ref,\n ) => {\n const { headingId } = useContext(A11yContext);\n const root = useContext(RootContext);\n const getAnchor = useCallback(\n (content: HTMLElement) =>\n root.triggerRef.current ?? findPopoverTrigger(content),\n [root.triggerRef],\n );\n // A hover-opened card never holds focus. Shift+Tab back to the trigger\n // leaves the card open, as focus on the trigger shows it anyway.\n const exitOnTab = useNonModalTabExit(true, { getAnchor });\n const { t } = useTranslation('ui');\n const [isRtl, setIsRtl] = useState(false);\n const localRef = useRef<HTMLDivElement | null>(null);\n\n const setRefs = useCallback(\n (node: HTMLDivElement | null) => {\n localRef.current = node;\n root.registerContent(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [ref, root],\n );\n\n // Read direction from the TRIGGER, not from this content: the content is\n // portalled to body, where `closest('[dir]')` can only ever find <html>.\n // Reading the trigger lets one RTL region inside an LTR page resolve\n // start/end correctly.\n useEffect(() => {\n const anchor = root.triggerRef.current;\n const scoped = anchor?.closest('[dir]');\n const resolved =\n scoped?.getAttribute('dir') ?? document.documentElement.dir ?? 'ltr';\n setIsRtl(resolved === 'rtl');\n }, [root.triggerRef]);\n\n const contentDirection = providedDirection ?? (isRtl ? 'rtl' : 'ltr');\n const directionIsRtl = contentDirection === 'rtl';\n const physicalSide = resolvePhysicalSide(side, directionIsRtl);\n // Radix resolves `align` physically unless a DirectionProvider is present,\n // which the kit does not mount. On the block axis (a card on the inline\n // start or end) align is unaffected by direction; on the inline axis it\n // must be mirrored by hand so `align=\"start\"` means the reading start.\n const isInlineAxis = physicalSide === 'top' || physicalSide === 'bottom';\n const physicalAlign =\n directionIsRtl && isInlineAxis && align !== 'center'\n ? align === 'start'\n ? 'end'\n : 'start'\n : align;\n\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n ref={setRefs}\n dir={contentDirection}\n side={physicalSide}\n align={physicalAlign}\n sideOffset={8}\n collisionPadding={8}\n aria-labelledby={headingId}\n className={contentVariants({ size, padding, className })}\n data-component=\"hover-card\"\n data-component-id={root.instanceId}\n onOpenAutoFocus={(event) => {\n // A hover-opened card must not take focus; a click- or\n // Enter-opened one must, or the footer actions are unreachable.\n if (root.shouldFocusOnOpen()) root.noteMovedFocus();\n else event.preventDefault();\n onOpenAutoFocus?.(event);\n }}\n onCloseAutoFocus={(event) => {\n // Only hand focus back if we took it in the first place, and warn\n // the trigger that the focus it is about to receive is a return.\n if (root.didMoveFocus()) root.noteFocusReturn();\n else event.preventDefault();\n root.clearMovedFocus();\n onCloseAutoFocus?.(event);\n }}\n onMouseEnter={(event) => {\n root.cancelClose();\n onMouseEnter?.(event);\n }}\n onMouseLeave={(event) => {\n root.closeWithDelay();\n onMouseLeave?.(event);\n }}\n onFocusCapture={(event) => {\n root.cancelClose();\n onFocusCapture?.(event);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n exitOnTab(event);\n }}\n {...props}\n >\n <PaddingContext.Provider value={padding}>\n {children}\n </PaddingContext.Provider>\n {showClose || headerAction ? (\n <div\n className={[\n 'ds:absolute ds:top-[var(--spacing-sm)] ds:end-[var(--spacing-sm)]',\n 'ds:z-[1] ds:flex ds:items-center ds:gap-[var(--spacing-2xs)]',\n ].join(' ')}\n >\n {headerAction}\n {showClose ? (\n <RadixPopover.Close asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('common.close', 'Close')}\n />\n </RadixPopover.Close>\n ) : null}\n </div>\n ) : null}\n {showArrow ? (\n // Radix places the arrow on the resolved side and keeps it over\n // the trigger through collision flip and shift.\n //\n // A custom path, not the default polygon, so the card's OUTLINE\n // carries on around the point instead of stopping dead at it. The\n // path is left open (no `Z`), so the fill closes the triangle\n // while the stroke draws only the two slanted sides — a closed\n // path would rule a line straight across the arrow's base.\n // `-translate-y-px` then tucks that base a hairline under the\n // card, so the card's own border does not show through it. The\n // translate is applied inside Radix's rotation wrapper, so \"up\"\n // means \"towards the card\" on every side.\n <RadixPopover.Arrow asChild width={12} height={6}>\n <svg\n viewBox=\"0 0 12 6\"\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n className=\"ds:-translate-y-px ds:fill-[var(--popover)] ds:stroke-[color:var(--card-border)]\"\n >\n <path d=\"M0 0 L6 6 L12 0\" strokeLinejoin=\"round\" />\n </svg>\n </RadixPopover.Arrow>\n ) : null}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n },\n);\nHoverCardContent.displayName = 'HoverCard.Content';\n\n/* -------------------------------------------------------------------- */\n/* Slots */\n/* -------------------------------------------------------------------- */\n\n/** The media slot: an avatar row, a thumbnail, or a banner. Under\n * `padding=\"flush\"` it bleeds to the card's edge. */\nconst HoverCardMedia = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"media\"\n className={['ds:flex ds:items-center ds:gap-[var(--spacing-sm)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nHoverCardMedia.displayName = 'HoverCard.Media';\n\n/**\n * The card's category line, above the heading: \"Signing\", \"Billing\",\n * \"Anamnesis\". It says WHICH KIND of thing the reader is looking at, so a\n * card that appears under the pointer is self-describing without repeating\n * the chip's own words in the heading.\n *\n * Decorative by role: the heading carries the meaning and the accessible\n * name, so the eyebrow is quiet type and adds no landmark of its own.\n */\nconst HoverCardEyebrow = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n data-slot=\"eyebrow\"\n className={[\n 'ds:m-0 type-eyebrow ds:text-[color:var(--muted-foreground)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nHoverCardEyebrow.displayName = 'HoverCard.Eyebrow';\n\nexport interface HoverCardHeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n}\n\nconst HoverCardHeading = forwardRef<HTMLHeadingElement, HoverCardHeadingProps>(\n ({ as: Tag = 'h3', id: providedId, className, ...props }, ref) => {\n const generatedId = useId();\n const headingId = providedId ?? generatedId;\n const { setHeadingId } = useContext(A11yContext);\n const padding = useContext(PaddingContext);\n\n useEffect(() => {\n setHeadingId(headingId);\n return () => setHeadingId(undefined);\n }, [headingId, setHeadingId]);\n\n return (\n <Tag\n ref={ref}\n id={headingId}\n data-slot=\"heading\"\n className={[\n 'type-title-item ds:leading-snug ds:break-words',\n padding === 'flush'\n ? 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-md)]'\n : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n },\n);\nHoverCardHeading.displayName = 'HoverCard.Heading';\n\n/** The body slot. A `div`, not a `p`: a hover card body routinely holds\n * KeyValuePairs and chips, and a `p` may only contain phrasing content. */\nconst HoverCardBody = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const padding = useContext(PaddingContext);\n\n return (\n <div\n ref={ref}\n data-slot=\"body\"\n className={[\n 'type-body-sm ds:text-[var(--muted-foreground)]',\n 'ds:mt-[var(--spacing-xs)]',\n padding === 'flush'\n ? 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pb-[var(--spacing-md)]'\n : '',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n});\nHoverCardBody.displayName = 'HoverCard.Body';\n\n/** The action row. Actions sit at the inline end; anything that should stay at\n * the inline start (a status badge) gets `ds:me-auto`. */\nconst HoverCardFooter = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const padding = useContext(PaddingContext);\n\n return (\n <div\n ref={ref}\n data-slot=\"footer\"\n className={[\n 'ds:flex ds:flex-wrap ds:items-center ds:justify-end',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:border-t ds:border-[color:var(--card-border)]',\n padding === 'flush'\n ? 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]'\n : 'ds:mt-[var(--spacing-md)] ds:pt-[var(--spacing-md)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n );\n});\nHoverCardFooter.displayName = 'HoverCard.Footer';\n\n/* -------------------------------------------------------------------- */\n/* useHoverCardTiming */\n/* */\n/* Lets a CUSTOM anchored trigger — one that can't use `Trigger asChild` */\n/* because it already spends its one asChild slot elsewhere (a */\n/* DropdownMenu's own trigger, say) — share the SAME close timer */\n/* `Content` itself cancels/re-arms on hover and focus. Without this, */\n/* an anchored trigger that keeps its own separate close timer goes */\n/* stale the moment the pointer or focus moves onto the (portalled) */\n/* content: `Content`'s built-in handlers cancel ROOT's timer, which */\n/* was never the one counting down, so the card closes under the user's */\n/* cursor. Call this from a descendant of `HoverCard` (anywhere inside */\n/* the tree the Root provides context to), drive your own open timing, */\n/* but always close through `closeWithDelay` / `cancelClose` here — */\n/* never a private `setTimeout`. */\n/* -------------------------------------------------------------------- */\nexport function useHoverCardTiming(): {\n cancelClose: () => void;\n closeWithDelay: () => void;\n} {\n const { cancelClose, closeWithDelay } = useContext(RootContext);\n return { cancelClose, closeWithDelay };\n}\n\n/* -------------------------------------------------------------------- */\n\nexport const HoverCard = Object.assign(HoverCardRoot, {\n Root: HoverCardRoot,\n Trigger: HoverCardTrigger,\n // Anchor the card to an arbitrary element when a trigger button is\n // unsuitable, such as a calendar grid cell.\n Anchor: HoverCardAnchor,\n Content: HoverCardContent,\n Media: HoverCardMedia,\n Eyebrow: HoverCardEyebrow,\n Heading: HoverCardHeading,\n Body: HoverCardBody,\n Footer: HoverCardFooter,\n});\n"],"names":["hoverCardAgent","handle","resolvePhysicalSide","logicalSide","isRtl","A11yContext","createContext","RootContext","PaddingContext","contentVariants","cva","HoverCardRoot","children","openOn","controlledOpen","defaultOpen","onOpenChange","openDelay","closeDelay","id","internalOpen","setInternalOpen","useState","isControlled","isOpen","setOpen","useCallback","next","isOpenRef","useRef","useEffect","timerRef","clearTimer","focusOnOpenRef","movedFocusRef","contentRef","triggerRef","openWithDelay","closeWithDelay","suppressFocusOpenRef","suppressTimerRef","noteFocusReturn","openOnFocus","focusContent","_a","focusWasInsideRef","notePressStart","content","handleTriggerClick","focusWasInside","agentHandle","useMemo","useAgentRegistration","headingId","setHeadingId","isHoverMode","rootValue","node","triggerValue","jsx","TriggerContext","RadixPopover","HoverCardTrigger","forwardRef","onMouseEnter","onMouseLeave","onFocus","onBlur","onPointerDown","onKeyDown","onClick","props","ref","ctx","useContext","setRefs","event","HoverCardAnchor","virtual","HoverCardContent","side","align","size","padding","showArrow","showClose","headerAction","providedDirection","className","onOpenAutoFocus","onCloseAutoFocus","onFocusCapture","root","getAnchor","findPopoverTrigger","exitOnTab","useNonModalTabExit","t","useTranslation","setIsRtl","localRef","anchor","scoped","resolved","contentDirection","directionIsRtl","physicalSide","physicalAlign","jsxs","IconButton","X","HoverCardMedia","HoverCardEyebrow","HoverCardHeading","Tag","providedId","generatedId","useId","HoverCardBody","HoverCardFooter","useHoverCardTiming","cancelClose","HoverCard"],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@ import { jsxs as S, jsx as r } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as H, useState as y, useRef as h, useCallback as v, useMemo as b } from "react";
|
|
3
3
|
import { c as M } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as F } from "react-i18next";
|
|
5
|
-
import { P as k } from "./popover-
|
|
5
|
+
import { P as k } from "./popover-BG75rYjN.js";
|
|
6
6
|
import { B as D } from "./button-Bn16lcFM.js";
|
|
7
|
-
import { S as E } from "./state-backed-text-input-
|
|
7
|
+
import { S as E } from "./state-backed-text-input-Cgh4ms3p.js";
|
|
8
8
|
import { u as G } from "./registry-DvAUVLHh.js";
|
|
9
9
|
import { S as J } from "./search-QbWPlY5f.js";
|
|
10
10
|
const U = {
|
|
@@ -269,4 +269,4 @@ export {
|
|
|
269
269
|
X as I,
|
|
270
270
|
U as i
|
|
271
271
|
};
|
|
272
|
-
//# sourceMappingURL=icon-picker-
|
|
272
|
+
//# sourceMappingURL=icon-picker-rOFTawXk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-picker-DWrqmI1c.js","sources":["../../src/components/icon-picker/icon-picker.agent.ts","../../src/components/icon-picker/icon-picker.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — IconPicker. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { IconPickerHandle } from './icon-picker';\n\nexport const iconPickerAgent: AgentAdapter<IconPickerHandle> = {\n id: 'icon-picker',\n capabilities: ['pick', 'filter', 'open', 'close'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.iconPicker.state.value',\n description:\n 'Id of the currently selected icon, or an empty string when nothing is picked.',\n read: (handle) => handle.getValue(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.iconPicker.state.isOpen',\n description: 'True when the picker popover is currently open.',\n read: (handle) => handle.isOpen(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.iconPicker.state.query',\n description: 'Current search query filtering the icon grid by label.',\n read: (handle) => handle.getQuery(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Id of an icon in the supplied `icons` set.',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.setValue',\n description: 'Select the icon with the given id.',\n examples: [{ args: { id: 'star' }, note: 'Pick the \"star\" icon.' }],\n invoke: (handle, args: { id: string }) => {\n handle.setValue(args.id);\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.open',\n description: 'Open the picker popover.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.close',\n description: 'Close the picker popover.',\n invoke: (handle) => {\n handle.close();\n },\n },\n filter: {\n safety: 'write',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description:\n 'Case-insensitive substring matched against icon labels.',\n },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.filter',\n description: 'Filter the icon grid to labels containing the query.',\n examples: [\n {\n args: { query: 'star' },\n note: 'Show icons whose label contains \"star\".',\n },\n ],\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'icon-picker',\n description: 'Marks the IconPicker trigger button.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { Popover } from '../popover';\nimport { Button } from '../button/button';\nimport { StateBackedTextInput } from '../_shared/state-backed-text-input';\nimport { useAgentRegistration } from '../../agent';\nimport { iconPickerAgent } from './icon-picker.agent';\n\n/** One selectable glyph. `label` is the accessible name (consumer-localised);\n * `node` is the rendered lucide/SVG element. */\nexport interface IconPickerIcon {\n id: string;\n label: string;\n node: ReactNode;\n}\n\n/** Agent-readiness curated handle for IconPicker. */\nexport interface IconPickerHandle {\n getValue: () => string;\n setValue: (id: string) => void;\n isOpen: () => boolean;\n open: () => void;\n close: () => void;\n getQuery: () => string;\n setQuery: (query: string) => void;\n}\n\nexport interface IconPickerProps {\n /** The glyph set. `label` is each glyph's accessible name. */\n icons: IconPickerIcon[];\n /** Controlled selected icon id. Pair with onChange. */\n value?: string;\n /** Uncontrolled initial selected icon id. */\n defaultValue?: string;\n /** Fires with the chosen icon id when a glyph is picked. */\n onChange?: (id: string) => void;\n /** Shown on the trigger when nothing is selected. */\n placeholder?: ReactNode;\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Trigger accessible name. Defaults to the bundled `iconPicker.trigger`. */\n 'aria-label'?: string;\n}\n\n// Selectable glyph cell. The only variant is selection state — selected cells\n// take a tokenised highlight (primary border + muted fill); `aria-pressed`\n// carries the state non-visually so it never reads by colour alone.\nconst optionVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:items-center ds:justify-center',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:text-foreground ds:bg-transparent',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted/10',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:[&_svg]:size-5',\n ].join(' '),\n {\n variants: {\n selected: {\n true: 'ds:border-primary ds:bg-muted',\n false: 'ds:border-transparent',\n },\n },\n defaultVariants: { selected: false },\n },\n);\n\nexport const IconPicker = forwardRef<HTMLButtonElement, IconPickerProps>(\n function IconPicker(\n {\n icons,\n value,\n defaultValue,\n onChange,\n placeholder,\n disabled,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n // Live snapshots for the synchronous agent handle.\n const currentValueRef = useRef(currentValue);\n currentValueRef.current = currentValue;\n const openRef = useRef(open);\n openRef.current = open;\n const queryRef = useRef(query);\n queryRef.current = query;\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next);\n // Reset the filter when the popover closes so the next open starts fresh.\n if (!next) setQuery('');\n }, []);\n\n const setValueImperative = useCallback(\n (iconId: string) => {\n if (!isControlled) setInternalValue(iconId);\n onChange?.(iconId);\n },\n [isControlled, onChange],\n );\n\n const handleSelect = useCallback(\n (iconId: string) => {\n setValueImperative(iconId);\n handleOpenChange(false);\n },\n [setValueImperative, handleOpenChange],\n );\n\n const agentHandle = useMemo<IconPickerHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (iconId) => setValueImperative(iconId),\n isOpen: () => openRef.current,\n open: () => handleOpenChange(true),\n close: () => handleOpenChange(false),\n getQuery: () => queryRef.current,\n setQuery: (next) => setQuery(next),\n }),\n [setValueImperative, handleOpenChange],\n );\n useAgentRegistration(iconPickerAgent, agentHandle, id);\n\n const selectedIcon = useMemo(\n () => icons.find((icon) => icon.id === currentValue),\n [icons, currentValue],\n );\n\n const normalisedQuery = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n normalisedQuery\n ? icons.filter((icon) =>\n icon.label.toLowerCase().includes(normalisedQuery),\n )\n : icons,\n [icons, normalisedQuery],\n );\n\n const triggerLabel = ariaLabel ?? t('iconPicker.trigger');\n const resolvedPlaceholder = placeholder ?? t('iconPicker.trigger');\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange} id={id}>\n <Popover.Trigger asChild>\n <Button\n ref={ref}\n type=\"button\"\n intent=\"outline\"\n disabled={disabled}\n aria-label={triggerLabel}\n className={className}\n data-component=\"icon-picker\"\n data-component-id={id}\n >\n {selectedIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:[&_svg]:size-5\"\n >\n {selectedIcon.node}\n </span>\n ) : (\n <span className=\"ds:inline-flex ds:items-center ds:text-muted-foreground\">\n {resolvedPlaceholder}\n </span>\n )}\n </Button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n showArrow={false}\n aria-label={triggerLabel}\n className=\"ds:w-72\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <StateBackedTextInput\n size=\"sm\"\n value={query}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setQuery(event.target.value)\n }\n placeholder={t('iconPicker.search')}\n aria-label={t('iconPicker.search')}\n startAdornment={<Search />}\n clearable\n onClear={() => setQuery('')}\n autoComplete=\"off\"\n />\n\n {filtered.length === 0 ? (\n <p\n role=\"status\"\n className=\"type-body-sm ds:text-muted-foreground ds:text-center ds:py-[var(--spacing-sm)]\"\n >\n {t('iconPicker.noResults')}\n </p>\n ) : (\n <div\n role=\"group\"\n aria-label={triggerLabel}\n className=\"ds:grid ds:grid-cols-5 ds:gap-[var(--spacing-xs)] ds:max-h-64 ds:overflow-y-auto\"\n >\n {filtered.map((icon) => {\n const selected = icon.id === currentValue;\n return (\n <button\n key={icon.id}\n type=\"button\"\n aria-label={icon.label}\n aria-pressed={selected}\n onClick={() => handleSelect(icon.id)}\n className={optionVariants({ selected })}\n >\n <span aria-hidden=\"true\" className=\"ds:inline-flex\">\n {icon.node}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nIconPicker.displayName = 'IconPicker';\n\nexport { optionVariants as iconPickerOptionVariants };\n"],"names":["iconPickerAgent","handle","args","optionVariants","cva","IconPicker","forwardRef","icons","value","defaultValue","onChange","placeholder","disabled","id","className","ariaLabel","ref","t","useTranslation","isControlled","internalValue","setInternalValue","useState","currentValue","open","setOpen","query","setQuery","currentValueRef","useRef","openRef","queryRef","handleOpenChange","useCallback","next","setValueImperative","iconId","handleSelect","agentHandle","useMemo","useAgentRegistration","selectedIcon","icon","normalisedQuery","filtered","triggerLabel","resolvedPlaceholder","Popover","jsx","Button","jsxs","StateBackedTextInput","event","Search","selected"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"icon-picker-rOFTawXk.js","sources":["../../src/components/icon-picker/icon-picker.agent.ts","../../src/components/icon-picker/icon-picker.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — IconPicker. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { IconPickerHandle } from './icon-picker';\n\nexport const iconPickerAgent: AgentAdapter<IconPickerHandle> = {\n id: 'icon-picker',\n capabilities: ['pick', 'filter', 'open', 'close'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.iconPicker.state.value',\n description:\n 'Id of the currently selected icon, or an empty string when nothing is picked.',\n read: (handle) => handle.getValue(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.iconPicker.state.isOpen',\n description: 'True when the picker popover is currently open.',\n read: (handle) => handle.isOpen(),\n },\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.iconPicker.state.query',\n description: 'Current search query filtering the icon grid by label.',\n read: (handle) => handle.getQuery(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Id of an icon in the supplied `icons` set.',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.setValue',\n description: 'Select the icon with the given id.',\n examples: [{ args: { id: 'star' }, note: 'Pick the \"star\" icon.' }],\n invoke: (handle, args: { id: string }) => {\n handle.setValue(args.id);\n },\n },\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.open',\n description: 'Open the picker popover.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.close',\n description: 'Close the picker popover.',\n invoke: (handle) => {\n handle.close();\n },\n },\n filter: {\n safety: 'write',\n argsType: '{ query: string }',\n argsSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description:\n 'Case-insensitive substring matched against icon labels.',\n },\n },\n required: ['query'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.iconPicker.actions.filter',\n description: 'Filter the icon grid to labels containing the query.',\n examples: [\n {\n args: { query: 'star' },\n note: 'Show icons whose label contains \"star\".',\n },\n ],\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'icon-picker',\n description: 'Marks the IconPicker trigger button.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n type ChangeEvent,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport { Popover } from '../popover';\nimport { Button } from '../button/button';\nimport { StateBackedTextInput } from '../_shared/state-backed-text-input';\nimport { useAgentRegistration } from '../../agent';\nimport { iconPickerAgent } from './icon-picker.agent';\n\n/** One selectable glyph. `label` is the accessible name (consumer-localised);\n * `node` is the rendered lucide/SVG element. */\nexport interface IconPickerIcon {\n id: string;\n label: string;\n node: ReactNode;\n}\n\n/** Agent-readiness curated handle for IconPicker. */\nexport interface IconPickerHandle {\n getValue: () => string;\n setValue: (id: string) => void;\n isOpen: () => boolean;\n open: () => void;\n close: () => void;\n getQuery: () => string;\n setQuery: (query: string) => void;\n}\n\nexport interface IconPickerProps {\n /** The glyph set. `label` is each glyph's accessible name. */\n icons: IconPickerIcon[];\n /** Controlled selected icon id. Pair with onChange. */\n value?: string;\n /** Uncontrolled initial selected icon id. */\n defaultValue?: string;\n /** Fires with the chosen icon id when a glyph is picked. */\n onChange?: (id: string) => void;\n /** Shown on the trigger when nothing is selected. */\n placeholder?: ReactNode;\n disabled?: boolean;\n id?: string;\n className?: string;\n /** Trigger accessible name. Defaults to the bundled `iconPicker.trigger`. */\n 'aria-label'?: string;\n}\n\n// Selectable glyph cell. The only variant is selection state — selected cells\n// take a tokenised highlight (primary border + muted fill); `aria-pressed`\n// carries the state non-visually so it never reads by colour alone.\nconst optionVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:items-center ds:justify-center',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:text-foreground ds:bg-transparent',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-muted/10',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:[&_svg]:size-5',\n ].join(' '),\n {\n variants: {\n selected: {\n true: 'ds:border-primary ds:bg-muted',\n false: 'ds:border-transparent',\n },\n },\n defaultVariants: { selected: false },\n },\n);\n\nexport const IconPicker = forwardRef<HTMLButtonElement, IconPickerProps>(\n function IconPicker(\n {\n icons,\n value,\n defaultValue,\n onChange,\n placeholder,\n disabled,\n id,\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n ) {\n const { t } = useTranslation('ui');\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? '',\n );\n const currentValue = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n // Live snapshots for the synchronous agent handle.\n const currentValueRef = useRef(currentValue);\n currentValueRef.current = currentValue;\n const openRef = useRef(open);\n openRef.current = open;\n const queryRef = useRef(query);\n queryRef.current = query;\n\n const handleOpenChange = useCallback((next: boolean) => {\n setOpen(next);\n // Reset the filter when the popover closes so the next open starts fresh.\n if (!next) setQuery('');\n }, []);\n\n const setValueImperative = useCallback(\n (iconId: string) => {\n if (!isControlled) setInternalValue(iconId);\n onChange?.(iconId);\n },\n [isControlled, onChange],\n );\n\n const handleSelect = useCallback(\n (iconId: string) => {\n setValueImperative(iconId);\n handleOpenChange(false);\n },\n [setValueImperative, handleOpenChange],\n );\n\n const agentHandle = useMemo<IconPickerHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (iconId) => setValueImperative(iconId),\n isOpen: () => openRef.current,\n open: () => handleOpenChange(true),\n close: () => handleOpenChange(false),\n getQuery: () => queryRef.current,\n setQuery: (next) => setQuery(next),\n }),\n [setValueImperative, handleOpenChange],\n );\n useAgentRegistration(iconPickerAgent, agentHandle, id);\n\n const selectedIcon = useMemo(\n () => icons.find((icon) => icon.id === currentValue),\n [icons, currentValue],\n );\n\n const normalisedQuery = query.trim().toLowerCase();\n const filtered = useMemo(\n () =>\n normalisedQuery\n ? icons.filter((icon) =>\n icon.label.toLowerCase().includes(normalisedQuery),\n )\n : icons,\n [icons, normalisedQuery],\n );\n\n const triggerLabel = ariaLabel ?? t('iconPicker.trigger');\n const resolvedPlaceholder = placeholder ?? t('iconPicker.trigger');\n\n return (\n <Popover.Root open={open} onOpenChange={handleOpenChange} id={id}>\n <Popover.Trigger asChild>\n <Button\n ref={ref}\n type=\"button\"\n intent=\"outline\"\n disabled={disabled}\n aria-label={triggerLabel}\n className={className}\n data-component=\"icon-picker\"\n data-component-id={id}\n >\n {selectedIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:items-center ds:justify-center ds:[&_svg]:size-5\"\n >\n {selectedIcon.node}\n </span>\n ) : (\n <span className=\"ds:inline-flex ds:items-center ds:text-muted-foreground\">\n {resolvedPlaceholder}\n </span>\n )}\n </Button>\n </Popover.Trigger>\n\n <Popover.Content\n align=\"start\"\n showArrow={false}\n aria-label={triggerLabel}\n className=\"ds:w-72\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <StateBackedTextInput\n size=\"sm\"\n value={query}\n onChange={(event: ChangeEvent<HTMLInputElement>) =>\n setQuery(event.target.value)\n }\n placeholder={t('iconPicker.search')}\n aria-label={t('iconPicker.search')}\n startAdornment={<Search />}\n clearable\n onClear={() => setQuery('')}\n autoComplete=\"off\"\n />\n\n {filtered.length === 0 ? (\n <p\n role=\"status\"\n className=\"type-body-sm ds:text-muted-foreground ds:text-center ds:py-[var(--spacing-sm)]\"\n >\n {t('iconPicker.noResults')}\n </p>\n ) : (\n <div\n role=\"group\"\n aria-label={triggerLabel}\n className=\"ds:grid ds:grid-cols-5 ds:gap-[var(--spacing-xs)] ds:max-h-64 ds:overflow-y-auto\"\n >\n {filtered.map((icon) => {\n const selected = icon.id === currentValue;\n return (\n <button\n key={icon.id}\n type=\"button\"\n aria-label={icon.label}\n aria-pressed={selected}\n onClick={() => handleSelect(icon.id)}\n className={optionVariants({ selected })}\n >\n <span aria-hidden=\"true\" className=\"ds:inline-flex\">\n {icon.node}\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Root>\n );\n },\n);\n\nIconPicker.displayName = 'IconPicker';\n\nexport { optionVariants as iconPickerOptionVariants };\n"],"names":["iconPickerAgent","handle","args","optionVariants","cva","IconPicker","forwardRef","icons","value","defaultValue","onChange","placeholder","disabled","id","className","ariaLabel","ref","t","useTranslation","isControlled","internalValue","setInternalValue","useState","currentValue","open","setOpen","query","setQuery","currentValueRef","useRef","openRef","queryRef","handleOpenChange","useCallback","next","setValueImperative","iconId","handleSelect","agentHandle","useMemo","useAgentRegistration","selectedIcon","icon","normalisedQuery","filtered","triggerLabel","resolvedPlaceholder","Popover","jsx","Button","jsxs","StateBackedTextInput","event","Search","selected"],"mappings":";;;;;;;;;AASO,MAAMA,IAAkD;AAAA,EAC7D,IAAI;AAAA,EACJ,cAAc,CAAC,QAAQ,UAAU,QAAQ,OAAO;AAAA,EAChD,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,OAAA;AAAA,IAAO;AAAA,IAElC,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,EACpC;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,IAAI;AAAA,YACF,MAAM;AAAA,YACN,aAAa;AAAA,UAAA;AAAA,QACf;AAAA,QAEF,UAAU,CAAC,IAAI;AAAA,MAAA;AAAA,MAEjB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,UAAU,MAAM,yBAAyB;AAAA,MAClE,QAAQ,CAACA,GAAQC,MAAyB;AACxC,QAAAD,EAAO,SAASC,EAAK,EAAE;AAAA,MACzB;AAAA,IAAA;AAAA,IAEF,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,KAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,OAAO;AAAA,YACL,MAAM;AAAA,YACN,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,OAAO;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,OAAO,OAAA;AAAA,UACf,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,QAAQ,CAACA,GAAQC,MAA4B;AAC3C,QAAAD,EAAO,SAASC,EAAK,KAAK;AAAA,MAC5B;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GCvDMC,IAAiBC;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,UAAU;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,iBAAiB,EAAE,UAAU,GAAA;AAAA,EAAM;AAEvC,GAEaC,IAAaC;AAAA,EACxB,SACE;AAAA,IACE,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,IAAAC;AAAA,IACA,WAAAC;AAAA,IACA,cAAcC;AAAA,EAAA,GAEhBC,GACA;AACA,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAe,IAAI,GAE3BC,IAAeX,MAAU,QACzB,CAACY,GAAeC,CAAgB,IAAIC;AAAA,MACxCb,KAAgB;AAAA,IAAA,GAEZc,IAAeJ,IAAgBX,KAAS,KAAMY,GAE9C,CAACI,GAAMC,CAAO,IAAIH,EAAS,EAAK,GAChC,CAACI,GAAOC,CAAQ,IAAIL,EAAS,EAAE,GAG/BM,IAAkBC,EAAON,CAAY;AAC3C,IAAAK,EAAgB,UAAUL;AAC1B,UAAMO,IAAUD,EAAOL,CAAI;AAC3B,IAAAM,EAAQ,UAAUN;AAClB,UAAMO,IAAWF,EAAOH,CAAK;AAC7B,IAAAK,EAAS,UAAUL;AAEnB,UAAMM,IAAmBC,EAAY,CAACC,MAAkB;AACtD,MAAAT,EAAQS,CAAI,GAEPA,KAAMP,EAAS,EAAE;AAAA,IACxB,GAAG,CAAA,CAAE,GAECQ,IAAqBF;AAAA,MACzB,CAACG,MAAmB;AAClB,QAAKjB,KAAcE,EAAiBe,CAAM,GAC1C1B,KAAA,QAAAA,EAAW0B;AAAA,MACb;AAAA,MACA,CAACjB,GAAcT,CAAQ;AAAA,IAAA,GAGnB2B,IAAeJ;AAAA,MACnB,CAACG,MAAmB;AAClB,QAAAD,EAAmBC,CAAM,GACzBJ,EAAiB,EAAK;AAAA,MACxB;AAAA,MACA,CAACG,GAAoBH,CAAgB;AAAA,IAAA,GAGjCM,IAAcC;AAAA,MAClB,OAAO;AAAA,QACL,UAAU,MAAMX,EAAgB;AAAA,QAChC,UAAU,CAACQ,MAAWD,EAAmBC,CAAM;AAAA,QAC/C,QAAQ,MAAMN,EAAQ;AAAA,QACtB,MAAM,MAAME,EAAiB,EAAI;AAAA,QACjC,OAAO,MAAMA,EAAiB,EAAK;AAAA,QACnC,UAAU,MAAMD,EAAS;AAAA,QACzB,UAAU,CAACG,MAASP,EAASO,CAAI;AAAA,MAAA;AAAA,MAEnC,CAACC,GAAoBH,CAAgB;AAAA,IAAA;AAEvC,IAAAQ,EAAqBxC,GAAiBsC,GAAazB,CAAE;AAErD,UAAM4B,IAAeF;AAAA,MACnB,MAAMhC,EAAM,KAAK,CAACmC,MAASA,EAAK,OAAOnB,CAAY;AAAA,MACnD,CAAChB,GAAOgB,CAAY;AAAA,IAAA,GAGhBoB,IAAkBjB,EAAM,KAAA,EAAO,YAAA,GAC/BkB,IAAWL;AAAA,MACf,MACEI,IACIpC,EAAM;AAAA,QAAO,CAACmC,MACZA,EAAK,MAAM,YAAA,EAAc,SAASC,CAAe;AAAA,MAAA,IAEnDpC;AAAA,MACN,CAACA,GAAOoC,CAAe;AAAA,IAAA,GAGnBE,IAAe9B,KAAaE,EAAE,oBAAoB,GAClD6B,IAAsBnC,KAAeM,EAAE,oBAAoB;AAEjE,6BACG8B,EAAQ,MAAR,EAAa,MAAAvB,GAAY,cAAcQ,GAAkB,IAAAnB,GACxD,UAAA;AAAA,MAAA,gBAAAmC,EAACD,EAAQ,SAAR,EAAgB,SAAO,IACtB,UAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAAjC;AAAA,UACA,MAAK;AAAA,UACL,QAAO;AAAA,UACP,UAAAJ;AAAA,UACA,cAAYiC;AAAA,UACZ,WAAA/B;AAAA,UACA,kBAAe;AAAA,UACf,qBAAmBD;AAAA,UAElB,UAAA4B,IACC,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAU;AAAA,cAET,UAAAP,EAAa;AAAA,YAAA;AAAA,UAAA,IAGhB,gBAAAO,EAAC,QAAA,EAAK,WAAU,2DACb,UAAAF,EAAA,CACH;AAAA,QAAA;AAAA,MAAA,GAGN;AAAA,MAEA,gBAAAE;AAAA,QAACD,EAAQ;AAAA,QAAR;AAAA,UACC,OAAM;AAAA,UACN,WAAW;AAAA,UACX,cAAYF;AAAA,UACZ,WAAU;AAAA,UAEV,UAAA,gBAAAK,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,YAAA,gBAAAF;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOzB;AAAA,gBACP,UAAU,CAAC0B,MACTzB,EAASyB,EAAM,OAAO,KAAK;AAAA,gBAE7B,aAAanC,EAAE,mBAAmB;AAAA,gBAClC,cAAYA,EAAE,mBAAmB;AAAA,gBACjC,kCAAiBoC,GAAA,EAAO;AAAA,gBACxB,WAAS;AAAA,gBACT,SAAS,MAAM1B,EAAS,EAAE;AAAA,gBAC1B,cAAa;AAAA,cAAA;AAAA,YAAA;AAAA,YAGdiB,EAAS,WAAW,IACnB,gBAAAI;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBAET,YAAE,sBAAsB;AAAA,cAAA;AAAA,YAAA,IAG3B,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,cAAYH;AAAA,gBACZ,WAAU;AAAA,gBAET,UAAAD,EAAS,IAAI,CAACF,MAAS;AACtB,wBAAMY,IAAWZ,EAAK,OAAOnB;AAC7B,yBACE,gBAAAyB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBAEC,MAAK;AAAA,sBACL,cAAYN,EAAK;AAAA,sBACjB,gBAAcY;AAAA,sBACd,SAAS,MAAMjB,EAAaK,EAAK,EAAE;AAAA,sBACnC,WAAWvC,EAAe,EAAE,UAAAmD,GAAU;AAAA,sBAEtC,4BAAC,QAAA,EAAK,eAAY,QAAO,WAAU,kBAChC,YAAK,KAAA,CACR;AAAA,oBAAA;AAAA,oBATKZ,EAAK;AAAA,kBAAA;AAAA,gBAYhB,CAAC;AAAA,cAAA;AAAA,YAAA;AAAA,UACH,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,EAEJ;AACF;AAEArC,EAAW,cAAc;"}
|
|
@@ -2,7 +2,7 @@ import { jsxs as u, jsx as i } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as I, useState as O, useRef as m, useEffect as k, useMemo as z } from "react";
|
|
3
3
|
import { c as C } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as D } from "react-i18next";
|
|
5
|
-
import { P as o } from "./popover-
|
|
5
|
+
import { P as o } from "./popover-BG75rYjN.js";
|
|
6
6
|
import { u as P } from "./registry-DvAUVLHh.js";
|
|
7
7
|
import { I as A } from "./info-CGn22peZ.js";
|
|
8
8
|
const R = {
|
|
@@ -163,4 +163,4 @@ export {
|
|
|
163
163
|
j as I,
|
|
164
164
|
R as i
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=info-tip-
|
|
166
|
+
//# sourceMappingURL=info-tip-CJpNpzZe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info-tip-B0jmIt6M.js","sources":["../../src/components/info-tip/info-tip.agent.ts","../../src/components/info-tip/info-tip.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { InfoTipHandle } from './info-tip';\n\nexport const infoTipAgent: AgentAdapter<InfoTipHandle> = {\n id: 'info-tip',\n capabilities: ['open', 'close'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.infoTip.state.isOpen',\n description: 'True when the info tip card is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.infoTip.actions.open',\n description: 'Open the info tip card.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.infoTip.actions.close',\n description: 'Close the info tip card.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'info-tip',\n description: 'Marks the InfoTip trigger button.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on InfoTip.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Info } from 'lucide-react';\nimport { Popover } from '../popover';\nimport { useAgentRegistration } from '../../agent';\nimport { infoTipAgent } from './info-tip.agent';\n\n/* -------------------------------------------------------------------- */\n/* Trigger — a small circular, branded affordance: card surface inside */\n/* the circle, accent ring + accent \"i\" glyph, and a soft drop shadow. */\n/* The accent alias is safe here: `--accent` resolves to magenta-700 in */\n/* light mode (the AA-safe interactive step) and the dark accent on dark */\n/* surfaces — never reference a raw magenta ramp step. */\n/* -------------------------------------------------------------------- */\n\nconst infoTipTriggerVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--card)]',\n 'ds:text-[var(--accent)]',\n // Single ring: the Lucide Info glyph draws its own accent circle, so the\n // trigger carries NO CSS border of its own (a border would read as a\n // second, concentric ring). The white circle comes from `bg-card` showing\n // through the glyph, lifted by the drop shadow.\n 'ds:shadow-[var(--shadow-sm)]',\n 'ds:cursor-pointer',\n 'ds:transition-[color,box-shadow] ds:motion-reduce:transition-none',\n 'ds:hover:text-[var(--accent-hover)] ds:hover:shadow-[var(--shadow-md)]',\n 'ds:data-[state=open]:text-[var(--accent-hover)] ds:data-[state=open]:shadow-[var(--shadow-md)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n // Both diameters sit below `--min-target-size` (44/48px), so each\n // re-uses IconButton's invisible `::before` hit-area expansion to a\n // full touch target on touch / small screens. From the `sm:`\n // breakpoint up the pointer is precise, so the expansion relaxes —\n // but the interactive target must never fall below WCAG 2.5.8's 24px:\n // • md (24px visual) already meets the 24px floor, so its `::before`\n // is hidden on desktop and the 24px circle IS the target.\n // • sm (20px visual) would fall to 20px if hidden — below the floor\n // — so instead of hiding, its `::before` shrinks to a persistent\n // `--spacing-lg` (24px) minimum that holds on desktop too.\n sm: 'ds:w-5 ds:h-5 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:inset-x-[calc((var(--spacing-lg)-100%)/-2)] ds:sm:before:inset-y-[calc((var(--spacing-lg)-100%)/-2)]',\n md: 'ds:w-6 ds:h-6 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\n// Curated agent-readiness handle — see info-tip.agent.ts.\nexport interface InfoTipHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface InfoTipProps {\n /** Body of the tip — explanatory text shown in the floating card. */\n content: ReactNode;\n /** Optional heading rendered above the body. */\n heading?: ReactNode;\n /**\n * Trigger diameter. Also maps the floating card width:\n * `sm` → `--popover-size-sm`, `md` → `--popover-size-md`.\n */\n size?: 'sm' | 'md';\n /** Logical side the card opens on. Default `'top'`. */\n side?: 'start' | 'top' | 'end' | 'bottom';\n /** Alignment along the side axis. Default `'center'`. */\n align?: 'start' | 'center' | 'end';\n /**\n * Accessible name for the trigger. Defaults to the translated\n * \"More information\" chrome string.\n */\n 'aria-label'?: string;\n /**\n * Opaque instance id — emitted as `data-component-id` on the trigger and\n * used to register the instance with the host agent registry.\n */\n id?: string;\n /** Extra classes merged onto the trigger button. */\n className?: string;\n}\n\n/**\n * InfoTip — a deliberate, branded \"more information\" affordance: a small\n * circular trigger that reveals an explanatory card on hover **and** click\n * (click also serves touch devices). Composes the kit Popover in\n * `openOn=\"hover-or-click\"` mode — hover intent, keyboard focus, Escape and\n * focus-return are all handled by the Popover/Radix layer.\n */\nexport const InfoTip = forwardRef<HTMLButtonElement, InfoTipProps>(\n (\n {\n content,\n heading,\n size = 'md',\n side = 'top',\n align = 'center',\n 'aria-label': ariaLabelProp,\n id,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const [open, setOpen] = useState(false);\n\n // Agent handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const agentHandle = useMemo<InfoTipHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [],\n );\n useAgentRegistration(infoTipAgent, agentHandle, id);\n\n // Press bookkeeping. In hover-or-click mode the Popover opens as soon as\n // the trigger receives focus — which happens on pointerdown, BEFORE the\n // click event that Radix uses to toggle. Without intervention every\n // click/tap on a closed tip opens it (focus) and instantly toggles it\n // closed again (click). So each press (pointerdown, or Enter/Space)\n // snapshots the open state and the click handler consumes it: if the\n // press itself opened the card, swallow Radix's toggle so the card stays\n // open; if it was already open, let the toggle close it.\n //\n // `null` means \"no press recorded for this click\" — an orphan click\n // (programmatic .click(), or assistive tech dispatching click with no\n // pointer/key event). Those must fall through to Radix's default toggle\n // rather than read a stale snapshot, so the guard treats `null` as\n // \"don't suppress\" and every click clears the snapshot back to `null`.\n const pressStateRef = useRef<boolean | null>(null);\n const handlePressStart = () => {\n pressStateRef.current = openRef.current;\n };\n\n const ariaLabel =\n ariaLabelProp ?? t('infoTip.triggerLabel', 'More information');\n\n return (\n <Popover openOn=\"hover-or-click\" open={open} onOpenChange={setOpen}>\n <Popover.Trigger\n ref={ref}\n aria-label={ariaLabel}\n className={infoTipTriggerVariants({ size, className })}\n data-component=\"info-tip\"\n data-component-id={id}\n onPointerDown={handlePressStart}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n handlePressStart();\n }\n }}\n onClick={(event) => {\n // Consume this click's press snapshot. A genuine pointer/keyboard\n // press recorded `false`/`true` on press-start; an orphan click\n // with no preceding pointerdown/keydown finds `null` and is left\n // to Radix's default toggle.\n const wasOpenAtPressStart = pressStateRef.current;\n pressStateRef.current = null;\n if (wasOpenAtPressStart === false && openRef.current) {\n // This press opened the card via focus — keep it open and\n // skip Radix's click toggle.\n event.preventDefault();\n }\n }}\n >\n <Info\n aria-hidden=\"true\"\n // Fills the circle so the glyph's own ring IS the trigger's\n // visible edge and the drop shadow hugs it.\n className={size === 'sm' ? 'ds:size-5' : 'ds:size-6'}\n />\n </Popover.Trigger>\n <Popover.Content\n side={side}\n align={align}\n size={size === 'sm' ? 'sm' : 'md'}\n // The card is a Radix `role=\"dialog\"` surface, which axe requires\n // to have an accessible name (aria-dialog-name). With a heading,\n // Popover wires aria-labelledby; without one, fall back to the\n // trigger's label.\n aria-label={heading == null ? ariaLabel : undefined}\n // Toggletip focus contract: the card is explanatory text, never\n // interactive, so focus stays on the trigger for the whole\n // open/close cycle. Preventing the open move also keeps Escape\n // reliable — if Radix pulled focus into the card, closing would\n // refocus the trigger and re-fire the hover-mode focus handler,\n // reopening the card it just closed. Preventing the close move\n // keeps an unhover-close from stealing focus mid-task.\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n >\n {heading != null && <Popover.Heading>{heading}</Popover.Heading>}\n <Popover.Description>{content}</Popover.Description>\n </Popover.Content>\n </Popover>\n );\n },\n);\n\nInfoTip.displayName = 'InfoTip';\n"],"names":["infoTipAgent","handle","infoTipTriggerVariants","cva","InfoTip","forwardRef","content","heading","size","side","align","ariaLabelProp","id","className","ref","t","useTranslation","open","setOpen","useState","openRef","useRef","useEffect","agentHandle","useMemo","useAgentRegistration","pressStateRef","handlePressStart","ariaLabel","Popover","jsx","event","wasOpenAtPressStart","Info","jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"info-tip-CJpNpzZe.js","sources":["../../src/components/info-tip/info-tip.agent.ts","../../src/components/info-tip/info-tip.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { InfoTipHandle } from './info-tip';\n\nexport const infoTipAgent: AgentAdapter<InfoTipHandle> = {\n id: 'info-tip',\n capabilities: ['open', 'close'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.infoTip.state.isOpen',\n description: 'True when the info tip card is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.infoTip.actions.open',\n description: 'Open the info tip card.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.infoTip.actions.close',\n description: 'Close the info tip card.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'info-tip',\n description: 'Marks the InfoTip trigger button.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on InfoTip.',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Info } from 'lucide-react';\nimport { Popover } from '../popover';\nimport { useAgentRegistration } from '../../agent';\nimport { infoTipAgent } from './info-tip.agent';\n\n/* -------------------------------------------------------------------- */\n/* Trigger — a small circular, branded affordance: card surface inside */\n/* the circle, accent ring + accent \"i\" glyph, and a soft drop shadow. */\n/* The accent alias is safe here: `--accent` resolves to magenta-700 in */\n/* light mode (the AA-safe interactive step) and the dark accent on dark */\n/* surfaces — never reference a raw magenta ramp step. */\n/* -------------------------------------------------------------------- */\n\nconst infoTipTriggerVariants = cva(\n [\n 'ds:relative ds:inline-flex ds:shrink-0 ds:items-center ds:justify-center',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--card)]',\n 'ds:text-[var(--accent)]',\n // Single ring: the Lucide Info glyph draws its own accent circle, so the\n // trigger carries NO CSS border of its own (a border would read as a\n // second, concentric ring). The white circle comes from `bg-card` showing\n // through the glyph, lifted by the drop shadow.\n 'ds:shadow-[var(--shadow-sm)]',\n 'ds:cursor-pointer',\n 'ds:transition-[color,box-shadow] ds:motion-reduce:transition-none',\n 'ds:hover:text-[var(--accent-hover)] ds:hover:shadow-[var(--shadow-md)]',\n 'ds:data-[state=open]:text-[var(--accent-hover)] ds:data-[state=open]:shadow-[var(--shadow-md)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n // Both diameters sit below `--min-target-size` (44/48px), so each\n // re-uses IconButton's invisible `::before` hit-area expansion to a\n // full touch target on touch / small screens. From the `sm:`\n // breakpoint up the pointer is precise, so the expansion relaxes —\n // but the interactive target must never fall below WCAG 2.5.8's 24px:\n // • md (24px visual) already meets the 24px floor, so its `::before`\n // is hidden on desktop and the 24px circle IS the target.\n // • sm (20px visual) would fall to 20px if hidden — below the floor\n // — so instead of hiding, its `::before` shrinks to a persistent\n // `--spacing-lg` (24px) minimum that holds on desktop too.\n sm: 'ds:w-5 ds:h-5 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:inset-x-[calc((var(--spacing-lg)-100%)/-2)] ds:sm:before:inset-y-[calc((var(--spacing-lg)-100%)/-2)]',\n md: 'ds:w-6 ds:h-6 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\n// Curated agent-readiness handle — see info-tip.agent.ts.\nexport interface InfoTipHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface InfoTipProps {\n /** Body of the tip — explanatory text shown in the floating card. */\n content: ReactNode;\n /** Optional heading rendered above the body. */\n heading?: ReactNode;\n /**\n * Trigger diameter. Also maps the floating card width:\n * `sm` → `--popover-size-sm`, `md` → `--popover-size-md`.\n */\n size?: 'sm' | 'md';\n /** Logical side the card opens on. Default `'top'`. */\n side?: 'start' | 'top' | 'end' | 'bottom';\n /** Alignment along the side axis. Default `'center'`. */\n align?: 'start' | 'center' | 'end';\n /**\n * Accessible name for the trigger. Defaults to the translated\n * \"More information\" chrome string.\n */\n 'aria-label'?: string;\n /**\n * Opaque instance id — emitted as `data-component-id` on the trigger and\n * used to register the instance with the host agent registry.\n */\n id?: string;\n /** Extra classes merged onto the trigger button. */\n className?: string;\n}\n\n/**\n * InfoTip — a deliberate, branded \"more information\" affordance: a small\n * circular trigger that reveals an explanatory card on hover **and** click\n * (click also serves touch devices). Composes the kit Popover in\n * `openOn=\"hover-or-click\"` mode — hover intent, keyboard focus, Escape and\n * focus-return are all handled by the Popover/Radix layer.\n */\nexport const InfoTip = forwardRef<HTMLButtonElement, InfoTipProps>(\n (\n {\n content,\n heading,\n size = 'md',\n side = 'top',\n align = 'center',\n 'aria-label': ariaLabelProp,\n id,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation('ui');\n const [open, setOpen] = useState(false);\n\n // Agent handle.\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const agentHandle = useMemo<InfoTipHandle>(\n () => ({\n getIsOpen: () => openRef.current,\n open: () => setOpen(true),\n close: () => setOpen(false),\n }),\n [],\n );\n useAgentRegistration(infoTipAgent, agentHandle, id);\n\n // Press bookkeeping. In hover-or-click mode the Popover opens as soon as\n // the trigger receives focus — which happens on pointerdown, BEFORE the\n // click event that Radix uses to toggle. Without intervention every\n // click/tap on a closed tip opens it (focus) and instantly toggles it\n // closed again (click). So each press (pointerdown, or Enter/Space)\n // snapshots the open state and the click handler consumes it: if the\n // press itself opened the card, swallow Radix's toggle so the card stays\n // open; if it was already open, let the toggle close it.\n //\n // `null` means \"no press recorded for this click\" — an orphan click\n // (programmatic .click(), or assistive tech dispatching click with no\n // pointer/key event). Those must fall through to Radix's default toggle\n // rather than read a stale snapshot, so the guard treats `null` as\n // \"don't suppress\" and every click clears the snapshot back to `null`.\n const pressStateRef = useRef<boolean | null>(null);\n const handlePressStart = () => {\n pressStateRef.current = openRef.current;\n };\n\n const ariaLabel =\n ariaLabelProp ?? t('infoTip.triggerLabel', 'More information');\n\n return (\n <Popover openOn=\"hover-or-click\" open={open} onOpenChange={setOpen}>\n <Popover.Trigger\n ref={ref}\n aria-label={ariaLabel}\n className={infoTipTriggerVariants({ size, className })}\n data-component=\"info-tip\"\n data-component-id={id}\n onPointerDown={handlePressStart}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n handlePressStart();\n }\n }}\n onClick={(event) => {\n // Consume this click's press snapshot. A genuine pointer/keyboard\n // press recorded `false`/`true` on press-start; an orphan click\n // with no preceding pointerdown/keydown finds `null` and is left\n // to Radix's default toggle.\n const wasOpenAtPressStart = pressStateRef.current;\n pressStateRef.current = null;\n if (wasOpenAtPressStart === false && openRef.current) {\n // This press opened the card via focus — keep it open and\n // skip Radix's click toggle.\n event.preventDefault();\n }\n }}\n >\n <Info\n aria-hidden=\"true\"\n // Fills the circle so the glyph's own ring IS the trigger's\n // visible edge and the drop shadow hugs it.\n className={size === 'sm' ? 'ds:size-5' : 'ds:size-6'}\n />\n </Popover.Trigger>\n <Popover.Content\n side={side}\n align={align}\n size={size === 'sm' ? 'sm' : 'md'}\n // The card is a Radix `role=\"dialog\"` surface, which axe requires\n // to have an accessible name (aria-dialog-name). With a heading,\n // Popover wires aria-labelledby; without one, fall back to the\n // trigger's label.\n aria-label={heading == null ? ariaLabel : undefined}\n // Toggletip focus contract: the card is explanatory text, never\n // interactive, so focus stays on the trigger for the whole\n // open/close cycle. Preventing the open move also keeps Escape\n // reliable — if Radix pulled focus into the card, closing would\n // refocus the trigger and re-fire the hover-mode focus handler,\n // reopening the card it just closed. Preventing the close move\n // keeps an unhover-close from stealing focus mid-task.\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n >\n {heading != null && <Popover.Heading>{heading}</Popover.Heading>}\n <Popover.Description>{content}</Popover.Description>\n </Popover.Content>\n </Popover>\n );\n },\n);\n\nInfoTip.displayName = 'InfoTip';\n"],"names":["infoTipAgent","handle","infoTipTriggerVariants","cva","InfoTip","forwardRef","content","heading","size","side","align","ariaLabelProp","id","className","ref","t","useTranslation","open","setOpen","useState","openRef","useRef","useEffect","agentHandle","useMemo","useAgentRegistration","pressStateRef","handlePressStart","ariaLabel","Popover","jsx","event","wasOpenAtPressStart","Info","jsxs"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createElement as e } from "react";
|
|
2
|
-
import { P as i } from "./pregnancy-dating-
|
|
2
|
+
import { P as i } from "./pregnancy-dating-BFzv9g1N.js";
|
|
3
3
|
import { P as o } from "./pregnancy-weight-gain-CUUrBTBo.js";
|
|
4
|
-
import { G as r } from "./gestational-age-calculator-
|
|
5
|
-
import { C as c } from "./cycle-calculator-
|
|
4
|
+
import { G as r } from "./gestational-age-calculator-CZi43xKG.js";
|
|
5
|
+
import { C as c } from "./cycle-calculator-Cww9DzIa.js";
|
|
6
6
|
import { F as s } from "./fetal-weight-BWaqqjea.js";
|
|
7
7
|
import { c as a } from "./createLucideIcon-DhHxpK9K.js";
|
|
8
8
|
import { B as n } from "./baby-Dku-Xvg9.js";
|
|
@@ -91,4 +91,4 @@ const k = [
|
|
|
91
91
|
export {
|
|
92
92
|
I as k
|
|
93
93
|
};
|
|
94
|
-
//# sourceMappingURL=kit-extensions-
|
|
94
|
+
//# sourceMappingURL=kit-extensions-DYVxWcqv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kit-extensions-
|
|
1
|
+
{"version":3,"file":"kit-extensions-DYVxWcqv.js","sources":["../../node_modules/lucide-react/dist/esm/icons/calendar-heart.mjs","../../node_modules/lucide-react/dist/esm/icons/scale.mjs","../../src/components/rich-text-editor/kit-extensions.ts"],"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 [\n \"path\",\n { d: \"M12.127 22H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v5.125\", key: \"vxdnp4\" }\n ],\n [\n \"path\",\n {\n d: \"M14.62 18.8A2.25 2.25 0 1 1 18 15.836a2.25 2.25 0 1 1 3.38 2.966l-2.626 2.856a.998.998 0 0 1-1.507 0z\",\n key: \"15cy7q\"\n }\n ],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }],\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }]\n];\nconst CalendarHeart = createLucideIcon(\"calendar-heart\", __iconNode);\n\nexport { __iconNode, CalendarHeart as default };\n//# sourceMappingURL=calendar-heart.mjs.map\n","/**\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: \"M12 3v18\", key: \"108xh3\" }],\n [\"path\", { d: \"m19 8 3 8a5 5 0 0 1-6 0zV7\", key: \"zcdpyk\" }],\n [\"path\", { d: \"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1\", key: \"1yorad\" }],\n [\"path\", { d: \"m5 8 3 8a5 5 0 0 1-6 0zV7\", key: \"eua70x\" }],\n [\"path\", { d: \"M7 21h10\", key: \"1b0cd5\" }]\n];\nconst Scale = createLucideIcon(\"scale\", __iconNode);\n\nexport { __iconNode, Scale as default };\n//# sourceMappingURL=scale.mjs.map\n","import { createElement } from 'react';\nimport { Baby, CalendarHeart, Heart, Scale } from 'lucide-react';\nimport { PregnancyDating } from '../pregnancy-dating';\nimport { PregnancyWeightGain } from '../pregnancy-weight-gain';\nimport { GestationalAgeCalculator } from '../gestational-age-calculator';\nimport { CycleCalculator } from '../cycle-calculator';\nimport { FetalWeight } from '../fetal-weight';\nimport type { EditorExtension } from './editor-extensions';\n\n/** Labels are resolved by the editor's useTranslation, including live locale changes. */\nexport const kitEditorExtensions: EditorExtension[] = [\n {\n id: 'pregnancy-dating',\n label: 'insert.title.pregnancyDating',\n icon: createElement(CalendarHeart),\n kind: 'panel',\n contexts: ['note', 'diagnosis'],\n source: { kind: 'kit' },\n render: ({ insert }) =>\n createElement(PregnancyDating, { onInsert: insert }),\n },\n {\n id: 'pregnancy-weight-gain',\n label: 'insert.title.weightGain',\n icon: createElement(Baby),\n kind: 'panel',\n contexts: ['note', 'diagnosis'],\n source: { kind: 'kit' },\n render: ({ insert }) =>\n createElement(PregnancyWeightGain, { onInsert: insert }),\n },\n {\n id: 'gestational-age-calculator',\n label: 'insert.title.gestationalAge',\n icon: createElement(Baby),\n kind: 'panel',\n contexts: ['note', 'diagnosis'],\n source: { kind: 'kit' },\n render: ({ insert }) =>\n createElement(GestationalAgeCalculator, { onInsert: insert }),\n },\n {\n id: 'cycle-calculator',\n label: 'insert.title.cycle',\n icon: createElement(Heart),\n kind: 'panel',\n contexts: ['note', 'diagnosis'],\n source: { kind: 'kit' },\n render: ({ insert }) =>\n createElement(CycleCalculator, { onInsert: insert }),\n },\n {\n id: 'fetal-weight',\n label: 'insert.title.fetalWeight',\n icon: createElement(Scale),\n kind: 'panel',\n contexts: ['note', 'diagnosis'],\n source: { kind: 'kit' },\n render: ({ insert }) => createElement(FetalWeight, { onInsert: insert }),\n },\n];\n"],"names":["__iconNode","CalendarHeart","createLucideIcon","Scale","kitEditorExtensions","createElement","insert","PregnancyDating","Baby","PregnancyWeightGain","GestationalAgeCalculator","Heart","CycleCalculator","FetalWeight"],"mappings":";;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA,EAAE,GAAG,qEAAqE,KAAK,SAAQ;AAAA,EAC3F;AAAA,EACE;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,UAAU,KAAK,SAAQ,CAAE;AACzC,GACMC,IAAgBC,EAAiB,kBAAkBF,CAAU;ACzBnE;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,8BAA8B,KAAK,SAAQ,CAAE;AAAA,EAC3D,CAAC,QAAQ,EAAE,GAAG,4CAA4C,KAAK,SAAQ,CAAE;AAAA,EACzE,CAAC,QAAQ,EAAE,GAAG,6BAA6B,KAAK,SAAQ,CAAE;AAAA,EAC1D,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C,GACMG,IAAQD,EAAiB,SAASF,CAAU,GCNrCI,IAAyC;AAAA,EACpD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAMC,EAAcJ,CAAa;AAAA,IACjC,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW;AAAA,IAC9B,QAAQ,EAAE,MAAM,MAAA;AAAA,IAChB,QAAQ,CAAC,EAAE,QAAAK,EAAA,MACTD,EAAcE,GAAiB,EAAE,UAAUD,EAAA,CAAQ;AAAA,EAAA;AAAA,EAEvD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAMD,EAAcG,CAAI;AAAA,IACxB,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW;AAAA,IAC9B,QAAQ,EAAE,MAAM,MAAA;AAAA,IAChB,QAAQ,CAAC,EAAE,QAAAF,EAAA,MACTD,EAAcI,GAAqB,EAAE,UAAUH,EAAA,CAAQ;AAAA,EAAA;AAAA,EAE3D;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAMD,EAAcG,CAAI;AAAA,IACxB,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW;AAAA,IAC9B,QAAQ,EAAE,MAAM,MAAA;AAAA,IAChB,QAAQ,CAAC,EAAE,QAAAF,EAAA,MACTD,EAAcK,GAA0B,EAAE,UAAUJ,EAAA,CAAQ;AAAA,EAAA;AAAA,EAEhE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAMD,EAAcM,CAAK;AAAA,IACzB,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW;AAAA,IAC9B,QAAQ,EAAE,MAAM,MAAA;AAAA,IAChB,QAAQ,CAAC,EAAE,QAAAL,EAAA,MACTD,EAAcO,GAAiB,EAAE,UAAUN,EAAA,CAAQ;AAAA,EAAA;AAAA,EAEvD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAMD,EAAcF,CAAK;AAAA,IACzB,MAAM;AAAA,IACN,UAAU,CAAC,QAAQ,WAAW;AAAA,IAC9B,QAAQ,EAAE,MAAM,MAAA;AAAA,IAChB,QAAQ,CAAC,EAAE,QAAAG,EAAA,MAAaD,EAAcQ,GAAa,EAAE,UAAUP,EAAA,CAAQ;AAAA,EAAA;AAE3E;","x_google_ignoreList":[0,1]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as u, jsxs as R } from "react/jsx-runtime";
|
|
2
2
|
import { useState as x, useEffect as w, useCallback as W, useMemo as E, useRef as ee } from "react";
|
|
3
3
|
import { useGridFilter as V } from "ag-grid-react";
|
|
4
|
-
import { D as te } from "./date-range-picker-
|
|
4
|
+
import { D as te } from "./date-range-picker-CFk-5O3R.js";
|
|
5
5
|
import { useTranslation as M } from "react-i18next";
|
|
6
6
|
import { C as le } from "./checkbox--ndmyokr.js";
|
|
7
7
|
import { B as j } from "./button-Bn16lcFM.js";
|
|
8
8
|
import { M as se } from "./multi-select-BT23EnSA.js";
|
|
9
|
-
import { S as ie } from "./scroll-area-
|
|
9
|
+
import { S as ie } from "./scroll-area-CY5SLYNw.js";
|
|
10
10
|
import { A as ne } from "./autocomplete-DosDnGie.js";
|
|
11
11
|
import { N as D } from "./number-input-CVwI1ltI.js";
|
|
12
12
|
import { S as oe } from "./select-Ce5RMk93.js";
|
|
@@ -864,4 +864,4 @@ export {
|
|
|
864
864
|
Ke as g,
|
|
865
865
|
k as h
|
|
866
866
|
};
|
|
867
|
-
//# sourceMappingURL=link-cell-renderer-
|
|
867
|
+
//# sourceMappingURL=link-cell-renderer-C1wOyxDF.js.map
|