@alfadocs/ui-kit 0.1.10 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/accordion-DOmxGEWU.js +228 -0
- package/dist/_chunks/{agenda-card-DwLIxgi7.js → agenda-card-CalZqycc.js} +12 -3
- package/dist/_chunks/{agenda-tray-DUvengGQ.js → agenda-tray-3ffFDQZC.js} +54 -51
- package/dist/_chunks/{ai-prompt-input.agent-0NHYLTWD.js → ai-prompt-input-BBiDlEIS.js} +231 -231
- package/dist/_chunks/{alert-BlOUMkXj.js → alert-B1sj8Ss0.js} +24 -14
- package/dist/_chunks/{apexcharts-theme-BkSShpEy.js → apexcharts-theme-BJigns_V.js} +7 -2
- package/dist/_chunks/{app-frame-6d7Lu4ea.js → app-frame-CDJOgPXe.js} +7 -16
- package/dist/_chunks/{audio-recorder.agent--VKeykUp.js → audio-recorder-B4U1LuiQ.js} +161 -162
- package/dist/_chunks/{audio-visualiser-CeMPCZkd.js → audio-visualiser-ByDEFLNm.js} +25 -19
- package/dist/_chunks/autocomplete-D4oUZbsP.js +466 -0
- package/dist/_chunks/{badge-mrstWxve.js → badge-DKFbntoa.js} +16 -13
- package/dist/_chunks/{balance-cell-renderer-5CA7zpAi.js → balance-cell-renderer-B8zgIM-m.js} +63 -44
- package/dist/_chunks/{breadcrumb.agent-GM2hAKFX.js → breadcrumb-D1snXjPb.js} +165 -157
- package/dist/_chunks/{button-7mLWcMp_.js → button-DD_0Xdmr.js} +12 -2
- package/dist/_chunks/{calendar-nGEgelJs.js → calendar-zy0tUUVG.js} +13 -18
- package/dist/_chunks/{card-BEy58ZKp.js → card-CWzuTLYE.js} +40 -34
- package/dist/_chunks/{chart.agent-_pRYS17d.js → chart-BLvFl169.js} +147 -131
- package/dist/_chunks/chat-container-ClzsWXp2.js +220 -0
- package/dist/_chunks/chat-input-DOlsB1fm.js +333 -0
- package/dist/_chunks/{chat-message-ByouZpPP.js → chat-message-DoAhgUTj.js} +23 -13
- package/dist/_chunks/{collapsible.agent-DkS1jVyn.js → collapsible-CuxUBoHJ.js} +97 -99
- package/dist/_chunks/{color-picker-94qcBZqZ.js → color-picker-CTIcHlDF.js} +111 -45
- package/dist/_chunks/combobox-BLWruOxK.js +459 -0
- package/dist/_chunks/command-palette-C_vgSgrI.js +441 -0
- package/dist/_chunks/{date-picker-BqPTn7bO.js → date-picker-B1PO1ZQP.js} +190 -181
- package/dist/_chunks/{date-range-picker-B2hGsffw.js → date-range-picker-mix2nEVC.js} +21 -8
- package/dist/_chunks/{date-time-picker-Bzt0S8yO.js → date-time-picker-Dnong_BY.js} +30 -15
- package/dist/_chunks/{description-list-DvJbp6Yg.js → description-list-BYA77Yud.js} +26 -23
- package/dist/_chunks/dialog-BPD7wlGE.js +211 -0
- package/dist/_chunks/dropdown-menu-CpiF6CPz.js +300 -0
- package/dist/_chunks/{empty-state-DQPtRp2b.js → empty-state-3CLJIXSj.js} +132 -101
- package/dist/_chunks/file-upload-C947ACDK.js +829 -0
- package/dist/_chunks/{floating-action-button-Cnw-f6AG.js → floating-action-button-C8OYj8mE.js} +9 -2
- package/dist/_chunks/{form-field-BfsPLTSc.js → form-field-Bmkeh7WY.js} +12 -11
- package/dist/_chunks/{form-field-context-94LwgYTQ.js → form-field-context-B3APVHKx.js} +4 -2
- package/dist/_chunks/{freemium-paywall.agent-_nQqLyRF.js → freemium-paywall-CrVefV0M.js} +124 -117
- package/dist/_chunks/{header-BGn1mRp8.js → header-D0ULgQl3.js} +69 -68
- package/dist/_chunks/{icon-button-Wnnde5lc.js → icon-button-C4CGcYuz.js} +11 -3
- package/dist/_chunks/{kbd-8baVw3KU.js → kbd-Cglkd7CY.js} +6 -2
- package/dist/_chunks/{key-value-pair-JRFS9Xrh.js → key-value-pair-CgWvAIGb.js} +2 -2
- package/dist/_chunks/{leo-sidebar-BwINPdix.js → leo-sidebar-CfEY-xi2.js} +16 -20
- package/dist/_chunks/{link-QheANk74.js → link-BcYW1eNM.js} +48 -35
- package/dist/_chunks/list-qP6p0NTw.js +434 -0
- package/dist/_chunks/{logo-BpFoCL-s.js → logo-_Z-jLq80.js} +155 -26
- package/dist/_chunks/{matrix-rain-BEkvux64.js → matrix-rain-CRPMXcVx.js} +8 -2
- package/dist/_chunks/{message-card-qhoGv947.js → message-card-DjvsB_3U.js} +58 -55
- package/dist/_chunks/{message-tray-xHUCra-Y.js → message-tray-BbnAzlLH.js} +86 -91
- package/dist/_chunks/{multi-select.agent-Do6CeQUT.js → multi-select-wqqrgjUQ.js} +326 -291
- package/dist/_chunks/{navigation-menu.agent-D69ND6Qq.js → navigation-menu-ClbHeawy.js} +136 -123
- package/dist/_chunks/{notification-card-CsVEYJE-.js → notification-card-uTPEvAQS.js} +22 -22
- package/dist/_chunks/{notification-tray-DTXMq42J.js → notification-tray-PGtMqXbP.js} +84 -80
- package/dist/_chunks/{number-input-fvGmnRy9.js → number-input-Q7wkHnvQ.js} +7 -3
- package/dist/_chunks/{otp-input-EglXOUue.js → otp-input-C9gUByF0.js} +6 -3
- package/dist/_chunks/{pagination.agent-BkZQl45y.js → pagination-3AC4zTsi.js} +234 -194
- package/dist/_chunks/{password-input-D6kuYXmr.js → password-input-C4LmjIH1.js} +6 -9
- package/dist/_chunks/{patient-shell-BRmrrUUW.js → patient-shell-BlsEUKWB.js} +10 -15
- package/dist/_chunks/{payment-form-BWaXas8z.js → payment-form-B_BdHwjb.js} +197 -188
- package/dist/_chunks/{pdf-viewer.agent-BaGEDheA.js → pdf-viewer-CZIfY08H.js} +270 -241
- package/dist/_chunks/{phone-input-C8Op4sEc.js → phone-input-CSHJOJ13.js} +4 -9
- package/dist/_chunks/popover-DekUKNBk.js +293 -0
- package/dist/_chunks/{privacy-lock.agent-C1i1-T58.js → privacy-lock-BKsI6ReN.js} +117 -109
- package/dist/_chunks/progress-C11tqhoI.js +298 -0
- package/dist/_chunks/{recaptcha-widget.agent-BGHpU5zD.js → recaptcha-widget-NyfOfLII.js} +95 -86
- package/dist/_chunks/resizable-mpXXyIsN.js +483 -0
- package/dist/_chunks/{rich-text-editor.agent-DnE125Tz.js → rich-text-editor-C7TCIlQO.js} +298 -209
- package/dist/_chunks/{scroll-area-DLr5w9Dd.js → scroll-area-DEDU-lp-.js} +67 -54
- package/dist/_chunks/{search-bar.agent-DxFAxctc.js → search-bar-BTDfgYtg.js} +291 -268
- package/dist/_chunks/{search-input-Xw3cdWXW.js → search-input-CdJIEjFo.js} +116 -107
- package/dist/_chunks/{select-DY1Cb2Tg.js → select-y6bXV1f1.js} +84 -83
- package/dist/_chunks/{separator-B4wXDLNC.js → separator-CYU_bGFn.js} +2 -5
- package/dist/_chunks/{sheet-B9kH9pcI.js → sheet-4tgMFwj0.js} +135 -60
- package/dist/_chunks/{sidebar-CHF5xr_P.js → sidebar-Bx3wCDyy.js} +546 -457
- package/dist/_chunks/{sign-in-with-alfadocs-button-BN_FPGHT.js → sign-in-with-alfadocs-button-B9UrqOqH.js} +9 -5
- package/dist/_chunks/{signature-capture.agent-BpeDwFht.js → signature-capture-DjMlFOzS.js} +210 -212
- package/dist/_chunks/{skeleton-dtqyF09N.js → skeleton-CZbwyJAA.js} +9 -3
- package/dist/_chunks/{slider-CcsQTZTA.js → slider-BT2bZWsy.js} +138 -134
- package/dist/_chunks/{slot-grid-D_l5VsHG.js → slot-grid-CgpYgBkW.js} +105 -95
- package/dist/_chunks/{sparkline.agent-56Sj7nOP.js → sparkline-_gy8aJDG.js} +107 -100
- package/dist/_chunks/{spinner-GCcv67vh.js → spinner-DLaYfLPl.js} +66 -14
- package/dist/_chunks/{stat-DUB6g90R.js → stat-B9PHSPbN.js} +45 -27
- package/dist/_chunks/{stepper-calendar.agent-9iT3ClIB.js → stepper-calendar-BLOJUE0-.js} +189 -187
- package/dist/_chunks/stepper-progress-jFY8BSf7.js +208 -0
- package/dist/_chunks/{suggestion-chip-DhFrkRPj.js → suggestion-chip-C4Jz0LrM.js} +50 -52
- package/dist/_chunks/{switch-BYEH8I53.js → switch-C0psfIQF.js} +2 -2
- package/dist/_chunks/{tabs.agent-h7NvsTR1.js → tabs-DaFA3Muo.js} +183 -155
- package/dist/_chunks/{tag-BqidXKo3.js → tag-DuLMjRbF.js} +90 -32
- package/dist/_chunks/{task-card-CY5ztNkU.js → task-card-Dw_ZJDL8.js} +5 -2
- package/dist/_chunks/{task-tray-CCoUdorl.js → task-tray-XlIW9ueh.js} +50 -49
- package/dist/_chunks/{text-area-C_M8wliK.js → text-area-CO9Dz0qX.js} +2 -2
- package/dist/_chunks/{text-input-BX39e6T6.js → text-input-DZwt9L8H.js} +65 -62
- package/dist/_chunks/{theme-root-DDb0TJjd.js → theme-root-CSKD5ZRm.js} +9 -2
- package/dist/_chunks/{theme-toggle.agent-btmXTWdW.js → theme-toggle-B9zzCnvl.js} +179 -177
- package/dist/_chunks/{time-picker-B8AMIrX7.js → time-picker-DvPUmHH-.js} +95 -93
- package/dist/_chunks/{timeline.agent-CRPza9wc.js → timeline-BvmnQadS.js} +96 -96
- package/dist/_chunks/{toast.agent-BjEGuq1Z.js → toast.agent-BwKXA0km.js} +46 -8
- package/dist/_chunks/{tooth-scheme.agent-CWrQBjJM.js → tooth-scheme-3mITSXiZ.js} +146 -162
- package/dist/_chunks/transaction-chip-DE6DITun.js +196 -0
- package/dist/_chunks/{transcript-panel.agent-BXEYP6w-.js → transcript-panel-Bx5ANMsv.js} +110 -101
- package/dist/_chunks/{typing-indicator-CbUBf-Dx.js → typing-indicator-BZ5jXZPn.js} +27 -5
- package/dist/_chunks/{use-theme-BMUhembX.js → use-theme-B1cwAXJR.js} +2 -5
- package/dist/_chunks/{visually-hidden-Bw7vBHLm.js → visually-hidden-BHxEUGyT.js} +11 -2
- package/dist/_chunks/{warning-stack-8Pa3pekh.js → warning-stack-VygGHSqC.js} +11 -13
- package/dist/_chunks/{workflow-map-D2A7rTEG.js → workflow-map-C-nlogPC.js} +430 -452
- package/dist/agent-catalog.json +594 -15
- package/dist/components/_shared/index.d.ts +2 -2
- package/dist/components/accordion/index.d.ts +1 -1
- package/dist/components/accordion/index.js +5 -6
- package/dist/components/agenda-card/index.js +1 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts +1 -1
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +1 -1
- package/dist/components/ai-prompt-input/index.js +1 -1
- package/dist/components/alert/index.d.ts +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/app-frame/index.js +1 -1
- package/dist/components/audio-recorder/index.js +1 -1
- package/dist/components/audio-visualiser/index.js +1 -1
- package/dist/components/autocomplete/index.js +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts +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/card/index.js +1 -1
- package/dist/components/chart/index.d.ts +1 -1
- package/dist/components/chart/index.js +1 -1
- package/dist/components/chat-container/chat-container.d.ts +1 -1
- package/dist/components/chat-container/index.js +2 -3
- package/dist/components/chat-input/chat-input.d.ts +1 -1
- package/dist/components/chat-input/index.js +3 -4
- package/dist/components/chat-message/index.js +1 -1
- package/dist/components/checkbox-group/index.d.ts +1 -1
- package/dist/components/collapsible/collapsible.d.ts +1 -1
- package/dist/components/collapsible/index.d.ts +1 -1
- package/dist/components/collapsible/index.js +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/combobox/index.d.ts +1 -1
- package/dist/components/combobox/index.js +1 -1
- package/dist/components/command-palette/command-palette.d.ts +46 -13
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/data-table/data-table.d.ts +3 -1
- package/dist/components/data-table/index.js +1 -1
- package/dist/components/data-table/toolbar.d.ts +6 -5
- package/dist/components/date-picker/date-picker.d.ts +1 -1
- package/dist/components/date-picker/index.d.ts +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.d.ts +1 -1
- package/dist/components/date-time-picker/index.js +1 -1
- package/dist/components/description-list/description-list.d.ts +1 -2
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dialog/dialog.d.ts +2 -2
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +11 -16
- package/dist/components/dropdown-menu/index.js +3 -4
- package/dist/components/empty-state/index.js +1 -1
- package/dist/components/file-upload/index.d.ts +1 -1
- package/dist/components/file-upload/index.js +1 -1
- package/dist/components/floating-action-button/index.js +1 -1
- package/dist/components/form-field/index.js +2 -2
- package/dist/components/freemium-paywall/freemium-paywall.d.ts +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/index.d.ts +1 -0
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/key-value-pair/index.js +1 -1
- package/dist/components/link/index.js +1 -1
- package/dist/components/link/link.d.ts +1 -0
- package/dist/components/list/index.js +1 -1
- package/dist/components/logo/index.js +1 -1
- package/dist/components/matrix-rain/index.js +1 -1
- package/dist/components/message-card/index.d.ts +1 -1
- package/dist/components/message-card/index.js +1 -1
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/message-tray/message-tray.d.ts +1 -1
- package/dist/components/multi-select/index.js +1 -1
- package/dist/components/navigation-menu/index.js +1 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts +1 -1
- package/dist/components/notification-card/index.d.ts +1 -1
- package/dist/components/notification-card/index.js +1 -1
- package/dist/components/notification-tray/index.js +1 -1
- package/dist/components/notification-tray/notification-tray.d.ts +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/pagination/index.js +1 -1
- package/dist/components/pagination/pagination.d.ts +4 -6
- package/dist/components/password-input/index.js +1 -1
- package/dist/components/payment-form/index.js +7 -8
- package/dist/components/payment-form/payment-form.d.ts +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/phone-input/index.d.ts +1 -1
- package/dist/components/phone-input/index.js +1 -1
- package/dist/components/popover/index.js +3 -4
- package/dist/components/privacy-lock/index.js +1 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts +1 -1
- package/dist/components/progress/index.js +3 -4
- package/dist/components/recaptcha-widget/index.js +1 -1
- package/dist/components/resizable/index.d.ts +1 -1
- package/dist/components/resizable/index.js +1 -1
- package/dist/components/rich-text-editor/index.js +1 -1
- package/dist/components/scroll-area/index.js +1 -1
- package/dist/components/search-bar/index.js +1 -1
- package/dist/components/search-bar/search-bar.d.ts +1 -1
- package/dist/components/search-input/index.js +1 -1
- package/dist/components/select/index.js +1 -1
- package/dist/components/select/select.d.ts +1 -1
- package/dist/components/separator/index.js +1 -1
- package/dist/components/sheet/index.js +3 -4
- package/dist/components/sheet/sheet.d.ts +2 -2
- package/dist/components/sidebar/index.js +7 -8
- package/dist/components/sidebar/sidebar.d.ts +0 -2
- package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
- package/dist/components/signature-capture/index.js +1 -1
- package/dist/components/skeleton/index.js +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slot-grid/index.js +1 -1
- package/dist/components/sparkline/index.js +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/stat/index.js +1 -1
- package/dist/components/stepper-calendar/index.js +1 -1
- package/dist/components/stepper-calendar/stepper-calendar.d.ts +1 -1
- package/dist/components/stepper-progress/index.d.ts +1 -1
- package/dist/components/stepper-progress/index.js +1 -2
- package/dist/components/stepper-progress/stepper-progress.d.ts +1 -1
- package/dist/components/suggestion-chip/index.js +1 -1
- package/dist/components/switch/index.js +1 -1
- package/dist/components/tabs/index.d.ts +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/task-tray/task-tray.d.ts +1 -1
- package/dist/components/text-area/index.js +1 -1
- package/dist/components/text-input/index.js +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 +1 -1
- package/dist/components/time-picker/index.js +1 -1
- package/dist/components/time-picker/time-picker.d.ts +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts +1 -1
- package/dist/components/toast/index.js +1 -1
- package/dist/components/tooth-scheme/index.js +1 -1
- package/dist/components/tooth-scheme/tooth-scheme.d.ts +1 -1
- package/dist/components/transaction-chip/index.d.ts +3 -0
- package/dist/components/transaction-chip/index.js +5 -0
- package/dist/components/transaction-chip/transaction-chip.d.ts +30 -0
- package/dist/components/transcript-panel/index.js +1 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts +1 -1
- package/dist/components/typing-indicator/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/components/workflow/workflow-editor.d.ts +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/i18n/config.js +36 -0
- package/dist/i18n/resources.d.ts +36 -0
- package/dist/index.js +394 -402
- package/dist/locales/de.json +12 -0
- package/dist/locales/en.json +12 -0
- package/dist/locales/it.json +12 -0
- package/dist/patterns/leo-assistant/index.js +1 -1
- package/dist/patterns/patient-shell/index.js +1 -1
- package/dist/safe-html/index.js +20 -3
- package/dist/tokens.css +2 -2
- package/package.json +8 -6
- package/dist/_chunks/accordion-BEnrZmAn.js +0 -120
- package/dist/_chunks/accordion-BEnrZmAn.js.map +0 -1
- package/dist/_chunks/accordion.agent-BTjeO1Sx.js +0 -52
- package/dist/_chunks/accordion.agent-BTjeO1Sx.js.map +0 -1
- package/dist/_chunks/agenda-card-DwLIxgi7.js.map +0 -1
- package/dist/_chunks/agenda-card.agent-B_R47-c9.js.map +0 -1
- package/dist/_chunks/agenda-tray-DUvengGQ.js.map +0 -1
- package/dist/_chunks/ai-prompt-input.agent-0NHYLTWD.js.map +0 -1
- package/dist/_chunks/alert-BlOUMkXj.js.map +0 -1
- package/dist/_chunks/apexcharts-theme-BkSShpEy.js.map +0 -1
- package/dist/_chunks/app-frame-6d7Lu4ea.js.map +0 -1
- package/dist/_chunks/aspect-ratio-DeSNzASA.js.map +0 -1
- package/dist/_chunks/audio-recorder.agent--VKeykUp.js.map +0 -1
- package/dist/_chunks/audio-visualiser-CeMPCZkd.js.map +0 -1
- package/dist/_chunks/autocomplete.agent-Dh7KioS6.js +0 -432
- package/dist/_chunks/autocomplete.agent-Dh7KioS6.js.map +0 -1
- package/dist/_chunks/avatar-Dcr6XuDQ.js.map +0 -1
- package/dist/_chunks/badge-mrstWxve.js.map +0 -1
- package/dist/_chunks/balance-cell-renderer-5CA7zpAi.js.map +0 -1
- package/dist/_chunks/breadcrumb.agent-GM2hAKFX.js.map +0 -1
- package/dist/_chunks/button-7mLWcMp_.js.map +0 -1
- package/dist/_chunks/button-group-CONver7M.js.map +0 -1
- package/dist/_chunks/button.agent-BuGZBktn.js.map +0 -1
- package/dist/_chunks/calendar-nGEgelJs.js.map +0 -1
- package/dist/_chunks/card-BEy58ZKp.js.map +0 -1
- package/dist/_chunks/chart.agent-_pRYS17d.js.map +0 -1
- package/dist/_chunks/chat-container-Dl0Kfy5a.js +0 -175
- package/dist/_chunks/chat-container-Dl0Kfy5a.js.map +0 -1
- package/dist/_chunks/chat-container.agent-CM4WModE.js +0 -27
- package/dist/_chunks/chat-container.agent-CM4WModE.js.map +0 -1
- package/dist/_chunks/chat-input-C_tMQv92.js +0 -252
- package/dist/_chunks/chat-input-C_tMQv92.js.map +0 -1
- package/dist/_chunks/chat-input.agent-Bsz3ckGa.js +0 -69
- package/dist/_chunks/chat-input.agent-Bsz3ckGa.js.map +0 -1
- package/dist/_chunks/chat-message-ByouZpPP.js.map +0 -1
- package/dist/_chunks/check-DPdL_Sm7.js.map +0 -1
- package/dist/_chunks/checkbox-CtPM6Rup.js.map +0 -1
- package/dist/_chunks/checkbox-group-BTdEB6Yo.js.map +0 -1
- package/dist/_chunks/chevron-down-BX_NP2Yh.js.map +0 -1
- package/dist/_chunks/chevron-left-CX1jqD2M.js.map +0 -1
- package/dist/_chunks/chevron-right-BrpYejk0.js.map +0 -1
- package/dist/_chunks/chevron-up-zOEDrmBB.js.map +0 -1
- package/dist/_chunks/chevrons-right-d9MwesPG.js.map +0 -1
- package/dist/_chunks/circle-BkqTgYmt.js.map +0 -1
- package/dist/_chunks/circle-alert-ChA9opNA.js.map +0 -1
- package/dist/_chunks/circle-check-9AeSgJD_.js.map +0 -1
- package/dist/_chunks/circle-x-Du2CmjaU.js.map +0 -1
- package/dist/_chunks/clock-21AGPWJ5.js.map +0 -1
- package/dist/_chunks/collapsible.agent-DkS1jVyn.js.map +0 -1
- package/dist/_chunks/color-picker-94qcBZqZ.js.map +0 -1
- package/dist/_chunks/combobox.agent-CAvUkkIe.js +0 -410
- package/dist/_chunks/combobox.agent-CAvUkkIe.js.map +0 -1
- package/dist/_chunks/command-palette.agent-HatEt_EM.js +0 -391
- package/dist/_chunks/command-palette.agent-HatEt_EM.js.map +0 -1
- package/dist/_chunks/compose-refs-C0k0tdqF.js.map +0 -1
- package/dist/_chunks/copy-B00HK7tj.js.map +0 -1
- package/dist/_chunks/createLucideIcon-CrFbzy84.js.map +0 -1
- package/dist/_chunks/date-picker-BqPTn7bO.js.map +0 -1
- package/dist/_chunks/date-range-picker-B2hGsffw.js.map +0 -1
- package/dist/_chunks/date-time-picker-Bzt0S8yO.js.map +0 -1
- package/dist/_chunks/description-list-DvJbp6Yg.js.map +0 -1
- package/dist/_chunks/dialog.agent-Daf1TTko.js +0 -179
- package/dist/_chunks/dialog.agent-Daf1TTko.js.map +0 -1
- package/dist/_chunks/dropdown-menu-C7AZipNz.js +0 -219
- package/dist/_chunks/dropdown-menu-C7AZipNz.js.map +0 -1
- package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js +0 -43
- package/dist/_chunks/dropdown-menu.agent-BcxIKOjK.js.map +0 -1
- package/dist/_chunks/ellipsis-rgGdiK_9.js.map +0 -1
- package/dist/_chunks/empty-state-DQPtRp2b.js.map +0 -1
- package/dist/_chunks/eye-off-xEXDAh5z.js.map +0 -1
- package/dist/_chunks/file-text-DSNuv2B8.js.map +0 -1
- package/dist/_chunks/file-upload.agent-DJaH2dHg.js +0 -681
- package/dist/_chunks/file-upload.agent-DJaH2dHg.js.map +0 -1
- package/dist/_chunks/flag-DZ6V7-hU.js.map +0 -1
- package/dist/_chunks/floating-action-button-Cnw-f6AG.js.map +0 -1
- package/dist/_chunks/form-field-BfsPLTSc.js.map +0 -1
- package/dist/_chunks/form-field-context-94LwgYTQ.js.map +0 -1
- package/dist/_chunks/freemium-paywall.agent-_nQqLyRF.js.map +0 -1
- package/dist/_chunks/globe-BkEFMNSg.js.map +0 -1
- package/dist/_chunks/group-options-BvKhQ3xb.js.map +0 -1
- package/dist/_chunks/header-BGn1mRp8.js.map +0 -1
- package/dist/_chunks/icon-button-Wnnde5lc.js.map +0 -1
- package/dist/_chunks/icon-button-group-DeV3FpNY.js.map +0 -1
- package/dist/_chunks/index-4xgbg-sn.js.map +0 -1
- package/dist/_chunks/index-CJE9uQmb.js.map +0 -1
- package/dist/_chunks/index-CeY1nNvd.js.map +0 -1
- package/dist/_chunks/index-D2ZczOXr.js.map +0 -1
- package/dist/_chunks/info-B9XNKn05.js.map +0 -1
- package/dist/_chunks/input-surface-u4QB0lxe.js.map +0 -1
- package/dist/_chunks/isSameDay-ecuM8PBB.js.map +0 -1
- package/dist/_chunks/isSameMonth-5wNF2f4I.js.map +0 -1
- package/dist/_chunks/kbd-8baVw3KU.js.map +0 -1
- package/dist/_chunks/key-value-pair-JRFS9Xrh.js.map +0 -1
- package/dist/_chunks/leo-sidebar-BwINPdix.js.map +0 -1
- package/dist/_chunks/link-QheANk74.js.map +0 -1
- package/dist/_chunks/list.agent-D0iWt4VI.js +0 -420
- package/dist/_chunks/list.agent-D0iWt4VI.js.map +0 -1
- package/dist/_chunks/live-region-C41SO3cA.js.map +0 -1
- package/dist/_chunks/log-out-616hnn2-.js.map +0 -1
- package/dist/_chunks/logo-BpFoCL-s.js.map +0 -1
- package/dist/_chunks/mail-C8irm52s.js.map +0 -1
- package/dist/_chunks/matrix-rain-BEkvux64.js.map +0 -1
- package/dist/_chunks/message-card-qhoGv947.js.map +0 -1
- package/dist/_chunks/message-card.agent-4IeIgrnJ.js.map +0 -1
- package/dist/_chunks/message-tray-xHUCra-Y.js.map +0 -1
- package/dist/_chunks/multi-select.agent-Do6CeQUT.js.map +0 -1
- package/dist/_chunks/navigation-menu.agent-D69ND6Qq.js.map +0 -1
- package/dist/_chunks/normalize-diacritics-BNGbFNlJ.js.map +0 -1
- package/dist/_chunks/notification-card-CsVEYJE-.js.map +0 -1
- package/dist/_chunks/notification-card.agent-Rqt3ofk9.js.map +0 -1
- package/dist/_chunks/notification-tray-DTXMq42J.js.map +0 -1
- package/dist/_chunks/number-input-fvGmnRy9.js.map +0 -1
- package/dist/_chunks/otp-input-EglXOUue.js.map +0 -1
- package/dist/_chunks/pagination.agent-BkZQl45y.js.map +0 -1
- package/dist/_chunks/password-input-D6kuYXmr.js.map +0 -1
- package/dist/_chunks/patient-shell-BRmrrUUW.js.map +0 -1
- package/dist/_chunks/payment-form-BWaXas8z.js.map +0 -1
- package/dist/_chunks/payment-form.agent-kuIfodCj.js +0 -31
- package/dist/_chunks/payment-form.agent-kuIfodCj.js.map +0 -1
- package/dist/_chunks/pdf-viewer.agent-BaGEDheA.js.map +0 -1
- package/dist/_chunks/phone-input-C8Op4sEc.js.map +0 -1
- package/dist/_chunks/plus-CYKNmfuA.js.map +0 -1
- package/dist/_chunks/popover-kFN8s84V.js +0 -229
- package/dist/_chunks/popover-kFN8s84V.js.map +0 -1
- package/dist/_chunks/popover.agent-K_d1cfbj.js +0 -39
- package/dist/_chunks/popover.agent-K_d1cfbj.js.map +0 -1
- package/dist/_chunks/printer-CeVEWfQq.js.map +0 -1
- package/dist/_chunks/privacy-lock.agent-C1i1-T58.js.map +0 -1
- package/dist/_chunks/progress-wNsqkw8I.js +0 -253
- package/dist/_chunks/progress-wNsqkw8I.js.map +0 -1
- package/dist/_chunks/progress.agent-C68rDOXL.js +0 -27
- package/dist/_chunks/progress.agent-C68rDOXL.js.map +0 -1
- package/dist/_chunks/purify.es-DpIUMBYC.js.map +0 -1
- package/dist/_chunks/radio-DvF59ThA.js.map +0 -1
- package/dist/_chunks/radio-group-Cz1a4QCA.js.map +0 -1
- package/dist/_chunks/react-day-picker-C04L_28V.js.map +0 -1
- package/dist/_chunks/recaptcha-widget.agent-BGHpU5zD.js.map +0 -1
- package/dist/_chunks/registry-C9nwlNyL.js.map +0 -1
- package/dist/_chunks/resizable.agent-CMwZzvsi.js +0 -456
- package/dist/_chunks/resizable.agent-CMwZzvsi.js.map +0 -1
- package/dist/_chunks/rich-text-editor.agent-DnE125Tz.js.map +0 -1
- package/dist/_chunks/safe-image-src-DstKgCo7.js.map +0 -1
- package/dist/_chunks/scroll-area-DLr5w9Dd.js.map +0 -1
- package/dist/_chunks/search-BonnQsHv.js.map +0 -1
- package/dist/_chunks/search-bar.agent-DxFAxctc.js.map +0 -1
- package/dist/_chunks/search-input-Xw3cdWXW.js.map +0 -1
- package/dist/_chunks/search-input.agent-CfZvViOd.js.map +0 -1
- package/dist/_chunks/select-DY1Cb2Tg.js.map +0 -1
- package/dist/_chunks/send-CySZIRPJ.js.map +0 -1
- package/dist/_chunks/separator-B4wXDLNC.js.map +0 -1
- package/dist/_chunks/sheet-B9kH9pcI.js.map +0 -1
- package/dist/_chunks/sheet.agent-QAyTOxgk.js +0 -46
- package/dist/_chunks/sheet.agent-QAyTOxgk.js.map +0 -1
- package/dist/_chunks/sidebar-CHF5xr_P.js.map +0 -1
- package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js +0 -49
- package/dist/_chunks/sidebar.agent-C9TM_ZDZ.js.map +0 -1
- package/dist/_chunks/sign-in-with-alfadocs-button-BN_FPGHT.js.map +0 -1
- package/dist/_chunks/signature-capture.agent-BpeDwFht.js.map +0 -1
- package/dist/_chunks/skeleton-dtqyF09N.js.map +0 -1
- package/dist/_chunks/skip-link-DmZ3c6cb.js.map +0 -1
- package/dist/_chunks/slider-CcsQTZTA.js.map +0 -1
- package/dist/_chunks/slot-grid-D_l5VsHG.js.map +0 -1
- package/dist/_chunks/sparkline.agent-56Sj7nOP.js.map +0 -1
- package/dist/_chunks/spinner-GCcv67vh.js.map +0 -1
- package/dist/_chunks/square-CZoGU14v.js.map +0 -1
- package/dist/_chunks/square-check-big-Jr-0202D.js.map +0 -1
- package/dist/_chunks/stat-DUB6g90R.js.map +0 -1
- package/dist/_chunks/stepper-C-sIpRRU.js.map +0 -1
- package/dist/_chunks/stepper-accordion.agent-ckKYZCIP.js.map +0 -1
- package/dist/_chunks/stepper-calendar.agent-9iT3ClIB.js.map +0 -1
- package/dist/_chunks/stepper-progress-Bmen-YXB.js +0 -149
- package/dist/_chunks/stepper-progress-Bmen-YXB.js.map +0 -1
- package/dist/_chunks/stepper-progress.agent-q9InWca4.js +0 -61
- package/dist/_chunks/stepper-progress.agent-q9InWca4.js.map +0 -1
- package/dist/_chunks/streaming-text-BgjCTVOw.js.map +0 -1
- package/dist/_chunks/suggestion-chip-DhFrkRPj.js.map +0 -1
- package/dist/_chunks/suggestion-chip.agent-6sNWFj7m.js.map +0 -1
- package/dist/_chunks/switch-BYEH8I53.js.map +0 -1
- package/dist/_chunks/tabs.agent-h7NvsTR1.js.map +0 -1
- package/dist/_chunks/tag-BqidXKo3.js.map +0 -1
- package/dist/_chunks/task-card-CY5ztNkU.js.map +0 -1
- package/dist/_chunks/task-card.agent-CUPKYd7w.js.map +0 -1
- package/dist/_chunks/task-tray-CCoUdorl.js.map +0 -1
- package/dist/_chunks/text-area-C_M8wliK.js.map +0 -1
- package/dist/_chunks/text-input-BX39e6T6.js.map +0 -1
- package/dist/_chunks/theme-root-DDb0TJjd.js.map +0 -1
- package/dist/_chunks/theme-toggle.agent-btmXTWdW.js.map +0 -1
- package/dist/_chunks/time-picker-B8AMIrX7.js.map +0 -1
- package/dist/_chunks/timeline.agent-CRPza9wc.js.map +0 -1
- package/dist/_chunks/timestamp-BV2lC-wV.js.map +0 -1
- package/dist/_chunks/toast.agent-BjEGuq1Z.js.map +0 -1
- package/dist/_chunks/tooltip-DHik5yRI.js.map +0 -1
- package/dist/_chunks/tooth-scheme.agent-CWrQBjJM.js.map +0 -1
- package/dist/_chunks/transcript-panel.agent-BXEYP6w-.js.map +0 -1
- package/dist/_chunks/triangle-alert-CBPUIzQo.js.map +0 -1
- package/dist/_chunks/typing-indicator-CbUBf-Dx.js.map +0 -1
- package/dist/_chunks/use-debounced-callback-BisrB-Fq.js.map +0 -1
- package/dist/_chunks/use-direction-D6rvvG9G.js.map +0 -1
- package/dist/_chunks/use-locale-BuXR_Zl9.js.map +0 -1
- package/dist/_chunks/use-prefers-reduced-motion-BMwIQRjB.js.map +0 -1
- package/dist/_chunks/use-theme-BMUhembX.js.map +0 -1
- package/dist/_chunks/user-CPxpqFjJ.js.map +0 -1
- package/dist/_chunks/visually-hidden-Bw7vBHLm.js.map +0 -1
- package/dist/_chunks/warning-stack-8Pa3pekh.js.map +0 -1
- package/dist/_chunks/workflow-map-D2A7rTEG.js.map +0 -1
- package/dist/_chunks/x-CCcI3eJp.js.map +0 -1
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/registry.d.ts.map +0 -1
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_BW.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Main.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Mark.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Neg.d.ts.map +0 -1
- package/dist/brand/logo-asset/Alfadocs_Logo_Purple.d.ts.map +0 -1
- package/dist/brand/logo-asset/index.d.ts.map +0 -1
- package/dist/components/_shared/calendar-chevron.d.ts.map +0 -1
- package/dist/components/_shared/compose-refs.d.ts.map +0 -1
- package/dist/components/_shared/date-locale.d.ts.map +0 -1
- package/dist/components/_shared/date-picker-variants.d.ts.map +0 -1
- package/dist/components/_shared/date-utils.d.ts.map +0 -1
- package/dist/components/_shared/group-options.d.ts.map +0 -1
- package/dist/components/_shared/index.d.ts.map +0 -1
- package/dist/components/_shared/input-surface.d.ts.map +0 -1
- package/dist/components/_shared/normalize-diacritics.d.ts.map +0 -1
- package/dist/components/_shared/option.d.ts.map +0 -1
- package/dist/components/_shared/safe-html.d.ts.map +0 -1
- package/dist/components/_shared/safe-image-src.d.ts.map +0 -1
- package/dist/components/_shared/stepper.d.ts.map +0 -1
- package/dist/components/_shared/time.d.ts.map +0 -1
- package/dist/components/_shared/use-debounced-callback.d.ts.map +0 -1
- package/dist/components/_shared/use-direction.d.ts.map +0 -1
- package/dist/components/_shared/use-focus-trap.d.ts.map +0 -1
- package/dist/components/_shared/use-neutralize-hidden-focus.d.ts.map +0 -1
- package/dist/components/accordion/accordion.agent.d.ts.map +0 -1
- package/dist/components/accordion/accordion.d.ts.map +0 -1
- package/dist/components/accordion/index.d.ts.map +0 -1
- package/dist/components/accordion/index.js.map +0 -1
- package/dist/components/agenda-card/agenda-card.agent.d.ts.map +0 -1
- package/dist/components/agenda-card/agenda-card.d.ts.map +0 -1
- package/dist/components/agenda-card/index.d.ts.map +0 -1
- package/dist/components/agenda-card/index.js.map +0 -1
- package/dist/components/agenda-tray/agenda-tray.agent.d.ts.map +0 -1
- package/dist/components/agenda-tray/agenda-tray.d.ts.map +0 -1
- package/dist/components/agenda-tray/index.d.ts.map +0 -1
- package/dist/components/agenda-tray/index.js.map +0 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.agent.d.ts.map +0 -1
- package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +0 -1
- package/dist/components/ai-prompt-input/index.d.ts.map +0 -1
- package/dist/components/ai-prompt-input/index.js.map +0 -1
- package/dist/components/alert/alert.d.ts.map +0 -1
- package/dist/components/alert/index.d.ts.map +0 -1
- package/dist/components/alert/index.js.map +0 -1
- package/dist/components/app-frame/app-frame.d.ts.map +0 -1
- package/dist/components/app-frame/index.d.ts.map +0 -1
- package/dist/components/app-frame/index.js.map +0 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +0 -1
- package/dist/components/aspect-ratio/index.d.ts.map +0 -1
- package/dist/components/aspect-ratio/index.js.map +0 -1
- package/dist/components/audio-recorder/audio-recorder.agent.d.ts.map +0 -1
- package/dist/components/audio-recorder/audio-recorder.d.ts.map +0 -1
- package/dist/components/audio-recorder/index.d.ts.map +0 -1
- package/dist/components/audio-recorder/index.js.map +0 -1
- package/dist/components/audio-visualiser/audio-visualiser.d.ts.map +0 -1
- package/dist/components/audio-visualiser/index.d.ts.map +0 -1
- package/dist/components/audio-visualiser/index.js.map +0 -1
- package/dist/components/autocomplete/autocomplete.agent.d.ts.map +0 -1
- package/dist/components/autocomplete/autocomplete.d.ts.map +0 -1
- package/dist/components/autocomplete/index.d.ts.map +0 -1
- package/dist/components/autocomplete/index.js.map +0 -1
- package/dist/components/avatar/avatar.d.ts.map +0 -1
- package/dist/components/avatar/index.d.ts.map +0 -1
- package/dist/components/avatar/index.js.map +0 -1
- package/dist/components/badge/badge.d.ts.map +0 -1
- package/dist/components/badge/index.d.ts.map +0 -1
- package/dist/components/badge/index.js.map +0 -1
- package/dist/components/breadcrumb/breadcrumb.agent.d.ts.map +0 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +0 -1
- package/dist/components/breadcrumb/index.d.ts.map +0 -1
- package/dist/components/breadcrumb/index.js.map +0 -1
- package/dist/components/button/button.agent.d.ts.map +0 -1
- package/dist/components/button/button.d.ts.map +0 -1
- package/dist/components/button/icon-button.d.ts.map +0 -1
- package/dist/components/button/index.d.ts.map +0 -1
- package/dist/components/button/index.js.map +0 -1
- package/dist/components/button-group/button-group.d.ts.map +0 -1
- package/dist/components/button-group/index.d.ts.map +0 -1
- package/dist/components/button-group/index.js.map +0 -1
- package/dist/components/calendar/calendar.agent.d.ts.map +0 -1
- package/dist/components/calendar/calendar.d.ts.map +0 -1
- package/dist/components/calendar/contrast-warning.d.ts.map +0 -1
- package/dist/components/calendar/index.d.ts.map +0 -1
- package/dist/components/calendar/index.js.map +0 -1
- package/dist/components/card/card.d.ts.map +0 -1
- package/dist/components/card/index.d.ts.map +0 -1
- package/dist/components/card/index.js.map +0 -1
- package/dist/components/chart/chart.agent.d.ts.map +0 -1
- package/dist/components/chart/chart.d.ts.map +0 -1
- package/dist/components/chart/index.d.ts.map +0 -1
- package/dist/components/chart/index.js.map +0 -1
- package/dist/components/chat-container/chat-container.agent.d.ts.map +0 -1
- package/dist/components/chat-container/chat-container.d.ts.map +0 -1
- package/dist/components/chat-container/index.d.ts.map +0 -1
- package/dist/components/chat-container/index.js.map +0 -1
- package/dist/components/chat-input/chat-input.agent.d.ts.map +0 -1
- package/dist/components/chat-input/chat-input.d.ts.map +0 -1
- package/dist/components/chat-input/index.d.ts.map +0 -1
- package/dist/components/chat-input/index.js.map +0 -1
- package/dist/components/chat-message/chat-message.d.ts.map +0 -1
- package/dist/components/chat-message/index.d.ts.map +0 -1
- package/dist/components/chat-message/index.js.map +0 -1
- package/dist/components/checkbox/checkbox-group-context.d.ts.map +0 -1
- package/dist/components/checkbox/checkbox.agent.d.ts.map +0 -1
- package/dist/components/checkbox/checkbox.d.ts.map +0 -1
- package/dist/components/checkbox/index.d.ts.map +0 -1
- package/dist/components/checkbox/index.js.map +0 -1
- package/dist/components/checkbox-group/checkbox-group.agent.d.ts.map +0 -1
- package/dist/components/checkbox-group/checkbox-group.d.ts.map +0 -1
- package/dist/components/checkbox-group/index.d.ts.map +0 -1
- package/dist/components/checkbox-group/index.js.map +0 -1
- package/dist/components/collapsible/collapsible.agent.d.ts.map +0 -1
- package/dist/components/collapsible/collapsible.d.ts.map +0 -1
- package/dist/components/collapsible/index.d.ts.map +0 -1
- package/dist/components/collapsible/index.js.map +0 -1
- package/dist/components/color-picker/color-picker.agent.d.ts.map +0 -1
- package/dist/components/color-picker/color-picker.d.ts.map +0 -1
- package/dist/components/color-picker/color-utils.d.ts.map +0 -1
- package/dist/components/color-picker/index.d.ts.map +0 -1
- package/dist/components/color-picker/index.js.map +0 -1
- package/dist/components/color-picker/palettes.d.ts.map +0 -1
- package/dist/components/combobox/combobox.agent.d.ts.map +0 -1
- package/dist/components/combobox/combobox.d.ts.map +0 -1
- package/dist/components/combobox/index.d.ts.map +0 -1
- package/dist/components/combobox/index.js.map +0 -1
- package/dist/components/command-palette/command-palette.agent.d.ts.map +0 -1
- package/dist/components/command-palette/command-palette.d.ts.map +0 -1
- package/dist/components/command-palette/index.d.ts.map +0 -1
- package/dist/components/command-palette/index.js.map +0 -1
- package/dist/components/data-table/cell-renderers/actions-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/balance-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/color-dot-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/currency-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/date-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/link-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/status-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/tag-list-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/toggle-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/cell-renderers/user-cell-renderer.d.ts.map +0 -1
- package/dist/components/data-table/data-table.agent.d.ts.map +0 -1
- package/dist/components/data-table/data-table.d.ts.map +0 -1
- package/dist/components/data-table/hooks/use-total-row.d.ts.map +0 -1
- package/dist/components/data-table/index.d.ts.map +0 -1
- package/dist/components/data-table/index.js.map +0 -1
- package/dist/components/data-table/toolbar.d.ts.map +0 -1
- package/dist/components/date-picker/date-picker.agent.d.ts.map +0 -1
- package/dist/components/date-picker/date-picker.d.ts.map +0 -1
- package/dist/components/date-picker/index.d.ts.map +0 -1
- package/dist/components/date-picker/index.js.map +0 -1
- package/dist/components/date-range-picker/date-range-picker.agent.d.ts.map +0 -1
- package/dist/components/date-range-picker/date-range-picker.d.ts.map +0 -1
- package/dist/components/date-range-picker/index.d.ts.map +0 -1
- package/dist/components/date-range-picker/index.js.map +0 -1
- package/dist/components/date-time-picker/date-time-picker.agent.d.ts.map +0 -1
- package/dist/components/date-time-picker/date-time-picker.d.ts.map +0 -1
- package/dist/components/date-time-picker/index.d.ts.map +0 -1
- package/dist/components/date-time-picker/index.js.map +0 -1
- package/dist/components/description-list/description-list.d.ts.map +0 -1
- package/dist/components/description-list/index.d.ts.map +0 -1
- package/dist/components/description-list/index.js.map +0 -1
- package/dist/components/dialog/dialog.agent.d.ts.map +0 -1
- package/dist/components/dialog/dialog.d.ts.map +0 -1
- package/dist/components/dialog/index.d.ts.map +0 -1
- package/dist/components/dialog/index.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
- package/dist/components/dropdown-menu/index.d.ts.map +0 -1
- package/dist/components/dropdown-menu/index.js.map +0 -1
- package/dist/components/empty-state/empty-state.d.ts.map +0 -1
- package/dist/components/empty-state/index.d.ts.map +0 -1
- package/dist/components/empty-state/index.js.map +0 -1
- package/dist/components/file-upload/file-upload.agent.d.ts.map +0 -1
- package/dist/components/file-upload/file-upload.d.ts.map +0 -1
- package/dist/components/file-upload/index.d.ts.map +0 -1
- package/dist/components/file-upload/index.js.map +0 -1
- package/dist/components/flag/flag.d.ts.map +0 -1
- package/dist/components/flag/index.d.ts.map +0 -1
- package/dist/components/flag/index.js.map +0 -1
- package/dist/components/floating-action-button/floating-action-button.d.ts.map +0 -1
- package/dist/components/floating-action-button/index.d.ts.map +0 -1
- package/dist/components/floating-action-button/index.js.map +0 -1
- package/dist/components/form-field/form-field-context.d.ts.map +0 -1
- package/dist/components/form-field/form-field.d.ts.map +0 -1
- package/dist/components/form-field/index.d.ts.map +0 -1
- package/dist/components/form-field/index.js.map +0 -1
- package/dist/components/freemium-paywall/freemium-paywall.agent.d.ts.map +0 -1
- package/dist/components/freemium-paywall/freemium-paywall.d.ts.map +0 -1
- package/dist/components/freemium-paywall/index.d.ts.map +0 -1
- package/dist/components/freemium-paywall/index.js.map +0 -1
- package/dist/components/header/header.d.ts.map +0 -1
- package/dist/components/header/index.d.ts.map +0 -1
- package/dist/components/header/index.js.map +0 -1
- package/dist/components/icon-button/index.d.ts.map +0 -1
- package/dist/components/icon-button/index.js.map +0 -1
- package/dist/components/icon-button-group/icon-button-group.d.ts.map +0 -1
- package/dist/components/icon-button-group/index.d.ts.map +0 -1
- package/dist/components/icon-button-group/index.js.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/kbd/index.d.ts.map +0 -1
- package/dist/components/kbd/index.js.map +0 -1
- package/dist/components/kbd/kbd.d.ts.map +0 -1
- package/dist/components/key-value-pair/index.d.ts.map +0 -1
- package/dist/components/key-value-pair/index.js.map +0 -1
- package/dist/components/key-value-pair/key-value-pair.d.ts.map +0 -1
- package/dist/components/link/index.d.ts.map +0 -1
- package/dist/components/link/index.js.map +0 -1
- package/dist/components/link/link.d.ts.map +0 -1
- package/dist/components/list/index.d.ts.map +0 -1
- package/dist/components/list/index.js.map +0 -1
- package/dist/components/list/list.agent.d.ts.map +0 -1
- package/dist/components/list/list.d.ts.map +0 -1
- package/dist/components/live-region/index.d.ts.map +0 -1
- package/dist/components/live-region/index.js.map +0 -1
- package/dist/components/live-region/live-region.d.ts.map +0 -1
- package/dist/components/logo/index.d.ts.map +0 -1
- package/dist/components/logo/index.js.map +0 -1
- package/dist/components/logo/logo.d.ts.map +0 -1
- package/dist/components/matrix-rain/index.d.ts.map +0 -1
- package/dist/components/matrix-rain/index.js.map +0 -1
- package/dist/components/matrix-rain/matrix-rain.d.ts.map +0 -1
- package/dist/components/message-card/index.d.ts.map +0 -1
- package/dist/components/message-card/index.js.map +0 -1
- package/dist/components/message-card/message-card.agent.d.ts.map +0 -1
- package/dist/components/message-card/message-card.d.ts.map +0 -1
- package/dist/components/message-tray/index.d.ts.map +0 -1
- package/dist/components/message-tray/index.js.map +0 -1
- package/dist/components/message-tray/message-tray.agent.d.ts.map +0 -1
- package/dist/components/message-tray/message-tray.d.ts.map +0 -1
- package/dist/components/multi-select/index.d.ts.map +0 -1
- package/dist/components/multi-select/index.js.map +0 -1
- package/dist/components/multi-select/multi-select.agent.d.ts.map +0 -1
- package/dist/components/multi-select/multi-select.d.ts.map +0 -1
- package/dist/components/navigation-menu/index.d.ts.map +0 -1
- package/dist/components/navigation-menu/index.js.map +0 -1
- package/dist/components/navigation-menu/navigation-menu.agent.d.ts.map +0 -1
- package/dist/components/navigation-menu/navigation-menu.d.ts.map +0 -1
- package/dist/components/notification-card/index.d.ts.map +0 -1
- package/dist/components/notification-card/index.js.map +0 -1
- package/dist/components/notification-card/notification-card.agent.d.ts.map +0 -1
- package/dist/components/notification-card/notification-card.d.ts.map +0 -1
- package/dist/components/notification-tray/index.d.ts.map +0 -1
- package/dist/components/notification-tray/index.js.map +0 -1
- package/dist/components/notification-tray/notification-tray.agent.d.ts.map +0 -1
- package/dist/components/notification-tray/notification-tray.d.ts.map +0 -1
- package/dist/components/number-input/index.d.ts.map +0 -1
- package/dist/components/number-input/index.js.map +0 -1
- package/dist/components/number-input/number-input.agent.d.ts.map +0 -1
- package/dist/components/number-input/number-input.d.ts.map +0 -1
- package/dist/components/number-input/use-locale-number.d.ts.map +0 -1
- package/dist/components/otp-input/index.d.ts.map +0 -1
- package/dist/components/otp-input/index.js.map +0 -1
- package/dist/components/otp-input/otp-input.agent.d.ts.map +0 -1
- package/dist/components/otp-input/otp-input.d.ts.map +0 -1
- package/dist/components/pagination/index.d.ts.map +0 -1
- package/dist/components/pagination/index.js.map +0 -1
- package/dist/components/pagination/pagination.agent.d.ts.map +0 -1
- package/dist/components/pagination/pagination.d.ts.map +0 -1
- package/dist/components/password-input/index.d.ts.map +0 -1
- package/dist/components/password-input/index.js.map +0 -1
- package/dist/components/password-input/password-input.agent.d.ts.map +0 -1
- package/dist/components/password-input/password-input.d.ts.map +0 -1
- package/dist/components/payment-form/index.d.ts.map +0 -1
- package/dist/components/payment-form/index.js.map +0 -1
- package/dist/components/payment-form/payment-form.agent.d.ts.map +0 -1
- package/dist/components/payment-form/payment-form.d.ts.map +0 -1
- package/dist/components/pdf-viewer/index.d.ts.map +0 -1
- package/dist/components/pdf-viewer/index.js.map +0 -1
- package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +0 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +0 -1
- package/dist/components/phone-input/index.d.ts.map +0 -1
- package/dist/components/phone-input/index.js.map +0 -1
- package/dist/components/phone-input/phone-input.agent.d.ts.map +0 -1
- package/dist/components/phone-input/phone-input.d.ts.map +0 -1
- package/dist/components/popover/index.d.ts.map +0 -1
- package/dist/components/popover/index.js.map +0 -1
- package/dist/components/popover/popover.agent.d.ts.map +0 -1
- package/dist/components/popover/popover.d.ts.map +0 -1
- package/dist/components/privacy-lock/index.d.ts.map +0 -1
- package/dist/components/privacy-lock/index.js.map +0 -1
- package/dist/components/privacy-lock/privacy-lock.agent.d.ts.map +0 -1
- package/dist/components/privacy-lock/privacy-lock.d.ts.map +0 -1
- package/dist/components/progress/index.d.ts.map +0 -1
- package/dist/components/progress/index.js.map +0 -1
- package/dist/components/progress/progress.agent.d.ts.map +0 -1
- package/dist/components/progress/progress.d.ts.map +0 -1
- package/dist/components/radio/index.d.ts.map +0 -1
- package/dist/components/radio/index.js.map +0 -1
- package/dist/components/radio-group/index.d.ts.map +0 -1
- package/dist/components/radio-group/index.js.map +0 -1
- package/dist/components/radio-group/radio-group-context.d.ts.map +0 -1
- package/dist/components/radio-group/radio-group.agent.d.ts.map +0 -1
- package/dist/components/radio-group/radio-group.d.ts.map +0 -1
- package/dist/components/radio-group/radio.d.ts.map +0 -1
- package/dist/components/recaptcha-widget/index.d.ts.map +0 -1
- package/dist/components/recaptcha-widget/index.js.map +0 -1
- package/dist/components/recaptcha-widget/recaptcha-widget.agent.d.ts.map +0 -1
- package/dist/components/recaptcha-widget/recaptcha-widget.d.ts.map +0 -1
- package/dist/components/resizable/index.d.ts.map +0 -1
- package/dist/components/resizable/index.js.map +0 -1
- package/dist/components/resizable/resizable-context.d.ts.map +0 -1
- package/dist/components/resizable/resizable.agent.d.ts.map +0 -1
- package/dist/components/resizable/resizable.d.ts.map +0 -1
- package/dist/components/rich-text-editor/index.d.ts.map +0 -1
- package/dist/components/rich-text-editor/index.js.map +0 -1
- package/dist/components/rich-text-editor/rich-text-editor.agent.d.ts.map +0 -1
- package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +0 -1
- package/dist/components/scroll-area/index.d.ts.map +0 -1
- package/dist/components/scroll-area/index.js.map +0 -1
- package/dist/components/scroll-area/scroll-area.d.ts.map +0 -1
- package/dist/components/search-bar/index.d.ts.map +0 -1
- package/dist/components/search-bar/index.js.map +0 -1
- package/dist/components/search-bar/search-bar.agent.d.ts.map +0 -1
- package/dist/components/search-bar/search-bar.d.ts.map +0 -1
- package/dist/components/search-input/index.d.ts.map +0 -1
- package/dist/components/search-input/index.js.map +0 -1
- package/dist/components/search-input/search-input.agent.d.ts.map +0 -1
- package/dist/components/search-input/search-input.d.ts.map +0 -1
- package/dist/components/select/index.d.ts.map +0 -1
- package/dist/components/select/index.js.map +0 -1
- package/dist/components/select/select.agent.d.ts.map +0 -1
- package/dist/components/select/select.d.ts.map +0 -1
- package/dist/components/separator/index.d.ts.map +0 -1
- package/dist/components/separator/index.js.map +0 -1
- package/dist/components/separator/separator.d.ts.map +0 -1
- package/dist/components/sheet/index.d.ts.map +0 -1
- package/dist/components/sheet/index.js.map +0 -1
- package/dist/components/sheet/sheet.agent.d.ts.map +0 -1
- package/dist/components/sheet/sheet.d.ts.map +0 -1
- package/dist/components/sidebar/index.d.ts.map +0 -1
- package/dist/components/sidebar/index.js.map +0 -1
- package/dist/components/sidebar/sidebar.agent.d.ts.map +0 -1
- package/dist/components/sidebar/sidebar.d.ts.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/index.d.ts.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/index.js.map +0 -1
- package/dist/components/sign-in-with-alfadocs-button/sign-in-with-alfadocs-button.d.ts.map +0 -1
- package/dist/components/signature-capture/index.d.ts.map +0 -1
- package/dist/components/signature-capture/index.js.map +0 -1
- package/dist/components/signature-capture/signature-capture.agent.d.ts.map +0 -1
- package/dist/components/signature-capture/signature-capture.d.ts.map +0 -1
- package/dist/components/skeleton/index.d.ts.map +0 -1
- package/dist/components/skeleton/index.js.map +0 -1
- package/dist/components/skeleton/skeleton.d.ts.map +0 -1
- package/dist/components/skip-link/index.d.ts.map +0 -1
- package/dist/components/skip-link/index.js.map +0 -1
- package/dist/components/skip-link/skip-link.d.ts.map +0 -1
- package/dist/components/slider/index.d.ts.map +0 -1
- package/dist/components/slider/index.js.map +0 -1
- package/dist/components/slider/slider.agent.d.ts.map +0 -1
- package/dist/components/slider/slider.d.ts.map +0 -1
- package/dist/components/slot-grid/index.d.ts.map +0 -1
- package/dist/components/slot-grid/index.js.map +0 -1
- package/dist/components/slot-grid/slot-grid.d.ts.map +0 -1
- package/dist/components/sparkline/index.d.ts.map +0 -1
- package/dist/components/sparkline/index.js.map +0 -1
- package/dist/components/sparkline/sparkline.agent.d.ts.map +0 -1
- package/dist/components/sparkline/sparkline.d.ts.map +0 -1
- package/dist/components/sparkline/use-linear-trend.d.ts.map +0 -1
- package/dist/components/spinner/index.d.ts.map +0 -1
- package/dist/components/spinner/index.js.map +0 -1
- package/dist/components/spinner/spinner.d.ts.map +0 -1
- package/dist/components/stat/index.d.ts.map +0 -1
- package/dist/components/stat/index.js.map +0 -1
- package/dist/components/stat/stat.d.ts.map +0 -1
- package/dist/components/stepper-accordion/index.d.ts.map +0 -1
- package/dist/components/stepper-accordion/index.js.map +0 -1
- package/dist/components/stepper-accordion/stepper-accordion.agent.d.ts.map +0 -1
- package/dist/components/stepper-accordion/stepper-accordion.d.ts.map +0 -1
- package/dist/components/stepper-calendar/index.d.ts.map +0 -1
- package/dist/components/stepper-calendar/index.js.map +0 -1
- package/dist/components/stepper-calendar/stepper-calendar.agent.d.ts.map +0 -1
- package/dist/components/stepper-calendar/stepper-calendar.d.ts.map +0 -1
- package/dist/components/stepper-progress/index.d.ts.map +0 -1
- package/dist/components/stepper-progress/index.js.map +0 -1
- package/dist/components/stepper-progress/stepper-progress.agent.d.ts.map +0 -1
- package/dist/components/stepper-progress/stepper-progress.d.ts.map +0 -1
- package/dist/components/streaming-text/index.d.ts.map +0 -1
- package/dist/components/streaming-text/index.js.map +0 -1
- package/dist/components/streaming-text/streaming-text.d.ts.map +0 -1
- package/dist/components/suggestion-chip/index.d.ts.map +0 -1
- package/dist/components/suggestion-chip/index.js.map +0 -1
- package/dist/components/suggestion-chip/suggestion-chip.agent.d.ts.map +0 -1
- package/dist/components/suggestion-chip/suggestion-chip.d.ts.map +0 -1
- package/dist/components/switch/index.d.ts.map +0 -1
- package/dist/components/switch/index.js.map +0 -1
- package/dist/components/switch/switch.agent.d.ts.map +0 -1
- package/dist/components/switch/switch.d.ts.map +0 -1
- package/dist/components/tabs/index.d.ts.map +0 -1
- package/dist/components/tabs/index.js.map +0 -1
- package/dist/components/tabs/tabs.agent.d.ts.map +0 -1
- package/dist/components/tabs/tabs.d.ts.map +0 -1
- package/dist/components/tag/index.d.ts.map +0 -1
- package/dist/components/tag/index.js.map +0 -1
- package/dist/components/tag/tag.d.ts.map +0 -1
- package/dist/components/task-card/index.d.ts.map +0 -1
- package/dist/components/task-card/index.js.map +0 -1
- package/dist/components/task-card/task-card.agent.d.ts.map +0 -1
- package/dist/components/task-card/task-card.d.ts.map +0 -1
- package/dist/components/task-tray/index.d.ts.map +0 -1
- package/dist/components/task-tray/index.js.map +0 -1
- package/dist/components/task-tray/task-tray.agent.d.ts.map +0 -1
- package/dist/components/task-tray/task-tray.d.ts.map +0 -1
- package/dist/components/text-area/index.d.ts.map +0 -1
- package/dist/components/text-area/index.js.map +0 -1
- package/dist/components/text-area/text-area.agent.d.ts.map +0 -1
- package/dist/components/text-area/text-area.d.ts.map +0 -1
- package/dist/components/text-input/index.d.ts.map +0 -1
- package/dist/components/text-input/index.js.map +0 -1
- package/dist/components/text-input/text-input.agent.d.ts.map +0 -1
- package/dist/components/text-input/text-input.d.ts.map +0 -1
- package/dist/components/theme-root/index.d.ts.map +0 -1
- package/dist/components/theme-root/index.js.map +0 -1
- package/dist/components/theme-root/theme-root.d.ts.map +0 -1
- package/dist/components/theme-toggle/index.d.ts.map +0 -1
- package/dist/components/theme-toggle/index.js.map +0 -1
- package/dist/components/theme-toggle/theme-toggle.agent.d.ts.map +0 -1
- package/dist/components/theme-toggle/theme-toggle.d.ts.map +0 -1
- package/dist/components/time-picker/index.d.ts.map +0 -1
- package/dist/components/time-picker/index.js.map +0 -1
- package/dist/components/time-picker/time-picker.agent.d.ts.map +0 -1
- package/dist/components/time-picker/time-picker.d.ts.map +0 -1
- package/dist/components/timeline/index.d.ts.map +0 -1
- package/dist/components/timeline/index.js.map +0 -1
- package/dist/components/timeline/timeline.agent.d.ts.map +0 -1
- package/dist/components/timeline/timeline.d.ts.map +0 -1
- package/dist/components/timestamp/index.d.ts.map +0 -1
- package/dist/components/timestamp/index.js.map +0 -1
- package/dist/components/timestamp/timestamp.d.ts.map +0 -1
- package/dist/components/toast/index.d.ts.map +0 -1
- package/dist/components/toast/index.js.map +0 -1
- package/dist/components/toast/toast.agent.d.ts.map +0 -1
- package/dist/components/toast/toast.d.ts.map +0 -1
- package/dist/components/tooltip/index.d.ts.map +0 -1
- package/dist/components/tooltip/index.js.map +0 -1
- package/dist/components/tooltip/tooltip.d.ts.map +0 -1
- package/dist/components/tooth-scheme/index.d.ts.map +0 -1
- package/dist/components/tooth-scheme/index.js.map +0 -1
- package/dist/components/tooth-scheme/tooth-data.d.ts.map +0 -1
- package/dist/components/tooth-scheme/tooth-scheme.agent.d.ts.map +0 -1
- package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +0 -1
- package/dist/components/transcript-panel/index.d.ts.map +0 -1
- package/dist/components/transcript-panel/index.js.map +0 -1
- package/dist/components/transcript-panel/transcript-panel.agent.d.ts.map +0 -1
- package/dist/components/transcript-panel/transcript-panel.d.ts.map +0 -1
- package/dist/components/typing-indicator/index.d.ts.map +0 -1
- package/dist/components/typing-indicator/index.js.map +0 -1
- package/dist/components/typing-indicator/typing-indicator.d.ts.map +0 -1
- package/dist/components/visually-hidden/index.d.ts.map +0 -1
- package/dist/components/visually-hidden/index.js.map +0 -1
- package/dist/components/visually-hidden/visually-hidden.d.ts.map +0 -1
- package/dist/components/warning-stack/index.d.ts.map +0 -1
- package/dist/components/warning-stack/index.js.map +0 -1
- package/dist/components/warning-stack/warning-stack.d.ts.map +0 -1
- package/dist/components/workflow/index.d.ts.map +0 -1
- package/dist/components/workflow/index.js.map +0 -1
- package/dist/components/workflow/workflow-card.d.ts.map +0 -1
- package/dist/components/workflow/workflow-editor.d.ts.map +0 -1
- package/dist/components/workflow/workflow-map.d.ts.map +0 -1
- package/dist/components/workflow/workflow-types.d.ts.map +0 -1
- package/dist/components/workflow/workflow.agent.d.ts.map +0 -1
- package/dist/hooks/index.d.ts.map +0 -1
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/use-locale.d.ts.map +0 -1
- package/dist/hooks/use-media-query.d.ts.map +0 -1
- package/dist/hooks/use-prefers-reduced-motion.d.ts.map +0 -1
- package/dist/hooks/use-theme.d.ts.map +0 -1
- package/dist/i18n/config.d.ts.map +0 -1
- package/dist/i18n/config.js.map +0 -1
- package/dist/i18n/resources.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/option/index.js.map +0 -1
- package/dist/patterns/leo-assistant/index.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/index.js.map +0 -1
- package/dist/patterns/leo-assistant/leo-chat-surface.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-embedded.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-popout.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-sidebar.d.ts.map +0 -1
- package/dist/patterns/leo-assistant/leo-types.d.ts.map +0 -1
- package/dist/patterns/patient-shell/index.d.ts.map +0 -1
- package/dist/patterns/patient-shell/index.js.map +0 -1
- package/dist/patterns/patient-shell/patient-shell.d.ts.map +0 -1
- package/dist/safe-html/index.js.map +0 -1
- package/dist/tokens/apexcharts-theme.d.ts.map +0 -1
- package/dist/tokens/themes/bridges/stripe-appearance.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rich-text-editor.agent-DnE125Tz.js","sources":["../../node_modules/lucide-react/dist/esm/icons/bold.js","../../node_modules/lucide-react/dist/esm/icons/code.js","../../node_modules/lucide-react/dist/esm/icons/image.js","../../node_modules/lucide-react/dist/esm/icons/italic.js","../../node_modules/lucide-react/dist/esm/icons/link-2.js","../../node_modules/lucide-react/dist/esm/icons/list-ordered.js","../../node_modules/lucide-react/dist/esm/icons/list.js","../../node_modules/lucide-react/dist/esm/icons/minus.js","../../node_modules/lucide-react/dist/esm/icons/quote.js","../../node_modules/lucide-react/dist/esm/icons/redo.js","../../node_modules/lucide-react/dist/esm/icons/table.js","../../node_modules/lucide-react/dist/esm/icons/undo.js","../../src/components/rich-text-editor/rich-text-editor.tsx","../../src/components/rich-text-editor/rich-text-editor.agent.ts"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8\", key: \"mg9rjx\" }\n ]\n];\nconst Bold = createLucideIcon(\"bold\", __iconNode);\n\nexport { __iconNode, Bold as default };\n//# sourceMappingURL=bold.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 18 6-6-6-6\", key: \"eg8j8\" }],\n [\"path\", { d: \"m8 6-6 6 6 6\", key: \"ppft3o\" }]\n];\nconst Code = createLucideIcon(\"code\", __iconNode);\n\nexport { __iconNode, Code as default };\n//# sourceMappingURL=code.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n];\nconst Image = createLucideIcon(\"image\", __iconNode);\n\nexport { __iconNode, Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"line\", { x1: \"19\", x2: \"10\", y1: \"4\", y2: \"4\", key: \"15jd3p\" }],\n [\"line\", { x1: \"14\", x2: \"5\", y1: \"20\", y2: \"20\", key: \"bu0au3\" }],\n [\"line\", { x1: \"15\", x2: \"9\", y1: \"4\", y2: \"20\", key: \"uljnxc\" }]\n];\nconst Italic = createLucideIcon(\"italic\", __iconNode);\n\nexport { __iconNode, Italic as default };\n//# sourceMappingURL=italic.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n];\nconst Link2 = createLucideIcon(\"link-2\", __iconNode);\n\nexport { __iconNode, Link2 as default };\n//# sourceMappingURL=link-2.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M11 5h10\", key: \"1cz7ny\" }],\n [\"path\", { d: \"M11 12h10\", key: \"1438ji\" }],\n [\"path\", { d: \"M11 19h10\", key: \"11t30w\" }],\n [\"path\", { d: \"M4 4h1v5\", key: \"10yrso\" }],\n [\"path\", { d: \"M4 9h2\", key: \"r1h2o0\" }],\n [\"path\", { d: \"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02\", key: \"xtkcd5\" }]\n];\nconst ListOrdered = createLucideIcon(\"list-ordered\", __iconNode);\n\nexport { __iconNode, ListOrdered as default };\n//# sourceMappingURL=list-ordered.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 5h.01\", key: \"18ugdj\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M3 19h.01\", key: \"noohij\" }],\n [\"path\", { d: \"M8 5h13\", key: \"1pao27\" }],\n [\"path\", { d: \"M8 12h13\", key: \"1za7za\" }],\n [\"path\", { d: \"M8 19h13\", key: \"m83p4d\" }]\n];\nconst List = createLucideIcon(\"list\", __iconNode);\n\nexport { __iconNode, List as default };\n//# sourceMappingURL=list.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }]];\nconst Minus = createLucideIcon(\"minus\", __iconNode);\n\nexport { __iconNode, Minus as default };\n//# sourceMappingURL=minus.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z\",\n key: \"rib7q0\"\n }\n ],\n [\n \"path\",\n {\n d: \"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z\",\n key: \"1ymkrd\"\n }\n ]\n];\nconst Quote = createLucideIcon(\"quote\", __iconNode);\n\nexport { __iconNode, Quote as default };\n//# sourceMappingURL=quote.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 7v6h-6\", key: \"3ptur4\" }],\n [\"path\", { d: \"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\", key: \"1kgawr\" }]\n];\nconst Redo = createLucideIcon(\"redo\", __iconNode);\n\nexport { __iconNode, Redo as default };\n//# sourceMappingURL=redo.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 3v18\", key: \"108xh3\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M3 9h18\", key: \"1pudct\" }],\n [\"path\", { d: \"M3 15h18\", key: \"5xshup\" }]\n];\nconst Table = createLucideIcon(\"table\", __iconNode);\n\nexport { __iconNode, Table as default };\n//# sourceMappingURL=table.js.map\n","/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 7v6h6\", key: \"1v2h90\" }],\n [\"path\", { d: \"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\", key: \"1r6uu6\" }]\n];\nconst Undo = createLucideIcon(\"undo\", __iconNode);\n\nexport { __iconNode, Undo as default };\n//# sourceMappingURL=undo.js.map\n","/* ------------------------------------------------------------------ */\n/* RichTextEditor — thin, secure wrapper over Tiptap (`@tiptap/react`). */\n/* */\n/* - Extensions: StarterKit + Link + Image + Table family + */\n/* tiptap-markdown. Static imports — no lazy loading in this pass */\n/* (see TODO below). */\n/* - Security: a `transformPastedHTML` hook runs everything pasted */\n/* through DOMPurify with an explicit FORBID list, and the imperative*/\n/* `setContent` handle reuses the same sanitiser. */\n/* - Link: the scheme allow-list is `http | https | mailto | tel`. */\n/* `javascript:` and `data:` hrefs are rejected by the `validate` */\n/* callback. */\n/* - Accessibility: toolbar is a WAI-ARIA toolbar with roving */\n/* tabindex, Home/End/ArrowLeft/ArrowRight semantics, `aria-pressed` */\n/* reflecting `editor.isActive(...)`, and `aria-disabled` in place */\n/* of the `disabled` HTML attribute so screen readers can still */\n/* focus the controls. */\n/* - i18n: every tooltip / aria-label comes from `t('editor.*')`. */\n/* Placeholder default goes through `t('editor.placeholder')`. */\n/* When `document.dir === 'rtl'` the toolbar mirrors via a CVA */\n/* compound variant. */\n/* - Cmd/Ctrl+/ opens a Radix Dialog with the keyboard-shortcut */\n/* cheat sheet (all strings translated). */\n/* */\n/* TODO: dynamic `import()` of heavier extensions (image, table) once */\n/* the bundle-split story is set up. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport { useEditor, EditorContent, type Editor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Link from '@tiptap/extension-link';\nimport Image from '@tiptap/extension-image';\nimport { Table } from '@tiptap/extension-table';\nimport TableRow from '@tiptap/extension-table-row';\nimport TableCell from '@tiptap/extension-table-cell';\nimport TableHeader from '@tiptap/extension-table-header';\nimport { Markdown } from 'tiptap-markdown';\nimport DOMPurify, { type Config as DOMPurifyConfig } from 'dompurify';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport {\n Bold,\n Italic,\n Link2,\n List,\n ListOrdered,\n Quote,\n Image as ImageIcon,\n Table as TableIcon,\n Code,\n Minus,\n Undo,\n Redo,\n ChevronDown,\n X,\n} from 'lucide-react';\n\nimport '../../tokens/themes/bridges/tiptap-theme.css';\n\nimport { safeImageSrc } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Sanitisation */\n/* ------------------------------------------------------------------ */\n\n// DOMPurify strips all `on*` attributes by defaults; the explicit FORBID_ATTR\n// list is defence-in-depth, not a replacement for defaults. FORBID_TAGS adds\n// tags that aren't stripped by defaults in every configuration: `<form>` (CSRF\n// via action injection), `<object>`/`<embed>` (plugin surface), `<base>`/\n// `<meta>` (URL rewriting). See user story security-hardening.mdx.\nconst PURIFY_CONFIG: DOMPurifyConfig = {\n FORBID_TAGS: [\n 'script',\n 'style',\n 'iframe',\n 'object',\n 'embed',\n 'form',\n 'base',\n 'meta',\n ],\n FORBID_ATTR: [\n 'onerror',\n 'onclick',\n 'onload',\n 'onmouseover',\n 'onfocus',\n 'onblur',\n ],\n};\n\nfunction sanitiseHtml(input: string): string {\n return DOMPurify.sanitize(input, PURIFY_CONFIG) as unknown as string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type RichTextEditorToolbar = 'minimal' | 'standard' | 'full';\n\nexport interface RichTextEditorProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** HTML or Markdown initial value. Runs through DOMPurify. */\n defaultValue?: string;\n /** Controlled value (HTML). */\n value?: string;\n /** Emits on every change — debounced by 100ms. */\n onChange?: (payload: { html: string; markdown: string }) => void;\n /** Toolbar preset. */\n toolbar?: RichTextEditorToolbar;\n /** Placeholder text — translates via useTranslation if omitted. */\n placeholder?: string;\n /** Read-only mode. */\n readOnly?: boolean;\n /** Accessible name for the editing region. */\n ariaLabel?: string;\n /** Size variant for the minimum block-size of the editing region. */\n minHeight?: 'sm' | 'md' | 'lg';\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport interface RichTextEditorHandle {\n getHTML: () => string;\n getMarkdown: () => string;\n /** HTML goes through DOMPurify before reaching Tiptap. */\n setContent: (html: string) => void;\n focus: () => void;\n clear: () => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva(\n 'tiptap-theme-alfadocs ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n);\n\nconst toolbarVariants = cva(\n [\n 'ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:p-[var(--spacing-xs)]',\n ].join(' '),\n {\n variants: {\n direction: {\n ltr: '',\n rtl: 'ds:flex-row-reverse',\n },\n },\n defaultVariants: { direction: 'ltr' },\n },\n);\n\nconst toolbarButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:gap-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:bg-transparent ds:text-[var(--foreground)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n ].join(' '),\n {\n variants: {\n pressed: {\n true: 'ds:bg-[var(--muted)] ds:text-[var(--primary)]',\n false: '',\n },\n disabled: {\n true: 'ds:opacity-[var(--opacity-50)] ds:cursor-not-allowed',\n false: '',\n },\n },\n defaultVariants: { pressed: false, disabled: false },\n },\n);\n\nconst editorSurfaceVariants = cva(\n [\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)] ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Toolbar presets — which commands to expose */\n/* ------------------------------------------------------------------ */\n\ntype ToolbarItemKey =\n | 'bold'\n | 'italic'\n | 'link'\n | 'heading'\n | 'bulletList'\n | 'orderedList'\n | 'quote'\n | 'image'\n | 'table'\n | 'codeBlock'\n | 'horizontalRule'\n | 'undo'\n | 'redo';\n\nconst PRESETS: Record<RichTextEditorToolbar, ToolbarItemKey[]> = {\n minimal: ['bold', 'italic', 'link'],\n standard: [\n 'bold',\n 'italic',\n 'link',\n 'heading',\n 'bulletList',\n 'orderedList',\n 'quote',\n ],\n full: [\n 'bold',\n 'italic',\n 'link',\n 'heading',\n 'bulletList',\n 'orderedList',\n 'quote',\n 'image',\n 'table',\n 'codeBlock',\n 'horizontalRule',\n 'undo',\n 'redo',\n ],\n};\n\n/* ------------------------------------------------------------------ */\n/* Heading dropdown (Radix-free to keep the toolbar in one <div>) */\n/* The dropdown is a `details`-free popover implemented with a button */\n/* + a collapsible listbox wired into the roving-tabindex loop. */\n/* ------------------------------------------------------------------ */\n\ninterface HeadingSelectProps {\n editor: Editor;\n registerRef: (el: HTMLButtonElement | null) => void;\n tabIndex: number;\n onFocus: () => void;\n onKeyDown: (event: ReactKeyboardEvent<HTMLButtonElement>) => void;\n label: string;\n disabled: boolean;\n pressed: boolean;\n}\n\nfunction HeadingSelect({\n editor,\n registerRef,\n tabIndex,\n onFocus,\n onKeyDown,\n label,\n disabled,\n pressed,\n}: HeadingSelectProps): ReactNode {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return undefined;\n function handler(event: globalThis.MouseEvent) {\n const target = event.target as Node | null;\n if (rootRef.current && target && !rootRef.current.contains(target)) {\n setOpen(false);\n }\n }\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n function apply(level: 1 | 2 | 3): void {\n editor.chain().focus().toggleHeading({ level }).run();\n setOpen(false);\n }\n\n return (\n <div ref={rootRef} className=\"ds:relative ds:inline-flex\">\n <button\n type=\"button\"\n ref={registerRef}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onClick={() => {\n if (!disabled) setOpen((v) => !v);\n }}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-disabled={disabled || undefined}\n aria-label={label}\n title={label}\n className={toolbarButtonVariants({ pressed, disabled })}\n >\n <span aria-hidden=\"true\" className=\"ds:text-[length:var(--font-size-sm)] ds:font-semibold\">\n H\n </span>\n <ChevronDown aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />\n </button>\n {open && !disabled ? (\n <ul\n role=\"listbox\"\n aria-label={label}\n className={[\n 'ds:absolute ds:top-full ds:mt-[var(--spacing-xs)] ds:start-0 ds:z-[var(--z-dropdown)]',\n 'ds:min-inline-size-[8rem] ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)] ds:bg-[var(--background)]',\n 'ds:shadow-[var(--shadow-lg)] ds:p-[var(--spacing-xs)]',\n ].join(' ')}\n >\n {[1, 2, 3].map((level) => (\n <li key={level} role=\"none\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={editor.isActive('heading', { level }) || undefined}\n onClick={() => apply(level as 1 | 2 | 3)}\n className={[\n 'ds:flex ds:w-full ds:items-center',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)] ds:text-start',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n {`H${level}`}\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Keyboard-shortcuts cheat sheet */\n/* ------------------------------------------------------------------ */\n\ninterface ShortcutsDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\nfunction ShortcutsDialog({ open, onOpenChange }: ShortcutsDialogProps): ReactNode {\n const { t } = useTranslation();\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n ].join(' ')}\n />\n <RadixDialog.Content\n className={[\n 'ds:fixed ds:z-[var(--z-modal)]',\n 'ds:start-1/2 ds:top-1/2 ds:-translate-x-1/2 ds:-translate-y-1/2',\n 'ds:w-[calc(100%-var(--spacing-lg)*2)] ds:max-w-[var(--dialog-width-md)]',\n 'ds:rounded-[var(--radius-lg)]',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)] ds:p-[var(--spacing-lg)]',\n 'ds:focus-visible:outline-none',\n ].join(' ')}\n >\n <div className=\"ds:flex ds:items-start ds:justify-between ds:gap-[var(--spacing-md)]\">\n <RadixDialog.Title\n className=\"type-title-card ds:leading-snug\"\n >\n {t('editor.shortcuts.title')}\n </RadixDialog.Title>\n <RadixDialog.Close asChild>\n <button\n type=\"button\"\n aria-label={t('editor.shortcuts.close')}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center',\n 'ds:min-block-size-[var(--min-target-size)]',\n 'ds:min-inline-size-[var(--min-target-size)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:hover:bg-[var(--muted)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n <X aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />\n </button>\n </RadixDialog.Close>\n </div>\n <ul className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {[\n { key: 'editor.shortcuts.bold', combo: '⌘/Ctrl + B' },\n { key: 'editor.shortcuts.italic', combo: '⌘/Ctrl + I' },\n { key: 'editor.shortcuts.link', combo: '⌘/Ctrl + K' },\n { key: 'editor.shortcuts.undo', combo: '⌘/Ctrl + Z' },\n { key: 'editor.shortcuts.redo', combo: '⌘/Ctrl + Shift + Z' },\n { key: 'editor.shortcuts.open', combo: '⌘/Ctrl + /' },\n ].map((row) => (\n <li\n key={row.key}\n className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-md)]\"\n >\n <span className=\"ds:text-[length:var(--font-size-sm)]\">{t(row.key)}</span>\n <kbd\n className={[\n 'ds:font-[var(--font-mono)] ds:text-[length:var(--font-size-xs)]',\n 'ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)] ds:bg-[var(--muted)]',\n ].join(' ')}\n >\n {row.combo}\n </kbd>\n </li>\n ))}\n </ul>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* RichTextEditor */\n/* ------------------------------------------------------------------ */\n\nexport const RichTextEditor = forwardRef<RichTextEditorHandle, RichTextEditorProps>(\n (\n {\n id,\n defaultValue,\n value,\n onChange,\n toolbar = 'standard',\n placeholder,\n readOnly = false,\n ariaLabel,\n minHeight,\n className,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const rawId = useId();\n const editorId = useMemo(\n () => `rte-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n\n const [isRtl, setIsRtl] = useState(false);\n useEffect(() => {\n if (typeof document === 'undefined') return;\n setIsRtl(document.documentElement.dir === 'rtl');\n }, []);\n\n const [shortcutsOpen, setShortcutsOpen] = useState(false);\n\n /* ---- onChange debounce ref ----------------------------------- */\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onChangeRef = useRef<RichTextEditorProps['onChange']>(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n /* ---- Tiptap editor ------------------------------------------- */\n const initialContent = useMemo(() => {\n const raw = value ?? defaultValue ?? '';\n return raw ? sanitiseHtml(raw) : '';\n }, [defaultValue, value]);\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n }),\n Link.configure({\n protocols: ['http', 'https', 'mailto', 'tel'],\n HTMLAttributes: {\n rel: 'noopener noreferrer',\n target: '_blank',\n },\n validate: (href: string) => /^(https?:|mailto:|tel:)/i.test(href),\n }),\n Image,\n Table.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n Markdown.configure({\n html: false,\n transformPastedText: true,\n }),\n ],\n content: initialContent,\n editable: !readOnly,\n immediatelyRender: false,\n shouldRerenderOnTransaction: true,\n editorProps: {\n attributes: {\n role: 'textbox',\n 'aria-multiline': 'true',\n 'aria-label': ariaLabel ?? t('editor.placeholder'),\n 'data-placeholder': placeholder ?? t('editor.placeholder'),\n },\n transformPastedHTML(html: string): string {\n return sanitiseHtml(html);\n },\n handleKeyDown(_, event): boolean {\n if ((event.metaKey || event.ctrlKey) && event.key === '/') {\n event.preventDefault();\n setShortcutsOpen(true);\n return true;\n }\n return false;\n },\n },\n onUpdate({ editor: updatedEditor }) {\n if (!onChangeRef.current) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n const html = updatedEditor.getHTML();\n const storage = updatedEditor.storage as { markdown?: { getMarkdown: () => string } };\n const markdown = storage.markdown?.getMarkdown?.() ?? '';\n onChangeRef.current?.({ html, markdown });\n }, 100);\n },\n });\n\n /* ---- Cleanup debounce on unmount ----------------------------- */\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n /* ---- Keep readOnly in sync with prop ------------------------- */\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!readOnly);\n }, [editor, readOnly]);\n\n /* ---- Keep controlled `value` in sync ------------------------- */\n useEffect(() => {\n if (!editor || value === undefined) return;\n const current = editor.getHTML();\n if (current === value) return;\n const safe = sanitiseHtml(value);\n editor.commands.setContent(safe, { emitUpdate: false });\n }, [editor, value]);\n\n /* ---- Imperative handle --------------------------------------- */\n useImperativeHandle(\n ref,\n () => ({\n getHTML(): string {\n return editor?.getHTML() ?? '';\n },\n getMarkdown(): string {\n if (!editor) return '';\n const storage = editor.storage as {\n markdown?: { getMarkdown: () => string };\n };\n return storage.markdown?.getMarkdown?.() ?? '';\n },\n setContent(html: string): void {\n if (!editor) return;\n const safe = sanitiseHtml(html);\n editor.commands.setContent(safe);\n },\n focus(): void {\n editor?.commands.focus();\n },\n clear(): void {\n editor?.commands.clearContent();\n },\n }),\n [editor],\n );\n\n /* ---- Toolbar roving tabindex --------------------------------- */\n const buttonsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [focusIndex, setFocusIndex] = useState(0);\n\n const items = useMemo(() => PRESETS[toolbar], [toolbar]);\n\n const registerButton = useCallback(\n (index: number) => (el: HTMLButtonElement | null) => {\n buttonsRef.current[index] = el;\n },\n [],\n );\n\n const focusButton = useCallback((index: number) => {\n const btn = buttonsRef.current[index];\n if (btn) btn.focus();\n }, []);\n\n const handleToolbarKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n const count = items.length;\n if (count === 0) return;\n // In RTL, Left/Right arrows swap inline meaning.\n const forward = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const backward = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forward) next = (focusIndex + 1) % count;\n else if (event.key === backward) next = (focusIndex - 1 + count) % count;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n\n if (next !== null) {\n event.preventDefault();\n setFocusIndex(next);\n focusButton(next);\n }\n },\n [focusIndex, focusButton, isRtl, items.length],\n );\n\n /* ---- Link handler ------------------------------------------- */\n const promptForLink = useCallback(\n (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n if (!editor) return;\n const existing = editor.getAttributes('link').href as string | undefined;\n const raw = window.prompt(t('editor.link.insert'), existing ?? '');\n if (raw === null) return;\n const trimmed = raw.trim();\n if (trimmed === '') {\n editor.chain().focus().unsetLink().run();\n return;\n }\n if (!/^(https?:|mailto:|tel:)/i.test(trimmed)) {\n // Reject unsafe scheme silently — validate() in the extension also\n // blocks it, but we short-circuit before Tiptap ever sees it.\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: trimmed }).run();\n },\n [editor, t],\n );\n\n /* ---- Image handler ------------------------------------------ */\n // Raster-only via the shared allow-list — rejects data:image/svg+xml and\n // other XSS vectors. Sharing the helper keeps the two call sites from\n // drifting. See security-hardening.mdx.\n const promptForImage = useCallback(() => {\n if (!editor) return;\n const raw = window.prompt(t('editor.image.insert'), '');\n if (raw === null) return;\n const validated = safeImageSrc(raw);\n if (!validated) return;\n editor.chain().focus().setImage({ src: validated }).run();\n }, [editor, t]);\n\n /* ---- Render button map -------------------------------------- */\n function renderItem(\n key: ToolbarItemKey,\n index: number,\n ): ReactNode {\n if (!editor) return null;\n\n const registerRef = registerButton(index);\n const common = {\n tabIndex: index === focusIndex ? 0 : -1,\n onFocus: () => setFocusIndex(index),\n onKeyDown: handleToolbarKeyDown,\n };\n\n const buttonClass = (pressed: boolean, disabled: boolean): string =>\n toolbarButtonVariants({ pressed, disabled });\n\n function toggleButton(opts: {\n label: string;\n pressed: boolean;\n disabled: boolean;\n /** Space-separated modifier+key strings, e.g. \"Control+B Meta+B\". */\n shortcut?: string;\n onActivate: () => void;\n icon: ReactNode;\n }): ReactNode {\n return (\n <button\n type=\"button\"\n ref={registerRef}\n {...common}\n aria-label={opts.label}\n aria-pressed={opts.pressed}\n aria-disabled={opts.disabled || undefined}\n aria-keyshortcuts={opts.shortcut}\n title={opts.label}\n onClick={(event) => {\n event.preventDefault();\n if (!opts.disabled) opts.onActivate();\n }}\n className={buttonClass(opts.pressed, opts.disabled)}\n >\n {opts.icon}\n </button>\n );\n }\n\n function actionButton(opts: {\n label: string;\n disabled: boolean;\n shortcut?: string;\n onActivate: (event: ReactMouseEvent<HTMLButtonElement>) => void;\n icon: ReactNode;\n }): ReactNode {\n return (\n <button\n type=\"button\"\n ref={registerRef}\n {...common}\n aria-label={opts.label}\n aria-disabled={opts.disabled || undefined}\n aria-keyshortcuts={opts.shortcut}\n title={opts.label}\n onClick={(event) => {\n if (opts.disabled) {\n event.preventDefault();\n return;\n }\n opts.onActivate(event);\n }}\n className={buttonClass(false, opts.disabled)}\n >\n {opts.icon}\n </button>\n );\n }\n\n switch (key) {\n case 'bold':\n return toggleButton({\n label: t('editor.bold'),\n pressed: editor.isActive('bold'),\n disabled: readOnly,\n shortcut: 'Control+B Meta+B',\n onActivate: () => editor.chain().focus().toggleBold().run(),\n icon: <Bold aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'italic':\n return toggleButton({\n label: t('editor.italic'),\n pressed: editor.isActive('italic'),\n disabled: readOnly,\n shortcut: 'Control+I Meta+I',\n onActivate: () => editor.chain().focus().toggleItalic().run(),\n icon: <Italic aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'link':\n return actionButton({\n label: t('editor.link.insert'),\n disabled: readOnly,\n shortcut: 'Control+K Meta+K',\n onActivate: promptForLink,\n icon: <Link2 aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'heading':\n return (\n <HeadingSelect\n editor={editor}\n registerRef={registerRef}\n tabIndex={index === focusIndex ? 0 : -1}\n onFocus={() => setFocusIndex(index)}\n onKeyDown={handleToolbarKeyDown}\n label={t('editor.heading')}\n disabled={readOnly}\n pressed={\n editor.isActive('heading', { level: 1 }) ||\n editor.isActive('heading', { level: 2 }) ||\n editor.isActive('heading', { level: 3 })\n }\n />\n );\n case 'bulletList':\n return toggleButton({\n label: t('editor.list.bullet'),\n pressed: editor.isActive('bulletList'),\n disabled: readOnly,\n onActivate: () => editor.chain().focus().toggleBulletList().run(),\n icon: <List aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'orderedList':\n return toggleButton({\n label: t('editor.list.ordered'),\n pressed: editor.isActive('orderedList'),\n disabled: readOnly,\n onActivate: () => editor.chain().focus().toggleOrderedList().run(),\n icon: <ListOrdered aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'quote':\n return toggleButton({\n label: t('editor.quote'),\n pressed: editor.isActive('blockquote'),\n disabled: readOnly,\n onActivate: () => editor.chain().focus().toggleBlockquote().run(),\n icon: <Quote aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'image':\n return actionButton({\n label: t('editor.image.insert'),\n disabled: readOnly,\n onActivate: promptForImage,\n icon: <ImageIcon aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'table':\n return actionButton({\n label: t('editor.table.insert'),\n disabled: readOnly,\n onActivate: () =>\n editor\n .chain()\n .focus()\n .insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n .run(),\n icon: <TableIcon aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'codeBlock':\n return toggleButton({\n label: t('editor.codeBlock'),\n pressed: editor.isActive('codeBlock'),\n disabled: readOnly,\n onActivate: () => editor.chain().focus().toggleCodeBlock().run(),\n icon: <Code aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'horizontalRule':\n return actionButton({\n label: t('editor.horizontalRule'),\n disabled: readOnly,\n onActivate: () => editor.chain().focus().setHorizontalRule().run(),\n icon: <Minus aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'undo':\n return actionButton({\n label: t('editor.undo'),\n disabled: readOnly || !editor.can().undo(),\n shortcut: 'Control+Z Meta+Z',\n onActivate: () => editor.chain().focus().undo().run(),\n icon: <Undo aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n case 'redo':\n return actionButton({\n label: t('editor.redo'),\n disabled: readOnly || !editor.can().redo(),\n shortcut: 'Control+Shift+Z Meta+Shift+Z',\n onActivate: () => editor.chain().focus().redo().run(),\n icon: <Redo aria-hidden=\"true\" className=\"ds:block-size-4 ds:inline-size-4\" />,\n });\n default:\n return null;\n }\n }\n\n /* ---- Compose min-height class ------------------------------- */\n // `minHeight` is a size-variant keyword, not a raw CSS value, so we\n // pick a pre-authored Tailwind utility. The tiptap-theme.css bridge\n // already sets a sensible default (`min-block-size: 10rem`) on the\n // editing surface; consumers wanting taller/shorter regions can pass\n // 'sm' / 'md' / 'lg'.\n const minHeightClass = (() => {\n switch (minHeight) {\n case 'sm':\n return 'min-block-size-[8rem]';\n case 'md':\n return 'min-block-size-[16rem]';\n case 'lg':\n return 'min-block-size-[24rem]';\n default:\n return undefined;\n }\n })();\n\n return (\n <div\n id={editorId}\n className={[wrapperVariants(), className].filter(Boolean).join(' ')}\n dir={isRtl ? 'rtl' : undefined}\n data-component=\"rich-text-editor\"\n data-component-id={id}\n >\n {!readOnly ? (\n <div\n role=\"toolbar\"\n aria-label={t('editor.toolbarLabel')}\n className={toolbarVariants({ direction: isRtl ? 'rtl' : 'ltr' })}\n >\n {items.map((key, index) => (\n <span key={key} className=\"ds:contents\">\n {renderItem(key, index)}\n </span>\n ))}\n </div>\n ) : null}\n\n <div\n className={[editorSurfaceVariants(), minHeightClass]\n .filter(Boolean)\n .join(' ')}\n >\n <EditorContent editor={editor} />\n </div>\n\n <ShortcutsDialog open={shortcutsOpen} onOpenChange={setShortcutsOpen} />\n </div>\n );\n },\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport {\n toolbarButtonVariants,\n toolbarVariants,\n wrapperVariants,\n editorSurfaceVariants,\n};\n","import type { AgentAdapter } from '../../agent/types';\nimport type { RichTextEditorHandle } from './rich-text-editor';\n\nexport const richTextEditorAgent: AgentAdapter<RichTextEditorHandle> = {\n id: 'rich-text-editor',\n capabilities: ['edit_inline'],\n state: {\n html: {\n type: 'string',\n description: 'Sanitised HTML representation of the editor content.',\n read: (handle) => handle.getHTML(),\n },\n markdown: {\n type: 'string',\n description: 'Markdown representation of the editor content.',\n read: (handle) => handle.getMarkdown(),\n },\n },\n actions: {\n set_content: {\n safety: 'destructive',\n argsType: '{ html: string }',\n description: 'Replace the editor content. Loses unsaved input.',\n invoke: (handle, args: { html: string }) => {\n handle.setContent(args.html);\n },\n },\n clear: {\n safety: 'destructive',\n description: 'Empty the editor. Loses unsaved input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n focus: {\n safety: 'read',\n description: 'Move keyboard focus to the editor surface.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'rich-text-editor' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n"],"names":["__iconNode","Bold","createLucideIcon","Code","Image","Italic","Link2","ListOrdered","List","Minus","Quote","Redo","Table","Undo","PURIFY_CONFIG","sanitiseHtml","input","DOMPurify","wrapperVariants","cva","toolbarVariants","toolbarButtonVariants","editorSurfaceVariants","PRESETS","HeadingSelect","editor","registerRef","tabIndex","onFocus","onKeyDown","label","disabled","pressed","open","setOpen","useState","rootRef","useRef","useEffect","handler","event","target","apply","level","jsxs","v","jsx","ChevronDown","ShortcutsDialog","onOpenChange","t","useTranslation","RadixDialog","X","row","RichTextEditor","forwardRef","id","defaultValue","value","onChange","toolbar","placeholder","readOnly","ariaLabel","minHeight","className","ref","rawId","useId","editorId","useMemo","isRtl","setIsRtl","shortcutsOpen","setShortcutsOpen","debounceRef","onChangeRef","initialContent","raw","useEditor","StarterKit","Link","href","TableRow","TableCell","TableHeader","Markdown","html","_","updatedEditor","markdown","_b","_a","_c","safe","useImperativeHandle","buttonsRef","focusIndex","setFocusIndex","items","registerButton","useCallback","index","el","focusButton","btn","handleToolbarKeyDown","count","forward","backward","next","promptForLink","existing","trimmed","promptForImage","validated","safeImageSrc","renderItem","key","common","buttonClass","toggleButton","opts","actionButton","ImageIcon","TableIcon","minHeightClass","EditorContent","richTextEditorAgent","handle","args"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safe-image-src-DstKgCo7.js","sources":["../../src/components/_shared/safe-image-src.ts"],"sourcesContent":["/**\n * Allow-list for image `src` strings that may carry user- or LLM-supplied\n * content. Rejects `javascript:`, `data:text/*`, `data:image/svg+xml`, and\n * anything else outside the raster data-URI set.\n *\n * See user story `review-findings/security-hardening.mdx`.\n */\nconst SAFE_IMAGE_SRC_RE = /^(https?:|data:image\\/(png|jpeg|jpg|gif|webp|bmp);base64,)/i;\n\n// Null bytes and C0 controls (0x00–0x1f, 0x7f) are stripped by browsers when\n// resolving `src` attributes. An attacker prefixing a payload with `\\x00` to\n// defeat prefix checks is a known bypass class — strip those explicitly so\n// the regex sees the same bytes the browser will use.\nconst CONTROL_CHARS_RE = /[\\x00-\\x1f\\x7f]/g;\n\nfunction normalise(src: string): string {\n return src.replace(CONTROL_CHARS_RE, '').trim();\n}\n\nexport function isSafeImageSrc(src: string | null | undefined): boolean {\n if (!src) return false;\n const normalised = normalise(src);\n if (normalised === '') return false;\n return SAFE_IMAGE_SRC_RE.test(normalised);\n}\n\nexport function safeImageSrc(src: string | null | undefined): string | undefined {\n if (!src) return undefined;\n const normalised = normalise(src);\n if (normalised === '') return undefined;\n return SAFE_IMAGE_SRC_RE.test(normalised) ? normalised : undefined;\n}\n"],"names":["SAFE_IMAGE_SRC_RE","CONTROL_CHARS_RE","normalise","src","safeImageSrc","normalised"],"mappings":"AAOA,MAAMA,IAAoB,+DAMpBC,IAAmB;AAEzB,SAASC,EAAUC,GAAqB;AACtC,SAAOA,EAAI,QAAQF,GAAkB,EAAE,EAAE,KAAA;AAC3C;AASO,SAASG,EAAaD,GAAoD;AAC/E,MAAI,CAACA,EAAK;AACV,QAAME,IAAaH,EAAUC,CAAG;AAChC,MAAIE,MAAe;AACnB,WAAOL,EAAkB,KAAKK,CAAU,IAAIA,IAAa;AAC3D;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scroll-area-DLr5w9Dd.js","sources":["../../src/components/scroll-area/scroll-area.tsx"],"sourcesContent":["import { forwardRef, useRef, type ComponentPropsWithoutRef } from 'react';\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useDirection } from '../_shared/use-direction';\n\nconst scrollbarVariants = cva(\n [\n 'ds:flex ds:touch-none ds:select-none',\n // Fade in/out based on Radix data-state (requires forceMount on Scrollbar).\n // Default opacity is 1 because ScrollAreaScrollbarVisible (type='always')\n // never sets data-state at all — only hover/scroll/auto set data-state=\"hidden\".\n 'ds:transition-opacity ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:data-[state=hidden]:opacity-0',\n // Orientation-specific sizing + padding so thumb floats away from the frame edge\n 'ds:data-[orientation=vertical]:w-[var(--scrollbar-size)] ds:data-[orientation=vertical]:p-[var(--scrollbar-padding)]',\n 'ds:data-[orientation=horizontal]:h-[var(--scrollbar-size)] ds:data-[orientation=horizontal]:flex-col ds:data-[orientation=horizontal]:p-[var(--scrollbar-padding)]',\n 'ds:bg-[var(--scrollbar-track)]',\n // forced-colors: 1px border keeps the track visible when background flattens\n 'ds:forced-colors:border ds:forced-colors:border-[ButtonText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:[--scrollbar-size:var(--scrollbar-size-sm)]',\n md: 'ds:[--scrollbar-size:var(--scrollbar-size-md)]',\n lg: 'ds:[--scrollbar-size:var(--scrollbar-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst thumbVariants = cva(\n [\n 'ds:relative ds:flex-1',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[var(--scrollbar-thumb)]',\n 'ds:hover:bg-[var(--scrollbar-thumb-hover)]',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n // forced-color-adjust: auto so forced-colors paint ButtonFace/ButtonText\n 'ds:[forced-color-adjust:auto]',\n // hit area extension via ::before for touch pointers (must be absolute)\n 'ds:before:absolute ds:before:content-[\"\"] ds:before:inset-inline-[calc((var(--min-target-size)-100%)/-2)]',\n 'ds:before:inset-block-[calc((var(--min-target-size)-100%)/-2)]',\n ].join(' '),\n);\n\nexport interface ScrollAreaProps\n extends Omit<\n ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>,\n 'type'\n >,\n VariantProps<typeof scrollbarVariants> {\n orientation?: 'vertical' | 'horizontal' | 'both';\n size?: 'sm' | 'md' | 'lg';\n /**\n * `auto` — scrollbar fades in on pointer-enter, fades out after `--scrollbar-fade-delay` (default).\n * `always` — scrollbar always visible; use for data tables.\n * `scroll` — scrollbar visible only while scrolling.\n * `hover` — alias for `auto` (Radix hover mode).\n * `native` — skips the custom scrollbar entirely; the OS renders its own.\n * Use for virtualised lists (AG Grid, @tanstack/react-virtual).\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover' | 'native';\n className?: string;\n children: React.ReactNode;\n}\n\nconst radixType = (\n type: ScrollAreaProps['type'],\n): ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>['type'] => {\n if (type === 'auto' || type === undefined) return 'hover';\n return type as Exclude<ScrollAreaProps['type'], 'auto' | 'native' | undefined>;\n};\n\nconst nativeOverflow: Record<\n NonNullable<ScrollAreaProps['orientation']>,\n string\n> = {\n vertical: 'ds:overflow-y-auto',\n horizontal: 'ds:overflow-x-auto',\n both: 'ds:overflow-auto',\n};\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n (\n {\n orientation = 'vertical',\n size = 'md',\n type = 'auto',\n className,\n children,\n // scrollHideDelay is a Root-only prop; ignore it for the native branch\n scrollHideDelay,\n ...props\n },\n ref,\n ) => {\n // ── Native escape-hatch ────────────────────────────────────────────\n // Radix's Viewport always injects `scrollbar-width: none` CSS, which\n // hides the browser scrollbar even if we skip rendering the custom one.\n // For native mode we bypass Radix entirely and render a plain div.\n if (type === 'native') {\n return (\n <div\n ref={ref}\n data-component=\"scroll-area\"\n className={[\n nativeOverflow[orientation],\n 'ds:min-w-0 ds:min-h-0',\n // focus ring matches the custom-scrollbar variant\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-[Highlight]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n // ── Radix custom-scrollbar path ────────────────────────────────────\n const rootRef = useRef<HTMLDivElement>(null);\n const dir = useDirection(rootRef);\n return (\n <ScrollAreaPrimitive.Root\n ref={rootRef}\n type={radixType(type)}\n dir={dir}\n scrollHideDelay={scrollHideDelay}\n data-component=\"scroll-area\"\n className={[\n 'ds:relative ds:overflow-hidden',\n 'ds:min-w-0 ds:min-h-0',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n ref={ref}\n className={[\n 'ds:h-full ds:w-full ds:rounded-[inherit]',\n // keyboard focus ring on the scroll container\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-[Highlight]',\n ].join(' ')}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n {(orientation === 'vertical' || orientation === 'both') && (\n // forceMount keeps the element in the DOM so CSS opacity transition\n // can animate the show/hide instead of mount/unmount snapping.\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"vertical\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n {(orientation === 'horizontal' || orientation === 'both') && (\n <ScrollAreaPrimitive.Scrollbar\n forceMount\n orientation=\"horizontal\"\n className={scrollbarVariants({ size })}\n >\n <ScrollAreaPrimitive.Thumb className={thumbVariants()} />\n </ScrollAreaPrimitive.Scrollbar>\n )}\n\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n );\n },\n);\n\nScrollArea.displayName = 'ScrollArea';\n\n// Re-export Radix parts for advanced composition\nexport const ScrollAreaRoot = ScrollAreaPrimitive.Root;\nexport const ScrollAreaViewport = ScrollAreaPrimitive.Viewport;\nexport const ScrollAreaScrollbar = ScrollAreaPrimitive.Scrollbar;\nexport const ScrollAreaThumb = ScrollAreaPrimitive.Thumb;\nexport const ScrollAreaCorner = ScrollAreaPrimitive.Corner;\n"],"names":["scrollbarVariants","cva","thumbVariants","radixType","type","nativeOverflow","ScrollArea","forwardRef","orientation","size","className","children","scrollHideDelay","props","ref","jsx","rootRef","useRef","dir","useDirection","jsxs","ScrollAreaPrimitive","ScrollAreaRoot","ScrollAreaViewport","ScrollAreaScrollbar","ScrollAreaThumb","ScrollAreaCorner"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-BonnQsHv.js","sources":["../../node_modules/lucide-react/dist/esm/icons/search.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n"],"names":["__iconNode","Search","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,oBAAoB,KAAK,SAAQ,CAAE;AAAA,EACjD,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D,GACMC,IAASC,EAAiB,UAAUF,CAAU;","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-bar.agent-DxFAxctc.js","sources":["../../src/components/search-bar/search-bar.tsx","../../src/components/search-bar/search-bar.agent.ts"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search } from 'lucide-react';\nimport * as RadixPopover from '@radix-ui/react-popover';\nimport { SearchInput } from '../search-input/search-input';\nimport { useDebouncedCallback, normalizeDiacritics } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut detection */\n/* ------------------------------------------------------------------ */\n\nfunction isMacLike(): boolean {\n if (typeof navigator === 'undefined') return false;\n // Prefer `userAgentData.platform` where supported; fall back to the\n // deprecated `navigator.platform`. Both are strings; we just look for\n // `mac`.\n const uaData = (navigator as unknown as {\n userAgentData?: { platform?: string };\n }).userAgentData;\n const platformString = uaData?.platform ?? navigator.platform ?? '';\n return /mac/i.test(platformString);\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst launcherVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n // Same visual language as <SearchInput> so the launcher truly looks\n // like an input. --muted-foreground over --background meets AA 4.5:1\n // in every theme; --muted is a mid-tone not suitable as a surface.\n 'ds:bg-[var(--background)] ds:border ds:border-[color:var(--border)]',\n 'ds:text-[color:var(--muted-foreground)]',\n // Opaque hover — mix 20% muted into --background so the launcher stays a\n // solid surface even when placed over a brand-tinted parent (e.g. the\n // Header's `brand` variant).\n 'ds:hover:bg-[color-mix(in_srgb,var(--muted)_20%,var(--background))]',\n 'ds:transition-colors ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:disabled:opacity-50 ds:disabled:cursor-not-allowed',\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 density: {\n default: '',\n compact: 'ds:min-h-0 ds:h-8',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst inlineWrapperVariants = cva(\n [\n 'ds:inline-flex ds:flex-col',\n 'ds:w-full',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n lg: '',\n },\n density: {\n default: '',\n compact: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n },\n },\n);\n\nconst shortcutPillVariants = cva(\n [\n 'ds:hidden ds:md:inline-flex ds:items-center ds:gap-[calc(var(--spacing-xs)/2)]',\n 'ds:ms-auto',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--background)]',\n 'ds:ps-[calc(var(--spacing-xs)/1.2)] ds:pe-[calc(var(--spacing-xs)/1.2)]',\n 'ds:py-[calc(var(--spacing-xs)/2)]',\n // Use full --foreground (not --muted-foreground) so axe's contrast\n // check clears 4.5:1 even against the 1px --border edge region.\n 'ds:text-[length:var(--font-size-xs)] ds:text-[color:var(--foreground)]',\n 'ds:font-[family-name:var(--font-mono)]',\n ].join(' '),\n);\n\nconst popoverContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:border ds:border-[color:var(--border)]',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:p-[var(--spacing-xs)]',\n // Motion gates — reduced-motion honoured via .theme-accessible's 0ms\n // animation-duration token.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface SearchBarResultItem {\n id: string;\n /** Display label. */\n label: string;\n /** Optional icon rendered on inline-start (aria-hidden). */\n icon?: ReactNode;\n /** Optional right-aligned meta text (tag, count, section label). */\n meta?: string;\n /** Optional href — the list renders anchors when present. */\n href?: string;\n}\n\nexport interface SearchBarResultGroup {\n /** Heading displayed above the items (aria-hidden=\"true\" — visual only). */\n heading?: string;\n items: SearchBarResultItem[];\n}\n\ntype SharedProps = {\n size?: 'sm' | 'md' | 'lg';\n density?: 'default' | 'compact';\n /** `true` wraps in <search role=\"search\"> when this is the page's primary search. */\n topLevel?: boolean;\n placeholder?: string;\n /** Platform-aware shortcut pill — default `true` (hidden below `md` breakpoint). */\n shortcutHint?: boolean;\n className?: string;\n /**\n * Consumer-supplied instance id, surfaced as `data-component-id` so an\n * agent / UI bridge can address this instance.\n */\n id?: string;\n /**\n * Called when an external driver (agent adapter) asks the host to apply\n * a saved search by id. The host is responsible for resolving the saved\n * search and feeding the resulting query back through `value` /\n * `onQueryChange`. No-op when not provided.\n */\n onApplySavedSearch?: (id: string) => void;\n};\n\n/**\n * Imperative handle for agent-readiness + programmatic control. Replaces\n * the previously-forwarded `HTMLDivElement` ref. Consumers who needed the\n * DOM element for layout queries should wrap the SearchBar in their own\n * div with a ref attached.\n */\nexport interface SearchBarHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n focus: () => void;\n applySavedSearch: (id: string) => void;\n}\n\ntype LauncherProps = SharedProps & {\n mode?: 'launcher';\n /** Called on click / Enter / global Cmd/Ctrl+K. */\n onOpenCommandPalette: () => void;\n // Not used in launcher mode.\n value?: never;\n defaultValue?: never;\n onQueryChange?: never;\n results?: never;\n onSelect?: never;\n debounceMs?: never;\n};\n\ntype InlineProps = SharedProps & {\n mode: 'inline';\n value?: string;\n defaultValue?: string;\n onQueryChange?: (query: string) => void;\n /** Groups of results rendered in the popover. */\n results?: SearchBarResultGroup[];\n onSelect?: (item: SearchBarResultItem) => void;\n debounceMs?: number;\n // Not used in inline mode.\n onOpenCommandPalette?: never;\n};\n\nexport type SearchBarProps = (LauncherProps | InlineProps) &\n Omit<\n HTMLAttributes<HTMLDivElement>,\n 'role' | 'onChange' | 'children' | 'defaultValue' | 'results'\n > &\n VariantProps<typeof launcherVariants>;\n\n/* ------------------------------------------------------------------ */\n/* Helpers */\n/* ------------------------------------------------------------------ */\n\nexport function filterSearchResults(\n query: string,\n groups: SearchBarResultGroup[],\n): SearchBarResultGroup[] {\n const needle = normalizeDiacritics(query.trim());\n if (needle === '') return groups;\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) =>\n normalizeDiacritics(item.label).includes(needle),\n ),\n }))\n .filter((g) => g.items.length > 0);\n}\n\n/* ------------------------------------------------------------------ */\n/* SearchBar */\n/* ------------------------------------------------------------------ */\n\nexport const SearchBar = forwardRef<SearchBarHandle, SearchBarProps>(\n (props, ref) => {\n // Strip every API prop from `...rest` so nothing leaks to the DOM as\n // an unknown attribute (React warns in DEV and some become invalid\n // HTML in production).\n const {\n mode = 'launcher',\n size = 'md',\n density = 'default',\n topLevel = false,\n placeholder,\n shortcutHint = true,\n className,\n onOpenCommandPalette,\n id,\n onApplySavedSearch,\n value: _value,\n defaultValue: _defaultValue,\n onQueryChange: _onQueryChange,\n results: _results,\n onSelect: _onSelect,\n debounceMs: _debounceMs,\n ...rest\n } = props as SearchBarProps & { className?: string };\n // silence unused-var warnings for the destructured siblings we only\n // needed to peel off the spread target.\n void _value;\n void _defaultValue;\n void _onQueryChange;\n void _results;\n void _onSelect;\n void _debounceMs;\n\n const { t } = useTranslation();\n const [isMac, setIsMac] = useState(false);\n useEffect(() => {\n setIsMac(isMacLike());\n }, []);\n\n const shortcutLabel = isMac ? '\\u2318K' : 'Ctrl+K';\n // Advertise the shortcut on the launcher button. The binding itself\n // lives in `useCommandPalette()` (CommandPalette owns its open state);\n // duplicating the listener here would cause a double-fire.\n const ariaKeyshortcuts = 'Meta+K Control+K';\n\n /* ---- Landmark role --------------------------------------------- */\n const landmarkProps = topLevel\n ? { role: 'search' as const }\n : { role: undefined };\n\n /* ---- LAUNCHER MODE -------------------------------------------- */\n if (mode === 'launcher') {\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n return (\n <LauncherSearchBar\n forwardedRef={ref}\n id={id}\n landmarkProps={landmarkProps}\n className={className}\n onOpenCommandPalette={onOpenCommandPalette}\n onApplySavedSearch={onApplySavedSearch}\n resolvedPlaceholder={resolvedPlaceholder}\n openLabel={t('search.open', 'Open search')}\n ariaKeyshortcuts={ariaKeyshortcuts}\n launcherClass={launcherVariants({ size, density })}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n rest={rest as HTMLAttributes<HTMLButtonElement>}\n />\n );\n }\n\n /* ---- INLINE MODE ---------------------------------------------- */\n const inlineProps = props as InlineProps;\n return (\n <InlineSearchBar\n forwardedRef={ref}\n size={size}\n density={density}\n landmarkProps={landmarkProps}\n placeholder={placeholder}\n shortcutHint={shortcutHint}\n shortcutLabel={shortcutLabel}\n ariaKeyshortcuts={ariaKeyshortcuts}\n className={className}\n id={id}\n onApplySavedSearch={onApplySavedSearch}\n {...inlineProps}\n />\n );\n },\n);\n\nSearchBar.displayName = 'SearchBar';\n\n/* ------------------------------------------------------------------ */\n/* LauncherSearchBar \\u2014 internal */\n/* ------------------------------------------------------------------ */\n\ninterface LauncherInternalProps {\n forwardedRef: React.ForwardedRef<SearchBarHandle>;\n id?: string;\n landmarkProps: { role?: 'search' };\n className?: string;\n onOpenCommandPalette?: () => void;\n onApplySavedSearch?: (id: string) => void;\n resolvedPlaceholder: string;\n openLabel: string;\n ariaKeyshortcuts: string;\n launcherClass: string;\n shortcutHint: boolean;\n shortcutLabel: string;\n rest: HTMLAttributes<HTMLButtonElement>;\n}\n\nfunction LauncherSearchBar(props: LauncherInternalProps): ReactNode {\n const {\n forwardedRef,\n id,\n landmarkProps,\n className,\n onOpenCommandPalette,\n onApplySavedSearch,\n resolvedPlaceholder,\n openLabel,\n ariaKeyshortcuts,\n launcherClass,\n shortcutHint,\n shortcutLabel,\n rest,\n } = props;\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const handle = useMemo<SearchBarHandle>(\n () => ({\n getQuery: () => '',\n // Launcher mode is stateless \\u2014 it delegates to CommandPalette.\n setQuery: () => {},\n clear: () => {},\n submit: () => onOpenCommandPalette?.(),\n focus: () => buttonRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [onOpenCommandPalette, onApplySavedSearch],\n );\n useImperativeHandle(forwardedRef, () => handle, [handle]);\n\n return (\n <div {...landmarkProps} data-component=\"search-bar\" data-component-id={id} id={id} className={className}>\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={onOpenCommandPalette}\n aria-haspopup=\"dialog\"\n aria-label={openLabel}\n aria-keyshortcuts={ariaKeyshortcuts}\n className={launcherClass}\n {...rest}\n >\n <Search\n aria-hidden\n className=\"ds:size-4 ds:shrink-0\"\n focusable=\"false\"\n />\n <span aria-hidden=\"true\" className=\"ds:truncate ds:text-start\">\n {resolvedPlaceholder}\n </span>\n {shortcutHint ? (\n <kbd className={shortcutPillVariants()}>{shortcutLabel}</kbd>\n ) : null}\n </button>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* InlineSearchBar — internal */\n/* ------------------------------------------------------------------ */\n\ninterface InlineInternalProps extends InlineProps {\n forwardedRef: React.ForwardedRef<SearchBarHandle>;\n size: 'sm' | 'md' | 'lg';\n density: 'default' | 'compact';\n landmarkProps: { role?: 'search' };\n shortcutHint: boolean;\n shortcutLabel: string;\n ariaKeyshortcuts: string;\n className?: string;\n id?: string;\n onApplySavedSearch?: (id: string) => void;\n}\n\nfunction InlineSearchBar(props: InlineInternalProps): ReactNode {\n const {\n forwardedRef,\n size,\n density,\n landmarkProps,\n placeholder,\n shortcutHint,\n shortcutLabel,\n ariaKeyshortcuts,\n className,\n id,\n onApplySavedSearch,\n value,\n defaultValue,\n onQueryChange,\n results,\n onSelect,\n debounceMs = 150,\n } = props;\n\n const { t } = useTranslation();\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const query = isControlled ? (value ?? '') : internalValue;\n\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(0);\n // SearchInput forwards an `HTMLInputElement` with the curated handle\n // methods grafted on — for our purposes we just need `.focus()`.\n const inputRef = useRef<HTMLInputElement | null>(null);\n const listboxId = useId();\n\n const debouncedQueryChange = useDebouncedCallback((next: string) => {\n onQueryChange?.(next);\n }, debounceMs);\n\n const flatResults = useMemo<SearchBarResultItem[]>(() => {\n if (!results) return [];\n return results.flatMap((g) => g.items);\n }, [results]);\n\n // Reset active index whenever the result count changes.\n useEffect(() => {\n if (activeIndex > flatResults.length - 1) setActiveIndex(0);\n }, [flatResults.length, activeIndex]);\n\n const handleInput = useCallback(\n (raw: string) => {\n if (!isControlled) setInternalValue(raw);\n debouncedQueryChange(raw);\n setOpen(raw.trim().length > 0);\n },\n [debouncedQueryChange, isControlled],\n );\n\n const commit = useCallback(\n (item: SearchBarResultItem) => {\n onSelect?.(item);\n setOpen(false);\n if (!isControlled) setInternalValue('');\n },\n [onSelect, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (event.nativeEvent.isComposing || event.keyCode === 229) return;\n if (!open && event.key === 'ArrowDown' && flatResults.length > 0) {\n event.preventDefault();\n setOpen(true);\n return;\n }\n if (!open) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n setActiveIndex((i) => (i + 1) % Math.max(flatResults.length, 1));\n } else if (event.key === 'ArrowUp') {\n event.preventDefault();\n setActiveIndex(\n (i) =>\n (i - 1 + Math.max(flatResults.length, 1)) %\n Math.max(flatResults.length, 1),\n );\n } else if (event.key === 'Enter') {\n const item = flatResults[activeIndex];\n if (item) {\n event.preventDefault();\n commit(item);\n }\n } else if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n }\n },\n [open, flatResults, activeIndex, commit],\n );\n\n const resolvedPlaceholder =\n placeholder ?? t('search.placeholder', 'Search\\u2026');\n\n const hasResults = flatResults.length > 0;\n // aria-activedescendant may only reference an element that actually exists\n // in the DOM — so only set it when the popover is open AND there are\n // results to land on. Referencing a non-existent option is an a11y\n // violation (aria-valid-attr-value).\n const activeDescendantId =\n open && hasResults ? `${listboxId}-option-${activeIndex}` : undefined;\n\n const setQueryProgrammatic = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onQueryChange?.(next);\n setOpen(next.trim().length > 0);\n },\n [isControlled, onQueryChange],\n );\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n getQuery: () => query,\n setQuery: setQueryProgrammatic,\n clear: () => {\n setQueryProgrammatic('');\n },\n submit: () => {\n const item = flatResults[activeIndex];\n if (item) commit(item);\n },\n focus: () => inputRef.current?.focus(),\n applySavedSearch: (savedId: string) => onApplySavedSearch?.(savedId),\n }),\n [\n query,\n setQueryProgrammatic,\n flatResults,\n activeIndex,\n commit,\n onApplySavedSearch,\n ],\n );\n\n return (\n <RadixPopover.Root open={open && hasResults} onOpenChange={setOpen}>\n <div\n {...landmarkProps}\n id={id}\n data-component=\"search-bar\"\n data-component-id={id}\n className={[inlineWrapperVariants({ size, density }), className]\n .filter(Boolean)\n .join(' ')}\n >\n <RadixPopover.Anchor asChild>\n <div\n className=\"ds:relative ds:flex ds:items-center\"\n onKeyDown={handleKeyDown}\n >\n <SearchInput\n ref={inputRef}\n size={size}\n value={query}\n onInput={handleInput}\n placeholder={resolvedPlaceholder}\n aria-label={t('search.label', 'Search')}\n aria-keyshortcuts={ariaKeyshortcuts}\n role=\"combobox\"\n aria-expanded={open && hasResults}\n aria-controls={listboxId}\n aria-activedescendant={activeDescendantId}\n />\n {shortcutHint ? (\n <kbd\n className={[\n shortcutPillVariants(),\n 'ds:absolute ds:end-[var(--spacing-sm)] ds:top-1/2 ds:-translate-y-1/2',\n 'ds:pointer-events-none',\n ].join(' ')}\n >\n {shortcutLabel}\n </kbd>\n ) : null}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n aria-label={t('search.resultsLabel', 'Search results')}\n onOpenAutoFocus={(e) => e.preventDefault()}\n // Width matches the anchor via Radix's CSS variable. Applied\n // as a Tailwind arbitrary-value class so no inline style is\n // needed (23-constraints §4).\n className={[\n popoverContentVariants(),\n 'ds:w-[var(--radix-popover-trigger-width)]',\n ].join(' ')}\n >\n {/* listbox uses <div> rather than <ul> so the option role\n children don't trip the `<ul> must only contain <li>` axe\n rule. Options are direct descendants of the listbox root\n per the WAI-ARIA listbox pattern. */}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label={t('search.resultsLabel', 'Search results')}\n className=\"ds:flex ds:flex-col ds:gap-[calc(var(--spacing-xs)/2)]\"\n >\n {results && results.length > 0 ? (\n renderGroups(\n results,\n activeIndex,\n listboxId,\n commit,\n setActiveIndex,\n )\n ) : (\n <div\n role=\"presentation\"\n className=\"ds:p-[var(--spacing-sm)] type-body-sm ds:text-[color:var(--foreground)]\"\n >\n {t('search.noResults', 'No results for \\u201C{{query}}\\u201D', {\n query,\n })}\n </div>\n )}\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </div>\n </RadixPopover.Root>\n );\n}\n\nfunction renderGroups(\n groups: SearchBarResultGroup[],\n activeIndex: number,\n listboxId: string,\n onCommit: (item: SearchBarResultItem) => void,\n setActive: (index: number) => void,\n): ReactNode {\n let flatIndex = 0;\n // Flatten groups + headings into a single-level sequence of divs at the\n // listbox root. `role=\"group\"` wrappers keep the visual grouping while\n // keeping options as direct descendants of the listbox.\n return groups.map((group, gi) => {\n const headingId = group.heading ? `${listboxId}-group-${gi}-heading` : undefined;\n return (\n <div\n key={`g-${gi}`}\n role={group.heading ? 'group' : 'presentation'}\n aria-labelledby={headingId}\n >\n {group.heading ? (\n <div\n id={headingId}\n aria-hidden=\"true\"\n className=\"ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)] ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)] type-eyebrow ds:text-[color:var(--foreground)]\"\n >\n {group.heading}\n </div>\n ) : null}\n {group.items.map((item) => {\n const myIndex = flatIndex;\n flatIndex += 1;\n const isActive = myIndex === activeIndex;\n const optionId = `${listboxId}-option-${myIndex}`;\n const safeHref = safeNavigationHref(item.href);\n const commonClass = [\n 'ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:cursor-pointer',\n 'ds:no-underline ds:text-[color:var(--foreground)]',\n 'ds:min-h-[var(--min-target-size)]',\n isActive ? 'ds:bg-[var(--muted)]/40' : '',\n ].join(' ');\n const body = (\n <>\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {item.icon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:text-[length:var(--font-size-sm)]\">\n {item.label}\n </span>\n {item.meta ? (\n <span className=\"ds:ms-auto type-meta ds:text-[color:var(--foreground)]\">\n {item.meta}\n </span>\n ) : null}\n </>\n );\n const shared = {\n id: optionId,\n role: 'option' as const,\n 'aria-selected': isActive,\n // onMouseDown rather than onClick so we trigger before the\n // input loses focus to the pointer-down on the popover.\n onMouseDown: (e: React.MouseEvent) => {\n e.preventDefault();\n onCommit(item);\n },\n onMouseEnter: () => setActive(myIndex),\n className: commonClass,\n };\n if (safeHref) {\n return (\n <a key={item.id} href={safeHref} {...shared}>\n {body}\n </a>\n );\n }\n return (\n <div key={item.id} {...shared}>\n {body}\n </div>\n );\n })}\n </div>\n );\n });\n}\n\n/**\n * Allow-list for result-item `href` strings. Same allow-list as the\n * chat-message token renderer: http(s) + mailto + tel + same-origin\n * relative paths. Anything else (including `javascript:` and `data:`)\n * returns `undefined`, causing the renderer to fall back to a <div>.\n */\nfunction safeNavigationHref(href: string | undefined): string | undefined {\n if (!href) return undefined;\n const trimmed = href.trim();\n if (trimmed === '') return undefined;\n if (/^(https?:|mailto:|tel:)/i.test(trimmed)) return trimmed;\n // Same-origin relative paths are safe because the browser resolves\n // against `window.location`. Leading `/` or `./` or `../` qualify.\n if (/^(\\/|\\.\\/|\\.\\.\\/)/.test(trimmed)) return trimmed;\n return undefined;\n}\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — SearchBar. */\n/* */\n/* SearchBar is the kit's saved-search / global-search surface. In */\n/* `inline` mode it filters + opens a result popover; in `launcher` */\n/* mode it opens the CommandPalette. The adapter exposes the query, */\n/* a submit action, and an apply_saved_search hook so future MCP */\n/* tooling can drive the SearchBar by saved-search id. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SearchBarHandle } from './search-bar';\n\nexport const searchBarAgent: AgentAdapter<SearchBarHandle> = {\n id: 'search-bar',\n capabilities: ['filter', 'edit_inline', 'submit'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.searchBar.state.query',\n description: 'Current raw query string (inline mode). Empty in launcher mode.',\n read: (handle) => handle.getQuery(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.searchBar.state.isEmpty',\n description: 'True when the query is empty.',\n read: (handle) => handle.getQuery().length === 0,\n },\n },\n actions: {\n set_query: {\n safety: 'read',\n argsType: '{ query: string }',\n descriptionKey: 'ui.agent.searchBar.actions.setQuery',\n description: 'Replace the current query (inline mode only). No-op in launcher mode.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.clear',\n description: 'Clear the query and close the result popover.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.submit',\n description: 'In launcher mode opens the CommandPalette; in inline mode commits the highlighted option.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchBar.actions.focus',\n description: 'Move keyboard focus to the SearchBar.',\n invoke: (handle) => {\n handle.focus();\n },\n },\n apply_saved_search: {\n safety: 'read',\n argsType: '{ id: string }',\n descriptionKey: 'ui.agent.searchBar.actions.applySavedSearch',\n description: 'Apply a saved-search by id. The host wires the actual query lookup; the adapter routes the id to its onApplySavedSearch handler. No-op when no handler is wired.',\n invoke: (handle, args: { id: string }) => {\n handle.applySavedSearch(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'search-bar',\n description: 'Marks the SearchBar root.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n"],"names":["isMacLike","uaData","platformString","launcherVariants","cva","inlineWrapperVariants","shortcutPillVariants","popoverContentVariants","filterSearchResults","query","groups","needle","normalizeDiacritics","g","item","SearchBar","forwardRef","props","ref","mode","size","density","topLevel","placeholder","shortcutHint","className","onOpenCommandPalette","id","onApplySavedSearch","_value","_defaultValue","_onQueryChange","_results","_onSelect","_debounceMs","rest","t","useTranslation","isMac","setIsMac","useState","useEffect","shortcutLabel","ariaKeyshortcuts","landmarkProps","resolvedPlaceholder","jsx","LauncherSearchBar","InlineSearchBar","forwardedRef","openLabel","launcherClass","buttonRef","useRef","handle","useMemo","_a","savedId","useImperativeHandle","jsxs","Search","value","defaultValue","onQueryChange","results","onSelect","debounceMs","isControlled","internalValue","setInternalValue","open","setOpen","activeIndex","setActiveIndex","inputRef","listboxId","useId","debouncedQueryChange","useDebouncedCallback","next","flatResults","handleInput","useCallback","raw","commit","handleKeyDown","event","i","hasResults","activeDescendantId","setQueryProgrammatic","RadixPopover","SearchInput","renderGroups","onCommit","setActive","flatIndex","group","gi","headingId","myIndex","isActive","optionId","safeHref","safeNavigationHref","commonClass","body","Fragment","shared","e","href","trimmed","searchBarAgent","args"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-input-Xw3cdWXW.js","sources":["../../src/components/search-input/search-input.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type FocusEvent,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Search, X } from 'lucide-react';\nimport { TextInput } from '../text-input/text-input';\nimport { Spinner } from '../spinner/spinner';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useDebouncedCallback } from '../_shared/use-debounced-callback';\n\nconst rootVariants = cva('ds:relative ds:w-full');\n\nconst clearButtonVariants = cva(\n [\n 'ds:absolute ds:inset-y-0 ds:end-0 ds:pe-3',\n 'ds:inline-flex ds:items-center ds:justify-center ds:pointer-events-auto',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:shrink-0',\n 'ds:size-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'ds:bg-background ds:border ds:border-border ds:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:text-foreground ds:hover:bg-muted',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' '),\n);\n\nconst expandableWrapperVariants = cva(\n [\n 'ds:inline-flex ds:items-center',\n 'ds:transition-[width] ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n);\n\ntype SearchInputRole = 'combobox';\n\nexport interface SearchInputProps {\n value?: string;\n defaultValue?: string;\n onChange?: (debouncedValue: string) => void;\n onInput?: (rawValue: string) => void;\n debounceMs?: number;\n isLoading?: boolean;\n variant?: 'inline' | 'expandable';\n size?: 'sm' | 'md' | 'lg';\n globalShortcut?: string;\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n name?: string;\n id?: string;\n form?: string;\n autoComplete?: string;\n autoFocus?: boolean;\n 'aria-label'?: string;\n role?: SearchInputRole;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n 'aria-activedescendant'?: string;\n}\n\nfunction isEditableElement(el: Element | null): boolean {\n if (!el) return false;\n const tag = el.tagName;\n if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return true;\n if ((el as HTMLElement).isContentEditable) return true;\n return false;\n}\n\n/**\n * Imperative handle for agent-readiness + programmatic control.\n *\n * The forwarded ref intersects the underlying `HTMLInputElement` so\n * existing consumers (`ref.current.focus()` etc.) keep working — we\n * mutate the live input element to add the curated methods rather than\n * returning a new object from `useImperativeHandle`.\n */\nexport interface SearchInputHandle {\n getQuery: () => string;\n setQuery: (query: string) => void;\n clear: () => void;\n submit: () => void;\n /**\n * Expand-aware focus. Named `agentFocus` rather than `focus` because\n * the handle is grafted onto the underlying `HTMLInputElement` and the\n * native `focus` slot is non-writable.\n */\n agentFocus: () => void;\n}\n\n/**\n * Backwards-compatible alias retained for one release cycle — the\n * forwarded ref's value is structurally an `HTMLInputElement` with the\n * `SearchInputHandle` methods grafted on. Consumers can read it as\n * either type via a cast.\n */\nexport type SearchInputRefValue = HTMLInputElement & SearchInputHandle;\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n value,\n defaultValue,\n onChange,\n onInput,\n debounceMs = 200,\n isLoading = false,\n variant = 'inline',\n size = 'md',\n globalShortcut,\n placeholder,\n disabled,\n className,\n name,\n id,\n form,\n autoComplete = 'off',\n autoFocus,\n role,\n ...ariaProps\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inputId = id ?? ctx.id;\n const effectiveDisabled = Boolean(ctx.disabled || disabled);\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n String(defaultValue ?? ''),\n );\n const rawValue = isControlled ? String(value) : internalValue;\n const hasValue = rawValue.length > 0;\n\n const innerRef = useRef<HTMLInputElement | null>(null);\n\n const [expanded, setExpanded] = useState<boolean>(\n variant === 'inline' || hasValue,\n );\n const pendingFocusRef = useRef<boolean>(false);\n\n useLayoutEffect(() => {\n if (pendingFocusRef.current && innerRef.current) {\n innerRef.current.focus();\n pendingFocusRef.current = false;\n }\n });\n\n const debouncedOnChange = useDebouncedCallback(\n (next: string) => {\n onChange?.(next);\n },\n debounceMs,\n );\n\n const fireImmediate = useCallback(\n (next: string) => {\n debouncedOnChange.cancel();\n onChange?.(next);\n },\n [debouncedOnChange, onChange],\n );\n\n const commitValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n },\n [isControlled],\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const next = event.target.value;\n commitValue(next);\n if (next === '') {\n fireImmediate('');\n } else {\n debouncedOnChange(next);\n }\n };\n\n const handleNativeInput = (event: FormEvent<HTMLInputElement>) => {\n const next = event.currentTarget.value;\n onInput?.(next);\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Escape') return;\n if (event.nativeEvent.isComposing) return;\n if (!hasValue) return;\n event.preventDefault();\n event.stopPropagation();\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleClear = () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n if (variant !== 'expandable') return;\n if (event.currentTarget.value === '') {\n setExpanded(false);\n }\n };\n\n const focusInput = useCallback(() => {\n if (variant === 'expandable' && !expanded) {\n pendingFocusRef.current = true;\n setExpanded(true);\n } else {\n innerRef.current?.focus();\n }\n }, [variant, expanded]);\n\n // Build a `SearchInputRefValue` (HTMLInputElement & SearchInputHandle)\n // by attaching the curated agent methods onto the live input element.\n // Returning a fresh object would break existing consumers who do\n // `ref.current.value`, `ref.current.focus()`, etc. Instead we extend\n // the underlying DOM node with the handle methods.\n useImperativeHandle(\n ref,\n () => {\n const node = innerRef.current;\n // `useImperativeHandle` may not return null in strict typing, but\n // the cast lets us yield the live DOM node on mount and `null`\n // before mount — React itself tolerates this.\n if (!node) return null as unknown as HTMLInputElement;\n // `focus` is a non-writable own property on HTMLInputElement, so\n // we use `defineProperty` (which honours `writable: true`) to\n // graft the curated methods. The native `focus()` is the\n // canonical one — for `variant=\"expandable\"` consumers should\n // call the named curated method via `agentRef` rather than via\n // the DOM ref.\n const extras: Record<string, (...args: unknown[]) => unknown> = {\n getQuery: () => rawValue,\n setQuery: (next: unknown) => {\n const value = String(next ?? '');\n commitValue(value);\n onInput?.(value);\n fireImmediate(value);\n },\n clear: () => {\n commitValue('');\n onInput?.('');\n fireImmediate('');\n innerRef.current?.focus();\n },\n submit: () => {\n fireImmediate(rawValue);\n },\n // Named `agentFocus` to avoid clashing with the native, read-only\n // `HTMLElement.focus` slot. The adapter wires `actions.focus` to\n // `agentFocus` so the expandable-aware path is preserved.\n agentFocus: () => {\n focusInput();\n },\n };\n for (const [name, fn] of Object.entries(extras)) {\n Object.defineProperty(node, name, {\n value: fn,\n configurable: true,\n writable: true,\n enumerable: false,\n });\n }\n return node;\n },\n [rawValue, commitValue, onInput, fireImmediate, focusInput],\n );\n\n useEffect(() => {\n if (!globalShortcut) return;\n const onKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key !== globalShortcut) return;\n if (event.isComposing) return;\n if (event.defaultPrevented) return;\n if (isEditableElement(document.activeElement)) return;\n event.preventDefault();\n focusInput();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [globalShortcut, focusInput]);\n\n const clearLabel = t('ui.inputs.search.clear', 'Clear search');\n const loadingLabel = t('ui.inputs.search.loading', 'Searching…');\n const defaultPlaceholder = t('ui.inputs.search.placeholder', 'Search…');\n const resolvedPlaceholder = placeholder ?? defaultPlaceholder;\n\n if (variant === 'expandable' && !expanded) {\n return (\n <div data-component=\"search-input\" data-component-id={id} className={expandableWrapperVariants({ className })}>\n <button\n type=\"button\"\n aria-label={resolvedPlaceholder}\n aria-expanded={false}\n aria-controls={inputId}\n disabled={effectiveDisabled}\n onClick={() => {\n pendingFocusRef.current = true;\n setExpanded(true);\n }}\n className={expandButtonVariants()}\n >\n <Search aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n </div>\n );\n }\n\n const comboboxAria =\n role === 'combobox'\n ? {\n role: 'combobox' as const,\n 'aria-expanded': ariaProps['aria-expanded'],\n 'aria-controls': ariaProps['aria-controls'],\n 'aria-activedescendant': ariaProps['aria-activedescendant'],\n }\n : undefined;\n\n const showClear = hasValue && !isLoading && !effectiveDisabled;\n const endSlot = isLoading ? (\n <Spinner size=\"sm\" label={loadingLabel} />\n ) : showClear ? (\n <span className=\"ds:inline-block ds:size-4\" aria-hidden=\"true\" />\n ) : undefined;\n\n return (\n <div data-component=\"search-input\" data-component-id={id} className={rootVariants({ className })}>\n <TextInput\n ref={innerRef}\n id={inputId}\n type=\"search\"\n size={size}\n value={rawValue}\n disabled={effectiveDisabled}\n placeholder={resolvedPlaceholder}\n name={name}\n form={form}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n startAdornment={<Search />}\n endAdornment={endSlot}\n clearable={false}\n onChange={handleChange}\n onInput={handleNativeInput}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n aria-label={ariaProps['aria-label']}\n aria-busy={isLoading || undefined}\n {...comboboxAria}\n />\n {showClear ? (\n <button\n type=\"button\"\n aria-label={clearLabel}\n onClick={handleClear}\n className={clearButtonVariants()}\n >\n <X aria-hidden=\"true\" className=\"ds:size-4\" />\n </button>\n ) : null}\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {isLoading ? loadingLabel : ''}\n </span>\n </div>\n );\n },\n);\n\nSearchInput.displayName = 'SearchInput';\n"],"names":["rootVariants","cva","clearButtonVariants","expandButtonVariants","expandableWrapperVariants","isEditableElement","el","tag","SearchInput","forwardRef","value","defaultValue","onChange","onInput","debounceMs","isLoading","variant","size","globalShortcut","placeholder","disabled","className","name","id","form","autoComplete","autoFocus","role","ariaProps","ref","t","useTranslation","ctx","useFormField","inputId","effectiveDisabled","isControlled","internalValue","setInternalValue","useState","rawValue","hasValue","innerRef","useRef","expanded","setExpanded","pendingFocusRef","useLayoutEffect","debouncedOnChange","useDebouncedCallback","next","fireImmediate","useCallback","commitValue","handleChange","event","handleNativeInput","handleKeyDown","_a","handleClear","handleBlur","focusInput","useImperativeHandle","node","extras","fn","useEffect","onKeyDown","clearLabel","loadingLabel","defaultPlaceholder","resolvedPlaceholder","jsx","Search","comboboxAria","showClear","endSlot","Spinner","jsxs","TextInput","X"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search-input.agent-CfZvViOd.js","sources":["../../src/components/search-input/search-input.agent.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — SearchInput. */\n/* */\n/* The query string is whatever the user typed — adapters return it as */\n/* the consumer's filter model already exposes (PRS §26 §7). If a user */\n/* types PHI into a search box that is their action; the adapter does */\n/* not extract anything beyond what was already typed. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SearchInputHandle } from './search-input';\n\nexport const searchInputAgent: AgentAdapter<SearchInputHandle> = {\n id: 'search-input',\n capabilities: ['filter', 'edit_inline'],\n state: {\n query: {\n type: 'string',\n descriptionKey: 'ui.agent.searchInput.state.query',\n description: 'Current raw query string (not debounced).',\n read: (handle) => handle.getQuery(),\n },\n isEmpty: {\n type: 'boolean',\n descriptionKey: 'ui.agent.searchInput.state.isEmpty',\n description: 'True when the query is empty.',\n read: (handle) => handle.getQuery().length === 0,\n },\n },\n actions: {\n set_query: {\n safety: 'read',\n argsType: '{ query: string }',\n descriptionKey: 'ui.agent.searchInput.actions.setQuery',\n description: 'Replace the current query with the given string and fire onChange immediately.',\n invoke: (handle, args: { query: string }) => {\n handle.setQuery(args.query);\n },\n },\n clear: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchInput.actions.clear',\n description: 'Clear the query and return focus to the input.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n submit: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchInput.actions.submit',\n description: 'Fire the current query without waiting for debounce.',\n invoke: (handle) => {\n handle.submit();\n },\n },\n focus: {\n safety: 'read',\n descriptionKey: 'ui.agent.searchInput.actions.focus',\n description: 'Move keyboard focus to the input (expanding it first if `variant=\"expandable\"`).',\n invoke: (handle) => {\n handle.agentFocus();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'search-input',\n description: 'Marks the SearchInput wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n"],"names":["searchInputAgent","handle","args"],"mappings":"AAYO,MAAMA,IAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,cAAc,CAAC,UAAU,aAAa;AAAA,EACtC,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,SAAS;AAAA,MACP,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,MAAM,CAACA,MAAWA,EAAO,SAAA,EAAW,WAAW;AAAA,IAAA;AAAA,EACjD;AAAA,EAEF,SAAS;AAAA,IACP,WAAW;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,GAAQC,MAA4B;AAC3C,QAAAD,EAAO,SAASC,EAAK,KAAK;AAAA,MAC5B;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACD,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,OAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,WAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-DY1Cb2Tg.js","sources":["../../src/components/select/select.agent.ts","../../src/components/select/select.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — Select. */\n/* */\n/* See `src/docs/26-agent-readiness.mdx` for the contract. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { SelectHandle } from './select';\n\nexport const selectAgent: AgentAdapter<SelectHandle> = {\n id: 'select',\n capabilities: ['select_single', 'open', 'close'],\n state: {\n value: {\n type: 'string',\n descriptionKey: 'ui.agent.select.state.value',\n description: 'Currently selected option value, or empty string when none.',\n read: (handle) => handle.getValue(),\n },\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.select.state.isOpen',\n description: 'Whether the option list is open.',\n read: (handle) => handle.isOpen(),\n },\n },\n actions: {\n set_value: {\n safety: 'write',\n argsType: '{ value: string }',\n descriptionKey: 'ui.agent.select.actions.setValue',\n description: 'Select the option with the given value.',\n invoke: (handle, args: { value: string }) => {\n handle.setValue(args.value);\n },\n },\n clear: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.select.actions.clear',\n description: 'Clear the current selection.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n open: {\n safety: 'read',\n descriptionKey: 'ui.agent.select.actions.open',\n description: 'Open the option list.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n descriptionKey: 'ui.agent.select.actions.close',\n description: 'Close the option list.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'select',\n description: 'Marks the Select trigger.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-option-id',\n description: 'Stable opaque option value emitted on each rendered option.',\n },\n },\n};\n","import {\n forwardRef,\n useContext,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type MutableRefObject,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { useAgentRegistration } from '../../agent';\nimport { selectAgent } from './select.agent';\n\n/** Agent-readiness curated handle for Select. */\nexport interface SelectHandle {\n getValue: () => string;\n setValue: (value: string) => void;\n clear: () => void;\n open: () => void;\n close: () => void;\n isOpen: () => boolean;\n}\nimport * as RadixSelect from '@radix-ui/react-select';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Check, ChevronDown, ChevronUp, X } from 'lucide-react';\nimport {\n FormFieldContext,\n useFormField,\n} from '../form-field/form-field-context';\nimport type { OptionShape } from '../_shared/option';\nimport { groupOptions } from '../_shared/group-options';\nimport { useDirection } from '../_shared/use-direction';\n\nconst selectTriggerVariants = cva(\n [\n 'ds:group ds:inline-flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:w-full',\n 'ds:rounded-[var(--radius-sm)] ds:border ds:border-border ds:bg-background',\n 'ds:text-foreground ds:placeholder:text-muted-foreground',\n 'ds:data-[placeholder]:text-muted-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:disabled:cursor-not-allowed ds:disabled:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:h-[var(--min-target-size)] ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n tone: {\n default: '',\n error: 'ds:border-destructive ds:focus-visible:outline-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n tone: 'default',\n },\n },\n);\n\nconst selectContentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)] ds:overflow-hidden',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:text-foreground',\n 'ds:shadow-[var(--shadow-lg)]',\n 'ds:animate-in ds:fade-in ds:zoom-in-95',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[side=bottom]:slide-in-from-top-2',\n 'ds:data-[side=top]:slide-in-from-bottom-2',\n 'ds:motion-reduce:animate-none',\n ].join(' '),\n);\n\nconst selectItemVariants = cva(\n [\n 'ds:relative ds:flex ds:cursor-pointer ds:items-center',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-foreground ds:outline-none ds:select-none',\n 'ds:data-[highlighted]:bg-muted ds:data-[highlighted]:text-foreground',\n 'ds:data-[disabled]:pointer-events-none ds:data-[disabled]:opacity-50',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:min-h-8 ds:ps-8 ds:pe-3 ds:text-[length:var(--font-size-sm)]',\n md: 'ds:min-h-[var(--min-target-size)] ds:ps-8 ds:pe-3 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:min-h-12 ds:ps-10 ds:pe-4 ds:text-[length:var(--font-size-lg)]',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n },\n);\n\nconst selectLabelClasses = [\n 'ds:ps-8 ds:pe-3 ds:py-1.5',\n 'type-eyebrow ds:text-muted-foreground',\n 'ds:sticky ds:top-0 ds:bg-background',\n].join(' ');\n\nconst iconSizeByItemSize = {\n sm: 'ds:size-3.5',\n md: 'ds:size-4',\n lg: 'ds:size-5',\n} as const;\n\nconst itemIndicatorStartByItemSize = {\n sm: 'ds:start-2',\n md: 'ds:start-2',\n lg: 'ds:start-3',\n} as const;\n\nfunction composeRefs<T>(\n ...refs: Array<Ref<T> | undefined | null>\n): (node: T | null) => void {\n return (node: T | null) => {\n for (const r of refs) {\n if (!r) continue;\n if (typeof r === 'function') {\n r(node);\n } else {\n (r as MutableRefObject<T | null>).current = node;\n }\n }\n };\n}\n\n// ---------------------------------------------------------------------------\n// Compound sub-components — thin `forwardRef` wrappers over Radix parts.\n// ---------------------------------------------------------------------------\n\ntype SelectRootProps = ComponentPropsWithoutRef<typeof RadixSelect.Root>;\n\nconst SelectRoot = (props: SelectRootProps) => <RadixSelect.Root {...props} />;\nSelectRoot.displayName = 'Select.Root';\n\ntype SelectTriggerElement = ElementRef<typeof RadixSelect.Trigger>;\ntype SelectTriggerProps = ComponentPropsWithoutRef<typeof RadixSelect.Trigger> &\n VariantProps<typeof selectTriggerVariants>;\n\nconst SelectTrigger = forwardRef<SelectTriggerElement, SelectTriggerProps>(\n ({ size, tone, className, children, ...props }, ref) => (\n <RadixSelect.Trigger\n ref={ref}\n className={selectTriggerVariants({ size, tone, className })}\n {...props}\n >\n {children}\n </RadixSelect.Trigger>\n ),\n);\nSelectTrigger.displayName = 'Select.Trigger';\n\ntype SelectValueProps = ComponentPropsWithoutRef<typeof RadixSelect.Value>;\n\nconst SelectValue = forwardRef<\n ElementRef<typeof RadixSelect.Value>,\n SelectValueProps\n>((props, ref) => <RadixSelect.Value ref={ref} {...props} />);\nSelectValue.displayName = 'Select.Value';\n\ntype SelectContentProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Content\n> & {\n container?: HTMLElement | null;\n};\n\nconst SelectContent = forwardRef<\n ElementRef<typeof RadixSelect.Content>,\n SelectContentProps\n>(\n (\n {\n className,\n children,\n position = 'popper',\n sideOffset = 4,\n container,\n ...props\n },\n ref,\n ) => (\n <RadixSelect.Portal container={container ?? undefined}>\n <RadixSelect.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={selectContentVariants({ className })}\n {...props}\n >\n <RadixSelect.ScrollUpButton className=\"ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default\">\n <ChevronUp aria-hidden=\"true\" className=\"ds:size-4\" />\n </RadixSelect.ScrollUpButton>\n {children}\n <RadixSelect.ScrollDownButton className=\"ds:flex ds:items-center ds:justify-center ds:h-6 ds:bg-background ds:cursor-default\">\n <ChevronDown aria-hidden=\"true\" className=\"ds:size-4\" />\n </RadixSelect.ScrollDownButton>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n ),\n);\nSelectContent.displayName = 'Select.Content';\n\ntype SelectViewportProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Viewport\n>;\n\nconst SelectViewport = forwardRef<\n ElementRef<typeof RadixSelect.Viewport>,\n SelectViewportProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Viewport\n ref={ref}\n className={['ds:p-1', className].filter(Boolean).join(' ')}\n {...props}\n />\n));\nSelectViewport.displayName = 'Select.Viewport';\n\ntype SelectItemProps = ComponentPropsWithoutRef<typeof RadixSelect.Item> &\n VariantProps<typeof selectItemVariants>;\n\nconst SelectItem = forwardRef<\n ElementRef<typeof RadixSelect.Item>,\n SelectItemProps\n>(({ size = 'md', className, children, ...props }, ref) => {\n const indicatorStart = itemIndicatorStartByItemSize[size ?? 'md'];\n const iconSize = iconSizeByItemSize[size ?? 'md'];\n return (\n <RadixSelect.Item\n ref={ref}\n className={selectItemVariants({ size, className })}\n {...props}\n >\n <span\n className={`ds:absolute ${indicatorStart} ds:inline-flex ds:items-center ds:justify-center`}\n aria-hidden=\"true\"\n >\n <RadixSelect.ItemIndicator>\n <Check className={iconSize} />\n </RadixSelect.ItemIndicator>\n </span>\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n );\n});\nSelectItem.displayName = 'Select.Item';\n\ntype SelectItemTextProps = ComponentPropsWithoutRef<\n typeof RadixSelect.ItemText\n>;\n\nconst SelectItemText = forwardRef<\n ElementRef<typeof RadixSelect.ItemText>,\n SelectItemTextProps\n>((props, ref) => <RadixSelect.ItemText ref={ref} {...props} />);\nSelectItemText.displayName = 'Select.ItemText';\n\ntype SelectGroupProps = ComponentPropsWithoutRef<typeof RadixSelect.Group>;\n\nconst SelectGroup = forwardRef<\n ElementRef<typeof RadixSelect.Group>,\n SelectGroupProps\n>((props, ref) => <RadixSelect.Group ref={ref} {...props} />);\nSelectGroup.displayName = 'Select.Group';\n\ntype SelectLabelProps = ComponentPropsWithoutRef<typeof RadixSelect.Label>;\n\nconst SelectLabel = forwardRef<\n ElementRef<typeof RadixSelect.Label>,\n SelectLabelProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Label\n ref={ref}\n className={[selectLabelClasses, className].filter(Boolean).join(' ')}\n {...props}\n />\n));\nSelectLabel.displayName = 'Select.Label';\n\ntype SelectSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixSelect.Separator\n>;\n\nconst SelectSeparator = forwardRef<\n ElementRef<typeof RadixSelect.Separator>,\n SelectSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixSelect.Separator\n ref={ref}\n className={['ds:my-1 ds:h-px ds:bg-border', className].filter(Boolean).join(' ')}\n {...props}\n />\n));\nSelectSeparator.displayName = 'Select.Separator';\n\n// ---------------------------------------------------------------------------\n// Convenience form — `<Select options={[{value, label, group?}]} />`.\n// ---------------------------------------------------------------------------\n\nexport type SelectOption<T extends string = string> = OptionShape<T>;\n\nexport interface SelectProps<T extends string = string> {\n options: SelectOption<T>[];\n value?: T | '';\n defaultValue?: T;\n onValueChange?: (value: T | '') => void;\n placeholder?: string;\n clearable?: boolean;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n id?: string;\n size?: 'sm' | 'md' | 'lg';\n tone?: 'default' | 'error';\n 'aria-label'?: string;\n className?: string;\n}\n\nconst SelectImpl = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n {\n options,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n clearable = false,\n disabled,\n required,\n name,\n id,\n size = 'md',\n tone = 'default',\n className,\n 'aria-label': ariaLabel,\n },\n ref,\n) {\n const { t } = useTranslation();\n const ctx = useFormField();\n const inFormField = useContext(FormFieldContext) !== null;\n\n const [internalValue, setInternalValue] = useState<string>(\n value ?? defaultValue ?? '',\n );\n const isControlled = value !== undefined;\n const currentValue = isControlled ? value : internalValue;\n\n const [openState, setOpenState] = useState<boolean>(false);\n const currentValueRef = useRef<string>(currentValue);\n currentValueRef.current = currentValue;\n\n const triggerId = id ?? (inFormField ? ctx.id : undefined);\n const effectiveDisabled = (inFormField ? ctx.disabled : false) || Boolean(disabled);\n const effectiveRequired = (inFormField ? ctx.required : false) || Boolean(required);\n const effectiveInvalid = inFormField ? ctx.invalid : false;\n const effectiveTone = effectiveInvalid ? 'error' : tone;\n const describedBy = inFormField && ctx.describedBy ? ctx.describedBy : undefined;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const composedTriggerRef = composeRefs(ref, triggerRef);\n const dir = useDirection(triggerRef);\n\n const emitValue = onValueChange as\n | ((value: string) => void)\n | undefined;\n\n const handleValueChange = (next: string) => {\n if (!isControlled) setInternalValue(next);\n emitValue?.(next);\n };\n\n const handleClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if (!isControlled) setInternalValue('');\n emitValue?.('');\n triggerRef.current?.focus();\n };\n\n const resolvedPlaceholder =\n placeholder ?? t('ui.inputs.select.placeholder', 'Select…');\n\n const showClear = clearable && !!currentValue && !effectiveDisabled;\n\n const groups = groupOptions(options);\n\n const agentHandle = useMemo<SelectHandle>(\n () => ({\n getValue: () => currentValueRef.current,\n setValue: (next) => {\n if (!isControlled) setInternalValue(next);\n emitValue?.(next);\n },\n clear: () => {\n if (!isControlled) setInternalValue('');\n emitValue?.('');\n },\n open: () => setOpenState(true),\n close: () => setOpenState(false),\n isOpen: () => openState,\n }),\n [emitValue, isControlled, openState],\n );\n useAgentRegistration(selectAgent, agentHandle, id);\n\n return (\n <RadixSelect.Root\n value={currentValue === '' ? undefined : currentValue}\n onValueChange={handleValueChange}\n open={openState}\n onOpenChange={setOpenState}\n disabled={effectiveDisabled}\n required={effectiveRequired}\n name={name}\n dir={dir}\n >\n <RadixSelect.Trigger\n ref={composedTriggerRef}\n id={triggerId}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={effectiveInvalid || undefined}\n data-component=\"select\"\n data-component-id={id}\n className={selectTriggerVariants({\n size,\n tone: effectiveTone,\n className,\n })}\n >\n <RadixSelect.Value placeholder={resolvedPlaceholder} />\n <span className=\"ds:ms-auto ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {showClear ? (\n <button\n type=\"button\"\n aria-label={t('ui.inputs.select.clear', 'Clear selection')}\n onClick={handleClear}\n onPointerDown={(event) => event.stopPropagation()}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.stopPropagation();\n }\n }}\n className={[\n 'ds:inline-flex ds:items-center ds:justify-center ds:rounded-[var(--radius-sm)]',\n 'ds:text-muted-foreground ds:hover:text-foreground',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:size-4',\n ].join(' ')}\n >\n <X aria-hidden=\"true\" className=\"ds:size-3.5\" />\n </button>\n ) : null}\n <RadixSelect.Icon asChild>\n <ChevronDown\n aria-hidden=\"true\"\n className={[\n 'ds:size-4 ds:shrink-0 ds:text-muted-foreground',\n 'ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:group-data-[state=open]:rotate-180',\n ].join(' ')}\n />\n </RadixSelect.Icon>\n </span>\n </RadixSelect.Trigger>\n <SelectContent>\n <SelectViewport>\n {options.length === 0 ? (\n <div className=\"ds:ps-8 ds:pe-3 ds:py-2 type-body-sm ds:text-muted-foreground\">\n {t('ui.inputs.select.noOptions', 'No options')}\n </div>\n ) : (\n groups.map(({ group, items }, groupIndex) => {\n const body = items.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n size={size}\n data-option-id={option.value}\n >\n {option.label}\n </SelectItem>\n ));\n if (!group) {\n return (\n <RadixSelect.Group key={`group-${groupIndex}`}>\n {body}\n </RadixSelect.Group>\n );\n }\n return (\n <RadixSelect.Group key={`group-${group}`}>\n <SelectLabel>{group}</SelectLabel>\n {body}\n </RadixSelect.Group>\n );\n })\n )}\n </SelectViewport>\n </SelectContent>\n </RadixSelect.Root>\n );\n});\nSelectImpl.displayName = 'Select';\n\ninterface SelectComponent {\n <T extends string = string>(\n props: SelectProps<T> & { ref?: Ref<HTMLButtonElement> },\n ): ReactElement | null;\n displayName?: string;\n Root: typeof SelectRoot;\n Trigger: typeof SelectTrigger;\n Value: typeof SelectValue;\n Content: typeof SelectContent;\n Viewport: typeof SelectViewport;\n Item: typeof SelectItem;\n ItemText: typeof SelectItemText;\n Group: typeof SelectGroup;\n Label: typeof SelectLabel;\n Separator: typeof SelectSeparator;\n}\n\nconst SelectWithStatics = Object.assign(SelectImpl, {\n Root: SelectRoot,\n Trigger: SelectTrigger,\n Value: SelectValue,\n Content: SelectContent,\n Viewport: SelectViewport,\n Item: SelectItem,\n ItemText: SelectItemText,\n Group: SelectGroup,\n Label: SelectLabel,\n Separator: SelectSeparator,\n}) as unknown as SelectComponent;\n\nexport const Select = SelectWithStatics;\n\nexport {\n SelectRoot,\n SelectTrigger,\n SelectValue,\n SelectContent,\n SelectViewport,\n SelectItem,\n SelectItemText,\n SelectGroup,\n SelectLabel,\n SelectSeparator,\n};\n\nexport {\n selectTriggerVariants,\n selectContentVariants,\n selectItemVariants,\n};\n\nexport type {\n SelectTriggerProps,\n SelectContentProps,\n SelectItemProps,\n SelectLabelProps,\n SelectRootProps,\n};\n\nexport type { ReactNode };\n"],"names":["selectAgent","handle","args","selectTriggerVariants","cva","selectContentVariants","selectItemVariants","selectLabelClasses","iconSizeByItemSize","itemIndicatorStartByItemSize","composeRefs","refs","node","r","SelectRoot","props","jsx","RadixSelect","SelectTrigger","forwardRef","size","tone","className","children","ref","SelectValue","SelectContent","position","sideOffset","container","jsxs","ChevronUp","ChevronDown","SelectViewport","SelectItem","indicatorStart","iconSize","Check","SelectItemText","SelectGroup","SelectLabel","SelectSeparator","SelectImpl","options","value","defaultValue","onValueChange","placeholder","clearable","disabled","required","name","id","ariaLabel","t","useTranslation","ctx","useFormField","inFormField","useContext","FormFieldContext","internalValue","setInternalValue","useState","isControlled","currentValue","openState","setOpenState","currentValueRef","useRef","triggerId","effectiveDisabled","effectiveRequired","effectiveInvalid","effectiveTone","describedBy","triggerRef","composedTriggerRef","dir","useDirection","emitValue","handleValueChange","next","handleClear","event","_a","resolvedPlaceholder","showClear","groups","groupOptions","agentHandle","useMemo","useAgentRegistration","X","group","items","groupIndex","body","option","SelectWithStatics","Select"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"send-CySZIRPJ.js","sources":["../../node_modules/lucide-react/dist/esm/icons/send.js"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\",\n key: \"1ffxy3\"\n }\n ],\n [\"path\", { d: \"m21.854 2.147-10.94 10.939\", key: \"12cjpa\" }]\n];\nconst Send = createLucideIcon(\"send\", __iconNode);\n\nexport { __iconNode, Send as default };\n//# sourceMappingURL=send.js.map\n"],"names":["__iconNode","Send","createLucideIcon"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,8BAA8B,KAAK,SAAQ,CAAE;AAC7D,GACMC,IAAOC,EAAiB,QAAQF,CAAU;","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"separator-B4wXDLNC.js","sources":["../../src/components/separator/separator.tsx"],"sourcesContent":["import {\n forwardRef,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Intentionally does NOT wrap `@radix-ui/react-separator`. That package\n * is a ~1 KB styling wrapper that only adds `role=\"separator\"` +\n * `aria-orientation` + `role=\"none\"` + `aria-hidden` for the decorative\n * path — exactly what this component does by hand. Adding the Radix dep\n * would duplicate logic with no user-facing gain. See the \"Radix-first\"\n * note in the user story (layout/separator.mdx).\n */\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst separatorVariants = cva(\n [\n 'ds:shrink-0',\n 'ds:forced-colors:bg-[CanvasText]',\n ].join(' '),\n {\n variants: {\n orientation: {\n horizontal: [\n // Horizontal rule: fills inline axis, hairline block size.\n 'ds:block-size-[var(--border-width-hairline)]',\n 'ds:inline-size-full',\n ].join(' '),\n vertical: [\n // Vertical rule: stretches block axis, hairline inline size.\n 'ds:inline-size-[var(--border-width-hairline)]',\n 'ds:block-size-full',\n 'ds:self-stretch',\n ].join(' '),\n },\n intensity: {\n subtle: 'ds:bg-[color:var(--border)]',\n strong: 'ds:bg-[color:var(--muted-foreground)]/40',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n intensity: 'subtle',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface SeparatorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-orientation'>,\n VariantProps<typeof separatorVariants> {\n /**\n * When `true` the separator is purely visual — rendered as\n * `role='none'` + `aria-hidden='true'`, skipped in screen-reader rotor\n * navigation. Default `false` (non-decorative, announces as a\n * semantic separator per WAI-ARIA).\n */\n decorative?: boolean;\n}\n\nexport const Separator = forwardRef<HTMLDivElement, SeparatorProps>(\n (\n {\n orientation = 'horizontal',\n intensity = 'subtle',\n decorative = false,\n className,\n ...rest\n },\n ref,\n ) => {\n // Non-decorative: role=\"separator\" + aria-orientation so screen\n // readers can announce direction. Decorative: role=\"none\" +\n // aria-hidden so AT skips entirely. WAI-ARIA allows either path.\n return (\n <div\n ref={ref}\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : orientation ?? 'horizontal'}\n aria-hidden={decorative ? true : undefined}\n data-component=\"separator\"\n data-orientation={orientation}\n className={separatorVariants({ orientation, intensity, className })}\n {...rest}\n />\n );\n },\n);\n\nSeparator.displayName = 'Separator';\n"],"names":["separatorVariants","cva","Separator","forwardRef","orientation","intensity","decorative","className","rest","ref","jsx"],"mappings":";;;AAmBA,MAAMA,IAAoBC;AAAA,EACxB;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,aAAa;AAAA,QACX,YAAY;AAAA;AAAA,UAEV;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,UAAU;AAAA;AAAA,UAER;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,MAAA;AAAA,MAEZ,WAAW;AAAA,QACT,QAAQ;AAAA,QACR,QAAQ;AAAA,MAAA;AAAA,IACV;AAAA,IAEF,iBAAiB;AAAA,MACf,aAAa;AAAA,MACb,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ,GAkBaC,IAAYC;AAAA,EACvB,CACE;AAAA,IACE,aAAAC,IAAc;AAAA,IACd,WAAAC,IAAY;AAAA,IACZ,YAAAC,IAAa;AAAA,IACb,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MAME,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,MAAMH,IAAa,SAAS;AAAA,MAC5B,oBAAkBA,IAAa,SAAYF,KAAe;AAAA,MAC1D,eAAaE,IAAa,KAAO;AAAA,MACjC,kBAAe;AAAA,MACf,oBAAkBF;AAAA,MAClB,WAAWJ,EAAkB,EAAE,aAAAI,GAAa,WAAAC,GAAW,WAAAE,GAAW;AAAA,MACjE,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AAEAN,EAAU,cAAc;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-B9kH9pcI.js","sources":["../../src/components/sheet/sheet.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { X } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\n\nconst OVERLAY_CLASSES = [\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/[var(--opacity-70)]',\n 'ds:backdrop-blur-sm',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in-0',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out-0',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n].join(' ');\n\nconst contentVariants = cva(\n [\n 'ds:fixed ds:z-[var(--z-modal)] ds:flex ds:flex-col',\n 'ds:bg-[var(--popover)] ds:text-[var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:focus-visible:outline-none',\n 'ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n ].join(' '),\n {\n variants: {\n side: {\n start: [\n 'ds:start-0 ds:inset-y-0',\n 'ds:border-e ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-left-full ds:rtl:data-[state=open]:slide-in-from-right-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-left-full ds:rtl:data-[state=closed]:slide-out-to-right-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n end: [\n 'ds:end-0 ds:inset-y-0',\n 'ds:border-s ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:ltr:data-[state=open]:slide-in-from-right-full ds:rtl:data-[state=open]:slide-in-from-left-full',\n 'ds:data-[state=closed]:animate-out ds:ltr:data-[state=closed]:slide-out-to-right-full ds:rtl:data-[state=closed]:slide-out-to-left-full',\n 'ds:max-sm:[inline-size:100dvw] ds:max-sm:[block-size:100dvh]',\n ].join(' '),\n top: [\n 'ds:top-0 ds:inset-x-0',\n 'ds:border-b ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-top-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-top-full',\n ].join(' '),\n bottom: [\n 'ds:bottom-0 ds:inset-x-0',\n 'ds:border-t ds:border-[color:var(--border)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:slide-in-from-bottom-full',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:slide-out-to-bottom-full',\n ].join(' '),\n },\n },\n defaultVariants: { side: 'end' },\n },\n);\n\nfunction getSizeClass(\n side: 'start' | 'end' | 'top' | 'bottom',\n size: 'sm' | 'md' | 'lg',\n): string {\n if (side === 'start' || side === 'end') {\n const map = {\n sm: '[inline-size:360px]',\n md: '[inline-size:480px]',\n lg: '[inline-size:640px]',\n } as const;\n return map[size];\n }\n\n const map = {\n sm: '[block-size:40dvh]',\n md: '[block-size:60dvh]',\n lg: '[block-size:80dvh]',\n } as const;\n return map[size];\n}\n\n// Curated agent-readiness handle — see sheet.agent.ts.\nexport interface SheetHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n}\n\nexport interface SheetRootProps\n extends ComponentPropsWithoutRef<typeof RadixDialog.Root> {\n /** Opaque instance id — forwarded to Sheet.Content as `data-component-id`. */\n id?: string;\n}\n\nconst SheetIdContext = createContext<string | undefined>(undefined);\n\nconst SheetRoot = ({ children, id, ...props }: SheetRootProps) => (\n <SheetIdContext.Provider value={id}>\n <RadixDialog.Root {...props}>{children}</RadixDialog.Root>\n </SheetIdContext.Provider>\n);\nSheetRoot.displayName = 'Sheet.Root';\n\nconst SheetTrigger = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Trigger>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Trigger ref={ref} {...props}>\n {children}\n </RadixDialog.Trigger>\n));\nSheetTrigger.displayName = 'Sheet.Trigger';\n\nconst SheetClose = forwardRef<\n HTMLButtonElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Close>\n>(({ children, ...props }, ref) => (\n <RadixDialog.Close ref={ref} {...props}>\n {children}\n </RadixDialog.Close>\n));\nSheetClose.displayName = 'Sheet.Close';\n\nexport interface SheetContentProps\n extends Omit<ComponentPropsWithoutRef<typeof RadixDialog.Content>, 'className'>,\n VariantProps<typeof contentVariants> {\n side?: 'start' | 'end' | 'top' | 'bottom';\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n children: ReactNode;\n}\n\nconst SheetContent = forwardRef<HTMLDivElement, SheetContentProps>(\n ({ side = 'end', size = 'md', className, children, ...props }, ref) => {\n const instanceId = useContext(SheetIdContext);\n return (\n <RadixDialog.Portal>\n <RadixDialog.Overlay className={OVERLAY_CLASSES} />\n <RadixDialog.Content\n ref={ref}\n className={[contentVariants({ side }), getSizeClass(side, size), className]\n .filter(Boolean)\n .join(' ')}\n data-component=\"sheet\"\n data-component-id={instanceId}\n {...props}\n >\n {children}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n );\n },\n);\nSheetContent.displayName = 'Sheet.Content';\n\nconst SheetHeader = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { t } = useTranslation();\n\n return (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:top-0 ds:z-10 ds:flex ds:items-center ds:justify-between',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-b ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n >\n {children}\n <SheetClose asChild>\n <IconButton\n icon={<X />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('ui.common.close', 'Close')}\n />\n </SheetClose>\n </div>\n );\n },\n);\nSheetHeader.displayName = 'Sheet.Header';\n\nconst SheetBody = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:overflow-y-auto ds:overflow-x-hidden ds:flex-1',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-lg)]',\n 'ds:break-words',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetBody.displayName = 'Sheet.Body';\n\nconst SheetFooter = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={[\n 'ds:sticky ds:bottom-0 ds:z-10 ds:flex ds:items-center ds:justify-end ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-lg)] ds:pe-[var(--spacing-lg)] ds:py-[var(--spacing-md)]',\n 'ds:border-t ds:border-[color:var(--border)] ds:bg-[var(--popover)]',\n 'ds:max-sm:flex-col ds:max-sm:[&>*]:w-full',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n ),\n);\nSheetFooter.displayName = 'Sheet.Footer';\n\nconst SheetTitle = forwardRef<\n HTMLHeadingElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Title\n ref={ref}\n className={['type-title-card ds:break-words', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetTitle.displayName = 'Sheet.Title';\n\nconst SheetDescription = forwardRef<\n HTMLParagraphElement,\n ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n <RadixDialog.Description\n ref={ref}\n className={['type-body-sm ds:text-[var(--muted-foreground)]', className]\n .filter(Boolean)\n .join(' ')}\n {...props}\n />\n));\nSheetDescription.displayName = 'Sheet.Description';\n\nexport const Sheet = Object.assign(SheetRoot, {\n Root: SheetRoot,\n Trigger: SheetTrigger,\n Content: SheetContent,\n Header: SheetHeader,\n Body: SheetBody,\n Footer: SheetFooter,\n Title: SheetTitle,\n Description: SheetDescription,\n Close: SheetClose,\n});\n\nexport type SheetHeaderProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetBodyProps = HTMLAttributes<HTMLDivElement>;\nexport type SheetFooterProps = HTMLAttributes<HTMLDivElement>;\n"],"names":["OVERLAY_CLASSES","contentVariants","cva","getSizeClass","side","size","SheetIdContext","createContext","SheetRoot","children","id","props","jsx","RadixDialog","SheetTrigger","forwardRef","ref","SheetClose","SheetContent","className","instanceId","useContext","jsxs","SheetHeader","t","useTranslation","IconButton","X","SheetBody","SheetFooter","SheetTitle","SheetDescription","Sheet"],"mappings":"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"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
const t = {
|
|
2
|
-
id: "sheet",
|
|
3
|
-
capabilities: ["open", "close", "dismiss"],
|
|
4
|
-
state: {
|
|
5
|
-
isOpen: {
|
|
6
|
-
type: "boolean",
|
|
7
|
-
description: "True when the sheet is currently open.",
|
|
8
|
-
read: (e) => e.getIsOpen()
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
actions: {
|
|
12
|
-
open: {
|
|
13
|
-
safety: "read",
|
|
14
|
-
description: "Open the sheet.",
|
|
15
|
-
invoke: (e) => {
|
|
16
|
-
e.open();
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
close: {
|
|
20
|
-
safety: "write",
|
|
21
|
-
description: "Close the sheet. Reversible by reopening.",
|
|
22
|
-
invoke: (e) => {
|
|
23
|
-
e.close();
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
dismiss: {
|
|
27
|
-
safety: "destructive",
|
|
28
|
-
description: "Dismiss the sheet. Loses any in-progress input that has not been committed.",
|
|
29
|
-
invoke: (e) => {
|
|
30
|
-
e.close();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
domHooks: {
|
|
35
|
-
root: { attr: "data-component", value: "sheet" },
|
|
36
|
-
instanceId: {
|
|
37
|
-
attr: "data-component-id",
|
|
38
|
-
sourceProp: "id",
|
|
39
|
-
description: "Sourced from the id prop on Sheet.Root."
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
export {
|
|
44
|
-
t as s
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=sheet.agent-QAyTOxgk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.agent-QAyTOxgk.js","sources":["../../src/components/sheet/sheet.agent.ts"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { SheetHandle } from './sheet';\n\nexport const sheetAgent: AgentAdapter<SheetHandle> = {\n id: 'sheet',\n capabilities: ['open', 'close', 'dismiss'],\n state: {\n isOpen: {\n type: 'boolean',\n description: 'True when the sheet is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n description: 'Open the sheet.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'write',\n description: 'Close the sheet. Reversible by reopening.',\n invoke: (handle) => {\n handle.close();\n },\n },\n dismiss: {\n safety: 'destructive',\n description: 'Dismiss the sheet. Loses any in-progress input that has not been committed.',\n invoke: (handle) => {\n handle.close();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'sheet' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on Sheet.Root.',\n },\n },\n};\n"],"names":["sheetAgent","handle"],"mappings":"AAGO,MAAMA,IAAwC;AAAA,EACnD,IAAI;AAAA,EACJ,cAAc,CAAC,QAAQ,SAAS,SAAS;AAAA,EACzC,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM,CAACC,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,EACrC;AAAA,EAEF,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,KAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM,EAAE,MAAM,kBAAkB,OAAO,QAAA;AAAA,IACvC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ;"}
|