gladvn 0.2.35 → 0.2.37

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.
Files changed (134) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -1
  3. package/scripts/strip-comments.ts +79 -0
  4. package/src/blocks/auth-form.tsx +34 -30
  5. package/src/blocks/auth-recovery.tsx +9 -13
  6. package/src/blocks/auth-split.tsx +46 -36
  7. package/src/blocks/settings.tsx +84 -117
  8. package/src/components/macro/alert-preset.tsx +3 -1
  9. package/src/components/macro/carousel-preset.tsx +0 -1
  10. package/src/components/macro/checkbox-preset.test.tsx +2 -2
  11. package/src/components/macro/checkbox-preset.tsx +1 -2
  12. package/src/components/macro/command-preset.tsx +1 -1
  13. package/src/components/macro/date-picker.tsx +5 -18
  14. package/src/components/macro/dialog-preset.tsx +5 -3
  15. package/src/components/macro/input-preset.tsx +0 -1
  16. package/src/components/macro/select-preset.tsx +1 -1
  17. package/src/components/macro/switch-preset.test.tsx +1 -1
  18. package/src/components/micro/accordion.test.tsx +6 -12
  19. package/src/components/micro/alert-dialog.tsx +0 -2
  20. package/src/components/micro/alert.test.tsx +5 -8
  21. package/src/components/micro/alert.tsx +0 -2
  22. package/src/components/micro/badge.test.tsx +5 -7
  23. package/src/components/micro/badge.tsx +1 -3
  24. package/src/components/micro/button.test.tsx +19 -26
  25. package/src/components/micro/button.tsx +3 -11
  26. package/src/components/micro/calendar.tsx +12 -13
  27. package/src/components/micro/card.test.tsx +3 -5
  28. package/src/components/micro/carousel.tsx +0 -1
  29. package/src/components/micro/chart.tsx +3 -2
  30. package/src/components/micro/checkbox.test.tsx +9 -18
  31. package/src/components/micro/combobox.tsx +1 -3
  32. package/src/components/micro/command.tsx +23 -11
  33. package/src/components/micro/context-menu.tsx +0 -2
  34. package/src/components/micro/dialog.test.tsx +6 -14
  35. package/src/components/micro/dialog.tsx +0 -2
  36. package/src/components/micro/drawer.tsx +0 -3
  37. package/src/components/micro/dropdown-menu.test.tsx +8 -14
  38. package/src/components/micro/dropdown-menu.tsx +0 -2
  39. package/src/components/micro/field.tsx +3 -3
  40. package/src/components/micro/hover-card.tsx +0 -2
  41. package/src/components/micro/input-group.tsx +9 -42
  42. package/src/components/micro/input.test.tsx +15 -24
  43. package/src/components/micro/navigation-menu.tsx +0 -2
  44. package/src/components/micro/popover.test.tsx +5 -9
  45. package/src/components/micro/progress.tsx +5 -1
  46. package/src/components/micro/select.test.tsx +5 -18
  47. package/src/components/micro/select.tsx +3 -5
  48. package/src/components/micro/separator.tsx +1 -1
  49. package/src/components/micro/sheet.test.tsx +6 -14
  50. package/src/components/micro/sheet.tsx +0 -2
  51. package/src/components/micro/sidebar.tsx +5 -6
  52. package/src/components/micro/sonner.tsx +0 -1
  53. package/src/components/micro/switch.test.tsx +9 -18
  54. package/src/components/micro/switch.tsx +1 -1
  55. package/src/components/micro/tabs.test.tsx +5 -11
  56. package/src/components/micro/theme-provider.tsx +0 -12
  57. package/src/components/micro/toggle-group.tsx +1 -12
  58. package/src/components/micro/tooltip.test.tsx +7 -12
  59. package/src/dev/App.tsx +6 -6
  60. package/src/dev/components/BlockViewer.tsx +15 -4
  61. package/src/dev/components/Container.tsx +20 -0
  62. package/src/dev/components/GladvnLogo.tsx +3 -9
  63. package/src/dev/components/code-highlighter.tsx +5 -3
  64. package/src/dev/components/showcase.tsx +116 -168
  65. package/src/dev/sections/buttons.tsx +4 -9
  66. package/src/dev/sections/display.tsx +68 -72
  67. package/src/dev/sections/feedback.tsx +304 -314
  68. package/src/dev/sections/forms.tsx +10 -14
  69. package/src/dev/sections/interactive.tsx +32 -32
  70. package/src/dev/sections/overview.tsx +2 -10
  71. package/src/dev/showcase/accordion.tsx +512 -554
  72. package/src/dev/showcase/alert-dialog.tsx +525 -565
  73. package/src/dev/showcase/alert.tsx +352 -402
  74. package/src/dev/showcase/aspect-ratio.tsx +167 -193
  75. package/src/dev/showcase/avatar.tsx +231 -269
  76. package/src/dev/showcase/badge.tsx +92 -140
  77. package/src/dev/showcase/breadcrumb.tsx +113 -135
  78. package/src/dev/showcase/button.tsx +140 -173
  79. package/src/dev/showcase/calendar.tsx +187 -237
  80. package/src/dev/showcase/card.tsx +229 -261
  81. package/src/dev/showcase/carousel.tsx +288 -315
  82. package/src/dev/showcase/chart.tsx +44 -50
  83. package/src/dev/showcase/checkbox.tsx +286 -330
  84. package/src/dev/showcase/collapsible.tsx +143 -160
  85. package/src/dev/showcase/combobox.tsx +327 -369
  86. package/src/dev/showcase/command.tsx +106 -120
  87. package/src/dev/showcase/context-menu.tsx +93 -107
  88. package/src/dev/showcase/dialog.tsx +585 -630
  89. package/src/dev/showcase/drawer.tsx +176 -196
  90. package/src/dev/showcase/dropdown-menu.tsx +183 -201
  91. package/src/dev/showcase/empty.tsx +232 -274
  92. package/src/dev/showcase/hover-card.tsx +153 -180
  93. package/src/dev/showcase/input-group.tsx +221 -253
  94. package/src/dev/showcase/input-otp.tsx +204 -250
  95. package/src/dev/showcase/input.tsx +246 -325
  96. package/src/dev/showcase/item.tsx +134 -152
  97. package/src/dev/showcase/kbd.tsx +149 -172
  98. package/src/dev/showcase/label.tsx +50 -68
  99. package/src/dev/showcase/menubar.tsx +194 -213
  100. package/src/dev/showcase/navigation-menu.tsx +119 -133
  101. package/src/dev/showcase/overview-components/ArchitectureSection.tsx +126 -0
  102. package/src/dev/showcase/overview-components/CodeBlock.tsx +50 -0
  103. package/src/dev/showcase/overview-components/ColorPaletteSection.tsx +44 -0
  104. package/src/dev/showcase/overview-components/DashboardPreview.tsx +159 -0
  105. package/src/dev/showcase/overview-components/FeatureGridSection.tsx +535 -0
  106. package/src/dev/showcase/overview-components/FooterCTA.tsx +137 -0
  107. package/src/dev/showcase/overview-components/HeroSection.tsx +65 -0
  108. package/src/dev/showcase/overview-components/PrinciplesSection.tsx +128 -0
  109. package/src/dev/showcase/overview.tsx +21 -1163
  110. package/src/dev/showcase/pagination.tsx +144 -190
  111. package/src/dev/showcase/popover.tsx +181 -196
  112. package/src/dev/showcase/progress.tsx +141 -189
  113. package/src/dev/showcase/radio-group.tsx +272 -332
  114. package/src/dev/showcase/resizable.tsx +119 -141
  115. package/src/dev/showcase/scroll-area.tsx +21 -36
  116. package/src/dev/showcase/select.tsx +262 -322
  117. package/src/dev/showcase/separator.tsx +75 -73
  118. package/src/dev/showcase/sheet.tsx +333 -361
  119. package/src/dev/showcase/sidebar.tsx +53 -59
  120. package/src/dev/showcase/skeleton.tsx +93 -112
  121. package/src/dev/showcase/slider.tsx +244 -296
  122. package/src/dev/showcase/sonner.tsx +251 -258
  123. package/src/dev/showcase/spinner.tsx +46 -67
  124. package/src/dev/showcase/switch.tsx +298 -362
  125. package/src/dev/showcase/table.tsx +76 -80
  126. package/src/dev/showcase/tabs.tsx +302 -355
  127. package/src/dev/showcase/textarea.tsx +240 -293
  128. package/src/dev/showcase/toast.tsx +48 -54
  129. package/src/dev/showcase/toggle-group.tsx +104 -129
  130. package/src/dev/showcase/toggle.tsx +82 -102
  131. package/src/dev/showcase/tooltip.tsx +173 -192
  132. package/src/dev/showcase/why.tsx +6 -12
  133. package/src/hooks/use-mobile.test.ts +3 -2
  134. package/src/lib/utils.test.ts +5 -4
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  DocsP,
13
13
  ExampleGrid,
