gladvn 0.2.16 → 0.2.18
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/bin/cli.js +9 -6
- package/dist/components/macro/accordion-preset.d.ts.map +1 -1
- package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -1
- package/dist/components/macro/alert-preset.d.ts.map +1 -1
- package/dist/components/macro/avatar-preset.d.ts.map +1 -1
- package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -1
- package/dist/components/macro/card-preset.d.ts.map +1 -1
- package/dist/components/macro/carousel-preset.d.ts.map +1 -1
- package/dist/components/macro/checkbox-preset.d.ts.map +1 -1
- package/dist/components/macro/combobox-preset.d.ts.map +1 -1
- package/dist/components/macro/command-preset.d.ts +1 -1
- package/dist/components/macro/command-preset.d.ts.map +1 -1
- package/dist/components/macro/date-picker.d.ts.map +1 -1
- package/dist/components/macro/dialog-preset.d.ts.map +1 -1
- package/dist/components/macro/empty-preset.d.ts.map +1 -1
- package/dist/components/macro/field-preset.d.ts.map +1 -1
- package/dist/components/macro/input-otp-preset.d.ts +6 -0
- package/dist/components/macro/input-otp-preset.d.ts.map +1 -1
- package/dist/components/macro/input-preset.d.ts +1 -1
- package/dist/components/macro/input-preset.d.ts.map +1 -1
- package/dist/components/macro/pagination-preset.d.ts.map +1 -1
- package/dist/components/macro/progress-preset.d.ts.map +1 -1
- package/dist/components/macro/radio-group-preset.d.ts.map +1 -1
- package/dist/components/macro/select-preset.d.ts.map +1 -1
- package/dist/components/macro/slider-preset.d.ts.map +1 -1
- package/dist/components/macro/switch-preset.d.ts.map +1 -1
- package/dist/components/macro/tabs-preset.d.ts +1 -1
- package/dist/components/macro/tabs-preset.d.ts.map +1 -1
- package/dist/components/macro/textarea-preset.d.ts +1 -1
- package/dist/components/macro/textarea-preset.d.ts.map +1 -1
- package/dist/components/micro/accordion.d.ts +7 -0
- package/dist/components/micro/accordion.d.ts.map +1 -1
- package/dist/components/micro/alert-dialog.d.ts.map +1 -1
- package/dist/components/micro/alert.d.ts +7 -0
- package/dist/components/micro/alert.d.ts.map +1 -1
- package/dist/components/micro/aspect-ratio.d.ts +7 -0
- package/dist/components/micro/aspect-ratio.d.ts.map +1 -1
- package/dist/components/micro/avatar.d.ts.map +1 -1
- package/dist/components/micro/badge.d.ts +8 -1
- package/dist/components/micro/badge.d.ts.map +1 -1
- package/dist/components/micro/breadcrumb.d.ts +7 -0
- package/dist/components/micro/breadcrumb.d.ts.map +1 -1
- package/dist/components/micro/button.d.ts +8 -1
- package/dist/components/micro/button.d.ts.map +1 -1
- package/dist/components/micro/calendar.d.ts +2 -2
- package/dist/components/micro/calendar.d.ts.map +1 -1
- package/dist/components/micro/carousel.d.ts.map +1 -1
- package/dist/components/micro/chart.d.ts.map +1 -1
- package/dist/components/micro/checkbox.d.ts.map +1 -1
- package/dist/components/micro/collapsible.d.ts.map +1 -1
- package/dist/components/micro/combobox.d.ts.map +1 -1
- package/dist/components/micro/command.d.ts.map +1 -1
- package/dist/components/micro/context-menu.d.ts.map +1 -1
- package/dist/components/micro/dialog.d.ts.map +1 -1
- package/dist/components/micro/drawer.d.ts.map +1 -1
- package/dist/components/micro/dropdown-menu.d.ts.map +1 -1
- package/dist/components/micro/empty.d.ts +7 -0
- package/dist/components/micro/empty.d.ts.map +1 -1
- package/dist/components/micro/field.d.ts.map +1 -1
- package/dist/components/micro/hover-card.d.ts +1 -1
- package/dist/components/micro/hover-card.d.ts.map +1 -1
- package/dist/components/micro/input-group.d.ts.map +1 -1
- package/dist/components/micro/input-otp.d.ts.map +1 -1
- package/dist/components/micro/input.d.ts +7 -0
- package/dist/components/micro/input.d.ts.map +1 -1
- package/dist/components/micro/item.d.ts.map +1 -1
- package/dist/components/micro/label.d.ts.map +1 -1
- package/dist/components/micro/menubar.d.ts.map +1 -1
- package/dist/components/micro/navigation-menu.d.ts +8 -1
- package/dist/components/micro/navigation-menu.d.ts.map +1 -1
- package/dist/components/micro/pagination.d.ts.map +1 -1
- package/dist/components/micro/popover.d.ts.map +1 -1
- package/dist/components/micro/progress.d.ts.map +1 -1
- package/dist/components/micro/radio-group.d.ts.map +1 -1
- package/dist/components/micro/select.d.ts +1 -1
- package/dist/components/micro/select.d.ts.map +1 -1
- package/dist/components/micro/sheet.d.ts.map +1 -1
- package/dist/components/micro/sidebar.d.ts.map +1 -1
- package/dist/components/micro/skeleton.d.ts +7 -0
- package/dist/components/micro/skeleton.d.ts.map +1 -1
- package/dist/components/micro/slider.d.ts +7 -0
- package/dist/components/micro/slider.d.ts.map +1 -1
- package/dist/components/micro/sonner.d.ts.map +1 -1
- package/dist/components/micro/spinner.d.ts.map +1 -1
- package/dist/components/micro/switch.d.ts.map +1 -1
- package/dist/components/micro/table.d.ts.map +1 -1
- package/dist/components/micro/tabs.d.ts +1 -1
- package/dist/components/micro/tabs.d.ts.map +1 -1
- package/dist/components/micro/textarea.d.ts +7 -0
- package/dist/components/micro/textarea.d.ts.map +1 -1
- package/dist/components/micro/toggle-group.d.ts.map +1 -1
- package/dist/components/micro/toggle.d.ts.map +1 -1
- package/dist/components/micro/tooltip.d.ts +1 -1
- package/dist/components/micro/tooltip.d.ts.map +1 -1
- package/dist/dev/App.d.ts.map +1 -1
- package/dist/dev/components/code-highlighter.d.ts.map +1 -1
- package/dist/dev/components/dev-context.d.ts.map +1 -1
- package/dist/dev/components/showcase.d.ts +1 -1
- package/dist/dev/components/showcase.d.ts.map +1 -1
- package/dist/dev/data.d.ts.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/dev/sections/buttons.d.ts.map +1 -1
- package/dist/dev/sections/feedback.d.ts.map +1 -1
- package/dist/dev/sections/overview.d.ts.map +1 -1
- package/dist/dev/showcase/accordion.d.ts.map +1 -1
- package/dist/dev/showcase/alert-dialog.d.ts.map +1 -1
- package/dist/dev/showcase/alert.d.ts.map +1 -1
- package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -1
- package/dist/dev/showcase/avatar.d.ts.map +1 -1
- package/dist/dev/showcase/breadcrumb.d.ts.map +1 -1
- package/dist/dev/showcase/button.d.ts.map +1 -1
- package/dist/dev/showcase/calendar.d.ts.map +1 -1
- package/dist/dev/showcase/card.d.ts.map +1 -1
- package/dist/dev/showcase/carousel.d.ts.map +1 -1
- package/dist/dev/showcase/chart.d.ts.map +1 -1
- package/dist/dev/showcase/checkbox.d.ts.map +1 -1
- package/dist/dev/showcase/collapsible.d.ts.map +1 -1
- package/dist/dev/showcase/combobox.d.ts.map +1 -1
- package/dist/dev/showcase/command.d.ts.map +1 -1
- package/dist/dev/showcase/context-menu.d.ts.map +1 -1
- package/dist/dev/showcase/dialog.d.ts.map +1 -1
- package/dist/dev/showcase/drawer.d.ts.map +1 -1
- package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -1
- package/dist/dev/showcase/empty.d.ts.map +1 -1
- package/dist/dev/showcase/hover-card.d.ts.map +1 -1
- package/dist/dev/showcase/input-group.d.ts.map +1 -1
- package/dist/dev/showcase/input-otp.d.ts.map +1 -1
- package/dist/dev/showcase/input.d.ts.map +1 -1
- package/dist/dev/showcase/item.d.ts.map +1 -1
- package/dist/dev/showcase/kbd.d.ts.map +1 -1
- package/dist/dev/showcase/label.d.ts.map +1 -1
- package/dist/dev/showcase/menubar.d.ts.map +1 -1
- package/dist/dev/showcase/navigation-menu.d.ts.map +1 -1
- package/dist/dev/showcase/overview.d.ts.map +1 -1
- package/dist/dev/showcase/pagination.d.ts.map +1 -1
- package/dist/dev/showcase/popover.d.ts.map +1 -1
- package/dist/dev/showcase/progress.d.ts.map +1 -1
- package/dist/dev/showcase/radio-group.d.ts.map +1 -1
- package/dist/dev/showcase/resizable.d.ts.map +1 -1
- package/dist/dev/showcase/scroll-area.d.ts.map +1 -1
- package/dist/dev/showcase/select.d.ts.map +1 -1
- package/dist/dev/showcase/separator.d.ts.map +1 -1
- package/dist/dev/showcase/sheet.d.ts.map +1 -1
- package/dist/dev/showcase/sidebar.d.ts.map +1 -1
- package/dist/dev/showcase/skeleton.d.ts.map +1 -1
- package/dist/dev/showcase/slider.d.ts.map +1 -1
- package/dist/dev/showcase/sonner.d.ts.map +1 -1
- package/dist/dev/showcase/spinner.d.ts.map +1 -1
- package/dist/dev/showcase/switch.d.ts.map +1 -1
- package/dist/dev/showcase/table.d.ts.map +1 -1
- package/dist/dev/showcase/tabs.d.ts.map +1 -1
- package/dist/dev/showcase/textarea.d.ts.map +1 -1
- package/dist/dev/showcase/theme-provider.d.ts.map +1 -1
- package/dist/dev/showcase/toast.d.ts.map +1 -1
- package/dist/dev/showcase/toggle-group.d.ts.map +1 -1
- package/dist/dev/showcase/toggle.d.ts.map +1 -1
- package/dist/dev/showcase/tooltip.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/package.json +3 -1
- package/scripts/format-codestrings.ts +87 -0
- package/scripts/organize-imports.ts +21 -0
- package/scripts/regex-format.cjs +67 -0
- package/scripts/tmp.tsx +25 -0
- package/src/components/macro/accordion-preset.test.tsx +1 -0
- package/src/components/macro/accordion-preset.tsx +2 -1
- package/src/components/macro/alert-dialog-preset.tsx +44 -43
- package/src/components/macro/alert-preset.tsx +7 -3
- 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 +5 -2
- package/src/components/macro/checkbox-preset.test.tsx +1 -0
- package/src/components/macro/checkbox-preset.tsx +6 -2
- package/src/components/macro/combobox-preset.tsx +6 -3
- package/src/components/macro/command-preset.tsx +7 -3
- package/src/components/macro/date-picker.tsx +77 -59
- package/src/components/macro/dialog-preset.tsx +42 -38
- package/src/components/macro/empty-preset.tsx +2 -1
- package/src/components/macro/field-preset.test.tsx +1 -0
- package/src/components/macro/field-preset.tsx +2 -1
- package/src/components/macro/input-otp-preset.tsx +6 -2
- package/src/components/macro/input-preset.test.tsx +1 -0
- package/src/components/macro/input-preset.tsx +4 -2
- package/src/components/macro/pagination-preset.tsx +3 -1
- package/src/components/macro/progress-preset.test.tsx +1 -0
- package/src/components/macro/progress-preset.tsx +2 -1
- package/src/components/macro/radio-group-preset.tsx +4 -1
- package/src/components/macro/select-preset.tsx +35 -30
- package/src/components/macro/slider-preset.test.tsx +1 -0
- package/src/components/macro/slider-preset.tsx +4 -1
- package/src/components/macro/switch-preset.test.tsx +1 -0
- package/src/components/macro/switch-preset.tsx +4 -1
- package/src/components/macro/tabs-preset.test.tsx +1 -0
- package/src/components/macro/tabs-preset.tsx +4 -2
- package/src/components/macro/textarea-preset.test.tsx +1 -0
- package/src/components/macro/textarea-preset.tsx +4 -1
- package/src/components/micro/accordion.tsx +3 -2
- package/src/components/micro/alert-dialog.tsx +2 -1
- package/src/components/micro/alert.tsx +3 -2
- package/src/components/micro/aspect-ratio.tsx +2 -1
- package/src/components/micro/avatar.tsx +2 -1
- package/src/components/micro/badge.tsx +3 -3
- package/src/components/micro/breadcrumb.tsx +3 -2
- package/src/components/micro/button.test.tsx +1 -0
- package/src/components/micro/button.tsx +3 -3
- package/src/components/micro/calendar.tsx +10 -9
- package/src/components/micro/carousel.tsx +3 -2
- package/src/components/micro/chart.tsx +1 -0
- package/src/components/micro/checkbox.tsx +2 -2
- package/src/components/micro/collapsible.tsx +4 -2
- package/src/components/micro/combobox.tsx +47 -29
- package/src/components/micro/command.tsx +23 -16
- package/src/components/micro/context-menu.tsx +3 -2
- package/src/components/micro/dialog.tsx +2 -1
- package/src/components/micro/drawer.tsx +2 -1
- package/src/components/micro/dropdown-menu.tsx +3 -2
- package/src/components/micro/empty.tsx +2 -1
- package/src/components/micro/field.tsx +4 -3
- package/src/components/micro/hover-card.tsx +20 -19
- package/src/components/micro/input-group.tsx +5 -4
- package/src/components/micro/input-otp.tsx +3 -2
- package/src/components/micro/input.tsx +3 -2
- package/src/components/micro/item.tsx +1 -0
- package/src/components/micro/label.tsx +2 -1
- package/src/components/micro/menubar.tsx +2 -1
- package/src/components/micro/navigation-menu.tsx +18 -17
- package/src/components/micro/pagination.tsx +2 -1
- package/src/components/micro/popover.tsx +2 -1
- package/src/components/micro/progress.tsx +2 -1
- package/src/components/micro/radio-group.tsx +3 -3
- package/src/components/micro/select.tsx +5 -4
- package/src/components/micro/sheet.tsx +2 -1
- package/src/components/micro/sidebar.tsx +4 -1
- package/src/components/micro/skeleton.tsx +2 -1
- package/src/components/micro/slider.tsx +4 -1
- package/src/components/micro/sonner.tsx +2 -1
- package/src/components/micro/spinner.tsx +1 -2
- package/src/components/micro/switch.tsx +2 -2
- package/src/components/micro/table.tsx +2 -1
- package/src/components/micro/tabs.tsx +4 -3
- package/src/components/micro/textarea.tsx +2 -1
- package/src/components/micro/toggle-group.tsx +1 -0
- package/src/components/micro/toggle.tsx +1 -3
- package/src/components/micro/tooltip.tsx +9 -3
- package/src/dev/App.tsx +66 -41
- package/src/dev/components/code-highlighter.tsx +2 -1
- package/src/dev/components/dev-context.tsx +1 -0
- package/src/dev/components/showcase.tsx +13 -14
- package/src/dev/data.ts +206 -52
- package/src/dev/main.tsx +4 -4
- package/src/dev/sections/buttons.tsx +14 -12
- package/src/dev/sections/feedback.tsx +7 -2
- package/src/dev/sections/forms.tsx +11 -11
- package/src/dev/sections/overview.tsx +2 -1
- package/src/dev/showcase/accordion.tsx +399 -314
- package/src/dev/showcase/alert-dialog.tsx +387 -384
- package/src/dev/showcase/alert.tsx +271 -258
- package/src/dev/showcase/aspect-ratio.tsx +102 -105
- package/src/dev/showcase/avatar.tsx +216 -145
- package/src/dev/showcase/badge.tsx +78 -50
- package/src/dev/showcase/breadcrumb.tsx +88 -85
- package/src/dev/showcase/button.tsx +72 -96
- package/src/dev/showcase/calendar.tsx +41 -39
- package/src/dev/showcase/card.tsx +170 -148
- package/src/dev/showcase/carousel.tsx +239 -77
- package/src/dev/showcase/chart.tsx +5 -4
- package/src/dev/showcase/checkbox.tsx +206 -140
- package/src/dev/showcase/collapsible.tsx +108 -84
- package/src/dev/showcase/combobox.tsx +272 -199
- package/src/dev/showcase/command.tsx +31 -28
- package/src/dev/showcase/context-menu.tsx +94 -77
- package/src/dev/showcase/dialog.tsx +445 -424
- package/src/dev/showcase/drawer.tsx +142 -135
- package/src/dev/showcase/dropdown-menu.tsx +165 -161
- package/src/dev/showcase/empty.tsx +173 -158
- package/src/dev/showcase/hover-card.tsx +92 -52
- package/src/dev/showcase/input-group.tsx +193 -160
- package/src/dev/showcase/input-otp.tsx +109 -99
- package/src/dev/showcase/input.tsx +78 -42
- package/src/dev/showcase/item.tsx +101 -98
- package/src/dev/showcase/kbd.tsx +78 -62
- package/src/dev/showcase/label.tsx +16 -23
- package/src/dev/showcase/menubar.tsx +274 -251
- package/src/dev/showcase/navigation-menu.tsx +175 -170
- package/src/dev/showcase/overview.tsx +164 -148
- package/src/dev/showcase/pagination.tsx +101 -69
- package/src/dev/showcase/popover.tsx +113 -86
- package/src/dev/showcase/progress.tsx +99 -69
- package/src/dev/showcase/radio-group.tsx +217 -134
- package/src/dev/showcase/resizable.tsx +65 -55
- package/src/dev/showcase/scroll-area.tsx +32 -22
- package/src/dev/showcase/select.tsx +192 -136
- package/src/dev/showcase/separator.tsx +28 -24
- package/src/dev/showcase/sheet.tsx +182 -134
- package/src/dev/showcase/sidebar.tsx +9 -5
- package/src/dev/showcase/skeleton.tsx +54 -59
- package/src/dev/showcase/slider.tsx +158 -129
- package/src/dev/showcase/sonner.tsx +3 -5
- package/src/dev/showcase/spinner.tsx +22 -18
- package/src/dev/showcase/switch.tsx +207 -110
- package/src/dev/showcase/table.tsx +44 -32
- package/src/dev/showcase/tabs.tsx +272 -267
- package/src/dev/showcase/textarea.tsx +162 -116
- package/src/dev/showcase/theme-provider.tsx +596 -534
- package/src/dev/showcase/toast.tsx +37 -38
- package/src/dev/showcase/toggle-group.tsx +87 -39
- package/src/dev/showcase/toggle.tsx +36 -27
- package/src/dev/showcase/tooltip.tsx +154 -119
- package/src/lib/utils.test.ts +1 -0
- package/src/lib/utils.ts +1 -1
- package/src/styles/gladvn.css +1 -1
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
import { useDevContext } from "../../dev/components/dev-context";
|
|
2
|
-
import {
|
|
3
|
-
DocsCode,
|
|
4
|
-
DocsH3,
|
|
5
|
-
DocsP,
|
|
6
|
-
ExampleGrid,
|
|
7
|
-
ExampleSection,
|
|
8
|
-
Showcase,
|
|
9
|
-
ShowcaseDocs,
|
|
10
|
-
} from "../../dev/components/showcase";
|
|
11
|
-
import { type Size } from "../../lib/types";
|
|
12
1
|
import { useState } from "react";
|
|
13
2
|
|
|
14
3
|
import { SliderPreset } from "../../components/macro/slider-preset";
|
|
@@ -26,6 +15,17 @@ import {
|
|
|
26
15
|
SliderThumb,
|
|
27
16
|
SliderTrack,
|
|
28
17
|
} from "../../components/micro/slider";
|
|
18
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
19
|
+
import {
|
|
20
|
+
DocsCode,
|
|
21
|
+
DocsH3,
|
|
22
|
+
DocsP,
|
|
23
|
+
ExampleGrid,
|
|
24
|
+
ExampleSection,
|
|
25
|
+
Showcase,
|
|
26
|
+
ShowcaseDocs,
|
|
27
|
+
} from "../../dev/components/showcase";
|
|
28
|
+
import { type Size } from "../../lib/types";
|
|
29
29
|
|
|
30
30
|
// ──────────────────────────────────────────────────────────
|
|
31
31
|
// SECTION 1: Macro Content
|
|
@@ -40,14 +40,14 @@ function SliderMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
40
40
|
<ExampleSection
|
|
41
41
|
label="Tiêu chuẩn"
|
|
42
42
|
description="Thanh trượt cơ bản có nhãn và mô tả."
|
|
43
|
-
codeString={`<SliderPreset
|
|
43
|
+
codeString={`<SliderPreset
|
|
44
|
+
className="w-full"
|
|
44
45
|
label="Âm lượng"
|
|
45
46
|
description="Điều chỉnh âm lượng hệ thống."
|
|
46
47
|
defaultValue={[50]}
|
|
47
48
|
max={100}
|
|
48
49
|
step={1}
|
|
49
|
-
|
|
50
|
-
`}
|
|
50
|
+
/>`}
|
|
51
51
|
>
|
|
52
52
|
<SliderPreset
|
|
53
53
|
className="w-full"
|
|
@@ -64,15 +64,14 @@ function SliderMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
64
64
|
label="Trạng thái Lỗi (Error)"
|
|
65
65
|
description="Báo lỗi khi giá trị không hợp lệ."
|
|
66
66
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
</div
|
|
75
|
-
`}
|
|
67
|
+
<SliderPreset
|
|
68
|
+
label="Mức âm lượng (Lỗi)"
|
|
69
|
+
defaultValue={[110]}
|
|
70
|
+
max={100}
|
|
71
|
+
step={1}
|
|
72
|
+
errorMessage="Mức âm lượng không được vượt quá 100."
|
|
73
|
+
/>
|
|
74
|
+
</div>`}
|
|
76
75
|
>
|
|
77
76
|
<div className="w-full flex flex-col gap-6">
|
|
78
77
|
<SliderPreset
|
|
@@ -91,9 +90,8 @@ function SliderMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
91
90
|
<ExampleSection
|
|
92
91
|
label="Thanh trượt Khoảng (Range Slider)"
|
|
93
92
|
description="Truyền mảng 2 giá trị vào defaultValue hoặc value để tạo Range Slider."
|
|
94
|
-
codeString={`const [rangeVal, setRangeVal] = useState([20, 80]);
|
|
95
|
-
|
|
96
|
-
return (
|
|
93
|
+
codeString={`const [rangeVal, setRangeVal] = useState([20, 80]); return
|
|
94
|
+
(
|
|
97
95
|
<SliderPreset
|
|
98
96
|
label="Khoảng giá"
|
|
99
97
|
value={rangeVal}
|
|
@@ -102,7 +100,7 @@ return (
|
|
|
102
100
|
step={5}
|
|
103
101
|
description={\`Từ $\${rangeVal[0]} đến $\${rangeVal[1]}\`}
|
|
104
102
|
/>
|
|
105
|
-
);`}
|
|
103
|
+
);`}
|
|
106
104
|
>
|
|
107
105
|
<SliderPreset
|
|
108
106
|
className="w-full"
|
|
@@ -119,14 +117,14 @@ return (
|
|
|
119
117
|
<ExampleSection
|
|
120
118
|
label="Khóa / Bất hoạt (Disabled)"
|
|
121
119
|
description="Người dùng không thể tương tác với thanh trượt."
|
|
122
|
-
codeString={`<SliderPreset
|
|
120
|
+
codeString={`<SliderPreset
|
|
121
|
+
className="w-full"
|
|
123
122
|
label="Độ sáng màn hình"
|
|
124
123
|
description="Độ sáng đang được hệ thống điều khiển tự động (Auto-brightness)."
|
|
125
124
|
defaultValue={[75]}
|
|
126
125
|
max={100}
|
|
127
126
|
disabled
|
|
128
|
-
|
|
129
|
-
`}
|
|
127
|
+
/>`}
|
|
130
128
|
>
|
|
131
129
|
<SliderPreset
|
|
132
130
|
className="w-full"
|
|
@@ -144,16 +142,14 @@ return (
|
|
|
144
142
|
<ExampleSection
|
|
145
143
|
label="Controlled Mode"
|
|
146
144
|
description="Sử dụng biến state của React để điều khiển."
|
|
147
|
-
codeString={`const [val, setVal] = useState([50]);
|
|
148
|
-
|
|
149
|
-
return (
|
|
145
|
+
codeString={`const [val, setVal] = useState([50]); return (
|
|
150
146
|
<SliderPreset
|
|
151
147
|
value={val}
|
|
152
148
|
onValueChange={setVal}
|
|
153
149
|
label="Giá trị có kiểm soát"
|
|
154
150
|
description={\`Giá trị hiện tại là: \${val[0]}\`}
|
|
155
151
|
/>
|
|
156
|
-
);`}
|
|
152
|
+
);`}
|
|
157
153
|
>
|
|
158
154
|
<div className="w-full max-w-sm flex flex-col gap-4">
|
|
159
155
|
<SliderPreset
|
|
@@ -181,19 +177,18 @@ function SliderMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
181
177
|
label="Cơ bản (Primitive)"
|
|
182
178
|
description="Slider đơn giản không có Field hay Label bọc ngoài."
|
|
183
179
|
codeString={`<CompositionalSlider
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
>
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
</CompositionalSlider
|
|
196
|
-
`}
|
|
180
|
+
defaultValue={[40]}
|
|
181
|
+
max={100}
|
|
182
|
+
step={1}
|
|
183
|
+
className="w-full"
|
|
184
|
+
>
|
|
185
|
+
<SliderControl>
|
|
186
|
+
<SliderTrack>
|
|
187
|
+
<SliderIndicator />
|
|
188
|
+
</SliderTrack>
|
|
189
|
+
<SliderThumb />
|
|
190
|
+
</SliderControl>
|
|
191
|
+
</CompositionalSlider>`}
|
|
197
192
|
>
|
|
198
193
|
<CompositionalSlider
|
|
199
194
|
size={globalSize}
|
|
@@ -215,21 +210,20 @@ function SliderMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
215
210
|
label="Nhiều Thumb (Multi-thumb)"
|
|
216
211
|
description="Chỉ cần render nhiều SliderThumb, hệ thống sẽ tự chia."
|
|
217
212
|
codeString={`<CompositionalSlider
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
>
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
</CompositionalSlider
|
|
232
|
-
`}
|
|
213
|
+
defaultValue={[20, 50, 80]}
|
|
214
|
+
max={100}
|
|
215
|
+
step={1}
|
|
216
|
+
className="w-full"
|
|
217
|
+
>
|
|
218
|
+
<SliderControl>
|
|
219
|
+
<SliderTrack>
|
|
220
|
+
<SliderIndicator />
|
|
221
|
+
</SliderTrack>
|
|
222
|
+
<SliderThumb />
|
|
223
|
+
<SliderThumb />
|
|
224
|
+
<SliderThumb />
|
|
225
|
+
</SliderControl>
|
|
226
|
+
</CompositionalSlider>`}
|
|
233
227
|
>
|
|
234
228
|
<CompositionalSlider
|
|
235
229
|
size={globalSize}
|
|
@@ -255,26 +249,25 @@ function SliderMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
255
249
|
label="Ghép nối Field thủ công"
|
|
256
250
|
description="Lắp ráp với Field để có nhãn và mô tả."
|
|
257
251
|
codeString={`<Field className="w-full">
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
</Field
|
|
277
|
-
`}
|
|
252
|
+
<FieldLabel>Mật độ hiển thị</FieldLabel>
|
|
253
|
+
<FieldContent>
|
|
254
|
+
<CompositionalSlider
|
|
255
|
+
defaultValue={[50]}
|
|
256
|
+
max={100}
|
|
257
|
+
step={1}
|
|
258
|
+
>
|
|
259
|
+
<SliderControl>
|
|
260
|
+
<SliderTrack>
|
|
261
|
+
<SliderIndicator />
|
|
262
|
+
</SliderTrack>
|
|
263
|
+
<SliderThumb />
|
|
264
|
+
</SliderControl>
|
|
265
|
+
</CompositionalSlider>
|
|
266
|
+
</FieldContent>
|
|
267
|
+
<FieldDescription>
|
|
268
|
+
Điều chỉnh khoảng cách giữa các phần tử.
|
|
269
|
+
</FieldDescription>
|
|
270
|
+
</Field>`}
|
|
278
271
|
>
|
|
279
272
|
<Field size={globalSize} className="w-full">
|
|
280
273
|
<FieldLabel>Mật độ hiển thị</FieldLabel>
|
|
@@ -303,25 +296,24 @@ function SliderMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
303
296
|
label="Trạng thái Lỗi thủ công"
|
|
304
297
|
description="Tự gắn aria-invalid vào Slider và dùng FieldError."
|
|
305
298
|
codeString={`<Field className="w-full gap-2" data-invalid={true}>
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
</Field
|
|
324
|
-
`}
|
|
299
|
+
<FieldLabel>Ngân sách tối đa</FieldLabel>
|
|
300
|
+
<FieldContent>
|
|
301
|
+
<CompositionalSlider
|
|
302
|
+
defaultValue={[120]}
|
|
303
|
+
max={100}
|
|
304
|
+
step={1}
|
|
305
|
+
aria-invalid={true}
|
|
306
|
+
>
|
|
307
|
+
<SliderControl>
|
|
308
|
+
<SliderTrack>
|
|
309
|
+
<SliderIndicator />
|
|
310
|
+
</SliderTrack>
|
|
311
|
+
<SliderThumb />
|
|
312
|
+
</SliderControl>
|
|
313
|
+
</CompositionalSlider>
|
|
314
|
+
</FieldContent>
|
|
315
|
+
<FieldError>Ngân sách của bạn chỉ còn $100.</FieldError>
|
|
316
|
+
</Field>`}
|
|
325
317
|
>
|
|
326
318
|
<Field size={globalSize} className="w-full gap-2" data-invalid={true}>
|
|
327
319
|
<FieldLabel>Ngân sách tối đa</FieldLabel>
|
|
@@ -351,39 +343,76 @@ function SliderMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
351
343
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
352
344
|
fullWidth
|
|
353
345
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
346
|
+
{/* Story 1: Macro wins */}
|
|
347
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
348
|
+
<div className="flex items-start gap-3">
|
|
349
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
350
|
+
<svg
|
|
351
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
352
|
+
className="size-4"
|
|
353
|
+
viewBox="0 0 24 24"
|
|
354
|
+
fill="none"
|
|
355
|
+
stroke="currentColor"
|
|
356
|
+
strokeWidth="2"
|
|
357
|
+
strokeLinecap="round"
|
|
358
|
+
strokeLinejoin="round"
|
|
359
|
+
aria-hidden="true"
|
|
360
|
+
>
|
|
361
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
362
|
+
</svg>
|
|
363
|
+
</span>
|
|
364
|
+
<div>
|
|
365
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
366
|
+
Story 1 · Dùng Macro
|
|
367
|
+
</p>
|
|
368
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
369
|
+
Bộ lọc sản phẩm
|
|
370
|
+
</h3>
|
|
371
|
+
</div>
|
|
363
372
|
</div>
|
|
373
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
374
|
+
Bạn cần làm bộ lọc "Khoảng giá" ở cột Sidebar cho
|
|
375
|
+
trang Ecommerce. <DocsCode>SliderPreset</DocsCode>{" "}
|
|
376
|
+
sẽ giúp bạn tiết kiệm hàng tá dòng code bọc Field
|
|
377
|
+
loằng ngoằng.
|
|
378
|
+
</p>
|
|
364
379
|
</div>
|
|
365
|
-
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
366
|
-
Bạn cần làm bộ lọc "Khoảng giá" ở cột Sidebar cho trang Ecommerce. <DocsCode>SliderPreset</DocsCode> sẽ giúp bạn tiết kiệm hàng tá dòng code bọc Field loằng ngoằng.
|
|
367
|
-
</p>
|
|
368
|
-
</div>
|
|
369
380
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
381
|
+
{/* Story 2: Micro wins */}
|
|
382
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
383
|
+
<div className="flex items-start gap-3">
|
|
384
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
385
|
+
<svg
|
|
386
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
387
|
+
className="size-4"
|
|
388
|
+
viewBox="0 0 24 24"
|
|
389
|
+
fill="none"
|
|
390
|
+
stroke="currentColor"
|
|
391
|
+
strokeWidth="2"
|
|
392
|
+
strokeLinecap="round"
|
|
393
|
+
strokeLinejoin="round"
|
|
394
|
+
aria-hidden="true"
|
|
395
|
+
>
|
|
396
|
+
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" />
|
|
397
|
+
</svg>
|
|
398
|
+
</span>
|
|
399
|
+
<div>
|
|
400
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
401
|
+
Story 2 · Dùng Micro
|
|
402
|
+
</p>
|
|
403
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
404
|
+
Thanh thời lượng Video (Video Player)
|
|
405
|
+
</h3>
|
|
406
|
+
</div>
|
|
379
407
|
</div>
|
|
408
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
409
|
+
Bạn đang làm một trình phát Video giống Youtube.
|
|
410
|
+
Thanh Timeline chạy dưới đáy không hề có Label hay
|
|
411
|
+
Description. Ở đây bạn BẮT BUỘC dùng Micro để dựng
|
|
412
|
+
độc lập.
|
|
413
|
+
</p>
|
|
380
414
|
</div>
|
|
381
|
-
|
|
382
|
-
Bạn đang làm một trình phát Video giống Youtube. Thanh Timeline chạy dưới đáy không hề có Label hay Description. Ở đây bạn BẮT BUỘC dùng Micro để dựng độc lập.
|
|
383
|
-
</p>
|
|
384
|
-
</div>
|
|
385
|
-
</div>
|
|
386
|
-
`}
|
|
415
|
+
</div>`}
|
|
387
416
|
>
|
|
388
417
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
389
418
|
{/* Story 1: Macro wins */}
|
|
@@ -248,11 +248,9 @@ toast.dismiss(toastId);`}
|
|
|
248
248
|
label="Position"
|
|
249
249
|
description="Toaster nhận prop position để xác định vị trí hiển thị — cấu hình một lần ở root layout. Nhấn vào từng vùng để xem toast xuất hiện ở đâu."
|
|
250
250
|
codeString={`// Trong root layout (app/layout.tsx):
|
|
251
|
-
<Toaster position="bottom-right" /> // mặc định
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// "top-left" | "top-center" | "top-right"
|
|
255
|
-
// "bottom-left" | "bottom-center" | "bottom-right"`}
|
|
251
|
+
<Toaster position="bottom-right" /> // mặc định // Các vị
|
|
252
|
+
trí hỗ trợ: // "top-left" | "top-center" | "top-right" //
|
|
253
|
+
"bottom-left" | "bottom-center" | "bottom-right"`}
|
|
256
254
|
>
|
|
257
255
|
{/* Visual 3×2 position grid */}
|
|
258
256
|
<div className="w-full max-w-sm">
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
import { useDevContext } from "../../dev/components/dev-context";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
|
|
4
1
|
import { Spinner } from "../../components/micro/spinner";
|
|
5
|
-
import {
|
|
2
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
6
3
|
import {
|
|
7
4
|
DocsCode,
|
|
8
5
|
DocsH3,
|
|
@@ -12,6 +9,7 @@ import {
|
|
|
12
9
|
Showcase,
|
|
13
10
|
ShowcaseDocs,
|
|
14
11
|
} from "../../dev/components/showcase";
|
|
12
|
+
import { type Size } from "../../lib/types";
|
|
15
13
|
|
|
16
14
|
// ──────────────────────────────────────────────────────────
|
|
17
15
|
// SECTION 1: Micro Content
|
|
@@ -24,9 +22,9 @@ function SpinnerMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
24
22
|
label="Default"
|
|
25
23
|
description="Spinner mặc định với kích thước được kiểm soát bởi size toggle ở trên."
|
|
26
24
|
codeString={`<Spinner />
|
|
27
|
-
<Spinner size="sm" />
|
|
28
|
-
<Spinner size="md" />
|
|
29
|
-
<Spinner size="lg" />`}
|
|
25
|
+
<Spinner size="sm" />
|
|
26
|
+
<Spinner size="md" />
|
|
27
|
+
<Spinner size="lg" />`}
|
|
30
28
|
>
|
|
31
29
|
<Spinner size={globalSize} />
|
|
32
30
|
</ExampleSection>
|
|
@@ -37,9 +35,9 @@ function SpinnerMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
37
35
|
label="Custom Colors"
|
|
38
36
|
description="Truyền className để override màu sắc — Spinner kế thừa currentColor của SVG."
|
|
39
37
|
codeString={`<Spinner className="text-primary" />
|
|
40
|
-
<Spinner className="text-destructive" />
|
|
41
|
-
<Spinner className="text-warning" />
|
|
42
|
-
<Spinner className="text-success" />`}
|
|
38
|
+
<Spinner className="text-destructive" />
|
|
39
|
+
<Spinner className="text-warning" />
|
|
40
|
+
<Spinner className="text-success" />`}
|
|
43
41
|
>
|
|
44
42
|
<div className="flex items-center gap-4">
|
|
45
43
|
<Spinner size={globalSize} className="text-primary" />
|
|
@@ -52,10 +50,16 @@ function SpinnerMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
52
50
|
<ExampleSection
|
|
53
51
|
label="In Context — Button Loading"
|
|
54
52
|
description="Kết hợp Spinner trong Button để mô phỏng trạng thái loading."
|
|
55
|
-
codeString={`<button
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
codeString={`<button
|
|
54
|
+
disabled
|
|
55
|
+
className="flex items-center gap-2 px-4 py-2 rounded-md bg-primary text-primary-foreground text-sm opacity-70"
|
|
56
|
+
>
|
|
57
|
+
<Spinner
|
|
58
|
+
size="sm"
|
|
59
|
+
className="text-primary-foreground"
|
|
60
|
+
/>
|
|
61
|
+
Đang lưu...
|
|
62
|
+
</button>`}
|
|
59
63
|
>
|
|
60
64
|
<button
|
|
61
65
|
disabled
|
|
@@ -72,10 +76,10 @@ function SpinnerMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
72
76
|
label="Overlay Loading"
|
|
73
77
|
description="Đặt Spinner trên một overlay để chặn tương tác trong khi tải nội dung."
|
|
74
78
|
codeString={`<div className="relative rounded-xl border border-border bg-card h-32">
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
</div>`}
|
|
79
|
+
<div className="absolute inset-0 flex items-center justify-center bg-background/60 rounded-xl">
|
|
80
|
+
<Spinner size="lg" className="text-primary" />
|
|
81
|
+
</div>
|
|
82
|
+
</div>`}
|
|
79
83
|
>
|
|
80
84
|
<div className="relative rounded-xl border border-border bg-card h-32 w-full max-w-sm">
|
|
81
85
|
<div className="absolute inset-0 flex items-center justify-center bg-background/60 rounded-xl">
|