@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,6 +1,6 @@
|
|
|
1
1
|
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema'
|
|
2
2
|
import type { StandardSchemaV1 } from '@standard-schema/spec'
|
|
3
|
-
import type
|
|
3
|
+
import { type ComponentProps, type MouseEvent, type ReactNode, useCallback } from 'react'
|
|
4
4
|
import {
|
|
5
5
|
type Control,
|
|
6
6
|
Controller,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
type Resolver,
|
|
12
12
|
type UseFormProps,
|
|
13
13
|
type UseFormReturn,
|
|
14
|
+
useFormContext,
|
|
14
15
|
useFormState,
|
|
15
16
|
useForm as useHookForm,
|
|
16
17
|
} from 'react-hook-form'
|
|
@@ -62,12 +63,29 @@ export interface FormProps<TInput extends FieldValues, TOutput>
|
|
|
62
63
|
onSubmit: (values: TOutput) => SubmitResult<TInput> | Promise<SubmitResult<TInput>>
|
|
63
64
|
}
|
|
64
65
|
|
|
66
|
+
// biome-ignore lint/suspicious/noExplicitAny: keyed by any form's control object
|
|
67
|
+
type AnyControl = Control<any, any, any>
|
|
68
|
+
|
|
69
|
+
/** The rendered `<form>` of each form, so a FormSubmit outside it can submit it. */
|
|
70
|
+
const formElements = new WeakMap<AnyControl, HTMLFormElement>()
|
|
71
|
+
|
|
65
72
|
export function Form<TInput extends FieldValues, TOutput>({
|
|
66
73
|
form,
|
|
67
74
|
onSubmit,
|
|
68
75
|
children,
|
|
76
|
+
ref,
|
|
69
77
|
...props
|
|
70
78
|
}: FormProps<TInput, TOutput>) {
|
|
79
|
+
const control = form.control as AnyControl
|
|
80
|
+
const registerElement = useCallback(
|
|
81
|
+
(element: HTMLFormElement | null) => {
|
|
82
|
+
if (element) formElements.set(control, element)
|
|
83
|
+
else formElements.delete(control)
|
|
84
|
+
if (typeof ref === 'function') ref(element)
|
|
85
|
+
else if (ref) ref.current = element
|
|
86
|
+
},
|
|
87
|
+
[control, ref],
|
|
88
|
+
)
|
|
71
89
|
const submit = form.handleSubmit(async (values) => {
|
|
72
90
|
try {
|
|
73
91
|
const result = await onSubmit(values)
|
|
@@ -85,7 +103,7 @@ export function Form<TInput extends FieldValues, TOutput>({
|
|
|
85
103
|
|
|
86
104
|
return (
|
|
87
105
|
<FormProvider {...form}>
|
|
88
|
-
<form noValidate onSubmit={submit} {...props}>
|
|
106
|
+
<form noValidate onSubmit={submit} ref={registerElement} {...props}>
|
|
89
107
|
{children}
|
|
90
108
|
</form>
|
|
91
109
|
</FormProvider>
|
|
@@ -122,15 +140,39 @@ export function FormField<TInput extends FieldValues, TName extends FieldPath<TI
|
|
|
122
140
|
)
|
|
123
141
|
}
|
|
124
142
|
|
|
143
|
+
export interface FormSubmitProps extends Omit<ButtonProps, 'type' | 'form'> {
|
|
144
|
+
/**
|
|
145
|
+
* The form to submit, for a button outside `<Form>` such as a Modal footer:
|
|
146
|
+
* `<FormSubmit form={form}>`. Not needed inside `<Form>`.
|
|
147
|
+
*/
|
|
148
|
+
// biome-ignore lint/suspicious/noExplicitAny: accepts any form regardless of its value types
|
|
149
|
+
form?: UseFormReturn<any, any, any>
|
|
150
|
+
}
|
|
151
|
+
|
|
125
152
|
/** Submit button that shows progress while the form submits. */
|
|
126
|
-
export function FormSubmit(props:
|
|
127
|
-
const
|
|
128
|
-
|
|
153
|
+
export function FormSubmit({ form, onClick, ...props }: FormSubmitProps) {
|
|
154
|
+
const context = useFormContext()
|
|
155
|
+
const control = (form ?? context)?.control
|
|
156
|
+
if (!control) {
|
|
157
|
+
throw new Error(
|
|
158
|
+
'FormSubmit must be inside <Form> or receive form={form}, e.g. <FormSubmit form={form}> in a Modal footer.',
|
|
159
|
+
)
|
|
160
|
+
}
|
|
161
|
+
const { isSubmitting } = useFormState({ control })
|
|
162
|
+
|
|
163
|
+
if (!form) return <Button type="submit" loading={isSubmitting} onClick={onClick} {...props} />
|
|
164
|
+
|
|
165
|
+
// Outside <Form>, submit its element explicitly so validation and onSubmit run as usual.
|
|
166
|
+
const submitOutside = (event: MouseEvent<HTMLButtonElement>) => {
|
|
167
|
+
onClick?.(event)
|
|
168
|
+
if (!event.defaultPrevented) formElements.get(control)?.requestSubmit()
|
|
169
|
+
}
|
|
170
|
+
return <Button type="button" loading={isSubmitting} onClick={submitOutside} {...props} />
|
|
129
171
|
}
|
|
130
172
|
|
|
131
|
-
export const formErrorStyles = tv({
|
|
173
|
+
export const formErrorStyles = /* @__PURE__ */ tv({
|
|
132
174
|
slots: {
|
|
133
|
-
base: 'flex items-start gap-2 rounded-md border border-danger/30 bg-danger/8 px-3 py-2.5 text-small text-danger',
|
|
175
|
+
base: 'flex items-start gap-2 rounded-md border border-danger/30 bg-danger/8 px-3 py-2.5 text-small text-danger-text',
|
|
134
176
|
icon: 'mt-0.5 size-4 shrink-0',
|
|
135
177
|
},
|
|
136
178
|
})
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ColorMode } from '@glyphui/tokens'
|
|
2
|
+
|
|
3
|
+
// React-free on purpose: the Vite plugin imports this module in Node.
|
|
4
|
+
|
|
5
|
+
export type ColorModePreference = ColorMode | 'system'
|
|
6
|
+
|
|
7
|
+
export interface ColorModeOptions {
|
|
8
|
+
/** Used when nothing is stored yet. */
|
|
9
|
+
defaultMode?: ColorModePreference
|
|
10
|
+
/** localStorage key. Set to `null` to disable persistence. */
|
|
11
|
+
storageKey?: string | null
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const DARK_QUERY = '(prefers-color-scheme: dark)'
|
|
15
|
+
export const DEFAULT_STORAGE_KEY = 'glyph-mode'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A tiny inline script that sets `data-mode` on `<html>` before first paint, so dark-mode
|
|
19
|
+
* visitors never see a light flash. Use the same options as `GlyphProvider`.
|
|
20
|
+
*/
|
|
21
|
+
export function getColorModeScript({
|
|
22
|
+
defaultMode = 'system',
|
|
23
|
+
storageKey = DEFAULT_STORAGE_KEY,
|
|
24
|
+
}: ColorModeOptions = {}): string {
|
|
25
|
+
return `(function(){try{var d=${JSON.stringify(defaultMode)},m=null;${
|
|
26
|
+
storageKey ? `m=localStorage.getItem(${JSON.stringify(storageKey)});` : ''
|
|
27
|
+
}if(m!=='light'&&m!=='dark'&&m!=='system')m=d;if(m==='system')m=matchMedia('${DARK_QUERY}').matches?'dark':'light';var r=document.documentElement;r.dataset.mode=m;r.style.colorScheme=m}catch(e){}})()`
|
|
28
|
+
}
|
|
@@ -8,8 +8,19 @@ import {
|
|
|
8
8
|
useMemo,
|
|
9
9
|
useState,
|
|
10
10
|
} from 'react'
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
import {
|
|
12
|
+
type ColorModeOptions,
|
|
13
|
+
type ColorModePreference,
|
|
14
|
+
DARK_QUERY,
|
|
15
|
+
DEFAULT_STORAGE_KEY,
|
|
16
|
+
getColorModeScript,
|
|
17
|
+
} from './color-mode-script'
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
type ColorModeOptions,
|
|
21
|
+
type ColorModePreference,
|
|
22
|
+
getColorModeScript,
|
|
23
|
+
} from './color-mode-script'
|
|
13
24
|
|
|
14
25
|
export interface ColorModeContextValue {
|
|
15
26
|
/** What the user chose. */
|
|
@@ -21,16 +32,8 @@ export interface ColorModeContextValue {
|
|
|
21
32
|
|
|
22
33
|
const ColorModeContext = createContext<ColorModeContextValue | null>(null)
|
|
23
34
|
|
|
24
|
-
const DARK_QUERY = '(prefers-color-scheme: dark)'
|
|
25
35
|
const isBrowser = typeof window !== 'undefined'
|
|
26
36
|
|
|
27
|
-
export interface ColorModeOptions {
|
|
28
|
-
/** Used when nothing is stored yet. */
|
|
29
|
-
defaultMode?: ColorModePreference
|
|
30
|
-
/** localStorage key. Set to `null` to disable persistence. */
|
|
31
|
-
storageKey?: string | null
|
|
32
|
-
}
|
|
33
|
-
|
|
34
37
|
function readStoredMode(storageKey: string | null): ColorModePreference | null {
|
|
35
38
|
if (!isBrowser || !storageKey) return null
|
|
36
39
|
try {
|
|
@@ -59,7 +62,7 @@ function suppressTransitions(): () => void {
|
|
|
59
62
|
export function ColorModeProvider({
|
|
60
63
|
children,
|
|
61
64
|
defaultMode = 'system',
|
|
62
|
-
storageKey =
|
|
65
|
+
storageKey = DEFAULT_STORAGE_KEY,
|
|
63
66
|
}: ColorModeOptions & { children: ReactNode }) {
|
|
64
67
|
const [mode, setModeState] = useState<ColorModePreference>(
|
|
65
68
|
() => readStoredMode(storageKey) ?? defaultMode,
|
|
@@ -112,15 +115,6 @@ export function useColorMode(): ColorModeContextValue {
|
|
|
112
115
|
* Inline script that sets `data-mode` on `<html>` before first paint, so a dark-mode
|
|
113
116
|
* visitor never sees a light flash. Put it in `<head>`.
|
|
114
117
|
*/
|
|
115
|
-
export function getColorModeScript({
|
|
116
|
-
defaultMode = 'system',
|
|
117
|
-
storageKey = 'glyph-mode',
|
|
118
|
-
}: ColorModeOptions = {}): string {
|
|
119
|
-
return `(function(){try{var d=${JSON.stringify(defaultMode)},m=null;${
|
|
120
|
-
storageKey ? `m=localStorage.getItem(${JSON.stringify(storageKey)});` : ''
|
|
121
|
-
}if(m!=='light'&&m!=='dark'&&m!=='system')m=d;if(m==='system')m=matchMedia('${DARK_QUERY}').matches?'dark':'light';var r=document.documentElement;r.dataset.mode=m;r.style.colorScheme=m}catch(e){}})()`
|
|
122
|
-
}
|
|
123
|
-
|
|
124
118
|
/** `<script>` element version of `getColorModeScript` for SSR frameworks. */
|
|
125
119
|
export function ColorModeScript(props: ColorModeOptions) {
|
|
126
120
|
return (
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Theme } from '@glyphui/tokens'
|
|
1
|
+
import type { MotionLevel, Theme } from '@glyphui/tokens'
|
|
2
2
|
import {
|
|
3
3
|
createContext,
|
|
4
4
|
type ElementType,
|
|
@@ -22,9 +22,31 @@ export interface LinkComponentProps {
|
|
|
22
22
|
*/
|
|
23
23
|
export type LinkComponent = ElementType<LinkComponentProps>
|
|
24
24
|
|
|
25
|
+
export interface IsActiveOptions {
|
|
26
|
+
/** Match only this exact path, not its children. Default false. */
|
|
27
|
+
end?: boolean
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A hook that reports whether `href` is the current location. Glyph calls it once per
|
|
32
|
+
* navigation item on every render, so it must follow the rules of hooks.
|
|
33
|
+
*/
|
|
34
|
+
export type UseIsActive = (href: string, options?: IsActiveOptions) => boolean
|
|
35
|
+
|
|
36
|
+
/** Connects Glyph's navigation components to your router. */
|
|
37
|
+
export interface GlyphRouter {
|
|
38
|
+
/** Renders links client-side. */
|
|
39
|
+
Link: LinkComponent
|
|
40
|
+
/** Marks Sidebar, Navbar and NavigationMenu items active automatically. */
|
|
41
|
+
useIsActive?: UseIsActive
|
|
42
|
+
}
|
|
43
|
+
|
|
25
44
|
export interface GlyphContextValue {
|
|
26
45
|
theme: Theme
|
|
27
46
|
linkComponent: LinkComponent
|
|
47
|
+
useIsActive: UseIsActive
|
|
48
|
+
/** Overrides the theme's motion level for the whole app. */
|
|
49
|
+
motion?: MotionLevel | undefined
|
|
28
50
|
}
|
|
29
51
|
|
|
30
52
|
export const GlyphContext = createContext<GlyphContextValue | null>(null)
|
|
@@ -40,3 +62,21 @@ export function useGlyph(): GlyphContextValue {
|
|
|
40
62
|
export function useLinkComponent(): LinkComponent {
|
|
41
63
|
return useContext(GlyphContext)?.linkComponent ?? 'a'
|
|
42
64
|
}
|
|
65
|
+
|
|
66
|
+
export const neverActive: UseIsActive = () => false
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Whether `href` is the current page, using the router passed to `GlyphProvider`.
|
|
70
|
+
* Returns `explicit` when it is set, so an `active` prop always wins.
|
|
71
|
+
*/
|
|
72
|
+
export function useIsActive(
|
|
73
|
+
href: string | undefined,
|
|
74
|
+
options?: IsActiveOptions & { explicit?: boolean | undefined },
|
|
75
|
+
): boolean {
|
|
76
|
+
const isActive = useContext(GlyphContext)?.useIsActive ?? neverActive
|
|
77
|
+
const { explicit, ...matchOptions } = options ?? {}
|
|
78
|
+
// Always call the router hook so the hook order never changes between renders.
|
|
79
|
+
const matched = isActive(href ?? '', matchOptions)
|
|
80
|
+
if (explicit !== undefined) return explicit
|
|
81
|
+
return href ? matched : false
|
|
82
|
+
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import type { Theme } from '@glyphui/tokens'
|
|
1
|
+
import type { MotionLevel, Theme } from '@glyphui/tokens'
|
|
2
2
|
import { Tooltip } from 'radix-ui'
|
|
3
|
-
import { type ReactNode, useMemo } from 'react'
|
|
3
|
+
import { lazy, type ReactNode, Suspense, useMemo } from 'react'
|
|
4
4
|
import { ConfirmProvider } from '../components/alert-dialog/confirm'
|
|
5
|
-
import {
|
|
5
|
+
import type { ToasterProps } from '../components/toast/toast'
|
|
6
|
+
import { MotionRootAttribute, MotionScope } from '../motion/motion-root'
|
|
6
7
|
import { glyph } from '../themes'
|
|
7
8
|
import { type ColorModePreference, ColorModeProvider } from './color-mode'
|
|
8
|
-
import { GlyphContext, type LinkComponent } from './glyph-context'
|
|
9
|
+
import { GlyphContext, type GlyphRouter, type LinkComponent, neverActive } from './glyph-context'
|
|
9
10
|
import { ThemeStyle } from './theme-style'
|
|
10
11
|
|
|
12
|
+
// Only apps that turn on `toaster` load the toast UI.
|
|
13
|
+
const Toaster = lazy(() =>
|
|
14
|
+
import('../components/toast/toast').then((m) => ({ default: m.Toaster })),
|
|
15
|
+
)
|
|
16
|
+
|
|
11
17
|
export interface GlyphProviderProps {
|
|
12
18
|
children: ReactNode
|
|
13
19
|
/** The theme for the whole app. Defaults to the `glyph` preset. */
|
|
@@ -16,13 +22,24 @@ export interface GlyphProviderProps {
|
|
|
16
22
|
defaultMode?: ColorModePreference
|
|
17
23
|
/** localStorage key for the user's color mode. `null` disables persistence. */
|
|
18
24
|
storageKey?: string | null
|
|
19
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* Your router: its link component, plus an optional `useIsActive` hook that marks the
|
|
27
|
+
* current page in Sidebar, Navbar and NavigationMenu. React Router:
|
|
28
|
+
* `import { reactRouter } from '@glyphui/ui/react-router'`.
|
|
29
|
+
*/
|
|
30
|
+
router?: GlyphRouter
|
|
31
|
+
/** Your router's link only. Prefer `router`, which also handles active items. */
|
|
20
32
|
linkComponent?: LinkComponent
|
|
21
33
|
/**
|
|
22
34
|
* Mounts a themed `<Toaster />` so `toast()` works anywhere. `true` for defaults, or pass
|
|
23
35
|
* Toaster props (e.g. `{ position: 'top-center' }`). Off by default.
|
|
24
36
|
*/
|
|
25
37
|
toaster?: boolean | ToasterProps
|
|
38
|
+
/**
|
|
39
|
+
* Overrides the theme's motion level everywhere, e.g. `"none"` in tests or for a user
|
|
40
|
+
* setting. Visitors who ask for reduced motion never get animation either way.
|
|
41
|
+
*/
|
|
42
|
+
motion?: MotionLevel
|
|
26
43
|
}
|
|
27
44
|
|
|
28
45
|
/** Provides the theme, color mode, tooltips, `useConfirm()` and (optionally) toasts. Render once at the root. */
|
|
@@ -31,10 +48,17 @@ export function GlyphProvider({
|
|
|
31
48
|
theme = glyph,
|
|
32
49
|
defaultMode,
|
|
33
50
|
storageKey,
|
|
34
|
-
|
|
51
|
+
router,
|
|
52
|
+
linkComponent,
|
|
35
53
|
toaster = false,
|
|
54
|
+
motion,
|
|
36
55
|
}: GlyphProviderProps) {
|
|
37
|
-
const
|
|
56
|
+
const Link = router?.Link ?? linkComponent ?? 'a'
|
|
57
|
+
const useIsActive = router?.useIsActive ?? neverActive
|
|
58
|
+
const value = useMemo(
|
|
59
|
+
() => ({ theme, linkComponent: Link, useIsActive, motion }),
|
|
60
|
+
[theme, Link, useIsActive, motion],
|
|
61
|
+
)
|
|
38
62
|
return (
|
|
39
63
|
<ColorModeProvider
|
|
40
64
|
{...(defaultMode !== undefined && { defaultMode })}
|
|
@@ -42,13 +66,20 @@ export function GlyphProvider({
|
|
|
42
66
|
>
|
|
43
67
|
<GlyphContext.Provider value={value}>
|
|
44
68
|
<ThemeStyle theme={theme} />
|
|
45
|
-
<
|
|
46
|
-
|
|
47
|
-
<
|
|
48
|
-
{
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
69
|
+
<MotionRootAttribute />
|
|
70
|
+
<MotionScope>
|
|
71
|
+
<Tooltip.Provider delayDuration={300}>
|
|
72
|
+
{/* useConfirm() works anywhere without setup; the dialog only mounts while open. */}
|
|
73
|
+
<ConfirmProvider>
|
|
74
|
+
{children}
|
|
75
|
+
{toaster && (
|
|
76
|
+
<Suspense fallback={null}>
|
|
77
|
+
<Toaster {...(toaster === true ? {} : toaster)} />
|
|
78
|
+
</Suspense>
|
|
79
|
+
)}
|
|
80
|
+
</ConfirmProvider>
|
|
81
|
+
</Tooltip.Provider>
|
|
82
|
+
</MotionScope>
|
|
52
83
|
</GlyphContext.Provider>
|
|
53
84
|
</ColorModeProvider>
|
|
54
85
|
)
|
package/src/provider/index.ts
CHANGED
|
@@ -9,9 +9,13 @@ export {
|
|
|
9
9
|
} from './color-mode'
|
|
10
10
|
export {
|
|
11
11
|
type GlyphContextValue,
|
|
12
|
+
type GlyphRouter,
|
|
13
|
+
type IsActiveOptions,
|
|
12
14
|
type LinkComponent,
|
|
13
15
|
type LinkComponentProps,
|
|
16
|
+
type UseIsActive,
|
|
14
17
|
useGlyph,
|
|
18
|
+
useIsActive,
|
|
15
19
|
useLinkComponent,
|
|
16
20
|
} from './glyph-context'
|
|
17
21
|
export { GlyphProvider, type GlyphProviderProps } from './glyph-provider'
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type ColorMode, scopeSelector, type Theme } from '@glyphui/tokens'
|
|
2
2
|
import { Slot } from 'radix-ui'
|
|
3
3
|
import { type ComponentProps, useContext, useMemo } from 'react'
|
|
4
|
+
import { ScopedMotionConfig } from '../motion/motion-root'
|
|
4
5
|
import { cn } from '../utils/cn'
|
|
5
|
-
import { GlyphContext } from './glyph-context'
|
|
6
|
+
import { GlyphContext, neverActive } from './glyph-context'
|
|
6
7
|
import { ThemeStyle } from './theme-style'
|
|
7
8
|
|
|
8
9
|
export interface ThemeScopeProps extends ComponentProps<'div'> {
|
|
@@ -16,21 +17,29 @@ export interface ThemeScopeProps extends ComponentProps<'div'> {
|
|
|
16
17
|
export function ThemeScope({ theme, mode, asChild, children, ...props }: ThemeScopeProps) {
|
|
17
18
|
const parent = useContext(GlyphContext)
|
|
18
19
|
const value = useMemo(
|
|
19
|
-
() => ({
|
|
20
|
-
|
|
20
|
+
() => ({
|
|
21
|
+
theme,
|
|
22
|
+
linkComponent: parent?.linkComponent ?? 'a',
|
|
23
|
+
useIsActive: parent?.useIsActive ?? neverActive,
|
|
24
|
+
motion: parent?.motion,
|
|
25
|
+
}),
|
|
26
|
+
[theme, parent?.linkComponent, parent?.useIsActive, parent?.motion],
|
|
21
27
|
)
|
|
22
28
|
const Comp = asChild ? Slot.Root : 'div'
|
|
23
29
|
return (
|
|
24
30
|
<GlyphContext.Provider value={value}>
|
|
25
31
|
<ThemeStyle theme={theme} selector={scopeSelector(theme)} />
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
<ScopedMotionConfig>
|
|
33
|
+
<Comp
|
|
34
|
+
data-glyph-theme={theme.name}
|
|
35
|
+
data-mode={mode}
|
|
36
|
+
data-motion={parent?.motion ?? theme.motion.level ?? 'subtle'}
|
|
37
|
+
{...props}
|
|
38
|
+
className={cn('bg-background font-sans text-foreground', props.className)}
|
|
39
|
+
>
|
|
40
|
+
{children}
|
|
41
|
+
</Comp>
|
|
42
|
+
</ScopedMotionConfig>
|
|
34
43
|
</GlyphContext.Provider>
|
|
35
44
|
)
|
|
36
45
|
}
|
package/src/themes.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { defineTheme, presets as tokenPresets } from '@glyphui/tokens'
|
|
|
10
10
|
export const glyph = tokenPresets.glyph
|
|
11
11
|
|
|
12
12
|
/** Zero radius, heavy borders, hard offset shadows, loud color. */
|
|
13
|
-
export const brutalist = defineTheme({
|
|
13
|
+
export const brutalist = /* @__PURE__ */ defineTheme({
|
|
14
14
|
name: 'brutalist',
|
|
15
15
|
extends: tokenPresets.brutalist,
|
|
16
16
|
components: {
|
|
@@ -27,7 +27,7 @@ export const brutalist = defineTheme({
|
|
|
27
27
|
})
|
|
28
28
|
|
|
29
29
|
/** Serif display type, warm paper neutrals, deep green ink, hairlines instead of shadows. */
|
|
30
|
-
export const editorial = defineTheme({
|
|
30
|
+
export const editorial = /* @__PURE__ */ defineTheme({
|
|
31
31
|
name: 'editorial',
|
|
32
32
|
extends: tokenPresets.editorial,
|
|
33
33
|
components: {
|
|
@@ -38,7 +38,7 @@ export const editorial = defineTheme({
|
|
|
38
38
|
})
|
|
39
39
|
|
|
40
40
|
/** Pill shapes, lavender and mint, chunky rounded type, springy motion. */
|
|
41
|
-
export const playful = defineTheme({
|
|
41
|
+
export const playful = /* @__PURE__ */ defineTheme({
|
|
42
42
|
name: 'playful',
|
|
43
43
|
extends: tokenPresets.playful,
|
|
44
44
|
components: {
|
package/src/utils/styles.ts
CHANGED
|
@@ -6,8 +6,22 @@ export const focusRing =
|
|
|
6
6
|
export const themedBorder = 'border-(length:--glyph-border-width)'
|
|
7
7
|
|
|
8
8
|
export const transition =
|
|
9
|
-
'transition-[color,background-color,border-color,box-shadow,transform,opacity] duration-(--glyph-duration-base) ease-standard'
|
|
9
|
+
'transition-[color,background-color,border-color,box-shadow,transform,translate,scale,opacity] duration-(--glyph-duration-base) ease-standard'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Enter and exit for anything Radix positions next to a trigger: springs out of the trigger
|
|
13
|
+
* (pair with the primitive's transform-origin class) and leaves quickly. Distance and scale
|
|
14
|
+
* follow the motion level; the side moves it toward the trigger.
|
|
15
|
+
*/
|
|
16
|
+
export const popoverMotion =
|
|
17
|
+
'animate-pop-in data-[state=closed]:animate-pop-out data-[side=bottom]:[--glyph-motion-y:calc(var(--glyph-motion-distance)*-1)] data-[side=top]:[--glyph-motion-y:var(--glyph-motion-distance)] data-[side=left]:[--glyph-motion-x:var(--glyph-motion-distance)] data-[side=right]:[--glyph-motion-x:calc(var(--glyph-motion-distance)*-1)]'
|
|
10
18
|
|
|
11
19
|
/** Popover surfaces: Select, Tooltip-like menus. */
|
|
12
|
-
export const popover =
|
|
13
|
-
|
|
20
|
+
export const popover = `z-50 overflow-hidden rounded-[min(var(--radius-md),var(--radius-lg))] border-(length:--glyph-border-width) border-border bg-raised text-foreground shadow-lg ${popoverMotion}`
|
|
21
|
+
|
|
22
|
+
/** Dimmed backdrop behind dialogs and sheets. */
|
|
23
|
+
export const overlayMotion =
|
|
24
|
+
'data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out'
|
|
25
|
+
|
|
26
|
+
/** Centered dialogs: rise and scale in on the theme's spring, settle out quickly. */
|
|
27
|
+
export const dialogMotion = 'animate-dialog-in data-[state=closed]:animate-dialog-out'
|