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.
Files changed (313) hide show
  1. package/bin/cli.js +9 -6
  2. package/dist/components/macro/accordion-preset.d.ts.map +1 -1
  3. package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -1
  4. package/dist/components/macro/alert-preset.d.ts.map +1 -1
  5. package/dist/components/macro/avatar-preset.d.ts.map +1 -1
  6. package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -1
  7. package/dist/components/macro/card-preset.d.ts.map +1 -1
  8. package/dist/components/macro/carousel-preset.d.ts.map +1 -1
  9. package/dist/components/macro/checkbox-preset.d.ts.map +1 -1
  10. package/dist/components/macro/combobox-preset.d.ts.map +1 -1
  11. package/dist/components/macro/command-preset.d.ts +1 -1
  12. package/dist/components/macro/command-preset.d.ts.map +1 -1
  13. package/dist/components/macro/date-picker.d.ts.map +1 -1
  14. package/dist/components/macro/dialog-preset.d.ts.map +1 -1
  15. package/dist/components/macro/empty-preset.d.ts.map +1 -1
  16. package/dist/components/macro/field-preset.d.ts.map +1 -1
  17. package/dist/components/macro/input-otp-preset.d.ts +6 -0
  18. package/dist/components/macro/input-otp-preset.d.ts.map +1 -1
  19. package/dist/components/macro/input-preset.d.ts +1 -1
  20. package/dist/components/macro/input-preset.d.ts.map +1 -1
  21. package/dist/components/macro/pagination-preset.d.ts.map +1 -1
  22. package/dist/components/macro/progress-preset.d.ts.map +1 -1
  23. package/dist/components/macro/radio-group-preset.d.ts.map +1 -1
  24. package/dist/components/macro/select-preset.d.ts.map +1 -1
  25. package/dist/components/macro/slider-preset.d.ts.map +1 -1
  26. package/dist/components/macro/switch-preset.d.ts.map +1 -1
  27. package/dist/components/macro/tabs-preset.d.ts +1 -1
  28. package/dist/components/macro/tabs-preset.d.ts.map +1 -1
  29. package/dist/components/macro/textarea-preset.d.ts +1 -1
  30. package/dist/components/macro/textarea-preset.d.ts.map +1 -1
  31. package/dist/components/micro/accordion.d.ts +7 -0
  32. package/dist/components/micro/accordion.d.ts.map +1 -1
  33. package/dist/components/micro/alert-dialog.d.ts.map +1 -1
  34. package/dist/components/micro/alert.d.ts +7 -0
  35. package/dist/components/micro/alert.d.ts.map +1 -1
  36. package/dist/components/micro/aspect-ratio.d.ts +7 -0
  37. package/dist/components/micro/aspect-ratio.d.ts.map +1 -1
  38. package/dist/components/micro/avatar.d.ts.map +1 -1
  39. package/dist/components/micro/badge.d.ts +8 -1
  40. package/dist/components/micro/badge.d.ts.map +1 -1
  41. package/dist/components/micro/breadcrumb.d.ts +7 -0
  42. package/dist/components/micro/breadcrumb.d.ts.map +1 -1
  43. package/dist/components/micro/button.d.ts +8 -1
  44. package/dist/components/micro/button.d.ts.map +1 -1
  45. package/dist/components/micro/calendar.d.ts +2 -2
  46. package/dist/components/micro/calendar.d.ts.map +1 -1
  47. package/dist/components/micro/carousel.d.ts.map +1 -1
  48. package/dist/components/micro/chart.d.ts.map +1 -1
  49. package/dist/components/micro/checkbox.d.ts.map +1 -1
  50. package/dist/components/micro/collapsible.d.ts.map +1 -1
  51. package/dist/components/micro/combobox.d.ts.map +1 -1
  52. package/dist/components/micro/command.d.ts.map +1 -1
  53. package/dist/components/micro/context-menu.d.ts.map +1 -1
  54. package/dist/components/micro/dialog.d.ts.map +1 -1
  55. package/dist/components/micro/drawer.d.ts.map +1 -1
  56. package/dist/components/micro/dropdown-menu.d.ts.map +1 -1
  57. package/dist/components/micro/empty.d.ts +7 -0
  58. package/dist/components/micro/empty.d.ts.map +1 -1
  59. package/dist/components/micro/field.d.ts.map +1 -1
  60. package/dist/components/micro/hover-card.d.ts +1 -1
  61. package/dist/components/micro/hover-card.d.ts.map +1 -1
  62. package/dist/components/micro/input-group.d.ts.map +1 -1
  63. package/dist/components/micro/input-otp.d.ts.map +1 -1
  64. package/dist/components/micro/input.d.ts +7 -0
  65. package/dist/components/micro/input.d.ts.map +1 -1
  66. package/dist/components/micro/item.d.ts.map +1 -1
  67. package/dist/components/micro/label.d.ts.map +1 -1
  68. package/dist/components/micro/menubar.d.ts.map +1 -1
  69. package/dist/components/micro/navigation-menu.d.ts +8 -1
  70. package/dist/components/micro/navigation-menu.d.ts.map +1 -1
  71. package/dist/components/micro/pagination.d.ts.map +1 -1
  72. package/dist/components/micro/popover.d.ts.map +1 -1
  73. package/dist/components/micro/progress.d.ts.map +1 -1
  74. package/dist/components/micro/radio-group.d.ts.map +1 -1
  75. package/dist/components/micro/select.d.ts +1 -1
  76. package/dist/components/micro/select.d.ts.map +1 -1
  77. package/dist/components/micro/sheet.d.ts.map +1 -1
  78. package/dist/components/micro/sidebar.d.ts.map +1 -1
  79. package/dist/components/micro/skeleton.d.ts +7 -0
  80. package/dist/components/micro/skeleton.d.ts.map +1 -1
  81. package/dist/components/micro/slider.d.ts +7 -0
  82. package/dist/components/micro/slider.d.ts.map +1 -1
  83. package/dist/components/micro/sonner.d.ts.map +1 -1
  84. package/dist/components/micro/spinner.d.ts.map +1 -1
  85. package/dist/components/micro/switch.d.ts.map +1 -1
  86. package/dist/components/micro/table.d.ts.map +1 -1
  87. package/dist/components/micro/tabs.d.ts +1 -1
  88. package/dist/components/micro/tabs.d.ts.map +1 -1
  89. package/dist/components/micro/textarea.d.ts +7 -0
  90. package/dist/components/micro/textarea.d.ts.map +1 -1
  91. package/dist/components/micro/toggle-group.d.ts.map +1 -1
  92. package/dist/components/micro/toggle.d.ts.map +1 -1
  93. package/dist/components/micro/tooltip.d.ts +1 -1
  94. package/dist/components/micro/tooltip.d.ts.map +1 -1
  95. package/dist/dev/App.d.ts.map +1 -1
  96. package/dist/dev/components/code-highlighter.d.ts.map +1 -1
  97. package/dist/dev/components/dev-context.d.ts.map +1 -1
  98. package/dist/dev/components/showcase.d.ts +1 -1
  99. package/dist/dev/components/showcase.d.ts.map +1 -1
  100. package/dist/dev/data.d.ts.map +1 -1
  101. package/dist/dev/main.d.ts.map +1 -1
  102. package/dist/dev/sections/buttons.d.ts.map +1 -1
  103. package/dist/dev/sections/feedback.d.ts.map +1 -1
  104. package/dist/dev/sections/overview.d.ts.map +1 -1
  105. package/dist/dev/showcase/accordion.d.ts.map +1 -1
  106. package/dist/dev/showcase/alert-dialog.d.ts.map +1 -1
  107. package/dist/dev/showcase/alert.d.ts.map +1 -1
  108. package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -1
  109. package/dist/dev/showcase/avatar.d.ts.map +1 -1
  110. package/dist/dev/showcase/breadcrumb.d.ts.map +1 -1
  111. package/dist/dev/showcase/button.d.ts.map +1 -1
  112. package/dist/dev/showcase/calendar.d.ts.map +1 -1
  113. package/dist/dev/showcase/card.d.ts.map +1 -1
  114. package/dist/dev/showcase/carousel.d.ts.map +1 -1
  115. package/dist/dev/showcase/chart.d.ts.map +1 -1
  116. package/dist/dev/showcase/checkbox.d.ts.map +1 -1
  117. package/dist/dev/showcase/collapsible.d.ts.map +1 -1
  118. package/dist/dev/showcase/combobox.d.ts.map +1 -1
  119. package/dist/dev/showcase/command.d.ts.map +1 -1
  120. package/dist/dev/showcase/context-menu.d.ts.map +1 -1
  121. package/dist/dev/showcase/dialog.d.ts.map +1 -1
  122. package/dist/dev/showcase/drawer.d.ts.map +1 -1
  123. package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -1
  124. package/dist/dev/showcase/empty.d.ts.map +1 -1
  125. package/dist/dev/showcase/hover-card.d.ts.map +1 -1
  126. package/dist/dev/showcase/input-group.d.ts.map +1 -1
  127. package/dist/dev/showcase/input-otp.d.ts.map +1 -1
  128. package/dist/dev/showcase/input.d.ts.map +1 -1
  129. package/dist/dev/showcase/item.d.ts.map +1 -1
  130. package/dist/dev/showcase/kbd.d.ts.map +1 -1
  131. package/dist/dev/showcase/label.d.ts.map +1 -1
  132. package/dist/dev/showcase/menubar.d.ts.map +1 -1
  133. package/dist/dev/showcase/navigation-menu.d.ts.map +1 -1
  134. package/dist/dev/showcase/overview.d.ts.map +1 -1
  135. package/dist/dev/showcase/pagination.d.ts.map +1 -1
  136. package/dist/dev/showcase/popover.d.ts.map +1 -1
  137. package/dist/dev/showcase/progress.d.ts.map +1 -1
  138. package/dist/dev/showcase/radio-group.d.ts.map +1 -1
  139. package/dist/dev/showcase/resizable.d.ts.map +1 -1
  140. package/dist/dev/showcase/scroll-area.d.ts.map +1 -1
  141. package/dist/dev/showcase/select.d.ts.map +1 -1
  142. package/dist/dev/showcase/separator.d.ts.map +1 -1
  143. package/dist/dev/showcase/sheet.d.ts.map +1 -1
  144. package/dist/dev/showcase/sidebar.d.ts.map +1 -1
  145. package/dist/dev/showcase/skeleton.d.ts.map +1 -1
  146. package/dist/dev/showcase/slider.d.ts.map +1 -1
  147. package/dist/dev/showcase/sonner.d.ts.map +1 -1
  148. package/dist/dev/showcase/spinner.d.ts.map +1 -1
  149. package/dist/dev/showcase/switch.d.ts.map +1 -1
  150. package/dist/dev/showcase/table.d.ts.map +1 -1
  151. package/dist/dev/showcase/tabs.d.ts.map +1 -1
  152. package/dist/dev/showcase/textarea.d.ts.map +1 -1
  153. package/dist/dev/showcase/theme-provider.d.ts.map +1 -1
  154. package/dist/dev/showcase/toast.d.ts.map +1 -1
  155. package/dist/dev/showcase/toggle-group.d.ts.map +1 -1
  156. package/dist/dev/showcase/toggle.d.ts.map +1 -1
  157. package/dist/dev/showcase/tooltip.d.ts.map +1 -1
  158. package/dist/index.cjs.map +1 -1
  159. package/dist/index.js.map +1 -1
  160. package/dist/lib/utils.d.ts.map +1 -1
  161. package/package.json +3 -1
  162. package/scripts/format-codestrings.ts +87 -0
  163. package/scripts/organize-imports.ts +21 -0
  164. package/scripts/regex-format.cjs +67 -0
  165. package/scripts/tmp.tsx +25 -0
  166. package/src/components/macro/accordion-preset.test.tsx +1 -0
  167. package/src/components/macro/accordion-preset.tsx +2 -1
  168. package/src/components/macro/alert-dialog-preset.tsx +44 -43
  169. package/src/components/macro/alert-preset.tsx +7 -3
  170. package/src/components/macro/avatar-preset.tsx +2 -1
  171. package/src/components/macro/breadcrumb-preset.tsx +2 -1
  172. package/src/components/macro/card-preset.tsx +2 -1
  173. package/src/components/macro/carousel-preset.tsx +5 -2
  174. package/src/components/macro/checkbox-preset.test.tsx +1 -0
  175. package/src/components/macro/checkbox-preset.tsx +6 -2
  176. package/src/components/macro/combobox-preset.tsx +6 -3
  177. package/src/components/macro/command-preset.tsx +7 -3
  178. package/src/components/macro/date-picker.tsx +77 -59
  179. package/src/components/macro/dialog-preset.tsx +42 -38
  180. package/src/components/macro/empty-preset.tsx +2 -1
  181. package/src/components/macro/field-preset.test.tsx +1 -0
  182. package/src/components/macro/field-preset.tsx +2 -1
  183. package/src/components/macro/input-otp-preset.tsx +6 -2
  184. package/src/components/macro/input-preset.test.tsx +1 -0
  185. package/src/components/macro/input-preset.tsx +4 -2
  186. package/src/components/macro/pagination-preset.tsx +3 -1
  187. package/src/components/macro/progress-preset.test.tsx +1 -0
  188. package/src/components/macro/progress-preset.tsx +2 -1
  189. package/src/components/macro/radio-group-preset.tsx +4 -1
  190. package/src/components/macro/select-preset.tsx +35 -30
  191. package/src/components/macro/slider-preset.test.tsx +1 -0
  192. package/src/components/macro/slider-preset.tsx +4 -1
  193. package/src/components/macro/switch-preset.test.tsx +1 -0
  194. package/src/components/macro/switch-preset.tsx +4 -1
  195. package/src/components/macro/tabs-preset.test.tsx +1 -0
  196. package/src/components/macro/tabs-preset.tsx +4 -2
  197. package/src/components/macro/textarea-preset.test.tsx +1 -0
  198. package/src/components/macro/textarea-preset.tsx +4 -1
  199. package/src/components/micro/accordion.tsx +3 -2
  200. package/src/components/micro/alert-dialog.tsx +2 -1
  201. package/src/components/micro/alert.tsx +3 -2
  202. package/src/components/micro/aspect-ratio.tsx +2 -1
  203. package/src/components/micro/avatar.tsx +2 -1
  204. package/src/components/micro/badge.tsx +3 -3
  205. package/src/components/micro/breadcrumb.tsx +3 -2
  206. package/src/components/micro/button.test.tsx +1 -0
  207. package/src/components/micro/button.tsx +3 -3
  208. package/src/components/micro/calendar.tsx +10 -9
  209. package/src/components/micro/carousel.tsx +3 -2
  210. package/src/components/micro/chart.tsx +1 -0
  211. package/src/components/micro/checkbox.tsx +2 -2
  212. package/src/components/micro/collapsible.tsx +4 -2
  213. package/src/components/micro/combobox.tsx +41 -29
  214. package/src/components/micro/command.tsx +23 -16
  215. package/src/components/micro/context-menu.tsx +3 -2
  216. package/src/components/micro/dialog.tsx +2 -1
  217. package/src/components/micro/drawer.tsx +2 -1
  218. package/src/components/micro/dropdown-menu.tsx +3 -2
  219. package/src/components/micro/empty.tsx +2 -1
  220. package/src/components/micro/field.tsx +4 -3
  221. package/src/components/micro/hover-card.tsx +20 -19
  222. package/src/components/micro/input-group.tsx +2 -1
  223. package/src/components/micro/input-otp.tsx +3 -2
  224. package/src/components/micro/input.tsx +3 -2
  225. package/src/components/micro/item.tsx +1 -0
  226. package/src/components/micro/label.tsx +2 -1
  227. package/src/components/micro/menubar.tsx +2 -1
  228. package/src/components/micro/navigation-menu.tsx +18 -17
  229. package/src/components/micro/pagination.tsx +2 -1
  230. package/src/components/micro/popover.tsx +2 -1
  231. package/src/components/micro/progress.tsx +2 -1
  232. package/src/components/micro/radio-group.tsx +3 -3
  233. package/src/components/micro/select.tsx +5 -4
  234. package/src/components/micro/sheet.tsx +2 -1
  235. package/src/components/micro/sidebar.tsx +4 -1
  236. package/src/components/micro/skeleton.tsx +2 -1
  237. package/src/components/micro/slider.tsx +4 -1
  238. package/src/components/micro/sonner.tsx +2 -1
  239. package/src/components/micro/spinner.tsx +1 -2
  240. package/src/components/micro/switch.tsx +2 -2
  241. package/src/components/micro/table.tsx +2 -1
  242. package/src/components/micro/tabs.tsx +4 -3
  243. package/src/components/micro/textarea.tsx +2 -1
  244. package/src/components/micro/toggle-group.tsx +1 -0
  245. package/src/components/micro/toggle.tsx +1 -3
  246. package/src/components/micro/tooltip.tsx +9 -3
  247. package/src/dev/App.tsx +66 -41
  248. package/src/dev/components/code-highlighter.tsx +2 -1
  249. package/src/dev/components/dev-context.tsx +1 -0
  250. package/src/dev/components/showcase.tsx +13 -14
  251. package/src/dev/data.ts +206 -52
  252. package/src/dev/main.tsx +4 -4
  253. package/src/dev/sections/buttons.tsx +14 -12
  254. package/src/dev/sections/feedback.tsx +7 -2
  255. package/src/dev/sections/forms.tsx +11 -11
  256. package/src/dev/sections/overview.tsx +2 -1
  257. package/src/dev/showcase/accordion.tsx +399 -314
  258. package/src/dev/showcase/alert-dialog.tsx +387 -384
  259. package/src/dev/showcase/alert.tsx +271 -258
  260. package/src/dev/showcase/aspect-ratio.tsx +102 -105
  261. package/src/dev/showcase/avatar.tsx +216 -145
  262. package/src/dev/showcase/badge.tsx +78 -50
  263. package/src/dev/showcase/breadcrumb.tsx +88 -85
  264. package/src/dev/showcase/button.tsx +72 -96
  265. package/src/dev/showcase/calendar.tsx +41 -39
  266. package/src/dev/showcase/card.tsx +170 -148
  267. package/src/dev/showcase/carousel.tsx +239 -77
  268. package/src/dev/showcase/chart.tsx +5 -4
  269. package/src/dev/showcase/checkbox.tsx +206 -140
  270. package/src/dev/showcase/collapsible.tsx +108 -84
  271. package/src/dev/showcase/combobox.tsx +272 -199
  272. package/src/dev/showcase/command.tsx +31 -28
  273. package/src/dev/showcase/context-menu.tsx +94 -77
  274. package/src/dev/showcase/dialog.tsx +445 -424
  275. package/src/dev/showcase/drawer.tsx +142 -135
  276. package/src/dev/showcase/dropdown-menu.tsx +165 -161
  277. package/src/dev/showcase/empty.tsx +173 -158
  278. package/src/dev/showcase/hover-card.tsx +92 -52
  279. package/src/dev/showcase/input-group.tsx +193 -160
  280. package/src/dev/showcase/input-otp.tsx +109 -99
  281. package/src/dev/showcase/input.tsx +78 -42
  282. package/src/dev/showcase/item.tsx +101 -98
  283. package/src/dev/showcase/kbd.tsx +78 -62
  284. package/src/dev/showcase/label.tsx +16 -23
  285. package/src/dev/showcase/menubar.tsx +274 -251
  286. package/src/dev/showcase/navigation-menu.tsx +175 -170
  287. package/src/dev/showcase/overview.tsx +164 -148
  288. package/src/dev/showcase/pagination.tsx +101 -69
  289. package/src/dev/showcase/popover.tsx +113 -86
  290. package/src/dev/showcase/progress.tsx +99 -69
  291. package/src/dev/showcase/radio-group.tsx +217 -134
  292. package/src/dev/showcase/resizable.tsx +65 -55
  293. package/src/dev/showcase/scroll-area.tsx +32 -22
  294. package/src/dev/showcase/select.tsx +192 -136
  295. package/src/dev/showcase/separator.tsx +28 -24
  296. package/src/dev/showcase/sheet.tsx +182 -134
  297. package/src/dev/showcase/sidebar.tsx +9 -5
  298. package/src/dev/showcase/skeleton.tsx +54 -59
  299. package/src/dev/showcase/slider.tsx +158 -129
  300. package/src/dev/showcase/sonner.tsx +3 -5
  301. package/src/dev/showcase/spinner.tsx +22 -18
  302. package/src/dev/showcase/switch.tsx +207 -110
  303. package/src/dev/showcase/table.tsx +44 -32
  304. package/src/dev/showcase/tabs.tsx +272 -267
  305. package/src/dev/showcase/textarea.tsx +162 -116
  306. package/src/dev/showcase/theme-provider.tsx +596 -534
  307. package/src/dev/showcase/toast.tsx +37 -38
  308. package/src/dev/showcase/toggle-group.tsx +87 -39
  309. package/src/dev/showcase/toggle.tsx +36 -27
  310. package/src/dev/showcase/tooltip.tsx +154 -119
  311. package/src/lib/utils.test.ts +1 -0
  312. package/src/lib/utils.ts +1 -1
  313. package/src/styles/gladvn.css +0 -1
