@alfadocs/ui-kit-debug 0.8.1 → 0.9.1
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/{agenda-card-CalZqycc.js → agenda-card-CsCm7hQv.js} +5 -5
- package/dist/_chunks/agenda-card-CsCm7hQv.js.map +1 -0
- package/dist/_chunks/{agenda-tray-3ffFDQZC.js → agenda-tray-B8QZ3wEp.js} +9 -9
- package/dist/_chunks/agenda-tray-B8QZ3wEp.js.map +1 -0
- package/dist/_chunks/{ai-prompt-input-DLgY8lrW.js → ai-prompt-input-bAJwYu84.js} +45 -45
- package/dist/_chunks/ai-prompt-input-bAJwYu84.js.map +1 -0
- package/dist/_chunks/{alert-CVMq99Cq.js → alert-pgdXrEO5.js} +2 -2
- package/dist/_chunks/{alert-CVMq99Cq.js.map → alert-pgdXrEO5.js.map} +1 -1
- package/dist/_chunks/{app-frame-CDJOgPXe.js → app-frame-BYx1gcV7.js} +2 -2
- package/dist/_chunks/{app-frame-CDJOgPXe.js.map → app-frame-BYx1gcV7.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-cOl_Z_Pk.js → audio-recorder-BHBonrFf.js} +54 -54
- package/dist/_chunks/{audio-recorder-cOl_Z_Pk.js.map → audio-recorder-BHBonrFf.js.map} +1 -1
- package/dist/_chunks/{audio-visualiser-ByDEFLNm.js → audio-visualiser-I-T4Z7EU.js} +2 -2
- package/dist/_chunks/audio-visualiser-I-T4Z7EU.js.map +1 -0
- package/dist/_chunks/{autocomplete-D4oUZbsP.js → autocomplete-C34hbfKh.js} +6 -6
- package/dist/_chunks/autocomplete-C34hbfKh.js.map +1 -0
- package/dist/_chunks/{avatar-Dcr6XuDQ.js → avatar-I10iCDs8.js} +2 -2
- package/dist/_chunks/{avatar-Dcr6XuDQ.js.map → avatar-I10iCDs8.js.map} +1 -1
- package/dist/_chunks/{badge-DKFbntoa.js → badge-cLYVGlMh.js} +2 -2
- package/dist/_chunks/{badge-DKFbntoa.js.map → badge-cLYVGlMh.js.map} +1 -1
- package/dist/_chunks/{balance-cell-renderer-BuExGe6u.js → balance-cell-renderer-DWWtX-VM.js} +5 -5
- package/dist/_chunks/{balance-cell-renderer-BuExGe6u.js.map → balance-cell-renderer-DWWtX-VM.js.map} +1 -1
- package/dist/_chunks/{breadcrumb-D1snXjPb.js → breadcrumb--YI7lcHA.js} +4 -4
- package/dist/_chunks/breadcrumb--YI7lcHA.js.map +1 -0
- package/dist/_chunks/{button-group-CONver7M.js → button-group-Bh2g_Ng-.js} +2 -2
- package/dist/_chunks/button-group-Bh2g_Ng-.js.map +1 -0
- package/dist/_chunks/{chat-container-ClzsWXp2.js → chat-container-izziXViv.js} +4 -4
- package/dist/_chunks/chat-container-izziXViv.js.map +1 -0
- package/dist/_chunks/{chat-message-DoAhgUTj.js → chat-message-g3lxpXM_.js} +2 -2
- package/dist/_chunks/{chat-message-DoAhgUTj.js.map → chat-message-g3lxpXM_.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-CarPLDIC.js → checkbox-group-Qkm3Rg1S.js} +6 -6
- package/dist/_chunks/checkbox-group-Qkm3Rg1S.js.map +1 -0
- package/dist/_chunks/{color-picker-CTIcHlDF.js → color-picker-BPfcByHH.js} +13 -13
- package/dist/_chunks/color-picker-BPfcByHH.js.map +1 -0
- package/dist/_chunks/{combobox-BLWruOxK.js → combobox-BHhnR3qm.js} +8 -12
- package/dist/_chunks/combobox-BHhnR3qm.js.map +1 -0
- package/dist/_chunks/{contact-card-DNyATxKv.js → contact-card-VJIUqKB2.js} +13 -13
- package/dist/_chunks/contact-card-VJIUqKB2.js.map +1 -0
- package/dist/_chunks/{date-picker-B1PO1ZQP.js → date-picker-BD5FYW08.js} +3 -3
- package/dist/_chunks/{date-picker-B1PO1ZQP.js.map → date-picker-BD5FYW08.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-mix2nEVC.js → date-range-picker-BZLVgcXE.js} +27 -27
- package/dist/_chunks/date-range-picker-BZLVgcXE.js.map +1 -0
- package/dist/_chunks/{date-time-picker-Dnong_BY.js → date-time-picker-CCoRWX7R.js} +5 -5
- package/dist/_chunks/date-time-picker-CCoRWX7R.js.map +1 -0
- package/dist/_chunks/{description-list-BYA77Yud.js → description-list-y7Hk51KI.js} +16 -16
- package/dist/_chunks/description-list-y7Hk51KI.js.map +1 -0
- package/dist/_chunks/{dialog-W8uDfXD8.js → dialog-DRp6Dejy.js} +2 -2
- package/dist/_chunks/{dialog-W8uDfXD8.js.map → dialog-DRp6Dejy.js.map} +1 -1
- package/dist/_chunks/{file-upload-C947ACDK.js → file-upload-DIecAfC-.js} +82 -86
- package/dist/_chunks/file-upload-DIecAfC-.js.map +1 -0
- package/dist/_chunks/{floating-action-button-C8OYj8mE.js → floating-action-button-pojvb9gG.js} +6 -6
- package/dist/_chunks/{floating-action-button-C8OYj8mE.js.map → floating-action-button-pojvb9gG.js.map} +1 -1
- package/dist/_chunks/{form-field-Bmkeh7WY.js → form-field-BOm9hK35.js} +2 -2
- package/dist/_chunks/form-field-BOm9hK35.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-B9kIDtm1.js → freemium-paywall-BTEiVkes.js} +29 -29
- package/dist/_chunks/freemium-paywall-BTEiVkes.js.map +1 -0
- package/dist/_chunks/{key-value-pair-CgWvAIGb.js → key-value-pair-AbrRwesr.js} +14 -14
- package/dist/_chunks/key-value-pair-AbrRwesr.js.map +1 -0
- package/dist/_chunks/{leo-sidebar-BWECDYpu.js → leo-sidebar-B054wsZm.js} +8 -8
- package/dist/_chunks/{leo-sidebar-BWECDYpu.js.map → leo-sidebar-B054wsZm.js.map} +1 -1
- package/dist/_chunks/{link-BcYW1eNM.js → link-BGpwaFik.js} +2 -2
- package/dist/_chunks/{link-BcYW1eNM.js.map → link-BGpwaFik.js.map} +1 -1
- package/dist/_chunks/{list-qP6p0NTw.js → list-DcjV0m5B.js} +2 -2
- package/dist/_chunks/list-DcjV0m5B.js.map +1 -0
- package/dist/_chunks/{message-card-DjvsB_3U.js → message-card-c6R0-qXq.js} +6 -6
- package/dist/_chunks/message-card-c6R0-qXq.js.map +1 -0
- package/dist/_chunks/{message-tray-BbnAzlLH.js → message-tray-Fsend-du.js} +21 -21
- package/dist/_chunks/message-tray-Fsend-du.js.map +1 -0
- package/dist/_chunks/{multi-select-wqqrgjUQ.js → multi-select-Bh-xR8kP.js} +10 -10
- package/dist/_chunks/multi-select-Bh-xR8kP.js.map +1 -0
- package/dist/_chunks/{navigation-menu-ClbHeawy.js → navigation-menu-Bav1d_wA.js} +2 -2
- package/dist/_chunks/navigation-menu-Bav1d_wA.js.map +1 -0
- package/dist/_chunks/{notification-card-uTPEvAQS.js → notification-card-ejOw5g6g.js} +3 -6
- package/dist/_chunks/notification-card-ejOw5g6g.js.map +1 -0
- package/dist/_chunks/{notification-tray-PGtMqXbP.js → notification-tray-C3dYdLAF.js} +21 -24
- package/dist/_chunks/notification-tray-C3dYdLAF.js.map +1 -0
- package/dist/_chunks/{number-input-Q7wkHnvQ.js → number-input-mpSLk-ld.js} +3 -3
- package/dist/_chunks/{number-input-Q7wkHnvQ.js.map → number-input-mpSLk-ld.js.map} +1 -1
- package/dist/_chunks/{otp-input-C9gUByF0.js → otp-input-CI-Zv5q6.js} +2 -2
- package/dist/_chunks/{otp-input-C9gUByF0.js.map → otp-input-CI-Zv5q6.js.map} +1 -1
- package/dist/_chunks/{pagination-3AC4zTsi.js → pagination-OQBlnb1H.js} +7 -7
- package/dist/_chunks/pagination-OQBlnb1H.js.map +1 -0
- package/dist/_chunks/{patient-shell-IhMULVrt.js → patient-shell-BS2V6V1b.js} +3 -3
- package/dist/_chunks/{patient-shell-IhMULVrt.js.map → patient-shell-BS2V6V1b.js.map} +1 -1
- package/dist/_chunks/{payment-form-C3HMAsGG.js → payment-form-CI77oIx1.js} +3 -3
- package/dist/_chunks/{payment-form-C3HMAsGG.js.map → payment-form-CI77oIx1.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-DO95bm2o.js → pdf-viewer-CNETPubN.js} +3 -3
- package/dist/_chunks/{pdf-viewer-DO95bm2o.js.map → pdf-viewer-CNETPubN.js.map} +1 -1
- package/dist/_chunks/{phone-input-CSHJOJ13.js → phone-input-DtBVs5fz.js} +7 -7
- package/dist/_chunks/phone-input-DtBVs5fz.js.map +1 -0
- package/dist/_chunks/{popover-DekUKNBk.js → popover--derJ_wq.js} +2 -2
- package/dist/_chunks/{popover-DekUKNBk.js.map → popover--derJ_wq.js.map} +1 -1
- package/dist/_chunks/{progress-C11tqhoI.js → progress-B-PSO5OS.js} +4 -4
- package/dist/_chunks/progress-B-PSO5OS.js.map +1 -0
- package/dist/_chunks/{recaptcha-widget-NyfOfLII.js → recaptcha-widget-Kp1XntuE.js} +3 -3
- package/dist/_chunks/recaptcha-widget-Kp1XntuE.js.map +1 -0
- package/dist/_chunks/{resizable-mpXXyIsN.js → resizable-COV-cnth.js} +3 -3
- package/dist/_chunks/resizable-COV-cnth.js.map +1 -0
- package/dist/_chunks/{search-bar-BTDfgYtg.js → search-bar-DmZZ9UvV.js} +2 -2
- package/dist/_chunks/{search-bar-BTDfgYtg.js.map → search-bar-DmZZ9UvV.js.map} +1 -1
- package/dist/_chunks/{search-input-CdJIEjFo.js → search-input-BBtSRH-Q.js} +4 -4
- package/dist/_chunks/{search-input-CdJIEjFo.js.map → search-input-BBtSRH-Q.js.map} +1 -1
- package/dist/_chunks/{select-BOU_Osnf.js → select-i9MwQeQy.js} +20 -20
- package/dist/_chunks/select-i9MwQeQy.js.map +1 -0
- package/dist/_chunks/{sheet-BAg7GY9j.js → sheet-BT0izeoI.js} +9 -9
- package/dist/_chunks/{sheet-BAg7GY9j.js.map → sheet-BT0izeoI.js.map} +1 -1
- package/dist/_chunks/{sidebar-Bx3wCDyy.js → sidebar-CoLHtVrP.js} +83 -83
- package/dist/_chunks/sidebar-CoLHtVrP.js.map +1 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-B9UrqOqH.js → sign-in-with-alfadocs-button-4zZC-I6y.js} +3 -3
- package/dist/_chunks/sign-in-with-alfadocs-button-4zZC-I6y.js.map +1 -0
- package/dist/_chunks/{skip-link-DmZ3c6cb.js → skip-link-BaSMtPwB.js} +2 -2
- package/dist/_chunks/{skip-link-DmZ3c6cb.js.map → skip-link-BaSMtPwB.js.map} +1 -1
- package/dist/_chunks/{slider-BT2bZWsy.js → slider-CkR6CLun.js} +3 -3
- package/dist/_chunks/slider-CkR6CLun.js.map +1 -0
- package/dist/_chunks/{sparkline-_gy8aJDG.js → sparkline-B5Ms55PZ.js} +16 -16
- package/dist/_chunks/sparkline-B5Ms55PZ.js.map +1 -0
- package/dist/_chunks/{spinner-DLaYfLPl.js → spinner-DirtWZNG.js} +2 -2
- package/dist/_chunks/spinner-DirtWZNG.js.map +1 -0
- package/dist/_chunks/{stat-B9PHSPbN.js → stat-CDQ_a0vk.js} +4 -4
- package/dist/_chunks/stat-CDQ_a0vk.js.map +1 -0
- package/dist/_chunks/{switch-C0psfIQF.js → switch-D916VW86.js} +2 -2
- package/dist/_chunks/{switch-C0psfIQF.js.map → switch-D916VW86.js.map} +1 -1
- package/dist/_chunks/{tabs-BZQy_Rmb.js → tabs-Cg794H0Q.js} +3 -3
- package/dist/_chunks/tabs-Cg794H0Q.js.map +1 -0
- package/dist/_chunks/{tag-DuLMjRbF.js → tag-CQmHRM4Y.js} +3 -3
- package/dist/_chunks/tag-CQmHRM4Y.js.map +1 -0
- package/dist/_chunks/{task-card-Dw_ZJDL8.js → task-card-BUVMh6HN.js} +2 -2
- package/dist/_chunks/task-card-BUVMh6HN.js.map +1 -0
- package/dist/_chunks/{task-tray-XlIW9ueh.js → task-tray-B3A2fRGR.js} +13 -13
- package/dist/_chunks/task-tray-B3A2fRGR.js.map +1 -0
- package/dist/_chunks/{text-area-CO9Dz0qX.js → text-area-DHtcpcLv.js} +13 -13
- package/dist/_chunks/{text-area-CO9Dz0qX.js.map → text-area-DHtcpcLv.js.map} +1 -1
- package/dist/_chunks/{text-input-DZwt9L8H.js → text-input-1oqFRbVI.js} +2 -2
- package/dist/_chunks/{text-input-DZwt9L8H.js.map → text-input-1oqFRbVI.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-B3UR6ouK.js → theme-toggle-B3meAb3y.js} +14 -14
- package/dist/_chunks/theme-toggle-B3meAb3y.js.map +1 -0
- package/dist/_chunks/{time-picker-DvPUmHH-.js → time-picker-DeVZkIY2.js} +2 -2
- package/dist/_chunks/{time-picker-DvPUmHH-.js.map → time-picker-DeVZkIY2.js.map} +1 -1
- package/dist/_chunks/{timeline-BvmnQadS.js → timeline-rmls7dIh.js} +10 -10
- package/dist/_chunks/timeline-rmls7dIh.js.map +1 -0
- package/dist/_chunks/{toast.agent-DihA6MON.js → toast.agent-32WNQ-_x.js} +2 -2
- package/dist/_chunks/{toast.agent-DihA6MON.js.map → toast.agent-32WNQ-_x.js.map} +1 -1
- package/dist/_chunks/{transaction-chip-DE6DITun.js → transaction-chip-z9ENE50O.js} +3 -3
- package/dist/_chunks/{transaction-chip-DE6DITun.js.map → transaction-chip-z9ENE50O.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-Bx5ANMsv.js → transcript-panel-BpJqPr7I.js} +8 -8
- package/dist/_chunks/transcript-panel-BpJqPr7I.js.map +1 -0
- package/dist/_chunks/{typing-indicator-BZ5jXZPn.js → typing-indicator-DHeVN4ob.js} +9 -9
- package/dist/_chunks/typing-indicator-DHeVN4ob.js.map +1 -0
- package/dist/_chunks/{use-password-requirements-DgEYdN4H.js → use-password-requirements-DbPZMfV9.js} +30 -33
- package/dist/_chunks/use-password-requirements-DbPZMfV9.js.map +1 -0
- package/dist/_chunks/{warning-stack-CdLIe534.js → warning-stack-CeRihME9.js} +15 -15
- package/dist/_chunks/warning-stack-CeRihME9.js.map +1 -0
- package/dist/_chunks/{workflow-map-CESZNNZe.js → workflow-map-D3MvrsZV.js} +4 -4
- package/dist/_chunks/{workflow-map-CESZNNZe.js.map → workflow-map-D3MvrsZV.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/audio-recorder/audio-recorder.d.ts.map +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/date-range-picker/index.js +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/file-upload/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts +2 -2
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/navigation-menu/index.js +2 -2
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-card/notification-card.d.ts.map +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/number-input/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/password-input/password-input.d.ts.map +1 -1
- package/dist/components/payment-form/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-input/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.d.ts +1 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/skip-link/index.js +1 -1
- package/dist/components/skip-link/skip-link.d.ts +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tag/index.js +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/transaction-chip/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/typing-indicator/index.js +1 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts +1 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts.map +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/i18n/config.d.ts +2 -1
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/i18n/config.js +49 -31
- package/dist/i18n/config.js.map +1 -1
- package/dist/i18n/registerUiBundle.d.ts +15 -0
- package/dist/i18n/registerUiBundle.d.ts.map +1 -0
- package/dist/index.js +77 -77
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +2 -1
- package/dist/_chunks/agenda-card-CalZqycc.js.map +0 -1
- package/dist/_chunks/agenda-tray-3ffFDQZC.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-DLgY8lrW.js.map +0 -1
- package/dist/_chunks/audio-visualiser-ByDEFLNm.js.map +0 -1
- package/dist/_chunks/autocomplete-D4oUZbsP.js.map +0 -1
- package/dist/_chunks/breadcrumb-D1snXjPb.js.map +0 -1
- package/dist/_chunks/button-group-CONver7M.js.map +0 -1
- package/dist/_chunks/chat-container-ClzsWXp2.js.map +0 -1
- package/dist/_chunks/checkbox-group-CarPLDIC.js.map +0 -1
- package/dist/_chunks/color-picker-CTIcHlDF.js.map +0 -1
- package/dist/_chunks/combobox-BLWruOxK.js.map +0 -1
- package/dist/_chunks/contact-card-DNyATxKv.js.map +0 -1
- package/dist/_chunks/date-range-picker-mix2nEVC.js.map +0 -1
- package/dist/_chunks/date-time-picker-Dnong_BY.js.map +0 -1
- package/dist/_chunks/description-list-BYA77Yud.js.map +0 -1
- package/dist/_chunks/file-upload-C947ACDK.js.map +0 -1
- package/dist/_chunks/form-field-Bmkeh7WY.js.map +0 -1
- package/dist/_chunks/freemium-paywall-B9kIDtm1.js.map +0 -1
- package/dist/_chunks/key-value-pair-CgWvAIGb.js.map +0 -1
- package/dist/_chunks/list-qP6p0NTw.js.map +0 -1
- package/dist/_chunks/message-card-DjvsB_3U.js.map +0 -1
- package/dist/_chunks/message-tray-BbnAzlLH.js.map +0 -1
- package/dist/_chunks/multi-select-wqqrgjUQ.js.map +0 -1
- package/dist/_chunks/navigation-menu-ClbHeawy.js.map +0 -1
- package/dist/_chunks/notification-card-uTPEvAQS.js.map +0 -1
- package/dist/_chunks/notification-tray-PGtMqXbP.js.map +0 -1
- package/dist/_chunks/pagination-3AC4zTsi.js.map +0 -1
- package/dist/_chunks/phone-input-CSHJOJ13.js.map +0 -1
- package/dist/_chunks/progress-C11tqhoI.js.map +0 -1
- package/dist/_chunks/recaptcha-widget-NyfOfLII.js.map +0 -1
- package/dist/_chunks/resizable-mpXXyIsN.js.map +0 -1
- package/dist/_chunks/select-BOU_Osnf.js.map +0 -1
- package/dist/_chunks/sidebar-Bx3wCDyy.js.map +0 -1
- package/dist/_chunks/sign-in-with-alfadocs-button-B9UrqOqH.js.map +0 -1
- package/dist/_chunks/slider-BT2bZWsy.js.map +0 -1
- package/dist/_chunks/sparkline-_gy8aJDG.js.map +0 -1
- package/dist/_chunks/spinner-DLaYfLPl.js.map +0 -1
- package/dist/_chunks/stat-B9PHSPbN.js.map +0 -1
- package/dist/_chunks/tabs-BZQy_Rmb.js.map +0 -1
- package/dist/_chunks/tag-DuLMjRbF.js.map +0 -1
- package/dist/_chunks/task-card-Dw_ZJDL8.js.map +0 -1
- package/dist/_chunks/task-tray-XlIW9ueh.js.map +0 -1
- package/dist/_chunks/theme-toggle-B3UR6ouK.js.map +0 -1
- package/dist/_chunks/timeline-BvmnQadS.js.map +0 -1
- package/dist/_chunks/transcript-panel-Bx5ANMsv.js.map +0 -1
- package/dist/_chunks/typing-indicator-BZ5jXZPn.js.map +0 -1
- package/dist/_chunks/use-password-requirements-DgEYdN4H.js.map +0 -1
- package/dist/_chunks/warning-stack-CdLIe534.js.map +0 -1
|
@@ -2,8 +2,8 @@ import { jsx as e, jsxs as c } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as v } from "react";
|
|
3
3
|
import { c as h } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as b } from "react-i18next";
|
|
5
|
-
import { A as x } from "./avatar-
|
|
6
|
-
import { B as y } from "./badge-
|
|
5
|
+
import { A as x } from "./avatar-I10iCDs8.js";
|
|
6
|
+
import { B as y } from "./badge-cLYVGlMh.js";
|
|
7
7
|
import { C as N } from "./chevron-right-BrpYejk0.js";
|
|
8
8
|
const C = h(
|
|
9
9
|
[
|
|
@@ -49,7 +49,7 @@ const k = {
|
|
|
49
49
|
cancelled: "error"
|
|
50
50
|
}, T = v(
|
|
51
51
|
({ item: s, size: o = "sm", onActivate: a, className: f, ...m }, p) => {
|
|
52
|
-
const { t: i } = b(), r = !!a, g = !!s.url && w(s.url), l = i("
|
|
52
|
+
const { t: i } = b(), r = !!a, g = !!s.url && w(s.url), l = i("agendaCard.itemLabel", {
|
|
53
53
|
time: s.time,
|
|
54
54
|
patient: s.patient.name,
|
|
55
55
|
treatment: s.treatment ?? "",
|
|
@@ -118,7 +118,7 @@ const k = {
|
|
|
118
118
|
size: "sm",
|
|
119
119
|
withDot: !0,
|
|
120
120
|
className: "ds:shrink-0",
|
|
121
|
-
children: i(`
|
|
121
|
+
children: i(`agendaCard.status.${s.status}`, s.status)
|
|
122
122
|
}
|
|
123
123
|
) : null,
|
|
124
124
|
r ? /* @__PURE__ */ e(
|
|
@@ -138,4 +138,4 @@ export {
|
|
|
138
138
|
T as A,
|
|
139
139
|
w as i
|
|
140
140
|
};
|
|
141
|
-
//# sourceMappingURL=agenda-card-
|
|
141
|
+
//# sourceMappingURL=agenda-card-CsCm7hQv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenda-card-CsCm7hQv.js","sources":["../../src/components/agenda-card/agenda-card.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronRight } from 'lucide-react';\nimport { Avatar } from '../avatar/avatar';\nimport { Badge } from '../badge/badge';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type AppointmentStatus = 'confirmed' | 'pending' | 'cancelled';\n\nexport interface AgendaItem {\n /** Unique identifier for the appointment. */\n id: string;\n /** Display time string (e.g. \"09:00\"). Localised by the consumer. */\n time: string;\n /** Patient identity — drives the avatar's initials + accessible name. */\n patient: { name: string; avatarUrl?: string };\n /** Treatment / appointment type — short localised label. */\n treatment?: string;\n /** Lifecycle state — drives a trailing status chip. */\n status?: AppointmentStatus;\n /** Optional deep link — when present the row is an anchor. */\n url?: string;\n}\n\nexport interface AgendaCardProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'role' | 'title'>,\n VariantProps<typeof agendaCardVariants> {\n /** The appointment to render. */\n item: AgendaItem;\n /** Visual density. */\n size?: 'sm' | 'md';\n /** Fires when the row is activated. */\n onActivate?: (item: AgendaItem) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst agendaCardVariants = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:transition-colors',\n 'ds:motion-reduce:transition-none',\n 'ds:text-start ds:group',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-sm)]',\n md: 'ds:p-[var(--spacing-md)]',\n },\n interactive: {\n true: 'ds:hover:bg-[color:var(--muted)]/40 ds:cursor-pointer',\n false: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n interactive: false,\n },\n },\n);\n\nconst stretchedLinkClass = [\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-sm)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\nexport function isSafeAgendaUrl(url: string): boolean {\n return /^(https?:\\/\\/(?!\\/)|\\/(?!\\/)|#)/.test(url);\n}\n\nconst STATUS_TONE: Record<AppointmentStatus, 'success' | 'warning' | 'error'> =\n {\n confirmed: 'success',\n pending: 'warning',\n cancelled: 'error',\n };\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const AgendaCard = forwardRef<HTMLDivElement, AgendaCardProps>(\n ({ item, size = 'sm', onActivate, className, ...rest }, ref) => {\n const { t } = useTranslation();\n const interactive = !!onActivate;\n const hasSafeUrl = !!item.url && isSafeAgendaUrl(item.url);\n const ariaLabel = t('agendaCard.itemLabel', {\n time: item.time,\n patient: item.patient.name,\n treatment: item.treatment ?? '',\n defaultValue: '{{time}} · {{patient}}{{treatment, prepend, \" · \"}}',\n });\n\n const titleNode = (\n <span className=\"ds:flex-1 ds:min-w-0 ds:truncate type-body-sm ds:text-[color:var(--foreground)]\">\n {item.patient.name}\n </span>\n );\n\n let activator: ReactNode;\n if (interactive && hasSafeUrl) {\n activator = (\n <a\n href={item.url}\n aria-label={ariaLabel}\n className={stretchedLinkClass + ' ds:contents'}\n onClick={(e) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey)\n return;\n onActivate?.(item);\n }}\n >\n {titleNode}\n </a>\n );\n } else if (interactive) {\n activator = (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={\n stretchedLinkClass +\n ' ds:contents ds:bg-transparent ds:border-0 ds:p-0 ds:text-start'\n }\n onClick={() => onActivate?.(item)}\n >\n {titleNode}\n </button>\n );\n } else {\n activator = titleNode;\n }\n\n return (\n <div\n ref={ref}\n role=\"listitem\"\n data-component=\"agenda-card\"\n data-component-id={item.id}\n data-status={item.status ?? 'confirmed'}\n className={agendaCardVariants({ size, interactive, className })}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:w-12 ds:shrink-0 type-body-sm ds:font-medium ds:text-[color:var(--foreground)] ds:tabular-nums\"\n >\n {item.time}\n </span>\n\n <Avatar\n name={item.patient.name}\n src={item.patient.avatarUrl}\n size={size === 'md' ? 'md' : 'sm'}\n className=\"ds:shrink-0\"\n aria-hidden=\"true\"\n role=\"presentation\"\n aria-label={undefined}\n />\n\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {activator}\n {item.treatment ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {item.treatment}\n </span>\n ) : null}\n </div>\n\n {item.status && item.status !== 'confirmed' ? (\n <Badge\n variant={STATUS_TONE[item.status]}\n size=\"sm\"\n withDot\n className=\"ds:shrink-0\"\n >\n {t(`agendaCard.status.${item.status}`, item.status)}\n </Badge>\n ) : null}\n\n {interactive ? (\n <ChevronRight\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:opacity-0 ds:transition-opacity ds:motion-reduce:transition-none ds:group-hover:opacity-100 ds:group-focus-within:opacity-100 ds:rtl:rotate-180\"\n />\n ) : null}\n </div>\n );\n },\n);\n\nAgendaCard.displayName = 'AgendaCard';\n"],"names":["agendaCardVariants","cva","stretchedLinkClass","isSafeAgendaUrl","url","STATUS_TONE","AgendaCard","forwardRef","item","size","onActivate","className","rest","ref","t","useTranslation","interactive","hasSafeUrl","ariaLabel","titleNode","jsx","activator","e","jsxs","Avatar","Badge","ChevronRight"],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as a, jsxs as n } from "react/jsx-runtime";
|
|
2
|
-
import { forwardRef as R, useRef as
|
|
2
|
+
import { forwardRef as R, useRef as f, useImperativeHandle as z, useMemo as C } from "react";
|
|
3
3
|
import { c as S } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as j } from "react-i18next";
|
|
5
5
|
import { I as _ } from "./icon-button-C4CGcYuz.js";
|
|
6
6
|
import { S as E } from "./skeleton-CZbwyJAA.js";
|
|
7
7
|
import { E as P } from "./empty-state-3CLJIXSj.js";
|
|
8
|
-
import { A as H } from "./agenda-card-
|
|
8
|
+
import { A as H } from "./agenda-card-CsCm7hQv.js";
|
|
9
9
|
import { u as K } from "./registry-C9nwlNyL.js";
|
|
10
10
|
import { c as L } from "./createLucideIcon-CrFbzy84.js";
|
|
11
11
|
import { P as V } from "./plus-CYKNmfuA.js";
|
|
@@ -86,7 +86,7 @@ const q = [
|
|
|
86
86
|
({
|
|
87
87
|
id: t,
|
|
88
88
|
items: s,
|
|
89
|
-
title:
|
|
89
|
+
title: u,
|
|
90
90
|
caption: c,
|
|
91
91
|
size: l = "sm",
|
|
92
92
|
onOpenAppointment: d,
|
|
@@ -98,16 +98,16 @@ const q = [
|
|
|
98
98
|
className: T,
|
|
99
99
|
...w
|
|
100
100
|
}, N) => {
|
|
101
|
-
const { t: r } = j(), y =
|
|
101
|
+
const { t: r } = j(), y = u ?? r("agendaTray.title", "Today's appointments"), b = v ?? r("agendaTray.add", "Add appointment"), I = !p && s.length === 0;
|
|
102
102
|
let i;
|
|
103
103
|
p ? i = /* @__PURE__ */ a("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]", children: [0, 1, 2].map((e) => /* @__PURE__ */ a(E, { variant: "rectangular", height: "2.5rem" }, e)) }) : I ? i = /* @__PURE__ */ a("div", { className: "ds:p-[var(--spacing-md)]", children: /* @__PURE__ */ a(
|
|
104
104
|
P,
|
|
105
105
|
{
|
|
106
106
|
variant: "first-use",
|
|
107
107
|
size: "sm",
|
|
108
|
-
title: x ?? r("
|
|
108
|
+
title: x ?? r("agendaTray.empty.title", "No appointments"),
|
|
109
109
|
description: k ?? r(
|
|
110
|
-
"
|
|
110
|
+
"agendaTray.empty.description",
|
|
111
111
|
"New appointments will appear here."
|
|
112
112
|
)
|
|
113
113
|
}
|
|
@@ -121,9 +121,9 @@ const q = [
|
|
|
121
121
|
},
|
|
122
122
|
e.id
|
|
123
123
|
)) });
|
|
124
|
-
const o =
|
|
124
|
+
const o = f(s);
|
|
125
125
|
o.current = s;
|
|
126
|
-
const g =
|
|
126
|
+
const g = f(null);
|
|
127
127
|
z(N, () => g.current, []);
|
|
128
128
|
const M = C(
|
|
129
129
|
() => ({
|
|
@@ -178,4 +178,4 @@ export {
|
|
|
178
178
|
G as A,
|
|
179
179
|
D as a
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=agenda-tray-
|
|
181
|
+
//# sourceMappingURL=agenda-tray-B8QZ3wEp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agenda-tray-B8QZ3wEp.js","sources":["../../node_modules/lucide-react/dist/esm/icons/calendar-days.js","../../src/components/agenda-tray/agenda-tray.agent.ts","../../src/components/agenda-tray/agenda-tray.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.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.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M16 18h.01\", key: \"kzsmim\" }]\n];\nconst CalendarDays = createLucideIcon(\"calendar-days\", __iconNode);\n\nexport { __iconNode, CalendarDays as default };\n//# sourceMappingURL=calendar-days.js.map\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — AgendaTray. */\n/* */\n/* Tray-level surface: read appointment ids + lifecycle status (never */\n/* patient names / treatments), and route an activation through the */\n/* curated handle. AgendaTray is in-page (no open/close). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AgendaTrayHandle } from './agenda-tray';\n\nexport const agendaTrayAgent: AgentAdapter<AgendaTrayHandle> = {\n id: 'agenda-tray',\n capabilities: ['select_single'],\n state: {\n items: {\n type: 'Array<{ id: string; status: string }>',\n descriptionKey: 'ui.agent.agendaTray.state.items',\n description:\n 'Currently-displayed appointments. Ids + status only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.agendaTray.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'agenda-tray',\n description: 'Marks the AgendaTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AgendaCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { AgendaCard, type AgendaItem } from '../agenda-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { agendaTrayAgent } from './agenda-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst agendaTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * Curated imperative handle for AgendaTray. Exposed as the forwardRef\n * target so a future agent / MCP UI bridge can drive the tray without\n * touching the DOM. See `agenda-tray.agent.ts`.\n */\nexport interface AgendaTrayHandle {\n getItems: () => Array<{ id: string; status: string }>;\n selectItem: (id: string) => void;\n}\n\nexport interface AgendaTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof agendaTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n items: AgendaItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Optional small caption (e.g. localised date) shown next to the title. */\n caption?: string;\n size?: 'sm' | 'md';\n onOpenAppointment?: (item: AgendaItem) => void;\n onAddAppointment?: () => void;\n /** Localised label for the \"Add\" affordance. */\n addLabel?: string;\n loading?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const AgendaTray = forwardRef<HTMLElement, AgendaTrayProps>(\n (\n {\n id,\n items,\n title,\n caption,\n size = 'sm',\n onOpenAppointment,\n onAddAppointment,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('agendaTray.title', \"Today's appointments\");\n const resolvedAddLabel = addLabel ?? t('agendaTray.add', 'Add appointment');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"2.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('agendaTray.empty.title', 'No appointments')}\n description={\n emptyDescription ??\n t(\n 'agendaTray.empty.description',\n 'New appointments will appear here.',\n )\n }\n />\n </div>\n );\n } else {\n body = (\n <ul className=\"ds:flex ds:list-none ds:flex-col\">\n {items.map((item) => (\n <AgendaCard\n key={item.id}\n item={item}\n size={size}\n onActivate={onOpenAppointment}\n data-appointment-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * agenda-tray.agent.ts. */\n const itemsRef = useRef<AgendaItem[]>(items);\n itemsRef.current = items;\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AgendaTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({\n id: i.id,\n status: i.status ?? 'confirmed',\n })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n }),\n [onOpenAppointment],\n );\n\n useAgentRegistration(agendaTrayAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"agenda-tray\"\n data-component-id={id}\n className={agendaTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <CalendarDays aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {caption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {caption}\n </span>\n ) : null}\n </div>\n {onAddAppointment ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddAppointment}\n />\n ) : null}\n </header>\n {body}\n </section>\n );\n },\n);\n\nAgendaTray.displayName = 'AgendaTray';\n"],"names":["__iconNode","CalendarDays","createLucideIcon","agendaTrayAgent","handle","args","agendaTrayVariants","cva","AgendaTray","forwardRef","id","items","title","caption","size","onOpenAppointment","onAddAppointment","addLabel","loading","emptyTitle","emptyDescription","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","AgendaCard","itemsRef","useRef","innerRef","useImperativeHandle","useMemo","targetId","found","useAgentRegistration","jsxs","IconButton","Plus"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -5,8 +5,8 @@ import { useTranslation as re } from "react-i18next";
|
|
|
5
5
|
import { u as Ae } from "./registry-C9nwlNyL.js";
|
|
6
6
|
import { _ as b } from "./index-4xgbg-sn.js";
|
|
7
7
|
import { u as Ce } from "./index-CeY1nNvd.js";
|
|
8
|
-
import { I as
|
|
9
|
-
import { S as Le } from "./select-
|
|
8
|
+
import { I as ne } from "./icon-button-C4CGcYuz.js";
|
|
9
|
+
import { S as Le } from "./select-i9MwQeQy.js";
|
|
10
10
|
import { S as Re } from "./send-CySZIRPJ.js";
|
|
11
11
|
import { X as Ue } from "./x-CCcI3eJp.js";
|
|
12
12
|
const We = {
|
|
@@ -105,7 +105,7 @@ const We = {
|
|
|
105
105
|
modelId: U,
|
|
106
106
|
onModelChange: F,
|
|
107
107
|
maxSize: x,
|
|
108
|
-
accept:
|
|
108
|
+
accept: ie,
|
|
109
109
|
context: B,
|
|
110
110
|
onContextDismiss: y,
|
|
111
111
|
onSubmit: I,
|
|
@@ -132,19 +132,19 @@ const We = {
|
|
|
132
132
|
w.current = e;
|
|
133
133
|
}, []), c = Z !== void 0, [ve, f] = h(
|
|
134
134
|
String(Q ?? "")
|
|
135
|
-
),
|
|
135
|
+
), i = c ? String(Z) : ve, [u, z] = h([]), [v, P] = h(!1), [ge, M] = h(""), [he, be] = h(
|
|
136
136
|
E ?? ((se = d == null ? void 0 : d[0]) == null ? void 0 : se.id) ?? ""
|
|
137
137
|
), X = U !== void 0, L = X ? U : he, Y = g(() => {
|
|
138
138
|
const e = w.current;
|
|
139
139
|
if (!e) return;
|
|
140
|
-
const t = window.getComputedStyle(e),
|
|
140
|
+
const t = window.getComputedStyle(e), n = parseFloat(t.lineHeight) || 24, r = parseFloat(t.paddingTop) || 0, p = parseFloat(t.paddingBottom) || 0, l = parseFloat(t.borderTopWidth) || 0, R = parseFloat(t.borderBottomWidth) || 0, K = r + p + l + R, Ee = n * $ + K, ae = n * W + K;
|
|
141
141
|
e.style.height = "auto";
|
|
142
142
|
const Fe = Math.max(Ee, Math.min(e.scrollHeight, ae));
|
|
143
143
|
e.style.height = `${Fe}px`, e.style.overflowY = e.scrollHeight > ae ? "auto" : "hidden";
|
|
144
144
|
}, [$, W]);
|
|
145
145
|
Oe(() => {
|
|
146
146
|
Y();
|
|
147
|
-
}, [Y,
|
|
147
|
+
}, [Y, i]);
|
|
148
148
|
const xe = g((e, t) => {
|
|
149
149
|
const r = e.slice(0, t).lastIndexOf(`
|
|
150
150
|
`) + 1, p = e.slice(r, t);
|
|
@@ -166,21 +166,21 @@ const We = {
|
|
|
166
166
|
}, ke = (e) => {
|
|
167
167
|
S.current = !1, _ == null || _(e);
|
|
168
168
|
}, Ne = (e) => e.nativeEvent.isComposing || e.keyCode === 229 || S.current, V = g(() => {
|
|
169
|
-
if (!
|
|
170
|
-
let t,
|
|
171
|
-
const r =
|
|
172
|
-
r && (t = r[1],
|
|
173
|
-
text:
|
|
169
|
+
if (!i.trim() && u.length === 0) return;
|
|
170
|
+
let t, n = i;
|
|
171
|
+
const r = i.match(/^\/(\S+)\s?/);
|
|
172
|
+
r && (t = r[1], n = i.slice(r[0].length)), I == null || I({
|
|
173
|
+
text: n,
|
|
174
174
|
command: t,
|
|
175
175
|
attachments: u,
|
|
176
176
|
modelId: L || void 0
|
|
177
177
|
}), c || f(""), z([]);
|
|
178
|
-
}, [
|
|
178
|
+
}, [i, u, I, L, c]), G = T(null);
|
|
179
179
|
je(pe, () => G.current, []);
|
|
180
180
|
const we = De(
|
|
181
181
|
() => ({
|
|
182
|
-
getValue: () =>
|
|
183
|
-
isEmpty: () => !
|
|
182
|
+
getValue: () => i,
|
|
183
|
+
isEmpty: () => !i.trim() && u.length === 0,
|
|
184
184
|
isSubmitting: () => !1,
|
|
185
185
|
setValue: (e) => {
|
|
186
186
|
c || f(e);
|
|
@@ -196,7 +196,7 @@ const We = {
|
|
|
196
196
|
(e = w.current) == null || e.focus();
|
|
197
197
|
}
|
|
198
198
|
}),
|
|
199
|
-
[
|
|
199
|
+
[i, u, c, V]
|
|
200
200
|
);
|
|
201
201
|
Ae(We, we, C);
|
|
202
202
|
const Se = (e) => {
|
|
@@ -210,39 +210,39 @@ const We = {
|
|
|
210
210
|
}, ze = (e) => {
|
|
211
211
|
const t = w.current;
|
|
212
212
|
if (!t) return;
|
|
213
|
-
const
|
|
213
|
+
const n = t.selectionStart ?? i.length, p = i.slice(0, n).lastIndexOf(`
|
|
214
214
|
`) + 1;
|
|
215
|
-
let l =
|
|
216
|
-
for (; l <
|
|
215
|
+
let l = n;
|
|
216
|
+
for (; l < i.length && !/\s/.test(i[l]); )
|
|
217
217
|
l += 1;
|
|
218
|
-
const R =
|
|
218
|
+
const R = i.slice(l), K = i.slice(0, p) + `/${e.id} ` + R;
|
|
219
219
|
c || f(K), P(!1), M(""), queueMicrotask(() => t.focus());
|
|
220
220
|
}, Pe = (e) => {
|
|
221
221
|
if (A == null || A(e), e.defaultPrevented) return;
|
|
222
222
|
const { clipboardData: t } = e;
|
|
223
223
|
if (!t) return;
|
|
224
|
-
const
|
|
224
|
+
const n = [];
|
|
225
225
|
for (let r = 0; r < t.items.length; r += 1) {
|
|
226
226
|
const p = t.items[r];
|
|
227
227
|
if (p.kind === "file") {
|
|
228
228
|
const l = p.getAsFile();
|
|
229
|
-
l &&
|
|
229
|
+
l && n.push(l);
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
|
|
232
|
+
n.length > 0 && (e.preventDefault(), J(n));
|
|
233
233
|
}, J = g(
|
|
234
234
|
(e) => {
|
|
235
|
-
var
|
|
235
|
+
var n;
|
|
236
236
|
const t = [];
|
|
237
237
|
for (const r of e) {
|
|
238
238
|
if (typeof x == "number" && r.size > x) {
|
|
239
239
|
N == null || N(
|
|
240
|
-
o("
|
|
240
|
+
o("chat.attachment.rejected", { reason: "size" })
|
|
241
241
|
);
|
|
242
242
|
continue;
|
|
243
243
|
}
|
|
244
244
|
t.push({
|
|
245
|
-
id: ((
|
|
245
|
+
id: ((n = crypto.randomUUID) == null ? void 0 : n.call(crypto)) ?? `att-${Math.random()}`,
|
|
246
246
|
file: r
|
|
247
247
|
});
|
|
248
248
|
}
|
|
@@ -252,11 +252,11 @@ const We = {
|
|
|
252
252
|
), { getRootProps: Me, getInputProps: Ve, isDragActive: He } = Ce({
|
|
253
253
|
onDrop: J,
|
|
254
254
|
maxSize: x,
|
|
255
|
-
accept:
|
|
255
|
+
accept: ie,
|
|
256
256
|
noClick: !0,
|
|
257
257
|
noKeyboard: !0
|
|
258
258
|
}), Ke = (e) => {
|
|
259
|
-
z((t) => t.filter((
|
|
259
|
+
z((t) => t.filter((n) => n.id !== e));
|
|
260
260
|
}, H = C ?? ue, ee = `${H}-label`, te = `${H}-slash-list`, Te = (d == null ? void 0 : d.map((e) => ({ value: e.id, label: e.label }))) ?? [];
|
|
261
261
|
return /* @__PURE__ */ m(
|
|
262
262
|
"div",
|
|
@@ -268,16 +268,16 @@ const We = {
|
|
|
268
268
|
He ? "ds:outline ds:outline-dashed ds:outline-[color:var(--primary)] ds:outline-offset-2 ds:bg-[color:var(--primary)]/5" : ""
|
|
269
269
|
].join(" ")
|
|
270
270
|
}),
|
|
271
|
-
"aria-label": o("
|
|
271
|
+
"aria-label": o("chat.attachmentZone"),
|
|
272
272
|
"data-component": "ai-prompt-input",
|
|
273
273
|
"data-component-id": C,
|
|
274
274
|
children: [
|
|
275
|
-
/* @__PURE__ */ a("input", { "aria-label": o("
|
|
275
|
+
/* @__PURE__ */ a("input", { "aria-label": o("chat.attachmentZone"), ...Ve() }),
|
|
276
276
|
B ? /* @__PURE__ */ a("div", { className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)]", children: /* @__PURE__ */ a(
|
|
277
277
|
"button",
|
|
278
278
|
{
|
|
279
279
|
type: "button",
|
|
280
|
-
"aria-label": o("
|
|
280
|
+
"aria-label": o("chat.contextActive", { name: B }),
|
|
281
281
|
onClick: y,
|
|
282
282
|
onKeyDown: (e) => {
|
|
283
283
|
(e.key === "Backspace" || e.key === "Delete") && (e.preventDefault(), y == null || y());
|
|
@@ -292,10 +292,10 @@ const We = {
|
|
|
292
292
|
"ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]",
|
|
293
293
|
"ds:forced-colors:focus-visible:outline-[CanvasText]"
|
|
294
294
|
].join(" "),
|
|
295
|
-
children: o("
|
|
295
|
+
children: o("chat.contextActive", { name: B })
|
|
296
296
|
}
|
|
297
297
|
) }) : null,
|
|
298
|
-
/* @__PURE__ */ a("label", { id: ee, htmlFor: H, className: "ds:sr-only", children: o("
|
|
298
|
+
/* @__PURE__ */ a("label", { id: ee, htmlFor: H, className: "ds:sr-only", children: o("chat.prompt") }),
|
|
299
299
|
/* @__PURE__ */ m("div", { className: "ds:relative", children: [
|
|
300
300
|
/* @__PURE__ */ a(
|
|
301
301
|
"textarea",
|
|
@@ -303,10 +303,10 @@ const We = {
|
|
|
303
303
|
ref: fe,
|
|
304
304
|
id: H,
|
|
305
305
|
rows: $,
|
|
306
|
-
value: c ?
|
|
306
|
+
value: c ? i : void 0,
|
|
307
307
|
defaultValue: c ? void 0 : Q,
|
|
308
308
|
disabled: q,
|
|
309
|
-
placeholder: le ?? o("
|
|
309
|
+
placeholder: le ?? o("chat.input.placeholder"),
|
|
310
310
|
"aria-labelledby": ee,
|
|
311
311
|
role: v ? "combobox" : void 0,
|
|
312
312
|
"aria-controls": v ? te : void 0,
|
|
@@ -343,7 +343,7 @@ const We = {
|
|
|
343
343
|
"ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]"
|
|
344
344
|
].join(" "),
|
|
345
345
|
id: te,
|
|
346
|
-
children: /* @__PURE__ */ m(b, { label: o("
|
|
346
|
+
children: /* @__PURE__ */ m(b, { label: o("chat.slashMenu.label"), loop: !0, children: [
|
|
347
347
|
/* @__PURE__ */ a(
|
|
348
348
|
b.Input,
|
|
349
349
|
{
|
|
@@ -353,7 +353,7 @@ const We = {
|
|
|
353
353
|
}
|
|
354
354
|
),
|
|
355
355
|
/* @__PURE__ */ m(b.List, { className: "ds:max-h-60 ds:overflow-y-auto ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]", children: [
|
|
356
|
-
/* @__PURE__ */ a(b.Empty, { className: "type-body-sm ds:text-[color:var(--muted-foreground)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]", children: o("
|
|
356
|
+
/* @__PURE__ */ a(b.Empty, { className: "type-body-sm ds:text-[color:var(--muted-foreground)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]", children: o("chat.slashMenu.empty") }),
|
|
357
357
|
s.map((e) => /* @__PURE__ */ m(
|
|
358
358
|
b.Item,
|
|
359
359
|
{
|
|
@@ -386,7 +386,7 @@ const We = {
|
|
|
386
386
|
"div",
|
|
387
387
|
{
|
|
388
388
|
role: "group",
|
|
389
|
-
"aria-label": o("
|
|
389
|
+
"aria-label": o("chat.attachmentZone"),
|
|
390
390
|
className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]",
|
|
391
391
|
children: u.map((e) => /* @__PURE__ */ a(
|
|
392
392
|
Xe,
|
|
@@ -402,7 +402,7 @@ const We = {
|
|
|
402
402
|
d && d.length > 0 ? /* @__PURE__ */ a("div", { className: "ds:me-auto ds:min-w-[140px]", children: /* @__PURE__ */ a(
|
|
403
403
|
Le,
|
|
404
404
|
{
|
|
405
|
-
"aria-label": o("
|
|
405
|
+
"aria-label": o("chat.model.select"),
|
|
406
406
|
options: Te,
|
|
407
407
|
value: L || "",
|
|
408
408
|
onValueChange: (e) => {
|
|
@@ -411,15 +411,15 @@ const We = {
|
|
|
411
411
|
size: "sm"
|
|
412
412
|
}
|
|
413
413
|
) }) : /* @__PURE__ */ a("div", { className: "ds:me-auto" }),
|
|
414
|
-
/* @__PURE__ */ a("span", { className: "ds:sr-only", children: o("
|
|
414
|
+
/* @__PURE__ */ a("span", { className: "ds:sr-only", children: o("chat.input.sendHint") }),
|
|
415
415
|
/* @__PURE__ */ a(
|
|
416
|
-
|
|
416
|
+
ne,
|
|
417
417
|
{
|
|
418
418
|
icon: /* @__PURE__ */ a(Re, {}),
|
|
419
|
-
"aria-label": o("
|
|
419
|
+
"aria-label": o("chat.send"),
|
|
420
420
|
intent: "primary",
|
|
421
421
|
size: "sm",
|
|
422
|
-
disabled: q || !
|
|
422
|
+
disabled: q || !i.trim() && u.length === 0,
|
|
423
423
|
onClick: V,
|
|
424
424
|
"aria-keyshortcuts": "Meta+Enter Control+Enter"
|
|
425
425
|
}
|
|
@@ -456,10 +456,10 @@ function Xe({
|
|
|
456
456
|
/* @__PURE__ */ a("span", { className: "ds:truncate ds:max-w-[16ch]", children: s.name }),
|
|
457
457
|
/* @__PURE__ */ a("span", { className: "ds:text-[color:var(--muted-foreground)] ds:tabular-nums", children: qe(s.size) }),
|
|
458
458
|
/* @__PURE__ */ a(
|
|
459
|
-
|
|
459
|
+
ne,
|
|
460
460
|
{
|
|
461
461
|
icon: /* @__PURE__ */ a(Ue, {}),
|
|
462
|
-
"aria-label": E("
|
|
462
|
+
"aria-label": E("chat.attachment.remove", { name: s.name }),
|
|
463
463
|
intent: "ghost",
|
|
464
464
|
size: "sm",
|
|
465
465
|
onClick: d
|
|
@@ -473,4 +473,4 @@ export {
|
|
|
473
473
|
Qe as A,
|
|
474
474
|
We as a
|
|
475
475
|
};
|
|
476
|
-
//# sourceMappingURL=ai-prompt-input-
|
|
476
|
+
//# sourceMappingURL=ai-prompt-input-bAJwYu84.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-prompt-input-bAJwYu84.js","sources":["../../src/components/ai-prompt-input/ai-prompt-input.agent.ts","../../src/components/ai-prompt-input/ai-prompt-input.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AIPromptInput. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AIPromptInputHandle } from './ai-prompt-input';\n\nexport const aiPromptInputAgent: AgentAdapter<AIPromptInputHandle> = {\n id: 'ai-prompt-input',\n capabilities: ['edit_inline', 'submit'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.aiPromptInput.state.value',\n description: 'Current text in the composer (no PHI processing).',\n read: (handle) => handle.getValue(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.aiPromptInput.state.isEmpty',\n description: 'True when the composer has no text and no attachments.',\n read: (handle) => handle.isEmpty(),\n },\n isSubmitting: {\n type: 'boolean',\n descriptionKey: 'ui.agent.aiPromptInput.state.isSubmitting',\n description:\n 'True while an onSubmit invocation is in flight (best-effort).',\n read: (handle) => handle.isSubmitting(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n descriptionKey: 'ui.agent.aiPromptInput.actions.setValue',\n description: 'Replace the composer text with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.aiPromptInput.actions.clear',\n description: 'Clear text and attachments. Irreversible from the same UI.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n safety: 'write',\n descriptionKey: 'ui.agent.aiPromptInput.actions.submit',\n description: 'Submit the current composer state via onSubmit.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.aiPromptInput.actions.focus',\n description: 'Move keyboard focus into the textarea.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'ai-prompt-input',\n description: 'Marks the AIPromptInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop; addresses a specific composer instance.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useId,\n useImperativeHandle,\n useMemo,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ClipboardEvent,\n type CompositionEvent,\n type KeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { aiPromptInputAgent } from './ai-prompt-input.agent';\nimport { Command } from 'cmdk';\nimport { useDropzone } from 'react-dropzone';\nimport { Send, X } from 'lucide-react';\nimport { IconButton } from '../button';\nimport { Select, type SelectOption } from '../select/select';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface AIPromptCommand {\n id: string;\n label: string;\n description?: string;\n}\n\nexport interface AIPromptModel {\n id: string;\n label: string;\n}\n\nexport interface AIPromptAttachment {\n id: string;\n file: File;\n}\n\nexport interface AIPromptSubmitPayload {\n text: string;\n command?: string;\n attachments: AIPromptAttachment[];\n modelId?: string;\n}\n\ntype NativeTextareaProps = Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'size' | 'onSubmit' | 'children'\n>;\n\nconst rootVariants = cva(\n [\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background',\n 'ds:transition-[border-color] ds:duration-[var(--animation-duration)]',\n 'ds:focus-within:border-[color:var(--primary)]',\n 'ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:text-[length:var(--font-size-sm)]',\n md: 'ds:text-[length:var(--font-size-base)]',\n lg: 'ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\n/** Curated imperative handle for agent / external automation. */\nexport interface AIPromptInputHandle {\n /** Current composer text. */\n getValue: () => string;\n /** True when text is empty and no attachments are pending. */\n isEmpty: () => boolean;\n /** True while a submit is in flight. */\n isSubmitting: () => boolean;\n /** Replace the composer text. */\n setValue: (value: string) => void;\n /** Clear text and attachments. */\n clear: () => void;\n /** Programmatically submit. */\n submit: () => void;\n /** Move keyboard focus into the textarea. */\n focus: () => void;\n}\n\nexport interface AIPromptInputProps\n extends NativeTextareaProps, VariantProps<typeof rootVariants> {\n /** Slash-command catalog. The DS owns the menu; apps own the commands. */\n commands?: AIPromptCommand[];\n /** Model catalog rendered as a Radix Select in the footer. */\n models?: AIPromptModel[];\n defaultModelId?: string;\n modelId?: string;\n onModelChange?: (id: string) => void;\n /** Maximum attachment size in bytes. */\n maxSize?: number;\n /** `accept` forwarded to react-dropzone. */\n accept?: Record<string, string[]>;\n /** Optional active context pill — dismissible via Backspace when focused. */\n context?: string;\n onContextDismiss?: () => void;\n onSubmit?: (payload: AIPromptSubmitPayload) => void;\n onAttach?: (files: File[]) => void;\n onAttachmentRejected?: (reason: string) => void;\n minRows?: number;\n maxRows?: number;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const AIPromptInput = forwardRef<HTMLDivElement, AIPromptInputProps>(\n (\n {\n commands = [],\n models,\n defaultModelId,\n modelId,\n onModelChange,\n maxSize,\n accept,\n context,\n onContextDismiss,\n onSubmit,\n onAttach,\n onAttachmentRejected,\n minRows = 2,\n maxRows = 8,\n value,\n defaultValue,\n size = 'md',\n disabled,\n className,\n placeholder,\n onChange,\n onKeyDown,\n onCompositionStart,\n onCompositionEnd,\n onPaste,\n id,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const textareaId = useId();\n const innerRef = useRef<HTMLTextAreaElement | null>(null);\n const composingRef = useRef(false);\n const slashMenuRef = useRef<HTMLDivElement | null>(null);\n\n const setRefs = useCallback((node: HTMLTextAreaElement | null) => {\n innerRef.current = node;\n }, []);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n String(defaultValue ?? ''),\n );\n const currentValue = isControlled ? String(value) : internalValue;\n\n const [attachments, setAttachments] = useState<AIPromptAttachment[]>([]);\n const [slashOpen, setSlashOpen] = useState(false);\n const [slashQuery, setSlashQuery] = useState('');\n\n const [internalModel, setInternalModel] = useState<string>(\n defaultModelId ?? models?.[0]?.id ?? '',\n );\n const isModelControlled = modelId !== undefined;\n const currentModel = isModelControlled ? modelId : internalModel;\n\n /* ── Auto-grow ── */\n const resize = useCallback(() => {\n const el = innerRef.current;\n if (!el) return;\n const styles = window.getComputedStyle(el);\n const lineHeight = parseFloat(styles.lineHeight) || 24;\n const padTop = parseFloat(styles.paddingTop) || 0;\n const padBot = parseFloat(styles.paddingBottom) || 0;\n const borderTop = parseFloat(styles.borderTopWidth) || 0;\n const borderBot = parseFloat(styles.borderBottomWidth) || 0;\n const chrome = padTop + padBot + borderTop + borderBot;\n const minH = lineHeight * minRows + chrome;\n const maxH = lineHeight * maxRows + chrome;\n el.style.height = 'auto';\n const next = Math.max(minH, Math.min(el.scrollHeight, maxH));\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > maxH ? 'auto' : 'hidden';\n }, [minRows, maxRows]);\n\n useLayoutEffect(() => {\n resize();\n }, [resize, currentValue]);\n\n /* ── Slash detection ── */\n const detectSlash = useCallback((text: string, caretPos: number) => {\n // Find the start of the current line.\n const before = text.slice(0, caretPos);\n const lineStart = before.lastIndexOf('\\n') + 1;\n const lineText = text.slice(lineStart, caretPos);\n if (lineText.startsWith('/')) {\n const afterSlash = lineText.slice(1);\n // Only open if the characters after '/' contain no whitespace.\n if (!/\\s/.test(afterSlash)) {\n setSlashOpen(true);\n setSlashQuery(afterSlash);\n return;\n }\n }\n setSlashOpen(false);\n setSlashQuery('');\n }, []);\n\n const handleChange = (e: ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) setInternalValue(e.target.value);\n if (composingRef.current) return;\n onChange?.(e);\n const caret = e.target.selectionStart ?? e.target.value.length;\n detectSlash(e.target.value, caret);\n };\n\n const handleCompositionStart = (\n e: CompositionEvent<HTMLTextAreaElement>,\n ) => {\n composingRef.current = true;\n onCompositionStart?.(e);\n };\n const handleCompositionEnd = (e: CompositionEvent<HTMLTextAreaElement>) => {\n composingRef.current = false;\n onCompositionEnd?.(e);\n };\n\n const isIMEKey = (e: KeyboardEvent<HTMLTextAreaElement>) =>\n e.nativeEvent.isComposing || e.keyCode === 229 || composingRef.current;\n\n const handleSubmit = useCallback(() => {\n const text = currentValue.trim();\n if (!text && attachments.length === 0) return;\n // Extract any leading command token.\n let command: string | undefined;\n let body = currentValue;\n const m = currentValue.match(/^\\/(\\S+)\\s?/);\n if (m) {\n command = m[1];\n body = currentValue.slice(m[0].length);\n }\n onSubmit?.({\n text: body,\n command,\n attachments,\n modelId: currentModel || undefined,\n });\n if (!isControlled) setInternalValue('');\n setAttachments([]);\n }, [currentValue, attachments, onSubmit, currentModel, isControlled]);\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<AIPromptInputHandle>(\n () => ({\n getValue: () => currentValue,\n isEmpty: () => !currentValue.trim() && attachments.length === 0,\n isSubmitting: () => false,\n setValue: (next: string) => {\n if (!isControlled) setInternalValue(next);\n },\n clear: () => {\n if (!isControlled) setInternalValue('');\n setAttachments([]);\n },\n submit: () => {\n handleSubmit();\n },\n focus: () => {\n innerRef.current?.focus();\n },\n }),\n [currentValue, attachments, isControlled, handleSubmit],\n );\n useAgentRegistration(aiPromptInputAgent, agentHandle, id);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (isIMEKey(e)) return;\n\n // Slash menu open — Escape closes; ArrowDown/ArrowUp/Enter handled by cmdk.\n if (slashOpen) {\n if (e.key === 'Escape') {\n e.preventDefault();\n setSlashOpen(false);\n return;\n }\n }\n\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const insertCommand = (cmd: AIPromptCommand) => {\n const el = innerRef.current;\n if (!el) return;\n const caret = el.selectionStart ?? currentValue.length;\n const before = currentValue.slice(0, caret);\n const lineStart = before.lastIndexOf('\\n') + 1;\n // Extend past any non-whitespace characters that follow the caret so\n // we replace the ENTIRE slash token (\"/fi|xBug more\" → \"/fixBug more\"),\n // not just the part before the caret (which would garble the tail).\n let endOfSlashToken = caret;\n while (\n endOfSlashToken < currentValue.length &&\n !/\\s/.test(currentValue[endOfSlashToken])\n ) {\n endOfSlashToken += 1;\n }\n const afterSlash = currentValue.slice(endOfSlashToken);\n const nextValue =\n currentValue.slice(0, lineStart) + `/${cmd.id} ` + afterSlash;\n if (!isControlled) setInternalValue(nextValue);\n // External consumers mirror the same synthetic event pattern other\n // text inputs in the system use — the native `onChange` fires via React.\n setSlashOpen(false);\n setSlashQuery('');\n queueMicrotask(() => el.focus());\n };\n\n /* ── Clipboard paste: strip rich HTML to plaintext, hand files to onAttach ── */\n const handlePaste = (e: ClipboardEvent<HTMLTextAreaElement>) => {\n onPaste?.(e);\n if (e.defaultPrevented) return;\n const { clipboardData } = e;\n if (!clipboardData) return;\n const files: File[] = [];\n for (let i = 0; i < clipboardData.items.length; i += 1) {\n const item = clipboardData.items[i];\n if (item.kind === 'file') {\n const f = item.getAsFile();\n if (f) files.push(f);\n }\n }\n if (files.length > 0) {\n e.preventDefault();\n acceptFiles(files);\n }\n };\n\n /* ── Dropzone ── */\n const acceptFiles = useCallback(\n (files: File[]) => {\n const next: AIPromptAttachment[] = [];\n for (const f of files) {\n if (typeof maxSize === 'number' && f.size > maxSize) {\n onAttachmentRejected?.(\n t('chat.attachment.rejected', { reason: 'size' }),\n );\n continue;\n }\n next.push({\n id: crypto.randomUUID?.() ?? `att-${Math.random()}`,\n file: f,\n });\n }\n if (next.length > 0) {\n setAttachments((prev) => [...prev, ...next]);\n onAttach?.(next.map((a) => a.file));\n }\n },\n [maxSize, onAttach, onAttachmentRejected, t],\n );\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: acceptFiles,\n maxSize,\n accept,\n noClick: true,\n noKeyboard: true,\n });\n\n const removeAttachment = (id: string) => {\n setAttachments((prev) => prev.filter((a) => a.id !== id));\n };\n\n const effectiveId = id ?? textareaId;\n const labelId = `${effectiveId}-label`;\n const slashListId = `${effectiveId}-slash-list`;\n\n const modelOptions: SelectOption<string>[] =\n models?.map((m) => ({ value: m.id, label: m.label })) ?? [];\n\n return (\n <div\n ref={rootRef}\n {...getRootProps({\n className: [\n rootVariants({ size, className }),\n isDragActive\n ? 'ds:outline ds:outline-dashed ds:outline-[color:var(--primary)] ds:outline-offset-2 ds:bg-[color:var(--primary)]/5'\n : '',\n ].join(' '),\n })}\n aria-label={t('chat.attachmentZone')}\n data-component=\"ai-prompt-input\"\n data-component-id={id}\n >\n {/* Hidden file input owned by react-dropzone. The aria-label\n covers axe's `label` rule (the input is visually-hidden but\n still reachable programmatically). */}\n <input aria-label={t('chat.attachmentZone')} {...getInputProps()} />\n\n {context ? (\n <div className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)]\">\n {/* Native <button> — not a span with role=\"button\" — per\n 05-accessibility \"Interactive elements use the right tag\".\n Enter/Space dispatch naturally via the native button;\n Backspace/Delete also dismiss (pill convention). */}\n <button\n type=\"button\"\n aria-label={t('chat.contextActive', { name: context })}\n onClick={onContextDismiss}\n onKeyDown={(e) => {\n if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n onContextDismiss?.();\n }\n }}\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-full)] ds:border ds:border-[color:var(--accent)]/30',\n 'ds:bg-[color:var(--accent)]/10 ds:text-[color:var(--foreground)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'type-body-sm',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n {t('chat.contextActive', { name: context })}\n </button>\n </div>\n ) : null}\n\n <label id={labelId} htmlFor={effectiveId} className=\"ds:sr-only\">\n {t('chat.prompt')}\n </label>\n\n <div className=\"ds:relative\">\n {/* The textarea takes on a combobox role only while the slash\n popup is open. ARIA 1.2 permits `role=\"combobox\"` on a\n textarea — that's what makes `aria-expanded` / `aria-controls`\n valid here. When the popup is closed the textarea reverts to\n its plain implicit role so we don't add the aria attrs at all. */}\n <textarea\n ref={setRefs}\n id={effectiveId}\n rows={minRows}\n value={isControlled ? currentValue : undefined}\n defaultValue={!isControlled ? defaultValue : undefined}\n disabled={disabled}\n placeholder={placeholder ?? t('chat.input.placeholder')}\n aria-labelledby={labelId}\n role={slashOpen ? 'combobox' : undefined}\n aria-controls={slashOpen ? slashListId : undefined}\n aria-expanded={slashOpen ? true : undefined}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n className={[\n 'ds:w-full ds:resize-none ds:bg-transparent ds:outline-none',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)]',\n 'ds:placeholder:text-[color:var(--muted-foreground)]',\n 'ds:leading-[var(--line-height-base)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\n ].join(' ')}\n {...rest}\n />\n\n {slashOpen ? (\n <div\n ref={slashMenuRef}\n className={[\n 'ds:absolute ds:start-[var(--spacing-md)] ds:top-full ds:z-50',\n 'ds:mt-[var(--spacing-xs)]',\n 'ds:min-w-[240px] ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-[color:var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-md)]',\n // Match the Dialog / DropdownMenu open pattern: fade + scale\n // in from 95%. Origin set to the block-start so the menu\n // appears to expand from the textarea it sits beneath.\n 'ds:origin-top ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:zoom-in-95',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n id={slashListId}\n >\n <Command label={t('chat.slashMenu.label')} loop>\n <Command.Input\n value={slashQuery}\n onValueChange={setSlashQuery}\n className=\"ds:sr-only\"\n />\n <Command.List className=\"ds:max-h-60 ds:overflow-y-auto ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]\">\n <Command.Empty className=\"type-body-sm ds:text-[color:var(--muted-foreground)] ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]\">\n {t('chat.slashMenu.empty')}\n </Command.Empty>\n {commands.map((cmd) => (\n <Command.Item\n key={cmd.id}\n value={cmd.id}\n onSelect={() => insertCommand(cmd)}\n className={[\n 'ds:flex ds:flex-col ds:gap-[2px]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-body-sm ds:cursor-pointer',\n 'ds:aria-selected:bg-muted/20',\n 'ds:data-[selected=true]:bg-muted/20',\n ].join(' ')}\n >\n <span className=\"ds:font-medium\">/{cmd.id}</span>\n {cmd.description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {cmd.description}\n </span>\n ) : null}\n </Command.Item>\n ))}\n </Command.List>\n </Command>\n </div>\n ) : null}\n </div>\n\n {attachments.length > 0 ? (\n <div\n role=\"group\"\n aria-label={t('chat.attachmentZone')}\n className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]\"\n >\n {attachments.map((att) => (\n <AttachmentChip\n key={att.id}\n file={att.file}\n onRemove={() => removeAttachment(att.id)}\n />\n ))}\n </div>\n ) : null}\n\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]\">\n {models && models.length > 0 ? (\n <div className=\"ds:me-auto ds:min-w-[140px]\">\n <Select\n aria-label={t('chat.model.select')}\n options={modelOptions}\n value={currentModel || ''}\n onValueChange={(v) => {\n if (!isModelControlled) setInternalModel(v);\n onModelChange?.(v);\n }}\n size=\"sm\"\n />\n </div>\n ) : (\n <div className=\"ds:me-auto\" />\n )}\n <span className=\"ds:sr-only\">{t('chat.input.sendHint')}</span>\n <IconButton\n icon={<Send />}\n aria-label={t('chat.send')}\n intent=\"primary\"\n size=\"sm\"\n disabled={\n disabled || (!currentValue.trim() && attachments.length === 0)\n }\n onClick={handleSubmit}\n aria-keyshortcuts=\"Meta+Enter Control+Enter\"\n />\n </div>\n </div>\n );\n },\n);\n\nAIPromptInput.displayName = 'AIPromptInput';\n\n/* ------------------------------------------------------------------ */\n/* Attachment chip */\n/* ------------------------------------------------------------------ */\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction AttachmentChip({\n file,\n onRemove,\n}: {\n file: File;\n onRemove: () => void;\n}): ReactNode {\n const { t } = useTranslation();\n return (\n <span\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-full)] ds:bg-muted/30',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-xs)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'type-meta',\n // Entrance when a file is attached via drop / paste / picker.\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-1',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n <span className=\"ds:truncate ds:max-w-[16ch]\">{file.name}</span>\n <span className=\"ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {formatSize(file.size)}\n </span>\n <IconButton\n icon={<X />}\n aria-label={t('chat.attachment.remove', { name: file.name })}\n intent=\"ghost\"\n size=\"sm\"\n onClick={onRemove}\n />\n </span>\n );\n}\n"],"names":["aiPromptInputAgent","handle","args","rootVariants","cva","AIPromptInput","forwardRef","commands","models","defaultModelId","modelId","onModelChange","maxSize","accept","context","onContextDismiss","onSubmit","onAttach","onAttachmentRejected","minRows","maxRows","value","defaultValue","size","disabled","className","placeholder","onChange","onKeyDown","onCompositionStart","onCompositionEnd","onPaste","id","rest","ref","t","useTranslation","textareaId","useId","innerRef","useRef","composingRef","slashMenuRef","setRefs","useCallback","node","isControlled","internalValue","setInternalValue","useState","currentValue","attachments","setAttachments","slashOpen","setSlashOpen","slashQuery","setSlashQuery","internalModel","setInternalModel","_a","isModelControlled","currentModel","resize","el","styles","lineHeight","padTop","padBot","borderTop","borderBot","chrome","minH","maxH","next","useLayoutEffect","detectSlash","text","caretPos","lineStart","lineText","afterSlash","handleChange","caret","handleCompositionStart","handleCompositionEnd","isIMEKey","handleSubmit","command","body","m","rootRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","handleKeyDown","insertCommand","cmd","endOfSlashToken","nextValue","handlePaste","clipboardData","files","i","item","f","acceptFiles","prev","a","getRootProps","getInputProps","isDragActive","useDropzone","removeAttachment","effectiveId","labelId","slashListId","modelOptions","jsxs","jsx","Command","att","AttachmentChip","Select","v","IconButton","Send","formatSize","bytes","file","onRemove","X"],"mappings":"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"}
|
|
@@ -188,7 +188,7 @@ const N = i(
|
|
|
188
188
|
"button",
|
|
189
189
|
{
|
|
190
190
|
type: "button",
|
|
191
|
-
"aria-label": I("
|
|
191
|
+
"aria-label": I("common.close", "Close"),
|
|
192
192
|
onClick: B,
|
|
193
193
|
className: q,
|
|
194
194
|
children: /* @__PURE__ */ t(X, { "aria-hidden": "true", className: "ds:size-4" })
|
|
@@ -208,4 +208,4 @@ const at = Object.assign(N, {
|
|
|
208
208
|
export {
|
|
209
209
|
at as A
|
|
210
210
|
};
|
|
211
|
-
//# sourceMappingURL=alert-
|
|
211
|
+
//# sourceMappingURL=alert-pgdXrEO5.js.map
|