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
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ResizableHandle,
|
|
3
3
|
ResizablePanel,
|
|
4
|
-
ResizablePanelGroup
|
|
4
|
+
ResizablePanelGroup
|
|
5
|
+
} from "../../components/micro/resizable";
|
|
5
6
|
import {
|
|
6
7
|
DocsCode,
|
|
7
8
|
DocsP,
|
|
8
9
|
ExampleGrid,
|
|
9
10
|
ExampleSection,
|
|
10
11
|
Showcase,
|
|
11
|
-
ShowcaseDocs
|
|
12
|
+
ShowcaseDocs
|
|
13
|
+
} from "../../dev/components/showcase";
|
|
12
14
|
|
|
13
15
|
// ──────────────────────────────────────────────────────────
|
|
14
16
|
// SECTION 1: Micro Content
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
ExampleGrid,
|
|
7
7
|
ExampleSection,
|
|
8
8
|
Showcase,
|
|
9
|
-
ShowcaseDocs
|
|
9
|
+
ShowcaseDocs
|
|
10
|
+
} from "../../dev/components/showcase";
|
|
10
11
|
|
|
11
12
|
// ──────────────────────────────────────────────────────────
|
|
12
13
|
// SECTION 1: Explicit Sub-components for Demo
|
|
@@ -9,19 +9,21 @@ import {
|
|
|
9
9
|
FieldContent,
|
|
10
10
|
FieldDescription,
|
|
11
11
|
FieldError,
|
|
12
|
-
FieldLabel
|
|
12
|
+
FieldLabel
|
|
13
|
+
} from "../../components/micro/field";
|
|
13
14
|
import {
|
|
14
15
|
Select,
|
|
15
16
|
SelectContent,
|
|
16
17
|
SelectGroup,
|
|
17
18
|
SelectItem,
|
|
18
19
|
SelectLabel,
|
|
19
|
-
|
|
20
|
+
|
|
20
21
|
SelectScrollDownButton,
|
|
21
22
|
SelectScrollUpButton,
|
|
22
23
|
SelectSeparator,
|
|
23
24
|
SelectTrigger,
|
|
24
|
-
SelectValue
|
|
25
|
+
SelectValue
|
|
26
|
+
} from "../../components/micro/select";
|
|
25
27
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
26
28
|
import {
|
|
27
29
|
DocsCode,
|
|
@@ -30,7 +32,8 @@ import {
|
|
|
30
32
|
ExampleGrid,
|
|
31
33
|
ExampleSection,
|
|
32
34
|
Showcase,
|
|
33
|
-
ShowcaseDocs
|
|
35
|
+
ShowcaseDocs
|
|
36
|
+
} from "../../dev/components/showcase";
|
|
34
37
|
import { type Size } from "../../lib/types";
|
|
35
38
|
|
|
36
39
|
// ──────────────────────────────────────────────────────────
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
DocsP,
|
|
6
6
|
ExampleSection,
|
|
7
7
|
Showcase,
|
|
8
|
-
ShowcaseDocs
|
|
8
|
+
ShowcaseDocs
|
|
9
|
+
} from "../../dev/components/showcase";
|
|
9
10
|
|
|
10
11
|
// ──────────────────────────────────────────────────────────
|
|
11
12
|
// SECTION 1: Micro Content (Only Micro exists)
|
|
@@ -12,9 +12,10 @@ import {
|
|
|
12
12
|
SheetDescription,
|
|
13
13
|
SheetFooter,
|
|
14
14
|
SheetHeader,
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
SheetTitle,
|
|
17
|
-
SheetTrigger
|
|
17
|
+
SheetTrigger
|
|
18
|
+
} from "../../components/micro/sheet";
|
|
18
19
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
19
20
|
import {
|
|
20
21
|
DocsCode,
|
|
@@ -22,7 +23,8 @@ import {
|
|
|
22
23
|
ExampleGrid,
|
|
23
24
|
ExampleSection,
|
|
24
25
|
Showcase,
|
|
25
|
-
ShowcaseDocs
|
|
26
|
+
ShowcaseDocs
|
|
27
|
+
} from "../../dev/components/showcase";
|
|
26
28
|
import { type Size } from "../../lib/types";
|
|
27
29
|
|
|
28
30
|
// ──────────────────────────────────────────────────────────
|
|
@@ -6,12 +6,14 @@ import {
|
|
|
6
6
|
SidebarLogo,
|
|
7
7
|
SidebarMenuItem,
|
|
8
8
|
SidebarMenuItemList,
|
|
9
|
-
useSidebarToggle
|
|
9
|
+
useSidebarToggle
|
|
10
|
+
} from "../../components/micro/sidebar";
|
|
10
11
|
import {
|
|
11
12
|
DocsP,
|
|
12
13
|
ExampleSection,
|
|
13
14
|
Showcase,
|
|
14
|
-
ShowcaseDocs
|
|
15
|
+
ShowcaseDocs
|
|
16
|
+
} from "../../dev/components/showcase";
|
|
15
17
|
|
|
16
18
|
function SidebarMicroShowcase() {
|
|
17
19
|
const { sidebarRef, toggleSidebar, defaultState } =
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
ExampleGrid,
|
|
7
7
|
ExampleSection,
|
|
8
8
|
Showcase,
|
|
9
|
-
ShowcaseDocs
|
|
9
|
+
ShowcaseDocs
|
|
10
|
+
} from "../../dev/components/showcase";
|
|
10
11
|
|
|
11
12
|
// ──────────────────────────────────────────────────────────
|
|
12
13
|
// SECTION 1: Micro Content (Only Micro exists)
|
|
@@ -6,13 +6,15 @@ import {
|
|
|
6
6
|
FieldContent,
|
|
7
7
|
FieldDescription,
|
|
8
8
|
FieldError,
|
|
9
|
-
FieldLabel
|
|
9
|
+
FieldLabel
|
|
10
|
+
} from "../../components/micro/field";
|
|
10
11
|
import {
|
|
11
12
|
Slider as CompositionalSlider,
|
|
12
13
|
SliderControl,
|
|
13
14
|
SliderIndicator,
|
|
14
15
|
SliderThumb,
|
|
15
|
-
SliderTrack
|
|
16
|
+
SliderTrack
|
|
17
|
+
} from "../../components/micro/slider";
|
|
16
18
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
17
19
|
import {
|
|
18
20
|
DocsCode,
|
|
@@ -21,7 +23,8 @@ import {
|
|
|
21
23
|
ExampleGrid,
|
|
22
24
|
ExampleSection,
|
|
23
25
|
Showcase,
|
|
24
|
-
ShowcaseDocs
|
|
26
|
+
ShowcaseDocs
|
|
27
|
+
} from "../../dev/components/showcase";
|
|
25
28
|
import { type Size } from "../../lib/types";
|
|
26
29
|
|
|
27
30
|
// ──────────────────────────────────────────────────────────
|
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
ExampleGrid,
|
|
8
8
|
ExampleSection,
|
|
9
9
|
Showcase,
|
|
10
|
-
ShowcaseDocs
|
|
10
|
+
ShowcaseDocs
|
|
11
|
+
} from "../../dev/components/showcase";
|
|
11
12
|
import { type Size } from "../../lib/types";
|
|
12
13
|
|
|
13
14
|
// ──────────────────────────────────────────────────────────
|
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
ExampleGrid,
|
|
17
17
|
ExampleSection,
|
|
18
18
|
Showcase,
|
|
19
|
-
ShowcaseDocs
|
|
19
|
+
ShowcaseDocs
|
|
20
|
+
} from "../../dev/components/showcase";
|
|
20
21
|
import { type Size } from "../../lib/types";
|
|
21
22
|
|
|
22
23
|
// ──────────────────────────────────────────────────────────
|
|
@@ -8,13 +8,15 @@ import {
|
|
|
8
8
|
TableFooter,
|
|
9
9
|
TableHead,
|
|
10
10
|
TableHeader,
|
|
11
|
-
TableRow
|
|
11
|
+
TableRow
|
|
12
|
+
} from "../../components/micro/table";
|
|
12
13
|
import {
|
|
13
14
|
DocsH3,
|
|
14
15
|
DocsP,
|
|
15
16
|
ExampleSection,
|
|
16
17
|
Showcase,
|
|
17
|
-
ShowcaseDocs
|
|
18
|
+
ShowcaseDocs
|
|
19
|
+
} from "../../dev/components/showcase";
|
|
18
20
|
|
|
19
21
|
type SortDirection = "asc" | "desc" | "none";
|
|
20
22
|
|
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
Tabs,
|
|
6
6
|
TabsContent,
|
|
7
7
|
TabsList,
|
|
8
|
-
TabsTrigger
|
|
8
|
+
TabsTrigger
|
|
9
|
+
} from "../../components/micro/tabs";
|
|
9
10
|
import {
|
|
10
11
|
DocsCode,
|
|
11
12
|
DocsH3,
|
|
@@ -13,7 +14,8 @@ import {
|
|
|
13
14
|
ExampleGrid,
|
|
14
15
|
ExampleSection,
|
|
15
16
|
Showcase,
|
|
16
|
-
ShowcaseDocs
|
|
17
|
+
ShowcaseDocs
|
|
18
|
+
} from "../../dev/components/showcase";
|
|
17
19
|
|
|
18
20
|
// ──────────────────────────────────────────────────────────
|
|
19
21
|
// SECTION 1: Macro Content
|
|
@@ -5,12 +5,14 @@ import {
|
|
|
5
5
|
Field,
|
|
6
6
|
FieldContent,
|
|
7
7
|
FieldError,
|
|
8
|
-
FieldLabel
|
|
8
|
+
FieldLabel
|
|
9
|
+
} from "../../components/micro/field";
|
|
9
10
|
import {
|
|
10
11
|
InputGroup,
|
|
11
12
|
InputGroupAddon,
|
|
12
13
|
InputGroupText,
|
|
13
|
-
InputGroupTextarea
|
|
14
|
+
InputGroupTextarea
|
|
15
|
+
} from "../../components/micro/input-group";
|
|
14
16
|
import { Textarea } from "../../components/micro/textarea";
|
|
15
17
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
16
18
|
import {
|
|
@@ -20,7 +22,8 @@ import {
|
|
|
20
22
|
ExampleGrid,
|
|
21
23
|
ExampleSection,
|
|
22
24
|
Showcase,
|
|
23
|
-
ShowcaseDocs
|
|
25
|
+
ShowcaseDocs
|
|
26
|
+
} from "../../dev/components/showcase";
|
|
24
27
|
import { type Size } from "../../lib/types";
|
|
25
28
|
|
|
26
29
|
// ──────────────────────────────────────────────────────────
|
|
@@ -7,7 +7,8 @@ import {
|
|
|
7
7
|
DocsP,
|
|
8
8
|
ExampleSection,
|
|
9
9
|
Showcase,
|
|
10
|
-
ShowcaseDocs
|
|
10
|
+
ShowcaseDocs
|
|
11
|
+
} from "../../dev/components/showcase";
|
|
11
12
|
import { type Size } from "../../lib/types";
|
|
12
13
|
|
|
13
14
|
function ToastMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
@@ -4,11 +4,13 @@ import {
|
|
|
4
4
|
AlignRightIcon,
|
|
5
5
|
BoldIcon,
|
|
6
6
|
ItalicIcon,
|
|
7
|
-
UnderlineIcon
|
|
7
|
+
UnderlineIcon
|
|
8
|
+
} from "lucide-react";
|
|
8
9
|
|
|
9
10
|
import {
|
|
10
11
|
ToggleGroup,
|
|
11
|
-
ToggleGroupItem
|
|
12
|
+
ToggleGroupItem
|
|
13
|
+
} from "../../components/micro/toggle-group";
|
|
12
14
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
13
15
|
import {
|
|
14
16
|
DocsCode,
|
|
@@ -17,7 +19,8 @@ import {
|
|
|
17
19
|
ExampleGrid,
|
|
18
20
|
ExampleSection,
|
|
19
21
|
Showcase,
|
|
20
|
-
ShowcaseDocs
|
|
22
|
+
ShowcaseDocs
|
|
23
|
+
} from "../../dev/components/showcase";
|
|
21
24
|
import { type Size } from "../../lib/types";
|
|
22
25
|
|
|
23
26
|
// ──────────────────────────────────────────────────────────
|
|
@@ -9,7 +9,8 @@ import {
|
|
|
9
9
|
ExampleGrid,
|
|
10
10
|
ExampleSection,
|
|
11
11
|
Showcase,
|
|
12
|
-
ShowcaseDocs
|
|
12
|
+
ShowcaseDocs
|
|
13
|
+
} from "../../dev/components/showcase";
|
|
13
14
|
import { type Size } from "../../lib/types";
|
|
14
15
|
|
|
15
16
|
// ──────────────────────────────────────────────────────────
|
|
@@ -4,9 +4,10 @@ import { Button } from "../../components/micro/button";
|
|
|
4
4
|
import {
|
|
5
5
|
Tooltip,
|
|
6
6
|
TooltipContent,
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
TooltipProvider,
|
|
9
|
-
TooltipTrigger
|
|
9
|
+
TooltipTrigger
|
|
10
|
+
} from "../../components/micro/tooltip";
|
|
10
11
|
import { useDevContext } from "../../dev/components/dev-context";
|
|
11
12
|
import {
|
|
12
13
|
DocsCode,
|
|
@@ -15,7 +16,8 @@ import {
|
|
|
15
16
|
ExampleGrid,
|
|
16
17
|
ExampleSection,
|
|
17
18
|
Showcase,
|
|
18
|
-
ShowcaseDocs
|
|
19
|
+
ShowcaseDocs
|
|
20
|
+
} from "../../dev/components/showcase";
|
|
19
21
|
import { type Size } from "../../lib/types";
|
|
20
22
|
|
|
21
23
|
// ──────────────────────────────────────────────────────────
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ArrowRightIcon,
|
|
3
|
+
CheckIcon,
|
|
4
|
+
CodeIcon,
|
|
5
|
+
CopyIcon,
|
|
6
|
+
LayersIcon,
|
|
7
|
+
SparklesIcon,
|
|
8
|
+
} from "lucide-react";
|
|
9
|
+
import { useState } from "react";
|
|
10
|
+
import { toast } from "sonner";
|
|
11
|
+
import { Button } from "../../components/micro/button";
|
|
12
|
+
import { Card, CardContent } from "../../components/micro/card";
|
|
13
|
+
|
|
14
|
+
export default function WhyGladvn() {
|
|
15
|
+
const [copied, setCopied] = useState(false);
|
|
16
|
+
|
|
17
|
+
const handleCopy = () => {
|
|
18
|
+
navigator.clipboard.writeText("npx gladvn init");
|
|
19
|
+
setCopied(true);
|
|
20
|
+
toast.success("Đã copy lệnh vào clipboard");
|
|
21
|
+
setTimeout(() => setCopied(false), 2000);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<div className="space-y-24 overflow-hidden pb-24 font-sans max-w-5xl mx-auto">
|
|
26
|
+
{/* HERO SECTION */}
|
|
27
|
+
<section className="relative pt-20 pb-16">
|
|
28
|
+
<div className="absolute inset-0 -z-10 h-full w-full bg-background bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(var(--primary-rgb),0.2),rgba(255,255,255,0))] dark:bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(var(--primary-rgb),0.15),rgba(255,255,255,0))]" />
|
|
29
|
+
|
|
30
|
+
<div className="container relative z-10 flex flex-col items-center text-center px-4">
|
|
31
|
+
<div className="inline-flex items-center gap-2 px-4 py-1.5 mb-8 text-sm font-medium rounded-full border border-primary/20 bg-background/50 backdrop-blur-md shadow-sm">
|
|
32
|
+
<SparklesIcon className="w-3.5 h-3.5 text-primary" />
|
|
33
|
+
<span className="text-muted-foreground">
|
|
34
|
+
Tagline chính thức
|
|
35
|
+
</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<h1 className="max-w-4xl text-5xl md:text-7xl font-extrabold tracking-tighter mb-8 leading-tight">
|
|
39
|
+
<span className="block text-foreground drop-shadow-sm">
|
|
40
|
+
Composable React components.
|
|
41
|
+
</span>
|
|
42
|
+
<span className="block mt-2 bg-gradient-to-r from-primary via-info to-primary bg-[length:200%_auto] bg-clip-text text-transparent animate-[spin_8s_linear_infinite] [animation-name:gradient]">
|
|
43
|
+
From primitive to preset — you choose.
|
|
44
|
+
</span>
|
|
45
|
+
</h1>
|
|
46
|
+
|
|
47
|
+
<p className="max-w-2xl text-lg md:text-xl text-muted-foreground leading-relaxed mb-10">
|
|
48
|
+
A CLI to scaffold beautiful, accessible React components. Built on Base UI + Tailwind CSS v4.
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
<div className="flex flex-col sm:flex-row items-center gap-4">
|
|
52
|
+
<button
|
|
53
|
+
onClick={handleCopy}
|
|
54
|
+
className="bg-background/80 hover:bg-background border-border backdrop-blur-md px-6 py-4 rounded-2xl border hover:border-primary/50 transition-colors font-mono text-sm shadow-inner flex items-center gap-4 cursor-pointer group/copy"
|
|
55
|
+
>
|
|
56
|
+
<span className="text-primary font-bold">~</span>
|
|
57
|
+
<span>npx gladvn init</span>
|
|
58
|
+
<div className="ml-4 text-muted-foreground group-hover/copy:text-primary transition-colors">
|
|
59
|
+
{copied ? <CheckIcon className="size-4 text-success" /> : <CopyIcon className="size-4" />}
|
|
60
|
+
</div>
|
|
61
|
+
</button>
|
|
62
|
+
<Button
|
|
63
|
+
size="lg"
|
|
64
|
+
className="h-14 px-8 rounded-2xl text-base"
|
|
65
|
+
render={<a href="/" />}
|
|
66
|
+
>
|
|
67
|
+
Xem Docs <ArrowRightIcon className="ml-2 size-4" />
|
|
68
|
+
</Button>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</section>
|
|
72
|
+
|
|
73
|
+
{/* THE PROBLEM */}
|
|
74
|
+
<section className="px-4">
|
|
75
|
+
<div className="rounded-[2.5rem] border border-destructive/20 bg-destructive/5 p-8 md:p-16 text-center">
|
|
76
|
+
<h2 className="text-3xl md:text-4xl font-extrabold tracking-tight mb-6">
|
|
77
|
+
Most UI libraries force a choice:
|
|
78
|
+
</h2>
|
|
79
|
+
<p className="text-xl md:text-2xl text-muted-foreground mb-12">
|
|
80
|
+
Low-level pain <span className="text-destructive font-bold">OR</span> High-level lock-in.
|
|
81
|
+
</p>
|
|
82
|
+
|
|
83
|
+
<div className="grid md:grid-cols-3 gap-6 max-w-4xl mx-auto text-left">
|
|
84
|
+
<Card className="bg-background border-destructive/10">
|
|
85
|
+
<CardContent className="p-6">
|
|
86
|
+
<div className="text-destructive text-2xl mb-4">🔴</div>
|
|
87
|
+
<h3 className="font-bold mb-2">Quá primitive</h3>
|
|
88
|
+
<p className="text-muted-foreground text-sm">Bạn phải tự xây dựng mọi thứ từ đầu (như Radix UI thuần).</p>
|
|
89
|
+
</CardContent>
|
|
90
|
+
</Card>
|
|
91
|
+
<Card className="bg-background border-destructive/10">
|
|
92
|
+
<CardContent className="p-6">
|
|
93
|
+
<div className="text-destructive text-2xl mb-4">🔴</div>
|
|
94
|
+
<h3 className="font-bold mb-2">Quá opinionated</h3>
|
|
95
|
+
<p className="text-muted-foreground text-sm">Bạn phải chiến đấu với các preset mặc định (như MUI hay AntD).</p>
|
|
96
|
+
</CardContent>
|
|
97
|
+
</Card>
|
|
98
|
+
<Card className="bg-background border-destructive/10">
|
|
99
|
+
<CardContent className="p-6">
|
|
100
|
+
<div className="text-destructive text-2xl mb-4">🔴</div>
|
|
101
|
+
<h3 className="font-bold mb-2">Không rõ ranh giới</h3>
|
|
102
|
+
<p className="text-muted-foreground text-sm">Codebase trở nên hỗn độn giữa style thuần và logic nghiệp vụ.</p>
|
|
103
|
+
</CardContent>
|
|
104
|
+
</Card>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</section>
|
|
108
|
+
|
|
109
|
+
{/* THE SOLUTION */}
|
|
110
|
+
<section className="px-4 space-y-12">
|
|
111
|
+
<div className="text-center max-w-2xl mx-auto space-y-4">
|
|
112
|
+
<h2 className="text-3xl md:text-4xl font-extrabold tracking-tight">
|
|
113
|
+
The Solution: Micro/Macro Architecture
|
|
114
|
+
</h2>
|
|
115
|
+
<p className="text-muted-foreground text-lg">
|
|
116
|
+
Gladvn là thư viện React duy nhất phân tách rõ ràng giữa primitive "dumb" components và smart presets.
|
|
117
|
+
</p>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<div className="grid md:grid-cols-2 gap-8">
|
|
121
|
+
<div className="rounded-[2rem] border-2 border-primary/20 bg-primary/5 p-8 flex flex-col justify-between h-full">
|
|
122
|
+
<div>
|
|
123
|
+
<div className="inline-flex p-3 rounded-xl bg-primary/10 text-primary mb-6">
|
|
124
|
+
<CodeIcon className="size-6" />
|
|
125
|
+
</div>
|
|
126
|
+
<h3 className="text-2xl font-bold mb-4">Micro: Build your way</h3>
|
|
127
|
+
<p className="text-muted-foreground mb-8">
|
|
128
|
+
Lắp ráp từng mảnh ghép để kiểm soát 100% UI.
|
|
129
|
+
</p>
|
|
130
|
+
</div>
|
|
131
|
+
<div className="p-4 rounded-xl bg-background/80 border border-border font-mono text-sm text-muted-foreground shadow-inner">
|
|
132
|
+
<span className="text-primary">{"<Button "}</span>
|
|
133
|
+
<span className="text-info">variant=</span><span className="text-success">"solid"</span>
|
|
134
|
+
<span className="text-info"> color=</span><span className="text-success">"primary"</span>
|
|
135
|
+
<span className="text-primary">{">"}</span>
|
|
136
|
+
<span className="text-foreground">Submit</span>
|
|
137
|
+
<span className="text-primary">{"</Button>"}</span>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div className="rounded-[2rem] border-2 border-info/20 bg-info/5 p-8 flex flex-col justify-between h-full">
|
|
142
|
+
<div>
|
|
143
|
+
<div className="inline-flex p-3 rounded-xl bg-info/10 text-info mb-6">
|
|
144
|
+
<LayersIcon className="size-6" />
|
|
145
|
+
</div>
|
|
146
|
+
<h3 className="text-2xl font-bold mb-4">Macro: Move fast</h3>
|
|
147
|
+
<p className="text-muted-foreground mb-8">
|
|
148
|
+
Dùng các preset làm sẵn để phát triển nhanh chóng.
|
|
149
|
+
</p>
|
|
150
|
+
</div>
|
|
151
|
+
<div className="p-4 rounded-xl bg-background/80 border border-border font-mono text-sm text-muted-foreground shadow-inner">
|
|
152
|
+
<span className="text-primary">{"<InputPreset "}</span>
|
|
153
|
+
<br/>
|
|
154
|
+
<span className="pl-4 text-info">label=</span><span className="text-success">"Email"</span>
|
|
155
|
+
<br/>
|
|
156
|
+
<span className="pl-4 text-info">error=</span><span className="text-foreground">{"{errors.email}"}</span>
|
|
157
|
+
<br/>
|
|
158
|
+
<span className="text-primary">{"/>"}</span>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</section>
|
|
163
|
+
|
|
164
|
+
{/* MORE REASONS */}
|
|
165
|
+
<section className="px-4">
|
|
166
|
+
<h2 className="text-2xl font-bold mb-8 pl-4 border-l-4 border-primary">More Reasons to Choose Gladvn</h2>
|
|
167
|
+
<div className="grid md:grid-cols-3 gap-6">
|
|
168
|
+
<Card className="hover:border-primary/50 transition-colors">
|
|
169
|
+
<CardContent className="p-6 space-y-4">
|
|
170
|
+
<div className="text-3xl font-black text-primary">45</div>
|
|
171
|
+
<h3 className="font-bold text-lg">Tổ hợp Component Styles</h3>
|
|
172
|
+
<p className="text-sm text-muted-foreground">
|
|
173
|
+
9 Semantic Colors × 5 Variants. Tất cả đều nhất quán và accessibility-ready ngay từ đầu.
|
|
174
|
+
</p>
|
|
175
|
+
</CardContent>
|
|
176
|
+
</Card>
|
|
177
|
+
<Card className="hover:border-primary/50 transition-colors">
|
|
178
|
+
<CardContent className="p-6 space-y-4">
|
|
179
|
+
<div className="text-3xl font-black text-success">Zero</div>
|
|
180
|
+
<h3 className="font-bold text-lg">Lỗi Portal Theming</h3>
|
|
181
|
+
<p className="text-sm text-muted-foreground">
|
|
182
|
+
Dialog, Tooltip tự động tunnel theme qua Portal. Không còn lỗi màu sắc trong overlay.
|
|
183
|
+
</p>
|
|
184
|
+
</CardContent>
|
|
185
|
+
</Card>
|
|
186
|
+
<Card className="hover:border-primary/50 transition-colors">
|
|
187
|
+
<CardContent className="p-6 space-y-4">
|
|
188
|
+
<div className="text-3xl font-black text-info">AI</div>
|
|
189
|
+
<h3 className="font-bold text-lg">Thiết kế cho AI</h3>
|
|
190
|
+
<p className="text-sm text-muted-foreground">
|
|
191
|
+
File <code>llms.txt</code> và hệ thống data-attributes giúp AI hiểu và dùng component chuẩn xác.
|
|
192
|
+
</p>
|
|
193
|
+
</CardContent>
|
|
194
|
+
</Card>
|
|
195
|
+
</div>
|
|
196
|
+
</section>
|
|
197
|
+
|
|
198
|
+
{/* VS SHADCN */}
|
|
199
|
+
<section className="px-4">
|
|
200
|
+
<h2 className="text-2xl font-bold mb-8 text-center">So sánh nhanh</h2>
|
|
201
|
+
<div className="overflow-x-auto rounded-2xl border border-border bg-card">
|
|
202
|
+
<table className="w-full text-sm text-left">
|
|
203
|
+
<thead className="bg-muted/50 text-muted-foreground">
|
|
204
|
+
<tr>
|
|
205
|
+
<th className="px-6 py-4 font-medium">Feature</th>
|
|
206
|
+
<th className="px-6 py-4 font-bold text-primary">gladvn</th>
|
|
207
|
+
<th className="px-6 py-4 font-medium">shadcn/ui</th>
|
|
208
|
+
<th className="px-6 py-4 font-medium">MUI</th>
|
|
209
|
+
</tr>
|
|
210
|
+
</thead>
|
|
211
|
+
<tbody className="divide-y divide-border">
|
|
212
|
+
<tr className="hover:bg-muted/20">
|
|
213
|
+
<td className="px-6 py-4 font-medium">Installation</td>
|
|
214
|
+
<td className="px-6 py-4 font-mono text-xs">npx gladvn init</td>
|
|
215
|
+
<td className="px-6 py-4 font-mono text-xs">npx shadcn@latest init</td>
|
|
216
|
+
<td className="px-6 py-4 font-mono text-xs">npm install @mui/material</td>
|
|
217
|
+
</tr>
|
|
218
|
+
<tr className="hover:bg-muted/20">
|
|
219
|
+
<td className="px-6 py-4 font-medium">Own your code</td>
|
|
220
|
+
<td className="px-6 py-4">✅ Yes</td>
|
|
221
|
+
<td className="px-6 py-4">✅ Yes</td>
|
|
222
|
+
<td className="px-6 py-4">❌ npm</td>
|
|
223
|
+
</tr>
|
|
224
|
+
<tr className="hover:bg-muted/20 bg-primary/5">
|
|
225
|
+
<td className="px-6 py-4 font-bold">Micro/Macro Arch</td>
|
|
226
|
+
<td className="px-6 py-4 font-bold text-primary">✅ Yes</td>
|
|
227
|
+
<td className="px-6 py-4">❌ No</td>
|
|
228
|
+
<td className="px-6 py-4">⚠️ Partial</td>
|
|
229
|
+
</tr>
|
|
230
|
+
<tr className="hover:bg-muted/20">
|
|
231
|
+
<td className="px-6 py-4 font-medium">Semantic colors</td>
|
|
232
|
+
<td className="px-6 py-4">✅ 9 colors</td>
|
|
233
|
+
<td className="px-6 py-4">⚠️ 2 colors</td>
|
|
234
|
+
<td className="px-6 py-4">✅ Extensive</td>
|
|
235
|
+
</tr>
|
|
236
|
+
<tr className="hover:bg-muted/20">
|
|
237
|
+
<td className="px-6 py-4 font-medium">Headless UI</td>
|
|
238
|
+
<td className="px-6 py-4">Base UI (MUI)</td>
|
|
239
|
+
<td className="px-6 py-4">Radix UI</td>
|
|
240
|
+
<td className="px-6 py-4">Own</td>
|
|
241
|
+
</tr>
|
|
242
|
+
<tr className="hover:bg-muted/20">
|
|
243
|
+
<td className="px-6 py-4 font-medium">Tailwind v4</td>
|
|
244
|
+
<td className="px-6 py-4">✅ Native</td>
|
|
245
|
+
<td className="px-6 py-4">✅ Native</td>
|
|
246
|
+
<td className="px-6 py-4">❌ CSS-in-JS</td>
|
|
247
|
+
</tr>
|
|
248
|
+
</tbody>
|
|
249
|
+
</table>
|
|
250
|
+
</div>
|
|
251
|
+
</section>
|
|
252
|
+
|
|
253
|
+
{/* CTA */}
|
|
254
|
+
<section className="px-4 pb-20">
|
|
255
|
+
<div className="rounded-[3rem] bg-foreground text-background p-12 md:p-20 text-center relative overflow-hidden">
|
|
256
|
+
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
|
|
257
|
+
<div className="relative z-10">
|
|
258
|
+
<h2 className="text-4xl md:text-5xl font-black mb-8">Ready to build differently?</h2>
|
|
259
|
+
<button
|
|
260
|
+
onClick={handleCopy}
|
|
261
|
+
className="bg-background text-foreground hover:bg-muted px-8 py-4 rounded-full font-mono text-base font-bold shadow-xl flex items-center gap-4 mx-auto transition-transform hover:scale-105"
|
|
262
|
+
>
|
|
263
|
+
<span>npx gladvn init</span>
|
|
264
|
+
{copied ? <CheckIcon className="size-5 text-success" /> : <CopyIcon className="size-5" />}
|
|
265
|
+
</button>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</section>
|
|
269
|
+
</div>
|
|
270
|
+
);
|
|
271
|
+
}
|