@od-oneapp/uni-ui 2026.1.1301
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/README.md +753 -0
- package/dist/actions-C-SEx2GS.mjs +180 -0
- package/dist/actions-C-SEx2GS.mjs.map +1 -0
- package/dist/actions-Ch7h6cYC.d.mts +50 -0
- package/dist/actions-Cnupw96c.d.mts +50 -0
- package/dist/alert-BVUF7Xzb.d.mts +22 -0
- package/dist/alert-BuPyEXF-.mjs +206 -0
- package/dist/alert-BuPyEXF-.mjs.map +1 -0
- package/dist/alert-CfjDnZpm.d.mts +22 -0
- package/dist/animated-size-container-DSKNt1Cn.mjs +106 -0
- package/dist/animated-size-container-DSKNt1Cn.mjs.map +1 -0
- package/dist/areas-CtE8w69A.mjs +144 -0
- package/dist/areas-CtE8w69A.mjs.map +1 -0
- package/dist/areas-DtGnjGuX.d.mts +22 -0
- package/dist/auth-nav-user-CRxDpY_7.d.mts +30 -0
- package/dist/auth-nav-user-DPFv8dTp.mjs +181 -0
- package/dist/auth-nav-user-DPFv8dTp.mjs.map +1 -0
- package/dist/avatar-DjiX7nT8.mjs +202 -0
- package/dist/avatar-DjiX7nT8.mjs.map +1 -0
- package/dist/badge-CGTN2VG0.d.mts +25 -0
- package/dist/badge-CVoIuyYX.mjs +242 -0
- package/dist/badge-CVoIuyYX.mjs.map +1 -0
- package/dist/badge-DH0tY3wJ.d.mts +25 -0
- package/dist/bars-CWTAPKgm.d.mts +20 -0
- package/dist/bars-DOLvecrq.mjs +125 -0
- package/dist/bars-DOLvecrq.mjs.map +1 -0
- package/dist/branch-BEl6eS77.mjs +323 -0
- package/dist/branch-BEl6eS77.mjs.map +1 -0
- package/dist/branch-BtdY_TLE.d.mts +58 -0
- package/dist/branch-Duq6cW0s.d.mts +58 -0
- package/dist/button-BAdq0gBE.d.mts +31 -0
- package/dist/button-DVOrrZLw.mjs +632 -0
- package/dist/button-DVOrrZLw.mjs.map +1 -0
- package/dist/button-DnjeAftr.d.mts +31 -0
- package/dist/carousel-D-J1Zgn1.d.mts +49 -0
- package/dist/carousel-Dx5AOW5k.mjs +345 -0
- package/dist/carousel-Dx5AOW5k.mjs.map +1 -0
- package/dist/carousel-sY0y1-or.d.mts +49 -0
- package/dist/chart-context-CLV35VLJ.mjs +27 -0
- package/dist/chart-context-CLV35VLJ.mjs.map +1 -0
- package/dist/checkbox-wiF-DV6q.mjs +194 -0
- package/dist/checkbox-wiF-DV6q.mjs.map +1 -0
- package/dist/code-block-Cg_XtPH7.mjs +243 -0
- package/dist/code-block-Cg_XtPH7.mjs.map +1 -0
- package/dist/collapsible-CRgTpRfr.d.mts +46 -0
- package/dist/collapsible-CXy4T04n.mjs +239 -0
- package/dist/collapsible-CXy4T04n.mjs.map +1 -0
- package/dist/combobox-DSrxSkSl.d.mts +79 -0
- package/dist/combobox-DYFh2eZf.d.mts +79 -0
- package/dist/combobox-uEKksQFR.mjs +410 -0
- package/dist/combobox-uEKksQFR.mjs.map +1 -0
- package/dist/command-xK3X_A9t.mjs +206 -0
- package/dist/command-xK3X_A9t.mjs.map +1 -0
- package/dist/components-ai-elements/actions/index.d.mts +5 -0
- package/dist/components-ai-elements/actions/index.mjs +4 -0
- package/dist/components-ai-elements/agent-step/index.d.mts +32 -0
- package/dist/components-ai-elements/agent-step/index.mjs +183 -0
- package/dist/components-ai-elements/agent-step/index.mjs.map +1 -0
- package/dist/components-ai-elements/artifact/index.d.mts +81 -0
- package/dist/components-ai-elements/artifact/index.mjs +153 -0
- package/dist/components-ai-elements/artifact/index.mjs.map +1 -0
- package/dist/components-ai-elements/branch/index.d.mts +5 -0
- package/dist/components-ai-elements/branch/index.mjs +4 -0
- package/dist/components-ai-elements/chain-of-thought/index.d.mts +90 -0
- package/dist/components-ai-elements/chain-of-thought/index.mjs +338 -0
- package/dist/components-ai-elements/chain-of-thought/index.mjs.map +1 -0
- package/dist/components-ai-elements/chat-input/index.d.mts +21 -0
- package/dist/components-ai-elements/chat-input/index.mjs +137 -0
- package/dist/components-ai-elements/chat-input/index.mjs.map +1 -0
- package/dist/components-ai-elements/checkpoint/index.d.mts +46 -0
- package/dist/components-ai-elements/checkpoint/index.mjs +161 -0
- package/dist/components-ai-elements/checkpoint/index.mjs.map +1 -0
- package/dist/components-ai-elements/code-block/index.d.mts +39 -0
- package/dist/components-ai-elements/code-block/index.mjs +4 -0
- package/dist/components-ai-elements/confirmation/index.d.mts +96 -0
- package/dist/components-ai-elements/confirmation/index.mjs +295 -0
- package/dist/components-ai-elements/confirmation/index.mjs.map +1 -0
- package/dist/components-ai-elements/context/index.d.mts +83 -0
- package/dist/components-ai-elements/context/index.mjs +456 -0
- package/dist/components-ai-elements/context/index.mjs.map +1 -0
- package/dist/components-ai-elements/conversation/index.d.mts +46 -0
- package/dist/components-ai-elements/conversation/index.mjs +180 -0
- package/dist/components-ai-elements/conversation/index.mjs.map +1 -0
- package/dist/components-ai-elements/custom/index.d.mts +1142 -0
- package/dist/components-ai-elements/custom/index.mjs +5578 -0
- package/dist/components-ai-elements/custom/index.mjs.map +1 -0
- package/dist/components-ai-elements/generative-ui/index.d.mts +4 -0
- package/dist/components-ai-elements/generative-ui/index.mjs +4 -0
- package/dist/components-ai-elements/image/index.d.mts +20 -0
- package/dist/components-ai-elements/image/index.mjs +121 -0
- package/dist/components-ai-elements/image/index.mjs.map +1 -0
- package/dist/components-ai-elements/inline-citation/index.d.mts +94 -0
- package/dist/components-ai-elements/inline-citation/index.mjs +371 -0
- package/dist/components-ai-elements/inline-citation/index.mjs.map +1 -0
- package/dist/components-ai-elements/loader/index.d.mts +24 -0
- package/dist/components-ai-elements/loader/index.mjs +4 -0
- package/dist/components-ai-elements/message/index.d.mts +153 -0
- package/dist/components-ai-elements/message/index.mjs +597 -0
- package/dist/components-ai-elements/message/index.mjs.map +1 -0
- package/dist/components-ai-elements/model-selector/index.d.mts +72 -0
- package/dist/components-ai-elements/model-selector/index.mjs +224 -0
- package/dist/components-ai-elements/model-selector/index.mjs.map +1 -0
- package/dist/components-ai-elements/open-in-chat/index.d.mts +64 -0
- package/dist/components-ai-elements/open-in-chat/index.mjs +502 -0
- package/dist/components-ai-elements/open-in-chat/index.mjs.map +1 -0
- package/dist/components-ai-elements/plan/index.d.mts +71 -0
- package/dist/components-ai-elements/plan/index.mjs +219 -0
- package/dist/components-ai-elements/plan/index.mjs.map +1 -0
- package/dist/components-ai-elements/prompt-char-counter/index.d.mts +19 -0
- package/dist/components-ai-elements/prompt-char-counter/index.mjs +116 -0
- package/dist/components-ai-elements/prompt-char-counter/index.mjs.map +1 -0
- package/dist/components-ai-elements/prompt-input/index.d.mts +386 -0
- package/dist/components-ai-elements/prompt-input/index.mjs +4 -0
- package/dist/components-ai-elements/queue/index.d.mts +121 -0
- package/dist/components-ai-elements/queue/index.mjs +284 -0
- package/dist/components-ai-elements/queue/index.mjs.map +1 -0
- package/dist/components-ai-elements/reasoning/index.d.mts +42 -0
- package/dist/components-ai-elements/reasoning/index.mjs +241 -0
- package/dist/components-ai-elements/reasoning/index.mjs.map +1 -0
- package/dist/components-ai-elements/shimmer/index.d.mts +23 -0
- package/dist/components-ai-elements/shimmer/index.mjs +4 -0
- package/dist/components-ai-elements/sources/index.d.mts +56 -0
- package/dist/components-ai-elements/sources/index.mjs +211 -0
- package/dist/components-ai-elements/sources/index.mjs.map +1 -0
- package/dist/components-ai-elements/suggestion/index.d.mts +40 -0
- package/dist/components-ai-elements/suggestion/index.mjs +145 -0
- package/dist/components-ai-elements/suggestion/index.mjs.map +1 -0
- package/dist/components-ai-elements/task/index.d.mts +70 -0
- package/dist/components-ai-elements/task/index.mjs +218 -0
- package/dist/components-ai-elements/task/index.mjs.map +1 -0
- package/dist/components-ai-elements/tool/index.d.mts +78 -0
- package/dist/components-ai-elements/tool/index.mjs +370 -0
- package/dist/components-ai-elements/tool/index.mjs.map +1 -0
- package/dist/components-ai-elements/tool-approval/index.d.mts +20 -0
- package/dist/components-ai-elements/tool-approval/index.mjs +252 -0
- package/dist/components-ai-elements/tool-approval/index.mjs.map +1 -0
- package/dist/components-ai-elements/web-preview/index.d.mts +136 -0
- package/dist/components-ai-elements/web-preview/index.mjs +773 -0
- package/dist/components-ai-elements/web-preview/index.mjs.map +1 -0
- package/dist/components-ai-elements-constants.d.mts +207 -0
- package/dist/components-ai-elements-constants.mjs +301 -0
- package/dist/components-ai-elements-constants.mjs.map +1 -0
- package/dist/components-ai-workflows/canvas/index.d.mts +22 -0
- package/dist/components-ai-workflows/canvas/index.mjs +135 -0
- package/dist/components-ai-workflows/canvas/index.mjs.map +1 -0
- package/dist/components-ai-workflows/connection/index.d.mts +22 -0
- package/dist/components-ai-workflows/connection/index.mjs +4 -0
- package/dist/components-ai-workflows/controls/index.d.mts +14 -0
- package/dist/components-ai-workflows/controls/index.mjs +89 -0
- package/dist/components-ai-workflows/controls/index.mjs.map +1 -0
- package/dist/components-ai-workflows/edge/index.d.mts +20 -0
- package/dist/components-ai-workflows/edge/index.mjs +102 -0
- package/dist/components-ai-workflows/edge/index.mjs.map +1 -0
- package/dist/components-ai-workflows/node/index.d.mts +3 -0
- package/dist/components-ai-workflows/node/index.mjs +4 -0
- package/dist/components-ai-workflows/panel/index.d.mts +15 -0
- package/dist/components-ai-workflows/panel/index.mjs +89 -0
- package/dist/components-ai-workflows/panel/index.mjs.map +1 -0
- package/dist/components-ai-workflows/resizable-node/index.d.mts +30 -0
- package/dist/components-ai-workflows/resizable-node/index.mjs +164 -0
- package/dist/components-ai-workflows/resizable-node/index.mjs.map +1 -0
- package/dist/components-ai-workflows/toolbar/index.d.mts +19 -0
- package/dist/components-ai-workflows/toolbar/index.mjs +91 -0
- package/dist/components-ai-workflows/toolbar/index.mjs.map +1 -0
- package/dist/components-auth-client-nav-user.d.mts +3 -0
- package/dist/components-auth-client-nav-user.mjs +4 -0
- package/dist/components-auth-client-providers.d.mts +13 -0
- package/dist/components-auth-client-providers.mjs +89 -0
- package/dist/components-auth-client-providers.mjs.map +1 -0
- package/dist/components-auth-client.d.mts +5 -0
- package/dist/components-auth-client.mjs +5 -0
- package/dist/components-auth-server.d.mts +1878 -0
- package/dist/components-auth-server.mjs +32769 -0
- package/dist/components-auth-server.mjs.map +1 -0
- package/dist/components-auth.d.mts +5 -0
- package/dist/components-auth.mjs +5 -0
- package/dist/components-charts/areas/index.d.mts +3 -0
- package/dist/components-charts/areas/index.mjs +4 -0
- package/dist/components-charts/bars/index.d.mts +3 -0
- package/dist/components-charts/bars/index.mjs +4 -0
- package/dist/components-charts/funnel-chart/index.d.mts +3 -0
- package/dist/components-charts/funnel-chart/index.mjs +4 -0
- package/dist/components-charts/mini-area-chart/index.d.mts +3 -0
- package/dist/components-charts/mini-area-chart/index.mjs +4 -0
- package/dist/components-charts/time-series-chart/index.d.mts +3 -0
- package/dist/components-charts/time-series-chart/index.mjs +4 -0
- package/dist/components-charts/tooltip-sync/index.d.mts +3 -0
- package/dist/components-charts/tooltip-sync/index.mjs +4 -0
- package/dist/components-charts/x-axis/index.d.mts +3 -0
- package/dist/components-charts/x-axis/index.mjs +4 -0
- package/dist/components-charts/y-axis/index.d.mts +3 -0
- package/dist/components-charts/y-axis/index.mjs +4 -0
- package/dist/components-elements-accordion.d.mts +59 -0
- package/dist/components-elements-accordion.mjs +275 -0
- package/dist/components-elements-accordion.mjs.map +1 -0
- package/dist/components-elements-alert.d.mts +3 -0
- package/dist/components-elements-alert.mjs +4 -0
- package/dist/components-elements-avatar.d.mts +24 -0
- package/dist/components-elements-avatar.mjs +4 -0
- package/dist/components-elements-badge.d.mts +4 -0
- package/dist/components-elements-badge.mjs +4 -0
- package/dist/components-elements-button.d.mts +4 -0
- package/dist/components-elements-button.mjs +4 -0
- package/dist/components-elements-card.d.mts +3 -0
- package/dist/components-elements-card.mjs +4 -0
- package/dist/components-elements-carousel.d.mts +5 -0
- package/dist/components-elements-carousel.mjs +4 -0
- package/dist/components-elements-chart.d.mts +24 -0
- package/dist/components-elements-chart.mjs +226 -0
- package/dist/components-elements-chart.mjs.map +1 -0
- package/dist/components-elements-collapsible.d.mts +3 -0
- package/dist/components-elements-collapsible.mjs +4 -0
- package/dist/components-elements-dialog.d.mts +3 -0
- package/dist/components-elements-dialog.mjs +4 -0
- package/dist/components-elements-dropdown-menu.d.mts +3 -0
- package/dist/components-elements-dropdown-menu.mjs +4 -0
- package/dist/components-elements-dynamic-breadcrumb.d.mts +16 -0
- package/dist/components-elements-dynamic-breadcrumb.mjs +4 -0
- package/dist/components-elements-empty.d.mts +18 -0
- package/dist/components-elements-empty.mjs +199 -0
- package/dist/components-elements-empty.mjs.map +1 -0
- package/dist/components-elements-hover-card.d.mts +3 -0
- package/dist/components-elements-hover-card.mjs +4 -0
- package/dist/components-elements-loading-dots.d.mts +3 -0
- package/dist/components-elements-loading-dots.mjs +4 -0
- package/dist/components-elements-pagination-controls.d.mts +28 -0
- package/dist/components-elements-pagination-controls.mjs +4 -0
- package/dist/components-elements-progress.d.mts +28 -0
- package/dist/components-elements-progress.mjs +4 -0
- package/dist/components-elements-resizable.d.mts +31 -0
- package/dist/components-elements-resizable.mjs +4 -0
- package/dist/components-elements-scroll-area.d.mts +3 -0
- package/dist/components-elements-scroll-area.mjs +4 -0
- package/dist/components-elements-separator.d.mts +3 -0
- package/dist/components-elements-separator.mjs +4 -0
- package/dist/components-elements-skeleton.d.mts +3 -0
- package/dist/components-elements-skeleton.mjs +4 -0
- package/dist/components-elements-status-badge.d.mts +22 -0
- package/dist/components-elements-status-badge.mjs +174 -0
- package/dist/components-elements-status-badge.mjs.map +1 -0
- package/dist/components-elements-table.d.mts +44 -0
- package/dist/components-elements-table.mjs +4 -0
- package/dist/components-elements-tabs.d.mts +43 -0
- package/dist/components-elements-tabs.mjs +435 -0
- package/dist/components-elements-tabs.mjs.map +1 -0
- package/dist/components-elements-tooltip.d.mts +3 -0
- package/dist/components-elements-tooltip.mjs +4 -0
- package/dist/components-filter/filter-list/index.d.mts +4 -0
- package/dist/components-filter/filter-list/index.mjs +4 -0
- package/dist/components-filter/filter-select/index.d.mts +4 -0
- package/dist/components-filter/filter-select/index.mjs +4 -0
- package/dist/components-forms/checkbox/index.d.mts +27 -0
- package/dist/components-forms/checkbox/index.mjs +4 -0
- package/dist/components-forms/combobox/index.d.mts +5 -0
- package/dist/components-forms/combobox/index.mjs +4 -0
- package/dist/components-forms/date-picker/index.d.mts +3 -0
- package/dist/components-forms/date-picker/index.mjs +4 -0
- package/dist/components-forms/file-upload/index.d.mts +49 -0
- package/dist/components-forms/file-upload/index.mjs +323 -0
- package/dist/components-forms/file-upload/index.mjs.map +1 -0
- package/dist/components-forms/input/index.d.mts +3 -0
- package/dist/components-forms/input/index.mjs +4 -0
- package/dist/components-forms/input-group/index.d.mts +5 -0
- package/dist/components-forms/input-group/index.mjs +4 -0
- package/dist/components-forms/label/index.d.mts +23 -0
- package/dist/components-forms/label/index.mjs +4 -0
- package/dist/components-forms/radio-group/index.d.mts +29 -0
- package/dist/components-forms/radio-group/index.mjs +215 -0
- package/dist/components-forms/radio-group/index.mjs.map +1 -0
- package/dist/components-forms/select/index.d.mts +3 -0
- package/dist/components-forms/select/index.mjs +4 -0
- package/dist/components-forms/switch/index.d.mts +30 -0
- package/dist/components-forms/switch/index.mjs +4 -0
- package/dist/components-forms/textarea/index.d.mts +19 -0
- package/dist/components-forms/textarea/index.mjs +4 -0
- package/dist/components-layout/app-sidebar/index.d.mts +47 -0
- package/dist/components-layout/app-sidebar/index.mjs +340 -0
- package/dist/components-layout/app-sidebar/index.mjs.map +1 -0
- package/dist/components-layout/artifact-panel/index.d.mts +3 -0
- package/dist/components-layout/artifact-panel/index.mjs +4 -0
- package/dist/components-layout/content-sidebar/index.d.mts +89 -0
- package/dist/components-layout/content-sidebar/index.mjs +202 -0
- package/dist/components-layout/content-sidebar/index.mjs.map +1 -0
- package/dist/components-layout/nav-app-switcher/index.d.mts +3 -0
- package/dist/components-layout/nav-app-switcher/index.mjs +4 -0
- package/dist/components-layout/nav-main/index.d.mts +30 -0
- package/dist/components-layout/nav-main/index.mjs +4 -0
- package/dist/components-layout/nav-projects/index.d.mts +18 -0
- package/dist/components-layout/nav-projects/index.mjs +153 -0
- package/dist/components-layout/nav-projects/index.mjs.map +1 -0
- package/dist/components-layout/nav-secondary/index.d.mts +31 -0
- package/dist/components-layout/nav-secondary/index.mjs +4 -0
- package/dist/components-layout/nav-user/index.d.mts +17 -0
- package/dist/components-layout/nav-user/index.mjs +4 -0
- package/dist/components-layout/oneapp/index.mjs +4 -0
- package/dist/components-layout/sidebar/index.d.mts +8 -0
- package/dist/components-layout/sidebar/index.mjs +4 -0
- package/dist/components-layout/sidebar-inset-header-portal/index.d.mts +3 -0
- package/dist/components-layout/sidebar-inset-header-portal/index.mjs +4 -0
- package/dist/components-layout/sidebar-slots/index.d.mts +3 -0
- package/dist/components-layout/sidebar-slots/index.mjs +4 -0
- package/dist/components-layout/theme-provider/index.d.mts +15 -0
- package/dist/components-layout/theme-provider/index.mjs +4 -0
- package/dist/components-layout-app-shell.d.mts +83 -0
- package/dist/components-layout-app-shell.mjs +185 -0
- package/dist/components-layout-app-shell.mjs.map +1 -0
- package/dist/components-layout-oneapp.d.mts +84 -0
- package/dist/components-layout-oneapp.mjs +4 -0
- package/dist/components-overlays-confirm-dialog.d.mts +38 -0
- package/dist/components-overlays-confirm-dialog.mjs +145 -0
- package/dist/components-overlays-confirm-dialog.mjs.map +1 -0
- package/dist/components-overlays-toast.d.mts +16 -0
- package/dist/components-overlays-toast.mjs +127 -0
- package/dist/components-overlays-toast.mjs.map +1 -0
- package/dist/connection-D_kWZtAX.mjs +105 -0
- package/dist/connection-D_kWZtAX.mjs.map +1 -0
- package/dist/dark-mode-B4L-MZr7.mjs +288 -0
- package/dist/dark-mode-B4L-MZr7.mjs.map +1 -0
- package/dist/dark-mode-CYb7lJ6G.d.mts +191 -0
- package/dist/date-range-picker-CdemRFs_.mjs +676 -0
- package/dist/date-range-picker-CdemRFs_.mjs.map +1 -0
- package/dist/dialog-Di5QhIga.d.mts +31 -0
- package/dist/dialog-DuluSpxA.mjs +293 -0
- package/dist/dialog-DuluSpxA.mjs.map +1 -0
- package/dist/dropdown-menu-91g1g_Cl.mjs +379 -0
- package/dist/dropdown-menu-91g1g_Cl.mjs.map +1 -0
- package/dist/dropdown-menu-CwRZCnNs.d.mts +91 -0
- package/dist/dynamic-breadcrumb-33t_hdEI.mjs +385 -0
- package/dist/dynamic-breadcrumb-33t_hdEI.mjs.map +1 -0
- package/dist/error-boundary-Ggc5btkU.mjs +297 -0
- package/dist/error-boundary-Ggc5btkU.mjs.map +1 -0
- package/dist/filter-list-BMT7Nrli.d.mts +27 -0
- package/dist/filter-list-B_9aV5Lp.mjs +279 -0
- package/dist/filter-list-B_9aV5Lp.mjs.map +1 -0
- package/dist/filter-select-COLb1S5z.d.mts +34 -0
- package/dist/filter-select-CYfBhJ_E.mjs +341 -0
- package/dist/filter-select-CYfBhJ_E.mjs.map +1 -0
- package/dist/fonts.d.mts +22 -0
- package/dist/fonts.mjs +104 -0
- package/dist/fonts.mjs.map +1 -0
- package/dist/funnel-chart-CUpUr1pl.d.mts +22 -0
- package/dist/funnel-chart-fdwagDvc.mjs +318 -0
- package/dist/funnel-chart-fdwagDvc.mjs.map +1 -0
- package/dist/generative-ui-renderer-D0ZgNRZF.mjs +484 -0
- package/dist/generative-ui-renderer-D0ZgNRZF.mjs.map +1 -0
- package/dist/generative-ui-renderer-D69qYK0D.d.mts +32 -0
- package/dist/hooks/index.d.mts +5 -0
- package/dist/hooks/index.mjs +6 -0
- package/dist/hooks/use-mobile.d.mts +6 -0
- package/dist/hooks/use-mobile.mjs +45 -0
- package/dist/hooks/use-mobile.mjs.map +1 -0
- package/dist/hooks/use-responsive.d.mts +13 -0
- package/dist/hooks/use-responsive.mjs +50 -0
- package/dist/hooks/use-responsive.mjs.map +1 -0
- package/dist/hooks/use-scroll-progress.d.mts +17 -0
- package/dist/hooks/use-scroll-progress.mjs +62 -0
- package/dist/hooks/use-scroll-progress.mjs.map +1 -0
- package/dist/hooks/use-toast.d.mts +21 -0
- package/dist/hooks/use-toast.mjs +40 -0
- package/dist/hooks/use-toast.mjs.map +1 -0
- package/dist/hover-card-BqEpbXMp.d.mts +31 -0
- package/dist/hover-card-nn4fjJOh.mjs +161 -0
- package/dist/hover-card-nn4fjJOh.mjs.map +1 -0
- package/dist/index-AwyfWaOP.d.mts +60 -0
- package/dist/index.d.mts +503 -0
- package/dist/index.mjs +2158 -0
- package/dist/index.mjs.map +1 -0
- package/dist/input-CT1C9DMs.d.mts +19 -0
- package/dist/input-D0T5jbR6.d.mts +19 -0
- package/dist/input-DhpkXN3J.mjs +176 -0
- package/dist/input-DhpkXN3J.mjs.map +1 -0
- package/dist/input-group-CTBpkGI9.mjs +231 -0
- package/dist/input-group-CTBpkGI9.mjs.map +1 -0
- package/dist/input-group-DcDPUaQ3.d.mts +20 -0
- package/dist/input-group-VSZJM_on.d.mts +20 -0
- package/dist/integrations-COjiOhkd.d.mts +60 -0
- package/dist/integrations-Doz6nfxm.d.mts +60 -0
- package/dist/integrations-lBG309ZD.mjs +471 -0
- package/dist/integrations-lBG309ZD.mjs.map +1 -0
- package/dist/label-DnUThLUR.mjs +148 -0
- package/dist/label-DnUThLUR.mjs.map +1 -0
- package/dist/lib/export-csv.d.mts +12 -0
- package/dist/lib/export-csv.mjs +63 -0
- package/dist/lib/export-csv.mjs.map +1 -0
- package/dist/lib/index.d.mts +6 -0
- package/dist/lib/index.mjs +7 -0
- package/dist/lib/resize-image.d.mts +11 -0
- package/dist/lib/resize-image.mjs +66 -0
- package/dist/lib/resize-image.mjs.map +1 -0
- package/dist/lib/stable-sort.d.mts +6 -0
- package/dist/lib/stable-sort.mjs +33 -0
- package/dist/lib/stable-sort.mjs.map +1 -0
- package/dist/lib/utils.d.mts +8 -0
- package/dist/lib/utils.mjs +4 -0
- package/dist/lib-utils.mjs +4 -0
- package/dist/loader-B2SF0yPJ.mjs +168 -0
- package/dist/loader-B2SF0yPJ.mjs.map +1 -0
- package/dist/loading-dots-DJfxDgv3.mjs +119 -0
- package/dist/loading-dots-DJfxDgv3.mjs.map +1 -0
- package/dist/loading-dots-DvR1lwC-.d.mts +11 -0
- package/dist/mini-area-chart-GIUU-ZLo.d.mts +30 -0
- package/dist/mini-area-chart-s5ItHBk8.mjs +225 -0
- package/dist/mini-area-chart-s5ItHBk8.mjs.map +1 -0
- package/dist/motion-DLlwbMJ0.d.mts +33 -0
- package/dist/motion-zelaDelJ.mjs +47 -0
- package/dist/motion-zelaDelJ.mjs.map +1 -0
- package/dist/nav-app-switcher-B1NTlYrm.d.mts +43 -0
- package/dist/nav-app-switcher-V7aJAC18.mjs +235 -0
- package/dist/nav-app-switcher-V7aJAC18.mjs.map +1 -0
- package/dist/nav-main-BscfzNoi.mjs +105 -0
- package/dist/nav-main-BscfzNoi.mjs.map +1 -0
- package/dist/nav-secondary-t-xeA0I4.mjs +51 -0
- package/dist/nav-secondary-t-xeA0I4.mjs.map +1 -0
- package/dist/nav-user-A4YHm3-O.mjs +193 -0
- package/dist/nav-user-A4YHm3-O.mjs.map +1 -0
- package/dist/node-BKXOPjw9.d.mts +100 -0
- package/dist/node-CdmDD4k-.mjs +116 -0
- package/dist/node-CdmDD4k-.mjs.map +1 -0
- package/dist/oneapp-CfwhNatF.mjs +322 -0
- package/dist/oneapp-CfwhNatF.mjs.map +1 -0
- package/dist/pagination-controls-CE3-eCxI.mjs +135 -0
- package/dist/pagination-controls-CE3-eCxI.mjs.map +1 -0
- package/dist/popover-DmWxl2lW.mjs +198 -0
- package/dist/popover-DmWxl2lW.mjs.map +1 -0
- package/dist/preview.d.mts +6 -0
- package/dist/progress-BWxdthl4.mjs +230 -0
- package/dist/progress-BWxdthl4.mjs.map +1 -0
- package/dist/prompt-input-SFJ9_lNw.mjs +1149 -0
- package/dist/prompt-input-SFJ9_lNw.mjs.map +1 -0
- package/dist/resizable--DaTse0W.mjs +124 -0
- package/dist/resizable--DaTse0W.mjs.map +1 -0
- package/dist/scroll-area-Bxi-Edjc.mjs +139 -0
- package/dist/scroll-area-Bxi-Edjc.mjs.map +1 -0
- package/dist/scroll-area-CDRGG59G.d.mts +19 -0
- package/dist/select-DI6PzHN3.mjs +411 -0
- package/dist/select-DI6PzHN3.mjs.map +1 -0
- package/dist/select-csqviwUw.d.mts +44 -0
- package/dist/separator-BG9BqZqg.d.mts +20 -0
- package/dist/separator-CNQqqwfO.d.mts +20 -0
- package/dist/separator-veJJBul5.mjs +118 -0
- package/dist/separator-veJJBul5.mjs.map +1 -0
- package/dist/shared-BqVcofZN.d.mts +91 -0
- package/dist/shared-auth.d.mts +5 -0
- package/dist/shared-auth.mjs +6 -0
- package/dist/shimmer-BLRAD4VL.mjs +102 -0
- package/dist/shimmer-BLRAD4VL.mjs.map +1 -0
- package/dist/sidebar-CPteoqnB.d.mts +163 -0
- package/dist/sidebar-CdWE7H3R.mjs +814 -0
- package/dist/sidebar-CdWE7H3R.mjs.map +1 -0
- package/dist/sidebar-DYgXCHqQ.d.mts +163 -0
- package/dist/sidebar-inset-header-portal-CIRN-lKw.mjs +153 -0
- package/dist/sidebar-inset-header-portal-CIRN-lKw.mjs.map +1 -0
- package/dist/sidebar-inset-header-portal-DjfK7xCt.d.mts +24 -0
- package/dist/sidebar-slots-DNCEnx5L.mjs +135 -0
- package/dist/sidebar-slots-DNCEnx5L.mjs.map +1 -0
- package/dist/sidebar-slots-OqNmzlIk.d.mts +47 -0
- package/dist/skeleton-ByXUFNDF.d.mts +35 -0
- package/dist/skeleton-aXwA3YID.mjs +211 -0
- package/dist/skeleton-aXwA3YID.mjs.map +1 -0
- package/dist/sources.css +16 -0
- package/dist/storybook-preview.mjs +184 -0
- package/dist/storybook-preview.mjs.map +1 -0
- package/dist/styles/colors.css +166 -0
- package/dist/styles/index.css +2 -0
- package/dist/styles/mantine.css +1024 -0
- package/dist/styles/spacing.css +62 -0
- package/dist/styles/theme.css +1687 -0
- package/dist/styles/typography.css +59 -0
- package/dist/styles/variables.css +998 -0
- package/dist/styles.css +1 -0
- package/dist/switch-BFct1r4a.mjs +223 -0
- package/dist/switch-BFct1r4a.mjs.map +1 -0
- package/dist/table-DNkLM1TB.mjs +261 -0
- package/dist/table-DNkLM1TB.mjs.map +1 -0
- package/dist/textarea-MpLFc9sB.mjs +173 -0
- package/dist/textarea-MpLFc9sB.mjs.map +1 -0
- package/dist/theme-provider-4D34sBmG.mjs +83 -0
- package/dist/theme-provider-4D34sBmG.mjs.map +1 -0
- package/dist/time-series-chart-B66xH88w.d.mts +69 -0
- package/dist/time-series-chart-DxnknDhW.mjs +400 -0
- package/dist/time-series-chart-DxnknDhW.mjs.map +1 -0
- package/dist/tokens/tokens.dtcg.json +4353 -0
- package/dist/tokens/tokens.json +895 -0
- package/dist/tokens-mantine-types.d.mts +3 -0
- package/dist/tokens-mantine-types.mjs +4 -0
- package/dist/tokens.css +2 -0
- package/dist/tokens.d.mts +9398 -0
- package/dist/tokens.mjs +9311 -0
- package/dist/tokens.mjs.map +1 -0
- package/dist/tooltip-B8_zKnHC.mjs +301 -0
- package/dist/tooltip-B8_zKnHC.mjs.map +1 -0
- package/dist/tooltip-BA27ygge.d.mts +44 -0
- package/dist/tooltip-FqB3srL-.d.mts +44 -0
- package/dist/tooltip-sync-Ax1GmpjC.d.mts +17 -0
- package/dist/tooltip-sync-DzJUgiTM.mjs +85 -0
- package/dist/tooltip-sync-DzJUgiTM.mjs.map +1 -0
- package/dist/types-B8z57DW2.d.mts +41 -0
- package/dist/use-artifact-panel-state-CUQTn2Uq.mjs +346 -0
- package/dist/use-artifact-panel-state-CUQTn2Uq.mjs.map +1 -0
- package/dist/use-artifact-panel-state-DPZC--sz.d.mts +150 -0
- package/dist/utils-BJGrUJ6T.mjs +77 -0
- package/dist/utils-BJGrUJ6T.mjs.map +1 -0
- package/dist/utils-D2bGp2p_.mjs +33 -0
- package/dist/utils-D2bGp2p_.mjs.map +1 -0
- package/dist/x-axis-BY00htJY.mjs +137 -0
- package/dist/x-axis-BY00htJY.mjs.map +1 -0
- package/dist/x-axis-Dh66iD8l.d.mts +21 -0
- package/dist/y-axis-DgHlVHRG.mjs +118 -0
- package/dist/y-axis-DgHlVHRG.mjs.map +1 -0
- package/dist/y-axis-DocBbrSp.d.mts +23 -0
- package/dist/z-index-BlBlZL-F.d.mts +10775 -0
- package/package.json +429 -0
- package/src/ai-oneapp/flow-chat/index.ts +3 -0
- package/src/ai-oneapp/flow-chat/node-suggestion-card.tsx +37 -0
- package/src/ai-oneapp/flow-chat/template-suggestion-card.tsx +49 -0
- package/src/ai-oneapp/flow-chat/workflow-action-toast.tsx +55 -0
- package/src/components/.gitkeep +0 -0
- package/src/components/ai-elements/__tests__/test-utils.tsx +12 -0
- package/src/components/ai-elements/actions/actions.stories.tsx +288 -0
- package/src/components/ai-elements/actions/actions.test.tsx +60 -0
- package/src/components/ai-elements/actions/actions.tsx +286 -0
- package/src/components/ai-elements/actions/index.ts +7 -0
- package/src/components/ai-elements/agent-step/agent-step.stories.tsx +167 -0
- package/src/components/ai-elements/agent-step/agent-step.tsx +206 -0
- package/src/components/ai-elements/agent-step/index.ts +7 -0
- package/src/components/ai-elements/ai-elements.constants.ts +516 -0
- package/src/components/ai-elements/artifact/artifact.stories.tsx +199 -0
- package/src/components/ai-elements/artifact/artifact.tsx +277 -0
- package/src/components/ai-elements/artifact/index.ts +7 -0
- package/src/components/ai-elements/branch/branch.stories.tsx +212 -0
- package/src/components/ai-elements/branch/branch.test.tsx +148 -0
- package/src/components/ai-elements/branch/branch.tsx +502 -0
- package/src/components/ai-elements/branch/index.ts +7 -0
- package/src/components/ai-elements/chain-of-thought/chain-of-thought.stories.tsx +172 -0
- package/src/components/ai-elements/chain-of-thought/chain-of-thought.tsx +505 -0
- package/src/components/ai-elements/chain-of-thought/index.ts +7 -0
- package/src/components/ai-elements/chat-input/chat-input.stories.tsx +185 -0
- package/src/components/ai-elements/chat-input/chat-input.tsx +201 -0
- package/src/components/ai-elements/chat-input/index.ts +7 -0
- package/src/components/ai-elements/checkpoint/checkpoint.stories.tsx +171 -0
- package/src/components/ai-elements/checkpoint/checkpoint.tsx +256 -0
- package/src/components/ai-elements/checkpoint/index.ts +7 -0
- package/src/components/ai-elements/code-block/code-block.stories.tsx +317 -0
- package/src/components/ai-elements/code-block/code-block.tsx +366 -0
- package/src/components/ai-elements/code-block/index.ts +7 -0
- package/src/components/ai-elements/confirmation/confirmation.stories.tsx +236 -0
- package/src/components/ai-elements/confirmation/confirmation.tsx +465 -0
- package/src/components/ai-elements/confirmation/index.ts +7 -0
- package/src/components/ai-elements/context/context.stories.tsx +80 -0
- package/src/components/ai-elements/context/context.tsx +585 -0
- package/src/components/ai-elements/context/index.ts +7 -0
- package/src/components/ai-elements/conversation/__tests__/conversation.test.tsx +402 -0
- package/src/components/ai-elements/conversation/conversation.stories.tsx +1019 -0
- package/src/components/ai-elements/conversation/conversation.tsx +260 -0
- package/src/components/ai-elements/conversation/index.ts +7 -0
- package/src/components/ai-elements/custom/__tests__/accessibility.test.tsx +27 -0
- package/src/components/ai-elements/custom/__tests__/chat-container.test.tsx +30 -0
- package/src/components/ai-elements/custom/__tests__/conversation-history.test.tsx +100 -0
- package/src/components/ai-elements/custom/__tests__/export-dropdown.test.tsx +60 -0
- package/src/components/ai-elements/custom/ai-label/ai-label.stories.tsx +86 -0
- package/src/components/ai-elements/custom/ai-label/ai-label.tsx +291 -0
- package/src/components/ai-elements/custom/ai-label/index.ts +7 -0
- package/src/components/ai-elements/custom/artifact-skeleton/artifact-skeleton.stories.tsx +155 -0
- package/src/components/ai-elements/custom/artifact-skeleton/artifact-skeleton.tsx +269 -0
- package/src/components/ai-elements/custom/artifact-skeleton/index.ts +18 -0
- package/src/components/ai-elements/custom/audio-player/audio-player.stories.tsx +50 -0
- package/src/components/ai-elements/custom/audio-player/audio-player.tsx +296 -0
- package/src/components/ai-elements/custom/audio-player/index.ts +1 -0
- package/src/components/ai-elements/custom/button-group/button-group.stories.tsx +108 -0
- package/src/components/ai-elements/custom/button-group/button-group.tsx +142 -0
- package/src/components/ai-elements/custom/button-group/index.ts +15 -0
- package/src/components/ai-elements/custom/chat-container/chat-container.stories.tsx +143 -0
- package/src/components/ai-elements/custom/chat-container/chat-container.tsx +406 -0
- package/src/components/ai-elements/custom/chat-container/index.ts +9 -0
- package/src/components/ai-elements/custom/collapsible/collapsible.stories.tsx +130 -0
- package/src/components/ai-elements/custom/collapsible/index.ts +11 -0
- package/src/components/ai-elements/custom/collapsible/use-collapsible.tsx +240 -0
- package/src/components/ai-elements/custom/collapsible-content/collapsible-content.stories.tsx +113 -0
- package/src/components/ai-elements/custom/collapsible-content/collapsible-content.tsx +141 -0
- package/src/components/ai-elements/custom/collapsible-content/index.ts +7 -0
- package/src/components/ai-elements/custom/content-placeholder/content-placeholder.stories.tsx +82 -0
- package/src/components/ai-elements/custom/content-placeholder/content-placeholder.tsx +319 -0
- package/src/components/ai-elements/custom/content-placeholder/index.ts +10 -0
- package/src/components/ai-elements/custom/conversation-header/conversation-header.stories.tsx +102 -0
- package/src/components/ai-elements/custom/conversation-header/conversation-header.tsx +202 -0
- package/src/components/ai-elements/custom/conversation-header/index.ts +12 -0
- package/src/components/ai-elements/custom/conversation-history/conversation-history.stories.tsx +191 -0
- package/src/components/ai-elements/custom/conversation-history/conversation-history.tsx +515 -0
- package/src/components/ai-elements/custom/conversation-history/index.ts +16 -0
- package/src/components/ai-elements/custom/diff-view/diff-view.stories.tsx +173 -0
- package/src/components/ai-elements/custom/diff-view/diff-view.tsx +261 -0
- package/src/components/ai-elements/custom/diff-view/index.ts +7 -0
- package/src/components/ai-elements/custom/draggable-tabs/draggable-tabs.stories.tsx +157 -0
- package/src/components/ai-elements/custom/draggable-tabs/draggable-tabs.tsx +311 -0
- package/src/components/ai-elements/custom/draggable-tabs/index.ts +7 -0
- package/src/components/ai-elements/custom/export-conversation/export-conversation.stories.tsx +73 -0
- package/src/components/ai-elements/custom/export-conversation/export-conversation.tsx +405 -0
- package/src/components/ai-elements/custom/export-conversation/index.ts +10 -0
- package/src/components/ai-elements/custom/export-dropdown/export-dropdown.stories.tsx +121 -0
- package/src/components/ai-elements/custom/export-dropdown/export-dropdown.tsx +315 -0
- package/src/components/ai-elements/custom/export-dropdown/index.ts +11 -0
- package/src/components/ai-elements/custom/feedback/feedback.stories.tsx +85 -0
- package/src/components/ai-elements/custom/feedback/feedback.tsx +425 -0
- package/src/components/ai-elements/custom/feedback/index.ts +13 -0
- package/src/components/ai-elements/custom/file-card/file-card.stories.tsx +65 -0
- package/src/components/ai-elements/custom/file-card/file-card.tsx +249 -0
- package/src/components/ai-elements/custom/file-card/index.ts +1 -0
- package/src/components/ai-elements/custom/file-tree/file-tree.stories.tsx +96 -0
- package/src/components/ai-elements/custom/file-tree/file-tree.tsx +266 -0
- package/src/components/ai-elements/custom/file-tree/index.ts +7 -0
- package/src/components/ai-elements/custom/index.ts +73 -0
- package/src/components/ai-elements/custom/keyboard-shortcut/index.ts +14 -0
- package/src/components/ai-elements/custom/keyboard-shortcut/keyboard-shortcut.stories.tsx +118 -0
- package/src/components/ai-elements/custom/keyboard-shortcut/keyboard-shortcut.tsx +292 -0
- package/src/components/ai-elements/custom/message-edit/index.ts +1 -0
- package/src/components/ai-elements/custom/message-edit/message-edit.stories.tsx +88 -0
- package/src/components/ai-elements/custom/message-edit/message-edit.tsx +225 -0
- package/src/components/ai-elements/custom/message-error/index.ts +7 -0
- package/src/components/ai-elements/custom/message-error/message-error.stories.tsx +85 -0
- package/src/components/ai-elements/custom/message-error/message-error.tsx +301 -0
- package/src/components/ai-elements/custom/message-group/index.ts +1 -0
- package/src/components/ai-elements/custom/message-group/message-group.stories.tsx +82 -0
- package/src/components/ai-elements/custom/message-group/message-group.tsx +77 -0
- package/src/components/ai-elements/custom/message-separator/index.ts +1 -0
- package/src/components/ai-elements/custom/message-separator/message-separator.stories.tsx +65 -0
- package/src/components/ai-elements/custom/message-separator/message-separator.tsx +132 -0
- package/src/components/ai-elements/custom/scroll-to-bottom/index.ts +11 -0
- package/src/components/ai-elements/custom/scroll-to-bottom/scroll-to-bottom.stories.tsx +116 -0
- package/src/components/ai-elements/custom/scroll-to-bottom/use-scroll-to-bottom.tsx +215 -0
- package/src/components/ai-elements/custom/snippet/index.ts +1 -0
- package/src/components/ai-elements/custom/snippet/snippet.stories.tsx +59 -0
- package/src/components/ai-elements/custom/snippet/snippet.tsx +158 -0
- package/src/components/ai-elements/custom/stack-trace/index.ts +1 -0
- package/src/components/ai-elements/custom/stack-trace/stack-trace.stories.tsx +112 -0
- package/src/components/ai-elements/custom/stack-trace/stack-trace.tsx +368 -0
- package/src/components/ai-elements/custom/terminal/index.ts +9 -0
- package/src/components/ai-elements/custom/terminal/terminal.stories.tsx +92 -0
- package/src/components/ai-elements/custom/terminal/terminal.tsx +233 -0
- package/src/components/ai-elements/custom/test-results/test-results.tsx +438 -0
- package/src/components/ai-elements/custom/thought-chain/index.ts +7 -0
- package/src/components/ai-elements/custom/thought-chain/thought-chain.stories.tsx +123 -0
- package/src/components/ai-elements/custom/thought-chain/thought-chain.tsx +246 -0
- package/src/components/ai-elements/custom/token-usage/index.ts +6 -0
- package/src/components/ai-elements/custom/token-usage/token-usage.stories.tsx +104 -0
- package/src/components/ai-elements/custom/token-usage/token-usage.tsx +236 -0
- package/src/components/ai-elements/custom/transcription/index.ts +1 -0
- package/src/components/ai-elements/custom/transcription/transcription.stories.tsx +80 -0
- package/src/components/ai-elements/custom/transcription/transcription.tsx +163 -0
- package/src/components/ai-elements/custom/typing-indicator/index.ts +1 -0
- package/src/components/ai-elements/custom/typing-indicator/typing-indicator.stories.tsx +71 -0
- package/src/components/ai-elements/custom/typing-indicator/typing-indicator.tsx +126 -0
- package/src/components/ai-elements/custom/undo-redo/index.ts +12 -0
- package/src/components/ai-elements/custom/undo-redo/undo-redo.stories.tsx +145 -0
- package/src/components/ai-elements/custom/undo-redo/use-undo-redo.tsx +324 -0
- package/src/components/ai-elements/custom/voice-selector/index.ts +7 -0
- package/src/components/ai-elements/custom/voice-selector/voice-selector.stories.tsx +67 -0
- package/src/components/ai-elements/custom/voice-selector/voice-selector.tsx +301 -0
- package/src/components/ai-elements/custom/welcome/index.ts +1 -0
- package/src/components/ai-elements/custom/welcome/welcome.stories.tsx +92 -0
- package/src/components/ai-elements/custom/welcome/welcome.tsx +213 -0
- package/src/components/ai-elements/generative-ui/generative-ui-renderer.stories.tsx +451 -0
- package/src/components/ai-elements/generative-ui/generative-ui-renderer.test.tsx +383 -0
- package/src/components/ai-elements/generative-ui/generative-ui-renderer.tsx +668 -0
- package/src/components/ai-elements/generative-ui/index.ts +21 -0
- package/src/components/ai-elements/image/image.stories.tsx +179 -0
- package/src/components/ai-elements/image/image.tsx +178 -0
- package/src/components/ai-elements/image/index.ts +7 -0
- package/src/components/ai-elements/index.ts +195 -0
- package/src/components/ai-elements/inline-citation/index.ts +7 -0
- package/src/components/ai-elements/inline-citation/inline-citation.stories.tsx +331 -0
- package/src/components/ai-elements/inline-citation/inline-citation.tsx +595 -0
- package/src/components/ai-elements/loader/index.ts +7 -0
- package/src/components/ai-elements/loader/loader.stories.tsx +185 -0
- package/src/components/ai-elements/loader/loader.tsx +177 -0
- package/src/components/ai-elements/message/__tests__/message.test.tsx +352 -0
- package/src/components/ai-elements/message/index.ts +7 -0
- package/src/components/ai-elements/message/message-actions.test.tsx +51 -0
- package/src/components/ai-elements/message/message.stories.tsx +609 -0
- package/src/components/ai-elements/message/message.test.tsx +52 -0
- package/src/components/ai-elements/message/message.tsx +1125 -0
- package/src/components/ai-elements/message/response.test.tsx +18 -0
- package/src/components/ai-elements/model-selector/index.ts +7 -0
- package/src/components/ai-elements/model-selector/model-selector.stories.tsx +198 -0
- package/src/components/ai-elements/model-selector/model-selector.tsx +406 -0
- package/src/components/ai-elements/modernization_walkthrough.md +51 -0
- package/src/components/ai-elements/open-in-chat/index.ts +7 -0
- package/src/components/ai-elements/open-in-chat/open-in-chat.stories.tsx +221 -0
- package/src/components/ai-elements/open-in-chat/open-in-chat.tsx +606 -0
- package/src/components/ai-elements/plan/index.ts +7 -0
- package/src/components/ai-elements/plan/plan.stories.tsx +233 -0
- package/src/components/ai-elements/plan/plan.tsx +337 -0
- package/src/components/ai-elements/prompt-char-counter/index.ts +7 -0
- package/src/components/ai-elements/prompt-char-counter/prompt-char-counter.stories.tsx +98 -0
- package/src/components/ai-elements/prompt-char-counter/prompt-char-counter.tsx +159 -0
- package/src/components/ai-elements/prompt-input/index.ts +7 -0
- package/src/components/ai-elements/prompt-input/prompt-input.stories.tsx +548 -0
- package/src/components/ai-elements/prompt-input/prompt-input.test.tsx +22 -0
- package/src/components/ai-elements/prompt-input/prompt-input.tsx +2112 -0
- package/src/components/ai-elements/queue/index.ts +7 -0
- package/src/components/ai-elements/queue/queue.stories.tsx +249 -0
- package/src/components/ai-elements/queue/queue.tsx +456 -0
- package/src/components/ai-elements/reasoning/index.ts +7 -0
- package/src/components/ai-elements/reasoning/reasoning.stories.tsx +147 -0
- package/src/components/ai-elements/reasoning/reasoning.tsx +356 -0
- package/src/components/ai-elements/shimmer/index.ts +7 -0
- package/src/components/ai-elements/shimmer/shimmer.stories.tsx +240 -0
- package/src/components/ai-elements/shimmer/shimmer.tsx +150 -0
- package/src/components/ai-elements/sources/index.ts +7 -0
- package/src/components/ai-elements/sources/sources.stories.tsx +259 -0
- package/src/components/ai-elements/sources/sources.test.tsx +40 -0
- package/src/components/ai-elements/sources/sources.tsx +327 -0
- package/src/components/ai-elements/suggestion/index.ts +7 -0
- package/src/components/ai-elements/suggestion/suggestion.stories.tsx +207 -0
- package/src/components/ai-elements/suggestion/suggestion.tsx +229 -0
- package/src/components/ai-elements/task/index.ts +7 -0
- package/src/components/ai-elements/task/task.stories.tsx +213 -0
- package/src/components/ai-elements/task/task.tsx +356 -0
- package/src/components/ai-elements/test-utils.tsx +28 -0
- package/src/components/ai-elements/tool/index.ts +7 -0
- package/src/components/ai-elements/tool/tool.stories.tsx +195 -0
- package/src/components/ai-elements/tool/tool.test.tsx +160 -0
- package/src/components/ai-elements/tool/tool.tsx +537 -0
- package/src/components/ai-elements/tool-approval/index.ts +7 -0
- package/src/components/ai-elements/tool-approval/tool-approval.stories.tsx +260 -0
- package/src/components/ai-elements/tool-approval/tool-approval.tsx +423 -0
- package/src/components/ai-elements/vitest.config.ts +17 -0
- package/src/components/ai-elements/vitest.setup.ts +6 -0
- package/src/components/ai-elements/web-preview/index.ts +7 -0
- package/src/components/ai-elements/web-preview/web-preview.stories.tsx +202 -0
- package/src/components/ai-elements/web-preview/web-preview.tsx +1166 -0
- package/src/components/ai-workflows/canvas/canvas.stories.tsx +120 -0
- package/src/components/ai-workflows/canvas/canvas.tsx +173 -0
- package/src/components/ai-workflows/canvas/index.ts +7 -0
- package/src/components/ai-workflows/connection/connection.stories.tsx +66 -0
- package/src/components/ai-workflows/connection/connection.tsx +119 -0
- package/src/components/ai-workflows/connection/index.ts +7 -0
- package/src/components/ai-workflows/controls/controls.stories.tsx +72 -0
- package/src/components/ai-workflows/controls/controls.tsx +132 -0
- package/src/components/ai-workflows/controls/index.ts +7 -0
- package/src/components/ai-workflows/edge/edge.stories.tsx +120 -0
- package/src/components/ai-workflows/edge/edge.test.tsx +47 -0
- package/src/components/ai-workflows/edge/edge.tsx +136 -0
- package/src/components/ai-workflows/edge/index.ts +7 -0
- package/src/components/ai-workflows/flow-constants.ts +11 -0
- package/src/components/ai-workflows/node/index.ts +7 -0
- package/src/components/ai-workflows/node/node.stories.tsx +111 -0
- package/src/components/ai-workflows/node/node.tsx +227 -0
- package/src/components/ai-workflows/panel/index.ts +7 -0
- package/src/components/ai-workflows/panel/panel.stories.tsx +102 -0
- package/src/components/ai-workflows/panel/panel.tsx +106 -0
- package/src/components/ai-workflows/resizable-node/index.ts +7 -0
- package/src/components/ai-workflows/resizable-node/resizable-node.stories.tsx +93 -0
- package/src/components/ai-workflows/resizable-node/resizable-node.tsx +228 -0
- package/src/components/ai-workflows/toolbar/index.ts +7 -0
- package/src/components/ai-workflows/toolbar/toolbar.stories.tsx +99 -0
- package/src/components/ai-workflows/toolbar/toolbar.tsx +130 -0
- package/src/components/auth/client/index.ts +12 -0
- package/src/components/auth/client/nav-user/auth-nav-user.tsx +237 -0
- package/src/components/auth/client/nav-user/index.ts +11 -0
- package/src/components/auth/client/providers/ThemeProvider.stories.tsx +59 -0
- package/src/components/auth/client/providers/ThemeProvider.tsx +39 -0
- package/src/components/auth/client/providers/index.ts +7 -0
- package/src/components/auth/client/providers.tsx +129 -0
- package/src/components/auth/index.ts +14 -0
- package/src/components/auth/server/account/ProfileForm.stories.tsx +105 -0
- package/src/components/auth/server/account/ProfileForm.tsx +236 -0
- package/src/components/auth/server/account/index.ts +7 -0
- package/src/components/auth/server/actions/index.ts +11 -0
- package/src/components/auth/server/actions.ts +88 -0
- package/src/components/auth/server/admin/AdminBulkUserActions.stories.tsx +129 -0
- package/src/components/auth/server/admin/AdminBulkUserActions.tsx +649 -0
- package/src/components/auth/server/admin/AdminDashboard.stories.tsx +215 -0
- package/src/components/auth/server/admin/AdminDashboard.tsx +785 -0
- package/src/components/auth/server/admin/AdminDevicesManager.tsx +411 -0
- package/src/components/auth/server/admin/AdminImpersonation.stories.tsx +121 -0
- package/src/components/auth/server/admin/AdminImpersonation.tsx +569 -0
- package/src/components/auth/server/admin/AdminPasskeysManager.tsx +393 -0
- package/src/components/auth/server/admin/AdminSecurityEventsViewer.tsx +395 -0
- package/src/components/auth/server/admin/AdminServiceAccountsManager.tsx +454 -0
- package/src/components/auth/server/admin/AdminSessionsManager.tsx +664 -0
- package/src/components/auth/server/admin/AdminTwoFactorManager.tsx +431 -0
- package/src/components/auth/server/admin/AdminUserCreation.stories.tsx +87 -0
- package/src/components/auth/server/admin/AdminUserCreation.tsx +777 -0
- package/src/components/auth/server/admin/AdminUserDetail.stories.tsx +178 -0
- package/src/components/auth/server/admin/AdminUserDetail.tsx +1044 -0
- package/src/components/auth/server/admin/AdminUsersList.stories.tsx +228 -0
- package/src/components/auth/server/admin/AdminUsersList.tsx +859 -0
- package/src/components/auth/server/admin/index.ts +59 -0
- package/src/components/auth/server/advanced/PasskeySetup.stories.tsx +70 -0
- package/src/components/auth/server/advanced/PasskeySetup.tsx +383 -0
- package/src/components/auth/server/advanced/TwoFactorSetup.stories.tsx +79 -0
- package/src/components/auth/server/advanced/TwoFactorSetup.tsx +459 -0
- package/src/components/auth/server/advanced/TwoFactorVerify.stories.tsx +69 -0
- package/src/components/auth/server/advanced/TwoFactorVerify.tsx +323 -0
- package/src/components/auth/server/advanced/index.ts +10 -0
- package/src/components/auth/server/api-keys/APIKeysList.stories.tsx +95 -0
- package/src/components/auth/server/api-keys/APIKeysList.tsx +470 -0
- package/src/components/auth/server/api-keys/CreateAPIKeyForm.stories.tsx +79 -0
- package/src/components/auth/server/api-keys/CreateAPIKeyForm.tsx +501 -0
- package/src/components/auth/server/api-keys/index.ts +9 -0
- package/src/components/auth/server/enhanced/AccountDeletionFlow.stories.tsx +115 -0
- package/src/components/auth/server/enhanced/AccountDeletionFlow.tsx +733 -0
- package/src/components/auth/server/enhanced/AnonymousSessionCreator.stories.tsx +80 -0
- package/src/components/auth/server/enhanced/AnonymousSessionCreator.tsx +398 -0
- package/src/components/auth/server/enhanced/AnonymousToAccountConverter.stories.tsx +61 -0
- package/src/components/auth/server/enhanced/AnonymousToAccountConverter.tsx +538 -0
- package/src/components/auth/server/enhanced/BackupCodesManager.stories.tsx +108 -0
- package/src/components/auth/server/enhanced/BackupCodesManager.tsx +718 -0
- package/src/components/auth/server/enhanced/BearerTokenGenerator.stories.tsx +85 -0
- package/src/components/auth/server/enhanced/BearerTokenGenerator.tsx +618 -0
- package/src/components/auth/server/enhanced/ChangePasswordForm.stories.tsx +108 -0
- package/src/components/auth/server/enhanced/ChangePasswordForm.tsx +313 -0
- package/src/components/auth/server/enhanced/DataExportRequest.stories.tsx +84 -0
- package/src/components/auth/server/enhanced/DataExportRequest.tsx +734 -0
- package/src/components/auth/server/enhanced/DeviceManagement.stories.tsx +161 -0
- package/src/components/auth/server/enhanced/DeviceManagement.tsx +700 -0
- package/src/components/auth/server/enhanced/EmailChangeVerification.stories.tsx +94 -0
- package/src/components/auth/server/enhanced/EmailChangeVerification.tsx +421 -0
- package/src/components/auth/server/enhanced/EmailOTPSignIn.stories.tsx +68 -0
- package/src/components/auth/server/enhanced/EmailOTPSignIn.tsx +516 -0
- package/src/components/auth/server/enhanced/EmailOTPVerification.stories.tsx +95 -0
- package/src/components/auth/server/enhanced/EmailOTPVerification.tsx +610 -0
- package/src/components/auth/server/enhanced/EmailVerificationRequest.stories.tsx +97 -0
- package/src/components/auth/server/enhanced/EmailVerificationRequest.tsx +461 -0
- package/src/components/auth/server/enhanced/EmailVerificationStatus.stories.tsx +96 -0
- package/src/components/auth/server/enhanced/EmailVerificationStatus.tsx +631 -0
- package/src/components/auth/server/enhanced/MagicLinkRequestForm.stories.tsx +88 -0
- package/src/components/auth/server/enhanced/MagicLinkRequestForm.tsx +439 -0
- package/src/components/auth/server/enhanced/MagicLinkStatusIndicator.stories.tsx +101 -0
- package/src/components/auth/server/enhanced/MagicLinkStatusIndicator.tsx +610 -0
- package/src/components/auth/server/enhanced/MultiSessionDashboard.stories.tsx +101 -0
- package/src/components/auth/server/enhanced/MultiSessionDashboard.tsx +996 -0
- package/src/components/auth/server/enhanced/OrganizationAuditLog.stories.tsx +86 -0
- package/src/components/auth/server/enhanced/OrganizationAuditLog.tsx +1006 -0
- package/src/components/auth/server/enhanced/PasskeyManagement.stories.tsx +102 -0
- package/src/components/auth/server/enhanced/PasskeyManagement.tsx +705 -0
- package/src/components/auth/server/enhanced/PasskeyRegistrationWizard.stories.tsx +83 -0
- package/src/components/auth/server/enhanced/PasskeyRegistrationWizard.tsx +566 -0
- package/src/components/auth/server/enhanced/PasskeySignInInterface.stories.tsx +90 -0
- package/src/components/auth/server/enhanced/PasskeySignInInterface.tsx +792 -0
- package/src/components/auth/server/enhanced/PasswordStrengthIndicator.stories.tsx +129 -0
- package/src/components/auth/server/enhanced/PasswordStrengthIndicator.tsx +539 -0
- package/src/components/auth/server/enhanced/PhoneNumberManagement.stories.tsx +103 -0
- package/src/components/auth/server/enhanced/PhoneNumberManagement.tsx +594 -0
- package/src/components/auth/server/enhanced/PhoneNumberSetupForm.stories.tsx +91 -0
- package/src/components/auth/server/enhanced/PhoneNumberSetupForm.tsx +518 -0
- package/src/components/auth/server/enhanced/PhoneSignInForm.stories.tsx +63 -0
- package/src/components/auth/server/enhanced/PhoneSignInForm.tsx +801 -0
- package/src/components/auth/server/enhanced/PhoneSignInWithSMS.stories.tsx +87 -0
- package/src/components/auth/server/enhanced/PhoneSignInWithSMS.tsx +886 -0
- package/src/components/auth/server/enhanced/PhoneVerificationForm.stories.tsx +81 -0
- package/src/components/auth/server/enhanced/PhoneVerificationForm.tsx +306 -0
- package/src/components/auth/server/enhanced/ResendVerificationEmail.stories.tsx +84 -0
- package/src/components/auth/server/enhanced/ResendVerificationEmail.tsx +407 -0
- package/src/components/auth/server/enhanced/SMSVerificationForm.stories.tsx +92 -0
- package/src/components/auth/server/enhanced/SMSVerificationForm.tsx +521 -0
- package/src/components/auth/server/enhanced/SecurityEventLog.stories.tsx +115 -0
- package/src/components/auth/server/enhanced/SecurityEventLog.tsx +916 -0
- package/src/components/auth/server/enhanced/TeamCreationWizard.stories.tsx +85 -0
- package/src/components/auth/server/enhanced/TeamCreationWizard.tsx +1023 -0
- package/src/components/auth/server/enhanced/__tests__/actions.test.ts +388 -0
- package/src/components/auth/server/enhanced/__tests__/more-actions.test.ts +139 -0
- package/src/components/auth/server/enhanced/actions.ts +1199 -0
- package/src/components/auth/server/enhanced/auth-enhanced-actions.ts +936 -0
- package/src/components/auth/server/enhanced/index.ts +37 -0
- package/src/components/auth/server/forms/ForgotPasswordForm.stories.tsx +82 -0
- package/src/components/auth/server/forms/ForgotPasswordForm.tsx +287 -0
- package/src/components/auth/server/forms/ResetPasswordForm.stories.tsx +79 -0
- package/src/components/auth/server/forms/ResetPasswordForm.tsx +217 -0
- package/src/components/auth/server/forms/SignInForm.stories.tsx +113 -0
- package/src/components/auth/server/forms/SignInForm.tsx +211 -0
- package/src/components/auth/server/forms/SignUpForm.stories.tsx +130 -0
- package/src/components/auth/server/forms/SignUpForm.tsx +243 -0
- package/src/components/auth/server/forms/index.ts +10 -0
- package/src/components/auth/server/index.ts +22 -0
- package/src/components/auth/server/jwt/JWTTokenManager.tsx +315 -0
- package/src/components/auth/server/jwt/index.ts +7 -0
- package/src/components/auth/server/organization/AuditLogViewer.tsx +288 -0
- package/src/components/auth/server/organization/CreateRoleDialog.tsx +540 -0
- package/src/components/auth/server/organization/EditRoleDialog.tsx +487 -0
- package/src/components/auth/server/organization/InviteMembers.stories.tsx +82 -0
- package/src/components/auth/server/organization/InviteMembers.tsx +264 -0
- package/src/components/auth/server/organization/MembersList.stories.tsx +117 -0
- package/src/components/auth/server/organization/MembersList.tsx +425 -0
- package/src/components/auth/server/organization/OrganizationCreation.stories.tsx +99 -0
- package/src/components/auth/server/organization/OrganizationCreation.tsx +293 -0
- package/src/components/auth/server/organization/OrganizationSettings.stories.tsx +99 -0
- package/src/components/auth/server/organization/OrganizationSettings.tsx +494 -0
- package/src/components/auth/server/organization/OrganizationSwitcher.stories.tsx +98 -0
- package/src/components/auth/server/organization/OrganizationSwitcher.tsx +308 -0
- package/src/components/auth/server/organization/PermissionMatrix.tsx +366 -0
- package/src/components/auth/server/organization/RoleManagement.stories.tsx +120 -0
- package/src/components/auth/server/organization/RoleManagement.tsx +318 -0
- package/src/components/auth/server/organization/index.ts +16 -0
- package/src/components/auth/server/session/SessionsList.stories.tsx +81 -0
- package/src/components/auth/server/session/SessionsList.tsx +274 -0
- package/src/components/auth/server/session/index.ts +7 -0
- package/src/components/auth/server/social/SocialLoginButtons.stories.tsx +139 -0
- package/src/components/auth/server/social/SocialLoginButtons.tsx +292 -0
- package/src/components/auth/server/social/index.ts +7 -0
- package/src/components/auth/server/ui/Alert.stories.tsx +97 -0
- package/src/components/auth/server/ui/Alert.tsx +159 -0
- package/src/components/auth/server/ui/Button.stories.tsx +149 -0
- package/src/components/auth/server/ui/Button.tsx +221 -0
- package/src/components/auth/server/ui/Card.stories.tsx +80 -0
- package/src/components/auth/server/ui/Card.tsx +51 -0
- package/src/components/auth/server/ui/Input.stories.tsx +143 -0
- package/src/components/auth/server/ui/Input.tsx +195 -0
- package/src/components/auth/server/ui/index.ts +18 -0
- package/src/components/charts/areas/areas.stories.tsx +113 -0
- package/src/components/charts/areas/areas.tsx +185 -0
- package/src/components/charts/areas/index.ts +11 -0
- package/src/components/charts/bars/bars.stories.tsx +109 -0
- package/src/components/charts/bars/bars.tsx +164 -0
- package/src/components/charts/bars/index.ts +11 -0
- package/src/components/charts/chart-context.ts +35 -0
- package/src/components/charts/funnel-chart/funnel-chart.stories.tsx +111 -0
- package/src/components/charts/funnel-chart/funnel-chart.tsx +392 -0
- package/src/components/charts/funnel-chart/index.ts +11 -0
- package/src/components/charts/index.ts +45 -0
- package/src/components/charts/mini-area-chart/index.ts +11 -0
- package/src/components/charts/mini-area-chart/mini-area-chart.stories.tsx +100 -0
- package/src/components/charts/mini-area-chart/mini-area-chart.tsx +244 -0
- package/src/components/charts/time-series-chart/index.ts +11 -0
- package/src/components/charts/time-series-chart/time-series-chart.stories.tsx +140 -0
- package/src/components/charts/time-series-chart/time-series-chart.tsx +337 -0
- package/src/components/charts/tooltip-sync/index.ts +11 -0
- package/src/components/charts/tooltip-sync/tooltip-sync.stories.tsx +89 -0
- package/src/components/charts/tooltip-sync/tooltip-sync.tsx +91 -0
- package/src/components/charts/types.ts +93 -0
- package/src/components/charts/use-tooltip.ts +230 -0
- package/src/components/charts/utils.ts +69 -0
- package/src/components/charts/x-axis/index.ts +11 -0
- package/src/components/charts/x-axis/x-axis.stories.tsx +94 -0
- package/src/components/charts/x-axis/x-axis.tsx +176 -0
- package/src/components/charts/y-axis/index.ts +7 -0
- package/src/components/charts/y-axis/y-axis.stories.tsx +110 -0
- package/src/components/charts/y-axis/y-axis.tsx +139 -0
- package/src/components/elements/atoms/alert/alert.stories.tsx +234 -0
- package/src/components/elements/atoms/alert/alert.tsx +293 -0
- package/src/components/elements/atoms/alert/index.ts +7 -0
- package/src/components/elements/atoms/avatar/avatar.stories.tsx +174 -0
- package/src/components/elements/atoms/avatar/avatar.tsx +274 -0
- package/src/components/elements/atoms/avatar/index.ts +7 -0
- package/src/components/elements/atoms/badge/badge.stories.tsx +186 -0
- package/src/components/elements/atoms/badge/badge.tsx +333 -0
- package/src/components/elements/atoms/badge/index.ts +7 -0
- package/src/components/elements/atoms/blur-image/blur-image.stories.tsx +140 -0
- package/src/components/elements/atoms/blur-image/blur-image.tsx +102 -0
- package/src/components/elements/atoms/blur-image/index.ts +7 -0
- package/src/components/elements/atoms/button/button.stories.tsx +776 -0
- package/src/components/elements/atoms/button/button.tsx +878 -0
- package/src/components/elements/atoms/button/index.ts +7 -0
- package/src/components/elements/atoms/copy-button/copy-button.stories.tsx +162 -0
- package/src/components/elements/atoms/copy-button/copy-button.tsx +232 -0
- package/src/components/elements/atoms/copy-button/index.ts +7 -0
- package/src/components/elements/atoms/copy-text/copy-text.stories.tsx +128 -0
- package/src/components/elements/atoms/copy-text/copy-text.tsx +201 -0
- package/src/components/elements/atoms/copy-text/index.ts +7 -0
- package/src/components/elements/atoms/empty-state/empty-state.stories.tsx +410 -0
- package/src/components/elements/atoms/empty-state/empty-state.tsx +338 -0
- package/src/components/elements/atoms/empty-state/index.ts +1 -0
- package/src/components/elements/atoms/go-back-button/go-back-button.stories.tsx +83 -0
- package/src/components/elements/atoms/go-back-button/go-back-button.tsx +104 -0
- package/src/components/elements/atoms/go-back-button/index.ts +7 -0
- package/src/components/elements/atoms/inline-snippet/index.ts +7 -0
- package/src/components/elements/atoms/inline-snippet/inline-snippet.stories.tsx +130 -0
- package/src/components/elements/atoms/inline-snippet/inline-snippet.tsx +140 -0
- package/src/components/elements/atoms/loading-dots/index.ts +1 -0
- package/src/components/elements/atoms/loading-dots/loading-dots.stories.tsx +274 -0
- package/src/components/elements/atoms/loading-dots/loading-dots.tsx +138 -0
- package/src/components/elements/atoms/mode-toggle/index.ts +7 -0
- package/src/components/elements/atoms/mode-toggle/mode-toggle.stories.tsx +67 -0
- package/src/components/elements/atoms/mode-toggle/mode-toggle.tsx +163 -0
- package/src/components/elements/atoms/progress/index.ts +7 -0
- package/src/components/elements/atoms/progress/progress.stories.tsx +141 -0
- package/src/components/elements/atoms/progress/progress.tsx +314 -0
- package/src/components/elements/atoms/progress-circle/index.ts +7 -0
- package/src/components/elements/atoms/progress-circle/progress-circle.stories.tsx +185 -0
- package/src/components/elements/atoms/progress-circle/progress-circle.tsx +207 -0
- package/src/components/elements/atoms/separator/index.ts +7 -0
- package/src/components/elements/atoms/separator/separator.stories.tsx +154 -0
- package/src/components/elements/atoms/separator/separator.tsx +169 -0
- package/src/components/elements/atoms/skeleton/index.ts +7 -0
- package/src/components/elements/atoms/skeleton/skeleton.stories.tsx +152 -0
- package/src/components/elements/atoms/skeleton/skeleton.tsx +336 -0
- package/src/components/elements/atoms/slider/index.ts +7 -0
- package/src/components/elements/atoms/slider/slider.stories.tsx +199 -0
- package/src/components/elements/atoms/slider/slider.tsx +487 -0
- package/src/components/elements/atoms/sonner/index.ts +7 -0
- package/src/components/elements/atoms/sonner/sonner.stories.tsx +408 -0
- package/src/components/elements/atoms/sonner/sonner.tsx +131 -0
- package/src/components/elements/atoms/status-badge/index.ts +7 -0
- package/src/components/elements/atoms/status-badge/status-badge.stories.tsx +166 -0
- package/src/components/elements/atoms/status-badge/status-badge.tsx +262 -0
- package/src/components/elements/atoms/timestamp-tooltip/index.ts +7 -0
- package/src/components/elements/atoms/timestamp-tooltip/timestamp-tooltip.stories.tsx +127 -0
- package/src/components/elements/atoms/timestamp-tooltip/timestamp-tooltip.tsx +404 -0
- package/src/components/elements/molecules/animated-size-container/animated-size-container.stories.tsx +165 -0
- package/src/components/elements/molecules/animated-size-container/animated-size-container.tsx +125 -0
- package/src/components/elements/molecules/animated-size-container/index.ts +7 -0
- package/src/components/elements/molecules/avatar-stack/avatar-stack.stories.tsx +179 -0
- package/src/components/elements/molecules/avatar-stack/avatar-stack.tsx +258 -0
- package/src/components/elements/molecules/avatar-stack/index.ts +7 -0
- package/src/components/elements/molecules/breadcrumb/breadcrumb.stories.tsx +273 -0
- package/src/components/elements/molecules/breadcrumb/breadcrumb.tsx +299 -0
- package/src/components/elements/molecules/breadcrumb/index.ts +7 -0
- package/src/components/elements/molecules/button-group/button-group.stories.tsx +267 -0
- package/src/components/elements/molecules/button-group/button-group.tsx +244 -0
- package/src/components/elements/molecules/button-group/index.ts +7 -0
- package/src/components/elements/molecules/collapsible/collapsible.stories.tsx +186 -0
- package/src/components/elements/molecules/collapsible/collapsible.tsx +362 -0
- package/src/components/elements/molecules/collapsible/index.ts +7 -0
- package/src/components/elements/molecules/empty/empty.stories.tsx +182 -0
- package/src/components/elements/molecules/empty/empty.tsx +230 -0
- package/src/components/elements/molecules/empty/index.ts +7 -0
- package/src/components/elements/molecules/pagination-controls/index.ts +8 -0
- package/src/components/elements/molecules/pagination-controls/pagination-controls.stories.tsx +193 -0
- package/src/components/elements/molecules/pagination-controls/pagination-controls.tsx +174 -0
- package/src/components/elements/molecules/tab-select/index.ts +7 -0
- package/src/components/elements/molecules/tab-select/tab-select.stories.tsx +175 -0
- package/src/components/elements/molecules/tab-select/tab-select.tsx +261 -0
- package/src/components/elements/molecules/tabs/index.ts +7 -0
- package/src/components/elements/molecules/tabs/tabs.stories.tsx +198 -0
- package/src/components/elements/molecules/tabs/tabs.tsx +744 -0
- package/src/components/elements/molecules/toggle-group/index.ts +7 -0
- package/src/components/elements/molecules/toggle-group/toggle-group.stories.tsx +201 -0
- package/src/components/elements/molecules/toggle-group/toggle-group.tsx +236 -0
- package/src/components/elements/organisms/accordion/accordion.stories.tsx +217 -0
- package/src/components/elements/organisms/accordion/accordion.tsx +456 -0
- package/src/components/elements/organisms/accordion/index.ts +7 -0
- package/src/components/elements/organisms/card/card.stories.tsx +406 -0
- package/src/components/elements/organisms/card/card.tsx +437 -0
- package/src/components/elements/organisms/card/index.ts +8 -0
- package/src/components/elements/organisms/card/integration-card.stories.tsx +348 -0
- package/src/components/elements/organisms/card/integration-compact.stories.tsx +310 -0
- package/src/components/elements/organisms/card/integrations.tsx +356 -0
- package/src/components/elements/organisms/carousel/carousel.stories.tsx +182 -0
- package/src/components/elements/organisms/carousel/carousel.tsx +537 -0
- package/src/components/elements/organisms/carousel/index.ts +7 -0
- package/src/components/elements/organisms/chart/chart.stories.tsx +147 -0
- package/src/components/elements/organisms/chart/chart.tsx +317 -0
- package/src/components/elements/organisms/chart/index.ts +7 -0
- package/src/components/elements/organisms/command/command.stories.tsx +246 -0
- package/src/components/elements/organisms/command/command.tsx +284 -0
- package/src/components/elements/organisms/command/index.ts +7 -0
- package/src/components/elements/organisms/dialog/dialog.stories.tsx +266 -0
- package/src/components/elements/organisms/dialog/dialog.tsx +366 -0
- package/src/components/elements/organisms/dialog/index.ts +7 -0
- package/src/components/elements/organisms/dropdown-menu/dropdown-menu.stories.tsx +334 -0
- package/src/components/elements/organisms/dropdown-menu/dropdown-menu.tsx +611 -0
- package/src/components/elements/organisms/dropdown-menu/index.ts +7 -0
- package/src/components/elements/organisms/dynamic-breadcrumb/dynamic-breadcrumb.stories.tsx +50 -0
- package/src/components/elements/organisms/dynamic-breadcrumb/dynamic-breadcrumb.tsx +257 -0
- package/src/components/elements/organisms/dynamic-breadcrumb/index.ts +7 -0
- package/src/components/elements/organisms/error-boundary/error-boundary.stories.tsx +142 -0
- package/src/components/elements/organisms/error-boundary/error-boundary.tsx +408 -0
- package/src/components/elements/organisms/error-boundary/index.ts +7 -0
- package/src/components/elements/organisms/hover-card/hover-card.stories.tsx +245 -0
- package/src/components/elements/organisms/hover-card/hover-card.tsx +370 -0
- package/src/components/elements/organisms/hover-card/index.ts +7 -0
- package/src/components/elements/organisms/modal/index.ts +7 -0
- package/src/components/elements/organisms/modal/modal.stories.tsx +189 -0
- package/src/components/elements/organisms/modal/modal.tsx +266 -0
- package/src/components/elements/organisms/popover/index.ts +7 -0
- package/src/components/elements/organisms/popover/popover.stories.tsx +200 -0
- package/src/components/elements/organisms/popover/popover.tsx +302 -0
- package/src/components/elements/organisms/resizable/index.ts +7 -0
- package/src/components/elements/organisms/resizable/resizable.stories.tsx +204 -0
- package/src/components/elements/organisms/resizable/resizable.tsx +178 -0
- package/src/components/elements/organisms/scroll-area/index.ts +7 -0
- package/src/components/elements/organisms/scroll-area/scroll-area.stories.tsx +170 -0
- package/src/components/elements/organisms/scroll-area/scroll-area.tsx +167 -0
- package/src/components/elements/organisms/sheet/index.ts +7 -0
- package/src/components/elements/organisms/sheet/sheet.stories.tsx +235 -0
- package/src/components/elements/organisms/sheet/sheet.tsx +381 -0
- package/src/components/elements/organisms/table/index.ts +7 -0
- package/src/components/elements/organisms/table/table.stories.tsx +238 -0
- package/src/components/elements/organisms/table/table.tsx +392 -0
- package/src/components/elements/organisms/tooltip/index.ts +7 -0
- package/src/components/elements/organisms/tooltip/tooltip.stories.tsx +205 -0
- package/src/components/elements/organisms/tooltip/tooltip.tsx +547 -0
- package/src/components/filter/filter-list/filter-list.stories.tsx +157 -0
- package/src/components/filter/filter-list/filter-list.tsx +435 -0
- package/src/components/filter/filter-list/index.ts +7 -0
- package/src/components/filter/filter-select/filter-select.stories.tsx +124 -0
- package/src/components/filter/filter-select/filter-select.tsx +558 -0
- package/src/components/filter/filter-select/index.ts +7 -0
- package/src/components/filter/index.ts +9 -0
- package/src/components/filter/types.ts +70 -0
- package/src/components/forms/checkbox/checkbox.stories.tsx +177 -0
- package/src/components/forms/checkbox/checkbox.tsx +332 -0
- package/src/components/forms/checkbox/index.ts +11 -0
- package/src/components/forms/combobox/combobox.stories.tsx +224 -0
- package/src/components/forms/combobox/combobox.tsx +679 -0
- package/src/components/forms/combobox/index.ts +7 -0
- package/src/components/forms/date-picker/calendar/calendar.stories.tsx +78 -0
- package/src/components/forms/date-picker/calendar/calendar.tsx +271 -0
- package/src/components/forms/date-picker/calendar/index.ts +7 -0
- package/src/components/forms/date-picker/date-range-picker/date-range-picker.stories.tsx +108 -0
- package/src/components/forms/date-picker/date-range-picker/date-range-picker.tsx +334 -0
- package/src/components/forms/date-picker/date-range-picker/index.ts +7 -0
- package/src/components/forms/date-picker/index.ts +10 -0
- package/src/components/forms/date-picker/presets/index.ts +7 -0
- package/src/components/forms/date-picker/presets/presets.stories.tsx +105 -0
- package/src/components/forms/date-picker/presets/presets.tsx +196 -0
- package/src/components/forms/date-picker/shared.ts +109 -0
- package/src/components/forms/date-picker/trigger/index.ts +7 -0
- package/src/components/forms/date-picker/trigger/trigger.stories.tsx +78 -0
- package/src/components/forms/date-picker/trigger/trigger.tsx +195 -0
- package/src/components/forms/date-picker/types.ts +63 -0
- package/src/components/forms/file-upload/file-upload.stories.tsx +145 -0
- package/src/components/forms/file-upload/file-upload.tsx +504 -0
- package/src/components/forms/file-upload/index.ts +7 -0
- package/src/components/forms/input/index.ts +7 -0
- package/src/components/forms/input/input.stories.tsx +185 -0
- package/src/components/forms/input/input.tsx +228 -0
- package/src/components/forms/input-group/index.ts +11 -0
- package/src/components/forms/input-group/input-group.stories.tsx +146 -0
- package/src/components/forms/input-group/input-group.tsx +344 -0
- package/src/components/forms/label/index.ts +7 -0
- package/src/components/forms/label/label.stories.tsx +140 -0
- package/src/components/forms/label/label.tsx +189 -0
- package/src/components/forms/radio-group/index.ts +7 -0
- package/src/components/forms/radio-group/radio-group.stories.tsx +233 -0
- package/src/components/forms/radio-group/radio-group.tsx +476 -0
- package/src/components/forms/select/index.ts +7 -0
- package/src/components/forms/select/select.stories.tsx +274 -0
- package/src/components/forms/select/select.tsx +654 -0
- package/src/components/forms/switch/index.ts +11 -0
- package/src/components/forms/switch/switch.stories.tsx +166 -0
- package/src/components/forms/switch/switch.tsx +362 -0
- package/src/components/forms/textarea/index.ts +7 -0
- package/src/components/forms/textarea/textarea.stories.tsx +176 -0
- package/src/components/forms/textarea/textarea.tsx +225 -0
- package/src/components/layout/app-shell.tsx +363 -0
- package/src/components/layout/app-sidebar/app-sidebar.stories.tsx +68 -0
- package/src/components/layout/app-sidebar/app-sidebar.tsx +418 -0
- package/src/components/layout/app-sidebar/index.ts +11 -0
- package/src/components/layout/artifact-panel/artifact-panel-header.tsx +89 -0
- package/src/components/layout/artifact-panel/expandable-panel.stories.tsx +484 -0
- package/src/components/layout/artifact-panel/expandable-panel.tsx +289 -0
- package/src/components/layout/artifact-panel/index.ts +23 -0
- package/src/components/layout/artifact-panel/split-panel-layout.tsx +70 -0
- package/src/components/layout/artifact-panel/types.ts +63 -0
- package/src/components/layout/artifact-panel/use-artifact-panel-state.ts +101 -0
- package/src/components/layout/content-sidebar/content-sidebar.stories.tsx +490 -0
- package/src/components/layout/content-sidebar/content-sidebar.tsx +337 -0
- package/src/components/layout/content-sidebar/index.ts +17 -0
- package/src/components/layout/nav-app-switcher/index.ts +7 -0
- package/src/components/layout/nav-app-switcher/nav-app-switcher.stories.tsx +138 -0
- package/src/components/layout/nav-app-switcher/nav-app-switcher.tsx +282 -0
- package/src/components/layout/nav-main/index.ts +11 -0
- package/src/components/layout/nav-main/nav-main.stories.tsx +103 -0
- package/src/components/layout/nav-main/nav-main.tsx +259 -0
- package/src/components/layout/nav-projects/index.ts +11 -0
- package/src/components/layout/nav-projects/nav-projects.stories.tsx +82 -0
- package/src/components/layout/nav-projects/nav-projects.tsx +218 -0
- package/src/components/layout/nav-secondary/index.ts +11 -0
- package/src/components/layout/nav-secondary/nav-secondary.stories.tsx +81 -0
- package/src/components/layout/nav-secondary/nav-secondary.tsx +145 -0
- package/src/components/layout/nav-user/index.ts +11 -0
- package/src/components/layout/nav-user/nav-user.stories.tsx +80 -0
- package/src/components/layout/nav-user/nav-user.tsx +226 -0
- package/src/components/layout/oneapp/auth-context.tsx +74 -0
- package/src/components/layout/oneapp/ensure-anonymous-session.tsx +218 -0
- package/src/components/layout/oneapp/index.ts +37 -0
- package/src/components/layout/oneapp/microfrontend-layout.tsx +191 -0
- package/src/components/layout/oneapp/types.ts +98 -0
- package/src/components/layout/sidebar/index.ts +7 -0
- package/src/components/layout/sidebar/sidebar.stories.tsx +170 -0
- package/src/components/layout/sidebar/sidebar.tsx +945 -0
- package/src/components/layout/sidebar-inset-header-portal/index.ts +8 -0
- package/src/components/layout/sidebar-inset-header-portal/sidebar-inset-header-portal.stories.tsx +355 -0
- package/src/components/layout/sidebar-inset-header-portal/sidebar-inset-header-portal.tsx +179 -0
- package/src/components/layout/sidebar-slots/USAGE.md +163 -0
- package/src/components/layout/sidebar-slots/__tests__/sidebar-slots.test.tsx +239 -0
- package/src/components/layout/sidebar-slots/index.ts +9 -0
- package/src/components/layout/sidebar-slots/sidebar-slots.stories.tsx +525 -0
- package/src/components/layout/sidebar-slots/sidebar-slots.tsx +205 -0
- package/src/components/layout/theme-provider/index.ts +11 -0
- package/src/components/layout/theme-provider/theme-provider.stories.tsx +82 -0
- package/src/components/layout/theme-provider/theme-provider.tsx +101 -0
- package/src/components/overlays/confirm-dialog.stories.tsx +371 -0
- package/src/components/overlays/confirm-dialog.tsx +201 -0
- package/src/components/overlays/toast.stories.tsx +373 -0
- package/src/components/overlays/toast.tsx +115 -0
- package/src/constants/container.ts +183 -0
- package/src/constants/index.ts +38 -0
- package/src/constants/motion.ts +104 -0
- package/src/fonts/Satoshi-Variable.woff2 +0 -0
- package/src/fonts/Satoshi-VariableItalic.woff2 +0 -0
- package/src/fonts/fonts.css +41 -0
- package/src/fonts/index.ts +106 -0
- package/src/hooks/.gitkeep +0 -0
- package/src/hooks/ai-chat/context.tsx +294 -0
- package/src/hooks/ai-chat/hooks.ts +297 -0
- package/src/hooks/ai-chat/index.ts +35 -0
- package/src/hooks/ai-chat/utils.ts +65 -0
- package/src/hooks/index.ts +18 -0
- package/src/hooks/use-mobile.ts +45 -0
- package/src/hooks/use-responsive.ts +64 -0
- package/src/hooks/use-scroll-progress.ts +101 -0
- package/src/hooks/use-toast.ts +65 -0
- package/src/index.ts +857 -0
- package/src/lib/export-csv.ts +107 -0
- package/src/lib/index.ts +10 -0
- package/src/lib/resize-image.ts +109 -0
- package/src/lib/stable-sort.ts +29 -0
- package/src/lib/utils.ts +28 -0
- package/src/react-19-compat.d.ts +28 -0
- package/src/shared/auth/index.ts +8 -0
- package/src/shared/auth/types/index.ts +163 -0
- package/src/shared/auth/types.ts +196 -0
- package/src/shared/auth/utils/dark-mode.ts +336 -0
- package/src/shared/index.ts +5 -0
- package/src/styles/_tokens.generated.scss +84 -0
- package/src/styles/ai-elements.scss +9 -0
- package/src/styles/base.scss +44 -0
- package/src/styles/flows.scss +62 -0
- package/src/styles/globals.css +627 -0
- package/src/styles/index.scss +9 -0
- package/src/styles/shadcn.scss +16 -0
- package/src/styles/sources.css +16 -0
- package/src/styles/theme.css +1687 -0
- package/src/styles/theme.template.css +95 -0
- package/src/tokens/accessibility.ts +494 -0
- package/src/tokens/animations.ts +305 -0
- package/src/tokens/aspect-ratio.ts +89 -0
- package/src/tokens/blur.ts +82 -0
- package/src/tokens/border-width.ts +86 -0
- package/src/tokens/breakpoints.ts +150 -0
- package/src/tokens/colors.ts +1199 -0
- package/src/tokens/component.ts +362 -0
- package/src/tokens/container.ts +42 -0
- package/src/tokens/focus.ts +266 -0
- package/src/tokens/form-states.ts +521 -0
- package/src/tokens/grid.ts +258 -0
- package/src/tokens/index.ts +1175 -0
- package/src/tokens/interactions.ts +558 -0
- package/src/tokens/mantine-types.ts +68 -0
- package/src/tokens/opacity.ts +139 -0
- package/src/tokens/palette.ts +854 -0
- package/src/tokens/pseudo-elements.ts +508 -0
- package/src/tokens/radius.ts +57 -0
- package/src/tokens/shadows.ts +313 -0
- package/src/tokens/spacing.ts +95 -0
- package/src/tokens/states.ts +392 -0
- package/src/tokens/structural.ts +589 -0
- package/src/tokens/timing.ts +224 -0
- package/src/tokens/typography.ts +242 -0
- package/src/tokens/z-index.ts +184 -0
- package/storybook/preview.tsx +201 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { t as cn } from "./utils-D2bGp2p_.mjs";
|
|
3
|
+
import { t as Button } from "./button-DVOrrZLw.mjs";
|
|
4
|
+
import { a as Card } from "./integrations-lBG309ZD.mjs";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import { memo, useCallback, useMemo } from "react";
|
|
7
|
+
import { useReducedMotion } from "@mantine/hooks";
|
|
8
|
+
import { AlertCircle, AlertTriangle, Home, RefreshCw } from "lucide-react";
|
|
9
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
|
|
11
|
+
//#region src/components/elements/organisms/error-boundary/error-boundary.tsx
|
|
12
|
+
/**
|
|
13
|
+
* @fileoverview ErrorBoundary Component - Premium Harmony V2
|
|
14
|
+
*
|
|
15
|
+
* React error boundary component with customizable fallback UI and error handling.
|
|
16
|
+
* Catches rendering errors and displays graceful fallback UIs with Premium Harmony V2 design.
|
|
17
|
+
*
|
|
18
|
+
* Features:
|
|
19
|
+
* - ES2023 syntax with modern patterns
|
|
20
|
+
* - Premium Harmony V2 design system with spring animations
|
|
21
|
+
* - Tailwind v4 CSS-first theming with CSS variables
|
|
22
|
+
* - Super light/dark mode with seamless switching
|
|
23
|
+
* - Two variants: page (full-page) and card (compact inline)
|
|
24
|
+
* - Custom fallback component support
|
|
25
|
+
* - Error callback for logging/monitoring
|
|
26
|
+
* - Context string for error messages
|
|
27
|
+
* - Development-only error stack display
|
|
28
|
+
* - HOC wrapper (withErrorBoundary)
|
|
29
|
+
* - Memoized fallback components
|
|
30
|
+
* - Reduced motion support for accessibility
|
|
31
|
+
* - Data attributes for testing and state tracking
|
|
32
|
+
*
|
|
33
|
+
* @module @od-oneapp/uni-ui/components/error-boundary
|
|
34
|
+
* @component ErrorBoundary, CardErrorFallback, withErrorBoundary
|
|
35
|
+
*
|
|
36
|
+
* @useCases
|
|
37
|
+
* - Wrapping entire page layouts to catch and recover from critical errors
|
|
38
|
+
* - Protecting individual widgets/cards from crashing the entire application
|
|
39
|
+
* - Providing graceful error experiences in dashboard and analytics views
|
|
40
|
+
* - Isolating third-party components that may throw errors
|
|
41
|
+
* - Creating resilient artifact viewers and content displays
|
|
42
|
+
* - Building developer-friendly error displays with stack traces in development
|
|
43
|
+
* - Implementing error boundaries in microfrontend architectures
|
|
44
|
+
* - Protecting form sections from isolated validation errors
|
|
45
|
+
*
|
|
46
|
+
* @variants
|
|
47
|
+
* - variant: page (default), card
|
|
48
|
+
*
|
|
49
|
+
* @example <ErrorBoundary context="dashboard" onError={logError}><Dashboard /></ErrorBoundary>
|
|
50
|
+
* @example <ErrorBoundary variant="card" context="widget"><Widget /></ErrorBoundary>
|
|
51
|
+
* @example const SafeComponent = withErrorBoundary(MyComponent, null, 'my-component');
|
|
52
|
+
*/
|
|
53
|
+
const ERROR_BOUNDARY_CONTAINER_CLASSNAME = "bg-background flex min-h-screen w-full items-center justify-center p-6";
|
|
54
|
+
const ERROR_BOUNDARY_CARD_CLASSNAME = "w-full max-w-2xl space-y-6 p-8";
|
|
55
|
+
const ERROR_BOUNDARY_HEADER_CLASSNAME = "text-destructive flex items-center gap-3";
|
|
56
|
+
const ERROR_BOUNDARY_TITLE_CLASSNAME = "text-2xl font-semibold";
|
|
57
|
+
const ERROR_BOUNDARY_MESSAGE_CLASSNAME = "text-muted-foreground";
|
|
58
|
+
const ERROR_BOUNDARY_DETAILS_CLASSNAME = "mt-4";
|
|
59
|
+
const ERROR_BOUNDARY_SUMMARY_CLASSNAME = "text-muted-foreground hover:text-foreground cursor-pointer text-sm font-medium";
|
|
60
|
+
const ERROR_BOUNDARY_PRE_CLASSNAME = "bg-muted mt-2 overflow-auto rounded-md p-4 text-xs";
|
|
61
|
+
const ERROR_BOUNDARY_ACTIONS_CLASSNAME = "flex flex-wrap gap-3";
|
|
62
|
+
const ERROR_BOUNDARY_MESSAGE_CONTAINER_CLASSNAME = "space-y-2";
|
|
63
|
+
const ERROR_BOUNDARY_ICON_CLASSNAME = "h-8 w-8";
|
|
64
|
+
const ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME = "mr-2 h-4 w-4";
|
|
65
|
+
const ERROR_BOUNDARY_ANIMATION_CLASSNAME = "animate-in fade-in-0 zoom-in-95 duration-500 [animation-timing-function:cubic-bezier(0.34,1.56,0.64,1)]";
|
|
66
|
+
const ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME = "animate-in fade-in-0 duration-200";
|
|
67
|
+
const ERROR_TITLE = "Something went wrong";
|
|
68
|
+
const ERROR_DETAILS_SUMMARY = "Error Details (Development Only)";
|
|
69
|
+
const TRY_AGAIN_LABEL = "Try Again";
|
|
70
|
+
const RELOAD_PAGE_LABEL = "Reload Page";
|
|
71
|
+
const RELOAD_ARTIFACT_LABEL = "Reload Artifact";
|
|
72
|
+
const ERROR_MESSAGE_PREFIX = "An unexpected error occurred";
|
|
73
|
+
const ERROR_MESSAGE_SUFFIX = "If this persists, please refresh or report it.";
|
|
74
|
+
const ERROR_CONTEXT_PREFIX = "while using the";
|
|
75
|
+
const ERROR_CONTEXT_DEFAULT = "in this component";
|
|
76
|
+
const CARD_ERROR_MESSAGE = "The content encountered an error. Your data is safe and you can try again.";
|
|
77
|
+
/**
|
|
78
|
+
* Error boundary component with default fallback UI.
|
|
79
|
+
*
|
|
80
|
+
* Catches React errors in child components and displays a fallback UI.
|
|
81
|
+
* Supports custom fallback components, error callbacks, and two variants.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```tsx
|
|
85
|
+
* // Full-page error (default)
|
|
86
|
+
* <ErrorBoundary context="dashboard" onError={(error) => logError(error)}>
|
|
87
|
+
* <Dashboard />
|
|
88
|
+
* </ErrorBoundary>
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```tsx
|
|
93
|
+
* // Compact card error for inline components
|
|
94
|
+
* <ErrorBoundary variant="card" context="artifact">
|
|
95
|
+
* <ArtifactViewer />
|
|
96
|
+
* </ErrorBoundary>
|
|
97
|
+
* ```
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```tsx
|
|
101
|
+
* <ErrorBoundary fallback={CustomErrorFallback}>
|
|
102
|
+
* <App />
|
|
103
|
+
* </ErrorBoundary>
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
var ErrorBoundary = class extends React$1.Component {
|
|
107
|
+
constructor(props) {
|
|
108
|
+
super(props);
|
|
109
|
+
this.state = {
|
|
110
|
+
hasError: false,
|
|
111
|
+
error: null
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
static getDerivedStateFromError(error) {
|
|
115
|
+
return {
|
|
116
|
+
hasError: true,
|
|
117
|
+
error
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
componentDidCatch(error, errorInfo) {
|
|
121
|
+
this.props.onError?.(error, errorInfo);
|
|
122
|
+
}
|
|
123
|
+
resetError = () => {
|
|
124
|
+
this.setState({
|
|
125
|
+
hasError: false,
|
|
126
|
+
error: null
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
render() {
|
|
130
|
+
if (this.state.hasError && this.state.error) {
|
|
131
|
+
if (this.props.fallback) {
|
|
132
|
+
const Fallback = this.props.fallback;
|
|
133
|
+
return /* @__PURE__ */ jsx(Fallback, {
|
|
134
|
+
error: this.state.error,
|
|
135
|
+
resetError: this.resetError
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (this.props.variant === "card") return /* @__PURE__ */ jsx(CardErrorFallback, {
|
|
139
|
+
context: this.props.context,
|
|
140
|
+
error: this.state.error,
|
|
141
|
+
resetError: this.resetError,
|
|
142
|
+
minHeight: this.props.minHeight
|
|
143
|
+
});
|
|
144
|
+
return /* @__PURE__ */ jsx(DefaultErrorFallback, {
|
|
145
|
+
context: this.props.context,
|
|
146
|
+
error: this.state.error,
|
|
147
|
+
resetError: this.resetError
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return this.props.children;
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Compact card-style error fallback for inline components.
|
|
155
|
+
* Shows a red-bordered card with error icon, message, and action buttons.
|
|
156
|
+
* Premium Harmony V2: Spring animations with reduced motion support.
|
|
157
|
+
*/
|
|
158
|
+
const CardErrorFallback = memo(function CardErrorFallback({ error, resetError, context, minHeight = "min-h-[400px]" }) {
|
|
159
|
+
const reducedMotion = useReducedMotion();
|
|
160
|
+
const errorMessage = error.message || "An unexpected error occurred";
|
|
161
|
+
const title = context ? `${context.charAt(0).toUpperCase()}${context.slice(1)} Error` : "Error";
|
|
162
|
+
const handleReload = useCallback(() => {
|
|
163
|
+
if (typeof window !== "undefined") window.location.reload();
|
|
164
|
+
}, []);
|
|
165
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
166
|
+
"data-error-state": "visible",
|
|
167
|
+
"data-error-variant": "card",
|
|
168
|
+
className: cn("border-destructive/50 bg-destructive/5 flex flex-col items-center justify-center gap-4 rounded-lg border p-8", minHeight, reducedMotion ? ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME : ERROR_BOUNDARY_ANIMATION_CLASSNAME),
|
|
169
|
+
children: [
|
|
170
|
+
/* @__PURE__ */ jsx(AlertCircle, {
|
|
171
|
+
className: "text-destructive size-12",
|
|
172
|
+
"aria-hidden": "true"
|
|
173
|
+
}),
|
|
174
|
+
/* @__PURE__ */ jsxs("div", {
|
|
175
|
+
className: "text-center",
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ jsx("h3", {
|
|
178
|
+
className: "text-lg font-semibold",
|
|
179
|
+
children: title
|
|
180
|
+
}),
|
|
181
|
+
/* @__PURE__ */ jsx("p", {
|
|
182
|
+
className: "text-muted-foreground mt-2 text-sm",
|
|
183
|
+
children: CARD_ERROR_MESSAGE
|
|
184
|
+
}),
|
|
185
|
+
errorMessage ? /* @__PURE__ */ jsx("p", {
|
|
186
|
+
className: "text-muted-foreground mt-1 font-mono text-xs",
|
|
187
|
+
children: errorMessage
|
|
188
|
+
}) : null
|
|
189
|
+
]
|
|
190
|
+
}),
|
|
191
|
+
/* @__PURE__ */ jsxs("div", {
|
|
192
|
+
className: "flex gap-2",
|
|
193
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
194
|
+
onClick: resetError,
|
|
195
|
+
variant: "outline",
|
|
196
|
+
size: "sm",
|
|
197
|
+
children: RELOAD_ARTIFACT_LABEL
|
|
198
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
199
|
+
onClick: handleReload,
|
|
200
|
+
variant: "ghost",
|
|
201
|
+
size: "sm",
|
|
202
|
+
children: RELOAD_PAGE_LABEL
|
|
203
|
+
})]
|
|
204
|
+
})
|
|
205
|
+
]
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
const DefaultErrorFallback = memo(function DefaultErrorFallback({ error, resetError, context }) {
|
|
209
|
+
const reducedMotion = useReducedMotion();
|
|
210
|
+
const contextMessage = useMemo(() => context ? `${ERROR_CONTEXT_PREFIX} ${context}` : ERROR_CONTEXT_DEFAULT, [context]);
|
|
211
|
+
const errorMessage = useMemo(() => `${ERROR_MESSAGE_PREFIX} ${contextMessage}. ${ERROR_MESSAGE_SUFFIX}`, [contextMessage]);
|
|
212
|
+
const errorDetails = useMemo(() => {
|
|
213
|
+
return /* @__PURE__ */ jsxs("details", {
|
|
214
|
+
className: ERROR_BOUNDARY_DETAILS_CLASSNAME,
|
|
215
|
+
children: [/* @__PURE__ */ jsx("summary", {
|
|
216
|
+
className: ERROR_BOUNDARY_SUMMARY_CLASSNAME,
|
|
217
|
+
children: ERROR_DETAILS_SUMMARY
|
|
218
|
+
}), /* @__PURE__ */ jsxs("pre", {
|
|
219
|
+
className: ERROR_BOUNDARY_PRE_CLASSNAME,
|
|
220
|
+
children: [/* @__PURE__ */ jsx("code", { children: error.message }), error.stack ? /* @__PURE__ */ jsxs(Fragment$1, { children: ["\n\n", /* @__PURE__ */ jsx("code", { children: error.stack })] }) : null]
|
|
221
|
+
})]
|
|
222
|
+
});
|
|
223
|
+
}, [error.message, error.stack]);
|
|
224
|
+
const handleReload = useCallback(() => {
|
|
225
|
+
if (typeof window !== "undefined") window.location.reload();
|
|
226
|
+
}, []);
|
|
227
|
+
return /* @__PURE__ */ jsx("div", {
|
|
228
|
+
className: ERROR_BOUNDARY_CONTAINER_CLASSNAME,
|
|
229
|
+
"data-error-state": "visible",
|
|
230
|
+
children: /* @__PURE__ */ jsxs(Card, {
|
|
231
|
+
className: cn(ERROR_BOUNDARY_CARD_CLASSNAME, reducedMotion ? ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME : ERROR_BOUNDARY_ANIMATION_CLASSNAME),
|
|
232
|
+
"data-error-variant": "page",
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ jsxs("div", {
|
|
235
|
+
className: ERROR_BOUNDARY_HEADER_CLASSNAME,
|
|
236
|
+
children: [/* @__PURE__ */ jsx(AlertTriangle, {
|
|
237
|
+
className: ERROR_BOUNDARY_ICON_CLASSNAME,
|
|
238
|
+
"aria-hidden": "true"
|
|
239
|
+
}), /* @__PURE__ */ jsx("h1", {
|
|
240
|
+
className: ERROR_BOUNDARY_TITLE_CLASSNAME,
|
|
241
|
+
children: ERROR_TITLE
|
|
242
|
+
})]
|
|
243
|
+
}),
|
|
244
|
+
/* @__PURE__ */ jsxs("div", {
|
|
245
|
+
className: ERROR_BOUNDARY_MESSAGE_CONTAINER_CLASSNAME,
|
|
246
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
247
|
+
className: ERROR_BOUNDARY_MESSAGE_CLASSNAME,
|
|
248
|
+
children: errorMessage
|
|
249
|
+
}), errorDetails]
|
|
250
|
+
}),
|
|
251
|
+
/* @__PURE__ */ jsxs("div", {
|
|
252
|
+
className: ERROR_BOUNDARY_ACTIONS_CLASSNAME,
|
|
253
|
+
children: [/* @__PURE__ */ jsxs(Button, {
|
|
254
|
+
onClick: resetError,
|
|
255
|
+
variant: "default",
|
|
256
|
+
type: "button",
|
|
257
|
+
children: [/* @__PURE__ */ jsx(RefreshCw, { className: ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME }), TRY_AGAIN_LABEL]
|
|
258
|
+
}), /* @__PURE__ */ jsxs(Button, {
|
|
259
|
+
onClick: handleReload,
|
|
260
|
+
variant: "outline",
|
|
261
|
+
type: "button",
|
|
262
|
+
children: [/* @__PURE__ */ jsx(Home, { className: ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME }), RELOAD_PAGE_LABEL]
|
|
263
|
+
})]
|
|
264
|
+
})
|
|
265
|
+
]
|
|
266
|
+
})
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
/**
|
|
270
|
+
* Higher-order component that wraps a component with an error boundary.
|
|
271
|
+
*
|
|
272
|
+
* @template P - Component props type
|
|
273
|
+
* @param {React.ComponentType<P>} Component - Component to wrap
|
|
274
|
+
* @param {React.ComponentType<ErrorBoundaryFallbackProps>} [fallback] - Optional custom fallback component
|
|
275
|
+
* @param {string} [context] - Optional context string for error messages
|
|
276
|
+
* @param {(error: Error, info: React.ErrorInfo) => void} [onError] - Optional error handler
|
|
277
|
+
* @returns {React.ComponentType<P>} Component wrapped with error boundary
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* ```tsx
|
|
281
|
+
* const SafeComponent = withErrorBoundary(MyComponent, CustomFallback, 'dashboard');
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
284
|
+
function withErrorBoundary(Component, fallback, context, onError) {
|
|
285
|
+
return function WithErrorBoundaryComponent(props) {
|
|
286
|
+
return /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
287
|
+
fallback,
|
|
288
|
+
context,
|
|
289
|
+
onError,
|
|
290
|
+
children: /* @__PURE__ */ jsx(Component, { ...props })
|
|
291
|
+
});
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
//#endregion
|
|
296
|
+
export { ErrorBoundary as n, withErrorBoundary as r, CardErrorFallback as t };
|
|
297
|
+
//# sourceMappingURL=error-boundary-Ggc5btkU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-boundary-Ggc5btkU.mjs","names":["React"],"sources":["../src/components/elements/organisms/error-boundary/error-boundary.tsx"],"sourcesContent":["/**\n * @fileoverview ErrorBoundary Component - Premium Harmony V2\n *\n * React error boundary component with customizable fallback UI and error handling.\n * Catches rendering errors and displays graceful fallback UIs with Premium Harmony V2 design.\n *\n * Features:\n * - ES2023 syntax with modern patterns\n * - Premium Harmony V2 design system with spring animations\n * - Tailwind v4 CSS-first theming with CSS variables\n * - Super light/dark mode with seamless switching\n * - Two variants: page (full-page) and card (compact inline)\n * - Custom fallback component support\n * - Error callback for logging/monitoring\n * - Context string for error messages\n * - Development-only error stack display\n * - HOC wrapper (withErrorBoundary)\n * - Memoized fallback components\n * - Reduced motion support for accessibility\n * - Data attributes for testing and state tracking\n *\n * @module @od-oneapp/uni-ui/components/error-boundary\n * @component ErrorBoundary, CardErrorFallback, withErrorBoundary\n *\n * @useCases\n * - Wrapping entire page layouts to catch and recover from critical errors\n * - Protecting individual widgets/cards from crashing the entire application\n * - Providing graceful error experiences in dashboard and analytics views\n * - Isolating third-party components that may throw errors\n * - Creating resilient artifact viewers and content displays\n * - Building developer-friendly error displays with stack traces in development\n * - Implementing error boundaries in microfrontend architectures\n * - Protecting form sections from isolated validation errors\n *\n * @variants\n * - variant: page (default), card\n *\n * @example <ErrorBoundary context=\"dashboard\" onError={logError}><Dashboard /></ErrorBoundary>\n * @example <ErrorBoundary variant=\"card\" context=\"widget\"><Widget /></ErrorBoundary>\n * @example const SafeComponent = withErrorBoundary(MyComponent, null, 'my-component');\n */\n\n'use client';\n\nimport * as React from 'react';\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useReducedMotion } from '@mantine/hooks';\nimport { AlertCircle, AlertTriangle, Home, RefreshCw } from 'lucide-react';\n\nimport { cn } from '../../../../lib/utils';\nimport { Button } from '../../atoms/button';\nimport { Card } from '../card';\n\n// =============================================================================\n// Static classNames for page variant (Premium Harmony V2)\n// =============================================================================\nconst ERROR_BOUNDARY_CONTAINER_CLASSNAME =\n 'bg-background flex min-h-screen w-full items-center justify-center p-6';\nconst ERROR_BOUNDARY_CARD_CLASSNAME = 'w-full max-w-2xl space-y-6 p-8';\nconst ERROR_BOUNDARY_HEADER_CLASSNAME = 'text-destructive flex items-center gap-3';\nconst ERROR_BOUNDARY_TITLE_CLASSNAME = 'text-2xl font-semibold';\nconst ERROR_BOUNDARY_MESSAGE_CLASSNAME = 'text-muted-foreground';\nconst ERROR_BOUNDARY_DETAILS_CLASSNAME = 'mt-4';\nconst ERROR_BOUNDARY_SUMMARY_CLASSNAME =\n 'text-muted-foreground hover:text-foreground cursor-pointer text-sm font-medium';\nconst ERROR_BOUNDARY_PRE_CLASSNAME = 'bg-muted mt-2 overflow-auto rounded-md p-4 text-xs';\nconst ERROR_BOUNDARY_ACTIONS_CLASSNAME = 'flex flex-wrap gap-3';\nconst ERROR_BOUNDARY_MESSAGE_CONTAINER_CLASSNAME = 'space-y-2';\nconst ERROR_BOUNDARY_ICON_CLASSNAME = 'h-8 w-8';\nconst ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME = 'mr-2 h-4 w-4';\n\n// Premium Harmony V2: Spring animation classes\n// Uses cubic-bezier for spring-like physics (0.34, 1.56, 0.64, 1) - gentle bounce\nconst ERROR_BOUNDARY_ANIMATION_CLASSNAME =\n 'animate-in fade-in-0 zoom-in-95 duration-500 [animation-timing-function:cubic-bezier(0.34,1.56,0.64,1)]';\nconst ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME = 'animate-in fade-in-0 duration-200';\n\n// =============================================================================\n// Static strings\n// =============================================================================\nconst ERROR_TITLE = 'Something went wrong';\nconst ERROR_DETAILS_SUMMARY = 'Error Details (Development Only)';\nconst TRY_AGAIN_LABEL = 'Try Again';\nconst RELOAD_PAGE_LABEL = 'Reload Page';\nconst RELOAD_ARTIFACT_LABEL = 'Reload Artifact';\nconst ERROR_MESSAGE_PREFIX = 'An unexpected error occurred';\nconst ERROR_MESSAGE_SUFFIX = 'If this persists, please refresh or report it.';\nconst ERROR_CONTEXT_PREFIX = 'while using the';\nconst ERROR_CONTEXT_DEFAULT = 'in this component';\nconst CARD_ERROR_MESSAGE =\n 'The content encountered an error. Your data is safe and you can try again.';\n\n// Static values - moved outside components to prevent recreation\nconst IS_DEVELOPMENT = process.env.NODE_ENV === 'development';\n\n/** Error boundary variant type */\nexport type ErrorBoundaryVariant = 'page' | 'card';\n\n/**\n * Error boundary component props.\n */\nexport interface ErrorBoundaryProps {\n /** Child components to wrap */\n children: React.ReactNode;\n /** Custom fallback component to render on error */\n fallback?: React.ComponentType<ErrorBoundaryFallbackProps>;\n /** Context string for error messages (e.g., \"dashboard\", \"artifact\") */\n context?: string;\n /** Error handler callback */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n /** Variant: 'page' for full-page errors, 'card' for inline compact errors */\n variant?: ErrorBoundaryVariant;\n /** Minimum height for the card variant container */\n minHeight?: string;\n}\n\n/**\n * Error boundary fallback component props.\n */\nexport interface ErrorBoundaryFallbackProps {\n /** The error that occurred */\n error: Error;\n /** Function to reset the error boundary */\n resetError: () => void;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * Error boundary component with default fallback UI.\n *\n * Catches React errors in child components and displays a fallback UI.\n * Supports custom fallback components, error callbacks, and two variants.\n *\n * @example\n * ```tsx\n * // Full-page error (default)\n * <ErrorBoundary context=\"dashboard\" onError={(error) => logError(error)}>\n * <Dashboard />\n * </ErrorBoundary>\n * ```\n *\n * @example\n * ```tsx\n * // Compact card error for inline components\n * <ErrorBoundary variant=\"card\" context=\"artifact\">\n * <ArtifactViewer />\n * </ErrorBoundary>\n * ```\n *\n * @example\n * ```tsx\n * <ErrorBoundary fallback={CustomErrorFallback}>\n * <App />\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n this.props.onError?.(error, errorInfo);\n }\n\n resetError = () => {\n this.setState({\n hasError: false,\n error: null,\n });\n };\n\n render() {\n if (this.state.hasError && this.state.error) {\n if (this.props.fallback) {\n const Fallback = this.props.fallback;\n return <Fallback error={this.state.error} resetError={this.resetError} />;\n }\n\n // Use card variant for compact inline errors\n if (this.props.variant === 'card') {\n return (\n <CardErrorFallback\n context={this.props.context}\n error={this.state.error}\n resetError={this.resetError}\n minHeight={this.props.minHeight}\n />\n );\n }\n\n return (\n <DefaultErrorFallback\n context={this.props.context}\n error={this.state.error}\n resetError={this.resetError}\n />\n );\n }\n\n return this.props.children;\n }\n}\n\n// =============================================================================\n// Card Error Fallback - Compact inline error display\n// =============================================================================\n\ninterface CardErrorFallbackProps extends ErrorBoundaryFallbackProps {\n context?: string;\n minHeight?: string;\n}\n\n/**\n * Compact card-style error fallback for inline components.\n * Shows a red-bordered card with error icon, message, and action buttons.\n * Premium Harmony V2: Spring animations with reduced motion support.\n */\nexport const CardErrorFallback = memo(function CardErrorFallback({\n error,\n resetError,\n context,\n minHeight = 'min-h-[400px]',\n}: CardErrorFallbackProps) {\n // Premium Harmony V2: Check reduced motion preference\n const reducedMotion = useReducedMotion();\n\n const errorMessage = error.message || 'An unexpected error occurred';\n\n // Format context for display (e.g., \"dashboard\" -> \"Dashboard Error\")\n const title = context ? `${context.charAt(0).toUpperCase()}${context.slice(1)} Error` : 'Error';\n\n const handleReload = useCallback(() => {\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n }, []);\n\n return (\n <div\n data-error-state=\"visible\"\n data-error-variant=\"card\"\n className={cn(\n 'border-destructive/50 bg-destructive/5 flex flex-col items-center justify-center gap-4 rounded-lg border p-8',\n minHeight,\n // Premium Harmony V2: Spring animation with reduced motion support\n reducedMotion\n ? ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME\n : ERROR_BOUNDARY_ANIMATION_CLASSNAME,\n )}\n >\n <AlertCircle className=\"text-destructive size-12\" aria-hidden=\"true\" />\n <div className=\"text-center\">\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n <p className=\"text-muted-foreground mt-2 text-sm\">{CARD_ERROR_MESSAGE}</p>\n {errorMessage ? (\n <p className=\"text-muted-foreground mt-1 font-mono text-xs\">{errorMessage}</p>\n ) : null}\n </div>\n <div className=\"flex gap-2\">\n <Button onClick={resetError} variant=\"outline\" size=\"sm\">\n {RELOAD_ARTIFACT_LABEL}\n </Button>\n <Button onClick={handleReload} variant=\"ghost\" size=\"sm\">\n {RELOAD_PAGE_LABEL}\n </Button>\n </div>\n </div>\n );\n});\n\n// =============================================================================\n// Default Error Fallback - Full-page error display\n// =============================================================================\n\ninterface DefaultErrorFallbackProps extends ErrorBoundaryFallbackProps {\n context?: string;\n}\n\nconst DefaultErrorFallback = memo(function DefaultErrorFallback({\n error,\n resetError,\n context,\n}: DefaultErrorFallbackProps) {\n // Premium Harmony V2: Check reduced motion preference\n const reducedMotion = useReducedMotion();\n\n // Memoize context message to prevent unnecessary re-computation\n const contextMessage = useMemo(\n () => (context ? `${ERROR_CONTEXT_PREFIX} ${context}` : ERROR_CONTEXT_DEFAULT),\n [context],\n );\n\n // Memoize full error message to prevent unnecessary re-computation\n const errorMessage = useMemo(\n () => `${ERROR_MESSAGE_PREFIX} ${contextMessage}. ${ERROR_MESSAGE_SUFFIX}`,\n [contextMessage],\n );\n\n // Memoize error details to prevent unnecessary re-computation\n const errorDetails = useMemo(() => {\n if (!IS_DEVELOPMENT) return null;\n\n return (\n <details className={ERROR_BOUNDARY_DETAILS_CLASSNAME}>\n <summary className={ERROR_BOUNDARY_SUMMARY_CLASSNAME}>{ERROR_DETAILS_SUMMARY}</summary>\n <pre className={ERROR_BOUNDARY_PRE_CLASSNAME}>\n <code>{error.message}</code>\n {error.stack ? (\n <>\n {'\\n\\n'}\n <code>{error.stack}</code>\n </>\n ) : null}\n </pre>\n </details>\n );\n }, [error.message, error.stack]);\n\n // Memoize reload handler to prevent unnecessary re-renders\n const handleReload = useCallback(() => {\n if (typeof window !== 'undefined') {\n window.location.reload();\n }\n }, []);\n\n return (\n <div className={ERROR_BOUNDARY_CONTAINER_CLASSNAME} data-error-state=\"visible\">\n <Card\n className={cn(\n ERROR_BOUNDARY_CARD_CLASSNAME,\n // Premium Harmony V2: Spring animation with reduced motion support\n reducedMotion\n ? ERROR_BOUNDARY_ANIMATION_REDUCED_CLASSNAME\n : ERROR_BOUNDARY_ANIMATION_CLASSNAME,\n )}\n data-error-variant=\"page\"\n >\n <div className={ERROR_BOUNDARY_HEADER_CLASSNAME}>\n <AlertTriangle className={ERROR_BOUNDARY_ICON_CLASSNAME} aria-hidden=\"true\" />\n <h1 className={ERROR_BOUNDARY_TITLE_CLASSNAME}>{ERROR_TITLE}</h1>\n </div>\n\n <div className={ERROR_BOUNDARY_MESSAGE_CONTAINER_CLASSNAME}>\n <p className={ERROR_BOUNDARY_MESSAGE_CLASSNAME}>{errorMessage}</p>\n {errorDetails}\n </div>\n\n <div className={ERROR_BOUNDARY_ACTIONS_CLASSNAME}>\n <Button onClick={resetError} variant=\"default\" type=\"button\">\n <RefreshCw className={ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME} />\n {TRY_AGAIN_LABEL}\n </Button>\n <Button onClick={handleReload} variant=\"outline\" type=\"button\">\n <Home className={ERROR_BOUNDARY_BUTTON_ICON_CLASSNAME} />\n {RELOAD_PAGE_LABEL}\n </Button>\n </div>\n </Card>\n </div>\n );\n});\n\n/**\n * Higher-order component that wraps a component with an error boundary.\n *\n * @template P - Component props type\n * @param {React.ComponentType<P>} Component - Component to wrap\n * @param {React.ComponentType<ErrorBoundaryFallbackProps>} [fallback] - Optional custom fallback component\n * @param {string} [context] - Optional context string for error messages\n * @param {(error: Error, info: React.ErrorInfo) => void} [onError] - Optional error handler\n * @returns {React.ComponentType<P>} Component wrapped with error boundary\n *\n * @example\n * ```tsx\n * const SafeComponent = withErrorBoundary(MyComponent, CustomFallback, 'dashboard');\n * ```\n */\nexport function withErrorBoundary<P extends object>(\n Component: React.ComponentType<P>,\n fallback?: React.ComponentType<ErrorBoundaryFallbackProps>,\n context?: string,\n onError?: (error: Error, info: React.ErrorInfo) => void,\n) {\n return function WithErrorBoundaryComponent(props: P) {\n return (\n <ErrorBoundary fallback={fallback} context={context} onError={onError}>\n <Component {...props} />\n </ErrorBoundary>\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAM,qCACJ;AACF,MAAM,gCAAgC;AACtC,MAAM,kCAAkC;AACxC,MAAM,iCAAiC;AACvC,MAAM,mCAAmC;AACzC,MAAM,mCAAmC;AACzC,MAAM,mCACJ;AACF,MAAM,+BAA+B;AACrC,MAAM,mCAAmC;AACzC,MAAM,6CAA6C;AACnD,MAAM,gCAAgC;AACtC,MAAM,uCAAuC;AAI7C,MAAM,qCACJ;AACF,MAAM,6CAA6C;AAKnD,MAAM,cAAc;AACpB,MAAM,wBAAwB;AAC9B,MAAM,kBAAkB;AACxB,MAAM,oBAAoB;AAC1B,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAC7B,MAAM,wBAAwB;AAC9B,MAAM,qBACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEF,IAAa,gBAAb,cAAmCA,QAAM,UAAkD;CACzF,YAAY,OAA2B;AACrC,QAAM,MAAM;AACZ,OAAK,QAAQ;GACX,UAAU;GACV,OAAO;GACR;;CAGH,OAAO,yBAAyB,OAAkC;AAChE,SAAO;GACL,UAAU;GACV;GACD;;CAGH,kBAAkB,OAAc,WAA4B;AAC1D,OAAK,MAAM,UAAU,OAAO,UAAU;;CAGxC,mBAAmB;AACjB,OAAK,SAAS;GACZ,UAAU;GACV,OAAO;GACR,CAAC;;CAGJ,SAAS;AACP,MAAI,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO;AAC3C,OAAI,KAAK,MAAM,UAAU;IACvB,MAAM,WAAW,KAAK,MAAM;AAC5B,WAAO,oBAAC;KAAS,OAAO,KAAK,MAAM;KAAO,YAAY,KAAK;MAAc;;AAI3E,OAAI,KAAK,MAAM,YAAY,OACzB,QACE,oBAAC;IACC,SAAS,KAAK,MAAM;IACpB,OAAO,KAAK,MAAM;IAClB,YAAY,KAAK;IACjB,WAAW,KAAK,MAAM;KACtB;AAIN,UACE,oBAAC;IACC,SAAS,KAAK,MAAM;IACpB,OAAO,KAAK,MAAM;IAClB,YAAY,KAAK;KACjB;;AAIN,SAAO,KAAK,MAAM;;;;;;;;AAkBtB,MAAa,oBAAoB,KAAK,SAAS,kBAAkB,EAC/D,OACA,YACA,SACA,YAAY,mBACa;CAEzB,MAAM,gBAAgB,kBAAkB;CAExC,MAAM,eAAe,MAAM,WAAW;CAGtC,MAAM,QAAQ,UAAU,GAAG,QAAQ,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,MAAM,EAAE,CAAC,UAAU;CAExF,MAAM,eAAe,kBAAkB;AACrC,MAAI,OAAO,WAAW,YACpB,QAAO,SAAS,QAAQ;IAEzB,EAAE,CAAC;AAEN,QACE,qBAAC;EACC,oBAAiB;EACjB,sBAAmB;EACnB,WAAW,GACT,gHACA,WAEA,gBACI,6CACA,mCACL;;GAED,oBAAC;IAAY,WAAU;IAA2B,eAAY;KAAS;GACvE,qBAAC;IAAI,WAAU;;KACb,oBAAC;MAAG,WAAU;gBAAyB;OAAW;KAClD,oBAAC;MAAE,WAAU;gBAAsC;OAAuB;KACzE,eACC,oBAAC;MAAE,WAAU;gBAAgD;OAAiB,GAC5E;;KACA;GACN,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAO,SAAS;KAAY,SAAQ;KAAU,MAAK;eACjD;MACM,EACT,oBAAC;KAAO,SAAS;KAAc,SAAQ;KAAQ,MAAK;eACjD;MACM;KACL;;GACF;EAER;AAUF,MAAM,uBAAuB,KAAK,SAAS,qBAAqB,EAC9D,OACA,YACA,WAC4B;CAE5B,MAAM,gBAAgB,kBAAkB;CAGxC,MAAM,iBAAiB,cACd,UAAU,GAAG,qBAAqB,GAAG,YAAY,uBACxD,CAAC,QAAQ,CACV;CAGD,MAAM,eAAe,cACb,GAAG,qBAAqB,GAAG,eAAe,IAAI,wBACpD,CAAC,eAAe,CACjB;CAGD,MAAM,eAAe,cAAc;AAGjC,SACE,qBAAC;GAAQ,WAAW;cAClB,oBAAC;IAAQ,WAAW;cAAmC;KAAgC,EACvF,qBAAC;IAAI,WAAW;eACd,oBAAC,oBAAM,MAAM,UAAe,EAC3B,MAAM,QACL,8CACG,QACD,oBAAC,oBAAM,MAAM,QAAa,IACzB,GACD;KACA;IACE;IAEX,CAAC,MAAM,SAAS,MAAM,MAAM,CAAC;CAGhC,MAAM,eAAe,kBAAkB;AACrC,MAAI,OAAO,WAAW,YACpB,QAAO,SAAS,QAAQ;IAEzB,EAAE,CAAC;AAEN,QACE,oBAAC;EAAI,WAAW;EAAoC,oBAAiB;YACnE,qBAAC;GACC,WAAW,GACT,+BAEA,gBACI,6CACA,mCACL;GACD,sBAAmB;;IAEnB,qBAAC;KAAI,WAAW;gBACd,oBAAC;MAAc,WAAW;MAA+B,eAAY;OAAS,EAC9E,oBAAC;MAAG,WAAW;gBAAiC;OAAiB;MAC7D;IAEN,qBAAC;KAAI,WAAW;gBACd,oBAAC;MAAE,WAAW;gBAAmC;OAAiB,EACjE;MACG;IAEN,qBAAC;KAAI,WAAW;gBACd,qBAAC;MAAO,SAAS;MAAY,SAAQ;MAAU,MAAK;iBAClD,oBAAC,aAAU,WAAW,uCAAwC,EAC7D;OACM,EACT,qBAAC;MAAO,SAAS;MAAc,SAAQ;MAAU,MAAK;iBACpD,oBAAC,QAAK,WAAW,uCAAwC,EACxD;OACM;MACL;;IACD;GACH;EAER;;;;;;;;;;;;;;;;AAiBF,SAAgB,kBACd,WACA,UACA,SACA,SACA;AACA,QAAO,SAAS,2BAA2B,OAAU;AACnD,SACE,oBAAC;GAAwB;GAAmB;GAAkB;aAC5D,oBAAC,aAAU,GAAI,QAAS;IACV"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
import { i as FilterOption, n as Filter, t as ActiveFilter } from "./types-B8z57DW2.mjs";
|
|
3
|
+
import { ComponentPropsWithoutRef, ComponentType } from "react";
|
|
4
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/filter/filter-list/filter-list.d.ts
|
|
7
|
+
interface FilterListProps {
|
|
8
|
+
filters: Filter[];
|
|
9
|
+
activeFilters?: ActiveFilter[];
|
|
10
|
+
onRemove: (key: string, value: FilterOption['value']) => void;
|
|
11
|
+
onRemoveAll: () => void;
|
|
12
|
+
onSelect?: (key: string, value: FilterOption['value']) => void;
|
|
13
|
+
className?: string;
|
|
14
|
+
LinkComponent?: ComponentType<ComponentPropsWithoutRef<'a'>> | 'a';
|
|
15
|
+
}
|
|
16
|
+
declare function FilterList({
|
|
17
|
+
filters,
|
|
18
|
+
activeFilters,
|
|
19
|
+
onRemove,
|
|
20
|
+
onRemoveAll,
|
|
21
|
+
onSelect,
|
|
22
|
+
className,
|
|
23
|
+
LinkComponent
|
|
24
|
+
}: FilterListProps): react_jsx_runtime0.JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { FilterListProps as n, FilterList as t };
|
|
27
|
+
//# sourceMappingURL=filter-list-BMT7Nrli.d.mts.map
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { t as cn } from "./utils-D2bGp2p_.mjs";
|
|
3
|
+
import { t as AnimatedSizeContainer } from "./animated-size-container-DSKNt1Cn.mjs";
|
|
4
|
+
import { t as Combobox } from "./combobox-uEKksQFR.mjs";
|
|
5
|
+
import { isValidElement, useState } from "react";
|
|
6
|
+
import { useHotkeys } from "@mantine/hooks";
|
|
7
|
+
import { X } from "lucide-react";
|
|
8
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { Logger } from "@repo/shared";
|
|
11
|
+
|
|
12
|
+
//#region src/components/filter/filter-list/filter-list.tsx
|
|
13
|
+
/**
|
|
14
|
+
* @fileoverview FilterList Component - Premium Harmony V2
|
|
15
|
+
*
|
|
16
|
+
* Displays active filters as interactive pills with remove functionality and
|
|
17
|
+
* inline editing support. Built with Premium Harmony V2 design standards.
|
|
18
|
+
*
|
|
19
|
+
* Features:
|
|
20
|
+
* - Premium Harmony V2 spring physics for smooth entrance/exit
|
|
21
|
+
* - Touch-optimized 44px minimum targets for filter pills
|
|
22
|
+
* - Reduced motion support for accessibility
|
|
23
|
+
* - Semantic color tokens for theme adaptation
|
|
24
|
+
* - Inline editing support for active filters
|
|
25
|
+
* - Hotkey support for quick removal (Escape)
|
|
26
|
+
* - Animated size container for smooth layout shifts
|
|
27
|
+
* - AnimatePresence for individual pill transitions
|
|
28
|
+
* - Data attributes for state tracking
|
|
29
|
+
*
|
|
30
|
+
* @module @od-oneapp/uni-ui/components/filter/filter-list
|
|
31
|
+
* @component FilterList
|
|
32
|
+
*
|
|
33
|
+
* @useCases
|
|
34
|
+
* - Displaying active search filters in data-heavy views
|
|
35
|
+
* - Providing quick-remove chips for faceted navigation
|
|
36
|
+
* - Showing selected criteria in reports or analytics
|
|
37
|
+
* - Mobile-friendly filter management interfaces
|
|
38
|
+
* - Real-time filtering with visual feedback
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* <FilterList
|
|
42
|
+
* filters={availableFilters}
|
|
43
|
+
* activeFilters={activeFilters}
|
|
44
|
+
* onRemove={handleRemove}
|
|
45
|
+
* onRemoveAll={handleClearAll}
|
|
46
|
+
* />
|
|
47
|
+
*/
|
|
48
|
+
const logger = new Logger("uni-ui:filter-list");
|
|
49
|
+
const isReactNode = (element) => isValidElement(element);
|
|
50
|
+
function OptionDisplay({ icon: Icon, label, permalink, displayClassName, LinkComponent = "a" }) {
|
|
51
|
+
const iconElement = (() => {
|
|
52
|
+
if (Icon == null) return null;
|
|
53
|
+
if (isValidElement(Icon)) return Icon;
|
|
54
|
+
if (typeof Icon === "function") return /* @__PURE__ */ jsx(Icon, { className: "size-4" });
|
|
55
|
+
return Icon;
|
|
56
|
+
})();
|
|
57
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
58
|
+
className: cn("flex items-center gap-2.5 px-3 py-2", displayClassName),
|
|
59
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
60
|
+
className: "text-muted-foreground shrink-0",
|
|
61
|
+
children: iconElement
|
|
62
|
+
}), permalink != null ? /* @__PURE__ */ jsx(LinkComponent, {
|
|
63
|
+
href: permalink,
|
|
64
|
+
target: "_blank",
|
|
65
|
+
className: "cursor-alias decoration-dotted underline-offset-2 hover:underline",
|
|
66
|
+
children: label
|
|
67
|
+
}) : label]
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Displays active filters as pills with remove functionality.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* <FilterList
|
|
75
|
+
* filters={filters}
|
|
76
|
+
* activeFilters={activeFilters}
|
|
77
|
+
* onRemove={handleRemove}
|
|
78
|
+
* onRemoveAll={handleRemoveAll}
|
|
79
|
+
* onSelect={handleSelect}
|
|
80
|
+
* />
|
|
81
|
+
*/
|
|
82
|
+
function FilterList({ filters, activeFilters, onRemove, onRemoveAll, onSelect, className, LinkComponent = "a" }) {
|
|
83
|
+
useHotkeys([["Escape", onRemoveAll]]);
|
|
84
|
+
return /* @__PURE__ */ jsx(AnimatedSizeContainer, {
|
|
85
|
+
height: true,
|
|
86
|
+
className: "w-full",
|
|
87
|
+
transition: {
|
|
88
|
+
type: "tween",
|
|
89
|
+
duration: .3
|
|
90
|
+
},
|
|
91
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
92
|
+
className: cn("flex w-full flex-wrap items-start gap-4 sm:flex-nowrap", className),
|
|
93
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
94
|
+
className: "flex grow flex-wrap gap-x-4 gap-y-2",
|
|
95
|
+
children: /* @__PURE__ */ jsx(AnimatePresence, { children: activeFilters?.map(({ key, value: filterValue }) => {
|
|
96
|
+
if (key === "loader") return /* @__PURE__ */ jsx(motion.div, {
|
|
97
|
+
initial: {
|
|
98
|
+
opacity: 0,
|
|
99
|
+
y: 4
|
|
100
|
+
},
|
|
101
|
+
animate: {
|
|
102
|
+
opacity: 1,
|
|
103
|
+
y: 0
|
|
104
|
+
},
|
|
105
|
+
className: "border-border bg-background h-9 w-48 animate-pulse rounded-md border"
|
|
106
|
+
}, `loader-${String(filterValue)}`);
|
|
107
|
+
const filter = filters.find((f) => f.key === key);
|
|
108
|
+
if (filter == null) {
|
|
109
|
+
logger.error("Filter.List received an activeFilter without a corresponding filter", { key });
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return (filter.multiple === true && Array.isArray(filterValue) ? filterValue : [filterValue]).map((value) => {
|
|
113
|
+
const option = filter.options?.find((o) => typeof o.value === "string" && typeof value === "string" ? o.value.toLowerCase() === value.toLowerCase() : o.value === value);
|
|
114
|
+
const OptionIcon = option?.icon ?? filter.getOptionIcon?.(value, {
|
|
115
|
+
key: filter.key,
|
|
116
|
+
option
|
|
117
|
+
}) ?? filter.icon;
|
|
118
|
+
const optionLabel = option?.label ?? filter.getOptionLabel?.(value, {
|
|
119
|
+
key: filter.key,
|
|
120
|
+
option
|
|
121
|
+
}) ?? String(value);
|
|
122
|
+
const optionPermalink = option?.permalink ?? filter.getOptionPermalink?.(value) ?? null;
|
|
123
|
+
const truncatedLabel = optionLabel.length > 30 ? `${optionLabel.slice(0, 30)}...` : optionLabel;
|
|
124
|
+
return /* @__PURE__ */ jsxs(motion.div, {
|
|
125
|
+
initial: {
|
|
126
|
+
opacity: 0,
|
|
127
|
+
y: 4
|
|
128
|
+
},
|
|
129
|
+
animate: {
|
|
130
|
+
opacity: 1,
|
|
131
|
+
y: 0
|
|
132
|
+
},
|
|
133
|
+
className: "divide-border border-border bg-background text-foreground flex items-center divide-x rounded-md border text-sm",
|
|
134
|
+
children: [
|
|
135
|
+
/* @__PURE__ */ jsxs("div", {
|
|
136
|
+
className: "flex items-center gap-2.5 px-3 py-2",
|
|
137
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
138
|
+
className: "text-muted-foreground shrink-0",
|
|
139
|
+
children: isReactNode(filter.icon) ? filter.icon : /* @__PURE__ */ jsx(filter.icon, { className: "size-4" })
|
|
140
|
+
}), filter.label]
|
|
141
|
+
}),
|
|
142
|
+
/* @__PURE__ */ jsx("div", {
|
|
143
|
+
className: "text-muted-foreground px-3 py-2",
|
|
144
|
+
children: "is"
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ jsx("div", {
|
|
147
|
+
className: "flex items-center",
|
|
148
|
+
children: (() => {
|
|
149
|
+
if (filter.options == null) return /* @__PURE__ */ jsx("div", {
|
|
150
|
+
className: "flex items-center gap-2.5 px-3 py-2",
|
|
151
|
+
children: /* @__PURE__ */ jsx("div", { className: "bg-muted h-5 w-12 animate-pulse rounded-md" })
|
|
152
|
+
});
|
|
153
|
+
if (onSelect != null && filter.hideInFilterDropdown !== true) return /* @__PURE__ */ jsx(FilterCombobox, {
|
|
154
|
+
filter,
|
|
155
|
+
value,
|
|
156
|
+
filterKey: key,
|
|
157
|
+
onRemove,
|
|
158
|
+
onSelect,
|
|
159
|
+
optionIcon: OptionIcon,
|
|
160
|
+
optionLabel,
|
|
161
|
+
optionPermalink,
|
|
162
|
+
truncatedLabel,
|
|
163
|
+
LinkComponent
|
|
164
|
+
});
|
|
165
|
+
return /* @__PURE__ */ jsx(OptionDisplay, {
|
|
166
|
+
icon: OptionIcon,
|
|
167
|
+
label: truncatedLabel,
|
|
168
|
+
LinkComponent,
|
|
169
|
+
permalink: optionPermalink
|
|
170
|
+
});
|
|
171
|
+
})()
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ jsx(motion.button, {
|
|
174
|
+
type: "button",
|
|
175
|
+
className: "text-muted-foreground ring-ring hover:bg-muted hover:text-foreground focus-visible:ring-ring focus-visible:ring-offset-background h-full rounded-r-md p-2 transition-transform ring-inset focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
|
|
176
|
+
onClick: () => onRemove(key, value),
|
|
177
|
+
whileTap: { scale: .98 },
|
|
178
|
+
transition: {
|
|
179
|
+
type: "spring",
|
|
180
|
+
stiffness: 500,
|
|
181
|
+
damping: 30
|
|
182
|
+
},
|
|
183
|
+
children: /* @__PURE__ */ jsx(X, { className: "size-3.5" })
|
|
184
|
+
})
|
|
185
|
+
]
|
|
186
|
+
}, `${key}-${String(value)}`);
|
|
187
|
+
});
|
|
188
|
+
}) })
|
|
189
|
+
}), activeFilters != null && activeFilters.length !== 0 && /* @__PURE__ */ jsxs(motion.button, {
|
|
190
|
+
type: "button",
|
|
191
|
+
className: "group text-muted-foreground ring-ring hover:border-border hover:bg-background hover:text-foreground focus-visible:ring-ring focus-visible:ring-offset-background mt-px flex items-center gap-2 rounded-lg border border-transparent px-3 py-2 text-sm whitespace-nowrap transition-colors ring-inset focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
|
|
192
|
+
onClick: onRemoveAll,
|
|
193
|
+
whileTap: { scale: .98 },
|
|
194
|
+
transition: {
|
|
195
|
+
type: "spring",
|
|
196
|
+
stiffness: 500,
|
|
197
|
+
damping: 30
|
|
198
|
+
},
|
|
199
|
+
children: ["Clear Filters", /* @__PURE__ */ jsx("kbd", {
|
|
200
|
+
className: "border-border text-foreground group-hover:bg-muted rounded-md border px-1.5 py-0.5 text-xs",
|
|
201
|
+
children: "ESC"
|
|
202
|
+
})]
|
|
203
|
+
})]
|
|
204
|
+
})
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
function FilterCombobox({ filter, value, filterKey, onRemove, onSelect, optionIcon, optionLabel, optionPermalink, truncatedLabel, LinkComponent = "a" }) {
|
|
208
|
+
const [search, setSearch] = useState("");
|
|
209
|
+
const options = filter.options?.map((opt) => {
|
|
210
|
+
const optionIcon = opt.icon ?? filter.getOptionIcon?.(opt.value, {
|
|
211
|
+
key: filter.key,
|
|
212
|
+
option: opt
|
|
213
|
+
}) ?? filter.icon;
|
|
214
|
+
return {
|
|
215
|
+
label: opt.label ?? filter.getOptionLabel?.(opt.value, {
|
|
216
|
+
key: filter.key,
|
|
217
|
+
option: opt
|
|
218
|
+
}) ?? String(opt.value),
|
|
219
|
+
value: String(opt.value),
|
|
220
|
+
icon: optionIcon
|
|
221
|
+
};
|
|
222
|
+
}) ?? [];
|
|
223
|
+
const selectedOption = options.find((opt) => typeof opt.value === "string" && typeof value === "string" ? opt.value.toLowerCase() === String(value).toLowerCase() : opt.value === String(value));
|
|
224
|
+
const hasEmptyOptions = filter.options?.length === 0;
|
|
225
|
+
const emptyState = (() => {
|
|
226
|
+
if (hasEmptyOptions) {
|
|
227
|
+
if (search === "") return /* @__PURE__ */ jsx("div", {
|
|
228
|
+
className: "text-muted-foreground p-2 text-center text-sm",
|
|
229
|
+
children: "Start typing to search..."
|
|
230
|
+
});
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
return /* @__PURE__ */ jsx("div", {
|
|
234
|
+
className: "text-muted-foreground p-2 text-center text-sm",
|
|
235
|
+
children: "No matching options"
|
|
236
|
+
});
|
|
237
|
+
})();
|
|
238
|
+
const displayLabel = optionLabel.length > 30 ? `${optionLabel.slice(0, 30)}...` : optionLabel;
|
|
239
|
+
return /* @__PURE__ */ jsx(Combobox, {
|
|
240
|
+
selected: selectedOption ?? null,
|
|
241
|
+
setSelected: (newOption) => {
|
|
242
|
+
if (newOption != null && newOption.value !== String(value)) {
|
|
243
|
+
onRemove(filterKey, value);
|
|
244
|
+
onSelect(filterKey, newOption.value);
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
options,
|
|
248
|
+
onSearchChange: setSearch,
|
|
249
|
+
onCreate: hasEmptyOptions ? async (searchValue) => {
|
|
250
|
+
onRemove(filterKey, value);
|
|
251
|
+
onSelect(filterKey, searchValue);
|
|
252
|
+
return true;
|
|
253
|
+
} : void 0,
|
|
254
|
+
createLabel: hasEmptyOptions ? (searchValue) => searchValue : void 0,
|
|
255
|
+
createIcon: typeof filter.icon === "function" && !isValidElement(filter.icon) ? filter.icon : void 0,
|
|
256
|
+
optionRight: (option) => {
|
|
257
|
+
if (option.value === String(value)) return null;
|
|
258
|
+
const filterOption = filter.options?.find((opt) => typeof String(opt.value) === "string" && typeof option.value === "string" ? String(opt.value).toLowerCase() === option.value.toLowerCase() : String(opt.value) === option.value);
|
|
259
|
+
return filterOption?.right != null ? /* @__PURE__ */ jsx("span", {
|
|
260
|
+
className: "text-muted-foreground ml-2",
|
|
261
|
+
children: filterOption.right
|
|
262
|
+
}) : null;
|
|
263
|
+
},
|
|
264
|
+
placeholder: displayLabel,
|
|
265
|
+
caret: false,
|
|
266
|
+
emptyState,
|
|
267
|
+
trigger: /* @__PURE__ */ jsx(OptionDisplay, {
|
|
268
|
+
icon: optionIcon,
|
|
269
|
+
label: truncatedLabel,
|
|
270
|
+
permalink: optionPermalink,
|
|
271
|
+
displayClassName: "cursor-pointer hover:bg-muted",
|
|
272
|
+
LinkComponent
|
|
273
|
+
})
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
//#endregion
|
|
278
|
+
export { FilterList as t };
|
|
279
|
+
//# sourceMappingURL=filter-list-B_9aV5Lp.mjs.map
|