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,9 +1,14 @@
|
|
|
1
|
-
import { useDevContext } from "../../dev/components/dev-context";
|
|
2
|
-
import { zodResolver } from "@hookform/resolvers/zod";
|
|
3
1
|
import { useState } from "react";
|
|
2
|
+
|
|
3
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
4
|
import { Controller, useForm } from "react-hook-form";
|
|
5
5
|
import * as z from "zod";
|
|
6
6
|
|
|
7
|
+
import { SwitchPreset } from "../../components/macro/switch-preset";
|
|
8
|
+
import { Button } from "../../components/micro/button";
|
|
9
|
+
import { Field, FieldError, FieldLabel } from "../../components/micro/field";
|
|
10
|
+
import { Switch, SwitchThumb } from "../../components/micro/switch";
|
|
11
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
7
12
|
import {
|
|
8
13
|
DocsCode,
|
|
9
14
|
DocsH3,
|
|
@@ -15,11 +20,6 @@ import {
|
|
|
15
20
|
} from "../../dev/components/showcase";
|
|
16
21
|
import { type Size } from "../../lib/types";
|
|
17
22
|
|
|
18
|
-
import { SwitchPreset } from "../../components/macro/switch-preset";
|
|
19
|
-
import { Button } from "../../components/micro/button";
|
|
20
|
-
import { Field, FieldError, FieldLabel } from "../../components/micro/field";
|
|
21
|
-
import { Switch, SwitchThumb } from "../../components/micro/switch";
|
|
22
|
-
|
|
23
23
|
// ──────────────────────────────────────────────────────────
|
|
24
24
|
// RHF Form Demo (Macro)
|
|
25
25
|
// ──────────────────────────────────────────────────────────
|
|
@@ -100,11 +100,11 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
100
100
|
<ExampleSection
|
|
101
101
|
label="Tiêu chuẩn"
|
|
102
102
|
description="Công tắc cơ bản có nhãn và mô tả."
|
|
103
|
-
codeString={`<SwitchPreset
|
|
103
|
+
codeString={`<SwitchPreset
|
|
104
|
+
className="w-full"
|
|
104
105
|
label="Chế độ máy bay"
|
|
105
106
|
description="Vô hiệu hóa tất cả các kết nối không dây."
|
|
106
|
-
|
|
107
|
-
`}
|
|
107
|
+
/>`}
|
|
108
108
|
>
|
|
109
109
|
<SwitchPreset
|
|
110
110
|
className="w-full"
|
|
@@ -118,12 +118,11 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
118
118
|
label="Trạng thái Lỗi (Error)"
|
|
119
119
|
description="Báo lỗi khi bật/tắt thất bại."
|
|
120
120
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
</div
|
|
126
|
-
`}
|
|
121
|
+
<SwitchPreset
|
|
122
|
+
label="Kết nối mạng (Lỗi)"
|
|
123
|
+
errorMessage="Mất kết nối mạng. Không thể lưu cài đặt."
|
|
124
|
+
/>
|
|
125
|
+
</div>`}
|
|
127
126
|
>
|
|
128
127
|
<div className="w-full flex flex-col gap-6">
|
|
129
128
|
<SwitchPreset
|
|
@@ -140,19 +139,18 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
140
139
|
label="Khóa / Bất hoạt (Disabled)"
|
|
141
140
|
description="Người dùng không thể tương tác với công tắc."
|
|
142
141
|
codeString={`<div className="w-full flex flex-col gap-6">
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
</div
|
|
155
|
-
`}
|
|
142
|
+
<SwitchPreset
|
|
143
|
+
label="Đồng bộ danh bạ"
|
|
144
|
+
description="Yêu cầu cấp quyền truy cập vào danh bạ."
|
|
145
|
+
disabled
|
|
146
|
+
/>
|
|
147
|
+
<SwitchPreset
|
|
148
|
+
label="Dữ liệu di động"
|
|
149
|
+
description="Dữ liệu di động đang bị tắt trên toàn cầu."
|
|
150
|
+
defaultChecked
|
|
151
|
+
disabled
|
|
152
|
+
/>
|
|
153
|
+
</div>`}
|
|
156
154
|
>
|
|
157
155
|
<div className="w-full flex flex-col gap-6">
|
|
158
156
|
<SwitchPreset
|
|
@@ -178,12 +176,13 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
178
176
|
label={
|
|
179
177
|
<span className="flex items-center gap-2">
|
|
180
178
|
Xác thực 2 bước (2FA)
|
|
181
|
-
<span className="rounded bg-success/20 px-1.5 py-0.5 text-[10px] font-semibold text-success">
|
|
179
|
+
<span className="rounded bg-success/20 px-1.5 py-0.5 text-[10px] font-semibold text-success">
|
|
180
|
+
KHUYÊN DÙNG
|
|
181
|
+
</span>
|
|
182
182
|
</span>
|
|
183
183
|
}
|
|
184
184
|
description="Thêm một lớp bảo mật bổ sung cho tài khoản của bạn. Chúng tôi sẽ yêu cầu mã xác nhận mỗi khi bạn đăng nhập từ thiết bị mới."
|
|
185
|
-
|
|
186
|
-
`}
|
|
185
|
+
/>`}
|
|
187
186
|
>
|
|
188
187
|
<SwitchPreset
|
|
189
188
|
size={globalSize}
|
|
@@ -204,15 +203,13 @@ function SwitchMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
204
203
|
<ExampleSection
|
|
205
204
|
label="React State (Controlled Mode)"
|
|
206
205
|
description="Sử dụng biến state của React để điều khiển."
|
|
207
|
-
codeString={`const [checked, setChecked] = useState(false);
|
|
208
|
-
|
|
209
|
-
return (
|
|
206
|
+
codeString={`const [checked, setChecked] = useState(false); return (
|
|
210
207
|
<SwitchPreset
|
|
211
208
|
checked={checked}
|
|
212
209
|
onCheckedChange={(c) => setChecked(!!c)}
|
|
213
210
|
label="Chế độ nhà phát triển"
|
|
214
211
|
/>
|
|
215
|
-
);`}
|
|
212
|
+
);`}
|
|
216
213
|
>
|
|
217
214
|
<div className="w-full flex flex-col gap-4">
|
|
218
215
|
<SwitchPreset
|
|
@@ -254,12 +251,16 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
254
251
|
label="Cơ bản (Primitive)"
|
|
255
252
|
description="Kết nối thủ công Switch và SwitchThumb."
|
|
256
253
|
codeString={`<div className="flex items-center gap-4">
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
254
|
+
<Switch id="sw-micro">
|
|
255
|
+
<SwitchThumb />
|
|
256
|
+
</Switch>
|
|
257
|
+
<label
|
|
258
|
+
htmlFor="sw-micro"
|
|
259
|
+
className="text-sm cursor-pointer"
|
|
260
|
+
>
|
|
261
|
+
Công tắc đơn trần
|
|
262
|
+
</label>
|
|
263
|
+
</div>`}
|
|
263
264
|
>
|
|
264
265
|
<div className="flex items-center gap-4">
|
|
265
266
|
<Switch size={globalSize} id="sw-micro">
|
|
@@ -275,16 +276,35 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
275
276
|
label="Layout Đảo ngược (Reverse)"
|
|
276
277
|
description="Dùng Field với orientation='horizontal' để đẩy Switch sang bên phải."
|
|
277
278
|
codeString={`<div className="w-full space-y-4">
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
279
|
+
<Field
|
|
280
|
+
orientation="horizontal"
|
|
281
|
+
className="justify-between"
|
|
282
|
+
>
|
|
283
|
+
<FieldLabel
|
|
284
|
+
htmlFor="switch-notif"
|
|
285
|
+
className="font-normal cursor-pointer"
|
|
286
|
+
>
|
|
287
|
+
Thông báo đẩy
|
|
288
|
+
</FieldLabel>
|
|
289
|
+
<Switch id="switch-notif" defaultChecked>
|
|
290
|
+
<SwitchThumb />
|
|
291
|
+
</Switch>
|
|
292
|
+
</Field>
|
|
293
|
+
<Field
|
|
294
|
+
orientation="horizontal"
|
|
295
|
+
className="justify-between"
|
|
296
|
+
>
|
|
297
|
+
<FieldLabel
|
|
298
|
+
htmlFor="switch-dark"
|
|
299
|
+
className="font-normal cursor-pointer"
|
|
300
|
+
>
|
|
301
|
+
Chế độ tối (Dark Mode)
|
|
302
|
+
</FieldLabel>
|
|
303
|
+
<Switch id="switch-dark">
|
|
304
|
+
<SwitchThumb />
|
|
305
|
+
</Switch>
|
|
306
|
+
</Field>
|
|
307
|
+
</div>`}
|
|
288
308
|
>
|
|
289
309
|
<div className="w-full space-y-4">
|
|
290
310
|
<Field
|
|
@@ -326,16 +346,35 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
326
346
|
label="Khóa (Disabled)"
|
|
327
347
|
description="Các công tắc đảo ngược nhưng bị vô hiệu hoá."
|
|
328
348
|
codeString={`<div className="w-full space-y-4">
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
349
|
+
<Field
|
|
350
|
+
orientation="horizontal"
|
|
351
|
+
className="justify-between"
|
|
352
|
+
>
|
|
353
|
+
<FieldLabel
|
|
354
|
+
htmlFor="switch-d1"
|
|
355
|
+
className="font-normal text-muted-foreground"
|
|
356
|
+
>
|
|
357
|
+
Bluetooth
|
|
358
|
+
</FieldLabel>
|
|
359
|
+
<Switch id="switch-d1" disabled defaultChecked>
|
|
360
|
+
<SwitchThumb />
|
|
361
|
+
</Switch>
|
|
362
|
+
</Field>
|
|
363
|
+
<Field
|
|
364
|
+
orientation="horizontal"
|
|
365
|
+
className="justify-between"
|
|
366
|
+
>
|
|
367
|
+
<FieldLabel
|
|
368
|
+
htmlFor="switch-d2"
|
|
369
|
+
className="font-normal text-muted-foreground"
|
|
370
|
+
>
|
|
371
|
+
Vị trí (GPS)
|
|
372
|
+
</FieldLabel>
|
|
373
|
+
<Switch id="switch-d2" disabled>
|
|
374
|
+
<SwitchThumb />
|
|
375
|
+
</Switch>
|
|
376
|
+
</Field>
|
|
377
|
+
</div>`}
|
|
339
378
|
>
|
|
340
379
|
<div className="w-full space-y-4">
|
|
341
380
|
<Field
|
|
@@ -374,14 +413,28 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
374
413
|
<ExampleSection
|
|
375
414
|
label="Trạng thái Lỗi thủ công"
|
|
376
415
|
description="Tự gắn aria-invalid vào Switch."
|
|
377
|
-
codeString={`<Field
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
416
|
+
codeString={`<Field
|
|
417
|
+
orientation="horizontal"
|
|
418
|
+
data-invalid={true}
|
|
419
|
+
className="justify-between items-start"
|
|
420
|
+
>
|
|
421
|
+
<div className="grid gap-1.5">
|
|
422
|
+
<FieldLabel
|
|
423
|
+
htmlFor="switch-err"
|
|
424
|
+
className="font-normal cursor-pointer"
|
|
425
|
+
>
|
|
426
|
+
Tự động sao lưu
|
|
427
|
+
</FieldLabel>
|
|
428
|
+
<FieldError>Máy chủ sao lưu đang offline.</FieldError>
|
|
429
|
+
</div>
|
|
430
|
+
<Switch
|
|
431
|
+
id="switch-err"
|
|
432
|
+
aria-invalid={true}
|
|
433
|
+
defaultChecked
|
|
434
|
+
>
|
|
435
|
+
<SwitchThumb />
|
|
436
|
+
</Switch>
|
|
437
|
+
</Field>`}
|
|
385
438
|
>
|
|
386
439
|
<Field
|
|
387
440
|
orientation="horizontal"
|
|
@@ -415,52 +468,96 @@ function SwitchMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
415
468
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
416
469
|
fullWidth
|
|
417
470
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
471
|
+
{/* Story 1: Macro wins */}
|
|
472
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
473
|
+
<div className="flex items-start gap-3">
|
|
474
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
475
|
+
<svg
|
|
476
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
477
|
+
className="size-4"
|
|
478
|
+
viewBox="0 0 24 24"
|
|
479
|
+
fill="none"
|
|
480
|
+
stroke="currentColor"
|
|
481
|
+
strokeWidth="2"
|
|
482
|
+
strokeLinecap="round"
|
|
483
|
+
strokeLinejoin="round"
|
|
484
|
+
aria-hidden="true"
|
|
485
|
+
>
|
|
486
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
487
|
+
</svg>
|
|
488
|
+
</span>
|
|
489
|
+
<div>
|
|
490
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
491
|
+
Story 1 · Dùng Macro
|
|
492
|
+
</p>
|
|
493
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
494
|
+
Form thông thường
|
|
495
|
+
</h3>
|
|
496
|
+
</div>
|
|
427
497
|
</div>
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
439
|
-
<div className="flex items-start gap-3">
|
|
440
|
-
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
441
|
-
<svg xmlns="http://www.w3.org/2000/svg" className="size-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true"><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"/></svg>
|
|
442
|
-
</span>
|
|
443
|
-
<div>
|
|
444
|
-
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">Story 2 · Dùng Micro</p>
|
|
445
|
-
<h3 className="mt-0.5 text-sm font-semibold text-foreground">Menu Cài đặt (iOS Style)</h3>
|
|
498
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
499
|
+
Bạn cần một Switch giống như Checkbox (công tắc ở
|
|
500
|
+
bên trái, chữ bên phải). Dùng Preset cho nhanh gọn.
|
|
501
|
+
</p>
|
|
502
|
+
<div className="rounded-lg bg-muted/50 p-3">
|
|
503
|
+
<SwitchPreset
|
|
504
|
+
size="sm"
|
|
505
|
+
label="Đồng ý điều khoản"
|
|
506
|
+
description="Bật để tiếp tục."
|
|
507
|
+
/>
|
|
446
508
|
</div>
|
|
447
509
|
</div>
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
510
|
+
|
|
511
|
+
{/* Story 2: Micro wins */}
|
|
512
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
513
|
+
<div className="flex items-start gap-3">
|
|
514
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
515
|
+
<svg
|
|
516
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
517
|
+
className="size-4"
|
|
518
|
+
viewBox="0 0 24 24"
|
|
519
|
+
fill="none"
|
|
520
|
+
stroke="currentColor"
|
|
521
|
+
strokeWidth="2"
|
|
522
|
+
strokeLinecap="round"
|
|
523
|
+
strokeLinejoin="round"
|
|
524
|
+
aria-hidden="true"
|
|
525
|
+
>
|
|
526
|
+
<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" />
|
|
527
|
+
</svg>
|
|
528
|
+
</span>
|
|
529
|
+
<div>
|
|
530
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
531
|
+
Story 2 · Dùng Micro
|
|
532
|
+
</p>
|
|
533
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
534
|
+
Menu Cài đặt (iOS Style)
|
|
535
|
+
</h3>
|
|
536
|
+
</div>
|
|
455
537
|
</div>
|
|
456
|
-
<
|
|
457
|
-
|
|
458
|
-
|
|
538
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
539
|
+
Giống như iPhone, chữ nằm bên trái và Công tắc nằm
|
|
540
|
+
tít bên phải của dòng. Macro không hỗ trợ layout này
|
|
541
|
+
nên bạn dùng cấu trúc Field + Micro.
|
|
542
|
+
</p>
|
|
543
|
+
<div className="rounded-lg bg-muted/50 p-3 border border-border divide-y">
|
|
544
|
+
<div className="p-2 flex justify-between items-center">
|
|
545
|
+
<span className="text-sm font-medium">Wi-Fi</span>
|
|
546
|
+
<Switch size="sm" defaultChecked>
|
|
547
|
+
<SwitchThumb />
|
|
548
|
+
</Switch>
|
|
549
|
+
</div>
|
|
550
|
+
<div className="p-2 flex justify-between items-center">
|
|
551
|
+
<span className="text-sm font-medium">
|
|
552
|
+
Bluetooth
|
|
553
|
+
</span>
|
|
554
|
+
<Switch size="sm">
|
|
555
|
+
<SwitchThumb />
|
|
556
|
+
</Switch>
|
|
557
|
+
</div>
|
|
459
558
|
</div>
|
|
460
559
|
</div>
|
|
461
|
-
</div
|
|
462
|
-
</div>
|
|
463
|
-
`}
|
|
560
|
+
</div>`}
|
|
464
561
|
>
|
|
465
562
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
466
563
|
{/* Story 1: Macro wins */}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
|
|
1
3
|
import {
|
|
2
4
|
Table,
|
|
3
5
|
TableBody,
|
|
@@ -15,7 +17,6 @@ import {
|
|
|
15
17
|
Showcase,
|
|
16
18
|
ShowcaseDocs,
|
|
17
19
|
} from "../../dev/components/showcase";
|
|
18
|
-
import { useState } from "react";
|
|
19
20
|
|
|
20
21
|
type SortDirection = "asc" | "desc" | "none";
|
|
21
22
|
|
|
@@ -45,37 +46,48 @@ function TableMicroShowcase() {
|
|
|
45
46
|
label="Default"
|
|
46
47
|
description="Bảng tiêu chuẩn có chú thích."
|
|
47
48
|
codeString={`<Table>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
49
|
+
<TableCaption>
|
|
50
|
+
A list of your recent invoices.
|
|
51
|
+
</TableCaption>
|
|
52
|
+
<TableHeader>
|
|
53
|
+
<TableRow>
|
|
54
|
+
<TableHead className="w-[100px]">Invoice</TableHead>
|
|
55
|
+
<TableHead>Status</TableHead>
|
|
56
|
+
<TableHead>Method</TableHead>
|
|
57
|
+
<TableHead className="text-right">Amount</TableHead>
|
|
58
|
+
</TableRow>
|
|
59
|
+
</TableHeader>
|
|
60
|
+
<TableBody>
|
|
61
|
+
<TableRow>
|
|
62
|
+
<TableCell className="font-medium">
|
|
63
|
+
INV001
|
|
64
|
+
</TableCell>
|
|
65
|
+
<TableCell>Paid</TableCell>
|
|
66
|
+
<TableCell>Credit Card</TableCell>
|
|
67
|
+
<TableCell className="text-right">
|
|
68
|
+
$250.00
|
|
69
|
+
</TableCell>
|
|
70
|
+
</TableRow>
|
|
71
|
+
<TableRow>
|
|
72
|
+
<TableCell className="font-medium">
|
|
73
|
+
INV002
|
|
74
|
+
</TableCell>
|
|
75
|
+
<TableCell>Pending</TableCell>
|
|
76
|
+
<TableCell>PayPal</TableCell>
|
|
77
|
+
<TableCell className="text-right">
|
|
78
|
+
$150.00
|
|
79
|
+
</TableCell>
|
|
80
|
+
</TableRow>
|
|
81
|
+
</TableBody>
|
|
82
|
+
<TableFooter>
|
|
83
|
+
<TableRow>
|
|
84
|
+
<TableCell colSpan={3}>Total</TableCell>
|
|
85
|
+
<TableCell className="text-right">
|
|
86
|
+
$2,500.00
|
|
87
|
+
</TableCell>
|
|
88
|
+
</TableRow>
|
|
89
|
+
</TableFooter>
|
|
90
|
+
</Table>`}
|
|
79
91
|
>
|
|
80
92
|
<Table>
|
|
81
93
|
<TableCaption>A list of your recent invoices.</TableCaption>
|