gladvn 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -0
- package/bin/cli.js +326 -0
- package/dist/components/macro/accordion-preset.d.ts +14 -0
- package/dist/components/macro/accordion-preset.d.ts.map +1 -0
- package/dist/components/macro/alert-dialog-preset.d.ts +26 -0
- package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -0
- package/dist/components/macro/alert-preset.d.ts +14 -0
- package/dist/components/macro/alert-preset.d.ts.map +1 -0
- package/dist/components/macro/avatar-preset.d.ts +11 -0
- package/dist/components/macro/avatar-preset.d.ts.map +1 -0
- package/dist/components/macro/breadcrumb-preset.d.ts +12 -0
- package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -0
- package/dist/components/macro/card-preset.d.ts +10 -0
- package/dist/components/macro/card-preset.d.ts.map +1 -0
- package/dist/components/macro/carousel-preset.d.ts +18 -0
- package/dist/components/macro/carousel-preset.d.ts.map +1 -0
- package/dist/components/macro/checkbox-preset.d.ts +14 -0
- package/dist/components/macro/checkbox-preset.d.ts.map +1 -0
- package/dist/components/macro/combobox-preset.d.ts +27 -0
- package/dist/components/macro/combobox-preset.d.ts.map +1 -0
- package/dist/components/macro/command-preset.d.ts +16 -0
- package/dist/components/macro/command-preset.d.ts.map +1 -0
- package/dist/components/macro/date-picker.d.ts +62 -0
- package/dist/components/macro/date-picker.d.ts.map +1 -0
- package/dist/components/macro/dialog-preset.d.ts +24 -0
- package/dist/components/macro/dialog-preset.d.ts.map +1 -0
- package/dist/components/macro/empty-preset.d.ts +15 -0
- package/dist/components/macro/empty-preset.d.ts.map +1 -0
- package/dist/components/macro/field-preset.d.ts +15 -0
- package/dist/components/macro/field-preset.d.ts.map +1 -0
- package/dist/components/macro/index.d.ts +22 -0
- package/dist/components/macro/index.d.ts.map +1 -0
- package/dist/components/macro/input-otp-preset.d.ts +13 -0
- package/dist/components/macro/input-otp-preset.d.ts.map +1 -0
- package/dist/components/macro/input-preset.d.ts +21 -0
- package/dist/components/macro/input-preset.d.ts.map +1 -0
- package/dist/components/macro/pagination-preset.d.ts +13 -0
- package/dist/components/macro/pagination-preset.d.ts.map +1 -0
- package/dist/components/macro/progress-preset.d.ts +10 -0
- package/dist/components/macro/progress-preset.d.ts.map +1 -0
- package/dist/components/macro/radio-group-preset.d.ts +22 -0
- package/dist/components/macro/radio-group-preset.d.ts.map +1 -0
- package/dist/components/macro/select-preset.d.ts +42 -0
- package/dist/components/macro/select-preset.d.ts.map +1 -0
- package/dist/components/macro/slider-preset.d.ts +12 -0
- package/dist/components/macro/slider-preset.d.ts.map +1 -0
- package/dist/components/macro/switch-preset.d.ts +12 -0
- package/dist/components/macro/switch-preset.d.ts.map +1 -0
- package/dist/components/macro/tabs-preset.d.ts +17 -0
- package/dist/components/macro/tabs-preset.d.ts.map +1 -0
- package/dist/components/macro/textarea-preset.d.ts +17 -0
- package/dist/components/macro/textarea-preset.d.ts.map +1 -0
- package/dist/components/micro/accordion.d.ts +8 -0
- package/dist/components/micro/accordion.d.ts.map +1 -0
- package/dist/components/micro/alert-dialog.d.ts +33 -0
- package/dist/components/micro/alert-dialog.d.ts.map +1 -0
- package/dist/components/micro/alert.d.ts +28 -0
- package/dist/components/micro/alert.d.ts.map +1 -0
- package/dist/components/micro/aspect-ratio.d.ts +13 -0
- package/dist/components/micro/aspect-ratio.d.ts.map +1 -0
- package/dist/components/micro/avatar.d.ts +23 -0
- package/dist/components/micro/avatar.d.ts.map +1 -0
- package/dist/components/micro/badge.d.ts +16 -0
- package/dist/components/micro/badge.d.ts.map +1 -0
- package/dist/components/micro/breadcrumb.d.ts +24 -0
- package/dist/components/micro/breadcrumb.d.ts.map +1 -0
- package/dist/components/micro/button.d.ts +39 -0
- package/dist/components/micro/button.d.ts.map +1 -0
- package/dist/components/micro/calendar.d.ts +28 -0
- package/dist/components/micro/calendar.d.ts.map +1 -0
- package/dist/components/micro/card.d.ts +28 -0
- package/dist/components/micro/card.d.ts.map +1 -0
- package/dist/components/micro/carousel.d.ts +29 -0
- package/dist/components/micro/carousel.d.ts.map +1 -0
- package/dist/components/micro/chart.d.ts +49 -0
- package/dist/components/micro/chart.d.ts.map +1 -0
- package/dist/components/micro/checkbox.d.ts +17 -0
- package/dist/components/micro/checkbox.d.ts.map +1 -0
- package/dist/components/micro/collapsible.d.ts +15 -0
- package/dist/components/micro/collapsible.d.ts.map +1 -0
- package/dist/components/micro/combobox.d.ts +33 -0
- package/dist/components/micro/combobox.d.ts.map +1 -0
- package/dist/components/micro/command.d.ts +79 -0
- package/dist/components/micro/command.d.ts.map +1 -0
- package/dist/components/micro/context-menu.d.ts +60 -0
- package/dist/components/micro/context-menu.d.ts.map +1 -0
- package/dist/components/micro/dialog.d.ts +14 -0
- package/dist/components/micro/dialog.d.ts.map +1 -0
- package/dist/components/micro/direction.d.ts +2 -0
- package/dist/components/micro/direction.d.ts.map +1 -0
- package/dist/components/micro/drawer.d.ts +17 -0
- package/dist/components/micro/drawer.d.ts.map +1 -0
- package/dist/components/micro/dropdown-menu.d.ts +37 -0
- package/dist/components/micro/dropdown-menu.d.ts.map +1 -0
- package/dist/components/micro/empty.d.ts +23 -0
- package/dist/components/micro/empty.d.ts.map +1 -0
- package/dist/components/micro/field.d.ts +29 -0
- package/dist/components/micro/field.d.ts.map +1 -0
- package/dist/components/micro/hover-card.d.ts +17 -0
- package/dist/components/micro/hover-card.d.ts.map +1 -0
- package/dist/components/micro/input-group.d.ts +17 -0
- package/dist/components/micro/input-group.d.ts.map +1 -0
- package/dist/components/micro/input-otp.d.ts +44 -0
- package/dist/components/micro/input-otp.d.ts.map +1 -0
- package/dist/components/micro/input.d.ts +22 -0
- package/dist/components/micro/input.d.ts.map +1 -0
- package/dist/components/micro/item.d.ts +31 -0
- package/dist/components/micro/item.d.ts.map +1 -0
- package/dist/components/micro/kbd.d.ts +9 -0
- package/dist/components/micro/kbd.d.ts.map +1 -0
- package/dist/components/micro/label.d.ts +15 -0
- package/dist/components/micro/label.d.ts.map +1 -0
- package/dist/components/micro/menubar.d.ts +41 -0
- package/dist/components/micro/menubar.d.ts.map +1 -0
- package/dist/components/micro/navigation-menu.d.ts +18 -0
- package/dist/components/micro/navigation-menu.d.ts.map +1 -0
- package/dist/components/micro/pagination.d.ts +33 -0
- package/dist/components/micro/pagination.d.ts.map +1 -0
- package/dist/components/micro/popover.d.ts +23 -0
- package/dist/components/micro/popover.d.ts.map +1 -0
- package/dist/components/micro/progress.d.ts +19 -0
- package/dist/components/micro/progress.d.ts.map +1 -0
- package/dist/components/micro/radio-group.d.ts +13 -0
- package/dist/components/micro/radio-group.d.ts.map +1 -0
- package/dist/components/micro/resizable.d.ts +12 -0
- package/dist/components/micro/resizable.d.ts.map +1 -0
- package/dist/components/micro/scroll-area.d.ts +12 -0
- package/dist/components/micro/scroll-area.d.ts.map +1 -0
- package/dist/components/micro/select.d.ts +21 -0
- package/dist/components/micro/select.d.ts.map +1 -0
- package/dist/components/micro/separator.d.ts +9 -0
- package/dist/components/micro/separator.d.ts.map +1 -0
- package/dist/components/micro/sheet.d.ts +17 -0
- package/dist/components/micro/sheet.d.ts.map +1 -0
- package/dist/components/micro/sidebar.d.ts +28 -0
- package/dist/components/micro/sidebar.d.ts.map +1 -0
- package/dist/components/micro/skeleton.d.ts +9 -0
- package/dist/components/micro/skeleton.d.ts.map +1 -0
- package/dist/components/micro/slider.d.ts +14 -0
- package/dist/components/micro/slider.d.ts.map +1 -0
- package/dist/components/micro/sonner.d.ts +5 -0
- package/dist/components/micro/sonner.d.ts.map +1 -0
- package/dist/components/micro/spinner.d.ts +21 -0
- package/dist/components/micro/spinner.d.ts.map +1 -0
- package/dist/components/micro/switch.d.ts +13 -0
- package/dist/components/micro/switch.d.ts.map +1 -0
- package/dist/components/micro/table.d.ts +17 -0
- package/dist/components/micro/table.d.ts.map +1 -0
- package/dist/components/micro/tabs.d.ts +13 -0
- package/dist/components/micro/tabs.d.ts.map +1 -0
- package/dist/components/micro/textarea.d.ts +17 -0
- package/dist/components/micro/textarea.d.ts.map +1 -0
- package/dist/components/micro/theme-provider.d.ts +76 -0
- package/dist/components/micro/theme-provider.d.ts.map +1 -0
- package/dist/components/micro/toggle-group.d.ts +22 -0
- package/dist/components/micro/toggle-group.d.ts.map +1 -0
- package/dist/components/micro/toggle.d.ts +16 -0
- package/dist/components/micro/toggle.d.ts.map +1 -0
- package/dist/components/micro/tooltip.d.ts +20 -0
- package/dist/components/micro/tooltip.d.ts.map +1 -0
- package/dist/dev/App.d.ts +3 -0
- package/dist/dev/App.d.ts.map +1 -0
- package/dist/dev/components/GladcnLogo.d.ts +10 -0
- package/dist/dev/components/GladcnLogo.d.ts.map +1 -0
- package/dist/dev/components/code-highlighter.d.ts +5 -0
- package/dist/dev/components/code-highlighter.d.ts.map +1 -0
- package/dist/dev/components/dev-context.d.ts +12 -0
- package/dist/dev/components/dev-context.d.ts.map +1 -0
- package/dist/dev/components/showcase.d.ts +72 -0
- package/dist/dev/components/showcase.d.ts.map +1 -0
- package/dist/dev/data.d.ts +68 -0
- package/dist/dev/data.d.ts.map +1 -0
- package/dist/dev/main.d.ts +1 -0
- package/dist/dev/main.d.ts.map +1 -0
- package/dist/dev/sections/buttons.d.ts +2 -0
- package/dist/dev/sections/buttons.d.ts.map +1 -0
- package/dist/dev/sections/display.d.ts +2 -0
- package/dist/dev/sections/display.d.ts.map +1 -0
- package/dist/dev/sections/feedback.d.ts +2 -0
- package/dist/dev/sections/feedback.d.ts.map +1 -0
- package/dist/dev/sections/forms.d.ts +2 -0
- package/dist/dev/sections/forms.d.ts.map +1 -0
- package/dist/dev/sections/interactive.d.ts +2 -0
- package/dist/dev/sections/interactive.d.ts.map +1 -0
- package/dist/dev/sections/overview.d.ts +2 -0
- package/dist/dev/sections/overview.d.ts.map +1 -0
- package/dist/dev/showcase/accordion.d.ts +2 -0
- package/dist/dev/showcase/accordion.d.ts.map +1 -0
- package/dist/dev/showcase/alert-dialog.d.ts +2 -0
- package/dist/dev/showcase/alert-dialog.d.ts.map +1 -0
- package/dist/dev/showcase/alert.d.ts +2 -0
- package/dist/dev/showcase/alert.d.ts.map +1 -0
- package/dist/dev/showcase/aspect-ratio.d.ts +2 -0
- package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -0
- package/dist/dev/showcase/avatar.d.ts +2 -0
- package/dist/dev/showcase/avatar.d.ts.map +1 -0
- package/dist/dev/showcase/badge.d.ts +2 -0
- package/dist/dev/showcase/badge.d.ts.map +1 -0
- package/dist/dev/showcase/breadcrumb.d.ts +2 -0
- package/dist/dev/showcase/breadcrumb.d.ts.map +1 -0
- package/dist/dev/showcase/button.d.ts +2 -0
- package/dist/dev/showcase/button.d.ts.map +1 -0
- package/dist/dev/showcase/calendar.d.ts +2 -0
- package/dist/dev/showcase/calendar.d.ts.map +1 -0
- package/dist/dev/showcase/card.d.ts +2 -0
- package/dist/dev/showcase/card.d.ts.map +1 -0
- package/dist/dev/showcase/carousel.d.ts +2 -0
- package/dist/dev/showcase/carousel.d.ts.map +1 -0
- package/dist/dev/showcase/chart.d.ts +2 -0
- package/dist/dev/showcase/chart.d.ts.map +1 -0
- package/dist/dev/showcase/checkbox.d.ts +2 -0
- package/dist/dev/showcase/checkbox.d.ts.map +1 -0
- package/dist/dev/showcase/collapsible.d.ts +3 -0
- package/dist/dev/showcase/collapsible.d.ts.map +1 -0
- package/dist/dev/showcase/combobox.d.ts +2 -0
- package/dist/dev/showcase/combobox.d.ts.map +1 -0
- package/dist/dev/showcase/command.d.ts +2 -0
- package/dist/dev/showcase/command.d.ts.map +1 -0
- package/dist/dev/showcase/context-menu.d.ts +2 -0
- package/dist/dev/showcase/context-menu.d.ts.map +1 -0
- package/dist/dev/showcase/dialog.d.ts +2 -0
- package/dist/dev/showcase/dialog.d.ts.map +1 -0
- package/dist/dev/showcase/drawer.d.ts +2 -0
- package/dist/dev/showcase/drawer.d.ts.map +1 -0
- package/dist/dev/showcase/dropdown-menu.d.ts +2 -0
- package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -0
- package/dist/dev/showcase/empty.d.ts +2 -0
- package/dist/dev/showcase/empty.d.ts.map +1 -0
- package/dist/dev/showcase/hover-card.d.ts +2 -0
- package/dist/dev/showcase/hover-card.d.ts.map +1 -0
- package/dist/dev/showcase/input-group.d.ts +2 -0
- package/dist/dev/showcase/input-group.d.ts.map +1 -0
- package/dist/dev/showcase/input-otp.d.ts +2 -0
- package/dist/dev/showcase/input-otp.d.ts.map +1 -0
- package/dist/dev/showcase/input.d.ts +2 -0
- package/dist/dev/showcase/input.d.ts.map +1 -0
- package/dist/dev/showcase/item.d.ts +2 -0
- package/dist/dev/showcase/item.d.ts.map +1 -0
- package/dist/dev/showcase/kbd.d.ts +2 -0
- package/dist/dev/showcase/kbd.d.ts.map +1 -0
- package/dist/dev/showcase/label.d.ts +2 -0
- package/dist/dev/showcase/label.d.ts.map +1 -0
- package/dist/dev/showcase/menubar.d.ts +2 -0
- package/dist/dev/showcase/menubar.d.ts.map +1 -0
- package/dist/dev/showcase/navigation-menu.d.ts +3 -0
- package/dist/dev/showcase/navigation-menu.d.ts.map +1 -0
- package/dist/dev/showcase/overview.d.ts +2 -0
- package/dist/dev/showcase/overview.d.ts.map +1 -0
- package/dist/dev/showcase/pagination.d.ts +2 -0
- package/dist/dev/showcase/pagination.d.ts.map +1 -0
- package/dist/dev/showcase/popover.d.ts +2 -0
- package/dist/dev/showcase/popover.d.ts.map +1 -0
- package/dist/dev/showcase/progress.d.ts +2 -0
- package/dist/dev/showcase/progress.d.ts.map +1 -0
- package/dist/dev/showcase/radio-group.d.ts +2 -0
- package/dist/dev/showcase/radio-group.d.ts.map +1 -0
- package/dist/dev/showcase/resizable.d.ts +2 -0
- package/dist/dev/showcase/resizable.d.ts.map +1 -0
- package/dist/dev/showcase/scroll-area.d.ts +2 -0
- package/dist/dev/showcase/scroll-area.d.ts.map +1 -0
- package/dist/dev/showcase/select.d.ts +2 -0
- package/dist/dev/showcase/select.d.ts.map +1 -0
- package/dist/dev/showcase/separator.d.ts +2 -0
- package/dist/dev/showcase/separator.d.ts.map +1 -0
- package/dist/dev/showcase/sheet.d.ts +2 -0
- package/dist/dev/showcase/sheet.d.ts.map +1 -0
- package/dist/dev/showcase/sidebar.d.ts +2 -0
- package/dist/dev/showcase/sidebar.d.ts.map +1 -0
- package/dist/dev/showcase/skeleton.d.ts +2 -0
- package/dist/dev/showcase/skeleton.d.ts.map +1 -0
- package/dist/dev/showcase/slider.d.ts +2 -0
- package/dist/dev/showcase/slider.d.ts.map +1 -0
- package/dist/dev/showcase/sonner.d.ts +2 -0
- package/dist/dev/showcase/sonner.d.ts.map +1 -0
- package/dist/dev/showcase/spinner.d.ts +2 -0
- package/dist/dev/showcase/spinner.d.ts.map +1 -0
- package/dist/dev/showcase/switch.d.ts +2 -0
- package/dist/dev/showcase/switch.d.ts.map +1 -0
- package/dist/dev/showcase/table.d.ts +2 -0
- package/dist/dev/showcase/table.d.ts.map +1 -0
- package/dist/dev/showcase/tabs.d.ts +2 -0
- package/dist/dev/showcase/tabs.d.ts.map +1 -0
- package/dist/dev/showcase/textarea.d.ts +2 -0
- package/dist/dev/showcase/textarea.d.ts.map +1 -0
- package/dist/dev/showcase/theme-provider.d.ts +2 -0
- package/dist/dev/showcase/theme-provider.d.ts.map +1 -0
- package/dist/dev/showcase/toast.d.ts +2 -0
- package/dist/dev/showcase/toast.d.ts.map +1 -0
- package/dist/dev/showcase/toggle-group.d.ts +2 -0
- package/dist/dev/showcase/toggle-group.d.ts.map +1 -0
- package/dist/dev/showcase/toggle.d.ts +2 -0
- package/dist/dev/showcase/toggle.d.ts.map +1 -0
- package/dist/dev/showcase/tooltip.d.ts +2 -0
- package/dist/dev/showcase/tooltip.d.ts.map +1 -0
- package/dist/hooks/use-controllable-state.d.ts +14 -0
- package/dist/hooks/use-controllable-state.d.ts.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/index.cjs +5099 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4740 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/types.d.ts +4 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/preset.d.ts +18 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/test/setup.d.ts +1 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/llms.txt +74 -0
- package/package.json +117 -0
- package/scripts/add-icononly-prop.ts +84 -0
- package/scripts/audit-best-practices.ts +114 -0
- package/scripts/audit-showcase.ts +262 -0
- package/scripts/audit-showcases.ts +83 -0
- package/scripts/clean-imports.ts +21 -0
- package/scripts/count_missing.ts +24 -0
- package/scripts/find-css-vars.ts +62 -0
- package/scripts/fix-portals.ts +90 -0
- package/scripts/full-audit.ts +89 -0
- package/scripts/merge-components.cjs +65 -0
- package/scripts/merge-components.js +64 -0
- package/scripts/optimize-barrel.ts +116 -0
- package/scripts/postinstall.cjs +228 -0
- package/scripts/refactor_divs.ts +39 -0
- package/scripts/remove_div_wrappers.ts +17 -0
- package/scripts/update-gaps.ts +83 -0
- package/scripts/update_showcase_codestrings.ts +87 -0
- package/src/components/macro/accordion-preset.test.tsx +37 -0
- package/src/components/macro/accordion-preset.tsx +41 -0
- package/src/components/macro/alert-dialog-preset.tsx +116 -0
- package/src/components/macro/alert-preset.tsx +94 -0
- package/src/components/macro/avatar-preset.tsx +54 -0
- package/src/components/macro/breadcrumb-preset.tsx +50 -0
- package/src/components/macro/card-preset.tsx +44 -0
- package/src/components/macro/carousel-preset.tsx +150 -0
- package/src/components/macro/checkbox-preset.test.tsx +49 -0
- package/src/components/macro/checkbox-preset.tsx +84 -0
- package/src/components/macro/combobox-preset.tsx +171 -0
- package/src/components/macro/command-preset.tsx +74 -0
- package/src/components/macro/date-picker.tsx +289 -0
- package/src/components/macro/dialog-preset.tsx +105 -0
- package/src/components/macro/empty-preset.tsx +46 -0
- package/src/components/macro/field-preset.test.tsx +69 -0
- package/src/components/macro/field-preset.tsx +65 -0
- package/src/components/macro/index.ts +21 -0
- package/src/components/macro/input-otp-preset.tsx +98 -0
- package/src/components/macro/input-preset.test.tsx +52 -0
- package/src/components/macro/input-preset.tsx +139 -0
- package/src/components/macro/pagination-preset.tsx +153 -0
- package/src/components/macro/progress-preset.test.tsx +65 -0
- package/src/components/macro/progress-preset.tsx +45 -0
- package/src/components/macro/radio-group-preset.tsx +115 -0
- package/src/components/macro/select-preset.tsx +168 -0
- package/src/components/macro/slider-preset.test.tsx +43 -0
- package/src/components/macro/slider-preset.tsx +86 -0
- package/src/components/macro/switch-preset.test.tsx +53 -0
- package/src/components/macro/switch-preset.tsx +70 -0
- package/src/components/macro/tabs-preset.test.tsx +31 -0
- package/src/components/macro/tabs-preset.tsx +51 -0
- package/src/components/macro/textarea-preset.test.tsx +39 -0
- package/src/components/macro/textarea-preset.tsx +55 -0
- package/src/components/micro/accordion.tsx +76 -0
- package/src/components/micro/alert-dialog.tsx +213 -0
- package/src/components/micro/alert.tsx +146 -0
- package/src/components/micro/aspect-ratio.tsx +38 -0
- package/src/components/micro/avatar.tsx +143 -0
- package/src/components/micro/badge.tsx +207 -0
- package/src/components/micro/breadcrumb.tsx +162 -0
- package/src/components/micro/button.test.tsx +25 -0
- package/src/components/micro/button.tsx +361 -0
- package/src/components/micro/calendar.tsx +383 -0
- package/src/components/micro/card.tsx +112 -0
- package/src/components/micro/carousel.tsx +341 -0
- package/src/components/micro/chart.tsx +392 -0
- package/src/components/micro/checkbox.tsx +74 -0
- package/src/components/micro/collapsible.tsx +65 -0
- package/src/components/micro/combobox.tsx +349 -0
- package/src/components/micro/command.tsx +238 -0
- package/src/components/micro/context-menu.tsx +285 -0
- package/src/components/micro/dialog.tsx +143 -0
- package/src/components/micro/direction.tsx +13 -0
- package/src/components/micro/drawer.tsx +149 -0
- package/src/components/micro/dropdown-menu.tsx +305 -0
- package/src/components/micro/empty.tsx +144 -0
- package/src/components/micro/field.tsx +311 -0
- package/src/components/micro/hover-card.tsx +86 -0
- package/src/components/micro/input-group.tsx +269 -0
- package/src/components/micro/input-otp.tsx +130 -0
- package/src/components/micro/input.tsx +56 -0
- package/src/components/micro/item.tsx +206 -0
- package/src/components/micro/kbd.tsx +38 -0
- package/src/components/micro/label.tsx +48 -0
- package/src/components/micro/menubar.tsx +302 -0
- package/src/components/micro/navigation-menu.tsx +197 -0
- package/src/components/micro/pagination.tsx +162 -0
- package/src/components/micro/popover.tsx +131 -0
- package/src/components/micro/progress.tsx +144 -0
- package/src/components/micro/radio-group.tsx +73 -0
- package/src/components/micro/resizable.tsx +64 -0
- package/src/components/micro/scroll-area.tsx +68 -0
- package/src/components/micro/select.tsx +234 -0
- package/src/components/micro/separator.tsx +37 -0
- package/src/components/micro/sheet.tsx +144 -0
- package/src/components/micro/sidebar.tsx +238 -0
- package/src/components/micro/skeleton.tsx +29 -0
- package/src/components/micro/slider.tsx +135 -0
- package/src/components/micro/sonner.tsx +85 -0
- package/src/components/micro/spinner.tsx +44 -0
- package/src/components/micro/switch.tsx +70 -0
- package/src/components/micro/table.tsx +210 -0
- package/src/components/micro/tabs.tsx +100 -0
- package/src/components/micro/textarea.tsx +53 -0
- package/src/components/micro/theme-provider.tsx +163 -0
- package/src/components/micro/toggle-group.tsx +121 -0
- package/src/components/micro/toggle.tsx +55 -0
- package/src/components/micro/tooltip.tsx +105 -0
- package/src/dev/App.tsx +322 -0
- package/src/dev/_debug_select.html +29 -0
- package/src/dev/components/GladcnLogo.tsx +80 -0
- package/src/dev/components/code-highlighter.tsx +67 -0
- package/src/dev/components/dev-context.tsx +31 -0
- package/src/dev/components/showcase.tsx +413 -0
- package/src/dev/data.ts +341 -0
- package/src/dev/index.css +55 -0
- package/src/dev/main.tsx +30 -0
- package/src/dev/sections/buttons.tsx +303 -0
- package/src/dev/sections/display.tsx +270 -0
- package/src/dev/sections/feedback.tsx +371 -0
- package/src/dev/sections/forms.tsx +652 -0
- package/src/dev/sections/interactive.tsx +51 -0
- package/src/dev/sections/overview.tsx +396 -0
- package/src/dev/showcase/accordion.tsx +947 -0
- package/src/dev/showcase/alert-dialog.tsx +1056 -0
- package/src/dev/showcase/alert.tsx +756 -0
- package/src/dev/showcase/aspect-ratio.tsx +339 -0
- package/src/dev/showcase/avatar.tsx +470 -0
- package/src/dev/showcase/badge.tsx +227 -0
- package/src/dev/showcase/breadcrumb.tsx +269 -0
- package/src/dev/showcase/button.tsx +309 -0
- package/src/dev/showcase/calendar.tsx +380 -0
- package/src/dev/showcase/card.tsx +448 -0
- package/src/dev/showcase/carousel.tsx +562 -0
- package/src/dev/showcase/chart.tsx +130 -0
- package/src/dev/showcase/checkbox.tsx +611 -0
- package/src/dev/showcase/collapsible.tsx +298 -0
- package/src/dev/showcase/combobox.tsx +777 -0
- package/src/dev/showcase/command.tsx +245 -0
- package/src/dev/showcase/context-menu.tsx +239 -0
- package/src/dev/showcase/dialog.tsx +1141 -0
- package/src/dev/showcase/drawer.tsx +392 -0
- package/src/dev/showcase/dropdown-menu.tsx +420 -0
- package/src/dev/showcase/empty.tsx +493 -0
- package/src/dev/showcase/hover-card.tsx +336 -0
- package/src/dev/showcase/input-group.tsx +511 -0
- package/src/dev/showcase/input-otp.tsx +404 -0
- package/src/dev/showcase/input.tsx +530 -0
- package/src/dev/showcase/item.tsx +295 -0
- package/src/dev/showcase/kbd.tsx +276 -0
- package/src/dev/showcase/label.tsx +121 -0
- package/src/dev/showcase/menubar.tsx +392 -0
- package/src/dev/showcase/navigation-menu.tsx +304 -0
- package/src/dev/showcase/overview.tsx +1106 -0
- package/src/dev/showcase/pagination.tsx +312 -0
- package/src/dev/showcase/popover.tsx +374 -0
- package/src/dev/showcase/progress.tsx +299 -0
- package/src/dev/showcase/radio-group.tsx +612 -0
- package/src/dev/showcase/resizable.tsx +237 -0
- package/src/dev/showcase/scroll-area.tsx +157 -0
- package/src/dev/showcase/select.tsx +628 -0
- package/src/dev/showcase/separator.tsx +126 -0
- package/src/dev/showcase/sheet.tsx +566 -0
- package/src/dev/showcase/sidebar.tsx +120 -0
- package/src/dev/showcase/skeleton.tsx +213 -0
- package/src/dev/showcase/slider.tsx +506 -0
- package/src/dev/showcase/sonner.tsx +376 -0
- package/src/dev/showcase/spinner.tsx +124 -0
- package/src/dev/showcase/switch.tsx +602 -0
- package/src/dev/showcase/table.tsx +196 -0
- package/src/dev/showcase/tabs.tsx +662 -0
- package/src/dev/showcase/textarea.tsx +498 -0
- package/src/dev/showcase/theme-provider.tsx +894 -0
- package/src/dev/showcase/toast.tsx +119 -0
- package/src/dev/showcase/toggle-group.tsx +223 -0
- package/src/dev/showcase/toggle.tsx +171 -0
- package/src/dev/showcase/tooltip.tsx +372 -0
- package/src/hooks/use-controllable-state.ts +87 -0
- package/src/hooks/use-mobile.ts +21 -0
- package/src/index.ts +62 -0
- package/src/lib/types.ts +14 -0
- package/src/lib/utils.test.ts +14 -0
- package/src/lib/utils.ts +6 -0
- package/src/preset.ts +17 -0
- package/src/styles/gladcn.css +116 -0
- package/src/styles/tokens.css +213 -0
- package/src/test/setup.ts +8 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1,662 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DocsCode,
|
|
3
|
+
DocsH3,
|
|
4
|
+
DocsP,
|
|
5
|
+
ExampleGrid,
|
|
6
|
+
ExampleSection,
|
|
7
|
+
Showcase,
|
|
8
|
+
ShowcaseDocs,
|
|
9
|
+
} from "../../dev/components/showcase";
|
|
10
|
+
|
|
11
|
+
import { TabsPreset } from "../../components/macro/tabs-preset";
|
|
12
|
+
import {
|
|
13
|
+
Tabs,
|
|
14
|
+
TabsContent,
|
|
15
|
+
TabsList,
|
|
16
|
+
TabsTrigger,
|
|
17
|
+
} from "../../components/micro/tabs";
|
|
18
|
+
import { BellIcon, CreditCardIcon, UserIcon } from "lucide-react";
|
|
19
|
+
|
|
20
|
+
// ──────────────────────────────────────────────────────────
|
|
21
|
+
// SECTION 1: Macro Content
|
|
22
|
+
// ──────────────────────────────────────────────────────────
|
|
23
|
+
function TabsMacroShowcase() {
|
|
24
|
+
return (
|
|
25
|
+
<div className="space-y-10 mt-6">
|
|
26
|
+
<ExampleGrid>
|
|
27
|
+
<ExampleSection
|
|
28
|
+
label="Tiêu chuẩn (Standard)"
|
|
29
|
+
description="Tabs cơ bản truyền qua mảng items."
|
|
30
|
+
codeString={`<TabsPreset
|
|
31
|
+
defaultValue="account"
|
|
32
|
+
className="w-full"
|
|
33
|
+
items={[
|
|
34
|
+
{
|
|
35
|
+
value: "account",
|
|
36
|
+
title: "Account",
|
|
37
|
+
content: (
|
|
38
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
39
|
+
<h4 className="font-medium">Account</h4>
|
|
40
|
+
<p className="text-sm text-muted-foreground">Account settings here.</p>
|
|
41
|
+
</div>
|
|
42
|
+
),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
value: "password",
|
|
46
|
+
title: "Password",
|
|
47
|
+
content: (
|
|
48
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
49
|
+
<h4 className="font-medium">Password</h4>
|
|
50
|
+
<p className="text-sm text-muted-foreground">Change your password here.</p>
|
|
51
|
+
</div>
|
|
52
|
+
),
|
|
53
|
+
},
|
|
54
|
+
]}
|
|
55
|
+
/>`}
|
|
56
|
+
>
|
|
57
|
+
<TabsPreset
|
|
58
|
+
defaultValue="account"
|
|
59
|
+
className="w-full"
|
|
60
|
+
items={[
|
|
61
|
+
{
|
|
62
|
+
value: "account",
|
|
63
|
+
title: "Account",
|
|
64
|
+
content: (
|
|
65
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
66
|
+
<h4 className="font-medium">Account</h4>
|
|
67
|
+
<p className="text-sm text-muted-foreground">
|
|
68
|
+
Account settings here.
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
),
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
value: "password",
|
|
75
|
+
title: "Password",
|
|
76
|
+
content: (
|
|
77
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
78
|
+
<h4 className="font-medium">Password</h4>
|
|
79
|
+
<p className="text-sm text-muted-foreground">
|
|
80
|
+
Change your password here.
|
|
81
|
+
</p>
|
|
82
|
+
</div>
|
|
83
|
+
),
|
|
84
|
+
},
|
|
85
|
+
]}
|
|
86
|
+
/>
|
|
87
|
+
</ExampleSection>
|
|
88
|
+
|
|
89
|
+
<ExampleSection
|
|
90
|
+
label="Tab bị vô hiệu hóa (Disabled Tab)"
|
|
91
|
+
description="Tab không thể tương tác do thuộc tính disabled."
|
|
92
|
+
codeString={`<TabsPreset
|
|
93
|
+
defaultValue="general"
|
|
94
|
+
className="w-full"
|
|
95
|
+
items={[
|
|
96
|
+
{
|
|
97
|
+
value: "general",
|
|
98
|
+
title: "General",
|
|
99
|
+
content: (
|
|
100
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
101
|
+
<h4 className="font-medium">General</h4>
|
|
102
|
+
<p className="text-sm text-muted-foreground">General settings.</p>
|
|
103
|
+
</div>
|
|
104
|
+
),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
value: "advanced",
|
|
108
|
+
title: "Advanced (Pro)",
|
|
109
|
+
content: <></>,
|
|
110
|
+
disabled: true,
|
|
111
|
+
},
|
|
112
|
+
]}
|
|
113
|
+
/>`}
|
|
114
|
+
>
|
|
115
|
+
<TabsPreset
|
|
116
|
+
defaultValue="general"
|
|
117
|
+
className="w-full"
|
|
118
|
+
items={[
|
|
119
|
+
{
|
|
120
|
+
value: "general",
|
|
121
|
+
title: "General",
|
|
122
|
+
content: (
|
|
123
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
124
|
+
<h4 className="font-medium">General</h4>
|
|
125
|
+
<p className="text-sm text-muted-foreground">
|
|
126
|
+
General settings.
|
|
127
|
+
</p>
|
|
128
|
+
</div>
|
|
129
|
+
),
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
value: "advanced",
|
|
133
|
+
title: "Advanced (Pro)",
|
|
134
|
+
content: <></>,
|
|
135
|
+
disabled: true,
|
|
136
|
+
},
|
|
137
|
+
]}
|
|
138
|
+
/>
|
|
139
|
+
</ExampleSection>
|
|
140
|
+
</ExampleGrid>
|
|
141
|
+
|
|
142
|
+
<ExampleSection
|
|
143
|
+
label="Dạng đường viền (Line Variant)"
|
|
144
|
+
description="Sử dụng prop variant='line' để hiển thị tabs kiểu gạch chân (phong cách thanh điều hướng)."
|
|
145
|
+
fullWidth
|
|
146
|
+
codeString={`<div className="max-w-lg">
|
|
147
|
+
<TabsPreset
|
|
148
|
+
defaultValue="overview"
|
|
149
|
+
variant="line"
|
|
150
|
+
listClassName="w-full justify-start border-b border-b-border rounded-none px-0"
|
|
151
|
+
className="w-full"
|
|
152
|
+
items={[
|
|
153
|
+
{
|
|
154
|
+
value: "overview",
|
|
155
|
+
title: "Overview",
|
|
156
|
+
content: (
|
|
157
|
+
<div className="pt-4">
|
|
158
|
+
<h4 className="font-medium">Overview</h4>
|
|
159
|
+
<p className="text-sm text-muted-foreground">
|
|
160
|
+
High-level project statistics and activity feed.
|
|
161
|
+
</p>
|
|
162
|
+
</div>
|
|
163
|
+
),
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
value: "analytics",
|
|
167
|
+
title: "Analytics",
|
|
168
|
+
content: (
|
|
169
|
+
<div className="pt-4">
|
|
170
|
+
<h4 className="font-medium">Analytics</h4>
|
|
171
|
+
<p className="text-sm text-muted-foreground">
|
|
172
|
+
Charts and data visualizations.
|
|
173
|
+
</p>
|
|
174
|
+
</div>
|
|
175
|
+
),
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
value: "reports",
|
|
179
|
+
title: "Reports",
|
|
180
|
+
content: (
|
|
181
|
+
<div className="pt-4">
|
|
182
|
+
<h4 className="font-medium">Reports</h4>
|
|
183
|
+
<p className="text-sm text-muted-foreground">
|
|
184
|
+
Generated reports and exports.
|
|
185
|
+
</p>
|
|
186
|
+
</div>
|
|
187
|
+
),
|
|
188
|
+
},
|
|
189
|
+
]}
|
|
190
|
+
/>
|
|
191
|
+
</div>
|
|
192
|
+
`}
|
|
193
|
+
>
|
|
194
|
+
<div className="max-w-lg">
|
|
195
|
+
<TabsPreset
|
|
196
|
+
defaultValue="overview"
|
|
197
|
+
variant="line"
|
|
198
|
+
listClassName="w-full justify-start border-b border-b-border rounded-none px-0"
|
|
199
|
+
className="w-full"
|
|
200
|
+
items={[
|
|
201
|
+
{
|
|
202
|
+
value: "overview",
|
|
203
|
+
title: "Overview",
|
|
204
|
+
content: (
|
|
205
|
+
<div className="pt-4">
|
|
206
|
+
<h4 className="font-medium">Overview</h4>
|
|
207
|
+
<p className="text-sm text-muted-foreground">
|
|
208
|
+
High-level project statistics and activity feed.
|
|
209
|
+
</p>
|
|
210
|
+
</div>
|
|
211
|
+
),
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
value: "analytics",
|
|
215
|
+
title: "Analytics",
|
|
216
|
+
content: (
|
|
217
|
+
<div className="pt-4">
|
|
218
|
+
<h4 className="font-medium">Analytics</h4>
|
|
219
|
+
<p className="text-sm text-muted-foreground">
|
|
220
|
+
Charts and data visualizations.
|
|
221
|
+
</p>
|
|
222
|
+
</div>
|
|
223
|
+
),
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
value: "reports",
|
|
227
|
+
title: "Reports",
|
|
228
|
+
content: (
|
|
229
|
+
<div className="pt-4">
|
|
230
|
+
<h4 className="font-medium">Reports</h4>
|
|
231
|
+
<p className="text-sm text-muted-foreground">
|
|
232
|
+
Generated reports and exports.
|
|
233
|
+
</p>
|
|
234
|
+
</div>
|
|
235
|
+
),
|
|
236
|
+
},
|
|
237
|
+
]}
|
|
238
|
+
/>
|
|
239
|
+
</div>
|
|
240
|
+
</ExampleSection>
|
|
241
|
+
|
|
242
|
+
<ExampleSection
|
|
243
|
+
label="Nội dung phức tạp (Complex Content)"
|
|
244
|
+
description="Hiển thị các component phức tạp như form bên trong nội dung tab."
|
|
245
|
+
fullWidth
|
|
246
|
+
codeString={`<div className="max-w-lg">
|
|
247
|
+
<TabsPreset
|
|
248
|
+
defaultValue="login"
|
|
249
|
+
className="w-full"
|
|
250
|
+
items={[
|
|
251
|
+
{
|
|
252
|
+
value: "login",
|
|
253
|
+
title: "Login",
|
|
254
|
+
content: (
|
|
255
|
+
<div className="rounded-xl border border-border bg-card p-6 mt-2 flex flex-col gap-4">
|
|
256
|
+
<div className="text-lg font-semibold">Welcome Back</div>
|
|
257
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
258
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
259
|
+
<button className="bg-primary text-primary-foreground h-10 rounded-md text-sm font-medium">
|
|
260
|
+
Sign In
|
|
261
|
+
</button>
|
|
262
|
+
</div>
|
|
263
|
+
),
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
value: "register",
|
|
267
|
+
title: "Register",
|
|
268
|
+
content: (
|
|
269
|
+
<div className="rounded-xl border border-border bg-card p-6 mt-2 flex flex-col gap-4">
|
|
270
|
+
<div className="text-lg font-semibold">Create Account</div>
|
|
271
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
272
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
273
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
274
|
+
<button className="bg-primary text-primary-foreground h-10 rounded-md text-sm font-medium">
|
|
275
|
+
Sign Up
|
|
276
|
+
</button>
|
|
277
|
+
</div>
|
|
278
|
+
),
|
|
279
|
+
},
|
|
280
|
+
]}
|
|
281
|
+
/>
|
|
282
|
+
</div>
|
|
283
|
+
`}
|
|
284
|
+
>
|
|
285
|
+
<div className="max-w-lg">
|
|
286
|
+
<TabsPreset
|
|
287
|
+
defaultValue="login"
|
|
288
|
+
className="w-full"
|
|
289
|
+
items={[
|
|
290
|
+
{
|
|
291
|
+
value: "login",
|
|
292
|
+
title: "Login",
|
|
293
|
+
content: (
|
|
294
|
+
<div className="rounded-xl border border-border bg-card p-6 mt-2 flex flex-col gap-4">
|
|
295
|
+
<div className="text-lg font-semibold">Welcome Back</div>
|
|
296
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
297
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
298
|
+
<button className="bg-primary text-primary-foreground h-10 rounded-md text-sm font-medium">
|
|
299
|
+
Sign In
|
|
300
|
+
</button>
|
|
301
|
+
</div>
|
|
302
|
+
),
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
value: "register",
|
|
306
|
+
title: "Register",
|
|
307
|
+
content: (
|
|
308
|
+
<div className="rounded-xl border border-border bg-card p-6 mt-2 flex flex-col gap-4">
|
|
309
|
+
<div className="text-lg font-semibold">Create Account</div>
|
|
310
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
311
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
312
|
+
<div className="h-10 w-full bg-muted rounded-md" />
|
|
313
|
+
<button className="bg-primary text-primary-foreground h-10 rounded-md text-sm font-medium">
|
|
314
|
+
Sign Up
|
|
315
|
+
</button>
|
|
316
|
+
</div>
|
|
317
|
+
),
|
|
318
|
+
},
|
|
319
|
+
]}
|
|
320
|
+
/>
|
|
321
|
+
</div>
|
|
322
|
+
</ExampleSection>
|
|
323
|
+
</div>
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// ──────────────────────────────────────────────────────────
|
|
328
|
+
// SECTION 2: Micro Content
|
|
329
|
+
// ──────────────────────────────────────────────────────────
|
|
330
|
+
function TabsMicroShowcase() {
|
|
331
|
+
return (
|
|
332
|
+
<div className="space-y-10 mt-6">
|
|
333
|
+
<ExampleGrid>
|
|
334
|
+
<ExampleSection
|
|
335
|
+
label="Cơ bản (Default)"
|
|
336
|
+
description="Tabs nguyên thuỷ lắp ráp thủ công."
|
|
337
|
+
codeString={`<Tabs defaultValue="account" className="w-full">
|
|
338
|
+
<TabsList className="w-full">
|
|
339
|
+
<TabsTrigger value="account">Account</TabsTrigger>
|
|
340
|
+
<TabsTrigger value="password">Password</TabsTrigger>
|
|
341
|
+
</TabsList>
|
|
342
|
+
<TabsContent value="account">
|
|
343
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
344
|
+
<h4 className="font-medium">Account</h4>
|
|
345
|
+
<p className="text-sm text-muted-foreground">
|
|
346
|
+
Make changes to your account here.
|
|
347
|
+
</p>
|
|
348
|
+
</div>
|
|
349
|
+
</TabsContent>
|
|
350
|
+
<TabsContent value="password">
|
|
351
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
352
|
+
<h4 className="font-medium">Password</h4>
|
|
353
|
+
<p className="text-sm text-muted-foreground">
|
|
354
|
+
Change your password here.
|
|
355
|
+
</p>
|
|
356
|
+
</div>
|
|
357
|
+
</TabsContent>
|
|
358
|
+
</Tabs>
|
|
359
|
+
`}
|
|
360
|
+
>
|
|
361
|
+
<Tabs defaultValue="account" className="w-full">
|
|
362
|
+
<TabsList className="w-full">
|
|
363
|
+
<TabsTrigger value="account">Account</TabsTrigger>
|
|
364
|
+
<TabsTrigger value="password">Password</TabsTrigger>
|
|
365
|
+
</TabsList>
|
|
366
|
+
<TabsContent value="account">
|
|
367
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
368
|
+
<h4 className="font-medium">Account</h4>
|
|
369
|
+
<p className="text-sm text-muted-foreground">
|
|
370
|
+
Make changes to your account here.
|
|
371
|
+
</p>
|
|
372
|
+
</div>
|
|
373
|
+
</TabsContent>
|
|
374
|
+
<TabsContent value="password">
|
|
375
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
376
|
+
<h4 className="font-medium">Password</h4>
|
|
377
|
+
<p className="text-sm text-muted-foreground">
|
|
378
|
+
Change your password here.
|
|
379
|
+
</p>
|
|
380
|
+
</div>
|
|
381
|
+
</TabsContent>
|
|
382
|
+
</Tabs>
|
|
383
|
+
</ExampleSection>
|
|
384
|
+
|
|
385
|
+
<ExampleSection
|
|
386
|
+
label="Kèm Icon (With Icons)"
|
|
387
|
+
description="Thêm icon tuỳ chỉnh vào bên trong Tab Trigger."
|
|
388
|
+
codeString={`<Tabs defaultValue="profile" className="w-full">
|
|
389
|
+
<TabsList className="w-full">
|
|
390
|
+
<TabsTrigger value="profile">
|
|
391
|
+
<UserIcon data-icon="inline-start" />
|
|
392
|
+
Profile
|
|
393
|
+
</TabsTrigger>
|
|
394
|
+
<TabsTrigger value="notifications">
|
|
395
|
+
<BellIcon data-icon="inline-start" />
|
|
396
|
+
Notifications
|
|
397
|
+
</TabsTrigger>
|
|
398
|
+
</TabsList>
|
|
399
|
+
<TabsContent value="profile">
|
|
400
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
401
|
+
<h4 className="font-medium">Profile</h4>
|
|
402
|
+
<p className="text-sm text-muted-foreground">
|
|
403
|
+
Update your name, avatar and bio.
|
|
404
|
+
</p>
|
|
405
|
+
</div>
|
|
406
|
+
</TabsContent>
|
|
407
|
+
<TabsContent value="notifications">
|
|
408
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
409
|
+
<h4 className="font-medium">Notifications</h4>
|
|
410
|
+
<p className="text-sm text-muted-foreground">
|
|
411
|
+
Choose what notifications you receive.
|
|
412
|
+
</p>
|
|
413
|
+
</div>
|
|
414
|
+
</TabsContent>
|
|
415
|
+
</Tabs>
|
|
416
|
+
`}
|
|
417
|
+
>
|
|
418
|
+
<Tabs defaultValue="profile" className="w-full">
|
|
419
|
+
<TabsList className="w-full">
|
|
420
|
+
<TabsTrigger value="profile">
|
|
421
|
+
<UserIcon data-icon="inline-start" />
|
|
422
|
+
Profile
|
|
423
|
+
</TabsTrigger>
|
|
424
|
+
<TabsTrigger value="notifications">
|
|
425
|
+
<BellIcon data-icon="inline-start" />
|
|
426
|
+
Notifications
|
|
427
|
+
</TabsTrigger>
|
|
428
|
+
</TabsList>
|
|
429
|
+
<TabsContent value="profile">
|
|
430
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
431
|
+
<h4 className="font-medium">Profile</h4>
|
|
432
|
+
<p className="text-sm text-muted-foreground">
|
|
433
|
+
Update your name, avatar and bio.
|
|
434
|
+
</p>
|
|
435
|
+
</div>
|
|
436
|
+
</TabsContent>
|
|
437
|
+
<TabsContent value="notifications">
|
|
438
|
+
<div className="rounded-xl border border-border bg-card p-4 mt-2">
|
|
439
|
+
<h4 className="font-medium">Notifications</h4>
|
|
440
|
+
<p className="text-sm text-muted-foreground">
|
|
441
|
+
Choose what notifications you receive.
|
|
442
|
+
</p>
|
|
443
|
+
</div>
|
|
444
|
+
</TabsContent>
|
|
445
|
+
</Tabs>
|
|
446
|
+
</ExampleSection>
|
|
447
|
+
</ExampleGrid>
|
|
448
|
+
|
|
449
|
+
<ExampleSection
|
|
450
|
+
label="Dạng đường viền (Line Variant)"
|
|
451
|
+
description="Tabs có kiểu gạch chân (không nền)."
|
|
452
|
+
fullWidth
|
|
453
|
+
codeString={`<Tabs defaultValue="music" className="w-full max-w-lg">
|
|
454
|
+
<TabsList
|
|
455
|
+
variant="line"
|
|
456
|
+
className="w-full justify-start border-b border-b-border rounded-none px-0"
|
|
457
|
+
>
|
|
458
|
+
<TabsTrigger value="music">Music</TabsTrigger>
|
|
459
|
+
<TabsTrigger value="podcasts">Podcasts</TabsTrigger>
|
|
460
|
+
<TabsTrigger value="live">Live</TabsTrigger>
|
|
461
|
+
</TabsList>
|
|
462
|
+
<TabsContent value="music">
|
|
463
|
+
<div className="pt-4">
|
|
464
|
+
<h4 className="font-medium">Music Library</h4>
|
|
465
|
+
<p className="text-sm text-muted-foreground">
|
|
466
|
+
Your top played songs and albums.
|
|
467
|
+
</p>
|
|
468
|
+
</div>
|
|
469
|
+
</TabsContent>
|
|
470
|
+
<TabsContent value="podcasts">
|
|
471
|
+
<div className="pt-4">
|
|
472
|
+
<h4 className="font-medium">Podcasts</h4>
|
|
473
|
+
<p className="text-sm text-muted-foreground">
|
|
474
|
+
Episodes from your subscriptions.
|
|
475
|
+
</p>
|
|
476
|
+
</div>
|
|
477
|
+
</TabsContent>
|
|
478
|
+
<TabsContent value="live">
|
|
479
|
+
<div className="pt-4">
|
|
480
|
+
<h4 className="font-medium">Live Radio</h4>
|
|
481
|
+
<p className="text-sm text-muted-foreground">
|
|
482
|
+
Tune in to live broadcasts.
|
|
483
|
+
</p>
|
|
484
|
+
</div>
|
|
485
|
+
</TabsContent>
|
|
486
|
+
</Tabs>
|
|
487
|
+
`}
|
|
488
|
+
>
|
|
489
|
+
<Tabs defaultValue="music" className="w-full max-w-lg">
|
|
490
|
+
<TabsList
|
|
491
|
+
variant="line"
|
|
492
|
+
className="w-full justify-start border-b border-b-border rounded-none px-0"
|
|
493
|
+
>
|
|
494
|
+
<TabsTrigger value="music">Music</TabsTrigger>
|
|
495
|
+
<TabsTrigger value="podcasts">Podcasts</TabsTrigger>
|
|
496
|
+
<TabsTrigger value="live">Live</TabsTrigger>
|
|
497
|
+
</TabsList>
|
|
498
|
+
<TabsContent value="music">
|
|
499
|
+
<div className="pt-4">
|
|
500
|
+
<h4 className="font-medium">Music Library</h4>
|
|
501
|
+
<p className="text-sm text-muted-foreground">
|
|
502
|
+
Your top played songs and albums.
|
|
503
|
+
</p>
|
|
504
|
+
</div>
|
|
505
|
+
</TabsContent>
|
|
506
|
+
<TabsContent value="podcasts">
|
|
507
|
+
<div className="pt-4">
|
|
508
|
+
<h4 className="font-medium">Podcasts</h4>
|
|
509
|
+
<p className="text-sm text-muted-foreground">
|
|
510
|
+
Episodes from your subscriptions.
|
|
511
|
+
</p>
|
|
512
|
+
</div>
|
|
513
|
+
</TabsContent>
|
|
514
|
+
<TabsContent value="live">
|
|
515
|
+
<div className="pt-4">
|
|
516
|
+
<h4 className="font-medium">Live Radio</h4>
|
|
517
|
+
<p className="text-sm text-muted-foreground">
|
|
518
|
+
Tune in to live broadcasts.
|
|
519
|
+
</p>
|
|
520
|
+
</div>
|
|
521
|
+
</TabsContent>
|
|
522
|
+
</Tabs>
|
|
523
|
+
</ExampleSection>
|
|
524
|
+
|
|
525
|
+
<ExampleSection
|
|
526
|
+
label="Xếp dọc (Vertical Orientation)"
|
|
527
|
+
description="Sắp xếp danh sách tab theo chiều dọc bên trái và nội dung bên phải."
|
|
528
|
+
fullWidth
|
|
529
|
+
codeString={`<Tabs
|
|
530
|
+
defaultValue="profile"
|
|
531
|
+
orientation="vertical"
|
|
532
|
+
className="w-full max-w-xl"
|
|
533
|
+
>
|
|
534
|
+
<TabsList className="w-40 shrink-0">
|
|
535
|
+
<TabsTrigger value="profile">
|
|
536
|
+
<UserIcon data-icon="inline-start" />
|
|
537
|
+
Profile
|
|
538
|
+
</TabsTrigger>
|
|
539
|
+
<TabsTrigger value="notifications">
|
|
540
|
+
<BellIcon data-icon="inline-start" />
|
|
541
|
+
Notifications
|
|
542
|
+
</TabsTrigger>
|
|
543
|
+
<TabsTrigger value="billing">
|
|
544
|
+
<CreditCardIcon data-icon="inline-start" />
|
|
545
|
+
Billing
|
|
546
|
+
</TabsTrigger>
|
|
547
|
+
</TabsList>
|
|
548
|
+
<TabsContent value="profile">
|
|
549
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
550
|
+
<h4 className="font-medium">Profile</h4>
|
|
551
|
+
<p className="text-sm text-muted-foreground">
|
|
552
|
+
Update your personal information and manage your public
|
|
553
|
+
profile.
|
|
554
|
+
</p>
|
|
555
|
+
</div>
|
|
556
|
+
</TabsContent>
|
|
557
|
+
<TabsContent value="notifications">
|
|
558
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
559
|
+
<h4 className="font-medium">Notifications</h4>
|
|
560
|
+
<p className="text-sm text-muted-foreground">
|
|
561
|
+
Choose what notifications you receive and how.
|
|
562
|
+
</p>
|
|
563
|
+
</div>
|
|
564
|
+
</TabsContent>
|
|
565
|
+
<TabsContent value="billing">
|
|
566
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
567
|
+
<h4 className="font-medium">Billing</h4>
|
|
568
|
+
<p className="text-sm text-muted-foreground">
|
|
569
|
+
Manage your subscription and payment methods.
|
|
570
|
+
</p>
|
|
571
|
+
</div>
|
|
572
|
+
</TabsContent>
|
|
573
|
+
</Tabs>
|
|
574
|
+
`}
|
|
575
|
+
>
|
|
576
|
+
<Tabs
|
|
577
|
+
defaultValue="profile"
|
|
578
|
+
orientation="vertical"
|
|
579
|
+
className="w-full max-w-xl"
|
|
580
|
+
>
|
|
581
|
+
<TabsList className="w-40 shrink-0">
|
|
582
|
+
<TabsTrigger value="profile">
|
|
583
|
+
<UserIcon data-icon="inline-start" />
|
|
584
|
+
Profile
|
|
585
|
+
</TabsTrigger>
|
|
586
|
+
<TabsTrigger value="notifications">
|
|
587
|
+
<BellIcon data-icon="inline-start" />
|
|
588
|
+
Notifications
|
|
589
|
+
</TabsTrigger>
|
|
590
|
+
<TabsTrigger value="billing">
|
|
591
|
+
<CreditCardIcon data-icon="inline-start" />
|
|
592
|
+
Billing
|
|
593
|
+
</TabsTrigger>
|
|
594
|
+
</TabsList>
|
|
595
|
+
<TabsContent value="profile">
|
|
596
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
597
|
+
<h4 className="font-medium">Profile</h4>
|
|
598
|
+
<p className="text-sm text-muted-foreground">
|
|
599
|
+
Update your personal information and manage your public profile.
|
|
600
|
+
</p>
|
|
601
|
+
</div>
|
|
602
|
+
</TabsContent>
|
|
603
|
+
<TabsContent value="notifications">
|
|
604
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
605
|
+
<h4 className="font-medium">Notifications</h4>
|
|
606
|
+
<p className="text-sm text-muted-foreground">
|
|
607
|
+
Choose what notifications you receive and how.
|
|
608
|
+
</p>
|
|
609
|
+
</div>
|
|
610
|
+
</TabsContent>
|
|
611
|
+
<TabsContent value="billing">
|
|
612
|
+
<div className="rounded-xl border border-border bg-card p-4">
|
|
613
|
+
<h4 className="font-medium">Billing</h4>
|
|
614
|
+
<p className="text-sm text-muted-foreground">
|
|
615
|
+
Manage your subscription and payment methods.
|
|
616
|
+
</p>
|
|
617
|
+
</div>
|
|
618
|
+
</TabsContent>
|
|
619
|
+
</Tabs>
|
|
620
|
+
</ExampleSection>
|
|
621
|
+
</div>
|
|
622
|
+
);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// ──────────────────────────────────────────────────────────
|
|
626
|
+
// SECTION 3: Entry point
|
|
627
|
+
// ──────────────────────────────────────────────────────────
|
|
628
|
+
export default function TabsShowcase() {
|
|
629
|
+
return (
|
|
630
|
+
<Showcase
|
|
631
|
+
title="Tabs"
|
|
632
|
+
description="Tập hợp các tab panel được hiển thị lần lượt, chuyển đổi khi click vào tab tương ứng."
|
|
633
|
+
generalConcept={
|
|
634
|
+
<div className="space-y-4">
|
|
635
|
+
<ShowcaseDocs>
|
|
636
|
+
<DocsH3>Khi nào nên dùng Macro</DocsH3>
|
|
637
|
+
<DocsP>
|
|
638
|
+
<DocsCode>TabsPreset</DocsCode> là một component đóng gói sẵn,
|
|
639
|
+
nhận vào mảng <DocsCode>items</DocsCode> chứa thông tin cấu hình
|
|
640
|
+
của các tabs (value, title, content, disabled, ...). Thích hợp cho
|
|
641
|
+
các tab đơn giản, render từ dữ liệu cấu hình có sẵn.
|
|
642
|
+
</DocsP>
|
|
643
|
+
</ShowcaseDocs>
|
|
644
|
+
<ShowcaseDocs>
|
|
645
|
+
<DocsH3>Khi nào nên dùng Micro</DocsH3>
|
|
646
|
+
<DocsP>
|
|
647
|
+
Dùng <DocsCode>Tabs</DocsCode> và các thành phần con (
|
|
648
|
+
<DocsCode>TabsList</DocsCode>, <DocsCode>TabsTrigger</DocsCode>,{" "}
|
|
649
|
+
<DocsCode>TabsContent</DocsCode>) khi bạn muốn tự kiểm soát cấu
|
|
650
|
+
trúc HTML, muốn đính kèm Icon vào Trigger, hoặc xây dựng các dạng
|
|
651
|
+
Tab không theo khuôn mẫu (ví dụ: đặt List dọc, List rời rạc).
|
|
652
|
+
</DocsP>
|
|
653
|
+
</ShowcaseDocs>
|
|
654
|
+
</div>
|
|
655
|
+
}
|
|
656
|
+
tabs={[
|
|
657
|
+
{ label: "Micro (Primitive)", content: <TabsMicroShowcase /> },
|
|
658
|
+
{ label: "Macro (Preset)", content: <TabsMacroShowcase /> },
|
|
659
|
+
]}
|
|
660
|
+
/>
|
|
661
|
+
);
|
|
662
|
+
}
|