@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,135 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { t as cn } from "./utils-D2bGp2p_.mjs";
|
|
3
|
+
import { a as SPRING_TACTILE } from "./motion-zelaDelJ.mjs";
|
|
4
|
+
import { t as Button } from "./button-DVOrrZLw.mjs";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import { memo, useCallback } from "react";
|
|
7
|
+
import { useMediaQuery, useReducedMotion } from "@mantine/hooks";
|
|
8
|
+
import { motion } from "motion/react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
|
|
11
|
+
//#region src/components/elements/molecules/pagination-controls/pagination-controls.tsx
|
|
12
|
+
/**
|
|
13
|
+
* @fileoverview PaginationControls Component - Premium Harmony V2
|
|
14
|
+
*
|
|
15
|
+
* A compact pagination component providing "Previous" and "Next" controls.
|
|
16
|
+
* Built with Premium Harmony V2 motion standards for tactile feedback and accessibility.
|
|
17
|
+
* Supports automatic touch optimization and respects reduced motion preferences.
|
|
18
|
+
*
|
|
19
|
+
* Features:
|
|
20
|
+
* - ES2023 syntax with modern pattern usage
|
|
21
|
+
* - Tailwind v4 CSS-first theming with CSS variables
|
|
22
|
+
* - Premium Harmony V2 spring physics (SPRING_TACTILE)
|
|
23
|
+
* - Touch detection with automatic sizing for mobile devices
|
|
24
|
+
* - Reduced motion support for accessibility
|
|
25
|
+
* - Complete pseudo-state coverage (:hover, :active, :focus-visible)
|
|
26
|
+
* - Standardized focus ring using ring-primary token
|
|
27
|
+
* - WCAG 2.5.5 compliant 44px minimum touch targets on mobile
|
|
28
|
+
* - Data attributes for state tracking (data-page, data-active)
|
|
29
|
+
* - Semantic button elements with accessibility labels
|
|
30
|
+
* - [Pillar 4: Micro-moments] Refined button hover/tap micro-interactions
|
|
31
|
+
*
|
|
32
|
+
* @module @od-oneapp/uni-ui/components/elements/pagination-controls
|
|
33
|
+
* @component PaginationControls
|
|
34
|
+
*
|
|
35
|
+
* @useCases
|
|
36
|
+
* - Multi-page forms: Navigate between sequential steps
|
|
37
|
+
* - Simple list navigation: Move through paginated data without page numbers
|
|
38
|
+
* - Gallery browsing: Move to previous or next image/media item
|
|
39
|
+
* - Article series: Navigate between parts of a long-form article
|
|
40
|
+
* - Wizard workflows: Sequential navigation through task-based flows
|
|
41
|
+
* - Mobile-first pagination: Space-efficient controls for small screens
|
|
42
|
+
*
|
|
43
|
+
* @example <PaginationControls currentPage={1} totalPages={10} onPageChange={setPage} />
|
|
44
|
+
*/
|
|
45
|
+
const PAGINATION_PREVIOUS_LABEL = "Previous";
|
|
46
|
+
const PAGINATION_NEXT_LABEL = "Next";
|
|
47
|
+
const PaginationControls = memo(function PaginationControls({ disabled = false, className, ...props }) {
|
|
48
|
+
const isTouchDevice = useMediaQuery("(pointer: coarse)") ?? false;
|
|
49
|
+
const prefersReducedMotion = useReducedMotion();
|
|
50
|
+
const { currentPage, totalPages, onPageChange } = React$1.useMemo(() => {
|
|
51
|
+
if ("pagination" in props) {
|
|
52
|
+
const totalPagesCalculated = Math.max(1, Math.ceil(props.totalCount / props.pagination.pageSize));
|
|
53
|
+
return {
|
|
54
|
+
currentPage: props.pagination.pageIndex + 1,
|
|
55
|
+
totalPages: totalPagesCalculated,
|
|
56
|
+
onPageChange: (page) => {
|
|
57
|
+
props.setPagination((prev) => ({
|
|
58
|
+
...prev,
|
|
59
|
+
pageIndex: page - 1
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
currentPage: props.currentPage,
|
|
66
|
+
totalPages: props.totalPages,
|
|
67
|
+
onPageChange: props.onPageChange
|
|
68
|
+
};
|
|
69
|
+
}, [props]);
|
|
70
|
+
const isFirstPage = currentPage <= 1;
|
|
71
|
+
const isLastPage = currentPage >= totalPages;
|
|
72
|
+
const handlePrevious = useCallback(() => {
|
|
73
|
+
if (!isFirstPage && !disabled) onPageChange(currentPage - 1);
|
|
74
|
+
}, [
|
|
75
|
+
currentPage,
|
|
76
|
+
isFirstPage,
|
|
77
|
+
onPageChange,
|
|
78
|
+
disabled
|
|
79
|
+
]);
|
|
80
|
+
const handleNext = useCallback(() => {
|
|
81
|
+
if (!isLastPage && !disabled) onPageChange(currentPage + 1);
|
|
82
|
+
}, [
|
|
83
|
+
currentPage,
|
|
84
|
+
isLastPage,
|
|
85
|
+
onPageChange,
|
|
86
|
+
disabled
|
|
87
|
+
]);
|
|
88
|
+
const buttonSize = isTouchDevice ? "lg" : "default";
|
|
89
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
90
|
+
"data-slot": "pagination-controls",
|
|
91
|
+
className: cn("flex items-center justify-between gap-4 py-4", className),
|
|
92
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
93
|
+
className: "flex flex-1 items-center justify-start",
|
|
94
|
+
children: /* @__PURE__ */ jsx(motion.div, {
|
|
95
|
+
whileHover: !isFirstPage && !prefersReducedMotion ? { scale: 1.02 } : void 0,
|
|
96
|
+
whileTap: !isFirstPage && !prefersReducedMotion ? { scale: .98 } : void 0,
|
|
97
|
+
transition: prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE,
|
|
98
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
99
|
+
type: "button",
|
|
100
|
+
variant: "outline",
|
|
101
|
+
size: buttonSize,
|
|
102
|
+
onClick: handlePrevious,
|
|
103
|
+
disabled: isFirstPage || disabled,
|
|
104
|
+
"data-page": "previous",
|
|
105
|
+
"data-active": !isFirstPage,
|
|
106
|
+
className: "focus-visible:ring-primary transition-all duration-200 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
|
|
107
|
+
children: PAGINATION_PREVIOUS_LABEL
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
111
|
+
className: "flex flex-1 items-center justify-end",
|
|
112
|
+
children: /* @__PURE__ */ jsx(motion.div, {
|
|
113
|
+
whileHover: !isLastPage && !prefersReducedMotion ? { scale: 1.02 } : void 0,
|
|
114
|
+
whileTap: !isLastPage && !prefersReducedMotion ? { scale: .98 } : void 0,
|
|
115
|
+
transition: prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE,
|
|
116
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
117
|
+
type: "button",
|
|
118
|
+
variant: "outline",
|
|
119
|
+
size: buttonSize,
|
|
120
|
+
onClick: handleNext,
|
|
121
|
+
disabled: isLastPage || disabled,
|
|
122
|
+
"data-page": "next",
|
|
123
|
+
"data-active": !isLastPage,
|
|
124
|
+
className: "focus-visible:ring-primary transition-all duration-200 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",
|
|
125
|
+
children: PAGINATION_NEXT_LABEL
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
})]
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
PaginationControls.displayName = "PaginationControls";
|
|
132
|
+
|
|
133
|
+
//#endregion
|
|
134
|
+
export { PaginationControls as t };
|
|
135
|
+
//# sourceMappingURL=pagination-controls-CE3-eCxI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination-controls-CE3-eCxI.mjs","names":["React"],"sources":["../src/components/elements/molecules/pagination-controls/pagination-controls.tsx"],"sourcesContent":["/**\n * @fileoverview PaginationControls Component - Premium Harmony V2\n *\n * A compact pagination component providing \"Previous\" and \"Next\" controls.\n * Built with Premium Harmony V2 motion standards for tactile feedback and accessibility.\n * Supports automatic touch optimization and respects reduced motion preferences.\n *\n * Features:\n * - ES2023 syntax with modern pattern usage\n * - Tailwind v4 CSS-first theming with CSS variables\n * - Premium Harmony V2 spring physics (SPRING_TACTILE)\n * - Touch detection with automatic sizing for mobile devices\n * - Reduced motion support for accessibility\n * - Complete pseudo-state coverage (:hover, :active, :focus-visible)\n * - Standardized focus ring using ring-primary token\n * - WCAG 2.5.5 compliant 44px minimum touch targets on mobile\n * - Data attributes for state tracking (data-page, data-active)\n * - Semantic button elements with accessibility labels\n * - [Pillar 4: Micro-moments] Refined button hover/tap micro-interactions\n *\n * @module @od-oneapp/uni-ui/components/elements/pagination-controls\n * @component PaginationControls\n *\n * @useCases\n * - Multi-page forms: Navigate between sequential steps\n * - Simple list navigation: Move through paginated data without page numbers\n * - Gallery browsing: Move to previous or next image/media item\n * - Article series: Navigate between parts of a long-form article\n * - Wizard workflows: Sequential navigation through task-based flows\n * - Mobile-first pagination: Space-efficient controls for small screens\n *\n * @example <PaginationControls currentPage={1} totalPages={10} onPageChange={setPage} />\n */\n\n'use client';\n\nimport * as React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { useMediaQuery, useReducedMotion } from '@mantine/hooks';\nimport { motion } from 'motion/react';\n\nimport { SPRING_TACTILE } from '../../../../constants/motion';\nimport { cn } from '../../../../lib/utils';\nimport { Button } from '../../atoms/button';\n\n// Static constants - moved outside component to prevent recreation\nconst PAGINATION_PREVIOUS_LABEL = 'Previous';\nconst PAGINATION_NEXT_LABEL = 'Next';\n\nexport interface PaginationControlsProps {\n /** The current active page (1-based) */\n currentPage: number;\n /** The total number of pages */\n totalPages: number;\n /** Callback function called when the page changes */\n onPageChange: (page: number) => void;\n /** Additional class names for the container */\n className?: string;\n /** Whether the controls are disabled */\n disabled?: boolean;\n}\n\ntype LegacyPaginationState = { pageIndex: number; pageSize: number };\n\ntype LegacyPaginationProps = {\n pagination: LegacyPaginationState;\n setPagination: React.Dispatch<React.SetStateAction<LegacyPaginationState>>;\n totalCount: number;\n unit?: (isPlural: boolean) => string;\n className?: string;\n disabled?: boolean;\n};\n\nexport const PaginationControls = memo(function PaginationControls({\n disabled = false,\n className,\n ...props\n}: PaginationControlsProps | LegacyPaginationProps) {\n // Premium Harmony V2: Detect touch devices for adaptive sizing\n const isTouchDevice = useMediaQuery('(pointer: coarse)') ?? false;\n // Premium Harmony V2: Respect user motion preferences\n const prefersReducedMotion = useReducedMotion();\n\n const { currentPage, totalPages, onPageChange } = React.useMemo(() => {\n if ('pagination' in props) {\n const totalPagesCalculated = Math.max(\n 1,\n Math.ceil(props.totalCount / props.pagination.pageSize),\n );\n return {\n currentPage: props.pagination.pageIndex + 1,\n totalPages: totalPagesCalculated,\n onPageChange: (page: number) => {\n props.setPagination(prev => ({ ...prev, pageIndex: page - 1 }));\n },\n };\n }\n return {\n currentPage: props.currentPage,\n totalPages: props.totalPages,\n onPageChange: props.onPageChange,\n };\n }, [props]);\n\n const isFirstPage = currentPage <= 1;\n const isLastPage = currentPage >= totalPages;\n\n const handlePrevious = useCallback(() => {\n if (!isFirstPage && !disabled) {\n onPageChange(currentPage - 1);\n }\n }, [currentPage, isFirstPage, onPageChange, disabled]);\n\n const handleNext = useCallback(() => {\n if (!isLastPage && !disabled) {\n onPageChange(currentPage + 1);\n }\n }, [currentPage, isLastPage, onPageChange, disabled]);\n\n // Premium Harmony V2: Adaptive button size for touch devices\n const buttonSize = isTouchDevice ? 'lg' : 'default';\n\n return (\n <div\n data-slot=\"pagination-controls\"\n className={cn('flex items-center justify-between gap-4 py-4', className)}\n >\n <div className=\"flex flex-1 items-center justify-start\">\n <motion.div\n whileHover={!isFirstPage && !prefersReducedMotion ? { scale: 1.02 } : undefined}\n whileTap={!isFirstPage && !prefersReducedMotion ? { scale: 0.98 } : undefined}\n transition={prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size={buttonSize}\n onClick={handlePrevious}\n disabled={isFirstPage || disabled}\n data-page=\"previous\"\n data-active={!isFirstPage}\n className=\"focus-visible:ring-primary transition-all duration-200 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none\"\n >\n {PAGINATION_PREVIOUS_LABEL}\n </Button>\n </motion.div>\n </div>\n\n <div className=\"flex flex-1 items-center justify-end\">\n <motion.div\n whileHover={!isLastPage && !prefersReducedMotion ? { scale: 1.02 } : undefined}\n whileTap={!isLastPage && !prefersReducedMotion ? { scale: 0.98 } : undefined}\n transition={prefersReducedMotion ? { duration: 0 } : SPRING_TACTILE}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size={buttonSize}\n onClick={handleNext}\n disabled={isLastPage || disabled}\n data-page=\"next\"\n data-active={!isLastPage}\n className=\"focus-visible:ring-primary transition-all duration-200 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none\"\n >\n {PAGINATION_NEXT_LABEL}\n </Button>\n </motion.div>\n </div>\n </div>\n );\n});\n\nPaginationControls.displayName = 'PaginationControls';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,MAAM,4BAA4B;AAClC,MAAM,wBAAwB;AA0B9B,MAAa,qBAAqB,KAAK,SAAS,mBAAmB,EACjE,WAAW,OACX,WACA,GAAG,SAC+C;CAElD,MAAM,gBAAgB,cAAc,oBAAoB,IAAI;CAE5D,MAAM,uBAAuB,kBAAkB;CAE/C,MAAM,EAAE,aAAa,YAAY,iBAAiBA,QAAM,cAAc;AACpE,MAAI,gBAAgB,OAAO;GACzB,MAAM,uBAAuB,KAAK,IAChC,GACA,KAAK,KAAK,MAAM,aAAa,MAAM,WAAW,SAAS,CACxD;AACD,UAAO;IACL,aAAa,MAAM,WAAW,YAAY;IAC1C,YAAY;IACZ,eAAe,SAAiB;AAC9B,WAAM,eAAc,UAAS;MAAE,GAAG;MAAM,WAAW,OAAO;MAAG,EAAE;;IAElE;;AAEH,SAAO;GACL,aAAa,MAAM;GACnB,YAAY,MAAM;GAClB,cAAc,MAAM;GACrB;IACA,CAAC,MAAM,CAAC;CAEX,MAAM,cAAc,eAAe;CACnC,MAAM,aAAa,eAAe;CAElC,MAAM,iBAAiB,kBAAkB;AACvC,MAAI,CAAC,eAAe,CAAC,SACnB,cAAa,cAAc,EAAE;IAE9B;EAAC;EAAa;EAAa;EAAc;EAAS,CAAC;CAEtD,MAAM,aAAa,kBAAkB;AACnC,MAAI,CAAC,cAAc,CAAC,SAClB,cAAa,cAAc,EAAE;IAE9B;EAAC;EAAa;EAAY;EAAc;EAAS,CAAC;CAGrD,MAAM,aAAa,gBAAgB,OAAO;AAE1C,QACE,qBAAC;EACC,aAAU;EACV,WAAW,GAAG,gDAAgD,UAAU;aAExE,oBAAC;GAAI,WAAU;aACb,oBAAC,OAAO;IACN,YAAY,CAAC,eAAe,CAAC,uBAAuB,EAAE,OAAO,MAAM,GAAG;IACtE,UAAU,CAAC,eAAe,CAAC,uBAAuB,EAAE,OAAO,KAAM,GAAG;IACpE,YAAY,uBAAuB,EAAE,UAAU,GAAG,GAAG;cAErD,oBAAC;KACC,MAAK;KACL,SAAQ;KACR,MAAM;KACN,SAAS;KACT,UAAU,eAAe;KACzB,aAAU;KACV,eAAa,CAAC;KACd,WAAU;eAET;MACM;KACE;IACT,EAEN,oBAAC;GAAI,WAAU;aACb,oBAAC,OAAO;IACN,YAAY,CAAC,cAAc,CAAC,uBAAuB,EAAE,OAAO,MAAM,GAAG;IACrE,UAAU,CAAC,cAAc,CAAC,uBAAuB,EAAE,OAAO,KAAM,GAAG;IACnE,YAAY,uBAAuB,EAAE,UAAU,GAAG,GAAG;cAErD,oBAAC;KACC,MAAK;KACL,SAAQ;KACR,MAAM;KACN,SAAS;KACT,UAAU,cAAc;KACxB,aAAU;KACV,eAAa,CAAC;KACd,WAAU;eAET;MACM;KACE;IACT;GACF;EAER;AAEF,mBAAmB,cAAc"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { t as cn } from "./utils-D2bGp2p_.mjs";
|
|
3
|
+
import { useResponsive } from "./hooks/use-responsive.mjs";
|
|
4
|
+
import { i as SPRING_GENTLE } from "./motion-zelaDelJ.mjs";
|
|
5
|
+
import { n as ErrorBoundary } from "./error-boundary-Ggc5btkU.mjs";
|
|
6
|
+
import { isValidElement, memo, useCallback, useMemo } from "react";
|
|
7
|
+
import { useMediaQuery, useReducedMotion } from "@mantine/hooks";
|
|
8
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { FloatingFocusManager, FloatingPortal, autoUpdate, flip, offset, shift, useClick, useDismiss, useFloating, useInteractions, useRole } from "@floating-ui/react";
|
|
11
|
+
import { Drawer } from "vaul";
|
|
12
|
+
|
|
13
|
+
//#region src/components/elements/organisms/popover/popover.tsx
|
|
14
|
+
/**
|
|
15
|
+
* @fileoverview Popover Component - Premium Harmony V2
|
|
16
|
+
*
|
|
17
|
+
* Responsive popover that shows as a drawer on mobile and a floating popover on desktop.
|
|
18
|
+
* Built with Floating UI for intelligent positioning and Vaul Drawer for mobile gestures.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - Premium Harmony V2 spring physics animations (SPRING_GENTLE)
|
|
22
|
+
* - Motion/React for smooth, performant animations
|
|
23
|
+
* - Reduced motion support with useReducedMotion
|
|
24
|
+
* - Touch device detection with useMediaQuery
|
|
25
|
+
* - ES2023 syntax with modern patterns
|
|
26
|
+
* - Tailwind v4 CSS-first theming with CSS variables
|
|
27
|
+
* - Super light/dark mode with seamless switching
|
|
28
|
+
* - Responsive: Drawer on mobile, Floating UI popover on desktop
|
|
29
|
+
* - Floating UI for intelligent positioning
|
|
30
|
+
* - Auto-flip and shift for viewport collision
|
|
31
|
+
* - Vaul Drawer for mobile swipe gestures
|
|
32
|
+
* - Toast dismissal prevention (Sonner integration)
|
|
33
|
+
* - Configurable alignment and side offset
|
|
34
|
+
* - ErrorBoundary wrapper for resilience
|
|
35
|
+
* - Data attributes for state management (data-state)
|
|
36
|
+
* - Semantic color tokens (no hardcoded colors)
|
|
37
|
+
* - Focus-visible ring styles for interactive elements
|
|
38
|
+
* - AnimatePresence for conditional rendering
|
|
39
|
+
*
|
|
40
|
+
* @module @od-oneapp/uni-ui/components/popover
|
|
41
|
+
* @component Popover
|
|
42
|
+
*
|
|
43
|
+
* @useCases
|
|
44
|
+
* - Display contextual menus, tooltips, or dropdown content near trigger elements
|
|
45
|
+
* - Show additional information or actions without navigating away from current view
|
|
46
|
+
* - Provide quick access to settings, filters, or form inputs in a floating panel
|
|
47
|
+
* - Adapt presentation based on device: drawer on mobile, floating popover on desktop
|
|
48
|
+
* - Display user profile cards, notification previews, or quick-access shortcuts
|
|
49
|
+
* - Support intelligent positioning with auto-flip and collision detection
|
|
50
|
+
* - Integrate with toast systems without dismissal conflicts (Sonner integration)
|
|
51
|
+
* - Enable mobile-friendly interactions with swipe-to-dismiss drawer gestures
|
|
52
|
+
*
|
|
53
|
+
* @subcomponents
|
|
54
|
+
* - Drawer.Root - Root container for mobile drawer mode (from vaul)
|
|
55
|
+
* - Drawer.Trigger - Trigger element for mobile drawer
|
|
56
|
+
* - Drawer.Portal - Portal for drawer rendering
|
|
57
|
+
* - Drawer.Overlay - Backdrop overlay for drawer
|
|
58
|
+
* - Drawer.Content - Content container for drawer
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Basic usage with controlled state
|
|
62
|
+
* <Popover openPopover={isOpen} setOpenPopover={setIsOpen} content={<MenuItems />}>
|
|
63
|
+
* <Button>Open Menu</Button>
|
|
64
|
+
* </Popover>
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // With positioning options
|
|
68
|
+
* <Popover openPopover={open} setOpenPopover={setOpen} content={<Settings />} side="top" align="end" sideOffset={12}>
|
|
69
|
+
* <IconButton icon="settings" />
|
|
70
|
+
* </Popover>
|
|
71
|
+
*/
|
|
72
|
+
const POPOVER_DRAWER_TRIGGER_CLASSNAME = "focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none sm:hidden";
|
|
73
|
+
const POPOVER_DRAWER_OVERLAY_CLASSNAME = "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm";
|
|
74
|
+
const POPOVER_DRAWER_CONTENT_CLASSNAME = "border-border bg-background fixed right-0 bottom-0 left-0 z-50 mt-24 rounded-t-xl border-t";
|
|
75
|
+
const POPOVER_DRAWER_ISLAND_CONTAINER_CLASSNAME = "sticky top-0 z-20 flex w-full items-center justify-center rounded-t-xl bg-inherit";
|
|
76
|
+
const POPOVER_DRAWER_ISLAND_BAR_CLASSNAME = "bg-border my-3 h-1 w-12 rounded-full";
|
|
77
|
+
const POPOVER_DRAWER_CONTENT_INNER_CLASSNAME = "bg-background flex min-h-[150px] w-full items-center justify-center overflow-hidden pb-8 align-middle shadow-xl";
|
|
78
|
+
const POPOVER_DESKTOP_TRIGGER_CLASSNAME = "focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none sm:inline-flex";
|
|
79
|
+
const POPOVER_DESKTOP_CONTENT_BASE_CLASSNAME = "border-border bg-popover z-50 items-center rounded-lg border shadow-lg sm:block";
|
|
80
|
+
const SONNER_TOAST_SELECTOR = "[data-sonner-toast]";
|
|
81
|
+
const DEFAULT_SIDE_OFFSET = 8;
|
|
82
|
+
/**
|
|
83
|
+
* Render a responsive popover that uses a bottom drawer on mobile and a floating popover on desktop.
|
|
84
|
+
*/
|
|
85
|
+
const Popover = memo(function Popover({ children, content, align = "center", side = "bottom", openPopover, setOpenPopover, mobileOnly, popoverContentClassName, onOpenAutoFocus, collisionBoundary, sticky: _sticky, onEscapeKeyDown, onWheel, sideOffset = DEFAULT_SIDE_OFFSET }) {
|
|
86
|
+
const { isMobile } = useResponsive();
|
|
87
|
+
useMediaQuery("(pointer: coarse)");
|
|
88
|
+
const shouldReduceMotion = useReducedMotion() ?? false;
|
|
89
|
+
const shouldShowDrawer = useMemo(() => mobileOnly ?? isMobile, [mobileOnly, isMobile]);
|
|
90
|
+
const handlePointerDownOutside = useCallback((event) => {
|
|
91
|
+
if (event.detail.originalEvent.target instanceof Element && event.detail.originalEvent.target.closest(SONNER_TOAST_SELECTOR)) event.detail.originalEvent.preventDefault();
|
|
92
|
+
}, []);
|
|
93
|
+
const { refs, floatingStyles, context } = useFloating({
|
|
94
|
+
open: openPopover,
|
|
95
|
+
onOpenChange: setOpenPopover,
|
|
96
|
+
placement: useMemo(() => {
|
|
97
|
+
if (align === "center") return side;
|
|
98
|
+
return `${side}-${align}`;
|
|
99
|
+
}, [side, align]),
|
|
100
|
+
middleware: [
|
|
101
|
+
offset(sideOffset),
|
|
102
|
+
flip({
|
|
103
|
+
fallbackAxisSideDirection: "end",
|
|
104
|
+
boundary: collisionBoundary
|
|
105
|
+
}),
|
|
106
|
+
shift({
|
|
107
|
+
padding: 8,
|
|
108
|
+
boundary: collisionBoundary
|
|
109
|
+
})
|
|
110
|
+
],
|
|
111
|
+
whileElementsMounted: autoUpdate
|
|
112
|
+
});
|
|
113
|
+
const { getReferenceProps, getFloatingProps } = useInteractions([
|
|
114
|
+
useClick(context),
|
|
115
|
+
useDismiss(context, {
|
|
116
|
+
outsidePress: (event) => {
|
|
117
|
+
if (event.target instanceof Element && event.target.closest(SONNER_TOAST_SELECTOR)) return false;
|
|
118
|
+
return true;
|
|
119
|
+
},
|
|
120
|
+
escapeKey: true
|
|
121
|
+
}),
|
|
122
|
+
useRole(context)
|
|
123
|
+
]);
|
|
124
|
+
const desktopContentClassName = useMemo(() => cn(POPOVER_DESKTOP_CONTENT_BASE_CLASSNAME, popoverContentClassName), [popoverContentClassName]);
|
|
125
|
+
if (shouldShowDrawer) return /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsxs(Drawer.Root, {
|
|
126
|
+
open: openPopover,
|
|
127
|
+
onOpenChange: setOpenPopover,
|
|
128
|
+
children: [/* @__PURE__ */ jsx(Drawer.Trigger, {
|
|
129
|
+
className: POPOVER_DRAWER_TRIGGER_CLASSNAME,
|
|
130
|
+
asChild: true,
|
|
131
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
132
|
+
className: POPOVER_DRAWER_TRIGGER_CLASSNAME,
|
|
133
|
+
children
|
|
134
|
+
})
|
|
135
|
+
}), /* @__PURE__ */ jsxs(Drawer.Portal, { children: [/* @__PURE__ */ jsx(Drawer.Overlay, { className: POPOVER_DRAWER_OVERLAY_CLASSNAME }), /* @__PURE__ */ jsxs(Drawer.Content, {
|
|
136
|
+
className: POPOVER_DRAWER_CONTENT_CLASSNAME,
|
|
137
|
+
onEscapeKeyDown,
|
|
138
|
+
onPointerDownOutside: handlePointerDownOutside,
|
|
139
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
140
|
+
className: POPOVER_DRAWER_ISLAND_CONTAINER_CLASSNAME,
|
|
141
|
+
children: /* @__PURE__ */ jsx("div", { className: POPOVER_DRAWER_ISLAND_BAR_CLASSNAME })
|
|
142
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
143
|
+
className: POPOVER_DRAWER_CONTENT_INNER_CLASSNAME,
|
|
144
|
+
children: content
|
|
145
|
+
})]
|
|
146
|
+
})] })]
|
|
147
|
+
}) });
|
|
148
|
+
return /* @__PURE__ */ jsxs(ErrorBoundary, { children: [/* @__PURE__ */ jsx("div", {
|
|
149
|
+
ref: refs.setReference,
|
|
150
|
+
className: cn(POPOVER_DESKTOP_TRIGGER_CLASSNAME, isValidElement(children) && children.props.className),
|
|
151
|
+
...getReferenceProps(),
|
|
152
|
+
children
|
|
153
|
+
}), /* @__PURE__ */ jsx(AnimatePresence, { children: openPopover ? /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(FloatingFocusManager, {
|
|
154
|
+
context,
|
|
155
|
+
modal: false,
|
|
156
|
+
initialFocus: onOpenAutoFocus ? -1 : 0,
|
|
157
|
+
children: /* @__PURE__ */ jsx(motion.div, {
|
|
158
|
+
ref: refs.setFloating,
|
|
159
|
+
"data-slot": "popover-content",
|
|
160
|
+
"data-side": side,
|
|
161
|
+
"data-align": align,
|
|
162
|
+
"data-state": openPopover ? "open" : "closed",
|
|
163
|
+
className: desktopContentClassName,
|
|
164
|
+
initial: shouldReduceMotion ? {
|
|
165
|
+
opacity: 1,
|
|
166
|
+
scale: 1,
|
|
167
|
+
y: 0
|
|
168
|
+
} : {
|
|
169
|
+
opacity: 0,
|
|
170
|
+
scale: .95,
|
|
171
|
+
y: -4
|
|
172
|
+
},
|
|
173
|
+
animate: {
|
|
174
|
+
opacity: 1,
|
|
175
|
+
scale: 1,
|
|
176
|
+
y: 0
|
|
177
|
+
},
|
|
178
|
+
exit: shouldReduceMotion ? {
|
|
179
|
+
opacity: 1,
|
|
180
|
+
scale: 1,
|
|
181
|
+
y: 0
|
|
182
|
+
} : {
|
|
183
|
+
opacity: 0,
|
|
184
|
+
scale: .95,
|
|
185
|
+
y: -4
|
|
186
|
+
},
|
|
187
|
+
transition: shouldReduceMotion ? { duration: 0 } : SPRING_GENTLE,
|
|
188
|
+
style: { ...floatingStyles },
|
|
189
|
+
onWheel,
|
|
190
|
+
...getFloatingProps(),
|
|
191
|
+
children: content
|
|
192
|
+
})
|
|
193
|
+
}) }) : null })] });
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
//#endregion
|
|
197
|
+
export { Popover as t };
|
|
198
|
+
//# sourceMappingURL=popover-DmWxl2lW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover-DmWxl2lW.mjs","names":[],"sources":["../src/components/elements/organisms/popover/popover.tsx"],"sourcesContent":["'use client';\n\n/**\n * @fileoverview Popover Component - Premium Harmony V2\n *\n * Responsive popover that shows as a drawer on mobile and a floating popover on desktop.\n * Built with Floating UI for intelligent positioning and Vaul Drawer for mobile gestures.\n *\n * Features:\n * - Premium Harmony V2 spring physics animations (SPRING_GENTLE)\n * - Motion/React for smooth, performant animations\n * - Reduced motion support with useReducedMotion\n * - Touch device detection with useMediaQuery\n * - ES2023 syntax with modern patterns\n * - Tailwind v4 CSS-first theming with CSS variables\n * - Super light/dark mode with seamless switching\n * - Responsive: Drawer on mobile, Floating UI popover on desktop\n * - Floating UI for intelligent positioning\n * - Auto-flip and shift for viewport collision\n * - Vaul Drawer for mobile swipe gestures\n * - Toast dismissal prevention (Sonner integration)\n * - Configurable alignment and side offset\n * - ErrorBoundary wrapper for resilience\n * - Data attributes for state management (data-state)\n * - Semantic color tokens (no hardcoded colors)\n * - Focus-visible ring styles for interactive elements\n * - AnimatePresence for conditional rendering\n *\n * @module @od-oneapp/uni-ui/components/popover\n * @component Popover\n *\n * @useCases\n * - Display contextual menus, tooltips, or dropdown content near trigger elements\n * - Show additional information or actions without navigating away from current view\n * - Provide quick access to settings, filters, or form inputs in a floating panel\n * - Adapt presentation based on device: drawer on mobile, floating popover on desktop\n * - Display user profile cards, notification previews, or quick-access shortcuts\n * - Support intelligent positioning with auto-flip and collision detection\n * - Integrate with toast systems without dismissal conflicts (Sonner integration)\n * - Enable mobile-friendly interactions with swipe-to-dismiss drawer gestures\n *\n * @subcomponents\n * - Drawer.Root - Root container for mobile drawer mode (from vaul)\n * - Drawer.Trigger - Trigger element for mobile drawer\n * - Drawer.Portal - Portal for drawer rendering\n * - Drawer.Overlay - Backdrop overlay for drawer\n * - Drawer.Content - Content container for drawer\n *\n * @example\n * // Basic usage with controlled state\n * <Popover openPopover={isOpen} setOpenPopover={setIsOpen} content={<MenuItems />}>\n * <Button>Open Menu</Button>\n * </Popover>\n *\n * @example\n * // With positioning options\n * <Popover openPopover={open} setOpenPopover={setOpen} content={<Settings />} side=\"top\" align=\"end\" sideOffset={12}>\n * <IconButton icon=\"settings\" />\n * </Popover>\n */\n\nimport {\n isValidElement,\n memo,\n useCallback,\n useMemo,\n type PropsWithChildren,\n type ReactNode,\n type WheelEventHandler,\n} from 'react';\n\nimport {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingPortal,\n offset,\n shift,\n useClick,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n type Placement,\n} from '@floating-ui/react';\nimport { useMediaQuery, useReducedMotion } from '@mantine/hooks';\nimport { AnimatePresence, motion } from 'motion/react';\nimport { Drawer } from 'vaul';\n\nimport { useResponsive } from '../../../../hooks/use-responsive';\nimport { cn } from '../../../../lib/utils';\nimport { SPRING_GENTLE } from '../../../ai-elements/ai-elements.constants';\nimport { ErrorBoundary } from '../error-boundary';\n\n// Static classNames - moved outside component to prevent recreation\nconst POPOVER_DRAWER_TRIGGER_CLASSNAME =\n 'focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none sm:hidden';\nconst POPOVER_DRAWER_OVERLAY_CLASSNAME = 'fixed inset-0 z-50 bg-black/50 backdrop-blur-sm';\nconst POPOVER_DRAWER_CONTENT_CLASSNAME =\n 'border-border bg-background fixed right-0 bottom-0 left-0 z-50 mt-24 rounded-t-xl border-t';\nconst POPOVER_DRAWER_ISLAND_CONTAINER_CLASSNAME =\n 'sticky top-0 z-20 flex w-full items-center justify-center rounded-t-xl bg-inherit';\nconst POPOVER_DRAWER_ISLAND_BAR_CLASSNAME = 'bg-border my-3 h-1 w-12 rounded-full';\nconst POPOVER_DRAWER_CONTENT_INNER_CLASSNAME =\n 'bg-background flex min-h-[150px] w-full items-center justify-center overflow-hidden pb-8 align-middle shadow-xl';\nconst POPOVER_DESKTOP_TRIGGER_CLASSNAME =\n 'focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none sm:inline-flex';\nconst POPOVER_DESKTOP_CONTENT_BASE_CLASSNAME =\n 'border-border bg-popover z-50 items-center rounded-lg border shadow-lg sm:block';\n\n// Static strings - moved outside component to prevent recreation\nconst SONNER_TOAST_SELECTOR = '[data-sonner-toast]';\nconst DEFAULT_SIDE_OFFSET = 8;\n\nexport interface PopoverProps extends PropsWithChildren {\n /**\n * Trigger element(s) for the popover.\n * Must be an interactive element or component that accepts and forwards a `className` prop\n * (e.g., a Button component or DOM button element) to ensure proper focus styling.\n */\n children: ReactNode;\n content: ReactNode | string;\n align?: 'center' | 'start' | 'end';\n side?: 'bottom' | 'top' | 'left' | 'right';\n openPopover: boolean;\n setOpenPopover: (open: boolean) => void;\n mobileOnly?: boolean;\n popoverContentClassName?: string;\n onOpenAutoFocus?: (event: Event) => void;\n collisionBoundary?: Element | Element[];\n sticky?: 'partial' | 'always';\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n onWheel?: WheelEventHandler;\n sideOffset?: number;\n}\n\n/**\n * Render a responsive popover that uses a bottom drawer on mobile and a floating popover on desktop.\n */\nexport const Popover = memo(function Popover({\n children,\n content,\n align = 'center',\n side = 'bottom',\n openPopover,\n setOpenPopover,\n mobileOnly,\n popoverContentClassName,\n onOpenAutoFocus,\n collisionBoundary,\n sticky: _sticky,\n onEscapeKeyDown,\n onWheel,\n sideOffset = DEFAULT_SIDE_OFFSET,\n}: PopoverProps) {\n const { isMobile } = useResponsive();\n // Premium Harmony V2: Touch detection and reduced motion\n const isTouchDevice = useMediaQuery('(pointer: coarse)');\n const shouldReduceMotion = useReducedMotion() ?? false;\n\n // Memoize mobile drawer condition to prevent unnecessary re-computation\n const shouldShowDrawer = useMemo(() => mobileOnly ?? isMobile, [mobileOnly, isMobile]);\n\n // Memoize pointer down handler to prevent unnecessary re-renders\n const handlePointerDownOutside = useCallback(\n (event: CustomEvent<{ originalEvent: PointerEvent }>) => {\n // Prevent dismissal when clicking inside a toast\n if (\n event.detail.originalEvent.target instanceof Element &&\n event.detail.originalEvent.target.closest(SONNER_TOAST_SELECTOR)\n ) {\n event.detail.originalEvent.preventDefault();\n }\n },\n [],\n );\n\n // Convert side + align to Floating UI placement\n const placement = useMemo((): Placement => {\n if (align === 'center') return side;\n return `${side}-${align}` as Placement;\n }, [side, align]);\n\n // Floating UI setup\n const { refs, floatingStyles, context } = useFloating({\n open: openPopover,\n onOpenChange: setOpenPopover,\n placement,\n middleware: [\n offset(sideOffset),\n flip({\n fallbackAxisSideDirection: 'end',\n boundary: collisionBoundary,\n }),\n shift({ padding: 8, boundary: collisionBoundary }),\n ],\n whileElementsMounted: autoUpdate,\n });\n\n const click = useClick(context);\n const dismiss = useDismiss(context, {\n outsidePress: event => {\n // Prevent dismissal when clicking inside a toast\n if (event.target instanceof Element && event.target.closest(SONNER_TOAST_SELECTOR)) {\n return false;\n }\n return true;\n },\n escapeKey: true,\n });\n const role = useRole(context);\n\n const { getReferenceProps, getFloatingProps } = useInteractions([click, dismiss, role]);\n\n // Memoize desktop content className\n const desktopContentClassName = useMemo(\n () => cn(POPOVER_DESKTOP_CONTENT_BASE_CLASSNAME, popoverContentClassName),\n [popoverContentClassName],\n );\n\n if (shouldShowDrawer) {\n return (\n <ErrorBoundary>\n <Drawer.Root open={openPopover} onOpenChange={setOpenPopover}>\n <Drawer.Trigger className={POPOVER_DRAWER_TRIGGER_CLASSNAME} asChild>\n <div className={POPOVER_DRAWER_TRIGGER_CLASSNAME}>{children}</div>\n </Drawer.Trigger>\n <Drawer.Portal>\n <Drawer.Overlay className={POPOVER_DRAWER_OVERLAY_CLASSNAME} />\n <Drawer.Content\n className={POPOVER_DRAWER_CONTENT_CLASSNAME}\n onEscapeKeyDown={onEscapeKeyDown}\n onPointerDownOutside={handlePointerDownOutside}\n >\n <div className={POPOVER_DRAWER_ISLAND_CONTAINER_CLASSNAME}>\n <div className={POPOVER_DRAWER_ISLAND_BAR_CLASSNAME} />\n </div>\n <div className={POPOVER_DRAWER_CONTENT_INNER_CLASSNAME}>{content}</div>\n </Drawer.Content>\n </Drawer.Portal>\n </Drawer.Root>\n </ErrorBoundary>\n );\n }\n\n // Desktop popover with Floating UI\n return (\n <ErrorBoundary>\n <div\n ref={refs.setReference}\n className={cn(\n POPOVER_DESKTOP_TRIGGER_CLASSNAME,\n isValidElement(children) && (children as React.ReactElement<any>).props.className,\n )}\n {...getReferenceProps()}\n >\n {children}\n </div>\n\n {/* Content */}\n <AnimatePresence>\n {openPopover ? (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n modal={false}\n initialFocus={onOpenAutoFocus ? -1 : 0}\n >\n <motion.div\n ref={refs.setFloating}\n data-slot=\"popover-content\"\n data-side={side}\n data-align={align}\n data-state={openPopover ? 'open' : 'closed'}\n className={desktopContentClassName}\n initial={\n shouldReduceMotion\n ? { opacity: 1, scale: 1, y: 0 }\n : { opacity: 0, scale: 0.95, y: -4 }\n }\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={\n shouldReduceMotion\n ? { opacity: 1, scale: 1, y: 0 }\n : { opacity: 0, scale: 0.95, y: -4 }\n }\n transition={shouldReduceMotion ? { duration: 0 } : SPRING_GENTLE}\n style={{\n ...floatingStyles,\n }}\n onWheel={onWheel}\n {...getFloatingProps()}\n >\n {content}\n </motion.div>\n </FloatingFocusManager>\n </FloatingPortal>\n ) : null}\n </AnimatePresence>\n </ErrorBoundary>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FA,MAAM,mCACJ;AACF,MAAM,mCAAmC;AACzC,MAAM,mCACJ;AACF,MAAM,4CACJ;AACF,MAAM,sCAAsC;AAC5C,MAAM,yCACJ;AACF,MAAM,oCACJ;AACF,MAAM,yCACJ;AAGF,MAAM,wBAAwB;AAC9B,MAAM,sBAAsB;;;;AA2B5B,MAAa,UAAU,KAAK,SAAS,QAAQ,EAC3C,UACA,SACA,QAAQ,UACR,OAAO,UACP,aACA,gBACA,YACA,yBACA,iBACA,mBACA,QAAQ,SACR,iBACA,SACA,aAAa,uBACE;CACf,MAAM,EAAE,aAAa,eAAe;AAEd,eAAc,oBAAoB;CACxD,MAAM,qBAAqB,kBAAkB,IAAI;CAGjD,MAAM,mBAAmB,cAAc,cAAc,UAAU,CAAC,YAAY,SAAS,CAAC;CAGtF,MAAM,2BAA2B,aAC9B,UAAwD;AAEvD,MACE,MAAM,OAAO,cAAc,kBAAkB,WAC7C,MAAM,OAAO,cAAc,OAAO,QAAQ,sBAAsB,CAEhE,OAAM,OAAO,cAAc,gBAAgB;IAG/C,EAAE,CACH;CASD,MAAM,EAAE,MAAM,gBAAgB,YAAY,YAAY;EACpD,MAAM;EACN,cAAc;EACd,WATgB,cAAyB;AACzC,OAAI,UAAU,SAAU,QAAO;AAC/B,UAAO,GAAG,KAAK,GAAG;KACjB,CAAC,MAAM,MAAM,CAAC;EAOf,YAAY;GACV,OAAO,WAAW;GAClB,KAAK;IACH,2BAA2B;IAC3B,UAAU;IACX,CAAC;GACF,MAAM;IAAE,SAAS;IAAG,UAAU;IAAmB,CAAC;GACnD;EACD,sBAAsB;EACvB,CAAC;CAeF,MAAM,EAAE,mBAAmB,qBAAqB,gBAAgB;EAblD,SAAS,QAAQ;EACf,WAAW,SAAS;GAClC,eAAc,UAAS;AAErB,QAAI,MAAM,kBAAkB,WAAW,MAAM,OAAO,QAAQ,sBAAsB,CAChF,QAAO;AAET,WAAO;;GAET,WAAW;GACZ,CAAC;EACW,QAAQ,QAAQ;EAEyD,CAAC;CAGvF,MAAM,0BAA0B,cACxB,GAAG,wCAAwC,wBAAwB,EACzE,CAAC,wBAAwB,CAC1B;AAED,KAAI,iBACF,QACE,oBAAC,2BACC,qBAAC,OAAO;EAAK,MAAM;EAAa,cAAc;aAC5C,oBAAC,OAAO;GAAQ,WAAW;GAAkC;aAC3D,oBAAC;IAAI,WAAW;IAAmC;KAAe;IACnD,EACjB,qBAAC,OAAO,qBACN,oBAAC,OAAO,WAAQ,WAAW,mCAAoC,EAC/D,qBAAC,OAAO;GACN,WAAW;GACM;GACjB,sBAAsB;cAEtB,oBAAC;IAAI,WAAW;cACd,oBAAC,SAAI,WAAW,sCAAuC;KACnD,EACN,oBAAC;IAAI,WAAW;cAAyC;KAAc;IACxD,IACH;GACJ,GACA;AAKpB,QACE,qBAAC,4BACC,oBAAC;EACC,KAAK,KAAK;EACV,WAAW,GACT,mCACA,eAAe,SAAS,IAAK,SAAqC,MAAM,UACzE;EACD,GAAI,mBAAmB;EAEtB;GACG,EAGN,oBAAC,6BACE,cACC,oBAAC,4BACC,oBAAC;EACU;EACT,OAAO;EACP,cAAc,kBAAkB,KAAK;YAErC,oBAAC,OAAO;GACN,KAAK,KAAK;GACV,aAAU;GACV,aAAW;GACX,cAAY;GACZ,cAAY,cAAc,SAAS;GACnC,WAAW;GACX,SACE,qBACI;IAAE,SAAS;IAAG,OAAO;IAAG,GAAG;IAAG,GAC9B;IAAE,SAAS;IAAG,OAAO;IAAM,GAAG;IAAI;GAExC,SAAS;IAAE,SAAS;IAAG,OAAO;IAAG,GAAG;IAAG;GACvC,MACE,qBACI;IAAE,SAAS;IAAG,OAAO;IAAG,GAAG;IAAG,GAC9B;IAAE,SAAS;IAAG,OAAO;IAAM,GAAG;IAAI;GAExC,YAAY,qBAAqB,EAAE,UAAU,GAAG,GAAG;GACnD,OAAO,EACL,GAAG,gBACJ;GACQ;GACT,GAAI,kBAAkB;aAErB;IACU;GACQ,GACR,GACf,OACY,IACJ;EAElB"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { t as cn } from "./utils-D2bGp2p_.mjs";
|
|
3
|
+
import { a as SPRING_TACTILE, i as SPRING_GENTLE, r as SPRING_FLUID } from "./motion-zelaDelJ.mjs";
|
|
4
|
+
import { forwardRef, memo, useMemo } from "react";
|
|
5
|
+
import { useMediaQuery, useReducedMotion } from "@mantine/hooks";
|
|
6
|
+
import { cva } from "class-variance-authority";
|
|
7
|
+
import { AnimatePresence, motion } from "motion/react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
|
|
10
|
+
//#region src/components/elements/atoms/progress/progress.tsx
|
|
11
|
+
/**
|
|
12
|
+
* @fileoverview Progress Component - Premium Harmony V2
|
|
13
|
+
*
|
|
14
|
+
* A progress bar component with size and color variants for visual feedback.
|
|
15
|
+
* Built with native HTML elements and ARIA attributes for accessibility.
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - ES2023 syntax with modern patterns
|
|
19
|
+
* - Tailwind v4 CSS-first theming with CSS variables
|
|
20
|
+
* - Premium Harmony V2 spring physics for smooth animations
|
|
21
|
+
* - Touch detection with automatic sizing for mobile devices
|
|
22
|
+
* - Reduced motion support for accessibility
|
|
23
|
+
* - Multiple size and color variants with light/dark mode support
|
|
24
|
+
* - Full accessibility support (ARIA progressbar)
|
|
25
|
+
* - Indeterminate state with fluid animation
|
|
26
|
+
* - WCAG 2.5.5 compliant touch targets for interactive progress bars
|
|
27
|
+
* - Data attributes for state management (data-state, data-loading)
|
|
28
|
+
* - Enhanced focus styles for keyboard navigation
|
|
29
|
+
*
|
|
30
|
+
* @module @od-oneapp/uni-ui/components/elements/atoms/progress
|
|
31
|
+
*
|
|
32
|
+
* @component Progress
|
|
33
|
+
*
|
|
34
|
+
* @useCases
|
|
35
|
+
* - File upload progress with percentage display
|
|
36
|
+
* - Task completion through multi-step workflows
|
|
37
|
+
* - Loading indicators with indeterminate state
|
|
38
|
+
* - Download progress with animated fill
|
|
39
|
+
* - Profile completion gamification elements
|
|
40
|
+
* - Data processing with visual feedback
|
|
41
|
+
* - Achievement tracking and goal visualization
|
|
42
|
+
*
|
|
43
|
+
* @variants
|
|
44
|
+
* - size: xs, sm, default, lg, xl, touch
|
|
45
|
+
* - variant: default, success, warning, destructive
|
|
46
|
+
*
|
|
47
|
+
* @example <Progress value={60} />
|
|
48
|
+
*
|
|
49
|
+
* @example <Progress value={80} size="lg" variant="success" />
|
|
50
|
+
*
|
|
51
|
+
* @example <Progress indeterminate />
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* Progress track variant definitions using CVA
|
|
55
|
+
*
|
|
56
|
+
* Base styles include:
|
|
57
|
+
* - Rounded full shape
|
|
58
|
+
* - Overflow hidden for indicator
|
|
59
|
+
* - Relative positioning for indicator
|
|
60
|
+
* - Focus styles for keyboard navigation (when interactive)
|
|
61
|
+
*/
|
|
62
|
+
const progressVariants = cva([
|
|
63
|
+
"relative w-full overflow-hidden",
|
|
64
|
+
"rounded-full",
|
|
65
|
+
"bg-primary/20",
|
|
66
|
+
"dark:bg-primary/15",
|
|
67
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"
|
|
68
|
+
], {
|
|
69
|
+
variants: {
|
|
70
|
+
size: {
|
|
71
|
+
xs: "h-0.5",
|
|
72
|
+
sm: "h-1",
|
|
73
|
+
default: "h-2",
|
|
74
|
+
lg: "h-3",
|
|
75
|
+
xl: "h-4",
|
|
76
|
+
touch: "h-11"
|
|
77
|
+
},
|
|
78
|
+
variant: {
|
|
79
|
+
default: "bg-primary/20 dark:bg-primary/15",
|
|
80
|
+
success: "bg-success/20 dark:bg-success/15",
|
|
81
|
+
warning: "bg-warning/20 dark:bg-warning/15",
|
|
82
|
+
destructive: "bg-destructive/20 dark:bg-destructive/15"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
defaultVariants: {
|
|
86
|
+
size: "default",
|
|
87
|
+
variant: "default"
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* Progress indicator variant definitions
|
|
92
|
+
* Uses motion library for Premium Harmony V2 spring physics
|
|
93
|
+
*/
|
|
94
|
+
const progressIndicatorVariants = cva(["h-full w-full flex-1"], {
|
|
95
|
+
variants: {
|
|
96
|
+
variant: {
|
|
97
|
+
default: ["bg-primary", "dark:bg-primary/90"],
|
|
98
|
+
success: ["bg-success", "dark:bg-success/90"],
|
|
99
|
+
warning: ["bg-warning", "dark:bg-warning/90"],
|
|
100
|
+
destructive: ["bg-destructive", "dark:bg-destructive/90"]
|
|
101
|
+
},
|
|
102
|
+
animation: {
|
|
103
|
+
none: "",
|
|
104
|
+
indeterminate: "animate-[progress-indeterminate_1.5s_ease-in-out_infinite] w-1/3",
|
|
105
|
+
striped: "bg-[length:1rem_1rem] bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]",
|
|
106
|
+
stripedAnimated: [
|
|
107
|
+
"bg-[length:1rem_1rem]",
|
|
108
|
+
"bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]",
|
|
109
|
+
"animate-[progress-stripes_1s_linear_infinite]"
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
defaultVariants: {
|
|
114
|
+
variant: "default",
|
|
115
|
+
animation: "none"
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
/**
|
|
119
|
+
* Progress Component
|
|
120
|
+
*
|
|
121
|
+
* A progress bar that shows completion status with various visual options.
|
|
122
|
+
* Fully accessible with ARIA progressbar role.
|
|
123
|
+
* Enhanced with Premium Harmony V2 motion standards for smooth, physics-based animations.
|
|
124
|
+
*/
|
|
125
|
+
const Progress = memo(forwardRef(function Progress({ className, value, max = 100, size: sizeProp, variant, indeterminate = false, striped = false, animated = false, getValueLabel, showLabel = false, ...props }, ref) {
|
|
126
|
+
const isTouchDevice = useMediaQuery("(pointer: coarse)");
|
|
127
|
+
const shouldReduceMotion = useReducedMotion();
|
|
128
|
+
const size = useMemo(() => {
|
|
129
|
+
if (sizeProp) return sizeProp;
|
|
130
|
+
return isTouchDevice ? "lg" : "default";
|
|
131
|
+
}, [sizeProp, isTouchDevice]);
|
|
132
|
+
const progressValue = useMemo(() => {
|
|
133
|
+
if (indeterminate || value === null || value === void 0) return null;
|
|
134
|
+
return Math.min(Math.max(value, 0), max);
|
|
135
|
+
}, [
|
|
136
|
+
value,
|
|
137
|
+
max,
|
|
138
|
+
indeterminate
|
|
139
|
+
]);
|
|
140
|
+
const percentage = useMemo(() => {
|
|
141
|
+
if (progressValue === null) return null;
|
|
142
|
+
return progressValue / max * 100;
|
|
143
|
+
}, [progressValue, max]);
|
|
144
|
+
const trackClassName = useMemo(() => cn(progressVariants({
|
|
145
|
+
size,
|
|
146
|
+
variant
|
|
147
|
+
}), className), [
|
|
148
|
+
size,
|
|
149
|
+
variant,
|
|
150
|
+
className
|
|
151
|
+
]);
|
|
152
|
+
const animationType = useMemo(() => {
|
|
153
|
+
if (indeterminate) return "indeterminate";
|
|
154
|
+
if (striped && animated) return "stripedAnimated";
|
|
155
|
+
if (striped) return "striped";
|
|
156
|
+
return "none";
|
|
157
|
+
}, [
|
|
158
|
+
indeterminate,
|
|
159
|
+
striped,
|
|
160
|
+
animated
|
|
161
|
+
]);
|
|
162
|
+
const indicatorClassName = useMemo(() => progressIndicatorVariants({
|
|
163
|
+
variant,
|
|
164
|
+
animation: animationType
|
|
165
|
+
}), [variant, animationType]);
|
|
166
|
+
const valueLabel = useMemo(() => {
|
|
167
|
+
if (progressValue === null) return;
|
|
168
|
+
if (getValueLabel) return getValueLabel(progressValue, max);
|
|
169
|
+
return `${Math.round(percentage ?? 0)}%`;
|
|
170
|
+
}, [
|
|
171
|
+
progressValue,
|
|
172
|
+
max,
|
|
173
|
+
percentage,
|
|
174
|
+
getValueLabel
|
|
175
|
+
]);
|
|
176
|
+
const dataState = useMemo(() => {
|
|
177
|
+
if (indeterminate) return "indeterminate";
|
|
178
|
+
if (progressValue === max) return "complete";
|
|
179
|
+
return "loading";
|
|
180
|
+
}, [
|
|
181
|
+
indeterminate,
|
|
182
|
+
progressValue,
|
|
183
|
+
max
|
|
184
|
+
]);
|
|
185
|
+
const springConfig = useMemo(() => {
|
|
186
|
+
if (shouldReduceMotion) return { duration: 0 };
|
|
187
|
+
if (indeterminate) return SPRING_FLUID;
|
|
188
|
+
if (percentage !== null && percentage > 75) return SPRING_GENTLE;
|
|
189
|
+
return SPRING_TACTILE;
|
|
190
|
+
}, [
|
|
191
|
+
shouldReduceMotion,
|
|
192
|
+
indeterminate,
|
|
193
|
+
percentage
|
|
194
|
+
]);
|
|
195
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
196
|
+
ref,
|
|
197
|
+
role: "progressbar",
|
|
198
|
+
"aria-valuemin": 0,
|
|
199
|
+
"aria-valuemax": max,
|
|
200
|
+
"aria-valuenow": progressValue ?? void 0,
|
|
201
|
+
"aria-valuetext": valueLabel,
|
|
202
|
+
"data-slot": "progress",
|
|
203
|
+
"data-state": dataState,
|
|
204
|
+
"data-loading": indeterminate || progressValue !== null && progressValue < max,
|
|
205
|
+
"data-value": progressValue ?? void 0,
|
|
206
|
+
"data-max": max,
|
|
207
|
+
className: trackClassName,
|
|
208
|
+
...props,
|
|
209
|
+
children: [/* @__PURE__ */ jsx(motion.div, {
|
|
210
|
+
"data-slot": "progress-indicator",
|
|
211
|
+
className: indicatorClassName,
|
|
212
|
+
initial: false,
|
|
213
|
+
animate: { x: indeterminate || percentage === null ? 0 : `${-(100 - percentage)}%` },
|
|
214
|
+
transition: springConfig
|
|
215
|
+
}), /* @__PURE__ */ jsx(AnimatePresence, { children: showLabel && !indeterminate && percentage !== null ? /* @__PURE__ */ jsxs(motion.span, {
|
|
216
|
+
"data-slot": "progress-label",
|
|
217
|
+
className: "text-primary-foreground absolute inset-0 flex items-center justify-center text-[10px] font-medium mix-blend-difference",
|
|
218
|
+
initial: { opacity: 0 },
|
|
219
|
+
animate: { opacity: 1 },
|
|
220
|
+
exit: { opacity: 0 },
|
|
221
|
+
transition: shouldReduceMotion ? { duration: 0 } : SPRING_GENTLE,
|
|
222
|
+
children: [Math.round(percentage), "%"]
|
|
223
|
+
}) : null })]
|
|
224
|
+
});
|
|
225
|
+
}));
|
|
226
|
+
Progress.displayName = "Progress";
|
|
227
|
+
|
|
228
|
+
//#endregion
|
|
229
|
+
export { progressIndicatorVariants as n, progressVariants as r, Progress as t };
|
|
230
|
+
//# sourceMappingURL=progress-BWxdthl4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-BWxdthl4.mjs","names":[],"sources":["../src/components/elements/atoms/progress/progress.tsx"],"sourcesContent":["/**\n * @fileoverview Progress Component - Premium Harmony V2\n *\n * A progress bar component with size and color variants for visual feedback.\n * Built with native HTML elements and ARIA attributes for accessibility.\n *\n * Features:\n * - ES2023 syntax with modern patterns\n * - Tailwind v4 CSS-first theming with CSS variables\n * - Premium Harmony V2 spring physics for smooth animations\n * - Touch detection with automatic sizing for mobile devices\n * - Reduced motion support for accessibility\n * - Multiple size and color variants with light/dark mode support\n * - Full accessibility support (ARIA progressbar)\n * - Indeterminate state with fluid animation\n * - WCAG 2.5.5 compliant touch targets for interactive progress bars\n * - Data attributes for state management (data-state, data-loading)\n * - Enhanced focus styles for keyboard navigation\n *\n * @module @od-oneapp/uni-ui/components/elements/atoms/progress\n *\n * @component Progress\n *\n * @useCases\n * - File upload progress with percentage display\n * - Task completion through multi-step workflows\n * - Loading indicators with indeterminate state\n * - Download progress with animated fill\n * - Profile completion gamification elements\n * - Data processing with visual feedback\n * - Achievement tracking and goal visualization\n *\n * @variants\n * - size: xs, sm, default, lg, xl, touch\n * - variant: default, success, warning, destructive\n *\n * @example <Progress value={60} />\n *\n * @example <Progress value={80} size=\"lg\" variant=\"success\" />\n *\n * @example <Progress indeterminate />\n */\n\n'use client';\n\nimport type { ComponentProps } from 'react';\nimport { forwardRef, memo, useMemo } from 'react';\n\nimport { useMediaQuery, useReducedMotion } from '@mantine/hooks';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { AnimatePresence, motion } from 'motion/react';\n\nimport { cn } from '../../../../lib/utils';\nimport {\n SPRING_FLUID,\n SPRING_GENTLE,\n SPRING_TACTILE,\n} from '../../../ai-elements/ai-elements.constants';\n\n/**\n * Progress track variant definitions using CVA\n *\n * Base styles include:\n * - Rounded full shape\n * - Overflow hidden for indicator\n * - Relative positioning for indicator\n * - Focus styles for keyboard navigation (when interactive)\n */\nconst progressVariants = cva(\n [\n // Layout\n 'relative w-full overflow-hidden',\n // Shape\n 'rounded-full',\n // Background track\n 'bg-primary/20',\n // Dark mode\n 'dark:bg-primary/15',\n // Focus styles (for interactive progress bars)\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n ],\n {\n variants: {\n /**\n * Size variants\n * 'touch' variant ensures WCAG 2.5.5 compliance with 44px minimum height\n */\n size: {\n xs: 'h-0.5',\n sm: 'h-1',\n default: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n touch: 'h-11', // 44px for WCAG 2.5.5 compliance\n },\n /**\n * Visual variant for track background\n */\n variant: {\n default: 'bg-primary/20 dark:bg-primary/15',\n success: 'bg-success/20 dark:bg-success/15',\n warning: 'bg-warning/20 dark:bg-warning/15',\n destructive: 'bg-destructive/20 dark:bg-destructive/15',\n },\n },\n defaultVariants: {\n size: 'default',\n variant: 'default',\n },\n },\n);\n\n/**\n * Progress indicator variant definitions\n * Uses motion library for Premium Harmony V2 spring physics\n */\nconst progressIndicatorVariants = cva(\n [\n // Layout\n 'h-full w-full flex-1',\n ],\n {\n variants: {\n /**\n * Color variant for the indicator fill\n */\n variant: {\n default: ['bg-primary', 'dark:bg-primary/90'],\n success: ['bg-success', 'dark:bg-success/90'],\n warning: ['bg-warning', 'dark:bg-warning/90'],\n destructive: ['bg-destructive', 'dark:bg-destructive/90'],\n },\n /**\n * Animation state\n */\n animation: {\n none: '',\n indeterminate: 'animate-[progress-indeterminate_1.5s_ease-in-out_infinite] w-1/3',\n striped:\n 'bg-[length:1rem_1rem] bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]',\n stripedAnimated: [\n 'bg-[length:1rem_1rem]',\n 'bg-[linear-gradient(45deg,rgba(255,255,255,0.15)_25%,transparent_25%,transparent_50%,rgba(255,255,255,0.15)_50%,rgba(255,255,255,0.15)_75%,transparent_75%,transparent)]',\n 'animate-[progress-stripes_1s_linear_infinite]',\n ],\n },\n },\n defaultVariants: {\n variant: 'default',\n animation: 'none',\n },\n },\n);\n\n/**\n * Progress component props\n */\ninterface ProgressProps\n extends Omit<ComponentProps<'div'>, 'children'>, VariantProps<typeof progressVariants> {\n /** Current progress value (0-100 or 0-max) */\n value?: number | null;\n /** Maximum value for the progress bar */\n max?: number;\n /** Show indeterminate loading animation when value is unknown */\n indeterminate?: boolean;\n /** Show striped pattern */\n striped?: boolean;\n /** Animate striped pattern */\n animated?: boolean;\n /** Function to get the value label for accessibility */\n getValueLabel?: (value: number, max: number) => string;\n /** Show percentage label */\n showLabel?: boolean;\n}\n\n/**\n * Progress Component\n *\n * A progress bar that shows completion status with various visual options.\n * Fully accessible with ARIA progressbar role.\n * Enhanced with Premium Harmony V2 motion standards for smooth, physics-based animations.\n */\nconst Progress = memo(\n forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n className,\n value,\n max = 100,\n size: sizeProp,\n variant,\n indeterminate = false,\n striped = false,\n animated = false,\n getValueLabel,\n showLabel = false,\n ...props\n },\n ref,\n ) {\n // Premium Harmony V2: Touch detection\n const isTouchDevice = useMediaQuery('(pointer: coarse)');\n // Premium Harmony V2: Reduced motion support\n const shouldReduceMotion = useReducedMotion();\n\n // Auto-adjust size for touch devices if not explicitly set\n const size = useMemo(() => {\n if (sizeProp) return sizeProp;\n return isTouchDevice ? 'lg' : 'default';\n }, [sizeProp, isTouchDevice]);\n\n // Calculate clamped progress value\n const progressValue = useMemo(() => {\n if (indeterminate || value === null || value === undefined) {\n return null;\n }\n return Math.min(Math.max(value, 0), max);\n }, [value, max, indeterminate]);\n\n // Calculate percentage\n const percentage = useMemo(() => {\n if (progressValue === null) return null;\n return (progressValue / max) * 100;\n }, [progressValue, max]);\n\n // Memoize track className\n const trackClassName = useMemo(\n () => cn(progressVariants({ size, variant }), className),\n [size, variant, className],\n );\n\n // Determine animation type\n const animationType = useMemo(() => {\n if (indeterminate) return 'indeterminate' as const;\n if (striped && animated) return 'stripedAnimated' as const;\n if (striped) return 'striped' as const;\n return 'none' as const;\n }, [indeterminate, striped, animated]);\n\n // Memoize indicator className\n const indicatorClassName = useMemo(\n () => progressIndicatorVariants({ variant, animation: animationType }),\n [variant, animationType],\n );\n\n // Generate accessible value label\n const valueLabel = useMemo(() => {\n if (progressValue === null) return;\n if (getValueLabel) return getValueLabel(progressValue, max);\n return `${Math.round(percentage ?? 0)}%`;\n }, [progressValue, max, percentage, getValueLabel]);\n\n // Determine data-state\n const dataState = useMemo(() => {\n if (indeterminate) return 'indeterminate';\n if (progressValue === max) return 'complete';\n return 'loading';\n }, [indeterminate, progressValue, max]);\n\n // Premium Harmony V2: Select appropriate spring physics\n const springConfig = useMemo(() => {\n if (shouldReduceMotion) return { duration: 0 }; // Instant for reduced motion\n if (indeterminate) return SPRING_FLUID; // Fluid for continuous motion\n if (percentage !== null && percentage > 75) return SPRING_GENTLE; // Gentle near completion\n return SPRING_TACTILE; // Tactile for normal progress\n }, [shouldReduceMotion, indeterminate, percentage]);\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={progressValue ?? undefined}\n aria-valuetext={valueLabel}\n data-slot=\"progress\"\n data-state={dataState}\n data-loading={indeterminate || (progressValue !== null && progressValue < max)}\n data-value={progressValue ?? undefined}\n data-max={max}\n className={trackClassName}\n {...props}\n >\n <motion.div\n data-slot=\"progress-indicator\"\n className={indicatorClassName}\n initial={false}\n animate={{\n x: indeterminate || percentage === null ? 0 : `${-(100 - percentage)}%`,\n }}\n transition={springConfig}\n />\n <AnimatePresence>\n {showLabel && !indeterminate && percentage !== null ? (\n <motion.span\n data-slot=\"progress-label\"\n className=\"text-primary-foreground absolute inset-0 flex items-center justify-center text-[10px] font-medium mix-blend-difference\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={shouldReduceMotion ? { duration: 0 } : SPRING_GENTLE}\n >\n {Math.round(percentage)}%\n </motion.span>\n ) : null}\n </AnimatePresence>\n </div>\n );\n }),\n);\n\nProgress.displayName = 'Progress';\n\nexport { Progress, progressIndicatorVariants, progressVariants };\nexport type { ProgressProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA,MAAM,mBAAmB,IACvB;CAEE;CAEA;CAEA;CAEA;CAEA;CACD,EACD;CACE,UAAU;EAKR,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,OAAO;GACR;EAID,SAAS;GACP,SAAS;GACT,SAAS;GACT,SAAS;GACT,aAAa;GACd;EACF;CACD,iBAAiB;EACf,MAAM;EACN,SAAS;EACV;CACF,CACF;;;;;AAMD,MAAM,4BAA4B,IAChC,CAEE,uBACD,EACD;CACE,UAAU;EAIR,SAAS;GACP,SAAS,CAAC,cAAc,qBAAqB;GAC7C,SAAS,CAAC,cAAc,qBAAqB;GAC7C,SAAS,CAAC,cAAc,qBAAqB;GAC7C,aAAa,CAAC,kBAAkB,yBAAyB;GAC1D;EAID,WAAW;GACT,MAAM;GACN,eAAe;GACf,SACE;GACF,iBAAiB;IACf;IACA;IACA;IACD;GACF;EACF;CACD,iBAAiB;EACf,SAAS;EACT,WAAW;EACZ;CACF,CACF;;;;;;;;AA8BD,MAAM,WAAW,KACf,WAA0C,SAAS,SACjD,EACE,WACA,OACA,MAAM,KACN,MAAM,UACN,SACA,gBAAgB,OAChB,UAAU,OACV,WAAW,OACX,eACA,YAAY,OACZ,GAAG,SAEL,KACA;CAEA,MAAM,gBAAgB,cAAc,oBAAoB;CAExD,MAAM,qBAAqB,kBAAkB;CAG7C,MAAM,OAAO,cAAc;AACzB,MAAI,SAAU,QAAO;AACrB,SAAO,gBAAgB,OAAO;IAC7B,CAAC,UAAU,cAAc,CAAC;CAG7B,MAAM,gBAAgB,cAAc;AAClC,MAAI,iBAAiB,UAAU,QAAQ,UAAU,OAC/C,QAAO;AAET,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI;IACvC;EAAC;EAAO;EAAK;EAAc,CAAC;CAG/B,MAAM,aAAa,cAAc;AAC/B,MAAI,kBAAkB,KAAM,QAAO;AACnC,SAAQ,gBAAgB,MAAO;IAC9B,CAAC,eAAe,IAAI,CAAC;CAGxB,MAAM,iBAAiB,cACf,GAAG,iBAAiB;EAAE;EAAM;EAAS,CAAC,EAAE,UAAU,EACxD;EAAC;EAAM;EAAS;EAAU,CAC3B;CAGD,MAAM,gBAAgB,cAAc;AAClC,MAAI,cAAe,QAAO;AAC1B,MAAI,WAAW,SAAU,QAAO;AAChC,MAAI,QAAS,QAAO;AACpB,SAAO;IACN;EAAC;EAAe;EAAS;EAAS,CAAC;CAGtC,MAAM,qBAAqB,cACnB,0BAA0B;EAAE;EAAS,WAAW;EAAe,CAAC,EACtE,CAAC,SAAS,cAAc,CACzB;CAGD,MAAM,aAAa,cAAc;AAC/B,MAAI,kBAAkB,KAAM;AAC5B,MAAI,cAAe,QAAO,cAAc,eAAe,IAAI;AAC3D,SAAO,GAAG,KAAK,MAAM,cAAc,EAAE,CAAC;IACrC;EAAC;EAAe;EAAK;EAAY;EAAc,CAAC;CAGnD,MAAM,YAAY,cAAc;AAC9B,MAAI,cAAe,QAAO;AAC1B,MAAI,kBAAkB,IAAK,QAAO;AAClC,SAAO;IACN;EAAC;EAAe;EAAe;EAAI,CAAC;CAGvC,MAAM,eAAe,cAAc;AACjC,MAAI,mBAAoB,QAAO,EAAE,UAAU,GAAG;AAC9C,MAAI,cAAe,QAAO;AAC1B,MAAI,eAAe,QAAQ,aAAa,GAAI,QAAO;AACnD,SAAO;IACN;EAAC;EAAoB;EAAe;EAAW,CAAC;AAEnD,QACE,qBAAC;EACM;EACL,MAAK;EACL,iBAAe;EACf,iBAAe;EACf,iBAAe,iBAAiB;EAChC,kBAAgB;EAChB,aAAU;EACV,cAAY;EACZ,gBAAc,iBAAkB,kBAAkB,QAAQ,gBAAgB;EAC1E,cAAY,iBAAiB;EAC7B,YAAU;EACV,WAAW;EACX,GAAI;aAEJ,oBAAC,OAAO;GACN,aAAU;GACV,WAAW;GACX,SAAS;GACT,SAAS,EACP,GAAG,iBAAiB,eAAe,OAAO,IAAI,GAAG,EAAE,MAAM,YAAY,IACtE;GACD,YAAY;IACZ,EACF,oBAAC,6BACE,aAAa,CAAC,iBAAiB,eAAe,OAC7C,qBAAC,OAAO;GACN,aAAU;GACV,WAAU;GACV,SAAS,EAAE,SAAS,GAAG;GACvB,SAAS,EAAE,SAAS,GAAG;GACvB,MAAM,EAAE,SAAS,GAAG;GACpB,YAAY,qBAAqB,EAAE,UAAU,GAAG,GAAG;cAElD,KAAK,MAAM,WAAW,EAAC;IACZ,GACZ,OACY;GACd;EAER,CACH;AAED,SAAS,cAAc"}
|