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,16 +1,4 @@
|
|
|
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 { ShieldIcon, WrenchIcon } from "lucide-react";
|
|
13
|
-
import { useState } from "react";
|
|
14
2
|
|
|
15
3
|
import { InputOTPPreset } from "../../components/macro/input-otp-preset";
|
|
16
4
|
import {
|
|
@@ -25,6 +13,17 @@ import {
|
|
|
25
13
|
InputOTPSeparator,
|
|
26
14
|
InputOTPSlot,
|
|
27
15
|
} from "../../components/micro/input-otp";
|
|
16
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
17
|
+
import {
|
|
18
|
+
DocsCode,
|
|
19
|
+
DocsH3,
|
|
20
|
+
DocsP,
|
|
21
|
+
ExampleGrid,
|
|
22
|
+
ExampleSection,
|
|
23
|
+
Showcase,
|
|
24
|
+
ShowcaseDocs,
|
|
25
|
+
} from "../../dev/components/showcase";
|
|
26
|
+
import { type Size } from "../../lib/types";
|
|
28
27
|
|
|
29
28
|
// ──────────────────────────────────────────────────────────
|
|
30
29
|
// SECTION 1: Macro Content
|
|
@@ -37,11 +36,11 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
37
36
|
label="Tiêu chuẩn (2 nhóm)"
|
|
38
37
|
description="Chia mã 6 số thành 2 nhóm (mỗi nhóm 3 số) cách nhau bởi dấu gạch ngang."
|
|
39
38
|
codeString={`<InputOTPPreset
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
/>`}
|
|
39
|
+
groups={[3, 3]}
|
|
40
|
+
size="md"
|
|
41
|
+
label="Mã xác thực"
|
|
42
|
+
description="Vui lòng nhập mã 6 số được gửi tới điện thoại của bạn."
|
|
43
|
+
/>`}
|
|
45
44
|
>
|
|
46
45
|
<InputOTPPreset
|
|
47
46
|
className="w-full"
|
|
@@ -56,11 +55,11 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
56
55
|
label="Trạng thái Lỗi (Error)"
|
|
57
56
|
description="Hiển thị viền đỏ và thông báo lỗi khi nhập sai mã."
|
|
58
57
|
codeString={`<InputOTPPreset
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
/>`}
|
|
58
|
+
groups={[3, 3]}
|
|
59
|
+
size="md"
|
|
60
|
+
label="Mã bảo mật"
|
|
61
|
+
errorMessage="Mã xác nhận không chính xác. Vui lòng thử lại."
|
|
62
|
+
/>`}
|
|
64
63
|
>
|
|
65
64
|
<InputOTPPreset
|
|
66
65
|
className="w-full"
|
|
@@ -77,12 +76,12 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
77
76
|
label="Khóa / Bất hoạt (Disabled)"
|
|
78
77
|
description="Người dùng không thể nhập mã khi ở trạng thái này."
|
|
79
78
|
codeString={`<InputOTPPreset
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
/>`}
|
|
79
|
+
groups={[4]}
|
|
80
|
+
size="md"
|
|
81
|
+
label="Mã khôi phục"
|
|
82
|
+
description="Tài khoản của bạn đang bị khóa tạm thời."
|
|
83
|
+
disabled
|
|
84
|
+
/>`}
|
|
86
85
|
>
|
|
87
86
|
<InputOTPPreset
|
|
88
87
|
className="w-full"
|
|
@@ -98,11 +97,13 @@ function InputOTPMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
98
97
|
label="Tuỳ biến Nhóm & Dấu phân cách"
|
|
99
98
|
description="Dùng mảng groups tuỳ ý và đổi icon phân cách."
|
|
100
99
|
codeString={`<InputOTPPreset
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
groups={[2, 2, 2]}
|
|
101
|
+
separator={
|
|
102
|
+
<span className="text-muted-foreground/50">/</span>
|
|
103
|
+
}
|
|
104
|
+
size="md"
|
|
105
|
+
label="Ngày sinh (DD/MM/YY)"
|
|
106
|
+
/>`}
|
|
106
107
|
>
|
|
107
108
|
<div className="w-full flex flex-col gap-6">
|
|
108
109
|
<InputOTPPreset
|
|
@@ -134,17 +135,17 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
134
135
|
label="Cơ bản (Primitive)"
|
|
135
136
|
description="Mã 6 chữ số liền mạch không có dấu phân cách."
|
|
136
137
|
codeString={`<Field size="md">
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
</Field>`}
|
|
138
|
+
<FieldLabel htmlFor="otp-basic">Mã PIN</FieldLabel>
|
|
139
|
+
<FieldContent>
|
|
140
|
+
<InputOTP id="otp-basic" size="md" maxLength={6}>
|
|
141
|
+
<InputOTPGroup>
|
|
142
|
+
{Array.from({ length: 6 }).map((_, i) => (
|
|
143
|
+
<InputOTPSlot key={i} index={i} />
|
|
144
|
+
))}
|
|
145
|
+
</InputOTPGroup>
|
|
146
|
+
</InputOTP>
|
|
147
|
+
</FieldContent>
|
|
148
|
+
</Field>`}
|
|
148
149
|
>
|
|
149
150
|
<Field className="w-full" size={globalSize}>
|
|
150
151
|
<FieldLabel htmlFor="tf-otp-0">Mã PIN</FieldLabel>
|
|
@@ -167,23 +168,23 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
167
168
|
label="Phân tách thủ công"
|
|
168
169
|
description="Tự chèn InputOTPSeparator vào giữa các nhóm."
|
|
169
170
|
codeString={`<Field size="md">
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
</Field>`}
|
|
171
|
+
<FieldLabel htmlFor="otp-sep">Mã bảo mật</FieldLabel>
|
|
172
|
+
<FieldContent>
|
|
173
|
+
<InputOTP id="otp-sep" size="md" maxLength={6}>
|
|
174
|
+
<InputOTPGroup>
|
|
175
|
+
{Array.from({ length: 3 }).map((_, i) => (
|
|
176
|
+
<InputOTPSlot key={i} index={i} />
|
|
177
|
+
))}
|
|
178
|
+
</InputOTPGroup>
|
|
179
|
+
<InputOTPSeparator />
|
|
180
|
+
<InputOTPGroup>
|
|
181
|
+
{Array.from({ length: 3 }).map((_, i) => (
|
|
182
|
+
<InputOTPSlot key={i + 3} index={i + 3} />
|
|
183
|
+
))}
|
|
184
|
+
</InputOTPGroup>
|
|
185
|
+
</InputOTP>
|
|
186
|
+
</FieldContent>
|
|
187
|
+
</Field>`}
|
|
187
188
|
>
|
|
188
189
|
<Field className="w-full" size={globalSize}>
|
|
189
190
|
<FieldLabel htmlFor="tf-otp-1">Mã bảo mật</FieldLabel>
|
|
@@ -217,18 +218,18 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
217
218
|
label="Trạng thái Lỗi thủ công"
|
|
218
219
|
description="Gắn data-invalid vào Field để thay đổi màu sắc."
|
|
219
220
|
codeString={`<Field size="md" data-invalid={true}>
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
</Field>`}
|
|
221
|
+
<FieldLabel htmlFor="otp-err">Mã xác minh</FieldLabel>
|
|
222
|
+
<FieldContent>
|
|
223
|
+
<InputOTP id="otp-err" size="md" maxLength={4}>
|
|
224
|
+
<InputOTPGroup>
|
|
225
|
+
{Array.from({ length: 4 }).map((_, i) => (
|
|
226
|
+
<InputOTPSlot key={i} index={i} />
|
|
227
|
+
))}
|
|
228
|
+
</InputOTPGroup>
|
|
229
|
+
</InputOTP>
|
|
230
|
+
</FieldContent>
|
|
231
|
+
<FieldError>Mã không hợp lệ.</FieldError>
|
|
232
|
+
</Field>`}
|
|
232
233
|
>
|
|
233
234
|
<Field className="w-full" size={globalSize} data-invalid={true}>
|
|
234
235
|
<FieldLabel htmlFor="tf-otp-err">Mã xác minh</FieldLabel>
|
|
@@ -252,17 +253,22 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
252
253
|
label="Disabled thủ công"
|
|
253
254
|
description="Truyền thuộc tính disabled."
|
|
254
255
|
codeString={`<Field size="md">
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
256
|
+
<FieldLabel htmlFor="otp-disabled">Mã OTP</FieldLabel>
|
|
257
|
+
<FieldContent>
|
|
258
|
+
<InputOTP
|
|
259
|
+
id="otp-disabled"
|
|
260
|
+
size="md"
|
|
261
|
+
maxLength={4}
|
|
262
|
+
disabled
|
|
263
|
+
>
|
|
264
|
+
<InputOTPGroup>
|
|
265
|
+
{Array.from({ length: 4 }).map((_, i) => (
|
|
266
|
+
<InputOTPSlot key={i} index={i} />
|
|
267
|
+
))}
|
|
268
|
+
</InputOTPGroup>
|
|
269
|
+
</InputOTP>
|
|
270
|
+
</FieldContent>
|
|
271
|
+
</Field>`}
|
|
266
272
|
>
|
|
267
273
|
<Field className="w-full" size={globalSize}>
|
|
268
274
|
<FieldLabel htmlFor="tf-otp-d">Mã OTP</FieldLabel>
|
|
@@ -287,22 +293,26 @@ function InputOTPMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
287
293
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
288
294
|
fullWidth
|
|
289
295
|
codeString={`{/* Macro — đơn giản, 1 dòng khai báo */}
|
|
290
|
-
<InputOTPPreset
|
|
296
|
+
<InputOTPPreset
|
|
297
|
+
groups={[3, 3]}
|
|
298
|
+
size="md"
|
|
299
|
+
label="Mã xác thực"
|
|
300
|
+
/>
|
|
291
301
|
|
|
292
|
-
{/* Micro — khi cần custom từng slot */}
|
|
293
|
-
<InputOTP size="md" maxLength={6}>
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
</InputOTP>`}
|
|
302
|
+
{/* Micro — khi cần custom từng slot */}
|
|
303
|
+
<InputOTP size="md" maxLength={6}>
|
|
304
|
+
<InputOTPGroup>
|
|
305
|
+
{Array.from({ length: 3 }).map((_, i) => (
|
|
306
|
+
<InputOTPSlot key={i} index={i} />
|
|
307
|
+
))}
|
|
308
|
+
</InputOTPGroup>
|
|
309
|
+
<InputOTPSeparator />
|
|
310
|
+
<InputOTPGroup>
|
|
311
|
+
{Array.from({ length: 3 }).map((_, i) => (
|
|
312
|
+
<InputOTPSlot key={i + 3} index={i + 3} />
|
|
313
|
+
))}
|
|
314
|
+
</InputOTPGroup>
|
|
315
|
+
</InputOTP>`}
|
|
306
316
|
>
|
|
307
317
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
308
318
|
{/* Story 1: Macro wins */}
|
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
import { useDevContext } from "../../dev/components/dev-context";
|
|
2
|
-
import {
|
|
3
|
-
DocsCode,
|
|
4
|
-
DocsH3,
|
|
5
|
-
DocsLi,
|
|
6
|
-
DocsP,
|
|
7
|
-
DocsUl,
|
|
8
|
-
ExampleGrid,
|
|
9
|
-
ExampleSection,
|
|
10
|
-
Showcase,
|
|
11
|
-
ShowcaseDocs,
|
|
12
|
-
} from "../../dev/components/showcase";
|
|
13
1
|
import { LinkIcon, SearchIcon } from "lucide-react";
|
|
14
|
-
import { useState } from "react";
|
|
15
2
|
|
|
3
|
+
import { InputPreset } from "../../components/macro/input-preset";
|
|
16
4
|
import {
|
|
17
5
|
Field,
|
|
18
6
|
FieldContent,
|
|
@@ -27,10 +15,20 @@ import {
|
|
|
27
15
|
InputGroupInput,
|
|
28
16
|
InputGroupText,
|
|
29
17
|
} from "../../components/micro/input-group";
|
|
18
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
19
|
+
import {
|
|
20
|
+
DocsCode,
|
|
21
|
+
DocsH3,
|
|
22
|
+
DocsLi,
|
|
23
|
+
DocsP,
|
|
24
|
+
DocsUl,
|
|
25
|
+
ExampleGrid,
|
|
26
|
+
ExampleSection,
|
|
27
|
+
Showcase,
|
|
28
|
+
ShowcaseDocs,
|
|
29
|
+
} from "../../dev/components/showcase";
|
|
30
30
|
import { type Size } from "../../lib/types";
|
|
31
31
|
|
|
32
|
-
import { InputPreset } from "../../components/macro/input-preset";
|
|
33
|
-
|
|
34
32
|
// ──────────────────────────────────────────────────────────
|
|
35
33
|
// SECTION 1: Macro Content
|
|
36
34
|
// ──────────────────────────────────────────────────────────
|
|
@@ -359,38 +357,76 @@ function InputMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
359
357
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
360
358
|
fullWidth
|
|
361
359
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
360
|
+
{/* Story 1: Macro wins */}
|
|
361
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
362
|
+
<div className="flex items-start gap-3">
|
|
363
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
364
|
+
<svg
|
|
365
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
366
|
+
className="size-4"
|
|
367
|
+
viewBox="0 0 24 24"
|
|
368
|
+
fill="none"
|
|
369
|
+
stroke="currentColor"
|
|
370
|
+
strokeWidth="2"
|
|
371
|
+
strokeLinecap="round"
|
|
372
|
+
strokeLinejoin="round"
|
|
373
|
+
aria-hidden="true"
|
|
374
|
+
>
|
|
375
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
376
|
+
</svg>
|
|
377
|
+
</span>
|
|
378
|
+
<div>
|
|
379
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
380
|
+
Story 1 · Dùng Macro
|
|
381
|
+
</p>
|
|
382
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
383
|
+
Form nhập liệu tiêu chuẩn
|
|
384
|
+
</h3>
|
|
385
|
+
</div>
|
|
371
386
|
</div>
|
|
387
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
388
|
+
Khi bạn cần một trường nhập liệu đầy đủ nhãn
|
|
389
|
+
(Label), mô tả (Description), báo lỗi (Error) mà
|
|
390
|
+
không muốn phải lắp ráp thủ công bằng{" "}
|
|
391
|
+
<DocsCode>Field</DocsCode>.
|
|
392
|
+
</p>
|
|
372
393
|
</div>
|
|
373
|
-
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
374
|
-
Khi bạn cần một trường nhập liệu đầy đủ nhãn (Label), mô tả (Description), báo lỗi (Error) mà không muốn phải lắp ráp thủ công bằng <DocsCode>Field</DocsCode>.
|
|
375
|
-
</p>
|
|
376
|
-
</div>
|
|
377
394
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
395
|
+
{/* Story 2: Micro wins */}
|
|
396
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
397
|
+
<div className="flex items-start gap-3">
|
|
398
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
399
|
+
<svg
|
|
400
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
401
|
+
className="size-4"
|
|
402
|
+
viewBox="0 0 24 24"
|
|
403
|
+
fill="none"
|
|
404
|
+
stroke="currentColor"
|
|
405
|
+
strokeWidth="2"
|
|
406
|
+
strokeLinecap="round"
|
|
407
|
+
strokeLinejoin="round"
|
|
408
|
+
aria-hidden="true"
|
|
409
|
+
>
|
|
410
|
+
<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" />
|
|
411
|
+
</svg>
|
|
412
|
+
</span>
|
|
413
|
+
<div>
|
|
414
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
415
|
+
Story 2 · Dùng Micro
|
|
416
|
+
</p>
|
|
417
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
418
|
+
Input nằm trong Navbar hoặc Toolbar
|
|
419
|
+
</h3>
|
|
420
|
+
</div>
|
|
387
421
|
</div>
|
|
422
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
423
|
+
Chỉ cần một thẻ <DocsCode>Input</DocsCode> đơn giản
|
|
424
|
+
để tìm kiếm nhanh, không cần nhãn hay mô tả cầu kỳ,
|
|
425
|
+
hoặc khi phải nhúng nó vào một component phức tạp
|
|
426
|
+
khác.
|
|
427
|
+
</p>
|
|
388
428
|
</div>
|
|
389
|
-
|
|
390
|
-
Chỉ cần một thẻ <DocsCode>Input</DocsCode> đơn giản để tìm kiếm nhanh, không cần nhãn hay mô tả cầu kỳ, hoặc khi phải nhúng nó vào một component phức tạp khác.
|
|
391
|
-
</p>
|
|
392
|
-
</div>
|
|
393
|
-
</div>`}
|
|
429
|
+
</div>`}
|
|
394
430
|
>
|
|
395
431
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
396
432
|
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|