gladvn 0.2.17 → 0.2.19
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.map +1 -1
- 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 +41 -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 +2 -1
- 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 +0 -1
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
|
|
2
3
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
3
4
|
import { CheckIcon, MinusIcon } from "lucide-react";
|
|
4
|
-
import { useState } from "react";
|
|
5
5
|
import { Controller, useForm } from "react-hook-form";
|
|
6
6
|
import * as z from "zod";
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
DocsP,
|
|
10
|
-
ExampleGrid,
|
|
11
|
-
ExampleSection,
|
|
12
|
-
Showcase,
|
|
13
|
-
ShowcaseDocs,
|
|
14
|
-
} from "../../dev/components/showcase";
|
|
15
|
-
import { type Size } from "../../lib/types";
|
|
16
|
-
|
|
17
8
|
import { CheckboxPreset } from "../../components/macro/checkbox-preset";
|
|
18
9
|
import { Button } from "../../components/micro/button";
|
|
19
10
|
import { Checkbox, CheckboxIndicator } from "../../components/micro/checkbox";
|
|
@@ -24,6 +15,15 @@ import {
|
|
|
24
15
|
FieldLabel,
|
|
25
16
|
} from "../../components/micro/field";
|
|
26
17
|
import { Label } from "../../components/micro/label";
|
|
18
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
19
|
+
import {
|
|
20
|
+
DocsP,
|
|
21
|
+
ExampleGrid,
|
|
22
|
+
ExampleSection,
|
|
23
|
+
Showcase,
|
|
24
|
+
ShowcaseDocs,
|
|
25
|
+
} from "../../dev/components/showcase";
|
|
26
|
+
import { type Size } from "../../lib/types";
|
|
27
27
|
|
|
28
28
|
// ──────────────────────────────────────────────────────────
|
|
29
29
|
// RHF Form Demo (Macro)
|
|
@@ -111,11 +111,10 @@ function CheckboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
111
111
|
label="Tiêu chuẩn"
|
|
112
112
|
description="Checkbox cơ bản kèm nhãn và mô tả."
|
|
113
113
|
codeString={`<CheckboxPreset
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
`}
|
|
114
|
+
label="Đồng ý với điều khoản"
|
|
115
|
+
description="Bạn phải đồng ý với các điều khoản và điều kiện sử dụng."
|
|
116
|
+
className="w-full"
|
|
117
|
+
/>`}
|
|
119
118
|
>
|
|
120
119
|
<CheckboxPreset
|
|
121
120
|
size={globalSize}
|
|
@@ -129,12 +128,11 @@ function CheckboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
129
128
|
label="Trạng thái Lỗi (Error)"
|
|
130
129
|
description="Báo lỗi khi chưa check vào ô (thường dùng trong form)."
|
|
131
130
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
</div
|
|
137
|
-
`}
|
|
131
|
+
<CheckboxPreset
|
|
132
|
+
label="Xác nhận đủ 18 tuổi"
|
|
133
|
+
errorMessage="Bạn phải xác nhận đủ tuổi để tiếp tục."
|
|
134
|
+
/>
|
|
135
|
+
</div>`}
|
|
138
136
|
>
|
|
139
137
|
<div className="w-full flex flex-col gap-6">
|
|
140
138
|
<CheckboxPreset
|
|
@@ -151,19 +149,18 @@ function CheckboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
151
149
|
label="Trạng thái Khóa (Disabled)"
|
|
152
150
|
description="Checkbox bị vô hiệu hóa, không thể click."
|
|
153
151
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
</div
|
|
166
|
-
`}
|
|
152
|
+
<CheckboxPreset
|
|
153
|
+
label="Đăng ký nhận bản tin"
|
|
154
|
+
description="Tính năng này đang được bảo trì."
|
|
155
|
+
disabled
|
|
156
|
+
/>
|
|
157
|
+
<CheckboxPreset
|
|
158
|
+
label="Cho phép thu thập log"
|
|
159
|
+
description="Hệ thống mặc định thu thập log bảo mật."
|
|
160
|
+
defaultChecked
|
|
161
|
+
disabled
|
|
162
|
+
/>
|
|
163
|
+
</div>`}
|
|
167
164
|
>
|
|
168
165
|
<div className="w-full flex flex-col gap-6">
|
|
169
166
|
<CheckboxPreset
|
|
@@ -186,18 +183,17 @@ function CheckboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
186
183
|
label="React Node Label (Custom Content)"
|
|
187
184
|
description="Label có thể chứa các component React phức tạp như Badge."
|
|
188
185
|
codeString={`<CheckboxPreset
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
186
|
+
label={
|
|
187
|
+
<span className="flex items-center gap-2">
|
|
188
|
+
Tham gia chương trình BETA{" "}
|
|
189
|
+
<span className="rounded bg-primary/20 px-1.5 py-0.5 text-[10px] font-semibold text-primary">
|
|
190
|
+
NEW
|
|
191
|
+
</span>
|
|
194
192
|
</span>
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
/>
|
|
200
|
-
`}
|
|
193
|
+
}
|
|
194
|
+
description="Được trải nghiệm sớm các tính năng mới trước khi phát hành chính thức. Có thể xảy ra lỗi."
|
|
195
|
+
className="w-full"
|
|
196
|
+
/>`}
|
|
201
197
|
>
|
|
202
198
|
<CheckboxPreset
|
|
203
199
|
size={globalSize}
|
|
@@ -219,16 +215,14 @@ function CheckboxMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
219
215
|
<ExampleSection
|
|
220
216
|
label="React State (Controlled Mode)"
|
|
221
217
|
description="Sử dụng biến state của React để điều khiển."
|
|
222
|
-
codeString={`const [checked, setChecked] = useState(false);
|
|
223
|
-
|
|
224
|
-
return (
|
|
218
|
+
codeString={`const [checked, setChecked] = useState(false); return (
|
|
225
219
|
<CheckboxPreset
|
|
226
220
|
checked={checked}
|
|
227
221
|
onCheckedChange={(c) => setChecked(!!c)}
|
|
228
222
|
label="Checkbox có kiểm soát"
|
|
229
223
|
description="React quản lý trạng thái của checkbox này."
|
|
230
224
|
/>
|
|
231
|
-
);`}
|
|
225
|
+
);`}
|
|
232
226
|
>
|
|
233
227
|
<div className="w-full flex flex-col gap-4">
|
|
234
228
|
<CheckboxPreset
|
|
@@ -272,15 +266,18 @@ function CheckboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
272
266
|
label="Cơ bản (Primitive)"
|
|
273
267
|
description="Kết nối thủ công Checkbox với thẻ Label html."
|
|
274
268
|
codeString={`<div className="flex items-center gap-3">
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
269
|
+
<Checkbox id="cb-micro-default">
|
|
270
|
+
<CheckboxIndicator>
|
|
271
|
+
<CheckIcon />
|
|
272
|
+
</CheckboxIndicator>
|
|
273
|
+
</Checkbox>
|
|
274
|
+
<Label
|
|
275
|
+
htmlFor="cb-micro-default"
|
|
276
|
+
className="font-normal cursor-pointer"
|
|
277
|
+
>
|
|
278
|
+
Đồng ý với điều khoản
|
|
279
|
+
</Label>
|
|
280
|
+
</div>`}
|
|
284
281
|
>
|
|
285
282
|
<div className="flex items-center gap-3">
|
|
286
283
|
<Checkbox id="cb-micro-default" size={globalSize}>
|
|
@@ -301,15 +298,18 @@ function CheckboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
301
298
|
label="Icon Tuỳ Biến (Custom Icon)"
|
|
302
299
|
description="Vì dùng Composition, bạn có thể truyền bất kỳ icon nào (VD: MinusIcon) vào Indicator."
|
|
303
300
|
codeString={`<div className="flex items-center gap-3">
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
301
|
+
<Checkbox id="cb-custom-icon">
|
|
302
|
+
<CheckboxIndicator>
|
|
303
|
+
<MinusIcon />
|
|
304
|
+
</CheckboxIndicator>
|
|
305
|
+
</Checkbox>
|
|
306
|
+
<Label
|
|
307
|
+
htmlFor="cb-custom-icon"
|
|
308
|
+
className="font-normal cursor-pointer"
|
|
309
|
+
>
|
|
310
|
+
Trạng thái vô định (Indeterminate)
|
|
311
|
+
</Label>
|
|
312
|
+
</div>`}
|
|
313
313
|
>
|
|
314
314
|
<div className="flex items-center gap-3">
|
|
315
315
|
<Checkbox id="cb-custom-icon" size={globalSize}>
|
|
@@ -332,23 +332,27 @@ function CheckboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
332
332
|
label="Ghép nối với Field"
|
|
333
333
|
description="Lắp ráp thủ công các thành phần Field khi cần layout phức tạp."
|
|
334
334
|
codeString={`<Field className="flex items-start gap-3">
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
</
|
|
351
|
-
|
|
335
|
+
{/* 1 khoảng trắng vô hình để căn chỉnh cho Label và Checkbox thẳng hàng với nhau theo dòng chữ đầu tiên */}
|
|
336
|
+
<div className="flex items-center text-sm leading-snug group-data-[size=sm]/field:text-xs">
|
|
337
|
+
​
|
|
338
|
+
<Checkbox id="cb-field-micro">
|
|
339
|
+
<CheckboxIndicator>
|
|
340
|
+
<CheckIcon />
|
|
341
|
+
</CheckboxIndicator>
|
|
342
|
+
</Checkbox>
|
|
343
|
+
</div>
|
|
344
|
+
<div className="grid gap-1.5 leading-none">
|
|
345
|
+
<FieldLabel
|
|
346
|
+
htmlFor="cb-field-micro"
|
|
347
|
+
className="font-medium cursor-pointer"
|
|
348
|
+
>
|
|
349
|
+
Lưu mật khẩu
|
|
350
|
+
</FieldLabel>
|
|
351
|
+
<FieldDescription>
|
|
352
|
+
Tự động đăng nhập vào lần sau.
|
|
353
|
+
</FieldDescription>
|
|
354
|
+
</div>
|
|
355
|
+
</Field>`}
|
|
352
356
|
>
|
|
353
357
|
<Field className="flex items-start gap-3" data-size={globalSize}>
|
|
354
358
|
{/* 1 khoảng trắng vô hình để căn chỉnh cho Label và Checkbox thẳng hàng với nhau theo dòng chữ đầu tiên */}
|
|
@@ -377,19 +381,28 @@ function CheckboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
377
381
|
<ExampleSection
|
|
378
382
|
label="Trạng thái Lỗi thủ công"
|
|
379
383
|
description="Tự gắn aria-invalid vào Checkbox và dùng FieldError."
|
|
380
|
-
codeString={`<Field
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
</
|
|
392
|
-
|
|
384
|
+
codeString={`<Field
|
|
385
|
+
className="flex flex-row items-start gap-3"
|
|
386
|
+
data-invalid={true}
|
|
387
|
+
>
|
|
388
|
+
<div className="flex items-center text-sm leading-snug group-data-[size=sm]/field:text-xs">
|
|
389
|
+
​
|
|
390
|
+
<Checkbox id="cb-err-micro" aria-invalid={true}>
|
|
391
|
+
<CheckboxIndicator>
|
|
392
|
+
<CheckIcon />
|
|
393
|
+
</CheckboxIndicator>
|
|
394
|
+
</Checkbox>
|
|
395
|
+
</div>
|
|
396
|
+
<div className="grid gap-1.5 leading-none">
|
|
397
|
+
<FieldLabel
|
|
398
|
+
htmlFor="cb-err-micro"
|
|
399
|
+
className="font-medium cursor-pointer"
|
|
400
|
+
>
|
|
401
|
+
Đồng ý quy định
|
|
402
|
+
</FieldLabel>
|
|
403
|
+
<FieldError>Bắt buộc phải chọn ô này.</FieldError>
|
|
404
|
+
</div>
|
|
405
|
+
</Field>`}
|
|
393
406
|
>
|
|
394
407
|
<Field
|
|
395
408
|
className="flex flex-row items-start gap-3"
|
|
@@ -422,55 +435,108 @@ function CheckboxMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
422
435
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
423
436
|
fullWidth
|
|
424
437
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
438
|
+
{/* Story 1: Macro wins */}
|
|
439
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
440
|
+
<div className="flex items-start gap-3">
|
|
441
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
442
|
+
<svg
|
|
443
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
444
|
+
className="size-4"
|
|
445
|
+
viewBox="0 0 24 24"
|
|
446
|
+
fill="none"
|
|
447
|
+
stroke="currentColor"
|
|
448
|
+
strokeWidth="2"
|
|
449
|
+
strokeLinecap="round"
|
|
450
|
+
strokeLinejoin="round"
|
|
451
|
+
aria-hidden="true"
|
|
452
|
+
>
|
|
453
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
454
|
+
</svg>
|
|
455
|
+
</span>
|
|
456
|
+
<div>
|
|
457
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
458
|
+
Story 1 · Dùng Macro
|
|
459
|
+
</p>
|
|
460
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
461
|
+
Checkbox trong trang Cài đặt
|
|
462
|
+
</h3>
|
|
463
|
+
</div>
|
|
434
464
|
</div>
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
<div>
|
|
452
|
-
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 2 · Dùng Micro</p>
|
|
453
|
-
<h3 className="mt-0.5 text-sm font-semibold text-foreground">Table Row Selection</h3>
|
|
465
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
466
|
+
Form cài đặt có rất nhiều tuỳ chọn dạng "Bật / Tắt"
|
|
467
|
+
với mô tả dài. Code sẽ rất sạch và ngắn.
|
|
468
|
+
</p>
|
|
469
|
+
<div className="rounded-lg bg-muted/50 p-3 flex flex-col gap-4">
|
|
470
|
+
<CheckboxPreset
|
|
471
|
+
size="sm"
|
|
472
|
+
label="Nhận Email Marketing"
|
|
473
|
+
description="Gửi email cho bạn về các chương trình khuyến mãi hàng tuần."
|
|
474
|
+
/>
|
|
475
|
+
<CheckboxPreset
|
|
476
|
+
size="sm"
|
|
477
|
+
label="Thông báo bảo mật"
|
|
478
|
+
description="Cảnh báo khi có thiết bị lạ đăng nhập."
|
|
479
|
+
defaultChecked
|
|
480
|
+
/>
|
|
454
481
|
</div>
|
|
455
482
|
</div>
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
483
|
+
|
|
484
|
+
{/* Story 2: Micro wins */}
|
|
485
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
486
|
+
<div className="flex items-start gap-3">
|
|
487
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
488
|
+
<svg
|
|
489
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
490
|
+
className="size-4"
|
|
491
|
+
viewBox="0 0 24 24"
|
|
492
|
+
fill="none"
|
|
493
|
+
stroke="currentColor"
|
|
494
|
+
strokeWidth="2"
|
|
495
|
+
strokeLinecap="round"
|
|
496
|
+
strokeLinejoin="round"
|
|
497
|
+
aria-hidden="true"
|
|
498
|
+
>
|
|
499
|
+
<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" />
|
|
500
|
+
</svg>
|
|
501
|
+
</span>
|
|
502
|
+
<div>
|
|
503
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
504
|
+
Story 2 · Dùng Micro
|
|
505
|
+
</p>
|
|
506
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
507
|
+
Table Row Selection
|
|
508
|
+
</h3>
|
|
464
509
|
</div>
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
510
|
+
</div>
|
|
511
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
512
|
+
Bạn cần ô Checkbox ở đầu mỗi dòng trong bảng để chọn
|
|
513
|
+
nhiều hàng. Ở đây Checkbox đứng độc lập, hoàn toàn
|
|
514
|
+
không cần Label hay Description đi kèm.
|
|
515
|
+
</p>
|
|
516
|
+
<div className="rounded-lg bg-muted/50 p-3">
|
|
517
|
+
<div className="border border-border rounded-md divide-y overflow-hidden">
|
|
518
|
+
<div className="flex items-center gap-3 p-2 bg-muted">
|
|
519
|
+
<Checkbox size="sm">
|
|
520
|
+
<CheckboxIndicator>
|
|
521
|
+
<MinusIcon />
|
|
522
|
+
</CheckboxIndicator>
|
|
523
|
+
</Checkbox>
|
|
524
|
+
<span className="text-xs font-semibold">
|
|
525
|
+
Tên nhân viên
|
|
526
|
+
</span>
|
|
527
|
+
</div>
|
|
528
|
+
<div className="flex items-center gap-3 p-2 bg-background hover:bg-muted/50">
|
|
529
|
+
<Checkbox size="sm" defaultChecked>
|
|
530
|
+
<CheckboxIndicator>
|
|
531
|
+
<CheckIcon />
|
|
532
|
+
</CheckboxIndicator>
|
|
533
|
+
</Checkbox>
|
|
534
|
+
<span className="text-xs">John Doe</span>
|
|
535
|
+
</div>
|
|
468
536
|
</div>
|
|
469
537
|
</div>
|
|
470
538
|
</div>
|
|
471
|
-
</div
|
|
472
|
-
</div>
|
|
473
|
-
`}
|
|
539
|
+
</div>`}
|
|
474
540
|
>
|
|
475
541
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
476
542
|
{/* Story 1: Macro wins */}
|