@glyphui/ui 0.3.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 +68 -12
- package/dist/chart.d.ts +14 -202
- package/dist/chart.js +14 -456
- 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-CWZ_FdkD.js → components/field/field.js} +20 -34
- 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 -79
- package/dist/form.js +1 -83
- 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 -6849
- package/dist/index.js +148 -6718
- 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/provider/color-mode-script.d.ts +15 -0
- package/dist/provider/color-mode-script.js +13 -0
- package/dist/provider/color-mode.d.ts +24 -0
- package/dist/provider/color-mode.js +87 -0
- package/dist/provider/glyph-context.d.ts +51 -0
- 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 +18 -0
- package/dist/react-router.js +44 -0
- 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 +27 -0
- package/dist/vite.js +29 -0
- package/fonts.css +10 -0
- package/package.json +33 -5
- 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 +12 -17
- package/src/components/banner/banner.styles.ts +5 -5
- package/src/components/blockquote/blockquote.tsx +1 -1
- package/src/components/breadcrumb/breadcrumb.styles.ts +1 -1
- package/src/components/button/button.styles.ts +6 -2
- package/src/components/calendar/calendar.styles.ts +4 -3
- 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 +5 -5
- package/src/components/eyebrow/eyebrow.styles.ts +2 -2
- package/src/components/field/field-context.ts +2 -0
- package/src/components/field/field.styles.ts +5 -3
- package/src/components/field/field.tsx +25 -4
- package/src/components/file-upload/file-upload.styles.ts +4 -4
- 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 +2 -2
- package/src/components/modal/modal.styles.ts +3 -1
- package/src/components/modal/modal.tsx +30 -5
- package/src/components/navigation-menu/navigation-menu.styles.ts +2 -2
- package/src/components/navigation-menu/navigation-menu.tsx +14 -4
- 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 +4 -4
- package/src/components/popover/popover.tsx +1 -1
- package/src/components/progress/progress.styles.ts +2 -2
- package/src/components/prose/prose.tsx +2 -2
- 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 +24 -2
- package/src/components/section/section.tsx +1 -1
- package/src/components/segmented-control/segmented-control.tsx +40 -9
- 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/slider/slider.tsx +9 -2
- 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 +3 -3
- 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 +2 -2
- package/src/components/tag-input/tag-input.tsx +27 -18
- package/src/components/text/text.styles.ts +5 -5
- 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/integrations/react-router.tsx +39 -0
- package/src/integrations/vite.test-d.ts +6 -0
- package/src/integrations/vite.test.ts +28 -0
- package/src/integrations/vite.ts +33 -0
- package/src/internal/dev.ts +12 -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 +19 -12
- package/src/patterns/app-shell/navbar.tsx +34 -16
- package/src/patterns/app-shell/sidebar.tsx +35 -9
- 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 +330 -57
- 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 +49 -7
- package/src/patterns/form/index.ts +1 -0
- package/src/provider/color-mode-script.ts +28 -0
- package/src/provider/color-mode.tsx +14 -20
- package/src/provider/glyph-context.ts +41 -1
- package/src/provider/glyph-provider.tsx +45 -14
- package/src/provider/index.ts +4 -0
- package/src/provider/theme-scope.tsx +20 -11
- package/src/themes.ts +3 -3
- package/src/utils/styles.ts +17 -3
- package/styles.css +194 -3
- package/dist/field-context-anGPYXbW.js +0 -267
- package/dist/index-BWK4czIG.d.ts +0 -233
- package/dist/states-DR-OoDT-.js +0 -288
- package/dist/tv-DBAGlgXJ.js +0 -58
- package/src/patterns/chart/chart.tsx +0 -369
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Slider as SliderPrimitive } from 'radix-ui'
|
|
2
|
-
import type
|
|
2
|
+
import { type ReactNode, useContext } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
-
import { useFieldControl } from '../field/field-context'
|
|
4
|
+
import { FieldContext, useFieldControl } from '../field/field-context'
|
|
5
5
|
import { sliderStyles } from './slider.styles'
|
|
6
6
|
|
|
7
7
|
export type SliderValue = number | readonly [number, number]
|
|
@@ -31,7 +31,9 @@ export interface SliderProps<V extends SliderValue> {
|
|
|
31
31
|
name?: string
|
|
32
32
|
id?: string
|
|
33
33
|
className?: string
|
|
34
|
+
/** Accessible name. Inside a `Field`, the field's label is used when this is not set. */
|
|
34
35
|
'aria-label'?: string
|
|
36
|
+
'aria-labelledby'?: string
|
|
35
37
|
'aria-describedby'?: string
|
|
36
38
|
'aria-invalid'?: boolean
|
|
37
39
|
/** Accessible names for range thumbs. Default: "Minimum", "Maximum". */
|
|
@@ -61,9 +63,13 @@ export function Slider<V extends SliderValue = number>(inProps: SliderProps<V>)
|
|
|
61
63
|
className,
|
|
62
64
|
thumbLabels = ['Minimum', 'Maximum'],
|
|
63
65
|
'aria-label': ariaLabel,
|
|
66
|
+
'aria-labelledby': ariaLabelledBy,
|
|
64
67
|
'aria-describedby': ariaDescribedBy,
|
|
65
68
|
'aria-invalid': ariaInvalid,
|
|
66
69
|
} = props
|
|
70
|
+
const field = useContext(FieldContext)
|
|
71
|
+
// Thumbs are not labelable elements, so a Field's <label for> can't name them.
|
|
72
|
+
const labelledBy = ariaLabelledBy ?? (ariaLabel ? undefined : field?.labelId)
|
|
67
73
|
const isRange = Array.isArray(value ?? defaultValue)
|
|
68
74
|
const fromArray = (next: number[]) => (isRange ? [next[0], next[1]] : next[0]) as V
|
|
69
75
|
const current = toArray(value) ?? toArray(defaultValue) ?? [min]
|
|
@@ -97,6 +103,7 @@ export function Slider<V extends SliderValue = number>(inProps: SliderProps<V>)
|
|
|
97
103
|
key={index}
|
|
98
104
|
id={index === 0 ? id : undefined}
|
|
99
105
|
aria-label={isRange ? thumbLabels[index] : ariaLabel}
|
|
106
|
+
aria-labelledby={isRange ? undefined : labelledBy}
|
|
100
107
|
aria-describedby={ariaDescribedBy}
|
|
101
108
|
aria-invalid={ariaInvalid}
|
|
102
109
|
className={s.thumb({ class: slots.thumb })}
|
|
@@ -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',
|
|
@@ -41,7 +41,7 @@ export const stepperStyles = tv({
|
|
|
41
41
|
title: 'text-foreground',
|
|
42
42
|
},
|
|
43
43
|
current: {
|
|
44
|
-
indicator: 'border-primary bg-surface text-primary ring-4 ring-primary/15',
|
|
44
|
+
indicator: 'border-primary bg-surface text-primary-text ring-4 ring-primary/15',
|
|
45
45
|
connector: 'bg-border',
|
|
46
46
|
title: 'text-foreground',
|
|
47
47
|
},
|
|
@@ -53,7 +53,7 @@ export const stepperStyles = tv({
|
|
|
53
53
|
error: {
|
|
54
54
|
indicator: 'border-danger bg-danger text-danger-foreground',
|
|
55
55
|
connector: 'bg-border',
|
|
56
|
-
title: 'text-danger',
|
|
56
|
+
title: 'text-danger-text',
|
|
57
57
|
},
|
|
58
58
|
},
|
|
59
59
|
clickable: {
|
|
@@ -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: [
|
|
@@ -18,7 +18,7 @@ export const tagInputStyles = tv({
|
|
|
18
18
|
'inline-flex size-4 shrink-0 cursor-pointer items-center justify-center rounded-pill text-muted-foreground hover:bg-border-strong/40 hover:text-foreground focus-visible:outline-2 focus-visible:outline-ring [&>svg]:size-3',
|
|
19
19
|
input:
|
|
20
20
|
'h-7 min-w-24 flex-1 bg-transparent px-1 text-foreground outline-none placeholder:text-faint-foreground disabled:cursor-not-allowed',
|
|
21
|
-
message: 'text-small font-medium text-danger',
|
|
21
|
+
message: 'text-small font-medium text-danger-text',
|
|
22
22
|
},
|
|
23
23
|
variants: {
|
|
24
24
|
size: {
|
|
@@ -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}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
2
2
|
|
|
3
|
-
export const textStyles = tv({
|
|
3
|
+
export const textStyles = /* @__PURE__ */ tv({
|
|
4
4
|
slots: { base: '' },
|
|
5
5
|
variants: {
|
|
6
6
|
size: {
|
|
@@ -13,10 +13,10 @@ export const textStyles = tv({
|
|
|
13
13
|
default: { base: 'text-foreground' },
|
|
14
14
|
muted: { base: 'text-muted-foreground' },
|
|
15
15
|
faint: { base: 'text-faint-foreground' },
|
|
16
|
-
primary: { base: 'text-primary' },
|
|
17
|
-
success: { base: 'text-success' },
|
|
18
|
-
warning: { base: 'text-warning' },
|
|
19
|
-
danger: { base: 'text-danger' },
|
|
16
|
+
primary: { base: 'text-primary-text' },
|
|
17
|
+
success: { base: 'text-success-text' },
|
|
18
|
+
warning: { base: 'text-warning-text' },
|
|
19
|
+
danger: { base: 'text-danger-text' },
|
|
20
20
|
},
|
|
21
21
|
weight: {
|
|
22
22
|
regular: { base: 'font-normal' },
|
|
@@ -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,39 @@
|
|
|
1
|
+
import { Link, useLocation } from 'react-router'
|
|
2
|
+
import type { GlyphRouter, IsActiveOptions, LinkComponentProps } from '../provider/glyph-context'
|
|
3
|
+
|
|
4
|
+
const isOutsideApp = (href: string) =>
|
|
5
|
+
href.startsWith('#') || href.startsWith('//') || /^[a-z][a-z\d+.-]*:/i.test(href)
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* React Router's `Link`, taking Glyph's `href` prop. Hash links, external URLs and `mailto:`
|
|
9
|
+
* stay plain anchors, so in-page anchors scroll and external links leave the app.
|
|
10
|
+
*/
|
|
11
|
+
export function RouterLink({ href, ...props }: LinkComponentProps) {
|
|
12
|
+
if (isOutsideApp(href)) return <a href={href} {...props} />
|
|
13
|
+
return <Link to={href} {...props} />
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const trimSlash = (path: string) => (path.length > 1 ? path.replace(/\/+$/, '') : path)
|
|
17
|
+
|
|
18
|
+
/** Whether an in-app `href` matches a pathname, with React Router's `NavLink` semantics. */
|
|
19
|
+
export function matchPath(href: string, pathname: string, { end = false }: IsActiveOptions = {}) {
|
|
20
|
+
// Hash links, external URLs and protocol links never mark an item active.
|
|
21
|
+
if (!href || isOutsideApp(href)) return false
|
|
22
|
+
const target = trimSlash(new URL(href, 'http://glyph.local').pathname)
|
|
23
|
+
const current = trimSlash(pathname)
|
|
24
|
+
if (end || target === '/') return current === target
|
|
25
|
+
return current === target || current.startsWith(`${target}/`)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Marks a link active when the current location matches it, like React Router's `NavLink`. */
|
|
29
|
+
export function useRouterIsActive(href: string, options?: IsActiveOptions): boolean {
|
|
30
|
+
const { pathname } = useLocation()
|
|
31
|
+
return matchPath(href, pathname, options)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Connects Glyph's navigation to React Router (v7 or later):
|
|
36
|
+
* `<GlyphProvider router={reactRouter}>`. Links render client-side, and Sidebar, Navbar
|
|
37
|
+
* and NavigationMenu items mark the current page automatically. Must render inside a router.
|
|
38
|
+
*/
|
|
39
|
+
export const reactRouter: GlyphRouter = { Link: RouterLink, useIsActive: useRouterIsActive }
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { getColorModeScript } from '../provider/color-mode-script'
|
|
3
|
+
import { glyphColorMode } from './vite'
|
|
4
|
+
|
|
5
|
+
describe('glyphColorMode', () => {
|
|
6
|
+
it('prepends the color-mode script to the head before other transforms', () => {
|
|
7
|
+
const plugin = glyphColorMode()
|
|
8
|
+
expect(plugin.name).toBe('glyph:color-mode')
|
|
9
|
+
expect(plugin.transformIndexHtml.order).toBe('pre')
|
|
10
|
+
expect(plugin.transformIndexHtml.handler()).toEqual([
|
|
11
|
+
{ tag: 'script', children: getColorModeScript(), injectTo: 'head-prepend' },
|
|
12
|
+
])
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('uses the same options as GlyphProvider', () => {
|
|
16
|
+
const [tag] = glyphColorMode({
|
|
17
|
+
defaultMode: 'dark',
|
|
18
|
+
storageKey: 'acme-mode',
|
|
19
|
+
}).transformIndexHtml.handler()
|
|
20
|
+
expect(tag?.children).toContain('"acme-mode"')
|
|
21
|
+
expect(tag?.children).toContain('d="dark"')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('skips localStorage when persistence is off', () => {
|
|
25
|
+
const [tag] = glyphColorMode({ storageKey: null }).transformIndexHtml.handler()
|
|
26
|
+
expect(tag?.children).not.toContain('localStorage')
|
|
27
|
+
})
|
|
28
|
+
})
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ColorModeOptions, getColorModeScript } from '../provider/color-mode-script'
|
|
2
|
+
|
|
3
|
+
/** The subset of Vite's `Plugin` this plugin uses, so `vite` stays an optional peer. */
|
|
4
|
+
export interface GlyphVitePlugin {
|
|
5
|
+
name: string
|
|
6
|
+
transformIndexHtml: {
|
|
7
|
+
order: 'pre'
|
|
8
|
+
handler: () => { tag: 'script'; children: string; injectTo: 'head-prepend' }[]
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Injects Glyph's color-mode script into `index.html` so dark-mode visitors never see a
|
|
14
|
+
* light flash. Pass the same `defaultMode` and `storageKey` as `GlyphProvider`.
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* // vite.config.ts
|
|
18
|
+
* import { glyphColorMode } from '@glyphui/ui/vite'
|
|
19
|
+
* export default defineConfig({ plugins: [react(), tailwindcss(), glyphColorMode()] })
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function glyphColorMode(options: ColorModeOptions = {}): GlyphVitePlugin {
|
|
23
|
+
const script = getColorModeScript(options)
|
|
24
|
+
return {
|
|
25
|
+
name: 'glyph:color-mode',
|
|
26
|
+
transformIndexHtml: {
|
|
27
|
+
order: 'pre',
|
|
28
|
+
handler: () => [{ tag: 'script', children: script, injectTo: 'head-prepend' }],
|
|
29
|
+
},
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type { ColorModeOptions }
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Bundlers replace process.env.NODE_ENV; the typeof guard keeps unbundled browsers safe.
|
|
2
|
+
declare const process: { env: { NODE_ENV?: string } } | undefined
|
|
3
|
+
|
|
4
|
+
const warned = new Set<string>()
|
|
5
|
+
|
|
6
|
+
/** Logs a console warning once per key, in development only. */
|
|
7
|
+
export function warnOnce(key: string, message: string): void {
|
|
8
|
+
if (typeof process === 'undefined' || process.env.NODE_ENV === 'production') return
|
|
9
|
+
if (warned.has(key)) return
|
|
10
|
+
warned.add(key)
|
|
11
|
+
console.warn(`[glyph] ${message}`)
|
|
12
|
+
}
|
|
@@ -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
|
+
}
|