gladvn 0.2.36 → 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 +1 -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
@@ -17,15 +17,12 @@ import {
17
17
  DocsCode,
18
18
  DocsP,
19
19
  ExampleGrid,
20
- ExampleSection,
20
+ ShowcaseExample,
21
21
  Showcase,
22
22
  ShowcaseDocs
23
23
  } from "../../dev/components/showcase";
24
24
  import { type Size } from "../../lib/types";
25
25
 
26
- // ──────────────────────────────────────────────────────────
27
- // Shared demo card content
28
- // ──────────────────────────────────────────────────────────
29
26
  function NextJsCard() {
30
27
  return (
31
28
  <div className="flex justify-between space-x-4">
@@ -53,17 +50,10 @@ function NextJsCard() {
53
50
  );
54
51
  }
55
52
 
56
- // ──────────────────────────────────────────────────────────
57
- // SECTION 2: Micro Content (không export)
58
- // ──────────────────────────────────────────────────────────
59
53
  function HoverCardMicroShowcase({ globalSize }: { globalSize: Size }) {
60
54
  return (
61
- <div className="space-y-10 mt-6">
62
- {/* ── Default ── */}
63
- <ExampleSection
64
- label="Default"
65
- description="Di chuột qua liên kết để xem bản xem trước. Trigger render dưới dạng Button với variant link."
66
- codeString={`<HoverCard>
55
+ <div className="space-y-10">
56
+ <ShowcaseExample title="Default" description="Di chuột qua liên kết để xem bản xem trước. Trigger render dưới dạng Button với variant link." code={`<HoverCard>
67
57
  <HoverCardTrigger render={<Button variant="link" />}>
68
58
  @nextjs
69
59
  </HoverCardTrigger>
@@ -99,27 +89,24 @@ function HoverCardMicroShowcase({ globalSize }: { globalSize: Size }) {
99
89
  </div>
100
90
  </HoverCardContent>
101
91
 
102
- </HoverCard>`}
103
- >
104
- <HoverCard>
105
- <HoverCardTrigger
106
- render={<Button variant="link" size={globalSize} />}
107
- >
108
- @nextjs
109
- </HoverCardTrigger>
92
+ </HoverCard>`} preview={
93
+ <>
94
+ <HoverCard>
95
+ <HoverCardTrigger
96
+ render={<Button variant="link" size={globalSize} />}
97
+ >
98
+ @nextjs
99
+ </HoverCardTrigger>
110
100
 
111
- <HoverCardContent className="w-80">
112
- <NextJsCard />
113
- </HoverCardContent>
114
-
115
- </HoverCard>
116
- </ExampleSection>
101
+ <HoverCardContent className="w-80">
102
+ <NextJsCard />
103
+ </HoverCardContent>
104
+
105
+ </HoverCard>
106
+ </>
107
+ } />
117
108
 
118
- {/* ── Vị trí (Sides) ── */}
119
- <ExampleSection
120
- label="Vị trí (Side)"
121
- description="HoverCard có thể xuất hiện ở bốn phía của trigger thông qua prop side."
122
- codeString={`<HoverCard>
109
+ <ShowcaseExample title="Vị trí (Side)" description="HoverCard có thể xuất hiện ở bốn phía của trigger thông qua prop side." code={`<HoverCard>
123
110
  <HoverCardTrigger
124
111
  render={<Button variant="outline">Top</Button>}
125
112
  />
@@ -128,90 +115,82 @@ function HoverCardMicroShowcase({ globalSize }: { globalSize: Size }) {
128
115
  ...
129
116
  </HoverCardContent>
130
117
 
131
- </HoverCard>`}
132
- >
133
- <div className="flex flex-wrap items-center justify-center gap-4 py-8">
134
- {(["top", "right", "bottom", "left"] as const).map((side) => (
135
- <HoverCard key={side}>
136
- <HoverCardTrigger
137
- render={
138
- <Button
139
- variant="outline"
140
- size={globalSize}
141
- className="capitalize"
142
- >
143
- {side}
144
- </Button>
145
- }
146
- />
118
+ </HoverCard>`} preview={
119
+ <>
120
+ <div className="flex flex-wrap items-center justify-center gap-4 py-8">
121
+ {(["top", "right", "bottom", "left"] as const).map((side) => (
122
+ <HoverCard key={side}>
123
+ <HoverCardTrigger
124
+ render={
125
+ <Button
126
+ variant="outline"
127
+ size={globalSize}
128
+ className="capitalize"
129
+ >
130
+ {side}
131
+ </Button>
132
+ }
133
+ />
147
134
 
148
- <HoverCardContent side={side} className="w-72">
149
- <NextJsCard />
150
- </HoverCardContent>
151
-
152
- </HoverCard>
153
- ))}
154
- </div>
155
- </ExampleSection>
135
+ <HoverCardContent side={side} className="w-72">
136
+ <NextJsCard />
137
+ </HoverCardContent>
138
+
139
+ </HoverCard>
140
+ ))}
141
+ </div>
142
+ </>
143
+ } />
156
144
 
157
- {/* ── Căn chỉnh (Align) ── */}
158
145
  <ExampleGrid>
159
146
  {(["start", "center", "end"] as const).map((align) => (
160
- <ExampleSection
161
- key={align}
162
- label={`Align: ${align}`}
163
- description={`Card căn ${align} theo trục ngang.`}
164
- codeString={`<HoverCardContent align="${align}" className="w-80">...</HoverCardContent>`}
165
- >
147
+ <ShowcaseExample key={align} title={`Align: ${align}`} description={`Card căn ${align} theo trục ngang.`} code={`<HoverCardContent align="${align}" className="w-80">...</HoverCardContent>`} preview={
148
+ <>
166
149
  <HoverCard>
167
- <HoverCardTrigger
168
- render={
169
- <Button
170
- variant="outline"
171
- size={globalSize}
172
- className="capitalize"
173
- >
174
- {align}
175
- </Button>
176
- }
177
- />
150
+ <HoverCardTrigger
151
+ render={
152
+ <Button
153
+ variant="outline"
154
+ size={globalSize}
155
+ className="capitalize"
156
+ >
157
+ {align}
158
+ </Button>
159
+ }
160
+ />
178
161
 
179
- <HoverCardContent align={align} className="w-64">
180
- <NextJsCard />
181
- </HoverCardContent>
182
-
183
- </HoverCard>
184
- </ExampleSection>
162
+ <HoverCardContent align={align} className="w-64">
163
+ <NextJsCard />
164
+ </HoverCardContent>
165
+
166
+ </HoverCard>
167
+ </>
168
+ } />
185
169
  ))}
186
170
  </ExampleGrid>
187
171
 
188
172
  {/* ── Trigger types ── */}
189
173
  <ExampleGrid>
190
- <ExampleSection
191
- label="Trigger: Button Link"
192
- description="Trigger render như Button variant link — phù hợp cho text nội tuyến."
193
- codeString={`<HoverCardTrigger render={<Button variant="link" />}>
174
+ <ShowcaseExample title="Trigger: Button Link" description="Trigger render như Button variant link — phù hợp cho text nội tuyến." code={`<HoverCardTrigger render={<Button variant="link" />}>
194
175
  @nextjs
195
- </HoverCardTrigger>`}
196
- >
197
- <HoverCard>
198
- <HoverCardTrigger
199
- render={<Button variant="link" size={globalSize} />}
200
- >
201
- @nextjs
202
- </HoverCardTrigger>
176
+ </HoverCardTrigger>`} preview={
177
+ <>
178
+ <HoverCard>
179
+ <HoverCardTrigger
180
+ render={<Button variant="link" size={globalSize} />}
181
+ >
182
+ @nextjs
183
+ </HoverCardTrigger>
203
184
 
204
- <HoverCardContent className="w-80">
205
- <NextJsCard />
206
- </HoverCardContent>
207
-
208
- </HoverCard>
209
- </ExampleSection>
185
+ <HoverCardContent className="w-80">
186
+ <NextJsCard />
187
+ </HoverCardContent>
188
+
189
+ </HoverCard>
190
+ </>
191
+ } />
210
192
 
211
- <ExampleSection
212
- label="Trigger: Thẻ anchor thuần"
213
- description="Trigger render như thẻ <a> HTML thuần — phù hợp cho liên kết tự nhiên trong văn bản."
214
- codeString={`<HoverCardTrigger
193
+ <ShowcaseExample title="Trigger: Thẻ anchor thuần" description="Trigger render như thẻ <a> HTML thuần — phù hợp cho liên kết tự nhiên trong văn bản." code={`<HoverCardTrigger
215
194
  render={
216
195
  <a
217
196
  href="#"
@@ -220,34 +199,31 @@ function HoverCardMicroShowcase({ globalSize }: { globalSize: Size }) {
220
199
  }
221
200
  >
222
201
  @nextjs
223
- </HoverCardTrigger>`}
224
- >
225
- <HoverCard>
226
- <HoverCardTrigger
227
- render={
228
- <a
229
- href="#"
230
- className="text-sm text-primary underline underline-offset-4 hover:opacity-80 transition-opacity"
231
- />
232
- }
233
- >
234
- @nextjs
235
- </HoverCardTrigger>
202
+ </HoverCardTrigger>`} preview={
203
+ <>
204
+ <HoverCard>
205
+ <HoverCardTrigger
206
+ render={
207
+ <a
208
+ href="#"
209
+ className="text-sm text-primary underline underline-offset-4 hover:opacity-80 transition-opacity"
210
+ />
211
+ }
212
+ >
213
+ @nextjs
214
+ </HoverCardTrigger>
236
215
 
237
- <HoverCardContent className="w-80">
238
- <NextJsCard />
239
- </HoverCardContent>
240
-
241
- </HoverCard>
242
- </ExampleSection>
216
+ <HoverCardContent className="w-80">
217
+ <NextJsCard />
218
+ </HoverCardContent>
219
+
220
+ </HoverCard>
221
+ </>
222
+ } />
243
223
  </ExampleGrid>
244
224
 
245
225
  {/* ── Độ trễ (delay / closeDelay) ── */}
246
- <ExampleSection
247
- label="Độ trễ (delay / closeDelay)"
248
- description="Tuỳ chỉnh thời gian trễ trước khi card xuất hiện hoặc biến mất. Props delay và closeDelay đặt trên HoverCardTrigger."
249
- fullWidth
250
- codeString={`<HoverCard>
226
+ <ShowcaseExample title="Độ trễ (delay / closeDelay)" description="Tuỳ chỉnh thời gian trễ trước khi card xuất hiện hoặc biến mất. Props delay và closeDelay đặt trên HoverCardTrigger." code={`<HoverCard>
251
227
  <HoverCardTrigger delay={0} render={<Button />}>
252
228
  Tức thì
253
229
  </HoverCardTrigger>
@@ -276,59 +252,60 @@ function HoverCardMicroShowcase({ globalSize }: { globalSize: Size }) {
276
252
 
277
253
  <HoverCardContent>...</HoverCardContent>
278
254
 
279
- </HoverCard>`}
280
- >
281
- <div className="grid grid-cols-1 md:grid-cols-3 gap-4 w-full">
282
- <HoverCard>
283
- <HoverCardTrigger
284
- delay={0}
285
- render={
286
- <Button variant="outline" size={globalSize} className="w-full">
287
- Tức thì (0ms)
288
- </Button>
289
- }
290
- />
255
+ </HoverCard>`} preview={
256
+ <>
257
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4 w-full">
258
+ <HoverCard>
259
+ <HoverCardTrigger
260
+ delay={0}
261
+ render={
262
+ <Button variant="outline" size={globalSize} className="w-full">
263
+ Tức thì (0ms)
264
+ </Button>
265
+ }
266
+ />
291
267
 
292
- <HoverCardContent className="w-72">
293
- <NextJsCard />
294
- </HoverCardContent>
295
-
296
- </HoverCard>
268
+ <HoverCardContent className="w-72">
269
+ <NextJsCard />
270
+ </HoverCardContent>
271
+
272
+ </HoverCard>
297
273
 
298
- <HoverCard>
299
- <HoverCardTrigger
300
- delay={500}
301
- render={
302
- <Button variant="outline" size={globalSize} className="w-full">
303
- Mặc định (500ms)
304
- </Button>
305
- }
306
- />
274
+ <HoverCard>
275
+ <HoverCardTrigger
276
+ delay={500}
277
+ render={
278
+ <Button variant="outline" size={globalSize} className="w-full">
279
+ Mặc định (500ms)
280
+ </Button>
281
+ }
282
+ />
307
283
 
308
- <HoverCardContent className="w-72">
309
- <NextJsCard />
310
- </HoverCardContent>
311
-
312
- </HoverCard>
284
+ <HoverCardContent className="w-72">
285
+ <NextJsCard />
286
+ </HoverCardContent>
287
+
288
+ </HoverCard>
313
289
 
314
- <HoverCard>
315
- <HoverCardTrigger
316
- delay={1500}
317
- closeDelay={500}
318
- render={
319
- <Button variant="outline" size={globalSize} className="w-full">
320
- Chậm (1500ms)
321
- </Button>
322
- }
323
- />
290
+ <HoverCard>
291
+ <HoverCardTrigger
292
+ delay={1500}
293
+ closeDelay={500}
294
+ render={
295
+ <Button variant="outline" size={globalSize} className="w-full">
296
+ Chậm (1500ms)
297
+ </Button>
298
+ }
299
+ />
324
300
 
325
- <HoverCardContent className="w-72">
326
- <NextJsCard />
327
- </HoverCardContent>
328
-
329
- </HoverCard>
330
- </div>
331
- </ExampleSection>
301
+ <HoverCardContent className="w-72">
302
+ <NextJsCard />
303
+ </HoverCardContent>
304
+
305
+ </HoverCard>
306
+ </div>
307
+ </>
308
+ } />
332
309
  </div>
333
310
  );
334
311
  }
@@ -342,7 +319,7 @@ export default function HoverCardShowcase() {
342
319
  <Showcase
343
320
  title="Hover Card"
344
321
  description="Xem trước nội dung đằng sau một liên kết khi hover."
345
- generalConcept={
322
+ guideline={
346
323
  <ShowcaseDocs>
347
324
  <DocsP>
348
325
  <DocsCode>HoverCard</DocsCode> hiển thị một khung xem trước thông
@@ -357,11 +334,7 @@ export default function HoverCardShowcase() {
357
334
  </DocsP>
358
335
  </ShowcaseDocs>
359
336
  }
360
- tabs={[
361
- {
362
- label: "Micro (Primitive)",
363
- content: <HoverCardMicroShowcase globalSize={globalSize} /> },
364
- ]}
337
+ micro={{ content: <HoverCardMicroShowcase globalSize={globalSize} /> }}
365
338
  />
366
339
  );
367
340
  }