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,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
|
|
2
3
|
import { TextareaPreset } from "../../components/macro/textarea-preset";
|
|
3
4
|
import {
|
|
4
5
|
Field,
|
|
@@ -13,6 +14,7 @@ import {
|
|
|
13
14
|
InputGroupTextarea,
|
|
14
15
|
} from "../../components/micro/input-group";
|
|
15
16
|
import { Textarea } from "../../components/micro/textarea";
|
|
17
|
+
import { useDevContext } from "../../dev/components/dev-context";
|
|
16
18
|
import {
|
|
17
19
|
DocsCode,
|
|
18
20
|
DocsH3,
|
|
@@ -23,7 +25,6 @@ import {
|
|
|
23
25
|
ShowcaseDocs,
|
|
24
26
|
} from "../../dev/components/showcase";
|
|
25
27
|
import { type Size } from "../../lib/types";
|
|
26
|
-
import { useState } from "react";
|
|
27
28
|
|
|
28
29
|
// ──────────────────────────────────────────────────────────
|
|
29
30
|
// SECTION 1: Macro Content
|
|
@@ -39,12 +40,11 @@ function TextareaMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
39
40
|
label="Tiêu chuẩn"
|
|
40
41
|
description="Trường văn bản nhiều dòng với nhãn và mô tả."
|
|
41
42
|
codeString={`<TextareaPreset
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
`}
|
|
43
|
+
label="Phản hồi (Feedback)"
|
|
44
|
+
description="Đóng góp ý kiến của bạn về sản phẩm."
|
|
45
|
+
placeholder="Viết phản hồi..."
|
|
46
|
+
className="w-full"
|
|
47
|
+
/>`}
|
|
48
48
|
>
|
|
49
49
|
<TextareaPreset
|
|
50
50
|
label="Phản hồi (Feedback)"
|
|
@@ -59,13 +59,12 @@ function TextareaMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
59
59
|
label="Lỗi xác thực (Validation Error)"
|
|
60
60
|
description="Hiển thị thông báo lỗi khi đầu vào không hợp lệ."
|
|
61
61
|
codeString={`<TextareaPreset
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
`}
|
|
62
|
+
label="Khiếu nại"
|
|
63
|
+
placeholder="Mô tả vấn đề..."
|
|
64
|
+
errorMessage="Vui lòng cung cấp ít nhất 20 ký tự để chúng tôi hỗ trợ tốt hơn."
|
|
65
|
+
className="w-full"
|
|
66
|
+
rows={3}
|
|
67
|
+
/>`}
|
|
69
68
|
>
|
|
70
69
|
<TextareaPreset
|
|
71
70
|
label="Khiếu nại"
|
|
@@ -82,18 +81,18 @@ function TextareaMacroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
82
81
|
<ExampleSection
|
|
83
82
|
label="Giới hạn ký tự (Character Count)"
|
|
84
83
|
description="Sử dụng React state và slot description để đếm ngược số ký tự."
|
|
85
|
-
codeString={`const [bio, setBio] = useState("");
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return (
|
|
84
|
+
codeString={`const [bio, setBio] = useState(""); const maxLength = 280;
|
|
85
|
+
return (
|
|
89
86
|
<TextareaPreset
|
|
90
87
|
label="Tiểu sử"
|
|
91
88
|
size="\${globalSize}"
|
|
92
89
|
description={
|
|
93
90
|
<span className="flex justify-between">
|
|
94
91
|
<span>Mô tả ngắn gọn về bản thân bạn.</span>
|
|
95
|
-
<span
|
|
96
|
-
data-invalid={
|
|
92
|
+
<span
|
|
93
|
+
data-invalid={
|
|
94
|
+
bio.length > maxLength ? "" : undefined
|
|
95
|
+
}
|
|
97
96
|
className="data-invalid:text-destructive data-invalid:font-medium"
|
|
98
97
|
>
|
|
99
98
|
{bio.length}/{maxLength}
|
|
@@ -104,10 +103,14 @@ return (
|
|
|
104
103
|
value={bio}
|
|
105
104
|
onChange={(e) => setBio(e.target.value)}
|
|
106
105
|
maxLength={maxLength}
|
|
107
|
-
errorMessage={
|
|
106
|
+
errorMessage={
|
|
107
|
+
bio.length > maxLength
|
|
108
|
+
? \`Vượt quá \${bio.length - maxLength} ký tự.\`
|
|
109
|
+
: undefined
|
|
110
|
+
}
|
|
108
111
|
rows={4}
|
|
109
112
|
/>
|
|
110
|
-
);`}
|
|
113
|
+
);`}
|
|
111
114
|
>
|
|
112
115
|
<TextareaPreset
|
|
113
116
|
label="Tiểu sử"
|
|
@@ -141,14 +144,13 @@ return (
|
|
|
141
144
|
label="Khóa / Bất hoạt (Disabled)"
|
|
142
145
|
description="Trường văn bản không thể tương tác."
|
|
143
146
|
codeString={`<TextareaPreset
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
`}
|
|
147
|
+
label="Ghi chú lưu trữ"
|
|
148
|
+
description="Những ghi chú này ở dạng chỉ đọc."
|
|
149
|
+
defaultValue="Dự án này đã hoàn thành vào năm 2023. Không thể thay đổi nội dung."
|
|
150
|
+
disabled
|
|
151
|
+
className="w-full"
|
|
152
|
+
rows={4}
|
|
153
|
+
/>`}
|
|
152
154
|
>
|
|
153
155
|
<TextareaPreset
|
|
154
156
|
label="Ghi chú lưu trữ"
|
|
@@ -167,16 +169,17 @@ return (
|
|
|
167
169
|
description="Bố cục thực tế trong một form hoàn chỉnh."
|
|
168
170
|
fullWidth
|
|
169
171
|
codeString={`<div className="w-full max-w-lg rounded-xl border border-border bg-card p-5 shadow-sm">
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
172
|
+
<h3 className="mb-4 font-semibold">
|
|
173
|
+
Tạo Ticket Hỗ Trợ
|
|
174
|
+
</h3>
|
|
175
|
+
<TextareaPreset
|
|
176
|
+
label="Mô tả sự cố"
|
|
177
|
+
description="Vui lòng cung cấp chi tiết lỗi, các bước tái hiện và cấu hình môi trường."
|
|
178
|
+
placeholder="Ví dụ: Khi tôi click vào nút Submit, hệ thống báo lỗi 500..."
|
|
179
|
+
className="w-full"
|
|
180
|
+
rows={6}
|
|
181
|
+
/>
|
|
182
|
+
</div>`}
|
|
180
183
|
>
|
|
181
184
|
<div className="w-full max-w-lg rounded-xl border border-border bg-card p-5 shadow-sm">
|
|
182
185
|
<h3 className="mb-4 font-semibold">Tạo Ticket Hỗ Trợ</h3>
|
|
@@ -205,11 +208,10 @@ function TextareaMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
205
208
|
label="Cơ bản (Primitive)"
|
|
206
209
|
description="Khung nhập văn bản nhiều dòng không có nhãn."
|
|
207
210
|
codeString={`<Textarea
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
`}
|
|
211
|
+
rows={4}
|
|
212
|
+
placeholder="Viết một đoạn văn dài ở đây..."
|
|
213
|
+
className="w-full"
|
|
214
|
+
/>`}
|
|
213
215
|
>
|
|
214
216
|
<Textarea
|
|
215
217
|
size={globalSize}
|
|
@@ -243,21 +245,22 @@ function TextareaMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
243
245
|
label="InputGroup + Textarea"
|
|
244
246
|
description="Textarea bên trong InputGroup với Addon. Sử dụng InputGroupTextarea."
|
|
245
247
|
codeString={`<Field className="w-full">
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
</
|
|
260
|
-
|
|
248
|
+
<FieldLabel htmlFor="tf-group-textarea">
|
|
249
|
+
Bình luận
|
|
250
|
+
</FieldLabel>
|
|
251
|
+
<FieldContent>
|
|
252
|
+
<InputGroup className="items-start">
|
|
253
|
+
<InputGroupAddon align="start" className="mt-2">
|
|
254
|
+
<InputGroupText>💬</InputGroupText>
|
|
255
|
+
</InputGroupAddon>
|
|
256
|
+
<InputGroupTextarea
|
|
257
|
+
id="tf-group-textarea"
|
|
258
|
+
rows={3}
|
|
259
|
+
placeholder="Để lại bình luận của bạn..."
|
|
260
|
+
/>
|
|
261
|
+
</InputGroup>
|
|
262
|
+
</FieldContent>
|
|
263
|
+
</Field>`}
|
|
261
264
|
>
|
|
262
265
|
<Field size={globalSize} className="w-full">
|
|
263
266
|
<FieldLabel htmlFor="tf-group-textarea">Bình luận</FieldLabel>
|
|
@@ -280,19 +283,22 @@ function TextareaMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
280
283
|
label="Trạng thái Lỗi thủ công"
|
|
281
284
|
description="Tự gắn aria-invalid vào Textarea và dùng FieldError."
|
|
282
285
|
codeString={`<Field className="w-full">
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
</
|
|
295
|
-
|
|
286
|
+
<FieldLabel htmlFor="tf-invalid">
|
|
287
|
+
Mô tả hệ thống
|
|
288
|
+
</FieldLabel>
|
|
289
|
+
<FieldContent>
|
|
290
|
+
<Textarea
|
|
291
|
+
id="tf-invalid"
|
|
292
|
+
rows={3}
|
|
293
|
+
aria-invalid
|
|
294
|
+
placeholder="Mô tả..."
|
|
295
|
+
defaultValue="Quá ngắn"
|
|
296
|
+
/>
|
|
297
|
+
</FieldContent>
|
|
298
|
+
<FieldError>
|
|
299
|
+
Mô tả không đạt đủ độ dài tối thiểu.
|
|
300
|
+
</FieldError>
|
|
301
|
+
</Field>`}
|
|
296
302
|
>
|
|
297
303
|
<Field size={globalSize} className="w-full">
|
|
298
304
|
<FieldLabel htmlFor="tf-invalid">Mô tả hệ thống</FieldLabel>
|
|
@@ -316,53 +322,93 @@ function TextareaMicroShowcase({ globalSize }: { globalSize: Size }) {
|
|
|
316
322
|
description="So sánh nhanh khi nào dùng Micro và Macro."
|
|
317
323
|
fullWidth
|
|
318
324
|
codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
325
|
+
{/* Story 1: Macro wins */}
|
|
326
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
327
|
+
<div className="flex items-start gap-3">
|
|
328
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
|
|
329
|
+
<svg
|
|
330
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
331
|
+
className="size-4"
|
|
332
|
+
viewBox="0 0 24 24"
|
|
333
|
+
fill="none"
|
|
334
|
+
stroke="currentColor"
|
|
335
|
+
strokeWidth="2"
|
|
336
|
+
strokeLinecap="round"
|
|
337
|
+
strokeLinejoin="round"
|
|
338
|
+
aria-hidden="true"
|
|
339
|
+
>
|
|
340
|
+
<path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" />
|
|
341
|
+
</svg>
|
|
342
|
+
</span>
|
|
343
|
+
<div>
|
|
344
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
345
|
+
Story 1 · Dùng Macro
|
|
346
|
+
</p>
|
|
347
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
348
|
+
Form lấy thông tin thông thường
|
|
349
|
+
</h3>
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
353
|
+
Bạn cần ô nhập có tên trường rõ ràng, có gợi ý nhập
|
|
354
|
+
liệu. Chỉ việc truyền props vào{" "}
|
|
355
|
+
<DocsCode>TextareaPreset</DocsCode> là xong.
|
|
356
|
+
</p>
|
|
357
|
+
<div className="rounded-lg bg-muted/50 p-3">
|
|
358
|
+
<TextareaPreset
|
|
359
|
+
size="sm"
|
|
360
|
+
label="Mục tiêu nghề nghiệp"
|
|
361
|
+
description="Tối đa 500 từ."
|
|
362
|
+
className="w-full"
|
|
363
|
+
/>
|
|
328
364
|
</div>
|
|
329
365
|
</div>
|
|
330
|
-
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
331
|
-
Bạn cần ô nhập có tên trường rõ ràng, có gợi ý nhập liệu. Chỉ việc truyền props vào <DocsCode>TextareaPreset</DocsCode> là xong.
|
|
332
|
-
</p>
|
|
333
|
-
<div className="rounded-lg bg-muted/50 p-3">
|
|
334
|
-
<TextareaPreset
|
|
335
|
-
size="sm"
|
|
336
|
-
label="Mục tiêu nghề nghiệp"
|
|
337
|
-
description="Tối đa 500 từ."
|
|
338
|
-
className="w-full"
|
|
339
|
-
/>
|
|
340
|
-
</div>
|
|
341
|
-
</div>
|
|
342
366
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
367
|
+
{/* Story 2: Micro wins */}
|
|
368
|
+
<div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
|
|
369
|
+
<div className="flex items-start gap-3">
|
|
370
|
+
<span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
|
|
371
|
+
<svg
|
|
372
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
373
|
+
className="size-4"
|
|
374
|
+
viewBox="0 0 24 24"
|
|
375
|
+
fill="none"
|
|
376
|
+
stroke="currentColor"
|
|
377
|
+
strokeWidth="2"
|
|
378
|
+
strokeLinecap="round"
|
|
379
|
+
strokeLinejoin="round"
|
|
380
|
+
aria-hidden="true"
|
|
381
|
+
>
|
|
382
|
+
<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" />
|
|
383
|
+
</svg>
|
|
384
|
+
</span>
|
|
385
|
+
<div>
|
|
386
|
+
<p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
|
|
387
|
+
Story 2 · Dùng Micro
|
|
388
|
+
</p>
|
|
389
|
+
<h3 className="mt-0.5 text-sm font-semibold text-foreground">
|
|
390
|
+
Layout kết hợp Addon đặc thù
|
|
391
|
+
</h3>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
<p className="text-xs text-muted-foreground leading-relaxed">
|
|
395
|
+
Khi bạn cần nối một icon vào ngay bên cạnh khung
|
|
396
|
+
textarea giống như giao diện chat. Macro không hỗ
|
|
397
|
+
trợ layout này cho Textarea.
|
|
398
|
+
</p>
|
|
399
|
+
<div className="rounded-lg bg-muted/50 p-3">
|
|
400
|
+
<InputGroup size="sm" className="items-end w-full">
|
|
401
|
+
<InputGroupTextarea
|
|
402
|
+
rows={2}
|
|
403
|
+
placeholder="Tin nhắn..."
|
|
404
|
+
/>
|
|
405
|
+
<button className="h-full px-3 shrink-0 rounded-r-md border-l border-input bg-muted/50 text-xs font-semibold text-primary transition-colors hover:bg-muted">
|
|
406
|
+
GỬI
|
|
407
|
+
</button>
|
|
408
|
+
</InputGroup>
|
|
352
409
|
</div>
|
|
353
410
|
</div>
|
|
354
|
-
|
|
355
|
-
Khi bạn cần nối một icon vào ngay bên cạnh khung textarea giống như giao diện chat. Macro không hỗ trợ layout này cho Textarea.
|
|
356
|
-
</p>
|
|
357
|
-
<div className="rounded-lg bg-muted/50 p-3">
|
|
358
|
-
<InputGroup size="sm" className="items-end w-full">
|
|
359
|
-
<InputGroupTextarea rows={2} placeholder="Tin nhắn..." />
|
|
360
|
-
<button className="h-full px-3 shrink-0 rounded-r-md border-l border-input bg-muted/50 text-xs font-semibold text-primary transition-colors hover:bg-muted">GỬI</button>
|
|
361
|
-
</InputGroup>
|
|
362
|
-
</div>
|
|
363
|
-
</div>
|
|
364
|
-
</div>
|
|
365
|
-
`}
|
|
411
|
+
</div>`}
|
|
366
412
|
>
|
|
367
413
|
<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
|
|
368
414
|
{/* Story 1: Macro wins */}
|