@alfadocs/ui-kit 0.1.2 → 0.1.4
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/{accordion-BJD1aM67.js → accordion-B6fyINUk.js} +10 -9
- package/dist/_chunks/accordion-B6fyINUk.js.map +1 -0
- package/dist/_chunks/{agenda-card-DXOgg8IX.js → agenda-card-C_hQGErS.js} +12 -11
- package/dist/_chunks/{agenda-card-DXOgg8IX.js.map → agenda-card-C_hQGErS.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-DEO8XL8V.js → agenda-tray-CBaVMJLO.js} +6 -5
- package/dist/_chunks/{agenda-tray-DEO8XL8V.js.map → agenda-tray-CBaVMJLO.js.map} +1 -1
- package/dist/_chunks/{ai-prompt-input-8IShJ-GX.js → ai-prompt-input-K94oVLG2.js} +17 -16
- package/dist/_chunks/ai-prompt-input-K94oVLG2.js.map +1 -0
- package/dist/_chunks/{alert-ETrF7Q8J.js → alert-rOM4EG0P.js} +12 -11
- package/dist/_chunks/{alert-ETrF7Q8J.js.map → alert-rOM4EG0P.js.map} +1 -1
- package/dist/_chunks/{app-frame-uq2Gy0vs.js → app-frame-6d7Lu4ea.js} +2 -1
- package/dist/_chunks/{app-frame-uq2Gy0vs.js.map → app-frame-6d7Lu4ea.js.map} +1 -1
- package/dist/_chunks/{aspect-ratio-BqU4itGW.js → aspect-ratio-CxsdG8vk.js} +9 -8
- package/dist/_chunks/{aspect-ratio-BqU4itGW.js.map → aspect-ratio-CxsdG8vk.js.map} +1 -1
- package/dist/_chunks/{audio-recorder-BvisG0Wt.js → audio-recorder-Cn8z2zC9.js} +6 -5
- package/dist/_chunks/{audio-recorder-BvisG0Wt.js.map → audio-recorder-Cn8z2zC9.js.map} +1 -1
- package/dist/_chunks/{audio-visualiser-B4u4goV5.js → audio-visualiser-CeMPCZkd.js} +2 -1
- package/dist/_chunks/{audio-visualiser-B4u4goV5.js.map → audio-visualiser-CeMPCZkd.js.map} +1 -1
- package/dist/_chunks/{autocomplete.agent-BmrpzsfW.js → autocomplete.agent-DRrp-Rsx.js} +3 -2
- package/dist/_chunks/{autocomplete.agent-BmrpzsfW.js.map → autocomplete.agent-DRrp-Rsx.js.map} +1 -1
- package/dist/_chunks/{avatar-DTQY5qIZ.js → avatar-Biffh-_H.js} +2 -1
- package/dist/_chunks/{avatar-DTQY5qIZ.js.map → avatar-Biffh-_H.js.map} +1 -1
- package/dist/_chunks/{badge-BbbBRweN.js → badge-mrstWxve.js} +14 -13
- package/dist/_chunks/{badge-BbbBRweN.js.map → badge-mrstWxve.js.map} +1 -1
- package/dist/_chunks/{balance-cell-renderer-DjR0rPS6.js → balance-cell-renderer-CiyezQhi.js} +11 -11
- package/dist/_chunks/{balance-cell-renderer-DjR0rPS6.js.map → balance-cell-renderer-CiyezQhi.js.map} +1 -1
- package/dist/_chunks/{breadcrumb-pdUacgm1.js → breadcrumb-CcZovmIq.js} +2 -1
- package/dist/_chunks/breadcrumb-CcZovmIq.js.map +1 -0
- package/dist/_chunks/{button-group-BtTHSyU0.js → button-group-CONver7M.js} +9 -8
- package/dist/_chunks/{button-group-BtTHSyU0.js.map → button-group-CONver7M.js.map} +1 -1
- package/dist/_chunks/{card-DeItIBcV.js → card-BEy58ZKp.js} +2 -1
- package/dist/_chunks/card-BEy58ZKp.js.map +1 -0
- package/dist/_chunks/{chat-container-ChdJTH0J.js → chat-container-BZvQ3_yT.js} +2 -2
- package/dist/_chunks/{chat-container-ChdJTH0J.js.map → chat-container-BZvQ3_yT.js.map} +1 -1
- package/dist/_chunks/{chat-input-C-B4snVJ.js → chat-input-xiBIujMv.js} +3 -3
- package/dist/_chunks/chat-input-xiBIujMv.js.map +1 -0
- package/dist/_chunks/{chat-message-cFNbQYRH.js → chat-message-BtxUyugB.js} +9 -8
- package/dist/_chunks/chat-message-BtxUyugB.js.map +1 -0
- package/dist/_chunks/{checkbox-DMzgtnqw.js → checkbox-Ni6C_KJg.js} +11 -11
- package/dist/_chunks/{checkbox-DMzgtnqw.js.map → checkbox-Ni6C_KJg.js.map} +1 -1
- package/dist/_chunks/{checkbox-group-DBnIBRT_.js → checkbox-group-BFZ4oN5t.js} +8 -7
- package/dist/_chunks/checkbox-group-BFZ4oN5t.js.map +1 -0
- package/dist/_chunks/{collapsible-DPGQnHZh.js → collapsible-fFMqzpdL.js} +8 -7
- package/dist/_chunks/collapsible-fFMqzpdL.js.map +1 -0
- package/dist/_chunks/{color-picker-DkMFcK2m.js → color-picker-Cl3KdjJd.js} +18 -16
- package/dist/_chunks/{color-picker-DkMFcK2m.js.map → color-picker-Cl3KdjJd.js.map} +1 -1
- package/dist/_chunks/{combobox.agent-9w6W1Jct.js → combobox.agent-DjdivI3X.js} +2 -1
- package/dist/_chunks/combobox.agent-DjdivI3X.js.map +1 -0
- package/dist/_chunks/{command-palette.agent-Dg7jhOIc.js → command-palette.agent-BUjzr2ET.js} +2 -1
- package/dist/_chunks/command-palette.agent-BUjzr2ET.js.map +1 -0
- package/dist/_chunks/{date-picker-0WQ98ZC0.js → date-picker-DYXNsWmM.js} +2 -2
- package/dist/_chunks/{date-picker-0WQ98ZC0.js.map → date-picker-DYXNsWmM.js.map} +1 -1
- package/dist/_chunks/{date-range-picker-CtwEwoyr.js → date-range-picker-BcNDJI7m.js} +2 -2
- package/dist/_chunks/date-range-picker-BcNDJI7m.js.map +1 -0
- package/dist/_chunks/{date-time-picker-Df3OJ2_C.js → date-time-picker-CmGiTU__.js} +3 -3
- package/dist/_chunks/{date-time-picker-Df3OJ2_C.js.map → date-time-picker-CmGiTU__.js.map} +1 -1
- package/dist/_chunks/{description-list-Bk3p71qY.js → description-list-C_1NX8P3.js} +3 -2
- package/dist/_chunks/description-list-C_1NX8P3.js.map +1 -0
- package/dist/_chunks/{dialog.agent-CtMkDinJ.js → dialog.agent-C2lP9H0h.js} +2 -2
- package/dist/_chunks/{dialog.agent-CtMkDinJ.js.map → dialog.agent-C2lP9H0h.js.map} +1 -1
- package/dist/_chunks/{dropdown-menu-BnVUeVG3.js → dropdown-menu-2HgU1Emf.js} +4 -3
- package/dist/_chunks/dropdown-menu-2HgU1Emf.js.map +1 -0
- package/dist/_chunks/{empty-state-DPUnQp0A.js → empty-state-BHrItOiE.js} +2 -1
- package/dist/_chunks/{empty-state-DPUnQp0A.js.map → empty-state-BHrItOiE.js.map} +1 -1
- package/dist/_chunks/{file-upload.agent-DVMxMeDA.js → file-upload.agent-LlC0W468.js} +2 -2
- package/dist/_chunks/{file-upload.agent-DVMxMeDA.js.map → file-upload.agent-LlC0W468.js.map} +1 -1
- package/dist/_chunks/{flag-C3BUEwHH.js → flag-DZ6V7-hU.js} +3 -1
- package/dist/_chunks/{flag-C3BUEwHH.js.map → flag-DZ6V7-hU.js.map} +1 -1
- package/dist/_chunks/{floating-action-button-DjRhFQdd.js → floating-action-button-Cnw-f6AG.js} +5 -4
- package/dist/_chunks/{floating-action-button-DjRhFQdd.js.map → floating-action-button-Cnw-f6AG.js.map} +1 -1
- package/dist/_chunks/{form-field-DI5LY5aG.js → form-field-BfsPLTSc.js} +2 -1
- package/dist/_chunks/form-field-BfsPLTSc.js.map +1 -0
- package/dist/_chunks/{freemium-paywall-CCsX3GhK.js → freemium-paywall-Dr9aOtOC.js} +23 -22
- package/dist/_chunks/freemium-paywall-Dr9aOtOC.js.map +1 -0
- package/dist/_chunks/{header-CVQxeLc_.js → header-BpU9U-1X.js} +3 -2
- package/dist/_chunks/{header-CVQxeLc_.js.map → header-BpU9U-1X.js.map} +1 -1
- package/dist/_chunks/{icon-button-SWpSs9S6.js → icon-button-CNjWCD1X.js} +9 -8
- package/dist/_chunks/icon-button-CNjWCD1X.js.map +1 -0
- package/dist/_chunks/{icon-button-group-BnhkUWUg.js → icon-button-group-DeV3FpNY.js} +26 -25
- package/dist/_chunks/{icon-button-group-BnhkUWUg.js.map → icon-button-group-DeV3FpNY.js.map} +1 -1
- package/dist/_chunks/{kbd-DTcIjYA7.js → kbd-8baVw3KU.js} +35 -31
- package/dist/_chunks/kbd-8baVw3KU.js.map +1 -0
- package/dist/_chunks/{key-value-pair-Cm-pSE6k.js → key-value-pair-C9hpjC_B.js} +13 -12
- package/dist/_chunks/{key-value-pair-Cm-pSE6k.js.map → key-value-pair-C9hpjC_B.js.map} +1 -1
- package/dist/_chunks/{leo-sidebar-SqGAp1vx.js → leo-sidebar-CNjZqljo.js} +11 -11
- package/dist/_chunks/{leo-sidebar-SqGAp1vx.js.map → leo-sidebar-CNjZqljo.js.map} +1 -1
- package/dist/_chunks/{list-Cwe8mcmh.js → list-B1ozIjQe.js} +4 -1
- package/dist/_chunks/list-B1ozIjQe.js.map +1 -0
- package/dist/_chunks/live-region-C41SO3cA.js +58 -0
- package/dist/_chunks/{live-region-COggO6x6.js.map → live-region-C41SO3cA.js.map} +1 -1
- package/dist/_chunks/{logo-3wrZGpwg.js → logo-BpFoCL-s.js} +7 -7
- package/dist/_chunks/{logo-3wrZGpwg.js.map → logo-BpFoCL-s.js.map} +1 -1
- package/dist/_chunks/{matrix-rain-gsHqSvW7.js → matrix-rain-BEkvux64.js} +2 -1
- package/dist/_chunks/{matrix-rain-gsHqSvW7.js.map → matrix-rain-BEkvux64.js.map} +1 -1
- package/dist/_chunks/{message-card-B0oGrI3i.js → message-card-CZzNO4ov.js} +5 -4
- package/dist/_chunks/message-card-CZzNO4ov.js.map +1 -0
- package/dist/_chunks/{message-tray-DZ6oZ0cs.js → message-tray-BWbjXW3F.js} +6 -5
- package/dist/_chunks/message-tray-BWbjXW3F.js.map +1 -0
- package/dist/_chunks/{multi-select.agent-BDEVGMmW.js → multi-select.agent-BSGEW10d.js} +19 -18
- package/dist/_chunks/multi-select.agent-BSGEW10d.js.map +1 -0
- package/dist/_chunks/{navigation-menu-NjwxyshT.js → navigation-menu-DxOMvrKM.js} +2 -1
- package/dist/_chunks/navigation-menu-DxOMvrKM.js.map +1 -0
- package/dist/_chunks/{notification-card-C73GqjHH.js → notification-card-DgW-vVg-.js} +4 -3
- package/dist/_chunks/{notification-card-C73GqjHH.js.map → notification-card-DgW-vVg-.js.map} +1 -1
- package/dist/_chunks/{notification-tray-a8a_nut-.js → notification-tray-CKUgl2jc.js} +6 -5
- package/dist/_chunks/{notification-tray-a8a_nut-.js.map → notification-tray-CKUgl2jc.js.map} +1 -1
- package/dist/_chunks/{number-input-DFQtl5K2.js → number-input-BPPhekLu.js} +16 -15
- package/dist/_chunks/{number-input-DFQtl5K2.js.map → number-input-BPPhekLu.js.map} +1 -1
- package/dist/_chunks/{otp-input-C2FdizHh.js → otp-input-De5_Ih7B.js} +2 -1
- package/dist/_chunks/{otp-input-C2FdizHh.js.map → otp-input-De5_Ih7B.js.map} +1 -1
- package/dist/_chunks/{pagination.agent-sxokDphY.js → pagination.agent-CmA0Ocr5.js} +2 -1
- package/dist/_chunks/pagination.agent-CmA0Ocr5.js.map +1 -0
- package/dist/_chunks/{password-input-C6PvKyQV.js → password-input-DAT5HQth.js} +7 -7
- package/dist/_chunks/password-input-DAT5HQth.js.map +1 -0
- package/dist/_chunks/{patient-shell-B4vKnuOf.js → patient-shell-BzHhg6uA.js} +9 -9
- package/dist/_chunks/{patient-shell-B4vKnuOf.js.map → patient-shell-BzHhg6uA.js.map} +1 -1
- package/dist/_chunks/{payment-form-175AzK-1.js → payment-form-YlxrCpZQ.js} +3 -3
- package/dist/_chunks/{payment-form-175AzK-1.js.map → payment-form-YlxrCpZQ.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer.agent-DuGfSoep.js → pdf-viewer.agent-sMned5Xn.js} +3 -3
- package/dist/_chunks/{pdf-viewer.agent-DuGfSoep.js.map → pdf-viewer.agent-sMned5Xn.js.map} +1 -1
- package/dist/_chunks/{phone-input-BavVyXxZ.js → phone-input-BuRe5PyI.js} +3 -2
- package/dist/_chunks/phone-input-BuRe5PyI.js.map +1 -0
- package/dist/_chunks/{popover-BWgOopjI.js → popover-Ds1iOdiv.js} +3 -2
- package/dist/_chunks/popover-Ds1iOdiv.js.map +1 -0
- package/dist/_chunks/{privacy-lock-DWL7m_VT.js → privacy-lock-up2ervfF.js} +41 -39
- package/dist/_chunks/privacy-lock-up2ervfF.js.map +1 -0
- package/dist/_chunks/{radio-B_gvGU29.js → radio-XSSNX3Af.js} +8 -7
- package/dist/_chunks/radio-XSSNX3Af.js.map +1 -0
- package/dist/_chunks/{radio-group-Bn8Wt0yc.js → radio-group-DBrUOPcy.js} +19 -18
- package/dist/_chunks/radio-group-DBrUOPcy.js.map +1 -0
- package/dist/_chunks/{scroll-area-Ba99pJ_R.js → scroll-area-HIq0hJyJ.js} +14 -12
- package/dist/_chunks/scroll-area-HIq0hJyJ.js.map +1 -0
- package/dist/_chunks/{search-bar-VoTqJhRp.js → search-bar-9Zbew4yM.js} +4 -3
- package/dist/_chunks/search-bar-9Zbew4yM.js.map +1 -0
- package/dist/_chunks/{search-input-D6rarD0_.js → search-input-CtkWITO2.js} +28 -28
- package/dist/_chunks/{search-input-D6rarD0_.js.map → search-input-CtkWITO2.js.map} +1 -1
- package/dist/_chunks/{select-CQxhOXVE.js → select-DdAOtomN.js} +18 -17
- package/dist/_chunks/select-DdAOtomN.js.map +1 -0
- package/dist/_chunks/{separator-BRQHi8s0.js → separator-B4wXDLNC.js} +9 -8
- package/dist/_chunks/{separator-BRQHi8s0.js.map → separator-B4wXDLNC.js.map} +1 -1
- package/dist/_chunks/{sheet-CKsuHuHB.js → sheet-D7GRhnWw.js} +3 -2
- package/dist/_chunks/sheet-D7GRhnWw.js.map +1 -0
- package/dist/_chunks/{sidebar-CiEpSH9e.js → sidebar-Dc2ffrbf.js} +4 -3
- package/dist/_chunks/sidebar-Dc2ffrbf.js.map +1 -0
- package/dist/_chunks/sign-in-with-alfadocs-button-BotwPDcW.js +45 -0
- package/dist/_chunks/{sign-in-with-alfadocs-button-BDErAgG2.js.map → sign-in-with-alfadocs-button-BotwPDcW.js.map} +1 -1
- package/dist/_chunks/{skeleton-ClO1v5GE.js → skeleton-DAdPFx9d.js} +18 -16
- package/dist/_chunks/{skeleton-ClO1v5GE.js.map → skeleton-DAdPFx9d.js.map} +1 -1
- package/dist/_chunks/{skip-link-CASJkBOe.js → skip-link-DmZ3c6cb.js} +12 -11
- package/dist/_chunks/{skip-link-CASJkBOe.js.map → skip-link-DmZ3c6cb.js.map} +1 -1
- package/dist/_chunks/{slider-BVBlOW_l.js → slider-DjyRt3Mp.js} +2 -1
- package/dist/_chunks/slider-DjyRt3Mp.js.map +1 -0
- package/dist/_chunks/{slot-grid-B4WvLEwT.js → slot-grid-WHc5A8-z.js} +5 -4
- package/dist/_chunks/{slot-grid-B4WvLEwT.js.map → slot-grid-WHc5A8-z.js.map} +1 -1
- package/dist/_chunks/{spinner-CoAOGcDa.js → spinner-GCcv67vh.js} +2 -1
- package/dist/_chunks/spinner-GCcv67vh.js.map +1 -0
- package/dist/_chunks/{stat-D76MNHzK.js → stat-DUB6g90R.js} +3 -1
- package/dist/_chunks/{stat-D76MNHzK.js.map → stat-DUB6g90R.js.map} +1 -1
- package/dist/_chunks/{stepper-accordion-DHQ80A4v.js → stepper-accordion-2_7Pw0tC.js} +2 -1
- package/dist/_chunks/{stepper-accordion-DHQ80A4v.js.map → stepper-accordion-2_7Pw0tC.js.map} +1 -1
- package/dist/_chunks/{stepper-calendar-BZUJpj8i.js → stepper-calendar-CWZcFgt_.js} +7 -6
- package/dist/_chunks/{stepper-calendar-BZUJpj8i.js.map → stepper-calendar-CWZcFgt_.js.map} +1 -1
- package/dist/_chunks/{stepper-progress-DMZ5w5VR.js → stepper-progress-rE7tn7WY.js} +12 -11
- package/dist/_chunks/{stepper-progress-DMZ5w5VR.js.map → stepper-progress-rE7tn7WY.js.map} +1 -1
- package/dist/_chunks/{streaming-text-D0cW8pwq.js → streaming-text-BgjCTVOw.js} +6 -5
- package/dist/_chunks/{streaming-text-D0cW8pwq.js.map → streaming-text-BgjCTVOw.js.map} +1 -1
- package/dist/_chunks/{suggestion-chip-BgNFpPEE.js → suggestion-chip-6AB40rxz.js} +2 -1
- package/dist/_chunks/{suggestion-chip-BgNFpPEE.js.map → suggestion-chip-6AB40rxz.js.map} +1 -1
- package/dist/_chunks/{switch-DtLPKO0p.js → switch-DhSORO9C.js} +2 -1
- package/dist/_chunks/{switch-DtLPKO0p.js.map → switch-DhSORO9C.js.map} +1 -1
- package/dist/_chunks/{tabs.agent-sQAHxebC.js → tabs.agent-BtaNGxRh.js} +3 -2
- package/dist/_chunks/tabs.agent-BtaNGxRh.js.map +1 -0
- package/dist/_chunks/{tag-CfSZZN2f.js → tag--uLKOb9f.js} +17 -14
- package/dist/_chunks/{tag-CfSZZN2f.js.map → tag--uLKOb9f.js.map} +1 -1
- package/dist/_chunks/{task-card-B5xfiFg5.js → task-card-BeSuntXP.js} +11 -10
- package/dist/_chunks/{task-card-B5xfiFg5.js.map → task-card-BeSuntXP.js.map} +1 -1
- package/dist/_chunks/{task-tray-CWvVxWM0.js → task-tray-pRk6u8Ik.js} +10 -9
- package/dist/_chunks/{task-tray-CWvVxWM0.js.map → task-tray-pRk6u8Ik.js.map} +1 -1
- package/dist/_chunks/{text-area-iPDv7Nah.js → text-area-xf9-6iDf.js} +13 -13
- package/dist/_chunks/{text-area-iPDv7Nah.js.map → text-area-xf9-6iDf.js.map} +1 -1
- package/dist/_chunks/{text-input-lh6kRXZS.js → text-input-exh7VD7D.js} +10 -9
- package/dist/_chunks/{text-input-lh6kRXZS.js.map → text-input-exh7VD7D.js.map} +1 -1
- package/dist/_chunks/theme-root-DDb0TJjd.js +18 -0
- package/dist/_chunks/{theme-root-vapFjsnt.js.map → theme-root-DDb0TJjd.js.map} +1 -1
- package/dist/_chunks/{theme-toggle-CEaPghpm.js → theme-toggle-CJgA6G24.js} +42 -39
- package/dist/_chunks/theme-toggle-CJgA6G24.js.map +1 -0
- package/dist/_chunks/{time-picker-Crc87DU3.js → time-picker-D-EueWUG.js} +2 -1
- package/dist/_chunks/{time-picker-Crc87DU3.js.map → time-picker-D-EueWUG.js.map} +1 -1
- package/dist/_chunks/{timeline-Ym2DRmtu.js → timeline-DIueH4TJ.js} +5 -4
- package/dist/_chunks/timeline-DIueH4TJ.js.map +1 -0
- package/dist/_chunks/{timestamp-DmSt92P1.js → timestamp-BV2lC-wV.js} +2 -1
- package/dist/_chunks/{timestamp-DmSt92P1.js.map → timestamp-BV2lC-wV.js.map} +1 -1
- package/dist/_chunks/{toast-DoMNrzwm.js → toast-q0SlabGr.js} +2 -2
- package/dist/_chunks/{toast-DoMNrzwm.js.map → toast-q0SlabGr.js.map} +1 -1
- package/dist/_chunks/{tooltip-Dp3u8jGz.js → tooltip-DHik5yRI.js} +2 -1
- package/dist/_chunks/{tooltip-Dp3u8jGz.js.map → tooltip-DHik5yRI.js.map} +1 -1
- package/dist/_chunks/{transcript-panel-Bg1BTMSr.js → transcript-panel-DFnhbrlQ.js} +39 -38
- package/dist/_chunks/{transcript-panel-Bg1BTMSr.js.map → transcript-panel-DFnhbrlQ.js.map} +1 -1
- package/dist/_chunks/{typing-indicator-BRg22Rqr.js → typing-indicator-CbUBf-Dx.js} +9 -8
- package/dist/_chunks/{typing-indicator-BRg22Rqr.js.map → typing-indicator-CbUBf-Dx.js.map} +1 -1
- package/dist/_chunks/visually-hidden-BlkhaZWe.js +21 -0
- package/dist/_chunks/{visually-hidden-Y3jcdCv-.js.map → visually-hidden-BlkhaZWe.js.map} +1 -1
- package/dist/_chunks/{warning-stack-5KROOw9M.js → warning-stack-DCmO0R07.js} +25 -23
- package/dist/_chunks/warning-stack-DCmO0R07.js.map +1 -0
- package/dist/_chunks/{workflow-map-D4sjYv2d.js → workflow-map-CAM6Uy_J.js} +12 -9
- package/dist/_chunks/workflow-map-CAM6Uy_J.js.map +1 -0
- package/dist/agent-catalog.json +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/agenda-card/agenda-card.d.ts.map +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/ai-prompt-input.d.ts.map +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/app-frame.d.ts.map +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +1 -1
- package/dist/components/aspect-ratio/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/audio-visualiser.d.ts.map +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/index.js +1 -1
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/icon-button.d.ts.map +1 -1
- package/dist/components/button/index.js +1 -1
- package/dist/components/button-group/button-group.d.ts.map +1 -1
- package/dist/components/button-group/index.js +1 -1
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/index.js +1 -1
- package/dist/components/chat-container/index.js +1 -1
- package/dist/components/chat-input/index.js +1 -1
- package/dist/components/chat-message/chat-message.d.ts.map +1 -1
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox/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/collapsible/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/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/description-list.d.ts.map +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/index.js +1 -1
- package/dist/components/empty-state/empty-state.d.ts.map +1 -1
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/flag/flag.d.ts.map +1 -1
- package/dist/components/flag/index.js +1 -1
- package/dist/components/floating-action-button/floating-action-button.d.ts.map +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/form-field.d.ts.map +1 -1
- package/dist/components/form-field/index.js +1 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +1 -1
- package/dist/components/freemium-paywall/index.js +1 -1
- package/dist/components/header/header.d.ts.map +1 -1
- package/dist/components/header/index.js +1 -1
- package/dist/components/icon-button/index.js +1 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts.map +1 -1
- package/dist/components/icon-button-group/index.js +1 -1
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/kbd/kbd.d.ts.map +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +1 -1
- package/dist/components/list/index.js +1 -1
- package/dist/components/list/list.d.ts.map +1 -1
- package/dist/components/live-region/index.js +1 -1
- package/dist/components/live-region/live-region.d.ts.map +1 -1
- package/dist/components/logo/index.js +1 -1
- package/dist/components/matrix-rain/index.js +1 -1
- package/dist/components/matrix-rain/matrix-rain.d.ts.map +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-card/message-card.d.ts.map +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts.map +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/multi-select/multi-select.d.ts.map +1 -1
- package/dist/components/navigation-menu/index.js +2 -2
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +1 -1
- 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/number-input/number-input.d.ts.map +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.d.ts.map +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.d.ts.map +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/phone-input/phone-input.d.ts.map +1 -1
- package/dist/components/popover/index.js +1 -1
- package/dist/components/popover/popover.d.ts.map +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/radio/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/radio-group/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group/radio.d.ts.map +1 -1
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/scroll-area/scroll-area.d.ts.map +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-input/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.d.ts.map +1 -1
- package/dist/components/separator/index.js +1 -1
- package/dist/components/separator/separator.d.ts.map +1 -1
- package/dist/components/sheet/index.js +1 -1
- package/dist/components/sheet/sheet.d.ts.map +1 -1
- package/dist/components/sidebar/index.js +1 -1
- package/dist/components/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/skeleton/skeleton.d.ts.map +1 -1
- package/dist/components/skip-link/index.js +1 -1
- package/dist/components/skip-link/skip-link.d.ts.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/slider.d.ts.map +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/stat/stat.d.ts.map +1 -1
- package/dist/components/stepper-accordion/index.js +1 -1
- package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +1 -1
- package/dist/components/stepper-calendar/index.js +1 -1
- package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +1 -1
- package/dist/components/stepper-progress/index.js +1 -1
- package/dist/components/stepper-progress/stepper-progress.d.ts.map +1 -1
- package/dist/components/streaming-text/index.js +1 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/switch/switch.d.ts.map +1 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/components/tag/index.js +1 -1
- package/dist/components/tag/tag.d.ts.map +1 -1
- package/dist/components/task-card/index.js +1 -1
- package/dist/components/task-card/task-card.d.ts.map +1 -1
- package/dist/components/task-tray/index.js +1 -1
- package/dist/components/task-tray/task-tray.d.ts.map +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-input/index.js +1 -1
- package/dist/components/text-input/text-input.d.ts.map +1 -1
- package/dist/components/theme-root/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/time-picker/time-picker.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/timestamp/index.js +1 -1
- package/dist/components/timestamp/timestamp.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts.map +1 -1
- package/dist/components/typing-indicator/index.js +1 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts.map +1 -1
- package/dist/components/visually-hidden/index.js +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/components/workflow/workflow-card.d.ts.map +1 -1
- package/dist/components/workflow/workflow-editor.d.ts.map +1 -1
- package/dist/components/workflow/workflow-map.d.ts.map +1 -1
- package/dist/index.js +103 -103
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/package.json +504 -135
- package/dist/_chunks/accordion-BJD1aM67.js.map +0 -1
- package/dist/_chunks/ai-prompt-input-8IShJ-GX.js.map +0 -1
- package/dist/_chunks/breadcrumb-pdUacgm1.js.map +0 -1
- package/dist/_chunks/card-DeItIBcV.js.map +0 -1
- package/dist/_chunks/chat-input-C-B4snVJ.js.map +0 -1
- package/dist/_chunks/chat-message-cFNbQYRH.js.map +0 -1
- package/dist/_chunks/checkbox-group-DBnIBRT_.js.map +0 -1
- package/dist/_chunks/collapsible-DPGQnHZh.js.map +0 -1
- package/dist/_chunks/combobox.agent-9w6W1Jct.js.map +0 -1
- package/dist/_chunks/command-palette.agent-Dg7jhOIc.js.map +0 -1
- package/dist/_chunks/date-range-picker-CtwEwoyr.js.map +0 -1
- package/dist/_chunks/description-list-Bk3p71qY.js.map +0 -1
- package/dist/_chunks/dropdown-menu-BnVUeVG3.js.map +0 -1
- package/dist/_chunks/form-field-DI5LY5aG.js.map +0 -1
- package/dist/_chunks/freemium-paywall-CCsX3GhK.js.map +0 -1
- package/dist/_chunks/icon-button-SWpSs9S6.js.map +0 -1
- package/dist/_chunks/kbd-DTcIjYA7.js.map +0 -1
- package/dist/_chunks/list-Cwe8mcmh.js.map +0 -1
- package/dist/_chunks/live-region-COggO6x6.js +0 -57
- package/dist/_chunks/message-card-B0oGrI3i.js.map +0 -1
- package/dist/_chunks/message-tray-DZ6oZ0cs.js.map +0 -1
- package/dist/_chunks/multi-select.agent-BDEVGMmW.js.map +0 -1
- package/dist/_chunks/navigation-menu-NjwxyshT.js.map +0 -1
- package/dist/_chunks/pagination.agent-sxokDphY.js.map +0 -1
- package/dist/_chunks/password-input-C6PvKyQV.js.map +0 -1
- package/dist/_chunks/phone-input-BavVyXxZ.js.map +0 -1
- package/dist/_chunks/popover-BWgOopjI.js.map +0 -1
- package/dist/_chunks/privacy-lock-DWL7m_VT.js.map +0 -1
- package/dist/_chunks/radio-B_gvGU29.js.map +0 -1
- package/dist/_chunks/radio-group-Bn8Wt0yc.js.map +0 -1
- package/dist/_chunks/scroll-area-Ba99pJ_R.js.map +0 -1
- package/dist/_chunks/search-bar-VoTqJhRp.js.map +0 -1
- package/dist/_chunks/select-CQxhOXVE.js.map +0 -1
- package/dist/_chunks/sheet-CKsuHuHB.js.map +0 -1
- package/dist/_chunks/sidebar-CiEpSH9e.js.map +0 -1
- package/dist/_chunks/sign-in-with-alfadocs-button-BDErAgG2.js +0 -44
- package/dist/_chunks/slider-BVBlOW_l.js.map +0 -1
- package/dist/_chunks/spinner-CoAOGcDa.js.map +0 -1
- package/dist/_chunks/tabs.agent-sQAHxebC.js.map +0 -1
- package/dist/_chunks/theme-root-vapFjsnt.js +0 -18
- package/dist/_chunks/theme-toggle-CEaPghpm.js.map +0 -1
- package/dist/_chunks/timeline-Ym2DRmtu.js.map +0 -1
- package/dist/_chunks/visually-hidden-Y3jcdCv-.js +0 -21
- package/dist/_chunks/warning-stack-5KROOw9M.js.map +0 -1
- package/dist/_chunks/workflow-map-D4sjYv2d.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-CtkWITO2.js";
|
|
7
7
|
const _ = D(
|
|
8
8
|
[
|
|
9
9
|
"ds:flex ds:flex-col ds:w-full ds:min-h-0",
|
|
@@ -22,18 +22,18 @@ 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(
|
|
25
|
+
function M(t, r) {
|
|
26
|
+
const o = Math.max(0, Math.floor(t)), i = Math.floor(o / 60), c = o % 60, l = (h) => new Intl.NumberFormat(r, { minimumIntegerDigits: 2 }).format(h);
|
|
27
27
|
return `${l(i)}:${l(c)}`;
|
|
28
28
|
}
|
|
29
|
-
function U(
|
|
30
|
-
const r = Math.max(0, Math.floor(
|
|
29
|
+
function U(t) {
|
|
30
|
+
const r = Math.max(0, Math.floor(t)), o = Math.floor(r / 60), i = r % 60;
|
|
31
31
|
return `PT${o}M${i}S`;
|
|
32
32
|
}
|
|
33
|
-
function G(
|
|
33
|
+
function G(t) {
|
|
34
34
|
let r = 0;
|
|
35
|
-
for (let o = 0; o <
|
|
36
|
-
r = r * 31 +
|
|
35
|
+
for (let o = 0; o < t.length; o += 1)
|
|
36
|
+
r = r * 31 + t.charCodeAt(o) | 0;
|
|
37
37
|
return Math.abs(r) % B;
|
|
38
38
|
}
|
|
39
39
|
const Q = [
|
|
@@ -46,13 +46,13 @@ const Q = [
|
|
|
46
46
|
"bg-[color:var(--transcript-speaker-7)]",
|
|
47
47
|
"bg-[color:var(--transcript-speaker-8)]"
|
|
48
48
|
];
|
|
49
|
-
function Y(
|
|
50
|
-
return
|
|
49
|
+
function Y(t) {
|
|
50
|
+
return t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
51
51
|
}
|
|
52
|
-
function Z({ text:
|
|
53
|
-
if (!r) return
|
|
52
|
+
function Z({ text: t, query: r }) {
|
|
53
|
+
if (!r) return t;
|
|
54
54
|
const o = Y(r);
|
|
55
|
-
return
|
|
55
|
+
return t.split(new RegExp(`(${o})`, "gi")).map(
|
|
56
56
|
(c, l) => c.toLocaleLowerCase() === r.toLocaleLowerCase() ? /* @__PURE__ */ n(
|
|
57
57
|
"mark",
|
|
58
58
|
{
|
|
@@ -65,7 +65,7 @@ function Z({ text: s, query: r }) {
|
|
|
65
65
|
}
|
|
66
66
|
const q = $(
|
|
67
67
|
({
|
|
68
|
-
lines:
|
|
68
|
+
lines: t,
|
|
69
69
|
currentTime: r = 0,
|
|
70
70
|
onSeek: o,
|
|
71
71
|
searchable: i = !0,
|
|
@@ -75,30 +75,30 @@ const q = $(
|
|
|
75
75
|
}, R) => {
|
|
76
76
|
const { t: d, 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 < t.length; e += 1) {
|
|
79
|
+
const s = t[e];
|
|
80
|
+
if (s.start <= r && r < s.end) return e;
|
|
81
81
|
}
|
|
82
82
|
return -1;
|
|
83
|
-
}, [
|
|
83
|
+
}, [t, r]), y = z(() => {
|
|
84
84
|
if (!u) return 0;
|
|
85
85
|
let e = 0;
|
|
86
|
-
const
|
|
87
|
-
for (const a of
|
|
86
|
+
const s = u.toLocaleLowerCase();
|
|
87
|
+
for (const a of t) {
|
|
88
88
|
const f = a.text.toLocaleLowerCase();
|
|
89
|
-
let g = f.indexOf(
|
|
89
|
+
let g = f.indexOf(s);
|
|
90
90
|
for (; g !== -1; )
|
|
91
|
-
e += 1, g = f.indexOf(
|
|
91
|
+
e += 1, g = f.indexOf(s, g + s.length);
|
|
92
92
|
}
|
|
93
93
|
return e;
|
|
94
|
-
}, [
|
|
94
|
+
}, [t, u]), E = L(
|
|
95
95
|
(e) => {
|
|
96
|
-
var
|
|
97
|
-
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" && i && (e.preventDefault(), (
|
|
96
|
+
var s;
|
|
97
|
+
(e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "f" && i && (e.preventDefault(), (s = w.current) == null || s.focus());
|
|
98
98
|
},
|
|
99
99
|
[i]
|
|
100
|
-
), N =
|
|
101
|
-
count: N ?
|
|
100
|
+
), N = t.length > H, x = V({
|
|
101
|
+
count: N ? t.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 s = e.querySelector(
|
|
112
112
|
`[data-line-index="${p}"]`
|
|
113
113
|
);
|
|
114
|
-
if (!
|
|
114
|
+
if (!s) return;
|
|
115
115
|
const a = typeof window < "u" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
116
|
-
|
|
116
|
+
s.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, s, a) => {
|
|
123
|
+
const f = s === 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": s,
|
|
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,
|
|
@@ -193,7 +193,7 @@ const q = $(
|
|
|
193
193
|
] })
|
|
194
194
|
]
|
|
195
195
|
},
|
|
196
|
-
|
|
196
|
+
s
|
|
197
197
|
);
|
|
198
198
|
},
|
|
199
199
|
[p, v.language, o, u, d]
|
|
@@ -203,6 +203,7 @@ const q = $(
|
|
|
203
203
|
{
|
|
204
204
|
ref: R,
|
|
205
205
|
onKeyDown: E,
|
|
206
|
+
"data-component": "transcript-panel",
|
|
206
207
|
className: _({ size: c, className: l }),
|
|
207
208
|
...h,
|
|
208
209
|
children: [
|
|
@@ -241,8 +242,8 @@ const q = $(
|
|
|
241
242
|
className: "ds:relative ds:list-none ds:ps-0 ds:m-0",
|
|
242
243
|
style: { blockSize: `${x.getTotalSize()}px` },
|
|
243
244
|
children: x.getVirtualItems().map((e) => {
|
|
244
|
-
const
|
|
245
|
-
return
|
|
245
|
+
const s = t[e.index];
|
|
246
|
+
return s ? k(s, e.index, {
|
|
246
247
|
liRef: x.measureElement,
|
|
247
248
|
dataIndex: e.index,
|
|
248
249
|
style: { transform: `translateY(${e.start}px)` },
|
|
@@ -250,7 +251,7 @@ const q = $(
|
|
|
250
251
|
}) : null;
|
|
251
252
|
})
|
|
252
253
|
}
|
|
253
|
-
) : /* @__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: t.map((e, s) => k(e, s)) })
|
|
254
255
|
}
|
|
255
256
|
)
|
|
256
257
|
]
|
|
@@ -262,4 +263,4 @@ q.displayName = "TranscriptPanel";
|
|
|
262
263
|
export {
|
|
263
264
|
q as T
|
|
264
265
|
};
|
|
265
|
-
//# sourceMappingURL=transcript-panel-
|
|
266
|
+
//# sourceMappingURL=transcript-panel-DFnhbrlQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-panel-Bg1BTMSr.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 'bg-[color:var(--transcript-speaker-1)]',\n 'bg-[color:var(--transcript-speaker-2)]',\n 'bg-[color:var(--transcript-speaker-3)]',\n 'bg-[color:var(--transcript-speaker-4)]',\n 'bg-[color:var(--transcript-speaker-5)]',\n 'bg-[color:var(--transcript-speaker-6)]',\n 'bg-[color:var(--transcript-speaker-7)]',\n '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 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
|
+
{"version":3,"file":"transcript-panel-DFnhbrlQ.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 'bg-[color:var(--transcript-speaker-1)]',\n 'bg-[color:var(--transcript-speaker-2)]',\n 'bg-[color:var(--transcript-speaker-3)]',\n 'bg-[color:var(--transcript-speaker-4)]',\n 'bg-[color:var(--transcript-speaker-5)]',\n 'bg-[color:var(--transcript-speaker-6)]',\n 'bg-[color:var(--transcript-speaker-7)]',\n '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,8 +1,8 @@
|
|
|
1
1
|
import { jsxs as o, jsx as s } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as f } from "react";
|
|
3
|
-
import { c as
|
|
3
|
+
import { c as i } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as u } from "react-i18next";
|
|
5
|
-
const g =
|
|
5
|
+
const g = i(
|
|
6
6
|
[
|
|
7
7
|
"ds:inline-flex ds:items-center",
|
|
8
8
|
"ds:text-[color:var(--muted-foreground)]"
|
|
@@ -21,7 +21,7 @@ const g = e(
|
|
|
21
21
|
},
|
|
22
22
|
defaultVariants: { density: "default", size: "md" }
|
|
23
23
|
}
|
|
24
|
-
), v =
|
|
24
|
+
), v = i("ds:inline-flex ds:items-center", {
|
|
25
25
|
variants: {
|
|
26
26
|
density: {
|
|
27
27
|
default: "ds:gap-[var(--spacing-xs)]",
|
|
@@ -29,7 +29,7 @@ const g = e(
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
defaultVariants: { density: "default" }
|
|
32
|
-
}), t =
|
|
32
|
+
}), t = i(
|
|
33
33
|
[
|
|
34
34
|
"ds:inline-block ds:rounded-[var(--radius-full)]",
|
|
35
35
|
"ds:bg-[color:currentColor]",
|
|
@@ -50,7 +50,7 @@ const g = e(
|
|
|
50
50
|
defaultVariants: { size: "md" }
|
|
51
51
|
}
|
|
52
52
|
), x = f(
|
|
53
|
-
({ size: a = "md", density:
|
|
53
|
+
({ size: a = "md", density: e = "default", label: r, hideLabel: n = !1, className: l, ...c }, m) => {
|
|
54
54
|
const { t: p } = u(), d = r ?? p("ui.chat.typing");
|
|
55
55
|
return /* @__PURE__ */ o(
|
|
56
56
|
"div",
|
|
@@ -60,10 +60,11 @@ const g = e(
|
|
|
60
60
|
"aria-live": "polite",
|
|
61
61
|
"aria-atomic": "true",
|
|
62
62
|
"aria-label": n ? d : void 0,
|
|
63
|
-
|
|
63
|
+
"data-component": "typing-indicator",
|
|
64
|
+
className: g({ size: a, density: e, className: l }),
|
|
64
65
|
...c,
|
|
65
66
|
children: [
|
|
66
|
-
/* @__PURE__ */ o("span", { "aria-hidden": "true", className: v({ density:
|
|
67
|
+
/* @__PURE__ */ o("span", { "aria-hidden": "true", className: v({ density: e }), children: [
|
|
67
68
|
/* @__PURE__ */ s("span", { className: `${t({ size: a })} ds:[animation-delay:0ms]` }),
|
|
68
69
|
/* @__PURE__ */ s("span", { className: `${t({ size: a })} ds:[animation-delay:200ms]` }),
|
|
69
70
|
/* @__PURE__ */ s("span", { className: `${t({ size: a })} ds:[animation-delay:400ms]` })
|
|
@@ -78,4 +79,4 @@ x.displayName = "TypingIndicator";
|
|
|
78
79
|
export {
|
|
79
80
|
x as T
|
|
80
81
|
};
|
|
81
|
-
//# sourceMappingURL=typing-indicator-
|
|
82
|
+
//# sourceMappingURL=typing-indicator-CbUBf-Dx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typing-indicator-
|
|
1
|
+
{"version":3,"file":"typing-indicator-CbUBf-Dx.js","sources":["../../src/components/typing-indicator/typing-indicator.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\n\nconst indicatorVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:text-[color:var(--muted-foreground)]',\n ].join(' '),\n {\n variants: {\n density: {\n default: 'ds:gap-[var(--spacing-sm)]',\n compact: 'ds:gap-[var(--spacing-xs)]',\n },\n size: {\n sm: 'ds:text-[length:var(--font-size-xs)]',\n md: 'ds:text-[length:var(--font-size-sm)]',\n lg: 'ds:text-[length:var(--font-size-base)]',\n },\n },\n defaultVariants: { density: 'default', size: 'md' },\n },\n);\n\nconst dotsVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n density: {\n default: 'ds:gap-[var(--spacing-xs)]',\n compact: 'ds:gap-[calc(var(--spacing)*0.75)]',\n },\n },\n defaultVariants: { density: 'default' },\n});\n\nconst dotVariants = cva(\n [\n 'ds:inline-block ds:rounded-[var(--radius-full)]',\n 'ds:bg-[color:currentColor]',\n // Accessible themes set --animation-duration:0ms; reduced-motion falls back via media query below\n 'ds:motion-safe:animate-[typing-indicator-dot_var(--animation-duration-typing,1.4s)_ease-in-out_infinite]',\n 'ds:motion-reduce:opacity-60',\n 'ds:[.theme-accessible_&]:animate-none ds:[.theme-accessible_&]:opacity-60',\n 'ds:forced-colors:bg-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:size-[6px]',\n md: 'ds:size-[8px]',\n lg: 'ds:size-[10px]',\n },\n },\n defaultVariants: { size: 'md' },\n },\n);\n\ntype NativeDivProps = Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-live' | 'aria-atomic'>;\n\nexport interface TypingIndicatorProps\n extends NativeDivProps,\n VariantProps<typeof indicatorVariants> {\n /** Optional override. When omitted, uses t('ui.chat.typing'). */\n label?: string;\n /** Hide the visible label, keeping only the animated dots. The label still\n * carries the accessible name via aria-label. */\n hideLabel?: boolean;\n}\n\nexport const TypingIndicator = forwardRef<HTMLDivElement, TypingIndicatorProps>(\n (\n { size = 'md', density = 'default', label, hideLabel = false, className, ...rest },\n ref,\n ) => {\n const { t } = useTranslation();\n const resolvedLabel = label ?? t('ui.chat.typing');\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n aria-label={hideLabel ? resolvedLabel : undefined}\n data-component=\"typing-indicator\"\n className={indicatorVariants({ size, density, className })}\n {...rest}\n >\n <span aria-hidden=\"true\" className={dotsVariants({ density })}>\n <span className={`${dotVariants({ size })} ds:[animation-delay:0ms]`} />\n <span className={`${dotVariants({ size })} ds:[animation-delay:200ms]`} />\n <span className={`${dotVariants({ size })} ds:[animation-delay:400ms]`} />\n </span>\n {!hideLabel ? (\n <span className=\"ds:font-medium\">{resolvedLabel}</span>\n ) : null}\n </div>\n );\n },\n);\n\nTypingIndicator.displayName = 'TypingIndicator';\n"],"names":["indicatorVariants","cva","dotsVariants","dotVariants","TypingIndicator","forwardRef","size","density","label","hideLabel","className","rest","ref","t","useTranslation","resolvedLabel","jsxs","jsx"],"mappings":";;;;AAIA,MAAMA,IAAoBC;AAAA,EACxB;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,SAAS,WAAW,MAAM,KAAA;AAAA,EAAK;AAEtD,GAEMC,IAAeD,EAAI,kCAAkC;AAAA,EACzD,UAAU;AAAA,IACR,SAAS;AAAA,MACP,SAAS;AAAA,MACT,SAAS;AAAA,IAAA;AAAA,EACX;AAAA,EAEF,iBAAiB,EAAE,SAAS,UAAA;AAC9B,CAAC,GAEKE,IAAcF;AAAA,EAClB;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB,EAAE,MAAM,KAAA;AAAA,EAAK;AAElC,GAcaG,IAAkBC;AAAA,EAC7B,CACE,EAAE,MAAAC,IAAO,MAAM,SAAAC,IAAU,WAAW,OAAAC,GAAO,WAAAC,IAAY,IAAO,WAAAC,GAAW,GAAGC,EAAA,GAC5EC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAgBP,KAASK,EAAE,gBAAgB;AAEjD,WACE,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAJ;AAAA,QACA,MAAK;AAAA,QACL,aAAU;AAAA,QACV,eAAY;AAAA,QACZ,cAAYH,IAAYM,IAAgB;AAAA,QACxC,kBAAe;AAAA,QACf,WAAWf,EAAkB,EAAE,MAAAM,GAAM,SAAAC,GAAS,WAAAG,GAAW;AAAA,QACxD,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAK,EAAC,QAAA,EAAK,eAAY,QAAO,WAAWd,EAAa,EAAE,SAAAK,GAAS,GAC1D,UAAA;AAAA,YAAA,gBAAAU,EAAC,QAAA,EAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,6BAA6B;AAAA,YACtE,gBAAAW,EAAC,UAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,+BAA+B;AAAA,YACxE,gBAAAW,EAAC,UAAK,WAAW,GAAGd,EAAY,EAAE,MAAAG,EAAA,CAAM,CAAC,8BAAA,CAA+B;AAAA,UAAA,GAC1E;AAAA,UACEG,IAEE,OADF,gBAAAQ,EAAC,UAAK,WAAU,kBAAkB,aAAc;AAAA,QAC9C;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAb,EAAgB,cAAc;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as r, isValidElement as c, cloneElement as p } from "react";
|
|
3
|
+
const m = "sr-only", N = r(
|
|
4
|
+
({ asChild: t = !1, className: l, children: s, ...o }, n) => {
|
|
5
|
+
const a = l ? `${m} ${l}` : m;
|
|
6
|
+
if (t && c(s)) {
|
|
7
|
+
const e = s, i = e.props.className ? `${a} ${e.props.className}` : a;
|
|
8
|
+
return p(e, {
|
|
9
|
+
...o,
|
|
10
|
+
className: i,
|
|
11
|
+
ref: n
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return /* @__PURE__ */ d("span", { ref: n, className: a, "data-component": "visually-hidden", ...o, children: s });
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
N.displayName = "VisuallyHidden";
|
|
18
|
+
export {
|
|
19
|
+
N as V
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=visually-hidden-BlkhaZWe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visually-hidden-
|
|
1
|
+
{"version":3,"file":"visually-hidden-BlkhaZWe.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 = '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,WAEjBC,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,7 +2,7 @@ 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-
|
|
5
|
+
import { A as u } from "./alert-rOM4EG0P.js";
|
|
6
6
|
import { B as F } from "./button-7dTew-IV.js";
|
|
7
7
|
import { C as H } from "./chevron-down-BX_NP2Yh.js";
|
|
8
8
|
const L = W(
|
|
@@ -50,23 +50,23 @@ const L = W(
|
|
|
50
50
|
maxVisible: t,
|
|
51
51
|
defaultCollapsed: z = !0,
|
|
52
52
|
onDismiss: i,
|
|
53
|
-
size:
|
|
53
|
+
size: g = "md",
|
|
54
54
|
stretch: v = !1,
|
|
55
55
|
ariaLabel: A,
|
|
56
56
|
emptyState: m,
|
|
57
57
|
className: w,
|
|
58
58
|
...x
|
|
59
|
-
},
|
|
60
|
-
const { t: s } = q(),
|
|
59
|
+
}, k) => {
|
|
60
|
+
const { t: s } = q(), c = N(), b = N(), d = t !== void 0 && r.length > t, [o, B] = O(z), f = y(null), S = y(r.length);
|
|
61
61
|
V(() => {
|
|
62
|
-
if (!
|
|
63
|
-
const n =
|
|
64
|
-
n !== e && (
|
|
62
|
+
if (!f.current) return;
|
|
63
|
+
const n = S.current, e = r.length;
|
|
64
|
+
n !== e && (f.current.textContent = s("ui.warningStack.countChanged", {
|
|
65
65
|
count: e,
|
|
66
66
|
defaultValue: "{{count}} warnings to review"
|
|
67
|
-
})),
|
|
67
|
+
})), S.current = e;
|
|
68
68
|
}, [r.length, s]);
|
|
69
|
-
const R = _(() => !
|
|
69
|
+
const R = _(() => !d || !o ? r : r.slice(0, t), [r, d, o, t]), E = d ? r.length - (t ?? 0) : 0, I = j(
|
|
70
70
|
(n) => (e) => {
|
|
71
71
|
e || i == null || i(n);
|
|
72
72
|
},
|
|
@@ -75,20 +75,21 @@ const L = W(
|
|
|
75
75
|
/* @__PURE__ */ a(
|
|
76
76
|
"h2",
|
|
77
77
|
{
|
|
78
|
-
id:
|
|
78
|
+
id: c,
|
|
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: c, className: "ds:sr-only", children: G });
|
|
85
85
|
return r.length === 0 ? m ? /* @__PURE__ */ l(
|
|
86
86
|
"section",
|
|
87
87
|
{
|
|
88
|
-
ref:
|
|
88
|
+
ref: k,
|
|
89
89
|
role: "region",
|
|
90
|
-
"aria-labelledby":
|
|
91
|
-
|
|
90
|
+
"aria-labelledby": c,
|
|
91
|
+
"data-component": "warning-stack",
|
|
92
|
+
className: [L({ size: g, stretch: v }), w].filter(Boolean).join(" "),
|
|
92
93
|
...x,
|
|
93
94
|
children: [
|
|
94
95
|
C,
|
|
@@ -98,17 +99,18 @@ const L = W(
|
|
|
98
99
|
) : null : /* @__PURE__ */ l(
|
|
99
100
|
"section",
|
|
100
101
|
{
|
|
101
|
-
ref:
|
|
102
|
+
ref: k,
|
|
102
103
|
role: "region",
|
|
103
|
-
"aria-labelledby":
|
|
104
|
-
|
|
104
|
+
"aria-labelledby": c,
|
|
105
|
+
"data-component": "warning-stack",
|
|
106
|
+
className: [L({ size: g, stretch: v }), w].filter(Boolean).join(" "),
|
|
105
107
|
...x,
|
|
106
108
|
children: [
|
|
107
109
|
C,
|
|
108
110
|
/* @__PURE__ */ a(
|
|
109
111
|
"div",
|
|
110
112
|
{
|
|
111
|
-
ref:
|
|
113
|
+
ref: f,
|
|
112
114
|
"aria-live": "polite",
|
|
113
115
|
"aria-atomic": "true",
|
|
114
116
|
className: "ds:sr-only"
|
|
@@ -117,8 +119,8 @@ const L = W(
|
|
|
117
119
|
/* @__PURE__ */ a(
|
|
118
120
|
"ul",
|
|
119
121
|
{
|
|
120
|
-
id:
|
|
121
|
-
className: J({ size:
|
|
122
|
+
id: b,
|
|
123
|
+
className: J({ size: g }),
|
|
122
124
|
"aria-label": s("ui.warningStack.listLabel", "Warning list"),
|
|
123
125
|
children: R.map((n) => {
|
|
124
126
|
const e = n.variant ?? "warning";
|
|
@@ -139,14 +141,14 @@ const L = W(
|
|
|
139
141
|
})
|
|
140
142
|
}
|
|
141
143
|
),
|
|
142
|
-
|
|
144
|
+
d ? /* @__PURE__ */ l(
|
|
143
145
|
F,
|
|
144
146
|
{
|
|
145
147
|
type: "button",
|
|
146
148
|
intent: "link",
|
|
147
149
|
size: "sm",
|
|
148
150
|
"aria-expanded": !o,
|
|
149
|
-
"aria-controls":
|
|
151
|
+
"aria-controls": b,
|
|
150
152
|
onClick: T,
|
|
151
153
|
className: K,
|
|
152
154
|
children: [
|
|
@@ -176,4 +178,4 @@ P.displayName = "WarningStack";
|
|
|
176
178
|
export {
|
|
177
179
|
P as W
|
|
178
180
|
};
|
|
179
|
-
//# sourceMappingURL=warning-stack-
|
|
181
|
+
//# sourceMappingURL=warning-stack-DCmO0R07.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warning-stack-DCmO0R07.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 'inline-flex items-center gap-[var(--spacing-xs)] 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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"}
|
|
@@ -2,17 +2,17 @@ import { jsx as t, jsxs as c, Fragment as fe } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as P, useMemo as V, useRef as B, useCallback as K, useEffect as me } from "react";
|
|
3
3
|
import { c as L } from "./index-D2ZczOXr.js";
|
|
4
4
|
import { useTranslation as z } from "react-i18next";
|
|
5
|
-
import { C as _ } from "./card-
|
|
6
|
-
import { B as pe } from "./badge-
|
|
7
|
-
import { K as G } from "./key-value-pair-
|
|
8
|
-
import { T as he } from "./timestamp-
|
|
9
|
-
import { I as M } from "./icon-button-
|
|
5
|
+
import { C as _ } from "./card-BEy58ZKp.js";
|
|
6
|
+
import { B as pe } from "./badge-mrstWxve.js";
|
|
7
|
+
import { K as G } from "./key-value-pair-C9hpjC_B.js";
|
|
8
|
+
import { T as he } from "./timestamp-BV2lC-wV.js";
|
|
9
|
+
import { I as M } from "./icon-button-CNjWCD1X.js";
|
|
10
10
|
import { c as C } from "./createLucideIcon-CrFbzy84.js";
|
|
11
11
|
import { C as ve } from "./circle-BkqTgYmt.js";
|
|
12
|
-
import { A as W } from "./alert-
|
|
12
|
+
import { A as W } from "./alert-rOM4EG0P.js";
|
|
13
13
|
import { B as we } from "./button-7dTew-IV.js";
|
|
14
|
-
import { D as N } from "./dropdown-menu-
|
|
15
|
-
import { E as T } from "./empty-state-
|
|
14
|
+
import { D as N } from "./dropdown-menu-2HgU1Emf.js";
|
|
15
|
+
import { E as T } from "./empty-state-BHrItOiE.js";
|
|
16
16
|
import { P as ee } from "./plus-CYKNmfuA.js";
|
|
17
17
|
import { G as te } from "./globe-BkEFMNSg.js";
|
|
18
18
|
import { S as se } from "./square-check-big-Jr-0202D.js";
|
|
@@ -213,6 +213,7 @@ const $e = P(
|
|
|
213
213
|
ref: m,
|
|
214
214
|
variant: "default",
|
|
215
215
|
className: Be({ density: r, className: p }),
|
|
216
|
+
"data-component": "workflow-card",
|
|
216
217
|
children: [
|
|
217
218
|
/* @__PURE__ */ t(_.Header, { children: /* @__PURE__ */ c("div", { className: "ds:flex ds:items-start ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
|
|
218
219
|
/* @__PURE__ */ c("div", { className: "ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
|
|
@@ -911,6 +912,7 @@ const et = P(
|
|
|
911
912
|
"div",
|
|
912
913
|
{
|
|
913
914
|
ref: i,
|
|
915
|
+
"data-component": "workflow-editor",
|
|
914
916
|
className: [Q, u].filter(Boolean).join(" "),
|
|
915
917
|
children: [
|
|
916
918
|
w(),
|
|
@@ -1153,6 +1155,7 @@ const ot = P(
|
|
|
1153
1155
|
ref: i,
|
|
1154
1156
|
role: "list",
|
|
1155
1157
|
"aria-label": k,
|
|
1158
|
+
"data-component": "workflow-map",
|
|
1156
1159
|
className: st({ orientation: n, compact: o, className: p }),
|
|
1157
1160
|
...u,
|
|
1158
1161
|
children: [
|
|
@@ -1334,4 +1337,4 @@ export {
|
|
|
1334
1337
|
Y as r,
|
|
1335
1338
|
D as w
|
|
1336
1339
|
};
|
|
1337
|
-
//# sourceMappingURL=workflow-map-
|
|
1340
|
+
//# sourceMappingURL=workflow-map-CAM6Uy_J.js.map
|