gladvn 0.2.22 → 0.2.27
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/LICENSE +21 -0
- package/README.md +70 -58
- package/bin/cli.js +352 -150
- package/llms.txt +7 -5
- package/package.json +14 -26
- package/src/blocks/auth-card.tsx +104 -0
- package/src/blocks/auth-dialog.tsx +116 -0
- package/src/blocks/auth-recovery.tsx +61 -0
- package/src/blocks/auth-split.tsx +132 -0
- package/src/blocks/dashboard.tsx +182 -0
- package/src/blocks/settings.tsx +104 -0
- package/src/components/macro/accordion-preset.tsx +2 -1
- package/src/components/macro/alert-dialog-preset.tsx +3 -2
- package/src/components/macro/alert-preset.tsx +2 -1
- package/src/components/macro/avatar-preset.tsx +2 -1
- package/src/components/macro/breadcrumb-preset.tsx +2 -1
- package/src/components/macro/card-preset.tsx +2 -1
- package/src/components/macro/carousel-preset.tsx +2 -1
- package/src/components/macro/checkbox-preset.tsx +2 -1
- package/src/components/macro/combobox-preset.tsx +5 -3
- package/src/components/macro/command-preset.tsx +7 -4
- package/src/components/macro/date-picker.tsx +3 -2
- package/src/components/macro/dialog-preset.tsx +3 -2
- package/src/components/macro/empty-preset.tsx +2 -1
- package/src/components/macro/field-preset.tsx +2 -1
- package/src/components/macro/input-otp-preset.tsx +2 -1
- package/src/components/macro/input-preset.tsx +2 -1
- package/src/components/macro/pagination-preset.tsx +2 -1
- package/src/components/macro/progress-preset.tsx +2 -1
- package/src/components/macro/select-preset.tsx +3 -2
- package/src/components/macro/slider-preset.tsx +2 -1
- package/src/components/macro/switch-preset.tsx +2 -1
- package/src/components/macro/tabs-preset.tsx +2 -1
- package/src/components/micro/accordion.test.tsx +96 -0
- package/src/components/micro/alert-dialog.tsx +1 -1
- package/src/components/micro/alert.test.tsx +77 -0
- package/src/components/micro/avatar.tsx +1 -1
- package/src/components/micro/badge.test.tsx +57 -0
- package/src/components/micro/breadcrumb.tsx +1 -1
- package/src/components/micro/button.test.tsx +101 -4
- package/src/components/micro/card.test.tsx +54 -0
- package/src/components/micro/card.tsx +1 -1
- package/src/components/micro/carousel.tsx +1 -1
- package/src/components/micro/chart.tsx +1 -1
- package/src/components/micro/checkbox.test.tsx +92 -0
- package/src/components/micro/combobox.tsx +1 -1
- package/src/components/micro/command.tsx +1 -1
- package/src/components/micro/context-menu.tsx +1 -1
- package/src/components/micro/dialog.test.tsx +127 -0
- package/src/components/micro/dialog.tsx +1 -1
- package/src/components/micro/direction.tsx +1 -1
- package/src/components/micro/drawer.tsx +2 -2
- package/src/components/micro/dropdown-menu.test.tsx +132 -0
- package/src/components/micro/dropdown-menu.tsx +1 -1
- package/src/components/micro/empty.tsx +1 -1
- package/src/components/micro/field.tsx +1 -1
- package/src/components/micro/input-group.tsx +1 -1
- package/src/components/micro/input.test.tsx +95 -0
- package/src/components/micro/item.tsx +1 -1
- package/src/components/micro/menubar.tsx +1 -1
- package/src/components/micro/navigation-menu.tsx +1 -1
- package/src/components/micro/pagination.tsx +1 -1
- package/src/components/micro/popover.test.tsx +83 -0
- package/src/components/micro/popover.tsx +1 -1
- package/src/components/micro/progress.tsx +1 -1
- package/src/components/micro/select.test.tsx +122 -0
- package/src/components/micro/select.tsx +1 -1
- package/src/components/micro/sheet.test.tsx +122 -0
- package/src/components/micro/sheet.tsx +1 -1
- package/src/components/micro/sidebar.tsx +1 -1
- package/src/components/micro/switch.test.tsx +108 -0
- package/src/components/micro/table.tsx +1 -1
- package/src/components/micro/tabs.test.tsx +90 -0
- package/src/components/micro/tooltip.test.tsx +107 -0
- package/src/components/micro/tooltip.tsx +1 -1
- package/src/dev/data.ts +8 -0
- package/src/dev/main.tsx +4 -0
- package/src/dev/showcase/accordion.tsx +4 -2
- package/src/dev/showcase/alert-dialog.tsx +7 -4
- package/src/dev/showcase/alert.tsx +6 -3
- package/src/dev/showcase/aspect-ratio.tsx +2 -1
- package/src/dev/showcase/avatar.tsx +6 -3
- package/src/dev/showcase/badge.tsx +2 -1
- package/src/dev/showcase/breadcrumb.tsx +7 -4
- package/src/dev/showcase/button.tsx +2 -1
- package/src/dev/showcase/calendar.tsx +2 -1
- package/src/dev/showcase/card.tsx +4 -2
- package/src/dev/showcase/carousel.tsx +4 -2
- package/src/dev/showcase/chart.tsx +4 -2
- package/src/dev/showcase/checkbox.tsx +4 -2
- package/src/dev/showcase/collapsible.tsx +4 -2
- package/src/dev/showcase/combobox.tsx +9 -5
- package/src/dev/showcase/command.tsx +6 -3
- package/src/dev/showcase/context-menu.tsx +5 -3
- package/src/dev/showcase/dialog.tsx +5 -3
- package/src/dev/showcase/drawer.tsx +5 -3
- package/src/dev/showcase/dropdown-menu.tsx +7 -4
- package/src/dev/showcase/empty.tsx +6 -3
- package/src/dev/showcase/hover-card.tsx +7 -4
- package/src/dev/showcase/input-group.tsx +6 -3
- package/src/dev/showcase/input-otp.tsx +6 -3
- package/src/dev/showcase/input.tsx +6 -3
- package/src/dev/showcase/item.tsx +4 -2
- package/src/dev/showcase/kbd.tsx +10 -6
- package/src/dev/showcase/label.tsx +2 -1
- package/src/dev/showcase/menubar.tsx +5 -3
- package/src/dev/showcase/navigation-menu.tsx +5 -3
- package/src/dev/showcase/overview.tsx +9 -5
- package/src/dev/showcase/pagination.tsx +4 -2
- package/src/dev/showcase/popover.tsx +5 -3
- package/src/dev/showcase/progress.tsx +4 -2
- package/src/dev/showcase/radio-group.tsx +2 -1
- package/src/dev/showcase/resizable.tsx +4 -2
- package/src/dev/showcase/scroll-area.tsx +2 -1
- package/src/dev/showcase/select.tsx +7 -4
- package/src/dev/showcase/separator.tsx +2 -1
- package/src/dev/showcase/sheet.tsx +5 -3
- package/src/dev/showcase/sidebar.tsx +4 -2
- package/src/dev/showcase/skeleton.tsx +2 -1
- package/src/dev/showcase/slider.tsx +6 -3
- package/src/dev/showcase/sonner.tsx +2 -1
- package/src/dev/showcase/spinner.tsx +2 -1
- package/src/dev/showcase/switch.tsx +2 -1
- package/src/dev/showcase/table.tsx +4 -2
- package/src/dev/showcase/tabs.tsx +4 -2
- package/src/dev/showcase/textarea.tsx +6 -3
- package/src/dev/showcase/toast.tsx +2 -1
- package/src/dev/showcase/toggle-group.tsx +6 -3
- package/src/dev/showcase/toggle.tsx +2 -1
- package/src/dev/showcase/tooltip.tsx +5 -3
- package/src/dev/showcase/why.tsx +271 -0
- package/src/hooks/use-mobile.test.ts +72 -0
- package/src/lib/utils.test.ts +26 -10
- package/src/styles/gladvn.css +0 -1
- package/src/styles/tokens.css +4 -0
- package/dist/components/macro/accordion-preset.d.ts +0 -14
- package/dist/components/macro/accordion-preset.d.ts.map +0 -1
- package/dist/components/macro/alert-dialog-preset.d.ts +0 -26
- package/dist/components/macro/alert-dialog-preset.d.ts.map +0 -1
- package/dist/components/macro/alert-preset.d.ts +0 -14
- package/dist/components/macro/alert-preset.d.ts.map +0 -1
- package/dist/components/macro/avatar-preset.d.ts +0 -11
- package/dist/components/macro/avatar-preset.d.ts.map +0 -1
- package/dist/components/macro/breadcrumb-preset.d.ts +0 -12
- package/dist/components/macro/breadcrumb-preset.d.ts.map +0 -1
- package/dist/components/macro/card-preset.d.ts +0 -10
- package/dist/components/macro/card-preset.d.ts.map +0 -1
- package/dist/components/macro/carousel-preset.d.ts +0 -18
- package/dist/components/macro/carousel-preset.d.ts.map +0 -1
- package/dist/components/macro/checkbox-preset.d.ts +0 -14
- package/dist/components/macro/checkbox-preset.d.ts.map +0 -1
- package/dist/components/macro/combobox-preset.d.ts +0 -27
- package/dist/components/macro/combobox-preset.d.ts.map +0 -1
- package/dist/components/macro/command-preset.d.ts +0 -16
- package/dist/components/macro/command-preset.d.ts.map +0 -1
- package/dist/components/macro/date-picker.d.ts +0 -62
- package/dist/components/macro/date-picker.d.ts.map +0 -1
- package/dist/components/macro/dialog-preset.d.ts +0 -24
- package/dist/components/macro/dialog-preset.d.ts.map +0 -1
- package/dist/components/macro/empty-preset.d.ts +0 -15
- package/dist/components/macro/empty-preset.d.ts.map +0 -1
- package/dist/components/macro/field-preset.d.ts +0 -15
- package/dist/components/macro/field-preset.d.ts.map +0 -1
- package/dist/components/macro/index.d.ts +0 -22
- package/dist/components/macro/index.d.ts.map +0 -1
- package/dist/components/macro/input-otp-preset.d.ts +0 -19
- package/dist/components/macro/input-otp-preset.d.ts.map +0 -1
- package/dist/components/macro/input-preset.d.ts +0 -21
- package/dist/components/macro/input-preset.d.ts.map +0 -1
- package/dist/components/macro/pagination-preset.d.ts +0 -13
- package/dist/components/macro/pagination-preset.d.ts.map +0 -1
- package/dist/components/macro/progress-preset.d.ts +0 -10
- package/dist/components/macro/progress-preset.d.ts.map +0 -1
- package/dist/components/macro/radio-group-preset.d.ts +0 -22
- package/dist/components/macro/radio-group-preset.d.ts.map +0 -1
- package/dist/components/macro/select-preset.d.ts +0 -42
- package/dist/components/macro/select-preset.d.ts.map +0 -1
- package/dist/components/macro/slider-preset.d.ts +0 -12
- package/dist/components/macro/slider-preset.d.ts.map +0 -1
- package/dist/components/macro/switch-preset.d.ts +0 -12
- package/dist/components/macro/switch-preset.d.ts.map +0 -1
- package/dist/components/macro/tabs-preset.d.ts +0 -17
- package/dist/components/macro/tabs-preset.d.ts.map +0 -1
- package/dist/components/macro/textarea-preset.d.ts +0 -17
- package/dist/components/macro/textarea-preset.d.ts.map +0 -1
- package/dist/components/micro/accordion.d.ts +0 -15
- package/dist/components/micro/accordion.d.ts.map +0 -1
- package/dist/components/micro/alert-dialog.d.ts +0 -33
- package/dist/components/micro/alert-dialog.d.ts.map +0 -1
- package/dist/components/micro/alert.d.ts +0 -35
- package/dist/components/micro/alert.d.ts.map +0 -1
- package/dist/components/micro/aspect-ratio.d.ts +0 -20
- package/dist/components/micro/aspect-ratio.d.ts.map +0 -1
- package/dist/components/micro/avatar.d.ts +0 -23
- package/dist/components/micro/avatar.d.ts.map +0 -1
- package/dist/components/micro/badge.d.ts +0 -23
- package/dist/components/micro/badge.d.ts.map +0 -1
- package/dist/components/micro/breadcrumb.d.ts +0 -31
- package/dist/components/micro/breadcrumb.d.ts.map +0 -1
- package/dist/components/micro/button.d.ts +0 -46
- package/dist/components/micro/button.d.ts.map +0 -1
- package/dist/components/micro/calendar.d.ts +0 -28
- package/dist/components/micro/calendar.d.ts.map +0 -1
- package/dist/components/micro/card.d.ts +0 -28
- package/dist/components/micro/card.d.ts.map +0 -1
- package/dist/components/micro/carousel.d.ts +0 -29
- package/dist/components/micro/carousel.d.ts.map +0 -1
- package/dist/components/micro/chart.d.ts +0 -49
- package/dist/components/micro/chart.d.ts.map +0 -1
- package/dist/components/micro/checkbox.d.ts +0 -17
- package/dist/components/micro/checkbox.d.ts.map +0 -1
- package/dist/components/micro/collapsible.d.ts +0 -15
- package/dist/components/micro/collapsible.d.ts.map +0 -1
- package/dist/components/micro/combobox.d.ts +0 -34
- package/dist/components/micro/combobox.d.ts.map +0 -1
- package/dist/components/micro/command.d.ts +0 -79
- package/dist/components/micro/command.d.ts.map +0 -1
- package/dist/components/micro/context-menu.d.ts +0 -58
- package/dist/components/micro/context-menu.d.ts.map +0 -1
- package/dist/components/micro/dialog.d.ts +0 -15
- package/dist/components/micro/dialog.d.ts.map +0 -1
- package/dist/components/micro/direction.d.ts +0 -2
- package/dist/components/micro/direction.d.ts.map +0 -1
- package/dist/components/micro/drawer.d.ts +0 -18
- package/dist/components/micro/drawer.d.ts.map +0 -1
- package/dist/components/micro/dropdown-menu.d.ts +0 -40
- package/dist/components/micro/dropdown-menu.d.ts.map +0 -1
- package/dist/components/micro/empty.d.ts +0 -30
- package/dist/components/micro/empty.d.ts.map +0 -1
- package/dist/components/micro/field.d.ts +0 -29
- package/dist/components/micro/field.d.ts.map +0 -1
- package/dist/components/micro/hover-card.d.ts +0 -18
- package/dist/components/micro/hover-card.d.ts.map +0 -1
- package/dist/components/micro/input-group.d.ts +0 -17
- package/dist/components/micro/input-group.d.ts.map +0 -1
- package/dist/components/micro/input-otp.d.ts +0 -44
- package/dist/components/micro/input-otp.d.ts.map +0 -1
- package/dist/components/micro/input.d.ts +0 -29
- package/dist/components/micro/input.d.ts.map +0 -1
- package/dist/components/micro/item.d.ts +0 -31
- package/dist/components/micro/item.d.ts.map +0 -1
- package/dist/components/micro/kbd.d.ts +0 -9
- package/dist/components/micro/kbd.d.ts.map +0 -1
- package/dist/components/micro/label.d.ts +0 -15
- package/dist/components/micro/label.d.ts.map +0 -1
- package/dist/components/micro/menubar.d.ts +0 -40
- package/dist/components/micro/menubar.d.ts.map +0 -1
- package/dist/components/micro/navigation-menu.d.ts +0 -26
- package/dist/components/micro/navigation-menu.d.ts.map +0 -1
- package/dist/components/micro/pagination.d.ts +0 -33
- package/dist/components/micro/pagination.d.ts.map +0 -1
- package/dist/components/micro/popover.d.ts +0 -24
- package/dist/components/micro/popover.d.ts.map +0 -1
- package/dist/components/micro/progress.d.ts +0 -19
- package/dist/components/micro/progress.d.ts.map +0 -1
- package/dist/components/micro/radio-group.d.ts +0 -13
- package/dist/components/micro/radio-group.d.ts.map +0 -1
- package/dist/components/micro/resizable.d.ts +0 -12
- package/dist/components/micro/resizable.d.ts.map +0 -1
- package/dist/components/micro/scroll-area.d.ts +0 -12
- package/dist/components/micro/scroll-area.d.ts.map +0 -1
- package/dist/components/micro/select.d.ts +0 -22
- package/dist/components/micro/select.d.ts.map +0 -1
- package/dist/components/micro/separator.d.ts +0 -9
- package/dist/components/micro/separator.d.ts.map +0 -1
- package/dist/components/micro/sheet.d.ts +0 -17
- package/dist/components/micro/sheet.d.ts.map +0 -1
- package/dist/components/micro/sidebar.d.ts +0 -28
- package/dist/components/micro/sidebar.d.ts.map +0 -1
- package/dist/components/micro/skeleton.d.ts +0 -16
- package/dist/components/micro/skeleton.d.ts.map +0 -1
- package/dist/components/micro/slider.d.ts +0 -21
- package/dist/components/micro/slider.d.ts.map +0 -1
- package/dist/components/micro/sonner.d.ts +0 -5
- package/dist/components/micro/sonner.d.ts.map +0 -1
- package/dist/components/micro/spinner.d.ts +0 -21
- package/dist/components/micro/spinner.d.ts.map +0 -1
- package/dist/components/micro/switch.d.ts +0 -13
- package/dist/components/micro/switch.d.ts.map +0 -1
- package/dist/components/micro/table.d.ts +0 -17
- package/dist/components/micro/table.d.ts.map +0 -1
- package/dist/components/micro/tabs.d.ts +0 -13
- package/dist/components/micro/tabs.d.ts.map +0 -1
- package/dist/components/micro/textarea.d.ts +0 -24
- package/dist/components/micro/textarea.d.ts.map +0 -1
- package/dist/components/micro/theme-provider.d.ts +0 -76
- package/dist/components/micro/theme-provider.d.ts.map +0 -1
- package/dist/components/micro/toggle-group.d.ts +0 -22
- package/dist/components/micro/toggle-group.d.ts.map +0 -1
- package/dist/components/micro/toggle.d.ts +0 -16
- package/dist/components/micro/toggle.d.ts.map +0 -1
- package/dist/components/micro/tooltip.d.ts +0 -21
- package/dist/components/micro/tooltip.d.ts.map +0 -1
- package/dist/dev/App.d.ts +0 -3
- package/dist/dev/App.d.ts.map +0 -1
- package/dist/dev/components/GladvnLogo.d.ts +0 -10
- package/dist/dev/components/GladvnLogo.d.ts.map +0 -1
- package/dist/dev/components/code-highlighter.d.ts +0 -5
- package/dist/dev/components/code-highlighter.d.ts.map +0 -1
- package/dist/dev/components/dev-context.d.ts +0 -12
- package/dist/dev/components/dev-context.d.ts.map +0 -1
- package/dist/dev/components/showcase.d.ts +0 -72
- package/dist/dev/components/showcase.d.ts.map +0 -1
- package/dist/dev/data.d.ts +0 -68
- package/dist/dev/data.d.ts.map +0 -1
- package/dist/dev/main.d.ts +0 -1
- package/dist/dev/main.d.ts.map +0 -1
- package/dist/dev/sections/buttons.d.ts +0 -2
- package/dist/dev/sections/buttons.d.ts.map +0 -1
- package/dist/dev/sections/display.d.ts +0 -2
- package/dist/dev/sections/display.d.ts.map +0 -1
- package/dist/dev/sections/feedback.d.ts +0 -2
- package/dist/dev/sections/feedback.d.ts.map +0 -1
- package/dist/dev/sections/forms.d.ts +0 -2
- package/dist/dev/sections/forms.d.ts.map +0 -1
- package/dist/dev/sections/interactive.d.ts +0 -2
- package/dist/dev/sections/interactive.d.ts.map +0 -1
- package/dist/dev/sections/overview.d.ts +0 -2
- package/dist/dev/sections/overview.d.ts.map +0 -1
- package/dist/dev/showcase/accordion.d.ts +0 -2
- package/dist/dev/showcase/accordion.d.ts.map +0 -1
- package/dist/dev/showcase/alert-dialog.d.ts +0 -2
- package/dist/dev/showcase/alert-dialog.d.ts.map +0 -1
- package/dist/dev/showcase/alert.d.ts +0 -2
- package/dist/dev/showcase/alert.d.ts.map +0 -1
- package/dist/dev/showcase/aspect-ratio.d.ts +0 -2
- package/dist/dev/showcase/aspect-ratio.d.ts.map +0 -1
- package/dist/dev/showcase/avatar.d.ts +0 -2
- package/dist/dev/showcase/avatar.d.ts.map +0 -1
- package/dist/dev/showcase/badge.d.ts +0 -2
- package/dist/dev/showcase/badge.d.ts.map +0 -1
- package/dist/dev/showcase/breadcrumb.d.ts +0 -2
- package/dist/dev/showcase/breadcrumb.d.ts.map +0 -1
- package/dist/dev/showcase/button.d.ts +0 -2
- package/dist/dev/showcase/button.d.ts.map +0 -1
- package/dist/dev/showcase/calendar.d.ts +0 -2
- package/dist/dev/showcase/calendar.d.ts.map +0 -1
- package/dist/dev/showcase/card.d.ts +0 -2
- package/dist/dev/showcase/card.d.ts.map +0 -1
- package/dist/dev/showcase/carousel.d.ts +0 -2
- package/dist/dev/showcase/carousel.d.ts.map +0 -1
- package/dist/dev/showcase/chart.d.ts +0 -2
- package/dist/dev/showcase/chart.d.ts.map +0 -1
- package/dist/dev/showcase/checkbox.d.ts +0 -2
- package/dist/dev/showcase/checkbox.d.ts.map +0 -1
- package/dist/dev/showcase/collapsible.d.ts +0 -3
- package/dist/dev/showcase/collapsible.d.ts.map +0 -1
- package/dist/dev/showcase/combobox.d.ts +0 -2
- package/dist/dev/showcase/combobox.d.ts.map +0 -1
- package/dist/dev/showcase/command.d.ts +0 -2
- package/dist/dev/showcase/command.d.ts.map +0 -1
- package/dist/dev/showcase/context-menu.d.ts +0 -2
- package/dist/dev/showcase/context-menu.d.ts.map +0 -1
- package/dist/dev/showcase/dialog.d.ts +0 -2
- package/dist/dev/showcase/dialog.d.ts.map +0 -1
- package/dist/dev/showcase/drawer.d.ts +0 -2
- package/dist/dev/showcase/drawer.d.ts.map +0 -1
- package/dist/dev/showcase/dropdown-menu.d.ts +0 -2
- package/dist/dev/showcase/dropdown-menu.d.ts.map +0 -1
- package/dist/dev/showcase/empty.d.ts +0 -2
- package/dist/dev/showcase/empty.d.ts.map +0 -1
- package/dist/dev/showcase/hover-card.d.ts +0 -2
- package/dist/dev/showcase/hover-card.d.ts.map +0 -1
- package/dist/dev/showcase/input-group.d.ts +0 -2
- package/dist/dev/showcase/input-group.d.ts.map +0 -1
- package/dist/dev/showcase/input-otp.d.ts +0 -2
- package/dist/dev/showcase/input-otp.d.ts.map +0 -1
- package/dist/dev/showcase/input.d.ts +0 -2
- package/dist/dev/showcase/input.d.ts.map +0 -1
- package/dist/dev/showcase/item.d.ts +0 -2
- package/dist/dev/showcase/item.d.ts.map +0 -1
- package/dist/dev/showcase/kbd.d.ts +0 -2
- package/dist/dev/showcase/kbd.d.ts.map +0 -1
- package/dist/dev/showcase/label.d.ts +0 -2
- package/dist/dev/showcase/label.d.ts.map +0 -1
- package/dist/dev/showcase/menubar.d.ts +0 -2
- package/dist/dev/showcase/menubar.d.ts.map +0 -1
- package/dist/dev/showcase/navigation-menu.d.ts +0 -3
- package/dist/dev/showcase/navigation-menu.d.ts.map +0 -1
- package/dist/dev/showcase/overview.d.ts +0 -2
- package/dist/dev/showcase/overview.d.ts.map +0 -1
- package/dist/dev/showcase/pagination.d.ts +0 -2
- package/dist/dev/showcase/pagination.d.ts.map +0 -1
- package/dist/dev/showcase/popover.d.ts +0 -2
- package/dist/dev/showcase/popover.d.ts.map +0 -1
- package/dist/dev/showcase/progress.d.ts +0 -2
- package/dist/dev/showcase/progress.d.ts.map +0 -1
- package/dist/dev/showcase/radio-group.d.ts +0 -2
- package/dist/dev/showcase/radio-group.d.ts.map +0 -1
- package/dist/dev/showcase/resizable.d.ts +0 -2
- package/dist/dev/showcase/resizable.d.ts.map +0 -1
- package/dist/dev/showcase/scroll-area.d.ts +0 -2
- package/dist/dev/showcase/scroll-area.d.ts.map +0 -1
- package/dist/dev/showcase/select.d.ts +0 -2
- package/dist/dev/showcase/select.d.ts.map +0 -1
- package/dist/dev/showcase/separator.d.ts +0 -2
- package/dist/dev/showcase/separator.d.ts.map +0 -1
- package/dist/dev/showcase/sheet.d.ts +0 -2
- package/dist/dev/showcase/sheet.d.ts.map +0 -1
- package/dist/dev/showcase/sidebar.d.ts +0 -2
- package/dist/dev/showcase/sidebar.d.ts.map +0 -1
- package/dist/dev/showcase/skeleton.d.ts +0 -2
- package/dist/dev/showcase/skeleton.d.ts.map +0 -1
- package/dist/dev/showcase/slider.d.ts +0 -2
- package/dist/dev/showcase/slider.d.ts.map +0 -1
- package/dist/dev/showcase/sonner.d.ts +0 -2
- package/dist/dev/showcase/sonner.d.ts.map +0 -1
- package/dist/dev/showcase/spinner.d.ts +0 -2
- package/dist/dev/showcase/spinner.d.ts.map +0 -1
- package/dist/dev/showcase/switch.d.ts +0 -2
- package/dist/dev/showcase/switch.d.ts.map +0 -1
- package/dist/dev/showcase/table.d.ts +0 -2
- package/dist/dev/showcase/table.d.ts.map +0 -1
- package/dist/dev/showcase/tabs.d.ts +0 -2
- package/dist/dev/showcase/tabs.d.ts.map +0 -1
- package/dist/dev/showcase/textarea.d.ts +0 -2
- package/dist/dev/showcase/textarea.d.ts.map +0 -1
- package/dist/dev/showcase/toast.d.ts +0 -2
- package/dist/dev/showcase/toast.d.ts.map +0 -1
- package/dist/dev/showcase/toggle-group.d.ts +0 -2
- package/dist/dev/showcase/toggle-group.d.ts.map +0 -1
- package/dist/dev/showcase/toggle.d.ts +0 -2
- package/dist/dev/showcase/toggle.d.ts.map +0 -1
- package/dist/dev/showcase/tooltip.d.ts +0 -2
- package/dist/dev/showcase/tooltip.d.ts.map +0 -1
- package/dist/hooks/use-controllable-state.d.ts +0 -14
- package/dist/hooks/use-controllable-state.d.ts.map +0 -1
- package/dist/hooks/use-mobile.d.ts +0 -2
- package/dist/hooks/use-mobile.d.ts.map +0 -1
- package/dist/index.cjs +0 -5099
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts +0 -58
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -4753
- package/dist/index.js.map +0 -1
- package/dist/lib/types.d.ts +0 -4
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/utils.d.ts +0 -3
- package/dist/lib/utils.d.ts.map +0 -1
- package/dist/preset.d.ts +0 -18
- package/dist/preset.d.ts.map +0 -1
- package/dist/test/setup.d.ts +0 -1
- package/dist/test/setup.d.ts.map +0 -1
- package/scripts/add-icononly-prop.ts +0 -84
- package/scripts/audit-best-practices.ts +0 -114
- package/scripts/audit-showcase.ts +0 -262
- package/scripts/audit-showcases.ts +0 -83
- package/scripts/clean-imports.ts +0 -21
- package/scripts/count_missing.ts +0 -24
- package/scripts/find-css-vars.ts +0 -62
- package/scripts/fix-portals.ts +0 -90
- package/scripts/format-codestrings.ts +0 -87
- package/scripts/full-audit.ts +0 -89
- package/scripts/merge-components.cjs +0 -65
- package/scripts/merge-components.js +0 -64
- package/scripts/optimize-barrel.ts +0 -116
- package/scripts/organize-imports.ts +0 -21
- package/scripts/refactor_divs.ts +0 -39
- package/scripts/regex-format.cjs +0 -67
- package/scripts/remove_div_wrappers.ts +0 -17
- package/scripts/tmp.tsx +0 -25
- package/scripts/update-gaps.ts +0 -83
- package/scripts/update_showcase_codestrings.ts +0 -87
package/dist/lib/types.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export type Size = "sm" | "md" | "lg";
|
|
2
|
-
export type Color = "primary" | "secondary" | "destructive" | "success" | "warning" | "info" | "tertiary" | "muted" | "accent";
|
|
3
|
-
export type Variant = "solid" | "outline" | "ghost" | "soft" | "link";
|
|
4
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/lib/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,MAAM,MAAM,KAAK,GACb,SAAS,GACT,WAAW,GACX,aAAa,GACb,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC"}
|
package/dist/lib/utils.d.ts
DELETED
package/dist/lib/utils.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
package/dist/preset.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export * from './components/macro/accordion-preset';
|
|
2
|
-
export * from './components/macro/avatar-preset';
|
|
3
|
-
export * from './components/macro/breadcrumb-preset';
|
|
4
|
-
export * from './components/macro/carousel-preset';
|
|
5
|
-
export * from './components/macro/checkbox-preset';
|
|
6
|
-
export * from './components/macro/combobox-preset';
|
|
7
|
-
export * from './components/macro/field-preset';
|
|
8
|
-
export * from './components/macro/input-otp-preset';
|
|
9
|
-
export * from './components/macro/input-preset';
|
|
10
|
-
export * from './components/macro/pagination-preset';
|
|
11
|
-
export * from './components/macro/progress-preset';
|
|
12
|
-
export * from './components/macro/radio-group-preset';
|
|
13
|
-
export * from './components/macro/select-preset';
|
|
14
|
-
export * from './components/macro/slider-preset';
|
|
15
|
-
export * from './components/macro/switch-preset';
|
|
16
|
-
export * from './components/macro/tabs-preset';
|
|
17
|
-
export * from './components/macro/textarea-preset';
|
|
18
|
-
//# sourceMappingURL=preset.d.ts.map
|
package/dist/preset.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC"}
|
package/dist/test/setup.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=setup.d.ts.map
|
package/dist/test/setup.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Project, SyntaxKind, JsxElement, JsxSelfClosingElement } from "ts-morph";
|
|
2
|
-
|
|
3
|
-
const project = new Project({
|
|
4
|
-
tsConfigFilePath: "tsconfig.json",
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
const sourceFiles = project.getSourceFiles("src/**/*.tsx");
|
|
8
|
-
|
|
9
|
-
let changed = 0;
|
|
10
|
-
|
|
11
|
-
for (const sf of sourceFiles) {
|
|
12
|
-
let fileChanged = false;
|
|
13
|
-
|
|
14
|
-
const jsxElements = sf.getDescendantsOfKind(SyntaxKind.JsxElement);
|
|
15
|
-
|
|
16
|
-
for (const jsx of jsxElements) {
|
|
17
|
-
const opening = jsx.getOpeningElement();
|
|
18
|
-
const tagName = opening.getTagNameNode().getText();
|
|
19
|
-
|
|
20
|
-
if (tagName === "Button") {
|
|
21
|
-
// check if it already has iconOnly
|
|
22
|
-
const hasIconOnly = opening.getAttributes().some(attr => {
|
|
23
|
-
if (attr.getKind() === SyntaxKind.JsxAttribute) {
|
|
24
|
-
return attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "iconOnly";
|
|
25
|
-
}
|
|
26
|
-
return false;
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
// also check if it has data-icon="true" manually passed
|
|
30
|
-
const hasDataIcon = opening.getAttributes().some(attr => {
|
|
31
|
-
if (attr.getKind() === SyntaxKind.JsxAttribute) {
|
|
32
|
-
return attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "data-icon";
|
|
33
|
-
}
|
|
34
|
-
return false;
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
if (!hasIconOnly && !hasDataIcon) {
|
|
38
|
-
// check children
|
|
39
|
-
const children = jsx.getJsxChildren();
|
|
40
|
-
// filter out whitespace text
|
|
41
|
-
const significantChildren = children.filter(c => {
|
|
42
|
-
if (c.getKind() === SyntaxKind.JsxText) {
|
|
43
|
-
return c.getText().trim() !== "";
|
|
44
|
-
}
|
|
45
|
-
if (c.getKind() === SyntaxKind.JsxExpression) {
|
|
46
|
-
// Sometimes it's a comment { /* comment */ }, ignore empty expressions if no actual elements.
|
|
47
|
-
// But actually an expression like {icon} might be an icon.
|
|
48
|
-
// Let's assume expressions might be text, so we skip auto-adding if there are expressions unless it's just one expression.
|
|
49
|
-
// Actually, to be safe, only add if the child is explicitly an Icon component.
|
|
50
|
-
}
|
|
51
|
-
return true;
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
if (significantChildren.length === 1) {
|
|
55
|
-
const child = significantChildren[0];
|
|
56
|
-
let isIcon = false;
|
|
57
|
-
|
|
58
|
-
if (child.getKind() === SyntaxKind.JsxElement) {
|
|
59
|
-
const childTag = child.asKind(SyntaxKind.JsxElement)?.getOpeningElement().getTagNameNode().getText();
|
|
60
|
-
if (childTag && (childTag.endsWith("Icon") || childTag === "svg")) isIcon = true;
|
|
61
|
-
} else if (child.getKind() === SyntaxKind.JsxSelfClosingElement) {
|
|
62
|
-
const childTag = child.asKind(SyntaxKind.JsxSelfClosingElement)?.getTagNameNode().getText();
|
|
63
|
-
if (childTag && (childTag.endsWith("Icon") || childTag === "svg")) isIcon = true;
|
|
64
|
-
} else if (child.getKind() === SyntaxKind.JsxExpression) {
|
|
65
|
-
// {icon} or something. We can't safely know if it's an icon. So skip.
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (isIcon) {
|
|
69
|
-
opening.addAttribute({ name: "iconOnly" });
|
|
70
|
-
fileChanged = true;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (fileChanged) {
|
|
78
|
-
sf.saveSync();
|
|
79
|
-
changed++;
|
|
80
|
-
console.log("Updated", sf.getFilePath());
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
console.log(`Updated ${changed} files.`);
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Project, SyntaxKind } from "ts-morph";
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
|
|
5
|
-
const project = new Project({
|
|
6
|
-
tsConfigFilePath: "tsconfig.json",
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
const sourceFiles = project.getSourceFiles("src/components/micro/*.tsx");
|
|
10
|
-
|
|
11
|
-
interface Violation {
|
|
12
|
-
file: string;
|
|
13
|
-
type: string;
|
|
14
|
-
message: string;
|
|
15
|
-
line: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const violations: Violation[] = [];
|
|
19
|
-
|
|
20
|
-
// Regular expressions for anti-patterns
|
|
21
|
-
const MAGIC_CSS_REGEX =
|
|
22
|
-
/\[&_?[a-zA-Z0-9\->\+~]\]|\*:\[?[a-zA-Z0-9\->\+~]\]?|has-\[>?[a-zA-Z0-9\->\+~]\]/;
|
|
23
|
-
const ARBITRARY_VAR_REGEX = /var\(--[a-zA-Z0-9-]+\)|-\[--[a-zA-Z0-9-]+\]/;
|
|
24
|
-
// Exclude semantic colors (primary, muted, etc.), find raw colors
|
|
25
|
-
const HARDCODED_COLOR_REGEX =
|
|
26
|
-
/(bg|text|border|ring)-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-[1-9]00/;
|
|
27
|
-
|
|
28
|
-
for (const sf of sourceFiles) {
|
|
29
|
-
const fileName = sf.getBaseName();
|
|
30
|
-
|
|
31
|
-
// 1. Check for "default" variants/sizes statically
|
|
32
|
-
const text = sf.getFullText();
|
|
33
|
-
const lines = text.split("\n");
|
|
34
|
-
|
|
35
|
-
lines.forEach((line, index) => {
|
|
36
|
-
const lineNum = index + 1;
|
|
37
|
-
|
|
38
|
-
// Check for Magic CSS
|
|
39
|
-
if (MAGIC_CSS_REGEX.test(line) && !line.includes("eslint-disable")) {
|
|
40
|
-
// Small exception for specific radix states if needed, but let's flag them all first
|
|
41
|
-
violations.push({
|
|
42
|
-
file: fileName,
|
|
43
|
-
type: "Magic CSS",
|
|
44
|
-
message:
|
|
45
|
-
"Found descendant/magic CSS combinator: " +
|
|
46
|
-
line.trim().substring(0, 50),
|
|
47
|
-
line: lineNum,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// Check for Arbitrary Variables
|
|
52
|
-
if (
|
|
53
|
-
ARBITRARY_VAR_REGEX.test(line) &&
|
|
54
|
-
!line.includes("radix-") &&
|
|
55
|
-
!line.includes("collapsible-") &&
|
|
56
|
-
!line.includes("accordion-")
|
|
57
|
-
) {
|
|
58
|
-
violations.push({
|
|
59
|
-
file: fileName,
|
|
60
|
-
type: "Arbitrary CSS Variable",
|
|
61
|
-
message:
|
|
62
|
-
"Found arbitrary CSS variable not from Headless UI: " +
|
|
63
|
-
line.trim().substring(0, 50),
|
|
64
|
-
line: lineNum,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Check for Hardcoded Colors
|
|
69
|
-
if (HARDCODED_COLOR_REGEX.test(line)) {
|
|
70
|
-
violations.push({
|
|
71
|
-
file: fileName,
|
|
72
|
-
type: "Hardcoded Color",
|
|
73
|
-
message:
|
|
74
|
-
"Found raw Tailwind color instead of semantic token: " +
|
|
75
|
-
line.trim().substring(0, 50),
|
|
76
|
-
line: lineNum,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Check for default variants
|
|
81
|
-
if (/(variant|size|color):\s*["']default["']/.test(line)) {
|
|
82
|
-
violations.push({
|
|
83
|
-
file: fileName,
|
|
84
|
-
type: "Default Variant",
|
|
85
|
-
message: "Found 'default' as a variant/size/color value",
|
|
86
|
-
line: lineNum,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Group violations by file
|
|
93
|
-
const grouped: Record<string, Violation[]> = {};
|
|
94
|
-
for (const v of violations) {
|
|
95
|
-
if (!grouped[v.file]) grouped[v.file] = [];
|
|
96
|
-
grouped[v.file].push(v);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
console.log("=== COMPONENT BEST PRACTICES AUDIT ===");
|
|
100
|
-
if (violations.length === 0) {
|
|
101
|
-
console.log(
|
|
102
|
-
"✅ All components passed the Best Practices Audit with 100% compliance!",
|
|
103
|
-
);
|
|
104
|
-
} else {
|
|
105
|
-
console.log(
|
|
106
|
-
`❌ Found ${violations.length} violations across ${Object.keys(grouped).length} components.\n`,
|
|
107
|
-
);
|
|
108
|
-
for (const file of Object.keys(grouped)) {
|
|
109
|
-
console.log(`\n📄 ${file}`);
|
|
110
|
-
for (const v of grouped[file]) {
|
|
111
|
-
console.log(` - [${v.type}] Line ${v.line}: ${v.message}`);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Project,
|
|
3
|
-
SyntaxKind,
|
|
4
|
-
JsxOpeningElement,
|
|
5
|
-
JsxSelfClosingElement,
|
|
6
|
-
} from "ts-morph";
|
|
7
|
-
import * as fs from "fs";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
|
|
10
|
-
const project = new Project({
|
|
11
|
-
tsConfigFilePath: "tsconfig.json",
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
const uiSourceFiles = project.getSourceFiles("src/components/micro/*.tsx");
|
|
15
|
-
const monolithicSourceFiles = project.getSourceFiles(
|
|
16
|
-
"src/components/monolithic/*.tsx",
|
|
17
|
-
);
|
|
18
|
-
const showcaseSourceFiles = project.getSourceFiles("src/dev/showcase/*.tsx");
|
|
19
|
-
|
|
20
|
-
type ComponentCoverage = {
|
|
21
|
-
name: string;
|
|
22
|
-
uiFile: string;
|
|
23
|
-
exportedComponents: string[];
|
|
24
|
-
variants: Record<string, string[]>;
|
|
25
|
-
showcaseFile: string | null;
|
|
26
|
-
missingComponents: string[];
|
|
27
|
-
missingVariants: Record<string, string[]>;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const results: ComponentCoverage[] = [];
|
|
31
|
-
|
|
32
|
-
for (const uiFile of uiSourceFiles) {
|
|
33
|
-
const baseName = uiFile.getBaseNameWithoutExtension();
|
|
34
|
-
const showcaseFile = showcaseSourceFiles.find(
|
|
35
|
-
(f) => f.getBaseNameWithoutExtension() === baseName,
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
// Find all exported components (Capitalized names)
|
|
39
|
-
const exportedComponents: string[] = [];
|
|
40
|
-
|
|
41
|
-
// Named exports
|
|
42
|
-
for (const [name, declarations] of uiFile.getExportedDeclarations()) {
|
|
43
|
-
if (
|
|
44
|
-
/^[A-Z]/.test(name) &&
|
|
45
|
-
!name.includes("Context") &&
|
|
46
|
-
!name.includes("Provider") &&
|
|
47
|
-
!name.includes("Overlay") &&
|
|
48
|
-
!name.includes("Portal")
|
|
49
|
-
) {
|
|
50
|
-
const decl = declarations[0];
|
|
51
|
-
if (
|
|
52
|
-
decl &&
|
|
53
|
-
decl.getKind() !== SyntaxKind.TypeAliasDeclaration &&
|
|
54
|
-
decl.getKind() !== SyntaxKind.InterfaceDeclaration
|
|
55
|
-
) {
|
|
56
|
-
exportedComponents.push(name);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Find variants from CVA
|
|
62
|
-
const variants: Record<string, string[]> = {};
|
|
63
|
-
const cvaCalls = uiFile
|
|
64
|
-
.getDescendantsOfKind(SyntaxKind.CallExpression)
|
|
65
|
-
.filter((c) => c.getExpression().getText() === "cva");
|
|
66
|
-
|
|
67
|
-
for (const cvaCall of cvaCalls) {
|
|
68
|
-
const args = cvaCall.getArguments();
|
|
69
|
-
if (args.length >= 2) {
|
|
70
|
-
const configObj = args[1].asKind(SyntaxKind.ObjectLiteralExpression);
|
|
71
|
-
if (configObj) {
|
|
72
|
-
const variantsProp = configObj.getProperty("variants");
|
|
73
|
-
if (
|
|
74
|
-
variantsProp &&
|
|
75
|
-
variantsProp.getKind() === SyntaxKind.PropertyAssignment
|
|
76
|
-
) {
|
|
77
|
-
const variantsObj = variantsProp.getInitializerIfKind(
|
|
78
|
-
SyntaxKind.ObjectLiteralExpression,
|
|
79
|
-
);
|
|
80
|
-
if (variantsObj) {
|
|
81
|
-
for (const variantProp of variantsObj.getProperties()) {
|
|
82
|
-
if (variantProp.getKind() === SyntaxKind.PropertyAssignment) {
|
|
83
|
-
const variantName = variantProp.getName();
|
|
84
|
-
const variantValuesObj = variantProp.getInitializerIfKind(
|
|
85
|
-
SyntaxKind.ObjectLiteralExpression,
|
|
86
|
-
);
|
|
87
|
-
if (variantValuesObj) {
|
|
88
|
-
variants[variantName] = variantValuesObj
|
|
89
|
-
.getProperties()
|
|
90
|
-
.map((p) => p.getName().replace(/['"]/g, ""));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Also check monolithic wrapper for extra variants/components if it exists
|
|
101
|
-
const monolithicFile = monolithicSourceFiles.find(
|
|
102
|
-
(f) => f.getBaseNameWithoutExtension() === baseName,
|
|
103
|
-
);
|
|
104
|
-
if (monolithicFile) {
|
|
105
|
-
for (const [
|
|
106
|
-
name,
|
|
107
|
-
declarations,
|
|
108
|
-
] of monolithicFile.getExportedDeclarations()) {
|
|
109
|
-
if (
|
|
110
|
-
/^[A-Z]/.test(name) &&
|
|
111
|
-
!name.includes("Context") &&
|
|
112
|
-
!name.includes("Provider") &&
|
|
113
|
-
!exportedComponents.includes(name)
|
|
114
|
-
) {
|
|
115
|
-
const decl = declarations[0];
|
|
116
|
-
if (
|
|
117
|
-
decl &&
|
|
118
|
-
decl.getKind() !== SyntaxKind.TypeAliasDeclaration &&
|
|
119
|
-
decl.getKind() !== SyntaxKind.InterfaceDeclaration
|
|
120
|
-
) {
|
|
121
|
-
exportedComponents.push(name);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
const missingComponents: string[] = [];
|
|
128
|
-
const missingVariants: Record<string, string[]> = {};
|
|
129
|
-
|
|
130
|
-
if (showcaseFile) {
|
|
131
|
-
const jsxElements = [
|
|
132
|
-
...showcaseFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
|
|
133
|
-
...showcaseFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
|
|
134
|
-
];
|
|
135
|
-
|
|
136
|
-
const usedTags = new Set(
|
|
137
|
-
jsxElements.map((el) => el.getTagNameNode().getText()),
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
// Check components
|
|
141
|
-
for (const comp of exportedComponents) {
|
|
142
|
-
if (!usedTags.has(comp)) {
|
|
143
|
-
const isNamespacedUsed = Array.from(usedTags).some(
|
|
144
|
-
(tag) => tag.includes(`.${comp}`) || tag.endsWith(comp),
|
|
145
|
-
);
|
|
146
|
-
if (!isNamespacedUsed) {
|
|
147
|
-
missingComponents.push(comp);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Check variants
|
|
153
|
-
const usedAttributes: Record<string, Set<string>> = {};
|
|
154
|
-
for (const el of jsxElements) {
|
|
155
|
-
for (const attr of el.getAttributes()) {
|
|
156
|
-
if (attr.getKind() === SyntaxKind.JsxAttribute) {
|
|
157
|
-
const name = attr.getNameNode().getText();
|
|
158
|
-
const init = attr.getInitializer();
|
|
159
|
-
let value = "";
|
|
160
|
-
if (init) {
|
|
161
|
-
if (init.getKind() === SyntaxKind.StringLiteral) {
|
|
162
|
-
value = init.getText().replace(/['"]/g, "");
|
|
163
|
-
} else if (init.getKind() === SyntaxKind.JsxExpression) {
|
|
164
|
-
value = init.getExpression()?.getText() || "";
|
|
165
|
-
}
|
|
166
|
-
} else {
|
|
167
|
-
value = "true";
|
|
168
|
-
}
|
|
169
|
-
if (!usedAttributes[name]) usedAttributes[name] = new Set();
|
|
170
|
-
usedAttributes[name].add(value);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
for (const [vName, vValues] of Object.entries(variants)) {
|
|
176
|
-
missingVariants[vName] = [];
|
|
177
|
-
const usedVals = usedAttributes[vName] || new Set();
|
|
178
|
-
const usedValsStr = Array.from(usedVals).join(" ");
|
|
179
|
-
|
|
180
|
-
for (const val of vValues) {
|
|
181
|
-
if (val === "default") continue;
|
|
182
|
-
if (
|
|
183
|
-
!usedValsStr.includes(val) &&
|
|
184
|
-
!usedValsStr.includes(`"${val}"`) &&
|
|
185
|
-
!usedValsStr.includes(`'${val}'`)
|
|
186
|
-
) {
|
|
187
|
-
if (vName === "size" && usedValsStr.includes("globalSize")) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
missingVariants[vName].push(val);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
if (missingVariants[vName].length === 0) {
|
|
194
|
-
delete missingVariants[vName];
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (exportedComponents.length > 0 || Object.keys(variants).length > 0) {
|
|
200
|
-
results.push({
|
|
201
|
-
name: baseName,
|
|
202
|
-
uiFile: uiFile.getFilePath(),
|
|
203
|
-
exportedComponents,
|
|
204
|
-
variants,
|
|
205
|
-
showcaseFile: showcaseFile?.getFilePath() || null,
|
|
206
|
-
missingComponents,
|
|
207
|
-
missingVariants,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
let md = `# Báo Cáo Mức Độ Phủ Sóng Của Showcase (AST Auditing)
|
|
213
|
-
*Tạo lúc: ${new Date().toLocaleString()}*
|
|
214
|
-
|
|
215
|
-
Mục tiêu: Đảm bảo toàn bộ Component, Sub-component, Variant, Color, Size được export từ \`src/components/micro/*\` đều có ít nhất một ví dụ trong \`src/dev/showcase/*\`.
|
|
216
|
-
|
|
217
|
-
`;
|
|
218
|
-
|
|
219
|
-
let perfectCount = 0;
|
|
220
|
-
let missingShowcaseCount = 0;
|
|
221
|
-
|
|
222
|
-
for (const res of results) {
|
|
223
|
-
if (!res.showcaseFile) {
|
|
224
|
-
missingShowcaseCount++;
|
|
225
|
-
md += `## ❌ ${res.name} (Thiếu hoàn toàn Showcase)\n`;
|
|
226
|
-
continue;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
const hasMissingComps = res.missingComponents.length > 0;
|
|
230
|
-
const hasMissingVars = Object.keys(res.missingVariants).length > 0;
|
|
231
|
-
|
|
232
|
-
if (!hasMissingComps && !hasMissingVars) {
|
|
233
|
-
perfectCount++;
|
|
234
|
-
continue;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
md += `## ⚠️ ${res.name}\n`;
|
|
238
|
-
if (hasMissingComps) {
|
|
239
|
-
md += `- **Thiếu Sub-components:** ${res.missingComponents.map((c) => "`" + c + "`").join(", ")}\n`;
|
|
240
|
-
}
|
|
241
|
-
if (hasMissingVars) {
|
|
242
|
-
md += `- **Thiếu Variants:**\n`;
|
|
243
|
-
for (const [vName, vVals] of Object.entries(res.missingVariants)) {
|
|
244
|
-
md += ` - \`${vName}\`: ${vVals.map((v) => "`" + v + "`").join(", ")}\n`;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
md += "\n";
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
md += `## Tóm Tắt\n`;
|
|
251
|
-
md += `- Tổng số Components: ${results.length}\n`;
|
|
252
|
-
md += `- Hoàn hảo (100% Coverage): ${perfectCount}\n`;
|
|
253
|
-
md += `- Thiếu Showcase File: ${missingShowcaseCount}\n`;
|
|
254
|
-
md += `- Cần bổ sung ví dụ: ${results.length - perfectCount - missingShowcaseCount}\n`;
|
|
255
|
-
|
|
256
|
-
fs.writeFileSync(
|
|
257
|
-
"/Users/y/.gemini/antigravity-ide/brain/b74152fa-bc73-4d65-9843-c65a49e0b5c5/showcase_coverage_report.md",
|
|
258
|
-
md,
|
|
259
|
-
);
|
|
260
|
-
console.log(
|
|
261
|
-
"Report generated at /Users/y/.gemini/antigravity-ide/brain/b74152fa-bc73-4d65-9843-c65a49e0b5c5/showcase_coverage_report.md",
|
|
262
|
-
);
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
import { fileURLToPath } from "url";
|
|
4
|
-
|
|
5
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
-
const __dirname = path.dirname(__filename);
|
|
7
|
-
|
|
8
|
-
const uiDir = path.join(__dirname, "../src/components/micro");
|
|
9
|
-
const showcaseDir = path.join(__dirname, "../src/dev/showcase");
|
|
10
|
-
|
|
11
|
-
const uiFiles = fs
|
|
12
|
-
.readdirSync(uiDir)
|
|
13
|
-
.filter((f) => f.endsWith(".tsx") && !f.includes("index.tsx"));
|
|
14
|
-
|
|
15
|
-
const issues: Record<string, string[]> = {};
|
|
16
|
-
|
|
17
|
-
for (const file of uiFiles) {
|
|
18
|
-
const componentName = file.replace(".tsx", "");
|
|
19
|
-
const showcaseFile = path.join(showcaseDir, file);
|
|
20
|
-
const uiContent = fs.readFileSync(path.join(uiDir, file), "utf-8");
|
|
21
|
-
|
|
22
|
-
if (!fs.existsSync(showcaseFile)) continue;
|
|
23
|
-
const showcaseContent = fs.readFileSync(showcaseFile, "utf-8");
|
|
24
|
-
|
|
25
|
-
issues[componentName] = [];
|
|
26
|
-
|
|
27
|
-
// 1. Check exports vs imports
|
|
28
|
-
const exportMatches = uiContent.match(/export \{([^}]+)\}/);
|
|
29
|
-
if (exportMatches) {
|
|
30
|
-
const exports = exportMatches[1]
|
|
31
|
-
.split(",")
|
|
32
|
-
.map((e) => e.trim())
|
|
33
|
-
.filter((e) => e);
|
|
34
|
-
for (const exp of exports) {
|
|
35
|
-
const actualExport = exp.includes(" as ")
|
|
36
|
-
? exp.split(" as ")[1].trim()
|
|
37
|
-
: exp;
|
|
38
|
-
if (
|
|
39
|
-
actualExport &&
|
|
40
|
-
!showcaseContent.includes(actualExport) &&
|
|
41
|
-
actualExport !== "type"
|
|
42
|
-
) {
|
|
43
|
-
issues[componentName].push(`Missing subcomponent: ${actualExport}`);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// 2. Check globalSize
|
|
49
|
-
if (uiContent.includes("size: {") || uiContent.includes('size = "')) {
|
|
50
|
-
if (!showcaseContent.includes("globalSize")) {
|
|
51
|
-
issues[componentName].push("Missing globalSize toggle");
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 3. Check variants
|
|
56
|
-
if (uiContent.includes("variant: {")) {
|
|
57
|
-
const variantMatch = uiContent.match(/variant:\s*\{([^}]+)\}/);
|
|
58
|
-
if (variantMatch) {
|
|
59
|
-
const variants = variantMatch[1]
|
|
60
|
-
.split("\n")
|
|
61
|
-
.map((l) => l.trim().split(":")[0].replace(/['"]/g, ""))
|
|
62
|
-
.filter((v) => v && !v.includes("//") && v !== "default");
|
|
63
|
-
for (const v of variants) {
|
|
64
|
-
if (
|
|
65
|
-
!showcaseContent.includes(`variant="${v}"`) &&
|
|
66
|
-
!showcaseContent.includes(`variant='${v}'`)
|
|
67
|
-
) {
|
|
68
|
-
issues[componentName].push(`Missing variant demo: ${v}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
let hasIssues = false;
|
|
76
|
-
for (const [comp, compIssues] of Object.entries(issues)) {
|
|
77
|
-
if (compIssues.length > 0) {
|
|
78
|
-
hasIssues = true;
|
|
79
|
-
console.log(`\n❌ ${comp}.tsx:`);
|
|
80
|
-
compIssues.forEach((i) => console.log(` - ${i}`));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (!hasIssues) console.log("All showcases fully cover their components!");
|
package/scripts/clean-imports.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Project } from "ts-morph";
|
|
2
|
-
|
|
3
|
-
const project = new Project({
|
|
4
|
-
tsConfigFilePath: "/Users/y/Desktop/github/gladvn/tsconfig.json",
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
const sourceFiles = project.getSourceFiles(
|
|
8
|
-
"/Users/y/Desktop/github/gladvn/src/dev/showcase/**/*.tsx",
|
|
9
|
-
);
|
|
10
|
-
console.log(`Found ${sourceFiles.length} showcase files to process.`);
|
|
11
|
-
|
|
12
|
-
for (const sourceFile of sourceFiles) {
|
|
13
|
-
// Use fixUnusedIdentifiers to let TS compiler fix unused imports
|
|
14
|
-
const text = sourceFile.getFullText();
|
|
15
|
-
// We can just use the organize imports feature
|
|
16
|
-
sourceFile.organizeImports();
|
|
17
|
-
sourceFile.fixUnusedIdentifiers();
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
project.saveSync();
|
|
21
|
-
console.log("Cleanup complete!");
|
package/scripts/count_missing.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Project, SyntaxKind } from "ts-morph";
|
|
2
|
-
|
|
3
|
-
const project = new Project({
|
|
4
|
-
tsConfigFilePath: "tsconfig.json",
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
const sourceFiles = project.getSourceFiles("src/dev/showcase/**/*.tsx");
|
|
8
|
-
let missing = 0;
|
|
9
|
-
let total = 0;
|
|
10
|
-
|
|
11
|
-
for (const sourceFile of sourceFiles) {
|
|
12
|
-
const exampleSections = sourceFile.getDescendantsOfKind(SyntaxKind.JsxElement)
|
|
13
|
-
.filter(element => element.getOpeningElement().getTagNameNode().getText() === "ExampleSection");
|
|
14
|
-
|
|
15
|
-
for (const section of exampleSections) {
|
|
16
|
-
total++;
|
|
17
|
-
const hasCodeString = section.getOpeningElement().getAttributes().some(attr => {
|
|
18
|
-
return attr.getKind() === SyntaxKind.JsxAttribute &&
|
|
19
|
-
attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "codeString";
|
|
20
|
-
});
|
|
21
|
-
if (!hasCodeString) missing++;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
console.log(`Total ExampleSections: ${total}, Missing codeString: ${missing}`);
|