@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
|
@@ -5,9 +5,12 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
5
5
|
import { popover } from '../../utils/styles'
|
|
6
6
|
import { tv } from '../../utils/tv'
|
|
7
7
|
|
|
8
|
-
export const hoverCardStyles = tv({
|
|
8
|
+
export const hoverCardStyles = /* @__PURE__ */ tv({
|
|
9
9
|
slots: {
|
|
10
|
-
content: [
|
|
10
|
+
content: [
|
|
11
|
+
popover,
|
|
12
|
+
'origin-(--radix-hover-card-content-transform-origin) w-72 max-w-[calc(100vw-2rem)] p-4 text-small outline-none',
|
|
13
|
+
],
|
|
11
14
|
},
|
|
12
15
|
})
|
|
13
16
|
|
|
@@ -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 inputOtpStyles = tv({
|
|
5
|
+
export const inputOtpStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'flex items-center gap-2 has-disabled:opacity-50',
|
|
8
8
|
input: 'disabled:cursor-not-allowed',
|
|
@@ -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 kbdStyles = tv({
|
|
5
|
+
export const kbdStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
base: 'inline-flex h-5 min-w-5 items-center justify-center rounded-xs border border-border bg-muted px-1 font-mono text-[0.6875rem] font-medium text-muted-foreground shadow-xs',
|
|
8
8
|
},
|
|
@@ -3,7 +3,7 @@ import type { ComponentProps } from 'react'
|
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
4
|
import { tv } from '../../utils/tv'
|
|
5
5
|
|
|
6
|
-
export const labelStyles = tv({
|
|
6
|
+
export const labelStyles = /* @__PURE__ */ tv({
|
|
7
7
|
slots: {
|
|
8
8
|
base: 'inline-flex select-none items-center gap-1 text-small font-medium text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-60',
|
|
9
9
|
},
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const linkStyles = tv({
|
|
5
|
+
export const linkStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
base: [
|
|
8
8
|
'inline-flex items-baseline gap-1 rounded-xs font-medium',
|
|
@@ -17,7 +17,7 @@ export const linkStyles = tv({
|
|
|
17
17
|
tone: {
|
|
18
18
|
default: { base: 'text-foreground' },
|
|
19
19
|
muted: { base: 'text-muted-foreground hover:text-foreground' },
|
|
20
|
-
primary: { base: 'text-primary' },
|
|
20
|
+
primary: { base: 'text-primary-text' },
|
|
21
21
|
},
|
|
22
22
|
underline: {
|
|
23
23
|
hover: {
|
|
@@ -2,12 +2,14 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { tv } from '../../utils/tv'
|
|
3
3
|
|
|
4
4
|
/** Modal is built from Dialog parts; these slots add Modal-specific classes on top. */
|
|
5
|
-
export const modalStyles = tv({
|
|
5
|
+
export const modalStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
content: '',
|
|
8
8
|
header: '',
|
|
9
9
|
body: 'grid gap-4',
|
|
10
10
|
footer: '',
|
|
11
|
+
/** Wraps body and footer when `onSubmit` is set; `contents` keeps the dialog layout. */
|
|
12
|
+
form: 'contents',
|
|
11
13
|
},
|
|
12
14
|
})
|
|
13
15
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReactNode } from 'react'
|
|
1
|
+
import type { FormEvent, ReactNode } from 'react'
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import {
|
|
4
4
|
Dialog,
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from '../dialog'
|
|
15
15
|
import { modalStyles } from './modal.styles'
|
|
16
16
|
|
|
17
|
-
export interface ModalProps extends Omit<DialogContentProps, 'title' | 'children'> {
|
|
17
|
+
export interface ModalProps extends Omit<DialogContentProps, 'title' | 'children' | 'onSubmit'> {
|
|
18
18
|
open?: boolean
|
|
19
19
|
defaultOpen?: boolean
|
|
20
20
|
onOpenChange?: (open: boolean) => void
|
|
@@ -27,6 +27,12 @@ export interface ModalProps extends Omit<DialogContentProps, 'title' | 'children
|
|
|
27
27
|
footer?: ReactNode
|
|
28
28
|
/** Close when the backdrop is clicked. Default true. */
|
|
29
29
|
closeOnOverlayClick?: boolean
|
|
30
|
+
/**
|
|
31
|
+
* Turns the body and footer into one `<form>`, so a `type="submit"` button in the footer
|
|
32
|
+
* submits the fields in the body. The page does not reload. With `@glyphui/ui/form`, use
|
|
33
|
+
* `<Form>` in the body and `<FormSubmit form={form}>` in the footer instead.
|
|
34
|
+
*/
|
|
35
|
+
onSubmit?: (event: FormEvent<HTMLFormElement>) => void
|
|
30
36
|
children?: ReactNode
|
|
31
37
|
}
|
|
32
38
|
|
|
@@ -45,12 +51,21 @@ export function Modal(inProps: ModalProps) {
|
|
|
45
51
|
trigger,
|
|
46
52
|
footer,
|
|
47
53
|
closeOnOverlayClick = true,
|
|
54
|
+
onSubmit,
|
|
48
55
|
onPointerDownOutside,
|
|
49
56
|
className,
|
|
50
57
|
children,
|
|
51
58
|
...rest
|
|
52
59
|
} = props
|
|
53
60
|
const s = modalStyles()
|
|
61
|
+
const content = (
|
|
62
|
+
<>
|
|
63
|
+
{children && <DialogBody className={s.body({ class: slots.body })}>{children}</DialogBody>}
|
|
64
|
+
{footer && (
|
|
65
|
+
<DialogFooter className={s.footer({ class: slots.footer })}>{footer}</DialogFooter>
|
|
66
|
+
)}
|
|
67
|
+
</>
|
|
68
|
+
)
|
|
54
69
|
|
|
55
70
|
return (
|
|
56
71
|
<Dialog
|
|
@@ -73,9 +88,19 @@ export function Modal(inProps: ModalProps) {
|
|
|
73
88
|
<DialogTitle>{title}</DialogTitle>
|
|
74
89
|
{description && <DialogDescription>{description}</DialogDescription>}
|
|
75
90
|
</DialogHeader>
|
|
76
|
-
{
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
{onSubmit ? (
|
|
92
|
+
<form
|
|
93
|
+
data-slot="modal-form"
|
|
94
|
+
className={s.form({ class: slots.form })}
|
|
95
|
+
onSubmit={(event) => {
|
|
96
|
+
event.preventDefault()
|
|
97
|
+
onSubmit(event)
|
|
98
|
+
}}
|
|
99
|
+
>
|
|
100
|
+
{content}
|
|
101
|
+
</form>
|
|
102
|
+
) : (
|
|
103
|
+
content
|
|
79
104
|
)}
|
|
80
105
|
</DialogContent>
|
|
81
106
|
</Dialog>
|
|
@@ -10,7 +10,7 @@ const topLevel = [
|
|
|
10
10
|
'data-active:text-foreground',
|
|
11
11
|
]
|
|
12
12
|
|
|
13
|
-
export const navigationMenuStyles = tv({
|
|
13
|
+
export const navigationMenuStyles = /* @__PURE__ */ tv({
|
|
14
14
|
slots: {
|
|
15
15
|
root: 'relative z-10 flex max-w-max flex-1 items-center justify-center',
|
|
16
16
|
list: 'group flex flex-1 list-none items-center justify-center gap-1',
|
|
@@ -21,7 +21,7 @@ export const navigationMenuStyles = tv({
|
|
|
21
21
|
content: 'top-0 left-0 w-full p-2 animate-fade-in md:absolute md:w-auto',
|
|
22
22
|
viewportWrapper: 'absolute top-full left-0 flex justify-center',
|
|
23
23
|
viewport: [
|
|
24
|
-
'relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-[calc(100vw-2rem)] origin-top overflow-hidden rounded-lg border-border bg-raised text-foreground shadow-lg animate-pop-in',
|
|
24
|
+
'relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-[calc(100vw-2rem)] origin-top overflow-hidden rounded-lg border-border bg-raised text-foreground shadow-lg animate-pop-in data-[state=closed]:animate-pop-out',
|
|
25
25
|
'md:w-(--radix-navigation-menu-viewport-width)',
|
|
26
26
|
'transition-[width,height] duration-(--glyph-duration-base) ease-standard',
|
|
27
27
|
themedBorder,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { NavigationMenu as NavPrimitive } from 'radix-ui'
|
|
2
2
|
import type { ComponentProps, ReactNode } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
-
import { useLinkComponent } from '../../provider/glyph-context'
|
|
4
|
+
import { useIsActive, useLinkComponent } from '../../provider/glyph-context'
|
|
5
5
|
import { navigationMenuStyles } from './navigation-menu.styles'
|
|
6
6
|
|
|
7
7
|
const s = navigationMenuStyles()
|
|
@@ -132,25 +132,35 @@ export interface NavigationMenuLinkProps
|
|
|
132
132
|
href?: string
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* A top-level link (no panel). Marked active automatically from the provider's `router`;
|
|
137
|
+
* set `active` to override.
|
|
138
|
+
*/
|
|
136
139
|
export function NavigationMenuLink({
|
|
137
140
|
href,
|
|
141
|
+
active: activeProp,
|
|
138
142
|
className,
|
|
139
143
|
children,
|
|
140
144
|
...props
|
|
141
145
|
}: NavigationMenuLinkProps) {
|
|
142
146
|
const slots = useSlots()
|
|
143
147
|
const Link = useLinkComponent()
|
|
148
|
+
const active = useIsActive(href, { explicit: activeProp })
|
|
144
149
|
const cls = s.link({ class: [slots.link, className] })
|
|
145
150
|
if (href === undefined) {
|
|
146
151
|
return (
|
|
147
|
-
<NavPrimitive.Link
|
|
152
|
+
<NavPrimitive.Link
|
|
153
|
+
data-slot="navigation-menu-link"
|
|
154
|
+
className={cls}
|
|
155
|
+
active={active}
|
|
156
|
+
{...props}
|
|
157
|
+
>
|
|
148
158
|
{children}
|
|
149
159
|
</NavPrimitive.Link>
|
|
150
160
|
)
|
|
151
161
|
}
|
|
152
162
|
return (
|
|
153
|
-
<NavPrimitive.Link data-slot="navigation-menu-link" asChild {...props}>
|
|
163
|
+
<NavPrimitive.Link data-slot="navigation-menu-link" asChild active={active} {...props}>
|
|
154
164
|
<Link href={href} className={cls}>
|
|
155
165
|
{children}
|
|
156
166
|
</Link>
|
|
@@ -3,7 +3,7 @@ import { focusRing } from '../../utils/styles'
|
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
import { fieldControl } from '../input/input.styles'
|
|
5
5
|
|
|
6
|
-
export const numberInputStyles = tv({
|
|
6
|
+
export const numberInputStyles = /* @__PURE__ */ tv({
|
|
7
7
|
slots: {
|
|
8
8
|
root: [
|
|
9
9
|
...fieldControl,
|
|
@@ -2,20 +2,22 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing, transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const paginationStyles = tv({
|
|
5
|
+
export const paginationStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'flex',
|
|
8
|
-
list: 'flex flex-wrap items-center gap-1',
|
|
8
|
+
list: 'isolate flex flex-wrap items-center gap-1',
|
|
9
9
|
item: [
|
|
10
|
-
'inline-flex shrink-0 cursor-pointer select-none items-center justify-center rounded-md font-medium tabular-nums text-muted-foreground',
|
|
10
|
+
'relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center rounded-md font-medium tabular-nums text-muted-foreground',
|
|
11
11
|
transition,
|
|
12
12
|
focusRing,
|
|
13
13
|
'hover:bg-muted hover:text-foreground',
|
|
14
|
-
'aria-[current=page]:
|
|
14
|
+
'aria-[current=page]:text-primary-foreground aria-[current=page]:hover:bg-transparent',
|
|
15
15
|
'disabled:pointer-events-none disabled:opacity-40 aria-disabled:pointer-events-none aria-disabled:opacity-40',
|
|
16
16
|
'[&>svg]:size-4',
|
|
17
17
|
],
|
|
18
18
|
ellipsis: 'inline-flex items-center justify-center text-faint-foreground',
|
|
19
|
+
/** The current page's highlight. Slides to the new page when it changes. */
|
|
20
|
+
indicator: 'pointer-events-none absolute inset-0 -z-10 rounded-[inherit] bg-primary shadow-xs',
|
|
19
21
|
},
|
|
20
22
|
variants: {
|
|
21
23
|
size: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ComponentProps, type ReactNode, useId } from 'react'
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import { ChevronLeftIcon, ChevronRightIcon } from '../../internal/icons'
|
|
4
|
+
import { ActiveIndicator } from '../../motion/active-indicator'
|
|
4
5
|
import { useLinkComponent } from '../../provider/glyph-context'
|
|
5
6
|
import { type PaginationVariants, paginationStyles } from './pagination.styles'
|
|
6
7
|
import { paginationRange } from './pagination-range'
|
|
@@ -65,6 +66,7 @@ export function Pagination(inProps: PaginationProps) {
|
|
|
65
66
|
const s = paginationStyles({ size })
|
|
66
67
|
const itemClass = s.item({ class: slots.item })
|
|
67
68
|
const current = Math.min(Math.max(1, page), Math.max(1, pageCount))
|
|
69
|
+
const indicatorId = `${useId()}-pagination-indicator`
|
|
68
70
|
|
|
69
71
|
const control = (
|
|
70
72
|
target: number,
|
|
@@ -73,6 +75,17 @@ export function Pagination(inProps: PaginationProps) {
|
|
|
73
75
|
options: { current?: boolean } = {},
|
|
74
76
|
) => {
|
|
75
77
|
const disabled = target < 1 || target > pageCount || (target === current && !options.current)
|
|
78
|
+
if (options.current) {
|
|
79
|
+
content = (
|
|
80
|
+
<>
|
|
81
|
+
<ActiveIndicator
|
|
82
|
+
layoutId={indicatorId}
|
|
83
|
+
className={s.indicator({ class: slots.indicator })}
|
|
84
|
+
/>
|
|
85
|
+
{content}
|
|
86
|
+
</>
|
|
87
|
+
)
|
|
88
|
+
}
|
|
76
89
|
const shared = {
|
|
77
90
|
'aria-label': label,
|
|
78
91
|
'aria-current': options.current ? ('page' as const) : undefined,
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing } from '../../utils/styles'
|
|
3
3
|
import { tv } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const passwordInputStyles = tv({
|
|
5
|
+
export const passwordInputStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
root: 'grid gap-1.5',
|
|
8
8
|
toggle: [
|
|
@@ -16,9 +16,9 @@ export const passwordInputStyles = tv({
|
|
|
16
16
|
},
|
|
17
17
|
variants: {
|
|
18
18
|
strength: {
|
|
19
|
-
weak: { label: 'text-danger' },
|
|
20
|
-
fair: { label: 'text-warning' },
|
|
21
|
-
strong: { label: 'text-success' },
|
|
19
|
+
weak: { label: 'text-danger-text' },
|
|
20
|
+
fair: { label: 'text-warning-text' },
|
|
21
|
+
strong: { label: 'text-success-text' },
|
|
22
22
|
},
|
|
23
23
|
},
|
|
24
24
|
})
|
|
@@ -5,7 +5,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
5
5
|
import { popover } from '../../utils/styles'
|
|
6
6
|
import { tv } from '../../utils/tv'
|
|
7
7
|
|
|
8
|
-
export const popoverStyles = tv({
|
|
8
|
+
export const popoverStyles = /* @__PURE__ */ tv({
|
|
9
9
|
slots: {
|
|
10
10
|
content: [
|
|
11
11
|
popover,
|
|
@@ -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 progressStyles = tv({
|
|
4
|
+
export const progressStyles = /* @__PURE__ */ tv({
|
|
5
5
|
slots: {
|
|
6
6
|
root: 'grid w-full gap-1.5',
|
|
7
7
|
header: 'flex items-baseline justify-between gap-3 text-small',
|
|
@@ -32,7 +32,7 @@ export const progressStyles = tv({
|
|
|
32
32
|
|
|
33
33
|
export type ProgressVariants = VariantProps<typeof progressStyles>
|
|
34
34
|
|
|
35
|
-
export const progressCircleStyles = tv({
|
|
35
|
+
export const progressCircleStyles = /* @__PURE__ */ tv({
|
|
36
36
|
slots: {
|
|
37
37
|
root: 'relative inline-flex shrink-0 items-center justify-center',
|
|
38
38
|
svg: 'size-full -rotate-90',
|
|
@@ -8,7 +8,7 @@ import { tv, type VariantProps } from '../../utils/tv'
|
|
|
8
8
|
* Element styles for long-form content. Every value comes from theme tokens, so articles
|
|
9
9
|
* pick up the theme's display font, type scale, colors and radius.
|
|
10
10
|
*/
|
|
11
|
-
export const proseStyles = tv({
|
|
11
|
+
export const proseStyles = /* @__PURE__ */ tv({
|
|
12
12
|
slots: {
|
|
13
13
|
base: [
|
|
14
14
|
'text-foreground [&>:first-child]:mt-0 [&>:last-child]:mb-0',
|
|
@@ -20,7 +20,7 @@ export const proseStyles = tv({
|
|
|
20
20
|
// Text
|
|
21
21
|
'[&_p]:my-[1em] [&_p]:text-pretty',
|
|
22
22
|
'[&_strong]:font-semibold [&_strong]:text-foreground',
|
|
23
|
-
'[&_a]:font-medium [&_a]:text-primary [&_a]:underline [&_a]:decoration-primary/40 [&_a]:underline-offset-4 [&_a:hover]:decoration-primary',
|
|
23
|
+
'[&_a]:font-medium [&_a]:text-primary-text [&_a]:underline [&_a]:decoration-primary/40 [&_a]:underline-offset-4 [&_a:hover]:decoration-primary',
|
|
24
24
|
// Lists
|
|
25
25
|
'[&_ul]:my-[1em] [&_ul]:list-disc [&_ul]:pl-[1.5em] [&_ol]:my-[1em] [&_ol]:list-decimal [&_ol]:pl-[1.5em]',
|
|
26
26
|
'[&_li]:my-[0.35em] [&_li]:pl-[0.25em] [&_li::marker]:text-faint-foreground',
|
|
@@ -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 resizableStyles = tv({
|
|
4
|
+
export const resizableStyles = /* @__PURE__ */ tv({
|
|
5
5
|
slots: {
|
|
6
6
|
group: 'flex h-full w-full data-[panel-group-direction=vertical]:flex-col',
|
|
7
7
|
panel: 'min-w-0',
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui'
|
|
2
|
-
import type
|
|
2
|
+
import { type ComponentProps, useEffect, useRef, useState } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
4
|
import type { StylesEntry } from '../../utils/registry'
|
|
5
5
|
import { focusRing } from '../../utils/styles'
|
|
6
6
|
import { tv } from '../../utils/tv'
|
|
7
7
|
|
|
8
|
-
export const scrollAreaStyles = tv({
|
|
8
|
+
export const scrollAreaStyles = /* @__PURE__ */ tv({
|
|
9
9
|
slots: {
|
|
10
10
|
root: 'relative overflow-hidden',
|
|
11
11
|
viewport: ['size-full rounded-[inherit]', focusRing],
|
|
@@ -31,6 +31,24 @@ export interface ScrollAreaProps extends ComponentProps<typeof ScrollAreaPrimiti
|
|
|
31
31
|
viewportClassName?: string
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/** True while the element's content overflows it, so keyboard users need to reach it. */
|
|
35
|
+
function useOverflowing<E extends HTMLElement>() {
|
|
36
|
+
const ref = useRef<E>(null)
|
|
37
|
+
const [overflowing, setOverflowing] = useState(false)
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
const el = ref.current
|
|
40
|
+
if (!el) return
|
|
41
|
+
const measure = () =>
|
|
42
|
+
setOverflowing(el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth)
|
|
43
|
+
measure()
|
|
44
|
+
const observer = new ResizeObserver(measure)
|
|
45
|
+
observer.observe(el)
|
|
46
|
+
if (el.firstElementChild) observer.observe(el.firstElementChild)
|
|
47
|
+
return () => observer.disconnect()
|
|
48
|
+
}, [])
|
|
49
|
+
return [ref, overflowing] as const
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
/**
|
|
35
53
|
* A scrollable region with slim, theme-colored scrollbars. Give it a height (or width)
|
|
36
54
|
* with `className`, e.g. `h-72`.
|
|
@@ -39,6 +57,7 @@ export function ScrollArea(inProps: ScrollAreaProps) {
|
|
|
39
57
|
const [props, slots] = useComponentConfig('ScrollArea', inProps)
|
|
40
58
|
const { orientation = 'vertical', viewportClassName, className, children, ...rest } = props
|
|
41
59
|
const s = scrollAreaStyles()
|
|
60
|
+
const [viewportRef, overflowing] = useOverflowing<HTMLDivElement>()
|
|
42
61
|
const bar = (o: 'vertical' | 'horizontal') => (
|
|
43
62
|
<ScrollAreaPrimitive.Scrollbar
|
|
44
63
|
data-slot="scroll-area-scrollbar"
|
|
@@ -55,7 +74,10 @@ export function ScrollArea(inProps: ScrollAreaProps) {
|
|
|
55
74
|
{...rest}
|
|
56
75
|
>
|
|
57
76
|
<ScrollAreaPrimitive.Viewport
|
|
77
|
+
ref={viewportRef}
|
|
58
78
|
data-slot="scroll-area-viewport"
|
|
79
|
+
// Scrollable regions must be reachable by keyboard to scroll with arrow keys.
|
|
80
|
+
tabIndex={overflowing ? 0 : undefined}
|
|
59
81
|
className={s.viewport({ class: [slots.viewport, viewportClassName] })}
|
|
60
82
|
>
|
|
61
83
|
{children}
|
|
@@ -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 sectionStyles = tv({
|
|
5
|
+
export const sectionStyles = /* @__PURE__ */ tv({
|
|
6
6
|
base: 'w-full',
|
|
7
7
|
variants: {
|
|
8
8
|
spacing: {
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { ToggleGroup } from 'radix-ui'
|
|
2
|
-
import type
|
|
2
|
+
import { type ReactNode, useContext, useId } from 'react'
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
|
+
import { useControllableState } from '../../hooks/use-controllable-state'
|
|
5
|
+
import { warnOnce } from '../../internal/dev'
|
|
6
|
+
import { ActiveIndicator } from '../../motion/active-indicator'
|
|
4
7
|
import { focusRing, themedBorder, transition } from '../../utils/styles'
|
|
5
8
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
9
|
+
import { FieldContext } from '../field/field-context'
|
|
6
10
|
|
|
7
|
-
export const segmentedControlStyles = tv({
|
|
11
|
+
export const segmentedControlStyles = /* @__PURE__ */ tv({
|
|
8
12
|
slots: {
|
|
9
13
|
root: [
|
|
10
|
-
'inline-flex items-center gap-0.5 rounded-md border-border bg-muted p-0.5',
|
|
14
|
+
'isolate inline-flex items-center gap-0.5 rounded-md border-border bg-muted p-0.5',
|
|
11
15
|
themedBorder,
|
|
12
16
|
],
|
|
13
17
|
item: [
|
|
14
|
-
'inline-flex h-full cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-[calc(var(--radius-md)-2px)] px-3 font-medium text-muted-foreground',
|
|
18
|
+
'relative inline-flex h-full cursor-pointer select-none items-center justify-center gap-1.5 whitespace-nowrap rounded-[calc(var(--radius-md)-2px)] px-3 font-medium text-muted-foreground',
|
|
15
19
|
transition,
|
|
16
20
|
focusRing,
|
|
17
|
-
'hover:text-foreground data-[state=on]:
|
|
21
|
+
'hover:text-foreground data-[state=on]:text-foreground',
|
|
18
22
|
'disabled:pointer-events-none disabled:opacity-50 [&>svg]:size-4',
|
|
19
23
|
],
|
|
24
|
+
/** The raised thumb that slides to the selected option. */
|
|
25
|
+
indicator:
|
|
26
|
+
'pointer-events-none absolute inset-0 -z-10 rounded-[calc(var(--radius-md)-2px)] bg-raised shadow-xs',
|
|
20
27
|
},
|
|
21
28
|
variants: {
|
|
22
29
|
size: {
|
|
@@ -40,7 +47,9 @@ export interface SegmentedControlProps<T extends string>
|
|
|
40
47
|
value?: T
|
|
41
48
|
defaultValue?: T
|
|
42
49
|
onValueChange?: (value: T) => void
|
|
43
|
-
|
|
50
|
+
/** Required unless the control sits in a `<Field label>`, which labels it. */
|
|
51
|
+
'aria-label'?: string
|
|
52
|
+
'aria-labelledby'?: string
|
|
44
53
|
className?: string
|
|
45
54
|
id?: string
|
|
46
55
|
}
|
|
@@ -52,16 +61,32 @@ export interface SegmentedControlProps<T extends string>
|
|
|
52
61
|
export function SegmentedControl<T extends string>(inProps: SegmentedControlProps<T>) {
|
|
53
62
|
const [props, slots] = useComponentConfig('SegmentedControl', inProps)
|
|
54
63
|
const { options, value, defaultValue, onValueChange, size, fullWidth, className, ...rest } = props
|
|
64
|
+
const field = useContext(FieldContext)
|
|
55
65
|
const s = segmentedControlStyles({ size, fullWidth })
|
|
66
|
+
const [selected, setSelected] = useControllableState<T | undefined>({
|
|
67
|
+
value,
|
|
68
|
+
defaultValue,
|
|
69
|
+
onChange: (next) => next !== undefined && onValueChange?.(next),
|
|
70
|
+
})
|
|
71
|
+
const indicatorId = `${useId()}-segmented-indicator`
|
|
72
|
+
const labelledBy = rest['aria-labelledby'] ?? (rest['aria-label'] ? undefined : field?.labelId)
|
|
73
|
+
if (!rest['aria-label'] && !labelledBy) {
|
|
74
|
+
warnOnce(
|
|
75
|
+
'segmented-control-label',
|
|
76
|
+
'SegmentedControl needs a label: pass aria-label, or place it in a <Field label="…">.',
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
const describedBy = [field?.descriptionId, field?.errorId].filter(Boolean).join(' ')
|
|
56
80
|
return (
|
|
57
81
|
<ToggleGroup.Root
|
|
58
82
|
type="single"
|
|
59
83
|
data-slot="segmented-control"
|
|
60
|
-
|
|
61
|
-
{...(defaultValue !== undefined && { defaultValue })}
|
|
84
|
+
value={selected ?? ''}
|
|
62
85
|
// Radix emits '' when the active item is clicked again; a segmented control never deselects.
|
|
63
|
-
onValueChange={(next: string) => next &&
|
|
86
|
+
onValueChange={(next: string) => next && setSelected(next as T)}
|
|
64
87
|
className={s.root({ class: [slots.root, className] })}
|
|
88
|
+
aria-labelledby={labelledBy}
|
|
89
|
+
aria-describedby={describedBy || undefined}
|
|
65
90
|
{...rest}
|
|
66
91
|
>
|
|
67
92
|
{options.map((option) => (
|
|
@@ -72,6 +97,12 @@ export function SegmentedControl<T extends string>(inProps: SegmentedControlProp
|
|
|
72
97
|
className={s.item({ class: slots.item })}
|
|
73
98
|
>
|
|
74
99
|
{option.label}
|
|
100
|
+
{option.value === selected && (
|
|
101
|
+
<ActiveIndicator
|
|
102
|
+
layoutId={indicatorId}
|
|
103
|
+
className={s.indicator({ class: slots.indicator })}
|
|
104
|
+
/>
|
|
105
|
+
)}
|
|
75
106
|
</ToggleGroup.Item>
|
|
76
107
|
))}
|
|
77
108
|
</ToggleGroup.Root>
|
|
@@ -7,7 +7,7 @@ import { tv, type VariantProps } from '../../utils/tv'
|
|
|
7
7
|
import { useFieldControl } from '../field/field-context'
|
|
8
8
|
import { fieldControl } from '../input/input.styles'
|
|
9
9
|
|
|
10
|
-
export const selectStyles = tv({
|
|
10
|
+
export const selectStyles = /* @__PURE__ */ tv({
|
|
11
11
|
slots: {
|
|
12
12
|
trigger: [
|
|
13
13
|
...fieldControl,
|
|
@@ -19,7 +19,7 @@ export const selectStyles = tv({
|
|
|
19
19
|
icon: 'size-4 shrink-0 text-faint-foreground',
|
|
20
20
|
content: [
|
|
21
21
|
popover,
|
|
22
|
-
'max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width)',
|
|
22
|
+
'origin-(--radix-select-content-transform-origin) max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width)',
|
|
23
23
|
],
|
|
24
24
|
viewport: 'p-1',
|
|
25
25
|
item: [
|
|
@@ -3,7 +3,7 @@ import type { ComponentProps } from 'react'
|
|
|
3
3
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
4
4
|
import { tv } from '../../utils/tv'
|
|
5
5
|
|
|
6
|
-
export const separatorStyles = tv({
|
|
6
|
+
export const separatorStyles = /* @__PURE__ */ tv({
|
|
7
7
|
slots: { base: 'shrink-0 bg-border' },
|
|
8
8
|
variants: {
|
|
9
9
|
orientation: {
|
|
@@ -2,7 +2,7 @@ import type { StylesEntry } from '../../utils/registry'
|
|
|
2
2
|
import { focusRing, transition } from '../../utils/styles'
|
|
3
3
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const sheetStyles = tv({
|
|
5
|
+
export const sheetStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: {
|
|
7
7
|
overlay:
|
|
8
8
|
'fixed inset-0 z-50 bg-overlay data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out',
|
|
@@ -2,7 +2,7 @@ import type { ComponentProps } from 'react'
|
|
|
2
2
|
import { useComponentConfig } from '../../hooks/use-component-config'
|
|
3
3
|
import { tv } from '../../utils/tv'
|
|
4
4
|
|
|
5
|
-
export const skeletonStyles = tv({
|
|
5
|
+
export const skeletonStyles = /* @__PURE__ */ tv({
|
|
6
6
|
slots: { base: 'animate-pulse rounded-sm bg-muted' },
|
|
7
7
|
})
|
|
8
8
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { StylesEntry } from '../../utils/registry'
|
|
2
2
|
import { tv, type VariantProps } from '../../utils/tv'
|
|
3
3
|
|
|
4
|
-
export const sliderStyles = tv({
|
|
4
|
+
export const sliderStyles = /* @__PURE__ */ tv({
|
|
5
5
|
slots: {
|
|
6
6
|
wrapper: 'grid w-full gap-1.5',
|
|
7
7
|
root: 'relative flex h-5 w-full touch-none select-none items-center data-disabled:cursor-not-allowed data-disabled:opacity-50',
|