@@ -1,14 +1,5 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
2
- import {
3
- DocsCode,
4
- DocsLi,
5
- DocsP,
6
- DocsUl,
7
- ExampleGrid,
8
- ExampleSection,
9
- Showcase,
10
- ShowcaseDocs,
11
- } from "../../dev/components/showcase";
1
+ import { useState } from "react";
2
+
12
3
  import {
13
4
  CheckCircle2Icon,
14
5
  InfoIcon,
@@ -16,7 +7,6 @@ import {
16
7
  XCircleIcon,
17
8
  XIcon,
18
9
  } from "lucide-react";
19
- import { useState } from "react";
20
10
 
21
11
  import { AlertPreset } from "../../components/macro/alert-preset";
22
12
  import {
@@ -27,6 +17,17 @@ import {
27
17
  AlertTitle,
28
18
  } from "../../components/micro/alert";
29
19
  import { Button } from "../../components/micro/button";
20
+ import { useDevContext } from "../../dev/components/dev-context";
21
+ import {
22
+ DocsCode,
23
+ DocsLi,
24
+ DocsP,
25
+ DocsUl,
26
+ ExampleGrid,
27
+ ExampleSection,
28
+ Showcase,
29
+ ShowcaseDocs,
30
+ } from "../../dev/components/showcase";
30
31
  import { type Size } from "../../lib/types";
31
32
 
32
33
  // ──────────────────────────────────────────────────────────
@@ -41,20 +42,21 @@ function AlertMacroShowcase({ globalSize }: { globalSize: Size }) {
41
42
  label="Controlled vs Uncontrolled"
42
43
  fullWidth
43
44
  codeString={`<div className="space-y-4 px-2 py-4">
44
- <DocsUl>
45
- <DocsLi>
46
- <b>Uncontrolled (Mặc định):</b> Nếu truyền{" "}
47
- <DocsCode>dismissible=true</DocsCode>, component tự quản lý state
48
- để tắt (ẩn) Alert khi click vào nút X.
49
- </DocsLi>
50
- <DocsLi>
51
- <b>Controlled:</b> Có thể kiểm soát state đóng/mở thông qua React
52
- state và truyền hàm vào <DocsCode>onDismiss</DocsCode>. Tuy nhiên
53
- thông thường Alert chỉ bị huỷ (unmount), nên nếu bạn kiểm soát thì
54
- hãy render điều kiện bên ngoài.
55
- </DocsLi>
56
- </DocsUl>
57
- </div>`}
45
+ <DocsUl>
46
+ <DocsLi>
47
+ <b>Uncontrolled (Mặc định):</b> Nếu truyền{" "}
48
+ <DocsCode>dismissible=true</DocsCode>, component tự
49
+ quản lý state để tắt (ẩn) Alert khi click vào nút X.
50
+ </DocsLi>
51
+ <DocsLi>
52
+ <b>Controlled:</b> Có thể kiểm soát state đóng/mở
53
+ thông qua React state và truyền hàm vào{" "}
54
+ <DocsCode>onDismiss</DocsCode>. Tuy nhiên thông
55
+ thường Alert chỉ bị huỷ (unmount), nên nếu bạn kiểm
56
+ soát thì hãy render nó có điều kiện bên ngoài.
57
+ </DocsLi>
58
+ </DocsUl>
59
+ </div>`}
58
60
  >
59
61
  <div className="space-y-4 px-2 py-4">
60
62
  <DocsUl>
@@ -79,12 +81,11 @@ function AlertMacroShowcase({ globalSize }: { globalSize: Size }) {
79
81
  description="Truyền props trực tiếp thay vì lồng children."
80
82
  fullWidth
81
83
  codeString={`<AlertPreset
82
- color="info"
83
- title="Có bản cập nhật mới"
84
- description="Phiên bản 2.0.4 đã sẵn sàng để tải xuống."
85
- icon={<InfoIcon />}
86
- />
87
- `}
84
+ color="info"
85
+ title="Có bản cập nhật mới"
86
+ description="Phiên bản 2.0.4 đã sẵn sàng để tải xuống."
87
+ icon={<InfoIcon />}
88
+ />`}
88
89
  >
89
90
  <AlertPreset
90
91
  color="info"
@@ -100,13 +101,12 @@ function AlertMacroShowcase({ globalSize }: { globalSize: Size }) {
100
101
  description="Thêm dismissible=true để hiển thị nút [X]. Thử bấm vào nút X bên dưới."
101
102
  fullWidth
102
103
  codeString={`<AlertPreset
103
- color="warning"
104
- title="Phiên bản sắp hết hạn"
105
- description="Phiên đăng nhập của bạn sẽ hết hạn trong 5 phút."
106
- icon={<TriangleAlertIcon />}
107
- dismissible
108
- />
109
- `}
104
+ color="warning"
105
+ title="Phiên bản sắp hết hạn"
106
+ description="Phiên đăng nhập của bạn sẽ hết hạn trong 5 phút."
107
+ icon={<TriangleAlertIcon />}
108
+ dismissible
109
+ />`}
110
110
  >
111
111
  <AlertPreset
112
112
  color="warning"
@@ -182,27 +182,26 @@ return (
182
182
  label="Nội Dung Phức Tạp (Complex Content)"
183
183
  description="Có thể truyền ReactNode hoặc thay thế toàn bộ bằng thẻ children."
184
184
  codeString={`<div className="flex w-full flex-col gap-4 max-w-xl">
185
- <AlertPreset
186
- color="success"
187
- title="Thanh toán thành công"
188
- icon={<CheckCircle2Icon />}
189
- dismissible
190
- action={
191
- <Button
192
- size="sm"
193
- variant="outline"
194
- className="h-7 px-2 text-xs"
195
- >
196
- Xem biên lai
197
- </Button>
198
- }
199
- >
200
- <p className="text-sm mt-1 text-success/90">
201
- Hoá đơn #1234 của bạn đã được thanh toán hoàn tất.
202
- </p>
203
- </AlertPreset>
204
- </div>
205
- `}
185
+ <AlertPreset
186
+ color="success"
187
+ title="Thanh toán thành công"
188
+ icon={<CheckCircle2Icon />}
189
+ dismissible
190
+ action={
191
+ <Button
192
+ size="sm"
193
+ variant="outline"
194
+ className="h-7 px-2 text-xs"
195
+ >
196
+ Xem biên lai
197
+ </Button>
198
+ }
199
+ >
200
+ <p className="text-sm mt-1 text-success/90">
201
+ Hoá đơn #1234 của bạn đã được thanh toán hoàn tất.
202
+ </p>
203
+ </AlertPreset>
204
+ </div>`}
206
205
  >
207
206
  <div className="flex w-full flex-col gap-4 max-w-xl">
208
207
  <AlertPreset
@@ -244,57 +243,59 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
244
243
  description="Mỗi màu sắc truyền đạt một mức độ khẩn cấp hoặc ý nghĩa khác nhau."
245
244
  fullWidth
246
245
  codeString={`<Alert color="info" className="flex items-start">
247
- <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
248
- <div className="flex-1 space-y-0.5">
249
- <AlertTitle>Có bản cập nhật mới</AlertTitle>
250
- <AlertDescription>
251
- Phiên bản 2.0.4 đã sẵn sàng để tải xuống. Hãy cập nhật để trải
252
- nghiệm tính năng mới.
253
- </AlertDescription>
254
- </div>
255
- </Alert>
256
-
257
- <Alert color="success" className="flex items-start">
258
- <AlertIcon
259
- render={<CheckCircle2Icon />}
260
- className="mt-0.5 shrink-0"
261
- />
262
- <div className="flex-1 space-y-0.5">
263
- <AlertTitle>Đã lưu thành công</AlertTitle>
264
- <AlertDescription>
265
- Các thay đổi của bạn đã được đồng bộ lên đám mây.
266
- </AlertDescription>
267
- </div>
268
- </Alert>
269
-
270
- <Alert color="warning" className="flex items-start">
271
- <AlertIcon
272
- render={<TriangleAlertIcon />}
273
- className="mt-0.5 shrink-0"
274
- />
275
- <div className="flex-1 space-y-0.5">
276
- <AlertTitle>Phiên bản sắp hết hạn</AlertTitle>
277
- <AlertDescription>
278
- Phiên đăng nhập của bạn sẽ hết hạn trong 5 phút nữa. Vui lòng lưu
279
- lại công việc.
280
- </AlertDescription>
281
- </div>
282
- </Alert>
283
-
284
- <Alert
285
- color="destructive"
286
- className="flex items-start"
287
- >
288
- <AlertIcon render={<XCircleIcon />} className="mt-0.5 shrink-0" />
289
- <div className="flex-1 space-y-0.5">
290
- <AlertTitle>Kết nối thất bại</AlertTitle>
291
- <AlertDescription>
292
- Không thể kết nối đến cơ sở dữ liệu. Vui lòng kiểm tra lại đường
293
- truyền mạng.
294
- </AlertDescription>
295
- </div>
296
- </Alert>
297
- `}
246
+ <AlertIcon
247
+ render={<InfoIcon />}
248
+ className="mt-0.5 shrink-0"
249
+ />
250
+ <div className="flex-1 space-y-0.5">
251
+ <AlertTitle>Có bản cập nhật mới</AlertTitle>
252
+ <AlertDescription>
253
+ Phiên bản 2.0.4 đã sẵn sàng để tải xuống. Hãy cập
254
+ nhật để trải nghiệm tính năng mới.
255
+ </AlertDescription>
256
+ </div>
257
+ </Alert>
258
+
259
+ <Alert color="success" className="flex items-start">
260
+ <AlertIcon
261
+ render={<CheckCircle2Icon />}
262
+ className="mt-0.5 shrink-0"
263
+ />
264
+ <div className="flex-1 space-y-0.5">
265
+ <AlertTitle>Đã lưu thành công</AlertTitle>
266
+ <AlertDescription>
267
+ Các thay đổi của bạn đã được đồng bộ lên đám mây.
268
+ </AlertDescription>
269
+ </div>
270
+ </Alert>
271
+
272
+ <Alert color="warning" className="flex items-start">
273
+ <AlertIcon
274
+ render={<TriangleAlertIcon />}
275
+ className="mt-0.5 shrink-0"
276
+ />
277
+ <div className="flex-1 space-y-0.5">
278
+ <AlertTitle>Phiên bản sắp hết hạn</AlertTitle>
279
+ <AlertDescription>
280
+ Phiên đăng nhập của bạn sẽ hết hạn trong 5 phút nữa.
281
+ Vui lòng lưu lại công việc.
282
+ </AlertDescription>
283
+ </div>
284
+ </Alert>
285
+
286
+ <Alert color="destructive" className="flex items-start">
287
+ <AlertIcon
288
+ render={<XCircleIcon />}
289
+ className="mt-0.5 shrink-0"
290
+ />
291
+ <div className="flex-1 space-y-0.5">
292
+ <AlertTitle>Kết nối thất bại</AlertTitle>
293
+ <AlertDescription>
294
+ Không thể kết nối đến cơ sở dữ liệu. Vui lòng kiểm
295
+ tra lại đường truyền mạng.
296
+ </AlertDescription>
297
+ </div>
298
+ </Alert>`}
298
299
  >
299
300
  <Alert color="info" size={globalSize} className="flex items-start">
300
301
  <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
@@ -357,15 +358,18 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
357
358
  description="Hiển thị Alert với màu sắc mặc định (info)."
358
359
  fullWidth
359
360
  codeString={`<Alert className="flex items-start">
360
- <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
361
- <div className="flex-1 space-y-0.5">
362
- <AlertTitle>Chú ý!</AlertTitle>
363
- <AlertDescription>
364
- Bạn thể thêm các component vào dự án bằng cách sử dụng CLI.
365
- </AlertDescription>
366
- </div>
367
- </Alert>
368
- `}
361
+ <AlertIcon
362
+ render={<InfoIcon />}
363
+ className="mt-0.5 shrink-0"
364
+ />
365
+ <div className="flex-1 space-y-0.5">
366
+ <AlertTitle>Chú ý!</AlertTitle>
367
+ <AlertDescription>
368
+ Bạn có thể thêm các component vào dự án bằng cách sử
369
+ dụng CLI.
370
+ </AlertDescription>
371
+ </div>
372
+ </Alert>`}
369
373
  >
370
374
  <Alert size={globalSize} className="flex items-start">
371
375
  <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
@@ -383,29 +387,28 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
383
387
  label="Có Nút Hành Động (With Action)"
384
388
  description="Alert kèm theo một nút tắt (dismiss) được đặt ở góc trên bên phải."
385
389
  fullWidth
386
- codeString={`<Alert
387
- color="info"
388
- className="flex items-start relative"
389
- >
390
- <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
391
- <div className="flex-1 space-y-0.5 pr-8">
392
- <AlertTitle>Tính năng mới</AlertTitle>
393
- <AlertDescription>
394
- Hãy khám phá trang thống kê dashboard hoàn toàn mới của chúng
395
- tôi.
396
- </AlertDescription>
397
- </div>
398
- <AlertAction className="absolute right-1 top-1">
399
- <Button
400
- variant="ghost"
401
- size="sm"
402
- className="size-6 p-0 group-data-[size=sm]/alert:size-5 group-data-[size=lg]/alert:size-7"
403
- >
404
- <XIcon className="size-3.5 group-data-[size=sm]/alert:size-3 group-data-[size=lg]/alert:size-4" />
405
- </Button>
406
- </AlertAction>
407
- </Alert>
408
- `}
390
+ codeString={`<Alert color="info" className="flex items-start relative">
391
+ <AlertIcon
392
+ render={<InfoIcon />}
393
+ className="mt-0.5 shrink-0"
394
+ />
395
+ <div className="flex-1 space-y-0.5 pr-8">
396
+ <AlertTitle>Tính năng mới</AlertTitle>
397
+ <AlertDescription>
398
+ Hãy khám phá trang thống kê dashboard hoàn toàn mới
399
+ của chúng tôi.
400
+ </AlertDescription>
401
+ </div>
402
+ <AlertAction className="absolute right-1 top-1">
403
+ <Button
404
+ variant="ghost"
405
+ size="sm"
406
+ className="size-6 p-0 group-data-[size=sm]/alert:size-5 group-data-[size=lg]/alert:size-7"
407
+ >
408
+ <XIcon className="size-3.5 group-data-[size=sm]/alert:size-3 group-data-[size=lg]/alert:size-4" />
409
+ </Button>
410
+ </AlertAction>
411
+ </Alert>`}
409
412
  >
410
413
  <Alert
411
414
  color="info"
@@ -440,21 +443,24 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
440
443
  description="Alert chỉ có nội dung mô tả, không có tiêu đề."
441
444
  fullWidth
442
445
  codeString={`<Alert color="info" className="flex items-start">
443
- <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
444
- <AlertDescription className="flex-1">
445
- Bạn có thể thêm các component vào dự án bằng cách sử dụng CLI.
446
- </AlertDescription>
447
- </Alert>
448
- <Alert color="warning" className="flex items-start">
449
- <AlertIcon
450
- render={<TriangleAlertIcon />}
451
- className="mt-0.5 shrink-0"
452
- />
453
- <AlertDescription className="flex-1">
454
- Bản dùng thử của bạn sẽ hết hạn trong 3 ngày nữa.
455
- </AlertDescription>
456
- </Alert>
457
- `}
446
+ <AlertIcon
447
+ render={<InfoIcon />}
448
+ className="mt-0.5 shrink-0"
449
+ />
450
+ <AlertDescription className="flex-1">
451
+ Bạn thể thêm các component vào dự án bằng cách sử
452
+ dụng CLI.
453
+ </AlertDescription>
454
+ </Alert>
455
+ <Alert color="warning" className="flex items-start">
456
+ <AlertIcon
457
+ render={<TriangleAlertIcon />}
458
+ className="mt-0.5 shrink-0"
459
+ />
460
+ <AlertDescription className="flex-1">
461
+ Bản dùng thử của bạn sẽ hết hạn trong 3 ngày nữa.
462
+ </AlertDescription>
463
+ </Alert>`}
458
464
  >
459
465
  <Alert color="info" size={globalSize} className="flex items-start">
460
466
  <AlertIcon render={<InfoIcon />} className="mt-0.5 shrink-0" />
@@ -478,25 +484,22 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
478
484
  label="Chỉ Có Chữ (Text Only)"
479
485
  description="Alert đơn giản không có icon — layout tự nhiên."
480
486
  fullWidth
481
- codeString={`<Alert
482
- color="success"
483
- className="flex flex-col gap-0.5"
484
- >
485
- <AlertTitle>Thanh toán thành công</AlertTitle>
486
- <AlertDescription>
487
- Hoá đơn #1234 của bạn đã được thanh toán hoàn tất.
488
- </AlertDescription>
489
- </Alert>
490
- <Alert
491
- color="destructive"
492
- className="flex flex-col gap-0.5"
493
- >
494
- <AlertTitle>Tài khoản bị khoá</AlertTitle>
495
- <AlertDescription>
496
- Vui lòng liên hệ với bộ phận hỗ trợ để mở khoá tài khoản.
497
- </AlertDescription>
498
- </Alert>
499
- `}
487
+ codeString={`<Alert color="success" className="flex flex-col gap-0.5">
488
+ <AlertTitle>Thanh toán thành công</AlertTitle>
489
+ <AlertDescription>
490
+ Hoá đơn #1234 của bạn đã được thanh toán hoàn tất.
491
+ </AlertDescription>
492
+ </Alert>
493
+ <Alert
494
+ color="destructive"
495
+ className="flex flex-col gap-0.5"
496
+ >
497
+ <AlertTitle>Tài khoản bị khoá</AlertTitle>
498
+ <AlertDescription>
499
+ Vui lòng liên hệ với bộ phận hỗ trợ để mở khoá tài
500
+ khoản.
501
+ </AlertDescription>
502
+ </Alert>`}
500
503
  >
501
504
  <Alert
502
505
  color="success"
@@ -526,101 +529,111 @@ function AlertMicroShowcase({ globalSize }: { globalSize: Size }) {
526
529
  description="Các kịch bản thực tế giúp bạn quyết định nên dùng Micro hay Macro."
527
530
  fullWidth
528
531
  codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
529
- {/* ── Story 1: Macro wins ── */}
530
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
531
- <div className="flex items-start gap-3">
532
- <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
533
- <CheckCircle2Icon className="size-4" aria-hidden="true" />
534
- </span>
535
- <div>
536
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
537
- Story 1 · Dùng Macro
538
- </p>
539
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">
540
- Thông báo chuẩn, cho phép tự đóng
541
- </h3>
532
+ {/* ── Story 1: Macro wins ── */}
533
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
534
+ <div className="flex items-start gap-3">
535
+ <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
536
+ <CheckCircle2Icon
537
+ className="size-4"
538
+ aria-hidden="true"
539
+ />
540
+ </span>
541
+ <div>
542
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
543
+ Story 1 · Dùng Macro
544
+ </p>
545
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
546
+ Thông báo chuẩn, cho phép tự đóng
547
+ </h3>
548
+ </div>
542
549
  </div>
543
- </div>
544
550
 
545
- <p className="text-xs text-muted-foreground leading-relaxed">
546
- Phần lớn các cảnh báo trong ứng dụng đều đi kèm Icon, Tiêu đề, Nội
547
- dung, và nút X để tự tắt (Dismiss). Dùng Macro sẽ tiết kiệm cực kỳ
548
- nhiều code.
549
- </p>
551
+ <p className="text-xs text-muted-foreground leading-relaxed">
552
+ Phần lớn các cảnh báo trong ứng dụng đều đi kèm
553
+ Icon, Tiêu đề, Nội dung, và nút X để tự tắt
554
+ (Dismiss). Dùng Macro sẽ tiết kiệm cực kỳ nhiều
555
+ code.
556
+ </p>
550
557
 
551
- <div className="rounded-lg bg-muted/50 p-3">
552
- <AlertPreset
553
- color="info"
554
- size="sm"
555
- title="Có bản cập nhật mới"
556
- description="Phiên bản 2.0.4 đã sẵn sàng để tải xuống."
557
- icon={<InfoIcon />}
558
- dismissible
559
- />
560
- </div>
558
+ <div className="rounded-lg bg-muted/50 p-3">
559
+ <AlertPreset
560
+ color="info"
561
+ size="sm"
562
+ title="Có bản cập nhật mới"
563
+ description="Phiên bản 2.0.4 đã sẵn sàng để tải xuống."
564
+ icon={<InfoIcon />}
565
+ dismissible
566
+ />
567
+ </div>
561
568
 
562
- <div className="rounded-md border border-border border-green-500/20 bg-green-500/5 px-3 py-2">
563
- <p className="text-xs font-medium text-green-700 dark:text-green-400">
564
- ✅ Dùng <code className="font-mono">AlertPreset</code> — Prop{" "}
565
- <code className="font-mono">dismissible</code> tự động xử lý
566
- state tắt Alert.
567
- </p>
568
- </div>
569
- </div>
570
-
571
- {/* ── Story 2: Micro wins ── */}
572
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
573
- <div className="flex items-start gap-3">
574
- <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
575
- <CheckCircle2Icon className="size-4" aria-hidden="true" />
576
- </span>
577
- <div>
578
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
579
- Story 2 · Dùng Micro
569
+ <div className="rounded-md border border-border border-green-500/20 bg-green-500/5 px-3 py-2">
570
+ <p className="text-xs font-medium text-green-700 dark:text-green-400">
571
+ ✅ Dùng{" "}
572
+ <code className="font-mono">AlertPreset</code>
573
+ Prop{" "}
574
+ <code className="font-mono">dismissible</code> tự
575
+ động xử lý state tắt Alert.
580
576
  </p>
581
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">
582
- Giao diện Alert không theo chuẩn
583
- </h3>
584
577
  </div>
585
578
  </div>
586
579
 
587
- <p className="text-xs text-muted-foreground leading-relaxed">
588
- Khi bạn cần tạo một Alert với layout đặc biệt, ví dụ như không có
589
- icon, hoặc muốn chèn form vào giữa. Macro sẽ bị hạn chế vì đã chốt
590
- sẵn layout Flexbox ngang.
591
- </p>
580
+ {/* ── Story 2: Micro wins ── */}
581
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
582
+ <div className="flex items-start gap-3">
583
+ <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
584
+ <CheckCircle2Icon
585
+ className="size-4"
586
+ aria-hidden="true"
587
+ />
588
+ </span>
589
+ <div>
590
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
591
+ Story 2 · Dùng Micro
592
+ </p>
593
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
594
+ Giao diện Alert không theo chuẩn
595
+ </h3>
596
+ </div>
597
+ </div>
592
598
 
593
- <div className="rounded-lg bg-muted/50 p-3">
594
- <Alert
595
- color="warning"
596
- size="sm"
597
- className="flex flex-col gap-0.5"
598
- >
599
- <AlertTitle>Bản dùng thử hết hạn</AlertTitle>
600
- <AlertDescription>
601
- Chỉ còn 3 ngày nữa. Vui lòng thanh toán!
602
- </AlertDescription>
603
- <Button
604
- variant="soft"
599
+ <p className="text-xs text-muted-foreground leading-relaxed">
600
+ Khi bạn cần tạo một Alert với layout đặc biệt, ví dụ
601
+ như không có icon, hoặc muốn chèn form vào giữa.
602
+ Macro sẽ bị hạn chế vì đã chốt sẵn layout Flexbox
603
+ ngang.
604
+ </p>
605
+
606
+ <div className="rounded-lg bg-muted/50 p-3">
607
+ <Alert
605
608
  color="warning"
606
609
  size="sm"
607
- className="mt-2 w-fit"
610
+ className="flex flex-col gap-0.5"
608
611
  >
609
- Nâng Cấp Ngay
610
- </Button>
611
- </Alert>
612
- </div>
612
+ <AlertTitle>Bản dùng thử hết hạn</AlertTitle>
613
+ <AlertDescription>
614
+ Chỉ còn 3 ngày nữa. Vui lòng thanh toán!
615
+ </AlertDescription>
616
+ <Button
617
+ variant="soft"
618
+ color="warning"
619
+ size="sm"
620
+ className="mt-2 w-fit"
621
+ >
622
+ Nâng Cấp Ngay
623
+ </Button>
624
+ </Alert>
625
+ </div>
613
626
 
614
- <div className="rounded-md border border-border border-blue-500/20 bg-blue-500/5 px-3 py-2">
615
- <p className="text-xs font-medium text-blue-700 dark:text-blue-400">
616
- ✅ Dùng <code className="font-mono">Alert</code> (Micro) — Bạn
617
- tự viết class <code className="font-mono">flex-col</code>, tự
618
- chèn nội dung thoải mái.
619
- </p>
627
+ <div className="rounded-md border border-border border-blue-500/20 bg-blue-500/5 px-3 py-2">
628
+ <p className="text-xs font-medium text-blue-700 dark:text-blue-400">
629
+ ✅ Dùng <code className="font-mono">Alert</code>{" "}
630
+ (Micro) — Bạn tự viết class{" "}
631
+ <code className="font-mono">flex-col</code>, tự
632
+ chèn nội dung thoải mái.
633
+ </p>
634
+ </div>
620
635
  </div>
621
- </div>
622
- </div>
623
- `}
636
+ </div>`}
624
637
  >
625
638
  <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
626
639
  {/* ── Story 1: Macro wins ── */}