14
- ExampleSection,
14
+ ShowcaseExample,
15
15
  Showcase,
16
16
  ShowcaseDocs
17
17
  } from "../../dev/components/showcase";
@@ -20,12 +20,9 @@ function CollapsibleMicroShowcase() {
20
20
  const [isOpen, setIsOpen] = React.useState(false);
21
21
 
22
22
  return (
23
- <div className="space-y-10 mt-6">
23
+ <div className="space-y-10">
24
24
  <ExampleGrid>
25
- <ExampleSection
26
- label="Default"
27
- description="Nhấn để mở rộng hoặc thu gọn."
28
- codeString={`<Collapsible className="w-full space-y-2">
25
+ <ShowcaseExample title="Default" description="Nhấn để mở rộng hoặc thu gọn." code={`<Collapsible className="w-full space-y-2">
29
26
  <div className="flex items-center justify-between space-x-4 px-4">
30
27
  <h4 className="text-sm font-semibold">
31
28
  @peduarte starred 3 repositories
@@ -56,42 +53,40 @@ function CollapsibleMicroShowcase() {
56
53
  </div>
57
54
  </div>
58
55
  </CollapsibleContent>
59
- </Collapsible>`}
60
- >
61
- <Collapsible className="w-full space-y-2">
62
- <div className="flex items-center justify-between space-x-4 px-4">
63
- <h4 className="text-sm font-semibold">
64
- @peduarte starred 3 repositories
65
- </h4>
66
- <CollapsibleTrigger
67
- render={
68
- <Button variant="ghost" size="sm" className="w-9 p-0" />
69
- }
70
- >
71
- <ChevronsUpDownIcon className="h-4 w-4" />
72
- <span className="sr-only">Toggle</span>
73
- </CollapsibleTrigger>
74
- </div>
75
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
76
- @radix-ui/primitives
77
- </div>
78
- <CollapsibleContent>
79
- <div className="flex flex-col gap-2">
80
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
81
- @radix-ui/colors
82
- </div>
83
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
84
- @stitches/react
85
- </div>
86
- </div>
87
- </CollapsibleContent>
88
- </Collapsible>
89
- </ExampleSection>
56
+ </Collapsible>`} preview={
57
+ <>
58
+ <Collapsible className="w-full space-y-2">
59
+ <div className="flex items-center justify-between space-x-4 px-4">
60
+ <h4 className="text-sm font-semibold">
61
+ @peduarte starred 3 repositories
62
+ </h4>
63
+ <CollapsibleTrigger
64
+ render={
65
+ <Button variant="ghost" size="sm" className="w-9 p-0" />
66
+ }
67
+ >
68
+ <ChevronsUpDownIcon className="h-4 w-4" />
69
+ <span className="sr-only">Toggle</span>
70
+ </CollapsibleTrigger>
71
+ </div>
72
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
73
+ @radix-ui/primitives
74
+ </div>
75
+ <CollapsibleContent>
76
+ <div className="flex flex-col gap-2">
77
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
78
+ @radix-ui/colors
79
+ </div>
80
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
81
+ @stitches/react
82
+ </div>
83
+ </div>
84
+ </CollapsibleContent>
85
+ </Collapsible>
86
+ </>
87
+ } />
90
88
 
91
- <ExampleSection
92
- label="Default Open"
93
- description="Bắt đầu ở trạng thái mở rộng."
94
- codeString={`<Collapsible defaultOpen className="w-full space-y-2">
89
+ <ShowcaseExample title="Mở mặc định" description="Bắt đầu ở trạng thái mở rộng." code={`<Collapsible defaultOpen className="w-full space-y-2">
95
90
  <div className="flex items-center justify-between space-x-4 px-4">
96
91
  <h4 className="text-sm font-semibold">
97
92
  Recent activity
@@ -122,40 +117,38 @@ function CollapsibleMicroShowcase() {
122
117
  </div>
123
118
  </div>
124
119
  </CollapsibleContent>
125
- </Collapsible>`}
126
- >
127
- <Collapsible defaultOpen className="w-full space-y-2">
128
- <div className="flex items-center justify-between space-x-4 px-4">
129
- <h4 className="text-sm font-semibold">Recent activity</h4>
130
- <CollapsibleTrigger
131
- render={
132
- <Button variant="ghost" size="sm" className="w-9 p-0" />
133
- }
134
- >
135
- <ChevronsUpDownIcon className="h-4 w-4" />
136
- <span className="sr-only">Toggle</span>
137
- </CollapsibleTrigger>
138
- </div>
139
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
140
- Pushed to main
141
- </div>
142
- <CollapsibleContent>
143
- <div className="flex flex-col gap-2">
144
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
145
- Merged PR #42
146
- </div>
147
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
148
- Opened issue #43
149
- </div>
150
- </div>
151
- </CollapsibleContent>
152
- </Collapsible>
153
- </ExampleSection>
120
+ </Collapsible>`} preview={
121
+ <>
122
+ <Collapsible defaultOpen className="w-full space-y-2">
123
+ <div className="flex items-center justify-between space-x-4 px-4">
124
+ <h4 className="text-sm font-semibold">Recent activity</h4>
125
+ <CollapsibleTrigger
126
+ render={
127
+ <Button variant="ghost" size="sm" className="w-9 p-0" />
128
+ }
129
+ >
130
+ <ChevronsUpDownIcon className="h-4 w-4" />
131
+ <span className="sr-only">Toggle</span>
132
+ </CollapsibleTrigger>
133
+ </div>
134
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
135
+ Pushed to main
136
+ </div>
137
+ <CollapsibleContent>
138
+ <div className="flex flex-col gap-2">
139
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
140
+ Merged PR #42
141
+ </div>
142
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm">
143
+ Opened issue #43
144
+ </div>
145
+ </div>
146
+ </CollapsibleContent>
147
+ </Collapsible>
148
+ </>
149
+ } />
154
150
 
155
- <ExampleSection
156
- label="Controlled Mode"
157
- description="Trạng thái mở được kiểm soát bằng state."
158
- codeString={`const [isOpen, setIsOpen] = React.useState(false) return (
151
+ <ShowcaseExample title="Controlled Mode" description="Trạng thái mở được kiểm soát bằng state." code={`const [isOpen, setIsOpen] = React.useState(false) return (
159
152
  <Collapsible
160
153
  open={isOpen}
161
154
  onOpenChange={setIsOpen}
@@ -183,59 +176,55 @@ function CollapsibleMicroShowcase() {
183
176
  </div>
184
177
  </CollapsibleContent>
185
178
  </Collapsible>
186
- )`}
187
- >
188
- <div className="w-full space-y-4">
189
- {/* Đây nút nằm HOÀN TOÀN BÊN NGOÀI thẻ Collapsible */}
190
- <div className="flex items-center gap-4 rounded-md border border-border border-dashed p-4">
191
- <Button size="sm" onClick={() => setIsOpen(!isOpen)}>
192
- {isOpen
193
- ? "Đóng bảng bên dưới (External)"
194
- : "Mở bảng bên dưới (External)"}
195
- </Button>
196
- <span className="text-sm text-muted-foreground">
197
- State hiện tại:{" "}
198
- <strong className="text-foreground">
199
- {isOpen ? "Mở" : "Đóng"}
200
- </strong>
201
- </span>
202
- </div>
179
+ )`} preview={
180
+ <>
181
+ <div className="w-full space-y-4">
182
+ <div className="flex items-center gap-4 rounded-md border border-border border-dashed p-4">
183
+ <Button size="sm" onClick={() => setIsOpen(!isOpen)}>
184
+ {isOpen
185
+ ? "Đóng bảng bên dưới (External)"
186
+ : "Mở bảng bên dưới (External)"}
187
+ </Button>
188
+ <span className="text-sm text-muted-foreground">
189
+ State hiện tại:{" "}
190
+ <strong className="text-foreground">
191
+ {isOpen ? "Mở" : "Đóng"}
192
+ </strong>
193
+ </span>
194
+ </div>
203
195
 
204
- {/* Đây là component Collapsible nhận state từ ngoài */}
205
- <Collapsible
206
- open={isOpen}
207
- onOpenChange={setIsOpen}
208
- className="w-full space-y-2 rounded-md border border-border p-4 bg-muted/20"
209
- >
210
- <div className="flex items-center justify-between">
211
- <h4 className="text-sm font-semibold">
212
- Bảng hiển thị nội dung
213
- </h4>
214
- <CollapsibleTrigger
215
- render={
216
- <Button variant="ghost" size="sm" className="w-9 p-0" />
217
- }
218
- >
219
- <ChevronsUpDownIcon className="h-4 w-4" />
220
- <span className="sr-only">Toggle</span>
221
- </CollapsibleTrigger>
222
- </div>
223
- <CollapsibleContent>
224
- <div className="flex flex-col gap-2 pt-2">
225
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm text-center">
226
- Nội dung này được điều khiển bởi nút bên ngoài hoặc mũi tên
227
- ở trên!
228
- </div>
229
- </div>
230
- </CollapsibleContent>
231
- </Collapsible>
232
- </div>
233
- </ExampleSection>
196
+ <Collapsible
197
+ open={isOpen}
198
+ onOpenChange={setIsOpen}
199
+ className="w-full space-y-2 rounded-md border border-border p-4 bg-muted/20"
200
+ >
201
+ <div className="flex items-center justify-between">
202
+ <h4 className="text-sm font-semibold">
203
+ Bảng hiển thị nội dung
204
+ </h4>
205
+ <CollapsibleTrigger
206
+ render={
207
+ <Button variant="ghost" size="sm" className="w-9 p-0" />
208
+ }
209
+ >
210
+ <ChevronsUpDownIcon className="h-4 w-4" />
211
+ <span className="sr-only">Toggle</span>
212
+ </CollapsibleTrigger>
213
+ </div>
214
+ <CollapsibleContent>
215
+ <div className="flex flex-col gap-2 pt-2">
216
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm text-center">
217
+ Nội dung này được điều khiển bởi nút bên ngoài hoặc mũi tên
218
+ trên!
219
+ </div>
220
+ </div>
221
+ </CollapsibleContent>
222
+ </Collapsible>
223
+ </div>
224
+ </>
225
+ } />
234
226
 
235
- <ExampleSection
236
- label="Disabled"
237
- description="Không thể tương tác (Vô hiệu hóa)."
238
- codeString={`<Collapsible disabled className="w-full space-y-2">
227
+ <ShowcaseExample title="Disabled" description="Không thể tương tác (Vô hiệu hóa)." code={`<Collapsible disabled className="w-full space-y-2">
239
228
  <div className="flex items-center justify-between space-x-4 px-4 opacity-50">
240
229
  <h4 className="text-sm font-semibold">
241
230
  Archived Repositories
@@ -263,46 +252,44 @@ function CollapsibleMicroShowcase() {
263
252
  </div>
264
253
  </div>
265
254
  </CollapsibleContent>
266
- </Collapsible>`}
267
- >
268
- <Collapsible disabled className="w-full space-y-2">
269
- <div className="flex items-center justify-between space-x-4 px-4 opacity-50">
270
- <h4 className="text-sm font-semibold">Archived Repositories</h4>
271
- <CollapsibleTrigger
272
- render={
273
- <Button variant="ghost" size="sm" className="w-9 p-0" />
274
- }
275
- >
276
- <ChevronsUpDownIcon className="h-4 w-4" />
277
- <span className="sr-only">Toggle</span>
278
- </CollapsibleTrigger>
279
- </div>
280
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
281
- @radix-ui/react-toolbar
282
- </div>
283
- <CollapsibleContent>
284
- <div className="flex flex-col gap-2">
285
- <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
286
- @radix-ui/react-popover
287
- </div>
288
- </div>
289
- </CollapsibleContent>
290
- </Collapsible>
291
- </ExampleSection>
255
+ </Collapsible>`} preview={
256
+ <>
257
+ <Collapsible disabled className="w-full space-y-2">
258
+ <div className="flex items-center justify-between space-x-4 px-4 opacity-50">
259
+ <h4 className="text-sm font-semibold">Archived Repositories</h4>
260
+ <CollapsibleTrigger
261
+ render={
262
+ <Button variant="ghost" size="sm" className="w-9 p-0" />
263
+ }
264
+ >
265
+ <ChevronsUpDownIcon className="h-4 w-4" />
266
+ <span className="sr-only">Toggle</span>
267
+ </CollapsibleTrigger>
268
+ </div>
269
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
270
+ @radix-ui/react-toolbar
271
+ </div>
272
+ <CollapsibleContent>
273
+ <div className="flex flex-col gap-2">
274
+ <div className="rounded-md border border-border bg-muted/50 px-4 py-3 font-mono text-sm opacity-50">
275
+ @radix-ui/react-popover
276
+ </div>
277
+ </div>
278
+ </CollapsibleContent>
279
+ </Collapsible>
280
+ </>
281
+ } />
292
282
  </ExampleGrid>
293
283
  </div>
294
284
  );
295
285
  }
296
286
 
297
- // ──────────────────────────────────────────────────────────
298
- // SECTION 3: Entry point
299
- // ──────────────────────────────────────────────────────────
300
287
  export default function CollapsibleShowcase() {
301
288
  return (
302
289
  <Showcase
303
290
  title="Collapsible"
304
291
  description="Mở rộng/thu gọn một panel nội dung."
305
- generalConcept={
292
+ guideline={
306
293
  <ShowcaseDocs>
307
294
  <DocsP>
308
295
  Dùng để ẩn/hiện các phần nội dung phụ, giúp tiết kiệm không gian màn
@@ -311,11 +298,7 @@ export default function CollapsibleShowcase() {
311
298
  </DocsP>
312
299
  </ShowcaseDocs>
313
300
  }
314
- tabs={[
315
- {
316
- label: "Micro (Primitive)",
317
- content: <CollapsibleMicroShowcase /> },
318
- ]}
301
+ micro={{ content: <CollapsibleMicroShowcase /> }}
319
302
  />
320
303
  );
321
304
  }