@alfadocs/ui-kit 0.1.3 → 0.1.5
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-C_hQGErS.js → agenda-card-DIWDvWum.js} +10 -10
- package/dist/_chunks/agenda-card-DIWDvWum.js.map +1 -0
- package/dist/_chunks/{agenda-tray-CBaVMJLO.js → agenda-tray-BqQZwiHc.js} +5 -5
- package/dist/_chunks/{agenda-tray-CBaVMJLO.js.map → agenda-tray-BqQZwiHc.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-K94oVLG2.js → ai-prompt-input-CI27KmZ1.js} +4 -4
- package/dist/_chunks/ai-prompt-input-CI27KmZ1.js.map +1 -0
- package/dist/_chunks/{alert-rOM4EG0P.js → alert-BlOUMkXj.js} +39 -39
- package/dist/_chunks/alert-BlOUMkXj.js.map +1 -0
- package/dist/_chunks/{audio-recorder-Cn8z2zC9.js → audio-recorder-B-8SKgKn.js} +5 -5
- package/dist/_chunks/{audio-recorder-Cn8z2zC9.js.map → audio-recorder-B-8SKgKn.js.map} +1 -1
- package/dist/_chunks/{autocomplete.agent-DRrp-Rsx.js → autocomplete.agent-DqOy0_1P.js} +31 -31
- package/dist/_chunks/autocomplete.agent-DqOy0_1P.js.map +1 -0
- package/dist/_chunks/{avatar-Biffh-_H.js → avatar-Dcr6XuDQ.js} +19 -19
- package/dist/_chunks/avatar-Dcr6XuDQ.js.map +1 -0
- package/dist/_chunks/{balance-cell-renderer-CiyezQhi.js → balance-cell-renderer-BRWt3neo.js} +166 -166
- package/dist/_chunks/balance-cell-renderer-BRWt3neo.js.map +1 -0
- package/dist/_chunks/breadcrumb-D6xpsP7n.js +293 -0
- package/dist/_chunks/breadcrumb-D6xpsP7n.js.map +1 -0
- package/dist/_chunks/{button-7dTew-IV.js → button-7mLWcMp_.js} +9 -9
- package/dist/_chunks/{button-7dTew-IV.js.map → button-7mLWcMp_.js.map} +1 -1
- package/dist/_chunks/{calendar-BkDeDTaX.js → calendar-nGEgelJs.js} +100 -100
- package/dist/_chunks/calendar-nGEgelJs.js.map +1 -0
- package/dist/_chunks/{chat-input-xiBIujMv.js → chat-input-DsIrWM4f.js} +2 -2
- package/dist/_chunks/{chat-input-xiBIujMv.js.map → chat-input-DsIrWM4f.js.map} +1 -1
- package/dist/_chunks/{chat-message-BtxUyugB.js → chat-message-ByouZpPP.js} +3 -3
- package/dist/_chunks/{chat-message-BtxUyugB.js.map → chat-message-ByouZpPP.js.map} +1 -1
- package/dist/_chunks/{checkbox-Ni6C_KJg.js → checkbox-DNK4qS2_.js} +13 -13
- package/dist/_chunks/checkbox-DNK4qS2_.js.map +1 -0
- package/dist/_chunks/{checkbox-group-BFZ4oN5t.js → checkbox-group-CWpGZEF6.js} +13 -13
- package/dist/_chunks/checkbox-group-CWpGZEF6.js.map +1 -0
- package/dist/_chunks/{collapsible-fFMqzpdL.js → collapsible-D4LOdLxp.js} +18 -18
- package/dist/_chunks/collapsible-D4LOdLxp.js.map +1 -0
- package/dist/_chunks/{color-picker-Cl3KdjJd.js → color-picker-e9PmpaGH.js} +161 -161
- package/dist/_chunks/color-picker-e9PmpaGH.js.map +1 -0
- package/dist/_chunks/{combobox.agent-DjdivI3X.js → combobox.agent-ByobCLJ_.js} +28 -28
- package/dist/_chunks/combobox.agent-ByobCLJ_.js.map +1 -0
- package/dist/_chunks/{command-palette.agent-BUjzr2ET.js → command-palette.agent-js2rxgeR.js} +117 -117
- package/dist/_chunks/command-palette.agent-js2rxgeR.js.map +1 -0
- package/dist/_chunks/{description-list-C_1NX8P3.js → description-list-DvJbp6Yg.js} +2 -2
- package/dist/_chunks/{description-list-C_1NX8P3.js.map → description-list-DvJbp6Yg.js.map} +1 -1
- package/dist/_chunks/{dialog.agent-C2lP9H0h.js → dialog.agent-DEG_fVzG.js} +42 -42
- package/dist/_chunks/dialog.agent-DEG_fVzG.js.map +1 -0
- package/dist/_chunks/{dropdown-menu-2HgU1Emf.js → dropdown-menu-JNo66A-j.js} +2 -2
- package/dist/_chunks/dropdown-menu-JNo66A-j.js.map +1 -0
- package/dist/_chunks/{empty-state-BHrItOiE.js → empty-state-DQPtRp2b.js} +2 -2
- package/dist/_chunks/{empty-state-BHrItOiE.js.map → empty-state-DQPtRp2b.js.map} +1 -1
- package/dist/_chunks/{file-upload.agent-LlC0W468.js → file-upload.agent-B9AN82LA.js} +2 -2
- package/dist/_chunks/{file-upload.agent-LlC0W468.js.map → file-upload.agent-B9AN82LA.js.map} +1 -1
- package/dist/_chunks/{freemium-paywall-Dr9aOtOC.js → freemium-paywall-CkefGLM_.js} +4 -4
- package/dist/_chunks/{freemium-paywall-Dr9aOtOC.js.map → freemium-paywall-CkefGLM_.js.map} +1 -1
- package/dist/_chunks/{header-BpU9U-1X.js → header-BGn1mRp8.js} +2 -2
- package/dist/_chunks/{header-BpU9U-1X.js.map → header-BGn1mRp8.js.map} +1 -1
- package/dist/_chunks/{icon-button-CNjWCD1X.js → icon-button-Wnnde5lc.js} +6 -6
- package/dist/_chunks/icon-button-Wnnde5lc.js.map +1 -0
- package/dist/_chunks/input-surface-u4QB0lxe.js +32 -0
- package/dist/_chunks/input-surface-u4QB0lxe.js.map +1 -0
- package/dist/_chunks/{key-value-pair-C9hpjC_B.js → key-value-pair-JRFS9Xrh.js} +10 -10
- package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +1 -0
- package/dist/_chunks/{leo-sidebar-CNjZqljo.js → leo-sidebar-BzN4pJ7j.js} +16 -16
- package/dist/_chunks/leo-sidebar-BzN4pJ7j.js.map +1 -0
- package/dist/_chunks/{message-card-CZzNO4ov.js → message-card-qAp2-WQK.js} +12 -12
- package/dist/_chunks/message-card-qAp2-WQK.js.map +1 -0
- package/dist/_chunks/{message-tray-BWbjXW3F.js → message-tray-VaLpQU5t.js} +5 -5
- package/dist/_chunks/{message-tray-BWbjXW3F.js.map → message-tray-VaLpQU5t.js.map} +1 -1
- package/dist/_chunks/{multi-select.agent-BSGEW10d.js → multi-select.agent-CNsyW3n9.js} +66 -66
- package/dist/_chunks/multi-select.agent-CNsyW3n9.js.map +1 -0
- package/dist/_chunks/navigation-menu-EVFau1O2.js +180 -0
- package/dist/_chunks/navigation-menu-EVFau1O2.js.map +1 -0
- package/dist/_chunks/{notification-card-DgW-vVg-.js → notification-card-BF2_veHy.js} +11 -11
- package/dist/_chunks/notification-card-BF2_veHy.js.map +1 -0
- package/dist/_chunks/{notification-tray-CKUgl2jc.js → notification-tray-Bq-08ReD.js} +5 -5
- package/dist/_chunks/{notification-tray-CKUgl2jc.js.map → notification-tray-Bq-08ReD.js.map} +1 -1
- package/dist/_chunks/{number-input-BPPhekLu.js → number-input-DjpT_RXJ.js} +46 -46
- package/dist/_chunks/number-input-DjpT_RXJ.js.map +1 -0
- package/dist/_chunks/pagination.agent-oEaqmtx5.js +380 -0
- package/dist/_chunks/pagination.agent-oEaqmtx5.js.map +1 -0
- package/dist/_chunks/{password-input-DAT5HQth.js → password-input-DJDVznWH.js} +5 -5
- package/dist/_chunks/password-input-DJDVznWH.js.map +1 -0
- package/dist/_chunks/{patient-shell-BzHhg6uA.js → patient-shell-DP54y6rc.js} +5 -5
- package/dist/_chunks/{patient-shell-BzHhg6uA.js.map → patient-shell-DP54y6rc.js.map} +1 -1
- package/dist/_chunks/{payment-form-YlxrCpZQ.js → payment-form-hcl-gGrp.js} +2 -2
- package/dist/_chunks/{payment-form-YlxrCpZQ.js.map → payment-form-hcl-gGrp.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer.agent-sMned5Xn.js → pdf-viewer.agent-CfIHhcHx.js} +3 -3
- package/dist/_chunks/{pdf-viewer.agent-sMned5Xn.js.map → pdf-viewer.agent-CfIHhcHx.js.map} +1 -1
- package/dist/_chunks/{phone-input-BuRe5PyI.js → phone-input-DE_39q65.js} +103 -103
- package/dist/_chunks/phone-input-DE_39q65.js.map +1 -0
- package/dist/_chunks/{popover-Ds1iOdiv.js → popover-DvAtFOi-.js} +2 -2
- package/dist/_chunks/{popover-Ds1iOdiv.js.map → popover-DvAtFOi-.js.map} +1 -1
- package/dist/_chunks/{privacy-lock-KEruBpM1.js → privacy-lock-DS6QRo2N.js} +43 -42
- package/dist/_chunks/{privacy-lock-KEruBpM1.js.map → privacy-lock-DS6QRo2N.js.map} +1 -1
- package/dist/_chunks/{progress-D4ELgHG3.js → progress-B4Of_pzz.js} +57 -57
- package/dist/_chunks/progress-B4Of_pzz.js.map +1 -0
- package/dist/_chunks/{radio-XSSNX3Af.js → radio-cs8N1wJi.js} +29 -29
- package/dist/_chunks/radio-cs8N1wJi.js.map +1 -0
- package/dist/_chunks/{radio-group-DBrUOPcy.js → radio-group-BIUbpWml.js} +3 -3
- package/dist/_chunks/radio-group-BIUbpWml.js.map +1 -0
- package/dist/_chunks/{scroll-area-HIq0hJyJ.js → scroll-area-DLr5w9Dd.js} +9 -9
- package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +1 -0
- package/dist/_chunks/{search-bar-9Zbew4yM.js → search-bar-fcGqDFW3.js} +30 -30
- package/dist/_chunks/{search-bar-9Zbew4yM.js.map → search-bar-fcGqDFW3.js.map} +1 -1
- package/dist/_chunks/{search-input-CtkWITO2.js → search-input-BVMCONyN.js} +2 -2
- package/dist/_chunks/{search-input-CtkWITO2.js.map → search-input-BVMCONyN.js.map} +1 -1
- package/dist/_chunks/{select-DdAOtomN.js → select-IY_JQa-F.js} +50 -50
- package/dist/_chunks/select-IY_JQa-F.js.map +1 -0
- package/dist/_chunks/{sheet-D7GRhnWw.js → sheet-BhNpLHc9.js} +8 -8
- package/dist/_chunks/sheet-BhNpLHc9.js.map +1 -0
- package/dist/_chunks/{sidebar-Dc2ffrbf.js → sidebar-OVzwN3jE.js} +294 -294
- package/dist/_chunks/sidebar-OVzwN3jE.js.map +1 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-BotwPDcW.js → sign-in-with-alfadocs-button-BN_FPGHT.js} +2 -2
- package/dist/_chunks/{sign-in-with-alfadocs-button-BotwPDcW.js.map → sign-in-with-alfadocs-button-BN_FPGHT.js.map} +1 -1
- package/dist/_chunks/{skeleton-DAdPFx9d.js → skeleton-dtqyF09N.js} +8 -8
- package/dist/_chunks/skeleton-dtqyF09N.js.map +1 -0
- package/dist/_chunks/{slot-grid-WHc5A8-z.js → slot-grid-D_l5VsHG.js} +5 -5
- package/dist/_chunks/{slot-grid-WHc5A8-z.js.map → slot-grid-D_l5VsHG.js.map} +1 -1
- package/dist/_chunks/{stepper-accordion-2_7Pw0tC.js → stepper-accordion-CGog0JSF.js} +64 -64
- package/dist/_chunks/stepper-accordion-CGog0JSF.js.map +1 -0
- package/dist/_chunks/{stepper-calendar-CWZcFgt_.js → stepper-calendar-_fLOAjus.js} +7 -7
- package/dist/_chunks/{stepper-calendar-CWZcFgt_.js.map → stepper-calendar-_fLOAjus.js.map} +1 -1
- package/dist/_chunks/{switch-DhSORO9C.js → switch-aN2EYxHh.js} +4 -4
- package/dist/_chunks/switch-aN2EYxHh.js.map +1 -0
- package/dist/_chunks/{tabs.agent-BtaNGxRh.js → tabs.agent-BpbVA-Zh.js} +55 -55
- package/dist/_chunks/tabs.agent-BpbVA-Zh.js.map +1 -0
- package/dist/_chunks/{tag--uLKOb9f.js → tag-BqidXKo3.js} +2 -2
- package/dist/_chunks/tag-BqidXKo3.js.map +1 -0
- package/dist/_chunks/{task-card-BeSuntXP.js → task-card-yW7tKlG4.js} +17 -17
- package/dist/_chunks/task-card-yW7tKlG4.js.map +1 -0
- package/dist/_chunks/{task-tray-pRk6u8Ik.js → task-tray-BzahI5FQ.js} +5 -5
- package/dist/_chunks/{task-tray-pRk6u8Ik.js.map → task-tray-BzahI5FQ.js.map} +1 -1
- package/dist/_chunks/{text-area-xf9-6iDf.js → text-area-DmKSd2DG.js} +2 -2
- package/dist/_chunks/text-area-DmKSd2DG.js.map +1 -0
- package/dist/_chunks/{text-input-exh7VD7D.js → text-input-CRHvl5zk.js} +19 -19
- package/dist/_chunks/text-input-CRHvl5zk.js.map +1 -0
- package/dist/_chunks/{theme-toggle-CJgA6G24.js → theme-toggle-COHFwO2H.js} +4 -4
- package/dist/_chunks/{theme-toggle-CJgA6G24.js.map → theme-toggle-COHFwO2H.js.map} +1 -1
- package/dist/_chunks/{timeline-DIueH4TJ.js → timeline-RgAIzpMd.js} +2 -2
- package/dist/_chunks/{timeline-DIueH4TJ.js.map → timeline-RgAIzpMd.js.map} +1 -1
- package/dist/_chunks/{toast-q0SlabGr.js → toast-lOhJDKOH.js} +12 -12
- package/dist/_chunks/{toast-q0SlabGr.js.map → toast-lOhJDKOH.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-DFnhbrlQ.js → transcript-panel-CNbVGG9L.js} +59 -59
- package/dist/_chunks/transcript-panel-CNbVGG9L.js.map +1 -0
- package/dist/_chunks/{visually-hidden-BlkhaZWe.js → visually-hidden-Bw7vBHLm.js} +6 -6
- package/dist/_chunks/{visually-hidden-BlkhaZWe.js.map → visually-hidden-Bw7vBHLm.js.map} +1 -1
- package/dist/_chunks/{warning-stack-DCmO0R07.js → warning-stack-8Pa3pekh.js} +24 -24
- package/dist/_chunks/warning-stack-8Pa3pekh.js.map +1 -0
- package/dist/_chunks/{workflow-map-CAM6Uy_J.js → workflow-map-DGJwVcO-.js} +106 -106
- package/dist/_chunks/workflow-map-DGJwVcO-.js.map +1 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/_shared/input-surface.d.ts +11 -11
- package/dist/components/agenda-card/index.js +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/audio-recorder/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/checkbox-group/index.js +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/key-value-pair/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 +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/number-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/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/privacy-lock/index.js +1 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts.map +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/scroll-area/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/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-calendar/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/timeline/index.js +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/visually-hidden/index.js +1 -1
- package/dist/components/warning-stack/index.js +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/index.js +72 -72
- 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 +504 -135
- package/dist/_chunks/agenda-card-C_hQGErS.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-K94oVLG2.js.map +0 -1
- package/dist/_chunks/alert-rOM4EG0P.js.map +0 -1
- package/dist/_chunks/autocomplete.agent-DRrp-Rsx.js.map +0 -1
- package/dist/_chunks/avatar-Biffh-_H.js.map +0 -1
- package/dist/_chunks/balance-cell-renderer-CiyezQhi.js.map +0 -1
- package/dist/_chunks/breadcrumb-CcZovmIq.js +0 -293
- package/dist/_chunks/breadcrumb-CcZovmIq.js.map +0 -1
- package/dist/_chunks/calendar-BkDeDTaX.js.map +0 -1
- package/dist/_chunks/checkbox-Ni6C_KJg.js.map +0 -1
- package/dist/_chunks/checkbox-group-BFZ4oN5t.js.map +0 -1
- package/dist/_chunks/collapsible-fFMqzpdL.js.map +0 -1
- package/dist/_chunks/color-picker-Cl3KdjJd.js.map +0 -1
- package/dist/_chunks/combobox.agent-DjdivI3X.js.map +0 -1
- package/dist/_chunks/command-palette.agent-BUjzr2ET.js.map +0 -1
- package/dist/_chunks/dialog.agent-C2lP9H0h.js.map +0 -1
- package/dist/_chunks/dropdown-menu-2HgU1Emf.js.map +0 -1
- package/dist/_chunks/icon-button-CNjWCD1X.js.map +0 -1
- package/dist/_chunks/input-surface-D5OMCB1W.js +0 -32
- package/dist/_chunks/input-surface-D5OMCB1W.js.map +0 -1
- package/dist/_chunks/key-value-pair-C9hpjC_B.js.map +0 -1
- package/dist/_chunks/leo-sidebar-CNjZqljo.js.map +0 -1
- package/dist/_chunks/message-card-CZzNO4ov.js.map +0 -1
- package/dist/_chunks/multi-select.agent-BSGEW10d.js.map +0 -1
- package/dist/_chunks/navigation-menu-DxOMvrKM.js +0 -180
- package/dist/_chunks/navigation-menu-DxOMvrKM.js.map +0 -1
- package/dist/_chunks/notification-card-DgW-vVg-.js.map +0 -1
- package/dist/_chunks/number-input-BPPhekLu.js.map +0 -1
- package/dist/_chunks/pagination.agent-CmA0Ocr5.js +0 -380
- package/dist/_chunks/pagination.agent-CmA0Ocr5.js.map +0 -1
- package/dist/_chunks/password-input-DAT5HQth.js.map +0 -1
- package/dist/_chunks/phone-input-BuRe5PyI.js.map +0 -1
- package/dist/_chunks/progress-D4ELgHG3.js.map +0 -1
- package/dist/_chunks/radio-XSSNX3Af.js.map +0 -1
- package/dist/_chunks/radio-group-DBrUOPcy.js.map +0 -1
- package/dist/_chunks/scroll-area-HIq0hJyJ.js.map +0 -1
- package/dist/_chunks/select-DdAOtomN.js.map +0 -1
- package/dist/_chunks/sheet-D7GRhnWw.js.map +0 -1
- package/dist/_chunks/sidebar-Dc2ffrbf.js.map +0 -1
- package/dist/_chunks/skeleton-DAdPFx9d.js.map +0 -1
- package/dist/_chunks/stepper-accordion-2_7Pw0tC.js.map +0 -1
- package/dist/_chunks/switch-DhSORO9C.js.map +0 -1
- package/dist/_chunks/tabs.agent-BtaNGxRh.js.map +0 -1
- package/dist/_chunks/tag--uLKOb9f.js.map +0 -1
- package/dist/_chunks/task-card-BeSuntXP.js.map +0 -1
- package/dist/_chunks/text-area-xf9-6iDf.js.map +0 -1
- package/dist/_chunks/text-input-exh7VD7D.js.map +0 -1
- package/dist/_chunks/transcript-panel-DFnhbrlQ.js.map +0 -1
- package/dist/_chunks/warning-stack-DCmO0R07.js.map +0 -1
- package/dist/_chunks/workflow-map-CAM6Uy_J.js.map +0 -1
|
@@ -3,7 +3,7 @@ import { forwardRef as $, useState as j, useRef as I, useId as A, useMemo as z,
|
|
|
3
3
|
import { c as D } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as O } from "react-i18next";
|
|
5
5
|
import { u as V } from "./index-CJE9uQmb.js";
|
|
6
|
-
import { S as F } from "./search-input-
|
|
6
|
+
import { S as F } from "./search-input-BVMCONyN.js";
|
|
7
7
|
const _ = D(
|
|
8
8
|
[
|
|
9
9
|
"ds:flex ds:flex-col ds:w-full ds:min-h-0",
|
|
@@ -22,37 +22,37 @@ const _ = D(
|
|
|
22
22
|
defaultVariants: { size: "md" }
|
|
23
23
|
}
|
|
24
24
|
), H = 100, B = 8;
|
|
25
|
-
function M(
|
|
26
|
-
const o = Math.max(0, Math.floor(
|
|
27
|
-
return `${l(
|
|
25
|
+
function M(s, r) {
|
|
26
|
+
const o = Math.max(0, Math.floor(s)), d = Math.floor(o / 60), c = o % 60, l = (h) => new Intl.NumberFormat(r, { minimumIntegerDigits: 2 }).format(h);
|
|
27
|
+
return `${l(d)}:${l(c)}`;
|
|
28
28
|
}
|
|
29
|
-
function U(
|
|
30
|
-
const r = Math.max(0, Math.floor(
|
|
31
|
-
return `PT${o}M${
|
|
29
|
+
function U(s) {
|
|
30
|
+
const r = Math.max(0, Math.floor(s)), o = Math.floor(r / 60), d = r % 60;
|
|
31
|
+
return `PT${o}M${d}S`;
|
|
32
32
|
}
|
|
33
|
-
function G(
|
|
33
|
+
function G(s) {
|
|
34
34
|
let r = 0;
|
|
35
|
-
for (let o = 0; o <
|
|
36
|
-
r = r * 31 +
|
|
35
|
+
for (let o = 0; o < s.length; o += 1)
|
|
36
|
+
r = r * 31 + s.charCodeAt(o) | 0;
|
|
37
37
|
return Math.abs(r) % B;
|
|
38
38
|
}
|
|
39
39
|
const Q = [
|
|
40
|
-
"bg-[color:var(--transcript-speaker-1)]",
|
|
41
|
-
"bg-[color:var(--transcript-speaker-2)]",
|
|
42
|
-
"bg-[color:var(--transcript-speaker-3)]",
|
|
43
|
-
"bg-[color:var(--transcript-speaker-4)]",
|
|
44
|
-
"bg-[color:var(--transcript-speaker-5)]",
|
|
45
|
-
"bg-[color:var(--transcript-speaker-6)]",
|
|
46
|
-
"bg-[color:var(--transcript-speaker-7)]",
|
|
47
|
-
"bg-[color:var(--transcript-speaker-8)]"
|
|
40
|
+
"ds:bg-[color:var(--transcript-speaker-1)]",
|
|
41
|
+
"ds:bg-[color:var(--transcript-speaker-2)]",
|
|
42
|
+
"ds:bg-[color:var(--transcript-speaker-3)]",
|
|
43
|
+
"ds:bg-[color:var(--transcript-speaker-4)]",
|
|
44
|
+
"ds:bg-[color:var(--transcript-speaker-5)]",
|
|
45
|
+
"ds:bg-[color:var(--transcript-speaker-6)]",
|
|
46
|
+
"ds:bg-[color:var(--transcript-speaker-7)]",
|
|
47
|
+
"ds:bg-[color:var(--transcript-speaker-8)]"
|
|
48
48
|
];
|
|
49
|
-
function Y(
|
|
50
|
-
return
|
|
49
|
+
function Y(s) {
|
|
50
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
51
51
|
}
|
|
52
|
-
function Z({ text:
|
|
53
|
-
if (!r) return
|
|
52
|
+
function Z({ text: s, query: r }) {
|
|
53
|
+
if (!r) return s;
|
|
54
54
|
const o = Y(r);
|
|
55
|
-
return
|
|
55
|
+
return s.split(new RegExp(`(${o})`, "gi")).map(
|
|
56
56
|
(c, l) => c.toLocaleLowerCase() === r.toLocaleLowerCase() ? /* @__PURE__ */ n(
|
|
57
57
|
"mark",
|
|
58
58
|
{
|
|
@@ -65,40 +65,40 @@ function Z({ text: t, query: r }) {
|
|
|
65
65
|
}
|
|
66
66
|
const q = $(
|
|
67
67
|
({
|
|
68
|
-
lines:
|
|
68
|
+
lines: s,
|
|
69
69
|
currentTime: r = 0,
|
|
70
70
|
onSeek: o,
|
|
71
|
-
searchable:
|
|
71
|
+
searchable: d = !0,
|
|
72
72
|
size: c = "md",
|
|
73
73
|
className: l,
|
|
74
74
|
...h
|
|
75
75
|
}, R) => {
|
|
76
|
-
const { t:
|
|
76
|
+
const { t: i, i18n: v } = O(), [u, T] = j(""), b = I(null), w = I(null), S = A(), p = z(() => {
|
|
77
77
|
if (!Number.isFinite(r)) return -1;
|
|
78
|
-
for (let e = 0; e <
|
|
79
|
-
const
|
|
80
|
-
if (
|
|
78
|
+
for (let e = 0; e < s.length; e += 1) {
|
|
79
|
+
const t = s[e];
|
|
80
|
+
if (t.start <= r && r < t.end) return e;
|
|
81
81
|
}
|
|
82
82
|
return -1;
|
|
83
|
-
}, [
|
|
83
|
+
}, [s, r]), y = z(() => {
|
|
84
84
|
if (!u) return 0;
|
|
85
85
|
let e = 0;
|
|
86
|
-
const
|
|
87
|
-
for (const a of
|
|
86
|
+
const t = u.toLocaleLowerCase();
|
|
87
|
+
for (const a of s) {
|
|
88
88
|
const f = a.text.toLocaleLowerCase();
|
|
89
|
-
let g = f.indexOf(
|
|
89
|
+
let g = f.indexOf(t);
|
|
90
90
|
for (; g !== -1; )
|
|
91
|
-
e += 1, g = f.indexOf(
|
|
91
|
+
e += 1, g = f.indexOf(t, g + t.length);
|
|
92
92
|
}
|
|
93
93
|
return e;
|
|
94
|
-
}, [
|
|
94
|
+
}, [s, u]), E = L(
|
|
95
95
|
(e) => {
|
|
96
|
-
var
|
|
97
|
-
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" &&
|
|
96
|
+
var t;
|
|
97
|
+
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" && d && (e.preventDefault(), (t = w.current) == null || t.focus());
|
|
98
98
|
},
|
|
99
|
-
[
|
|
100
|
-
), N =
|
|
101
|
-
count: N ?
|
|
99
|
+
[d]
|
|
100
|
+
), N = s.length > H, x = V({
|
|
101
|
+
count: N ? s.length : 0,
|
|
102
102
|
getScrollElement: () => b.current,
|
|
103
103
|
estimateSize: () => 48,
|
|
104
104
|
overscan: 8,
|
|
@@ -108,24 +108,24 @@ const q = $(
|
|
|
108
108
|
if (p < 0) return;
|
|
109
109
|
const e = b.current;
|
|
110
110
|
if (!e) return;
|
|
111
|
-
const
|
|
111
|
+
const t = e.querySelector(
|
|
112
112
|
`[data-line-index="${p}"]`
|
|
113
113
|
);
|
|
114
|
-
if (!
|
|
114
|
+
if (!t) return;
|
|
115
115
|
const a = typeof window < "u" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
116
|
-
|
|
116
|
+
t.scrollIntoView({
|
|
117
117
|
block: "center",
|
|
118
118
|
behavior: a ? "auto" : "smooth"
|
|
119
119
|
});
|
|
120
120
|
}, [p]);
|
|
121
121
|
const k = L(
|
|
122
|
-
(e,
|
|
123
|
-
const f =
|
|
122
|
+
(e, t, a) => {
|
|
123
|
+
const f = t === p, g = G(e.speaker), C = typeof e.confidence == "number" && e.confidence < 0.6;
|
|
124
124
|
return /* @__PURE__ */ m(
|
|
125
125
|
"li",
|
|
126
126
|
{
|
|
127
127
|
ref: a == null ? void 0 : a.liRef,
|
|
128
|
-
"data-line-index":
|
|
128
|
+
"data-line-index": t,
|
|
129
129
|
"data-index": a == null ? void 0 : a.dataIndex,
|
|
130
130
|
"aria-current": f ? "true" : void 0,
|
|
131
131
|
style: a == null ? void 0 : a.style,
|
|
@@ -141,7 +141,7 @@ const q = $(
|
|
|
141
141
|
{
|
|
142
142
|
type: "button",
|
|
143
143
|
onClick: () => o == null ? void 0 : o(e.start),
|
|
144
|
-
"aria-label":
|
|
144
|
+
"aria-label": i("ui.chat.transcript.seekTo", {
|
|
145
145
|
time: M(e.start, v.language)
|
|
146
146
|
}),
|
|
147
147
|
className: [
|
|
@@ -172,10 +172,10 @@ const q = $(
|
|
|
172
172
|
className: `ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ${Q[g]}`
|
|
173
173
|
}
|
|
174
174
|
),
|
|
175
|
-
/* @__PURE__ */ n("strong", { className: "type-title-item", children:
|
|
175
|
+
/* @__PURE__ */ n("strong", { className: "type-title-item", children: i("ui.chat.transcript.speaker", { name: e.speaker }) }),
|
|
176
176
|
C ? /* @__PURE__ */ m("span", { className: "type-meta ds:italic ds:text-[color:var(--muted-foreground)]", children: [
|
|
177
177
|
"(",
|
|
178
|
-
|
|
178
|
+
i("ui.chat.transcript.lowConfidence"),
|
|
179
179
|
")"
|
|
180
180
|
] }) : null
|
|
181
181
|
] }),
|
|
@@ -193,10 +193,10 @@ const q = $(
|
|
|
193
193
|
] })
|
|
194
194
|
]
|
|
195
195
|
},
|
|
196
|
-
|
|
196
|
+
t
|
|
197
197
|
);
|
|
198
198
|
},
|
|
199
|
-
[p, v.language, o, u,
|
|
199
|
+
[p, v.language, o, u, i]
|
|
200
200
|
);
|
|
201
201
|
return /* @__PURE__ */ m(
|
|
202
202
|
"div",
|
|
@@ -207,14 +207,14 @@ const q = $(
|
|
|
207
207
|
className: _({ size: c, className: l }),
|
|
208
208
|
...h,
|
|
209
209
|
children: [
|
|
210
|
-
|
|
210
|
+
d ? /* @__PURE__ */ m("div", { className: "ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:border-b ds:border-border", children: [
|
|
211
211
|
/* @__PURE__ */ n(
|
|
212
212
|
F,
|
|
213
213
|
{
|
|
214
214
|
ref: w,
|
|
215
215
|
id: S,
|
|
216
|
-
placeholder:
|
|
217
|
-
"aria-label":
|
|
216
|
+
placeholder: i("ui.chat.transcript.search"),
|
|
217
|
+
"aria-label": i("ui.chat.transcript.search"),
|
|
218
218
|
"aria-keyshortcuts": "Meta+F Control+F",
|
|
219
219
|
debounceMs: 150,
|
|
220
220
|
onChange: (e) => T(e),
|
|
@@ -227,7 +227,7 @@ const q = $(
|
|
|
227
227
|
role: "status",
|
|
228
228
|
"aria-live": "polite",
|
|
229
229
|
className: "type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums",
|
|
230
|
-
children: y === 0 ?
|
|
230
|
+
children: y === 0 ? i("ui.chat.transcript.noMatches") : i("ui.chat.transcript.matchCount", { count: y })
|
|
231
231
|
}
|
|
232
232
|
) : null
|
|
233
233
|
] }) : null,
|
|
@@ -242,8 +242,8 @@ const q = $(
|
|
|
242
242
|
className: "ds:relative ds:list-none ds:ps-0 ds:m-0",
|
|
243
243
|
style: { blockSize: `${x.getTotalSize()}px` },
|
|
244
244
|
children: x.getVirtualItems().map((e) => {
|
|
245
|
-
const
|
|
246
|
-
return
|
|
245
|
+
const t = s[e.index];
|
|
246
|
+
return t ? k(t, e.index, {
|
|
247
247
|
liRef: x.measureElement,
|
|
248
248
|
dataIndex: e.index,
|
|
249
249
|
style: { transform: `translateY(${e.start}px)` },
|
|
@@ -251,7 +251,7 @@ const q = $(
|
|
|
251
251
|
}) : null;
|
|
252
252
|
})
|
|
253
253
|
}
|
|
254
|
-
) : /* @__PURE__ */ n("ol", { className: "ds:list-none ds:ps-0 ds:m-0", children:
|
|
254
|
+
) : /* @__PURE__ */ n("ol", { className: "ds:list-none ds:ps-0 ds:m-0", children: s.map((e, t) => k(e, t)) })
|
|
255
255
|
}
|
|
256
256
|
)
|
|
257
257
|
]
|
|
@@ -263,4 +263,4 @@ q.displayName = "TranscriptPanel";
|
|
|
263
263
|
export {
|
|
264
264
|
q as T
|
|
265
265
|
};
|
|
266
|
-
//# sourceMappingURL=transcript-panel-
|
|
266
|
+
//# sourceMappingURL=transcript-panel-CNbVGG9L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-panel-CNbVGG9L.js","sources":["../../src/components/transcript-panel/transcript-panel.tsx"],"sourcesContent":["import {\n forwardRef,\n Fragment,\n useCallback,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { SearchInput } from '../search-input';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface TranscriptLine {\n speaker: string;\n text: string;\n /** Seconds, floating-point — matches HTMLMediaElement.currentTime. */\n start: number;\n end: number;\n /** 0..1 — rendered with a dotted underline when below 0.6. */\n confidence?: number;\n}\n\nexport interface TranscriptPanelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>,\n VariantProps<typeof rootVariants> {\n lines: TranscriptLine[];\n /** Current playback time in seconds — drives the active line highlight. */\n currentTime?: number;\n onSeek?: (seconds: number) => void;\n /** Show the search bar. */\n searchable?: boolean;\n}\n\nconst rootVariants = cva(\n [\n 'ds:flex ds:flex-col ds:w-full ds:min-h-0',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-background',\n 'ds:focus-within:border-[color:var(--primary)]',\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\nconst VIRTUALIZATION_THRESHOLD = 100;\nconst SPEAKER_SLOT_COUNT = 8;\n\nfunction formatTime(seconds: number, locale: string): string {\n const total = Math.max(0, Math.floor(seconds));\n const m = Math.floor(total / 60);\n const s = total % 60;\n const fmt = (n: number) =>\n new Intl.NumberFormat(locale, { minimumIntegerDigits: 2 }).format(n);\n return `${fmt(m)}:${fmt(s)}`;\n}\n\n/** ISO-8601 duration (PT#M#S) for <time datetime=\"...\">. */\nfunction secondsToIsoDuration(seconds: number): string {\n const total = Math.max(0, Math.floor(seconds));\n const m = Math.floor(total / 60);\n const s = total % 60;\n return `PT${m}M${s}S`;\n}\n\n/** Deterministic speaker slot (0..7) based on name hash. */\nfunction speakerSlot(name: string): number {\n let hash = 0;\n for (let i = 0; i < name.length; i += 1) {\n hash = (hash * 31 + name.charCodeAt(i)) | 0;\n }\n return Math.abs(hash) % SPEAKER_SLOT_COUNT;\n}\n\n/** Per-slot background classes. Indices align with the speaker palette tokens\n * in tokens/index.css. Static strings so Tailwind can pick them up at build. */\nconst SPEAKER_BG_CLASSES = [\n 'ds:bg-[color:var(--transcript-speaker-1)]',\n 'ds:bg-[color:var(--transcript-speaker-2)]',\n 'ds:bg-[color:var(--transcript-speaker-3)]',\n 'ds:bg-[color:var(--transcript-speaker-4)]',\n 'ds:bg-[color:var(--transcript-speaker-5)]',\n 'ds:bg-[color:var(--transcript-speaker-6)]',\n 'ds:bg-[color:var(--transcript-speaker-7)]',\n 'ds:bg-[color:var(--transcript-speaker-8)]',\n] as const;\n\n/** Escape a literal string for safe use inside a RegExp. */\nfunction escapeRegExp(input: string): string {\n return input.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\ninterface HighlightedTextProps {\n text: string;\n query: string;\n}\n\n/** Renders text with <mark> wrapping around case-insensitive matches.\n * No dangerouslySetInnerHTML — splits text nodes only. */\nfunction HighlightedText({ text, query }: HighlightedTextProps): ReactNode {\n if (!query) return text;\n const escaped = escapeRegExp(query);\n const parts = text.split(new RegExp(`(${escaped})`, 'gi'));\n return parts.map((part, i) =>\n part.toLocaleLowerCase() === query.toLocaleLowerCase() ? (\n <mark\n key={i}\n className=\"ds:bg-[color:var(--warning)]/30 ds:text-[color:var(--foreground)] ds:rounded-[var(--radius-sm)]\"\n >\n {part}\n </mark>\n ) : (\n <Fragment key={i}>{part}</Fragment>\n ),\n );\n}\n\nexport const TranscriptPanel = forwardRef<HTMLDivElement, TranscriptPanelProps>(\n (\n {\n lines,\n currentTime = 0,\n onSeek,\n searchable = true,\n size = 'md',\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const [query, setQuery] = useState('');\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const searchInputRef = useRef<HTMLInputElement | null>(null);\n const searchId = useId();\n\n /* Active-line index */\n const activeIndex = useMemo(() => {\n if (!Number.isFinite(currentTime)) return -1;\n for (let i = 0; i < lines.length; i += 1) {\n const line = lines[i];\n if (line.start <= currentTime && currentTime < line.end) return i;\n }\n return -1;\n }, [lines, currentTime]);\n\n /* Match count for search */\n const matchCount = useMemo(() => {\n if (!query) return 0;\n let count = 0;\n const needle = query.toLocaleLowerCase();\n for (const line of lines) {\n const hay = line.text.toLocaleLowerCase();\n let idx = hay.indexOf(needle);\n while (idx !== -1) {\n count += 1;\n idx = hay.indexOf(needle, idx + needle.length);\n }\n }\n return count;\n }, [lines, query]);\n\n /* Ctrl/Cmd+F shortcut — focuses the search field when focus is within. */\n const handleRootKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'f' && searchable) {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n },\n [searchable],\n );\n\n /* Virtualisation above 100 lines */\n const virtualized = lines.length > VIRTUALIZATION_THRESHOLD;\n const virtualizer = useVirtualizer({\n count: virtualized ? lines.length : 0,\n getScrollElement: () => scrollRef.current,\n estimateSize: () => 48,\n overscan: 8,\n getItemKey: (i) => i,\n });\n\n /* Auto-scroll active line into view when it changes. */\n useLayoutEffect(() => {\n if (activeIndex < 0) return;\n const scroller = scrollRef.current;\n if (!scroller) return;\n const target = scroller.querySelector(\n `[data-line-index=\"${activeIndex}\"]`,\n ) as HTMLElement | null;\n if (!target) return;\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n target.scrollIntoView({\n block: 'center',\n behavior: prefersReducedMotion ? 'auto' : 'smooth',\n });\n }, [activeIndex]);\n\n const renderLine = useCallback(\n (\n line: TranscriptLine,\n index: number,\n extras?: {\n liRef?: (node: HTMLLIElement | null) => void;\n dataIndex?: number;\n // Style is an inline-style escape hatch — virtualizer offsets\n // cannot be expressed as static Tailwind. See 23-constraints §4.\n style?: CSSProperties;\n absolutePositioning?: boolean;\n },\n ) => {\n const isActive = index === activeIndex;\n const slot = speakerSlot(line.speaker);\n const lowConfidence =\n typeof line.confidence === 'number' && line.confidence < 0.6;\n return (\n <li\n key={index}\n ref={extras?.liRef}\n data-line-index={index}\n data-index={extras?.dataIndex}\n aria-current={isActive ? 'true' : undefined}\n // Inline style — permitted per 23-constraints\n // §Runtime-computed dimensions (virtualizer translateY).\n style={extras?.style}\n className={[\n 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n isActive\n ? 'ds:bg-[color:var(--accent)]/12 ds:border-s-[3px] ds:border-[color:var(--primary)]'\n : 'ds:border-s-[3px] ds:border-transparent',\n extras?.absolutePositioning\n ? 'ds:absolute ds:start-0 ds:end-0 ds:top-0 ds:w-full'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <button\n type=\"button\"\n onClick={() => onSeek?.(line.start)}\n aria-label={t('ui.chat.transcript.seekTo', {\n time: formatTime(line.start, i18n.language),\n })}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:font-[family-name:var(--font-mono)]',\n 'type-meta',\n 'ds:tabular-nums',\n 'ds:text-[color:var(--muted-foreground)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n // WCAG 2.5.5 target size: 44×44 default, 48×48 in accessible\n // themes — matches the DS `--min-target-size` token.\n 'ds:min-h-[var(--min-target-size)] ds:min-w-[var(--min-target-size)]',\n 'ds:hover:bg-muted/20',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n <time dir=\"ltr\" dateTime={secondsToIsoDuration(line.start)}>\n {formatTime(line.start, i18n.language)}\n </time>\n </button>\n <div className=\"ds:flex-1 ds:min-w-0\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span\n aria-hidden=\"true\"\n className={`ds:inline-block ds:size-2 ds:rounded-[var(--radius-full)] ${SPEAKER_BG_CLASSES[slot]}`}\n />\n <strong className=\"type-title-item\">\n {t('ui.chat.transcript.speaker', { name: line.speaker })}\n </strong>\n {lowConfidence ? (\n <span className=\"type-meta ds:italic ds:text-[color:var(--muted-foreground)]\">\n ({t('ui.chat.transcript.lowConfidence')})\n </span>\n ) : null}\n </div>\n <span\n dir=\"auto\"\n className={[\n 'ds:block',\n lowConfidence\n ? 'ds:underline ds:decoration-dotted ds:decoration-[color:var(--muted-foreground)]'\n : '',\n ].join(' ')}\n >\n <HighlightedText text={line.text} query={query} />\n </span>\n </div>\n </li>\n );\n },\n [activeIndex, i18n.language, onSeek, query, t],\n );\n\n return (\n <div\n ref={ref}\n onKeyDown={handleRootKeyDown}\n data-component=\"transcript-panel\"\n className={rootVariants({ size, className })}\n {...rest}\n >\n {searchable ? (\n <div className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-xs)] ds:flex ds:items-center ds:gap-[var(--spacing-sm)] ds:border-b ds:border-border\">\n <SearchInput\n ref={searchInputRef}\n id={searchId}\n placeholder={t('ui.chat.transcript.search')}\n aria-label={t('ui.chat.transcript.search')}\n aria-keyshortcuts=\"Meta+F Control+F\"\n debounceMs={150}\n onChange={(v) => setQuery(v)}\n size=\"sm\"\n />\n {query ? (\n <span\n role=\"status\"\n aria-live=\"polite\"\n className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\"\n >\n {matchCount === 0\n ? t('ui.chat.transcript.noMatches')\n : t('ui.chat.transcript.matchCount', { count: matchCount })}\n </span>\n ) : null}\n </div>\n ) : null}\n\n <div\n ref={scrollRef}\n className=\"ds:flex-1 ds:min-h-0 ds:overflow-y-auto ds:overflow-x-hidden\"\n >\n {virtualized ? (\n <ol\n className=\"ds:relative ds:list-none ds:ps-0 ds:m-0\"\n // Inline style — permitted per 23-constraints\n // §Runtime-computed dimensions (virtualizer total size).\n style={{ blockSize: `${virtualizer.getTotalSize()}px` }}\n >\n {virtualizer.getVirtualItems().map((vi) => {\n const line = lines[vi.index];\n if (!line) return null;\n // Put the measureElement ref on the <li> directly — a <div>\n // child of <ol> is invalid and breaks list semantics for\n // assistive tech.\n return renderLine(line, vi.index, {\n liRef: virtualizer.measureElement,\n dataIndex: vi.index,\n style: { transform: `translateY(${vi.start}px)` },\n absolutePositioning: true,\n });\n })}\n </ol>\n ) : (\n <ol className=\"ds:list-none ds:ps-0 ds:m-0\">\n {lines.map((line, index) => renderLine(line, index))}\n </ol>\n )}\n </div>\n </div>\n );\n },\n);\n\nTranscriptPanel.displayName = 'TranscriptPanel';\n"],"names":["rootVariants","cva","VIRTUALIZATION_THRESHOLD","SPEAKER_SLOT_COUNT","formatTime","seconds","locale","total","m","s","fmt","n","secondsToIsoDuration","speakerSlot","name","hash","i","SPEAKER_BG_CLASSES","escapeRegExp","input","HighlightedText","text","query","escaped","part","jsx","Fragment","TranscriptPanel","forwardRef","lines","currentTime","onSeek","searchable","size","className","rest","ref","t","i18n","useTranslation","setQuery","useState","scrollRef","useRef","searchInputRef","searchId","useId","activeIndex","useMemo","line","matchCount","count","needle","hay","idx","handleRootKeyDown","useCallback","_a","virtualized","virtualizer","useVirtualizer","useLayoutEffect","scroller","target","prefersReducedMotion","renderLine","index","extras","isActive","slot","lowConfidence","jsxs","SearchInput","v","vi"],"mappings":"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"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as r, isValidElement as c, cloneElement as p } from "react";
|
|
3
|
-
const m = "sr-only", N = r(
|
|
3
|
+
const m = "ds:sr-only", N = r(
|
|
4
4
|
({ asChild: t = !1, className: l, children: s, ...o }, n) => {
|
|
5
5
|
const a = l ? `${m} ${l}` : m;
|
|
6
6
|
if (t && c(s)) {
|
|
7
|
-
const e = s,
|
|
7
|
+
const e = s, d = e.props.className ? `${a} ${e.props.className}` : a;
|
|
8
8
|
return p(e, {
|
|
9
9
|
...o,
|
|
10
|
-
className:
|
|
10
|
+
className: d,
|
|
11
11
|
ref: n
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
return /* @__PURE__ */
|
|
14
|
+
return /* @__PURE__ */ i("span", { ref: n, className: a, "data-component": "visually-hidden", ...o, children: s });
|
|
15
15
|
}
|
|
16
16
|
);
|
|
17
17
|
N.displayName = "VisuallyHidden";
|
|
18
18
|
export {
|
|
19
19
|
N as V
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=visually-hidden-
|
|
21
|
+
//# sourceMappingURL=visually-hidden-Bw7vBHLm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visually-hidden-
|
|
1
|
+
{"version":3,"file":"visually-hidden-Bw7vBHLm.js","sources":["../../src/components/visually-hidden/visually-hidden.tsx"],"sourcesContent":["import {\n forwardRef,\n cloneElement,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type Ref,\n} from 'react';\n\n/**\n * VisuallyHidden — renders content that is invisible to sighted users but\n * available to assistive technology (screen readers).\n *\n * Implementation note (constraint §2 + §4):\n * We use Tailwind's built-in `sr-only` utility, which compiles to the\n * canonical visually-hidden recipe:\n * position: absolute;\n * width: 1px; height: 1px;\n * padding: 0; margin: -1px;\n * overflow: hidden;\n * clip: rect(0, 0, 0, 0);\n * white-space: nowrap;\n * border-width: 0;\n * This keeps the element in the accessibility tree (unlike `display: none`\n * or `aria-hidden`) while removing it from the visual layout. No tokens are\n * relevant here — there are no colours, spacing, or typography choices to\n * make. We deliberately avoid hand-rolling the CSS so we stay aligned with\n * Tailwind's vetted recipe.\n *\n * The `asChild` prop (Radix Slot–style) clones the single child element and\n * merges the `sr-only` class onto it, letting consumers preserve the child's\n * own DOM type (e.g. `<a>` for skip-links) without an extra wrapper element.\n */\n\ntype ChildWithClassName = ReactElement<{\n className?: string;\n ref?: Ref<unknown>;\n}>;\n\nexport interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * When true, merges the visually-hidden class onto the single child element\n * rather than wrapping it in a `<span>`. The child must accept `className`\n * and `ref`.\n */\n asChild?: boolean;\n}\n\nconst VISUALLY_HIDDEN_CLASS = 'ds:sr-only';\n\nexport const VisuallyHidden = forwardRef<HTMLSpanElement, VisuallyHiddenProps>(\n ({ asChild = false, className, children, ...rest }, ref) => {\n const merged = className\n ? `${VISUALLY_HIDDEN_CLASS} ${className}`\n : VISUALLY_HIDDEN_CLASS;\n\n if (asChild && isValidElement(children)) {\n const child = children as ChildWithClassName;\n const childClassName = child.props.className\n ? `${merged} ${child.props.className}`\n : merged;\n return cloneElement(child, {\n ...rest,\n className: childClassName,\n ref,\n });\n }\n\n return (\n <span ref={ref} className={merged} data-component=\"visually-hidden\" {...rest}>\n {children}\n </span>\n );\n },\n);\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n"],"names":["VISUALLY_HIDDEN_CLASS","VisuallyHidden","forwardRef","asChild","className","children","rest","ref","merged","isValidElement","child","childClassName","cloneElement","jsx"],"mappings":";;AAgDA,MAAMA,IAAwB,cAEjBC,IAAiBC;AAAA,EAC5B,CAAC,EAAE,SAAAC,IAAU,IAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GAAQC,MAAQ;AAC1D,UAAMC,IAASJ,IACX,GAAGJ,CAAqB,IAAII,CAAS,KACrCJ;AAEJ,QAAIG,KAAWM,EAAeJ,CAAQ,GAAG;AACvC,YAAMK,IAAQL,GACRM,IAAiBD,EAAM,MAAM,YAC/B,GAAGF,CAAM,IAAIE,EAAM,MAAM,SAAS,KAClCF;AACJ,aAAOI,EAAaF,GAAO;AAAA,QACzB,GAAGJ;AAAA,QACH,WAAWK;AAAA,QACX,KAAAJ;AAAA,MAAA,CACD;AAAA,IACH;AAEA,WACE,gBAAAM,EAAC,UAAK,KAAAN,GAAU,WAAWC,GAAQ,kBAAe,mBAAmB,GAAGF,GACrE,UAAAD,EAAA,CACH;AAAA,EAEJ;AACF;AAEAJ,EAAe,cAAc;"}
|
|
@@ -2,8 +2,8 @@ import { jsxs as l, jsx as a } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as M, useId as N, useState as O, useRef as y, useEffect as V, useMemo as _, useCallback as j } from "react";
|
|
3
3
|
import { c as W } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as q } from "react-i18next";
|
|
5
|
-
import { A as u } from "./alert-
|
|
6
|
-
import { B as F } from "./button-
|
|
5
|
+
import { A as u } from "./alert-BlOUMkXj.js";
|
|
6
|
+
import { B as F } from "./button-7mLWcMp_.js";
|
|
7
7
|
import { C as H } from "./chevron-down-BX_NP2Yh.js";
|
|
8
8
|
const L = W(
|
|
9
9
|
[
|
|
@@ -41,7 +41,7 @@ const L = W(
|
|
|
41
41
|
},
|
|
42
42
|
defaultVariants: { size: "md" }
|
|
43
43
|
}), K = [
|
|
44
|
-
"inline-flex items-center gap-[var(--spacing-xs)] self-start"
|
|
44
|
+
"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:self-start"
|
|
45
45
|
].join(" "), P = M(
|
|
46
46
|
({
|
|
47
47
|
items: r,
|
|
@@ -57,37 +57,37 @@ const L = W(
|
|
|
57
57
|
className: w,
|
|
58
58
|
...x
|
|
59
59
|
}, k) => {
|
|
60
|
-
const { t:
|
|
60
|
+
const { t: e } = q(), d = N(), b = N(), c = t !== void 0 && r.length > t, [o, B] = O(z), f = y(null), S = y(r.length);
|
|
61
61
|
V(() => {
|
|
62
62
|
if (!f.current) return;
|
|
63
|
-
const n = S.current,
|
|
64
|
-
n !==
|
|
65
|
-
count:
|
|
63
|
+
const n = S.current, s = r.length;
|
|
64
|
+
n !== s && (f.current.textContent = e("ui.warningStack.countChanged", {
|
|
65
|
+
count: s,
|
|
66
66
|
defaultValue: "{{count}} warnings to review"
|
|
67
|
-
})), S.current =
|
|
68
|
-
}, [r.length,
|
|
69
|
-
const R = _(() => !
|
|
70
|
-
(n) => (
|
|
71
|
-
|
|
67
|
+
})), S.current = s;
|
|
68
|
+
}, [r.length, e]);
|
|
69
|
+
const R = _(() => !c || !o ? r : r.slice(0, t), [r, c, o, t]), E = c ? r.length - (t ?? 0) : 0, I = j(
|
|
70
|
+
(n) => (s) => {
|
|
71
|
+
s || i == null || i(n);
|
|
72
72
|
},
|
|
73
73
|
[i]
|
|
74
|
-
), T = j(() => B((n) => !n), []), G = A ??
|
|
74
|
+
), T = j(() => B((n) => !n), []), G = A ?? e("ui.warningStack.regionLabel", "Warnings"), C = h ? /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-3xs)]", children: [
|
|
75
75
|
/* @__PURE__ */ a(
|
|
76
76
|
"h2",
|
|
77
77
|
{
|
|
78
|
-
id:
|
|
78
|
+
id: d,
|
|
79
79
|
className: "ds:text-start type-title-section ds:text-[var(--foreground)]",
|
|
80
80
|
children: h
|
|
81
81
|
}
|
|
82
82
|
),
|
|
83
83
|
p ? /* @__PURE__ */ a("p", { className: "ds:text-start type-body-sm ds:text-[var(--muted-foreground)]", children: p }) : null
|
|
84
|
-
] }) : /* @__PURE__ */ a("h2", { id:
|
|
84
|
+
] }) : /* @__PURE__ */ a("h2", { id: d, className: "ds:sr-only", children: G });
|
|
85
85
|
return r.length === 0 ? m ? /* @__PURE__ */ l(
|
|
86
86
|
"section",
|
|
87
87
|
{
|
|
88
88
|
ref: k,
|
|
89
89
|
role: "region",
|
|
90
|
-
"aria-labelledby":
|
|
90
|
+
"aria-labelledby": d,
|
|
91
91
|
"data-component": "warning-stack",
|
|
92
92
|
className: [L({ size: g, stretch: v }), w].filter(Boolean).join(" "),
|
|
93
93
|
...x,
|
|
@@ -101,7 +101,7 @@ const L = W(
|
|
|
101
101
|
{
|
|
102
102
|
ref: k,
|
|
103
103
|
role: "region",
|
|
104
|
-
"aria-labelledby":
|
|
104
|
+
"aria-labelledby": d,
|
|
105
105
|
"data-component": "warning-stack",
|
|
106
106
|
className: [L({ size: g, stretch: v }), w].filter(Boolean).join(" "),
|
|
107
107
|
...x,
|
|
@@ -121,13 +121,13 @@ const L = W(
|
|
|
121
121
|
{
|
|
122
122
|
id: b,
|
|
123
123
|
className: J({ size: g }),
|
|
124
|
-
"aria-label":
|
|
124
|
+
"aria-label": e("ui.warningStack.listLabel", "Warning list"),
|
|
125
125
|
children: R.map((n) => {
|
|
126
|
-
const
|
|
126
|
+
const s = n.variant ?? "warning";
|
|
127
127
|
return /* @__PURE__ */ a("li", { children: /* @__PURE__ */ l(
|
|
128
128
|
u,
|
|
129
129
|
{
|
|
130
|
-
variant:
|
|
130
|
+
variant: s,
|
|
131
131
|
dismissible: n.dismissible,
|
|
132
132
|
icon: n.icon,
|
|
133
133
|
onOpenChange: I(n),
|
|
@@ -141,7 +141,7 @@ const L = W(
|
|
|
141
141
|
})
|
|
142
142
|
}
|
|
143
143
|
),
|
|
144
|
-
|
|
144
|
+
c ? /* @__PURE__ */ l(
|
|
145
145
|
F,
|
|
146
146
|
{
|
|
147
147
|
type: "button",
|
|
@@ -162,10 +162,10 @@ const L = W(
|
|
|
162
162
|
].join(" ")
|
|
163
163
|
}
|
|
164
164
|
),
|
|
165
|
-
o ?
|
|
165
|
+
o ? e("ui.warningStack.showMore", {
|
|
166
166
|
count: E,
|
|
167
167
|
defaultValue: "Show {{count}} more warnings"
|
|
168
|
-
}) :
|
|
168
|
+
}) : e("ui.warningStack.showLess", "Show less")
|
|
169
169
|
]
|
|
170
170
|
}
|
|
171
171
|
) : null
|
|
@@ -178,4 +178,4 @@ P.displayName = "WarningStack";
|
|
|
178
178
|
export {
|
|
179
179
|
P as W
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=warning-stack-
|
|
181
|
+
//# sourceMappingURL=warning-stack-8Pa3pekh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warning-stack-8Pa3pekh.js","sources":["../../src/components/warning-stack/warning-stack.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport { Alert, type AlertProps } from '../alert/alert';\nimport { Button } from '../button/button';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface WarningStackItem {\n id: string;\n variant?: AlertProps['variant'];\n title: ReactNode;\n description?: ReactNode;\n icon?: ReactNode;\n actions?: ReactNode;\n dismissible?: boolean;\n}\n\nconst stackVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:shadow-[var(--shadow-card)]',\n 'ds:p-[var(--spacing-md)]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:gap-[var(--spacing-sm)]',\n md: 'ds:gap-[var(--spacing-md)]',\n },\n // `stretch: true` fills the parent layout cell — mirrors the `stretch`\n // prop on `Card` so a WarningStack rendered next to a Card in a grid\n // row ends up at matching height.\n stretch: {\n true: 'ds:h-full ds:self-stretch',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n stretch: false,\n },\n },\n);\n\nconst listVariants = cva('ds:flex ds:flex-col', {\n variants: {\n size: {\n sm: 'ds:gap-[var(--spacing-sm)]',\n md: 'ds:gap-[var(--spacing-md)]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst TOGGLE_CLASSES = [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:self-start',\n].join(' ');\n\nexport interface WarningStackProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'role' | 'title'>,\n VariantProps<typeof stackVariants> {\n /** Items rendered inside the stack. */\n items: WarningStackItem[];\n /** Fill the parent layout cell — use in a dashboard grid row so the\n * stack ends up with matching height to sibling Cards. */\n stretch?: boolean;\n /** Visible title rendered as an `<h2>` above the stack. Also labels the\n * region for assistive tech. When omitted, the region is labelled via a\n * visually hidden heading using `ariaLabel` (or the default \"Warnings\"). */\n title?: ReactNode;\n /** Optional short description rendered under the title. */\n description?: ReactNode;\n /** Cap on visible items before a \"Show N more\" toggle appears. */\n maxVisible?: number;\n /** Whether the stack starts collapsed when items exceed `maxVisible`. */\n defaultCollapsed?: boolean;\n /** Fires when a dismissible item's close control is activated. */\n onDismiss?: (item: WarningStackItem) => void;\n /** Accessible label for the region when `title` is not set. */\n ariaLabel?: string;\n /** Optional node rendered when the stack has zero items. */\n emptyState?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const WarningStack = forwardRef<HTMLDivElement, WarningStackProps>(\n (\n {\n items,\n title,\n description,\n maxVisible,\n defaultCollapsed = true,\n onDismiss,\n size = 'md',\n stretch = false,\n ariaLabel,\n emptyState,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const labelId = useId();\n const listId = useId();\n\n const overflow = maxVisible !== undefined && items.length > maxVisible;\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n // Live-region announces the count when items change.\n const liveRef = useRef<HTMLDivElement>(null);\n const lastCountRef = useRef<number>(items.length);\n\n useEffect(() => {\n if (!liveRef.current) return;\n const prev = lastCountRef.current;\n const next = items.length;\n if (prev !== next) {\n liveRef.current.textContent = t('ui.warningStack.countChanged', {\n count: next,\n defaultValue: '{{count}} warnings to review',\n });\n }\n lastCountRef.current = next;\n }, [items.length, t]);\n\n const visible = useMemo(() => {\n if (!overflow || !collapsed) return items;\n return items.slice(0, maxVisible);\n }, [items, overflow, collapsed, maxVisible]);\n\n const hiddenCount = overflow ? items.length - (maxVisible ?? 0) : 0;\n\n const handleDismiss = useCallback(\n (item: WarningStackItem) => (open: boolean) => {\n if (!open) onDismiss?.(item);\n },\n [onDismiss],\n );\n\n const toggle = useCallback(() => setCollapsed((c) => !c), []);\n\n const regionLabel = ariaLabel ?? t('ui.warningStack.regionLabel', 'Warnings');\n\n // Title block: a visible header when `title` is provided; otherwise a\n // visually hidden heading so the region still has a programmatic name.\n // A `<div>` rather than `<header>` wrapper keeps the `<header>` element's\n // implicit banner role from leaking out of the region.\n const header = title ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-3xs)]\">\n <h2\n id={labelId}\n className=\"ds:text-start type-title-section ds:text-[var(--foreground)]\"\n >\n {title}\n </h2>\n {description ? (\n <p className=\"ds:text-start type-body-sm ds:text-[var(--muted-foreground)]\">\n {description}\n </p>\n ) : null}\n </div>\n ) : (\n <h2 id={labelId} className=\"ds:sr-only\">\n {regionLabel}\n </h2>\n );\n\n if (items.length === 0) {\n if (!emptyState) return null;\n return (\n <section\n ref={ref}\n role=\"region\"\n aria-labelledby={labelId}\n data-component=\"warning-stack\"\n className={[stackVariants({ size, stretch }), className].filter(Boolean).join(' ')}\n {...rest}\n >\n {header}\n {emptyState}\n </section>\n );\n }\n\n return (\n <section\n ref={ref}\n role=\"region\"\n aria-labelledby={labelId}\n data-component=\"warning-stack\"\n className={[stackVariants({ size, stretch }), className].filter(Boolean).join(' ')}\n {...rest}\n >\n {header}\n <div\n ref={liveRef}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n />\n <ul\n id={listId}\n className={listVariants({ size })}\n aria-label={t('ui.warningStack.listLabel', 'Warning list')}\n >\n {visible.map((item) => {\n const variant = item.variant ?? 'warning';\n return (\n <li key={item.id}>\n <Alert\n variant={variant}\n dismissible={item.dismissible}\n icon={item.icon}\n onOpenChange={handleDismiss(item)}\n >\n {/* `as=\"h3\"` keeps a clean heading ladder — the stack's\n h2 labels the region, then each item's h3 rises from it. */}\n <Alert.Title as=\"h3\">{item.title}</Alert.Title>\n {item.description ? (\n <Alert.Description>{item.description}</Alert.Description>\n ) : null}\n {item.actions ? <Alert.Action>{item.actions}</Alert.Action> : null}\n </Alert>\n </li>\n );\n })}\n </ul>\n\n {overflow ? (\n <Button\n type=\"button\"\n intent=\"link\"\n size=\"sm\"\n aria-expanded={!collapsed}\n aria-controls={listId}\n onClick={toggle}\n className={TOGGLE_CLASSES}\n >\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n 'ds:size-4 ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n collapsed ? '' : 'ds:rotate-180',\n ].join(' ')}\n />\n {collapsed\n ? t('ui.warningStack.showMore', {\n count: hiddenCount,\n defaultValue: 'Show {{count}} more warnings',\n })\n : t('ui.warningStack.showLess', 'Show less')}\n </Button>\n ) : null}\n </section>\n );\n },\n);\n\nWarningStack.displayName = 'WarningStack';\n"],"names":["stackVariants","cva","listVariants","TOGGLE_CLASSES","WarningStack","forwardRef","items","title","description","maxVisible","defaultCollapsed","onDismiss","size","stretch","ariaLabel","emptyState","className","rest","ref","t","useTranslation","labelId","useId","listId","overflow","collapsed","setCollapsed","useState","liveRef","useRef","lastCountRef","useEffect","prev","next","visible","useMemo","hiddenCount","handleDismiss","useCallback","item","open","toggle","c","regionLabel","header","jsxs","jsx","variant","Alert","Button","ChevronDown"],"mappings":"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"}
|