@glyphui/ui 0.4.0 → 0.5.0
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 +9 -6
- package/dist/chart.d.ts +14 -202
- package/dist/chart.js +14 -465
- package/dist/components/accordion/accordion.d.ts +15 -0
- package/dist/components/accordion/accordion.js +69 -0
- package/dist/components/accordion/accordion.styles.d.ts +65 -0
- package/dist/components/accordion/accordion.styles.js +30 -0
- package/dist/components/accordion/index.d.ts +3 -0
- package/dist/components/alert/alert-icons.js +62 -0
- package/dist/components/alert/alert.d.ts +19 -0
- package/dist/components/alert/alert.js +64 -0
- package/dist/components/alert/alert.styles.d.ts +107 -0
- package/dist/components/alert/alert.styles.js +86 -0
- package/dist/components/alert/index.d.ts +3 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +29 -0
- package/dist/components/alert-dialog/alert-dialog.js +89 -0
- package/dist/components/alert-dialog/alert-dialog.styles.d.ts +63 -0
- package/dist/components/alert-dialog/alert-dialog.styles.js +19 -0
- package/dist/components/alert-dialog/confirm-dialog.js +22 -0
- package/dist/components/alert-dialog/confirm.d.ts +30 -0
- package/dist/components/alert-dialog/confirm.js +62 -0
- package/dist/components/alert-dialog/index.d.ts +4 -0
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +55 -0
- package/dist/components/aspect-ratio/aspect-ratio.js +28 -0
- package/dist/components/aspect-ratio/index.d.ts +2 -0
- package/dist/components/avatar/avatar.d.ts +13 -0
- package/dist/components/avatar/avatar.js +50 -0
- package/dist/components/avatar/avatar.styles.d.ts +77 -0
- package/dist/components/avatar/avatar.styles.js +32 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/dist/components/badge/badge.d.ts +10 -0
- package/dist/components/badge/badge.js +28 -0
- package/dist/components/badge/badge.styles.d.ts +62 -0
- package/dist/components/badge/badge.styles.js +72 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/banner/banner.d.ts +17 -0
- package/dist/components/banner/banner.js +71 -0
- package/dist/components/banner/banner.styles.d.ts +98 -0
- package/dist/components/banner/banner.styles.js +27 -0
- package/dist/components/banner/index.d.ts +3 -0
- package/dist/components/blockquote/blockquote.d.ts +72 -0
- package/dist/components/blockquote/blockquote.js +47 -0
- package/dist/components/blockquote/index.d.ts +2 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +28 -0
- package/dist/components/breadcrumb/breadcrumb.js +85 -0
- package/dist/components/breadcrumb/breadcrumb.styles.d.ts +63 -0
- package/dist/components/breadcrumb/breadcrumb.styles.js +18 -0
- package/dist/components/breadcrumb/index.d.ts +3 -0
- package/dist/components/button/button.d.ts +20 -0
- package/dist/components/button/button.js +52 -0
- package/dist/components/button/button.styles.d.ts +146 -0
- package/dist/components/button/button.styles.js +64 -0
- package/dist/components/button/index.d.ts +3 -0
- package/dist/components/calendar/calendar.d.ts +9 -0
- package/dist/components/calendar/calendar.js +75 -0
- package/dist/components/calendar/calendar.styles.d.ts +171 -0
- package/dist/components/calendar/calendar.styles.js +42 -0
- package/dist/components/calendar/index.d.ts +4 -0
- package/dist/components/card/card.d.ts +17 -0
- package/dist/components/card/card.js +79 -0
- package/dist/components/card/card.styles.d.ts +113 -0
- package/dist/components/card/card.styles.js +38 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/carousel/carousel.d.ts +37 -0
- package/dist/components/carousel/carousel.js +190 -0
- package/dist/components/carousel/carousel.styles.d.ts +74 -0
- package/dist/components/carousel/carousel.styles.js +35 -0
- package/dist/components/carousel/index.d.ts +3 -0
- package/dist/components/checkbox/checkbox.d.ts +37 -0
- package/dist/components/checkbox/checkbox.js +44 -0
- package/dist/components/checkbox/index.d.ts +2 -0
- package/dist/components/code/code.d.ts +18 -0
- package/dist/components/code/code.js +75 -0
- package/dist/components/code/code.styles.d.ts +76 -0
- package/dist/components/code/code.styles.js +18 -0
- package/dist/components/code/index.d.ts +3 -0
- package/dist/components/collapsible/collapsible.d.ts +56 -0
- package/dist/components/collapsible/collapsible.js +43 -0
- package/dist/components/collapsible/index.d.ts +2 -0
- package/dist/components/combobox/combobox.d.ts +50 -0
- package/dist/components/combobox/combobox.js +141 -0
- package/dist/components/combobox/combobox.styles.d.ts +110 -0
- package/dist/components/combobox/combobox.styles.js +42 -0
- package/dist/components/combobox/index.d.ts +3 -0
- package/dist/components/command-menu/command-menu.d.ts +40 -0
- package/dist/components/command-menu/command-menu.js +148 -0
- package/dist/components/command-menu/command-menu.styles.d.ts +105 -0
- package/dist/components/command-menu/command-menu.styles.js +30 -0
- package/dist/components/command-menu/index.d.ts +3 -0
- package/dist/components/container/container.d.ts +34 -0
- package/dist/components/container/container.js +30 -0
- package/dist/components/container/index.d.ts +2 -0
- package/dist/components/context-menu/context-menu.d.ts +34 -0
- package/dist/components/context-menu/context-menu.js +157 -0
- package/dist/components/context-menu/context-menu.styles.d.ts +135 -0
- package/dist/components/context-menu/context-menu.styles.js +14 -0
- package/dist/components/context-menu/index.d.ts +3 -0
- package/dist/components/copy-button/copy-button.d.ts +61 -0
- package/dist/components/copy-button/copy-button.js +79 -0
- package/dist/components/copy-button/index.d.ts +2 -0
- package/dist/components/date-picker/date-picker.d.ts +51 -0
- package/dist/components/date-picker/date-picker.js +235 -0
- package/dist/components/date-picker/date-picker.styles.d.ts +77 -0
- package/dist/components/date-picker/date-picker.styles.js +31 -0
- package/dist/components/date-picker/index.d.ts +3 -0
- package/dist/components/description-list/description-list.d.ts +15 -0
- package/dist/components/description-list/description-list.js +51 -0
- package/dist/components/description-list/description-list.styles.d.ts +74 -0
- package/dist/components/description-list/description-list.styles.js +35 -0
- package/dist/components/description-list/index.d.ts +3 -0
- package/dist/components/dialog/close-icon.js +22 -0
- package/dist/components/dialog/dialog.d.ts +21 -0
- package/dist/components/dialog/dialog.js +79 -0
- package/dist/components/dialog/dialog.styles.d.ts +83 -0
- package/dist/components/dialog/dialog.styles.js +34 -0
- package/dist/components/dialog/index.d.ts +3 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +34 -0
- package/dist/components/dropdown-menu/dropdown-menu.js +160 -0
- package/dist/components/dropdown-menu/dropdown-menu.styles.d.ts +83 -0
- package/dist/components/dropdown-menu/dropdown-menu.styles.js +38 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/eyebrow/eyebrow.d.ts +9 -0
- package/dist/components/eyebrow/eyebrow.js +20 -0
- package/dist/components/eyebrow/eyebrow.styles.d.ts +38 -0
- package/dist/components/eyebrow/eyebrow.styles.js +13 -0
- package/dist/components/eyebrow/index.d.ts +3 -0
- package/dist/components/field/field-context.d.ts +25 -0
- package/dist/components/field/field-context.js +27 -0
- package/dist/components/field/field.d.ts +28 -0
- package/dist/{field-CVbywksE.js → components/field/field.js} +6 -35
- package/dist/components/field/field.styles.d.ts +53 -0
- package/dist/components/field/field.styles.js +22 -0
- package/dist/components/field/index.d.ts +4 -0
- package/dist/components/file-upload/file-upload.d.ts +52 -0
- package/dist/components/file-upload/file-upload.js +266 -0
- package/dist/components/file-upload/file-upload.styles.d.ts +123 -0
- package/dist/components/file-upload/file-upload.styles.js +32 -0
- package/dist/components/file-upload/index.d.ts +3 -0
- package/dist/components/grid/grid.d.ts +168 -0
- package/dist/components/grid/grid.js +126 -0
- package/dist/components/grid/index.d.ts +2 -0
- package/dist/components/heading/heading.d.ts +12 -0
- package/dist/components/heading/heading.js +28 -0
- package/dist/components/heading/heading.styles.d.ts +65 -0
- package/dist/components/heading/heading.styles.js +15 -0
- package/dist/components/heading/index.d.ts +3 -0
- package/dist/components/hover-card/hover-card.d.ts +43 -0
- package/dist/components/hover-card/hover-card.js +27 -0
- package/dist/components/hover-card/index.d.ts +2 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/input.d.ts +13 -0
- package/dist/components/input/input.js +33 -0
- package/dist/components/input/input.styles.d.ts +55 -0
- package/dist/components/input/input.styles.js +33 -0
- package/dist/components/input-otp/index.d.ts +4 -0
- package/dist/components/input-otp/index.js +5 -0
- package/dist/components/input-otp/input-otp.d.ts +23 -0
- package/dist/components/input-otp/input-otp.js +86 -0
- package/dist/components/input-otp/input-otp.styles.d.ts +71 -0
- package/dist/components/input-otp/input-otp.styles.js +30 -0
- package/dist/components/kbd/index.d.ts +2 -0
- package/dist/components/kbd/kbd.d.ts +30 -0
- package/dist/components/kbd/kbd.js +17 -0
- package/dist/components/label/index.d.ts +2 -0
- package/dist/components/label/label.d.ts +31 -0
- package/dist/components/label/label.js +17 -0
- package/dist/components/link/index.d.ts +3 -0
- package/dist/components/link/link.d.ts +14 -0
- package/dist/components/link/link.js +57 -0
- package/dist/components/link/link.styles.d.ts +89 -0
- package/dist/components/link/link.styles.js +33 -0
- package/dist/components/modal/index.d.ts +3 -0
- package/dist/components/modal/modal.d.ts +33 -0
- package/dist/components/modal/modal.js +56 -0
- package/dist/components/modal/modal.styles.d.ts +61 -0
- package/dist/components/modal/modal.styles.js +14 -0
- package/dist/components/navigation-menu/index.d.ts +3 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +37 -0
- package/dist/components/navigation-menu/navigation-menu.js +138 -0
- package/dist/components/navigation-menu/navigation-menu.styles.d.ts +111 -0
- package/dist/components/navigation-menu/navigation-menu.styles.js +39 -0
- package/dist/components/number-input/index.d.ts +3 -0
- package/dist/components/number-input/number-input.d.ts +30 -0
- package/dist/components/number-input/number-input.js +151 -0
- package/dist/components/number-input/number-input.styles.d.ts +68 -0
- package/dist/components/number-input/number-input.styles.js +35 -0
- package/dist/components/pagination/index.d.ts +4 -0
- package/dist/components/pagination/pagination-range.d.ts +11 -0
- package/dist/components/pagination/pagination-range.js +42 -0
- package/dist/components/pagination/pagination.d.ts +18 -0
- package/dist/components/pagination/pagination.js +94 -0
- package/dist/components/pagination/pagination.styles.d.ts +65 -0
- package/dist/components/pagination/pagination.styles.js +35 -0
- package/dist/components/password-input/index.d.ts +3 -0
- package/dist/components/password-input/password-input.d.ts +20 -0
- package/dist/components/password-input/password-input.js +106 -0
- package/dist/components/password-input/password-input.styles.d.ts +66 -0
- package/dist/components/password-input/password-input.styles.js +21 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/popover.d.ts +52 -0
- package/dist/components/popover/popover.js +35 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/progress.d.ts +29 -0
- package/dist/components/progress/progress.js +108 -0
- package/dist/components/progress/progress.styles.d.ts +236 -0
- package/dist/components/progress/progress.styles.js +69 -0
- package/dist/components/prose/index.d.ts +2 -0
- package/dist/components/prose/prose.d.ts +90 -0
- package/dist/components/prose/prose.js +67 -0
- package/dist/components/radio-group/index.d.ts +3 -0
- package/dist/components/radio-group/radio-group.d.ts +26 -0
- package/dist/components/radio-group/radio-group.js +102 -0
- package/dist/components/radio-group/radio-group.styles.d.ts +80 -0
- package/dist/components/radio-group/radio-group.styles.js +56 -0
- package/dist/components/resizable/index.d.ts +3 -0
- package/dist/components/resizable/resizable.d.ts +17 -0
- package/dist/components/resizable/resizable.js +81 -0
- package/dist/components/resizable/resizable.styles.d.ts +53 -0
- package/dist/components/resizable/resizable.styles.js +19 -0
- package/dist/components/scroll-area/index.d.ts +2 -0
- package/dist/components/scroll-area/scroll-area.d.ts +70 -0
- package/dist/components/scroll-area/scroll-area.js +70 -0
- package/dist/components/section/index.d.ts +2 -0
- package/dist/components/section/section.d.ts +52 -0
- package/dist/components/section/section.js +41 -0
- package/dist/components/segmented-control/index.d.ts +2 -0
- package/dist/components/segmented-control/segmented-control.d.ts +92 -0
- package/dist/components/segmented-control/segmented-control.js +86 -0
- package/dist/components/select/index.d.ts +2 -0
- package/dist/components/select/select.d.ts +85 -0
- package/dist/components/select/select.js +81 -0
- package/dist/components/separator/index.d.ts +2 -0
- package/dist/components/separator/separator.d.ts +40 -0
- package/dist/components/separator/separator.js +27 -0
- package/dist/components/sheet/index.d.ts +3 -0
- package/dist/components/sheet/sheet.d.ts +20 -0
- package/dist/components/sheet/sheet.js +83 -0
- package/dist/components/sheet/sheet.styles.d.ts +101 -0
- package/dist/components/sheet/sheet.styles.js +62 -0
- package/dist/components/skeleton/index.d.ts +2 -0
- package/dist/components/skeleton/skeleton.d.ts +30 -0
- package/dist/components/skeleton/skeleton.js +18 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/slider.d.ts +38 -0
- package/dist/components/slider/slider.js +68 -0
- package/dist/components/slider/slider.styles.d.ts +56 -0
- package/dist/components/slider/slider.styles.js +23 -0
- package/dist/components/spinner/index.d.ts +3 -0
- package/dist/components/spinner/spinner.d.ts +9 -0
- package/dist/components/spinner/spinner.js +36 -0
- package/dist/components/spinner/spinner.styles.d.ts +53 -0
- package/dist/components/spinner/spinner.styles.js +18 -0
- package/dist/components/stack/index.d.ts +2 -0
- package/dist/components/stack/stack.d.ts +109 -0
- package/dist/components/stack/stack.js +62 -0
- package/dist/components/stat-card/index.d.ts +3 -0
- package/dist/components/stat-card/stat-card.d.ts +22 -0
- package/dist/components/stat-card/stat-card.js +82 -0
- package/dist/components/stat-card/stat-card.styles.d.ts +83 -0
- package/dist/components/stat-card/stat-card.styles.js +16 -0
- package/dist/components/stepper/index.d.ts +3 -0
- package/dist/components/stepper/stepper.d.ts +20 -0
- package/dist/components/stepper/stepper.js +100 -0
- package/dist/components/stepper/stepper.styles.d.ts +170 -0
- package/dist/components/stepper/stepper.styles.js +67 -0
- package/dist/components/switch/index.d.ts +2 -0
- package/dist/components/switch/switch.d.ts +51 -0
- package/dist/components/switch/switch.js +43 -0
- package/dist/components/table/index.d.ts +2 -0
- package/dist/components/table/table.d.ts +78 -0
- package/dist/components/table/table.js +82 -0
- package/dist/components/tabs/index.d.ts +2 -0
- package/dist/components/tabs/tabs.d.ts +73 -0
- package/dist/components/tabs/tabs.js +103 -0
- package/dist/components/tag-input/index.d.ts +3 -0
- package/dist/components/tag-input/tag-input.d.ts +30 -0
- package/dist/components/tag-input/tag-input.js +149 -0
- package/dist/components/tag-input/tag-input.styles.d.ts +71 -0
- package/dist/components/tag-input/tag-input.styles.js +29 -0
- package/dist/components/text/index.d.ts +3 -0
- package/dist/components/text/text.d.ts +9 -0
- package/dist/components/text/text.js +25 -0
- package/dist/components/text/text.styles.d.ts +188 -0
- package/dist/components/text/text.styles.js +36 -0
- package/dist/components/textarea/index.d.ts +2 -0
- package/dist/components/textarea/textarea.d.ts +29 -0
- package/dist/components/textarea/textarea.js +23 -0
- package/dist/components/timeline/index.d.ts +3 -0
- package/dist/components/timeline/timeline.d.ts +28 -0
- package/dist/components/timeline/timeline.js +61 -0
- package/dist/components/timeline/timeline.styles.d.ts +110 -0
- package/dist/components/timeline/timeline.styles.js +30 -0
- package/dist/components/toast/index.d.ts +2 -0
- package/dist/components/toast/toast.d.ts +119 -0
- package/dist/components/toast/toast.js +75 -0
- package/dist/components/toggle/index.d.ts +3 -0
- package/dist/components/toggle/toggle.d.ts +20 -0
- package/dist/components/toggle/toggle.js +58 -0
- package/dist/components/toggle/toggle.styles.d.ts +80 -0
- package/dist/components/toggle/toggle.styles.js +34 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/tooltip.d.ts +39 -0
- package/dist/components/tooltip/tooltip.js +29 -0
- package/dist/components/tree-view/index.d.ts +3 -0
- package/dist/components/tree-view/tree-view.d.ts +31 -0
- package/dist/components/tree-view/tree-view.js +192 -0
- package/dist/components/tree-view/tree-view.styles.d.ts +59 -0
- package/dist/components/tree-view/tree-view.styles.js +32 -0
- package/dist/components/visually-hidden/index.d.ts +2 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts +10 -0
- package/dist/components/visually-hidden/visually-hidden.js +16 -0
- package/dist/data-table.d.ts +3 -110
- package/dist/data-table.js +2 -224
- package/dist/form.d.ts +2 -86
- package/dist/form.js +1 -108
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/use-component-config.d.ts +13 -0
- package/dist/hooks/use-component-config.js +22 -0
- package/dist/hooks/use-controllable-state.d.ts +9 -0
- package/dist/hooks/use-controllable-state.js +18 -0
- package/dist/hooks/use-media-query.d.ts +4 -0
- package/dist/hooks/use-media-query.js +13 -0
- package/dist/hooks/use-scrolled.d.ts +4 -0
- package/dist/hooks/use-scrolled.js +17 -0
- package/dist/index.d.ts +223 -6856
- package/dist/index.js +148 -6791
- package/dist/internal/dev.js +12 -0
- package/dist/internal/icons.js +91 -0
- package/dist/motion/active-indicator.d.ts +12 -0
- package/dist/motion/active-indicator.js +26 -0
- package/dist/motion/animated-number.d.ts +21 -0
- package/dist/motion/animated-number.js +88 -0
- package/dist/motion/features.js +10 -0
- package/dist/motion/index.d.ts +10 -0
- package/dist/motion/index.js +10 -0
- package/dist/motion/motion-root.js +48 -0
- package/dist/motion/page-transition.d.ts +16 -0
- package/dist/motion/page-transition.js +23 -0
- package/dist/motion/presence-list.js +46 -0
- package/dist/motion/presence.d.ts +11 -0
- package/dist/motion/presence.js +17 -0
- package/dist/motion/reveal.d.ts +18 -0
- package/dist/motion/reveal.js +37 -0
- package/dist/motion/stagger.d.ts +29 -0
- package/dist/motion/stagger.js +52 -0
- package/dist/motion/use-motion-settings.d.ts +25 -0
- package/dist/motion/use-motion-settings.js +47 -0
- package/dist/motion/use-reveal.d.ts +11 -0
- package/dist/motion/use-reveal.js +41 -0
- package/dist/patterns/app-shell/app-shell-context.d.ts +14 -0
- package/dist/patterns/app-shell/app-shell-context.js +16 -0
- package/dist/patterns/app-shell/app-shell.d.ts +21 -0
- package/dist/patterns/app-shell/app-shell.js +82 -0
- package/dist/patterns/app-shell/app-shell.styles.d.ts +302 -0
- package/dist/patterns/app-shell/app-shell.styles.js +106 -0
- package/dist/patterns/app-shell/index.d.ts +7 -0
- package/dist/patterns/app-shell/navbar.d.ts +29 -0
- package/dist/patterns/app-shell/navbar.js +116 -0
- package/dist/patterns/app-shell/page-header.d.ts +12 -0
- package/dist/patterns/app-shell/page-header.js +38 -0
- package/dist/patterns/app-shell/sidebar.d.ts +31 -0
- package/dist/patterns/app-shell/sidebar.js +141 -0
- package/dist/patterns/async/async.d.ts +40 -0
- package/dist/patterns/async/async.js +61 -0
- package/dist/patterns/async/index.d.ts +3 -0
- package/dist/patterns/async/states.d.ts +68 -0
- package/dist/patterns/async/states.js +116 -0
- package/dist/patterns/chart/cartesian.d.ts +128 -0
- package/dist/patterns/chart/cartesian.js +552 -0
- package/dist/patterns/chart/chart-card.d.ts +39 -0
- package/dist/patterns/chart/chart-card.js +103 -0
- package/dist/patterns/chart/chart-parts.d.ts +53 -0
- package/dist/patterns/chart/chart-parts.js +282 -0
- package/dist/patterns/chart/chart.styles.d.ts +200 -0
- package/dist/patterns/chart/chart.styles.js +43 -0
- package/dist/patterns/chart/export.d.ts +45 -0
- package/dist/patterns/chart/export.js +293 -0
- package/dist/patterns/chart/funnel.d.ts +23 -0
- package/dist/patterns/chart/funnel.js +129 -0
- package/dist/patterns/chart/heatmap.d.ts +37 -0
- package/dist/patterns/chart/heatmap.js +258 -0
- package/dist/patterns/chart/icons.js +39 -0
- package/dist/patterns/chart/pie.d.ts +36 -0
- package/dist/patterns/chart/pie.js +120 -0
- package/dist/patterns/chart/radial.d.ts +75 -0
- package/dist/patterns/chart/radial.js +282 -0
- package/dist/patterns/chart/sankey.d.ts +29 -0
- package/dist/patterns/chart/sankey.js +136 -0
- package/dist/patterns/chart/scatter.d.ts +42 -0
- package/dist/patterns/chart/scatter.js +203 -0
- package/dist/patterns/chart/sparkline.d.ts +20 -0
- package/dist/patterns/chart/sparkline.js +102 -0
- package/dist/patterns/chart/treemap.d.ts +25 -0
- package/dist/patterns/chart/treemap.js +128 -0
- package/dist/patterns/chart/use-element-width.js +23 -0
- package/dist/patterns/data-table/data-table.d.ts +109 -0
- package/dist/patterns/data-table/data-table.js +233 -0
- package/dist/patterns/form/form.d.ts +89 -0
- package/dist/patterns/form/form.js +111 -0
- package/dist/{color-mode-script-KdwItKN2.d.ts → provider/color-mode-script.d.ts} +4 -5
- package/dist/{color-mode-script-Bf7LYkOj.js → provider/color-mode-script.js} +1 -1
- package/dist/provider/color-mode.d.ts +24 -0
- package/dist/provider/color-mode.js +87 -0
- package/dist/{glyph-context-DxGJrdvr.d.ts → provider/glyph-context.d.ts} +13 -12
- package/dist/provider/glyph-context.js +28 -0
- package/dist/provider/glyph-provider.d.ts +37 -0
- package/dist/provider/glyph-provider.js +48 -0
- package/dist/provider/index.d.ts +6 -0
- package/dist/provider/theme-scope.d.ts +12 -0
- package/dist/provider/theme-scope.js +42 -0
- package/dist/provider/theme-style.js +15 -0
- package/dist/react-router.d.ts +1 -1
- package/dist/register.d.ts +57 -0
- package/dist/themes.d.ts +22 -0
- package/dist/themes.js +49 -0
- package/dist/utils/cn.d.ts +6 -0
- package/dist/utils/cn.js +12 -0
- package/dist/utils/compose-refs.js +11 -0
- package/dist/{registry-BGSJoiLq.d.ts → utils/registry.d.ts} +2 -3
- package/dist/utils/styles.js +20 -0
- package/dist/{tv-DuMh7UH2.d.ts → utils/tv.d.ts} +2 -2
- package/dist/utils/tv.js +8 -0
- package/dist/utils/tw-merge-config.js +13 -0
- package/dist/vite.d.ts +1 -1
- package/dist/vite.js +1 -1
- package/package.json +3 -2
- package/src/components/accordion/accordion.styles.ts +1 -1
- package/src/components/alert/alert.styles.ts +1 -1
- package/src/components/alert-dialog/alert-dialog.styles.ts +5 -4
- package/src/components/alert-dialog/confirm-dialog.tsx +42 -0
- package/src/components/alert-dialog/confirm.tsx +12 -31
- package/src/components/aspect-ratio/aspect-ratio.tsx +1 -1
- package/src/components/avatar/avatar.styles.ts +1 -1
- package/src/components/badge/badge.styles.ts +1 -1
- package/src/components/banner/banner.styles.ts +1 -1
- package/src/components/blockquote/blockquote.tsx +1 -1
- package/src/components/breadcrumb/breadcrumb.styles.ts +1 -1
- package/src/components/button/button.styles.ts +4 -2
- package/src/components/calendar/calendar.styles.ts +1 -1
- package/src/components/card/card.styles.ts +1 -1
- package/src/components/carousel/carousel.styles.ts +1 -1
- package/src/components/checkbox/checkbox.tsx +20 -5
- package/src/components/code/code.styles.ts +2 -2
- package/src/components/collapsible/collapsible.tsx +1 -1
- package/src/components/combobox/combobox.styles.ts +5 -2
- package/src/components/command-menu/command-menu.styles.ts +6 -4
- package/src/components/container/container.tsx +1 -1
- package/src/components/context-menu/context-menu.styles.ts +4 -2
- package/src/components/copy-button/copy-button.tsx +1 -1
- package/src/components/date-picker/date-picker.styles.ts +2 -2
- package/src/components/description-list/description-list.styles.ts +1 -1
- package/src/components/dialog/dialog.styles.ts +11 -4
- package/src/components/dropdown-menu/dropdown-menu.styles.ts +3 -3
- package/src/components/eyebrow/eyebrow.styles.ts +1 -1
- package/src/components/field/field.styles.ts +1 -1
- package/src/components/file-upload/file-upload.styles.ts +1 -1
- package/src/components/file-upload/file-upload.tsx +51 -48
- package/src/components/grid/grid.tsx +1 -1
- package/src/components/heading/heading.styles.ts +1 -1
- package/src/components/hover-card/hover-card.tsx +5 -2
- package/src/components/input/input.styles.ts +1 -1
- package/src/components/input-otp/input-otp.styles.ts +1 -1
- package/src/components/kbd/kbd.tsx +1 -1
- package/src/components/label/label.tsx +1 -1
- package/src/components/link/link.styles.ts +1 -1
- package/src/components/modal/modal.styles.ts +1 -1
- package/src/components/navigation-menu/navigation-menu.styles.ts +2 -2
- package/src/components/number-input/number-input.styles.ts +1 -1
- package/src/components/pagination/pagination.styles.ts +6 -4
- package/src/components/pagination/pagination.tsx +14 -1
- package/src/components/password-input/password-input.styles.ts +1 -1
- package/src/components/popover/popover.tsx +1 -1
- package/src/components/progress/progress.styles.ts +2 -2
- package/src/components/prose/prose.tsx +1 -1
- package/src/components/radio-group/radio-group.styles.ts +1 -1
- package/src/components/resizable/resizable.styles.ts +1 -1
- package/src/components/scroll-area/scroll-area.tsx +1 -1
- package/src/components/section/section.tsx +1 -1
- package/src/components/segmented-control/segmented-control.tsx +24 -8
- package/src/components/select/select.tsx +2 -2
- package/src/components/separator/separator.tsx +1 -1
- package/src/components/sheet/sheet.styles.ts +1 -1
- package/src/components/skeleton/skeleton.tsx +1 -1
- package/src/components/slider/slider.styles.ts +1 -1
- package/src/components/spinner/spinner.styles.ts +1 -1
- package/src/components/stack/stack.tsx +1 -1
- package/src/components/stat-card/stat-card.styles.ts +1 -1
- package/src/components/stepper/stepper.styles.ts +1 -1
- package/src/components/switch/switch.tsx +2 -2
- package/src/components/table/table.tsx +1 -1
- package/src/components/tabs/tabs.tsx +46 -15
- package/src/components/tag-input/tag-input.styles.ts +1 -1
- package/src/components/tag-input/tag-input.tsx +27 -18
- package/src/components/text/text.styles.ts +1 -1
- package/src/components/textarea/textarea.tsx +1 -1
- package/src/components/timeline/timeline.styles.ts +1 -1
- package/src/components/toast/toast.tsx +1 -1
- package/src/components/toggle/toggle.styles.ts +1 -1
- package/src/components/tooltip/tooltip.tsx +6 -3
- package/src/components/tree-view/tree-view.styles.ts +1 -1
- package/src/index.ts +3 -0
- package/src/motion/active-indicator.tsx +26 -0
- package/src/motion/animated-number.tsx +113 -0
- package/src/motion/features.ts +7 -0
- package/src/motion/index.ts +9 -0
- package/src/motion/motion-root.tsx +46 -0
- package/src/motion/page-transition.tsx +30 -0
- package/src/motion/presence-list.tsx +42 -0
- package/src/motion/presence.tsx +13 -0
- package/src/motion/reveal.tsx +50 -0
- package/src/motion/stagger.tsx +81 -0
- package/src/motion/use-motion-settings.ts +52 -0
- package/src/motion/use-reveal.ts +54 -0
- package/src/patterns/app-shell/app-shell.styles.ts +18 -11
- package/src/patterns/app-shell/sidebar.tsx +28 -7
- package/src/patterns/async/states.tsx +1 -1
- package/src/patterns/chart/cartesian.tsx +755 -0
- package/src/patterns/chart/chart-card.tsx +148 -0
- package/src/patterns/chart/chart-parts.tsx +323 -58
- package/src/patterns/chart/chart.styles.ts +29 -3
- package/src/patterns/chart/export.ts +334 -0
- package/src/patterns/chart/funnel.tsx +171 -0
- package/src/patterns/chart/heatmap.tsx +339 -0
- package/src/patterns/chart/icons.tsx +44 -0
- package/src/patterns/chart/index.ts +52 -7
- package/src/patterns/chart/pie.tsx +169 -0
- package/src/patterns/chart/radial.tsx +361 -0
- package/src/patterns/chart/sankey.tsx +197 -0
- package/src/patterns/chart/scatter.tsx +254 -0
- package/src/patterns/chart/sparkline.tsx +111 -0
- package/src/patterns/chart/test-utils.tsx +35 -0
- package/src/patterns/chart/treemap.tsx +198 -0
- package/src/patterns/chart/use-element-width.ts +20 -0
- package/src/patterns/data-table/data-table.tsx +1 -1
- package/src/patterns/form/form.tsx +1 -1
- package/src/provider/glyph-context.ts +3 -1
- package/src/provider/glyph-provider.tsx +31 -12
- package/src/provider/theme-scope.tsx +14 -9
- package/src/themes.ts +3 -3
- package/src/utils/styles.ts +17 -3
- package/styles.css +122 -3
- package/dist/field-context-7I-cWvvS.js +0 -267
- package/dist/index-Bi7rZ6ba.d.ts +0 -244
- package/dist/states-IvhjBgna.js +0 -288
- package/dist/tv-DLbT66dC.js +0 -70
- package/src/patterns/chart/chart.tsx +0 -386
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
import { ToggleGroup } from 'radix-ui'
|
|
2
|
-
import { type ReactNode, useContext } from 'react'
|
|
2
|
+
import { type ReactNode, useContext, useId } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
+
import { useControllableState } from '../../hooks/use-controllable-state'
|
|
4
5
|
import { warnOnce } from '../../internal/dev'
|
|
6
|
+
import { ActiveIndicator } from '../../motion/active-indicator'
|
|
5
7
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
6
8
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
7
9
|
import { FieldContext } from '../field/field-context'
|
|
8
10
|
|
|
9
|
-
export const segmentedControlStyles = tv({
|
|
11
|
+
export const segmentedControlStyles = /* @__PURE__ */ tv({
|
|
10
12
|
slots: {
|
|
11
13
|
root: [
|
|
12
|
-
'inline-flex items-center gap-0.5 rounded-md border-border bg-muted p-0.5',
|
|
14
|
+
'isolate inline-flex items-center gap-0.5 rounded-md border-border bg-muted p-0.5',
|
|
13
15
|
themedBorder,
|
|
14
16
|
],
|
|
15
17
|
item: [
|
|
16
|
-
'inline-flex h-full cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-[calc(var(--radius-md)-2px)] px-3 font-medium text-muted-foreground',
|
|
18
|
+
'relative inline-flex h-full cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-[calc(var(--radius-md)-2px)] px-3 font-medium text-muted-foreground',
|
|
17
19
|
transition,
|
|
18
20
|
focusRing,
|
|
19
|
-
'hover:text-foreground data-[state=on]:
|
|
21
|
+
'hover:text-foreground data-[state=on]:text-foreground',
|
|
20
22
|
'disabled:pointer-events-none disabled:opacity-50 [&>svg]:size-4',
|
|
21
23
|
],
|
|
24
|
+
/** The raised thumb that slides to the selected option. */
|
|
25
|
+
indicator:
|
|
26
|
+
'pointer-events-none absolute inset-0 -z-10 rounded-[calc(var(--radius-md)-2px)] bg-raised shadow-xs',
|
|
22
27
|
},
|
|
23
28
|
variants: {
|
|
24
29
|
size: {
|
|
@@ -58,6 +63,12 @@ export function SegmentedControl<T extends string>(inProps: SegmentedControlProp
|
|
|
58
63
|
const { options, value, defaultValue, onValueChange, size, fullWidth, className, ...rest } = props
|
|
59
64
|
const field = useContext(FieldContext)
|
|
60
65
|
const s = segmentedControlStyles({ size, fullWidth })
|
|
66
|
+
const [selected, setSelected] = useControllableState<T | undefined>({
|
|
67
|
+
value,
|
|
68
|
+
defaultValue,
|
|
69
|
+
onChange: (next) => next !== undefined && onValueChange?.(next),
|
|
70
|
+
})
|
|
71
|
+
const indicatorId = `${useId()}-segmented-indicator`
|
|
61
72
|
const labelledBy = rest['aria-labelledby'] ?? (rest['aria-label'] ? undefined : field?.labelId)
|
|
62
73
|
if (!rest['aria-label'] && !labelledBy) {
|
|
63
74
|
warnOnce(
|
|
@@ -70,10 +81,9 @@ export function SegmentedControl<T extends string>(inProps: SegmentedControlProp
|
|
|
70
81
|
<ToggleGroup.Root
|
|
71
82
|
type="single"
|
|
72
83
|
data-slot="segmented-control"
|
|
73
|
-
|
|
74
|
-
{...(defaultValue !== undefined && { defaultValue })}
|
|
84
|
+
value={selected ?? ''}
|
|
75
85
|
// Radix emits '' when the active item is clicked again; a segmented control never deselects.
|
|
76
|
-
onValueChange={(next: string) => next &&
|
|
86
|
+
onValueChange={(next: string) => next && setSelected(next as T)}
|
|
77
87
|
className={s.root({ class: [slots.root, className] })}
|
|
78
88
|
aria-labelledby={labelledBy}
|
|
79
89
|
aria-describedby={describedBy || undefined}
|
|
@@ -87,6 +97,12 @@ export function SegmentedControl<T extends string>(inProps: SegmentedControlProp
|
|
|
87
97
|
className={s.item({ class: slots.item })}
|
|
88
98
|
>
|
|
89
99
|
{option.label}
|
|
100
|
+
{option.value === selected && (
|
|
101
|
+
<ActiveIndicator
|
|
102
|
+
layoutId={indicatorId}
|
|
103
|
+
className={s.indicator({ class: slots.indicator })}
|
|
104
|
+
/>
|
|
105
|
+
)}
|
|
90
106
|
</ToggleGroup.Item>
|
|
91
107
|
))}
|
|
92
108
|
</ToggleGroup.Root>
|
|
@@ -7,7 +7,7 @@ import { tv, type VariantProps } from '../../utils/tv'
|
|
|
7
7
|
import { useFieldControl } from '../field/field-context'
|
|
8
8
|
import { fieldControl } from '../input/input.styles'
|
|
9
9
|
|
|
10
|
-
export const selectStyles = tv({
|
|
10
|
+
export const selectStyles = /* @__PURE__ */ tv({
|
|
11
11
|
slots: {
|
|
12
12
|
trigger: [
|
|
13
13
|
...fieldControl,
|
|
@@ -19,7 +19,7 @@ export const selectStyles = tv({
|
|
|
19
19
|
icon: 'size-4 shrink-0 text-faint-foreground',
|
|
20
20
|
content: [
|
|
21
21
|
popover,
|
|
22
|
-
'max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width)',
|
|
22
|
+
'origin-(--radix-select-content-transform-origin) max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width)',
|
|
23
23
|
],
|
|
24
24
|
viewport: 'p-1',
|
|
25
25
|
item: [
|
|
@@ -3,7 +3,7 @@ import type { ComponentProps } from 'react'
|
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
4
|
import { tv } from '../../utils/tv'
|
|
5
5
|
|
|
6
|
-
export const separatorStyles = tv({
|
|
6
|
+
export const separatorStyles = /* @__PURE__ */ tv({
|
|
7
7
|
slots: { base: 'shrink-0 bg-border' },
|
|
8
8
|
variants: {
|
|
9
9
|
orientation: {
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing, transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const sheetStyles = tv({
|
|
5
|
+
export const sheetStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
overlay:
|
|
8
8
|
'fixed inset-0 z-50 bg-overlay data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out',
|
|
@@ -2,7 +2,7 @@ import type { ComponentProps } from 'react'
|
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import { tv } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const skeletonStyles = tv({
|
|
5
|
+
export const skeletonStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: { base: 'animate-pulse rounded-sm bg-muted' },
|
|
7
7
|
})
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StylesEntry } from '../../utils/registry'
|
|
2
2
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
3
3
|
|
|
4
|
-
export const sliderStyles = tv({
|
|
4
|
+
export const sliderStyles = /* @__PURE__ */ tv({
|
|
5
5
|
slots: {
|
|
6
6
|
wrapper: 'grid w-full gap-1.5',
|
|
7
7
|
root: 'relative flex h-5 w-full touch-none select-none items-center data-disabled:cursor-not-allowed data-disabled:opacity-50',
|
|
@@ -2,7 +2,7 @@ import { Slot } from 'radix-ui'
|
|
|
2
2
|
import type { ComponentProps } from 'react'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const stackStyles = tv({
|
|
5
|
+
export const stackStyles = /* @__PURE__ */ tv({
|
|
6
6
|
base: 'flex',
|
|
7
7
|
variants: {
|
|
8
8
|
direction: { column: 'flex-col', row: 'flex-row' },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StylesEntry } from '../../utils/registry'
|
|
2
2
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
3
3
|
|
|
4
|
-
export const statCardStyles = tv({
|
|
4
|
+
export const statCardStyles = /* @__PURE__ */ tv({
|
|
5
5
|
slots: {
|
|
6
6
|
root: 'gap-2',
|
|
7
7
|
header: 'flex items-center justify-between gap-2',
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const stepperStyles = tv({
|
|
5
|
+
export const stepperStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'flex w-full list-none p-0',
|
|
8
8
|
step: 'relative flex min-w-0',
|
|
@@ -5,7 +5,7 @@ import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
|
5
5
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
6
6
|
import { useFieldControl } from '../field/field-context'
|
|
7
7
|
|
|
8
|
-
export const switchStyles = tv({
|
|
8
|
+
export const switchStyles = /* @__PURE__ */ tv({
|
|
9
9
|
slots: {
|
|
10
10
|
root: [
|
|
11
11
|
'peer inline-flex shrink-0 cursor-pointer items-center rounded-pill border-transparent bg-input p-px',
|
|
@@ -15,7 +15,7 @@ export const switchStyles = tv({
|
|
|
15
15
|
'data-[state=checked]:bg-primary disabled:cursor-not-allowed disabled:opacity-50',
|
|
16
16
|
],
|
|
17
17
|
thumb:
|
|
18
|
-
'pointer-events-none block rounded-pill bg-white shadow-sm transition-
|
|
18
|
+
'pointer-events-none block rounded-pill bg-white shadow-sm transition-[translate] duration-(--glyph-duration-spring) ease-spring data-[state=unchecked]:translate-x-0',
|
|
19
19
|
},
|
|
20
20
|
variants: {
|
|
21
21
|
size: {
|
|
@@ -2,7 +2,7 @@ import type { ComponentProps } from 'react'
|
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import { tv } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const tableStyles = tv({
|
|
5
|
+
export const tableStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
wrapper: 'relative w-full overflow-x-auto',
|
|
8
8
|
table: 'w-full caption-bottom border-collapse text-small tabular-nums',
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { Tabs as TabsPrimitive } from 'radix-ui'
|
|
2
|
-
import { type ComponentProps, createContext, useContext } from 'react'
|
|
2
|
+
import { type ComponentProps, createContext, useContext, useId } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
+
import { useControllableState } from '../../hooks/use-controllable-state'
|
|
5
|
+
import { ActiveIndicator } from '../../motion/active-indicator'
|
|
4
6
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
5
7
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
6
8
|
|
|
7
|
-
export const tabsStyles = tv({
|
|
9
|
+
export const tabsStyles = /* @__PURE__ */ tv({
|
|
8
10
|
slots: {
|
|
9
11
|
root: 'flex flex-col gap-4',
|
|
10
|
-
|
|
12
|
+
// Isolated so the sliding indicator stays under every tab's label while it moves.
|
|
13
|
+
list: 'isolate flex items-center',
|
|
11
14
|
trigger: [
|
|
12
15
|
'relative inline-flex cursor-pointer select-none items-center justify-center gap-2 whitespace-nowrap text-small font-medium text-muted-foreground',
|
|
13
16
|
transition,
|
|
@@ -15,19 +18,21 @@ export const tabsStyles = tv({
|
|
|
15
18
|
'hover:text-foreground data-[state=active]:text-foreground disabled:pointer-events-none disabled:opacity-50',
|
|
16
19
|
'[&>svg]:size-4',
|
|
17
20
|
],
|
|
21
|
+
/** Slides to the active tab. Underline bar or pill background, by variant. */
|
|
22
|
+
indicator: 'pointer-events-none absolute',
|
|
18
23
|
content: 'outline-none',
|
|
19
24
|
},
|
|
20
25
|
variants: {
|
|
21
26
|
variant: {
|
|
22
27
|
underline: {
|
|
23
28
|
list: 'gap-5 border-b border-border',
|
|
24
|
-
trigger:
|
|
25
|
-
|
|
29
|
+
trigger: 'h-9',
|
|
30
|
+
indicator: 'inset-x-0 -bottom-px h-0.5 rounded-pill bg-foreground',
|
|
26
31
|
},
|
|
27
32
|
pill: {
|
|
28
33
|
list: ['inline-flex w-fit gap-0.5 rounded-md border-border bg-muted p-0.5', themedBorder],
|
|
29
|
-
trigger:
|
|
30
|
-
|
|
34
|
+
trigger: 'h-7 rounded-[calc(var(--radius-md)-2px)] px-3',
|
|
35
|
+
indicator: 'inset-0 -z-10 rounded-[calc(var(--radius-md)-2px)] bg-raised shadow-xs',
|
|
31
36
|
},
|
|
32
37
|
},
|
|
33
38
|
},
|
|
@@ -35,17 +40,31 @@ export const tabsStyles = tv({
|
|
|
35
40
|
})
|
|
36
41
|
|
|
37
42
|
type TabsVariants = VariantProps<typeof tabsStyles>
|
|
38
|
-
|
|
43
|
+
interface TabsContextValue extends TabsVariants {
|
|
44
|
+
value?: string
|
|
45
|
+
indicatorId?: string
|
|
46
|
+
}
|
|
47
|
+
const TabsContext = createContext<TabsContextValue>({})
|
|
39
48
|
|
|
40
49
|
export interface TabsProps extends ComponentProps<typeof TabsPrimitive.Root>, TabsVariants {}
|
|
41
50
|
|
|
42
51
|
export function Tabs(inProps: TabsProps) {
|
|
43
|
-
const [
|
|
52
|
+
const [props, slots] = useComponentConfig('Tabs', inProps)
|
|
53
|
+
const { variant, className, value: valueProp, defaultValue, onValueChange, ...rest } = props
|
|
54
|
+
// Tracked here so the active trigger can host the sliding indicator.
|
|
55
|
+
const [value, setValue] = useControllableState({
|
|
56
|
+
value: valueProp,
|
|
57
|
+
defaultValue: defaultValue ?? '',
|
|
58
|
+
onChange: onValueChange,
|
|
59
|
+
})
|
|
60
|
+
const indicatorId = `${useId()}-tabs-indicator`
|
|
44
61
|
return (
|
|
45
|
-
<TabsContext.Provider value={{ variant }}>
|
|
62
|
+
<TabsContext.Provider value={{ variant, value, indicatorId }}>
|
|
46
63
|
<TabsPrimitive.Root
|
|
47
64
|
data-slot="tabs"
|
|
48
65
|
className={tabsStyles({ variant }).root({ class: [slots.root, className] })}
|
|
66
|
+
value={value}
|
|
67
|
+
onValueChange={setValue}
|
|
49
68
|
{...rest}
|
|
50
69
|
/>
|
|
51
70
|
</TabsContext.Provider>
|
|
@@ -53,9 +72,9 @@ export function Tabs(inProps: TabsProps) {
|
|
|
53
72
|
}
|
|
54
73
|
|
|
55
74
|
function useTabsParts() {
|
|
56
|
-
const
|
|
75
|
+
const context = useContext(TabsContext)
|
|
57
76
|
const [, slots] = useComponentConfig('Tabs', {})
|
|
58
|
-
return { s: tabsStyles({ variant }), slots }
|
|
77
|
+
return { s: tabsStyles({ variant: context.variant }), slots, context }
|
|
59
78
|
}
|
|
60
79
|
|
|
61
80
|
export function TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>) {
|
|
@@ -69,14 +88,26 @@ export function TabsList({ className, ...props }: ComponentProps<typeof TabsPrim
|
|
|
69
88
|
)
|
|
70
89
|
}
|
|
71
90
|
|
|
72
|
-
export function TabsTrigger({
|
|
73
|
-
|
|
91
|
+
export function TabsTrigger({
|
|
92
|
+
className,
|
|
93
|
+
children,
|
|
94
|
+
...props
|
|
95
|
+
}: ComponentProps<typeof TabsPrimitive.Trigger>) {
|
|
96
|
+
const { s, slots, context } = useTabsParts()
|
|
74
97
|
return (
|
|
75
98
|
<TabsPrimitive.Trigger
|
|
76
99
|
data-slot="tabs-trigger"
|
|
77
100
|
className={s.trigger({ class: [slots.trigger, className] })}
|
|
78
101
|
{...props}
|
|
79
|
-
|
|
102
|
+
>
|
|
103
|
+
{children}
|
|
104
|
+
{context.indicatorId && context.value === props.value && (
|
|
105
|
+
<ActiveIndicator
|
|
106
|
+
layoutId={context.indicatorId}
|
|
107
|
+
className={s.indicator({ class: slots.indicator })}
|
|
108
|
+
/>
|
|
109
|
+
)}
|
|
110
|
+
</TabsPrimitive.Trigger>
|
|
80
111
|
)
|
|
81
112
|
}
|
|
82
113
|
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
3
3
|
import { fieldControl } from '../input/input.styles'
|
|
4
4
|
|
|
5
|
-
export const tagInputStyles = tv({
|
|
5
|
+
export const tagInputStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'grid gap-1.5',
|
|
8
8
|
frame: [
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ClipboardEvent, type KeyboardEvent, useId, useRef, useState } from 'react'
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import { useControllableState } from '../../hooks/use-controllable-state'
|
|
4
|
+
import { PresenceItem, PresenceList } from '../../motion/presence-list'
|
|
4
5
|
import { useFieldControl } from '../field/field-context'
|
|
5
6
|
import { type TagInputVariants, tagInputStyles } from './tag-input.styles'
|
|
6
7
|
|
|
@@ -147,24 +148,32 @@ export function TagInput(inProps: TagInputProps) {
|
|
|
147
148
|
className={s.frame({ class: slots.frame })}
|
|
148
149
|
onClick={() => inputRef.current?.focus()}
|
|
149
150
|
>
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
151
|
+
<PresenceList>
|
|
152
|
+
{tags.map((tag, index) => (
|
|
153
|
+
<PresenceItem
|
|
154
|
+
as="span"
|
|
155
|
+
// Keyed by value and occurrence, so removing one tag doesn't re-key the rest.
|
|
156
|
+
key={`${tag}-${tags.slice(0, index).filter((t) => t === tag).length}`}
|
|
157
|
+
data-slot="tag"
|
|
158
|
+
className={s.tag({ class: slots.tag })}
|
|
159
|
+
>
|
|
160
|
+
<span className={s.tagLabel({ class: slots.tagLabel })}>{tag}</span>
|
|
161
|
+
{!disabled && (
|
|
162
|
+
<button
|
|
163
|
+
type="button"
|
|
164
|
+
aria-label={`Remove ${tag}`}
|
|
165
|
+
className={s.remove({ class: slots.remove })}
|
|
166
|
+
onClick={(event) => {
|
|
167
|
+
event.stopPropagation()
|
|
168
|
+
remove(index)
|
|
169
|
+
}}
|
|
170
|
+
>
|
|
171
|
+
<XIcon />
|
|
172
|
+
</button>
|
|
173
|
+
)}
|
|
174
|
+
</PresenceItem>
|
|
175
|
+
))}
|
|
176
|
+
</PresenceList>
|
|
168
177
|
<input
|
|
169
178
|
ref={inputRef}
|
|
170
179
|
id={id}
|
|
@@ -4,7 +4,7 @@ import { tv } from '../../utils/tv'
|
|
|
4
4
|
import { useFieldControl } from '../field/field-context'
|
|
5
5
|
import { fieldControl } from '../input/input.styles'
|
|
6
6
|
|
|
7
|
-
export const textareaStyles = tv({
|
|
7
|
+
export const textareaStyles = /* @__PURE__ */ tv({
|
|
8
8
|
slots: {
|
|
9
9
|
base: [
|
|
10
10
|
...fieldControl,
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { themedBorder } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const timelineStyles = tv({
|
|
5
|
+
export const timelineStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'grid',
|
|
8
8
|
item: 'group/item relative grid grid-cols-[auto_1fr] gap-x-3',
|
|
@@ -5,7 +5,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
5
5
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
6
6
|
import { tv } from '../../utils/tv'
|
|
7
7
|
|
|
8
|
-
export const toastStyles = tv({
|
|
8
|
+
export const toastStyles = /* @__PURE__ */ tv({
|
|
9
9
|
slots: {
|
|
10
10
|
toast: [
|
|
11
11
|
'group flex w-(--width) items-start gap-3 rounded-lg border-border bg-raised p-4 text-small text-foreground shadow-lg',
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const toggleStyles = tv({
|
|
5
|
+
export const toggleStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
base: [
|
|
8
8
|
'inline-flex shrink-0 cursor-pointer select-none items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-muted-foreground',
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Tooltip as TooltipPrimitive } from 'radix-ui'
|
|
2
2
|
import type { ComponentProps, ReactNode } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
+
import { popoverMotion } from '../../utils/styles'
|
|
4
5
|
import { tv } from '../../utils/tv'
|
|
5
6
|
|
|
6
|
-
export const tooltipStyles = tv({
|
|
7
|
+
export const tooltipStyles = /* @__PURE__ */ tv({
|
|
7
8
|
slots: {
|
|
8
|
-
content:
|
|
9
|
-
'z-50 max-w-xs
|
|
9
|
+
content: [
|
|
10
|
+
'z-50 max-w-xs origin-(--radix-tooltip-content-transform-origin) rounded-sm bg-secondary px-2 py-1 text-caption text-secondary-foreground shadow-md',
|
|
11
|
+
popoverMotion,
|
|
12
|
+
],
|
|
10
13
|
},
|
|
11
14
|
})
|
|
12
15
|
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const treeViewStyles = tv({
|
|
5
|
+
export const treeViewStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'grid gap-px text-small',
|
|
8
8
|
// Focus and selection are drawn on the item's own row only, never on nested rows.
|
package/src/index.ts
CHANGED
|
@@ -6,8 +6,10 @@ export {
|
|
|
6
6
|
type ColorToken,
|
|
7
7
|
type ComponentOverrides,
|
|
8
8
|
defineTheme,
|
|
9
|
+
type MotionLevel,
|
|
9
10
|
type RadiusToken,
|
|
10
11
|
type ShadowToken,
|
|
12
|
+
type SpringConfig,
|
|
11
13
|
type TextToken,
|
|
12
14
|
type Theme,
|
|
13
15
|
type ThemeInput,
|
|
@@ -87,6 +89,7 @@ export * from './components/tooltip'
|
|
|
87
89
|
export * from './components/tree-view'
|
|
88
90
|
export * from './components/visually-hidden'
|
|
89
91
|
export * from './hooks'
|
|
92
|
+
export * from './motion'
|
|
90
93
|
// Patterns
|
|
91
94
|
export * from './patterns/app-shell'
|
|
92
95
|
export * from './patterns/async'
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { m } from 'motion/react'
|
|
2
|
+
import { useMotionSettings } from './use-motion-settings'
|
|
3
|
+
|
|
4
|
+
interface ActiveIndicatorProps {
|
|
5
|
+
/** Shared by every indicator in one group, so the active one slides between items. */
|
|
6
|
+
layoutId: string
|
|
7
|
+
className?: string | undefined
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The highlight behind (or under) the active item of Tabs, SegmentedControl, Sidebar and
|
|
12
|
+
* similar. Rendered only inside the active item; `motion` animates it from the previous one.
|
|
13
|
+
*/
|
|
14
|
+
export function ActiveIndicator({ layoutId, className }: ActiveIndicatorProps) {
|
|
15
|
+
const { animate } = useMotionSettings()
|
|
16
|
+
if (!animate) return <span aria-hidden="true" data-slot="indicator" className={className} />
|
|
17
|
+
return (
|
|
18
|
+
<m.span
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
data-slot="indicator"
|
|
21
|
+
layoutId={layoutId}
|
|
22
|
+
initial={false}
|
|
23
|
+
className={className}
|
|
24
|
+
/>
|
|
25
|
+
)
|
|
26
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { springEasing, springPosition } from '@glyphui/tokens'
|
|
2
|
+
import { type ComponentProps, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'
|
|
3
|
+
import { cn } from '../utils/cn'
|
|
4
|
+
import { useMotionSettings } from './use-motion-settings'
|
|
5
|
+
|
|
6
|
+
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect
|
|
7
|
+
|
|
8
|
+
export interface AnimatedNumberProps extends Omit<ComponentProps<'span'>, 'children'> {
|
|
9
|
+
value: number
|
|
10
|
+
/** Intl number formatting, e.g. `{ style: 'currency', currency: 'USD' }`. */
|
|
11
|
+
format?: Intl.NumberFormatOptions
|
|
12
|
+
locale?: string
|
|
13
|
+
/** Full control over the text, e.g. your own price formatter. Overrides `format`. */
|
|
14
|
+
formatValue?: (value: number) => string
|
|
15
|
+
/**
|
|
16
|
+
* Where the first count starts. Defaults to 0, counting up once the number scrolls into
|
|
17
|
+
* view. Set it to `value` to skip the first count.
|
|
18
|
+
*/
|
|
19
|
+
from?: number
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A number that springs to each new value: stats, prices, counters. Screen readers get the
|
|
24
|
+
* final value once, not every frame. Shows the final value immediately when motion is off.
|
|
25
|
+
*/
|
|
26
|
+
export function AnimatedNumber({
|
|
27
|
+
value,
|
|
28
|
+
format,
|
|
29
|
+
locale,
|
|
30
|
+
formatValue,
|
|
31
|
+
from = 0,
|
|
32
|
+
className,
|
|
33
|
+
ref,
|
|
34
|
+
...props
|
|
35
|
+
}: AnimatedNumberProps) {
|
|
36
|
+
const { animate, spring } = useMotionSettings()
|
|
37
|
+
const formatter = useMemo(() => new Intl.NumberFormat(locale, format), [locale, format])
|
|
38
|
+
const text = (n: number) => (formatValue ? formatValue(n) : formatter.format(n))
|
|
39
|
+
// Render the real value first: server HTML, tests and no-JS visitors see the right number.
|
|
40
|
+
const [shown, setShown] = useState(value)
|
|
41
|
+
const current = useRef(value)
|
|
42
|
+
const el = useRef<HTMLSpanElement>(null)
|
|
43
|
+
const [armed, setArmed] = useState(false)
|
|
44
|
+
const [inView, setInView] = useState(false)
|
|
45
|
+
|
|
46
|
+
// Before the first paint, rewind to `from` and wait until the number is on screen.
|
|
47
|
+
useIsomorphicLayoutEffect(() => {
|
|
48
|
+
const node = el.current
|
|
49
|
+
if (!node || !animate || typeof IntersectionObserver === 'undefined') return
|
|
50
|
+
current.current = from
|
|
51
|
+
setShown(from)
|
|
52
|
+
setArmed(true)
|
|
53
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
54
|
+
if (entry?.isIntersecting) {
|
|
55
|
+
setInView(true)
|
|
56
|
+
observer.disconnect()
|
|
57
|
+
}
|
|
58
|
+
})
|
|
59
|
+
observer.observe(node)
|
|
60
|
+
return () => observer.disconnect()
|
|
61
|
+
// Only on mount and when motion turns on: later changes to `from` don't restart it.
|
|
62
|
+
}, [animate])
|
|
63
|
+
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (!animate || !armed) {
|
|
66
|
+
current.current = value
|
|
67
|
+
setShown(value)
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
if (!inView) return
|
|
71
|
+
const start = current.current
|
|
72
|
+
if (start === value) return
|
|
73
|
+
const { duration } = springEasing(spring)
|
|
74
|
+
const begin = performance.now()
|
|
75
|
+
let frame = 0
|
|
76
|
+
const tick = (now: number) => {
|
|
77
|
+
const elapsed = Math.min(now - begin, duration)
|
|
78
|
+
const next = start + (value - start) * springPosition(spring, elapsed / 1000)
|
|
79
|
+
current.current = next
|
|
80
|
+
setShown(next)
|
|
81
|
+
if (elapsed < duration) frame = requestAnimationFrame(tick)
|
|
82
|
+
else {
|
|
83
|
+
current.current = value
|
|
84
|
+
setShown(value)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
frame = requestAnimationFrame(tick)
|
|
88
|
+
return () => cancelAnimationFrame(frame)
|
|
89
|
+
}, [value, animate, armed, inView, spring])
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<span
|
|
93
|
+
data-slot="animated-number"
|
|
94
|
+
ref={(node) => {
|
|
95
|
+
el.current = node
|
|
96
|
+
if (typeof ref === 'function') ref(node)
|
|
97
|
+
else if (ref) ref.current = node
|
|
98
|
+
}}
|
|
99
|
+
className={cn('tabular-nums', className)}
|
|
100
|
+
{...props}
|
|
101
|
+
>
|
|
102
|
+
{shown === value ? (
|
|
103
|
+
text(value)
|
|
104
|
+
) : (
|
|
105
|
+
// While counting, screen readers get the final value once, not every frame.
|
|
106
|
+
<>
|
|
107
|
+
<span aria-hidden="true">{text(shown)}</span>
|
|
108
|
+
<span className="sr-only">{text(value)}</span>
|
|
109
|
+
</>
|
|
110
|
+
)}
|
|
111
|
+
</span>
|
|
112
|
+
)
|
|
113
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { m } from 'motion/react'
|
|
2
|
+
export { ActiveIndicator } from './active-indicator'
|
|
3
|
+
export { AnimatedNumber, type AnimatedNumberProps } from './animated-number'
|
|
4
|
+
export { PageTransition, type PageTransitionProps } from './page-transition'
|
|
5
|
+
export { Presence, type PresenceProps } from './presence'
|
|
6
|
+
export { Reveal, type RevealProps } from './reveal'
|
|
7
|
+
export { Stagger, StaggerItem, type StaggerItemProps, type StaggerProps } from './stagger'
|
|
8
|
+
export { type MotionSettings, useMotionSettings } from './use-motion-settings'
|
|
9
|
+
export type { RevealOptions } from './use-reveal'
|