gladvn 0.2.17 → 0.2.18

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 +1 -1
@@ -1,10 +1,3 @@
1
- import {
2
- DocsP,
3
- ExampleGrid,
4
- ExampleSection,
5
- Showcase,
6
- ShowcaseDocs,
7
- } from "../../dev/components/showcase";
8
1
  import { SlashIcon } from "lucide-react";
9
2
 
10
3
  import { BreadcrumbPreset } from "../../components/macro/breadcrumb-preset";
@@ -24,6 +17,13 @@ import {
24
17
  DropdownMenuPortal,
25
18
  DropdownMenuTrigger,
26
19
  } from "../../components/micro/dropdown-menu";
20
+ import {
21
+ DocsP,
22
+ ExampleGrid,
23
+ ExampleSection,
24
+ Showcase,
25
+ ShowcaseDocs,
26
+ } from "../../dev/components/showcase";
27
27
 
28
28
  // ──────────────────────────────────────────────────────────
29
29
  // SECTION 1: Macro Content
@@ -36,13 +36,12 @@ function BreadcrumbMacroShowcase() {
36
36
  label="Tiêu chuẩn (Standard)"
37
37
  description="Mảng điều hướng cơ bản."
38
38
  codeString={`<BreadcrumbPreset
39
- items={[
40
- { label: "Trang chủ", href: "/" },
41
- { label: "Thành phần", href: "/components" },
42
- { label: "Breadcrumb" },
43
- ]}
44
- />
45
- `}
39
+ items={[
40
+ { label: "Trang chủ", href: "/" },
41
+ { label: "Thành phần", href: "/components" },
42
+ { label: "Breadcrumb" },
43
+ ]}
44
+ />`}
46
45
  >
47
46
  <BreadcrumbPreset
48
47
  items={[
@@ -57,14 +56,13 @@ function BreadcrumbMacroShowcase() {
57
56
  label="Nhiều cấp (Deep Navigation)"
58
57
  description="Đường dẫn dài hơn điển hình cho các trang lồng nhau."
59
58
  codeString={`<BreadcrumbPreset
60
- items={[
61
- { label: "Dashboard", href: "/dashboard" },
62
- { label: "Cài đặt", href: "/settings" },
63
- { label: "Tài khoản", href: "/settings/account" },
64
- { label: "Hóa đơn" },
65
- ]}
66
- />
67
- `}
59
+ items={[
60
+ { label: "Dashboard", href: "/dashboard" },
61
+ { label: "Cài đặt", href: "/settings" },
62
+ { label: "Tài khoản", href: "/settings/account" },
63
+ { label: "Hóa đơn" },
64
+ ]}
65
+ />`}
68
66
  >
69
67
  <BreadcrumbPreset
70
68
  items={[
@@ -91,21 +89,22 @@ function BreadcrumbMicroShowcase() {
91
89
  description="Lắp ráp thủ công các item với dấu phân cách chevron mặc định."
92
90
  fullWidth
93
91
  codeString={`<Breadcrumb className="w-full max-w-lg">
94
- <BreadcrumbList>
95
- <BreadcrumbItem>
96
- <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
97
- </BreadcrumbItem>
98
- <BreadcrumbSeparator />
99
- <BreadcrumbItem>
100
- <BreadcrumbLink href="/components">Thành phần</BreadcrumbLink>
101
- </BreadcrumbItem>
102
- <BreadcrumbSeparator />
103
- <BreadcrumbItem>
104
- <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
105
- </BreadcrumbItem>
106
- </BreadcrumbList>
107
- </Breadcrumb>
108
- `}
92
+ <BreadcrumbList>
93
+ <BreadcrumbItem>
94
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
95
+ </BreadcrumbItem>
96
+ <BreadcrumbSeparator />
97
+ <BreadcrumbItem>
98
+ <BreadcrumbLink href="/components">
99
+ Thành phần
100
+ </BreadcrumbLink>
101
+ </BreadcrumbItem>
102
+ <BreadcrumbSeparator />
103
+ <BreadcrumbItem>
104
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
105
+ </BreadcrumbItem>
106
+ </BreadcrumbList>
107
+ </Breadcrumb>`}
109
108
  >
110
109
  <Breadcrumb className="w-full max-w-lg">
111
110
  <BreadcrumbList>
@@ -129,24 +128,26 @@ function BreadcrumbMicroShowcase() {
129
128
  label="Đổi dấu phân cách (Custom Separator)"
130
129
  description="Truyền icon bất kỳ (VD: SlashIcon) vào bên trong BreadcrumbSeparator."
131
130
  codeString={`<Breadcrumb className="w-full max-w-lg">
132
- <BreadcrumbList>
133
- <BreadcrumbItem>
134
- <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
135
- </BreadcrumbItem>
136
- <BreadcrumbSeparator>
137
- <SlashIcon className="size-3.5" />
138
- </BreadcrumbSeparator>
139
- <BreadcrumbItem>
140
- <BreadcrumbLink href="/components">Thành phần</BreadcrumbLink>
141
- </BreadcrumbItem>
142
- <BreadcrumbSeparator>
143
- <SlashIcon className="size-3.5" />
144
- </BreadcrumbSeparator>
145
- <BreadcrumbItem>
146
- <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
147
- </BreadcrumbItem>
148
- </BreadcrumbList>
149
- </Breadcrumb>`}
131
+ <BreadcrumbList>
132
+ <BreadcrumbItem>
133
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
134
+ </BreadcrumbItem>
135
+ <BreadcrumbSeparator>
136
+ <SlashIcon className="size-3.5" />
137
+ </BreadcrumbSeparator>
138
+ <BreadcrumbItem>
139
+ <BreadcrumbLink href="/components">
140
+ Thành phần
141
+ </BreadcrumbLink>
142
+ </BreadcrumbItem>
143
+ <BreadcrumbSeparator>
144
+ <SlashIcon className="size-3.5" />
145
+ </BreadcrumbSeparator>
146
+ <BreadcrumbItem>
147
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
148
+ </BreadcrumbItem>
149
+ </BreadcrumbList>
150
+ </Breadcrumb>`}
150
151
  >
151
152
  <Breadcrumb className="w-full max-w-lg">
152
153
  <BreadcrumbList>
@@ -173,36 +174,38 @@ function BreadcrumbMicroShowcase() {
173
174
  label="Dấu ba chấm (With Ellipsis)"
174
175
  description="Sử dụng BreadcrumbEllipsis cùng DropdownMenu để giấu các đường dẫn trung gian."
175
176
  codeString={`<Breadcrumb className="w-full max-w-lg">
176
- <BreadcrumbList>
177
- <BreadcrumbItem>
178
- <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
179
- </BreadcrumbItem>
180
- <BreadcrumbSeparator />
181
- <BreadcrumbItem>
182
- <DropdownMenu>
183
- <DropdownMenuTrigger className="flex items-center gap-1 hover:text-foreground">
184
- <BreadcrumbEllipsis className="h-4 w-4" />
185
- <span className="sr-only">Toggle menu</span>
186
- </DropdownMenuTrigger>
187
- <DropdownMenuPortal>
188
- <DropdownMenuContent align="start">
189
- <DropdownMenuItem>Tài liệu</DropdownMenuItem>
190
- <DropdownMenuItem>Giao diện</DropdownMenuItem>
191
- <DropdownMenuItem>GitHub</DropdownMenuItem>
192
- </DropdownMenuContent>
193
- </DropdownMenuPortal>
194
- </DropdownMenu>
195
- </BreadcrumbItem>
196
- <BreadcrumbSeparator />
197
- <BreadcrumbItem>
198
- <BreadcrumbLink href="/docs/components">Thành phần</BreadcrumbLink>
199
- </BreadcrumbItem>
200
- <BreadcrumbSeparator />
201
- <BreadcrumbItem>
202
- <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
203
- </BreadcrumbItem>
204
- </BreadcrumbList>
205
- </Breadcrumb>`}
177
+ <BreadcrumbList>
178
+ <BreadcrumbItem>
179
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
180
+ </BreadcrumbItem>
181
+ <BreadcrumbSeparator />
182
+ <BreadcrumbItem>
183
+ <DropdownMenu>
184
+ <DropdownMenuTrigger className="flex items-center gap-1 hover:text-foreground">
185
+ <BreadcrumbEllipsis className="h-4 w-4" />
186
+ <span className="sr-only">Toggle menu</span>
187
+ </DropdownMenuTrigger>
188
+ <DropdownMenuPortal>
189
+ <DropdownMenuContent align="start">
190
+ <DropdownMenuItem>Tài liệu</DropdownMenuItem>
191
+ <DropdownMenuItem>Giao diện</DropdownMenuItem>
192
+ <DropdownMenuItem>GitHub</DropdownMenuItem>
193
+ </DropdownMenuContent>
194
+ </DropdownMenuPortal>
195
+ </DropdownMenu>
196
+ </BreadcrumbItem>
197
+ <BreadcrumbSeparator />
198
+ <BreadcrumbItem>
199
+ <BreadcrumbLink href="/docs/components">
200
+ Thành phần
201
+ </BreadcrumbLink>
202
+ </BreadcrumbItem>
203
+ <BreadcrumbSeparator />
204
+ <BreadcrumbItem>
205
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
206
+ </BreadcrumbItem>
207
+ </BreadcrumbList>
208
+ </Breadcrumb>`}
206
209
  >
207
210
  <Breadcrumb className="w-full max-w-lg">
208
211
  <BreadcrumbList>
@@ -1,3 +1,9 @@
1
+ import { useState } from "react";
2
+
3
+ import { DownloadIcon, MailIcon, PlusIcon } from "lucide-react";
4
+
5
+ import { Button, ButtonIcon } from "../../components/micro/button";
6
+ import { Spinner } from "../../components/micro/spinner";
1
7
  import { useDevContext } from "../../dev/components/dev-context";
2
8
  import {
3
9
  DocsP,
@@ -6,11 +12,6 @@ import {
6
12
  Showcase,
7
13
  ShowcaseDocs,
8
14
  } from "../../dev/components/showcase";
9
- import { DownloadIcon, MailIcon, PlusIcon } from "lucide-react";
10
- import { useState } from "react";
11
-
12
- import { Button, ButtonIcon } from "../../components/micro/button";
13
- import { Spinner } from "../../components/micro/spinner";
14
15
  import { type Size } from "../../lib/types";
15
16
 
16
17
  function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
@@ -33,22 +34,11 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
33
34
  <ExampleSection
34
35
  label="Variants"
35
36
  description="Tất cả các kiểu hiển thị hiện có."
36
- codeString={`<Button variant="solid">
37
- Solid
38
- </Button>
39
- <Button variant="outline">
40
- Outline
41
- </Button>
42
- <Button variant="soft">
43
- Soft
44
- </Button>
45
- <Button variant="ghost">
46
- Ghost
47
- </Button>
48
- <Button variant="link">
49
- Link
50
- </Button>
51
- `}
37
+ codeString={`<Button variant="solid">Solid</Button>
38
+ <Button variant="outline">Outline</Button>
39
+ <Button variant="soft">Soft</Button>
40
+ <Button variant="ghost">Ghost</Button>
41
+ <Button variant="link">Link</Button>`}
52
42
  >
53
43
  <Button size={globalSize} variant="solid">
54
44
  Solid
@@ -71,34 +61,15 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
71
61
  <ExampleSection
72
62
  label="Colors"
73
63
  description="Các màu semantic đi kèm variant solid."
74
- codeString={`<Button color="primary">
75
- Primary
76
- </Button>
77
- <Button color="secondary">
78
- Secondary
79
- </Button>
80
- <Button color="destructive">
81
- Destructive
82
- </Button>
83
- <Button color="warning">
84
- Warning
85
- </Button>
86
- <Button color="success">
87
- Success
88
- </Button>
89
- <Button color="info">
90
- Info
91
- </Button>
92
- <Button color="tertiary">
93
- Tertiary
94
- </Button>
95
- <Button color="muted">
96
- Muted
97
- </Button>
98
- <Button color="accent">
99
- Accent
100
- </Button>
101
- `}
64
+ codeString={`<Button color="primary">Primary</Button>
65
+ <Button color="secondary">Secondary</Button>
66
+ <Button color="destructive">Destructive</Button>
67
+ <Button color="warning">Warning</Button>
68
+ <Button color="success">Success</Button>
69
+ <Button color="info">Info</Button>
70
+ <Button color="tertiary">Tertiary</Button>
71
+ <Button color="muted">Muted</Button>
72
+ <Button color="accent">Accent</Button>`}
102
73
  >
103
74
  <Button size={globalSize} color="primary">
104
75
  Primary
@@ -135,14 +106,13 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
135
106
  label="With Icon"
136
107
  description="Button kèm icon ở đầu hoặc cuối."
137
108
  codeString={`<Button variant="outline">
138
- <ButtonIcon render={<MailIcon />} />
139
- Login with Email
140
- </Button>
141
- <Button>
142
- <ButtonIcon render={<DownloadIcon />} />
143
- Download
144
- </Button>
145
- `}
109
+ <ButtonIcon render={<MailIcon />} />
110
+ Login with Email
111
+ </Button>
112
+ <Button>
113
+ <ButtonIcon render={<DownloadIcon />} />
114
+ Download
115
+ </Button>`}
146
116
  >
147
117
  <Button size={globalSize} variant="outline">
148
118
  <ButtonIcon render={<MailIcon />} />
@@ -158,15 +128,14 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
158
128
  label="Icon Only"
159
129
  description="Button vuông chỉ chứa icon."
160
130
  codeString={`<Button variant="outline" iconOnly={true}>
161
- <ButtonIcon render={<PlusIcon />} />
162
- </Button>
163
- <Button variant="ghost" iconOnly={true}>
164
- <ButtonIcon render={<MailIcon />} />
165
- </Button>
166
- <Button variant="soft" iconOnly={true}>
167
- <ButtonIcon render={<DownloadIcon />} />
168
- </Button>
169
- `}
131
+ <ButtonIcon render={<PlusIcon />} />
132
+ </Button>
133
+ <Button variant="ghost" iconOnly={true}>
134
+ <ButtonIcon render={<MailIcon />} />
135
+ </Button>
136
+ <Button variant="soft" iconOnly={true}>
137
+ <ButtonIcon render={<DownloadIcon />} />
138
+ </Button>`}
170
139
  >
171
140
  <Button size={globalSize} variant="outline" iconOnly={true}>
172
141
  <ButtonIcon render={<PlusIcon />} />
@@ -184,22 +153,19 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
184
153
  <ExampleSection
185
154
  label="Disabled"
186
155
  description="Button không thể tương tác, hiển thị mờ."
187
- codeString={`<Button disabled>
188
- Solid Disabled
189
- </Button>
190
- <Button variant="outline" disabled>
191
- Outline Disabled
192
- </Button>
193
- <Button variant="soft" disabled>
194
- Soft Disabled
195
- </Button>
196
- <Button variant="ghost" disabled>
197
- Ghost Disabled
198
- </Button>
199
- <Button variant="link" disabled>
200
- Link Disabled
201
- </Button>
202
- `}
156
+ codeString={`<Button disabled>Solid Disabled</Button>
157
+ <Button variant="outline" disabled>
158
+ Outline Disabled
159
+ </Button>
160
+ <Button variant="soft" disabled>
161
+ Soft Disabled
162
+ </Button>
163
+ <Button variant="ghost" disabled>
164
+ Ghost Disabled
165
+ </Button>
166
+ <Button variant="link" disabled>
167
+ Link Disabled
168
+ </Button>`}
203
169
  >
204
170
  <Button size={globalSize} disabled>
205
171
  Solid Disabled
@@ -224,13 +190,18 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
224
190
  label="Loading State"
225
191
  description="Button kèm Spinner khi đang xử lý async."
226
192
  fullWidth
227
- codeString={`<Button color="primary" className="w-full" disabled={isSending} onClick={handleSend}>
228
- {isSending && <Spinner />}
229
- {isSending ? "Sending..." : "Send Message"}
230
- </Button>
231
- <Button variant="outline" className="w-full">
232
- Save Draft
233
- </Button>`}
193
+ codeString={`<Button
194
+ color="primary"
195
+ className="w-full"
196
+ disabled={isSending}
197
+ onClick={handleSend}
198
+ >
199
+ {isSending && <Spinner />}
200
+ {isSending ? "Sending..." : "Send Message"}
201
+ </Button>
202
+ <Button variant="outline" className="w-full">
203
+ Save Draft
204
+ </Button>`}
234
205
  >
235
206
  <div className="flex flex-col gap-3 w-full max-w-xs mx-auto">
236
207
  <Button
@@ -253,10 +224,15 @@ function ButtonMicroShowcase({ globalSize }: { globalSize: Size }) {
253
224
  label="Destructive"
254
225
  description="Xác nhận hành động nguy hiểm (xoá dữ liệu, huỷ tài khoản...)."
255
226
  fullWidth
256
- codeString={`<Button color="destructive" className="w-full mt-1" disabled={isDeleting} onClick={handleDelete}>
257
- {isDeleting && <Spinner />}
258
- {isDeleting ? "Deleting..." : "Delete Permanently"}
259
- </Button>`}
227
+ codeString={`<Button
228
+ color="destructive"
229
+ className="w-full mt-1"
230
+ disabled={isDeleting}
231
+ onClick={handleDelete}
232
+ >
233
+ {isDeleting && <Spinner />}
234
+ {isDeleting ? "Deleting..." : "Delete Permanently"}
235
+ </Button>`}
260
236
  >
261
237
  <div className="w-full max-w-xs mx-auto rounded-lg border border-destructive/20 bg-destructive/5 p-4 flex flex-col gap-2">
262
238
  <p className="text-sm font-medium">Delete Workspace</p>
@@ -292,9 +268,9 @@ export default function ButtonShowcase() {
292
268
  generalConcept={
293
269
  <ShowcaseDocs>
294
270
  <DocsP>
295
- Thành phần cơ bản để người dùng tương tác. Hỗ trợ nhiều variant,
296
- màu sắc, icon, và trạng thái loading/disabled. Thường được dùng
297
- trong form, dialog, hoặc toolbar.
271
+ Thành phần cơ bản để người dùng tương tác. Hỗ trợ nhiều variant, màu
272
+ sắc, icon, và trạng thái loading/disabled. Thường được dùng trong
273
+ form, dialog, hoặc toolbar.
298
274
  </DocsP>
299
275
  </ShowcaseDocs>
300
276
  }
@@ -1,3 +1,9 @@
1
+ import { useState } from "react";
2
+
3
+ import { type DateRange } from "react-day-picker";
4
+
5
+ import { DatePicker } from "../../components/macro/date-picker";
6
+ import { Calendar } from "../../components/micro/calendar";
1
7
  import { useDevContext } from "../../dev/components/dev-context";
2
8
  import {
3
9
  DocsP,
@@ -6,11 +12,6 @@ import {
6
12
  Showcase,
7
13
  ShowcaseDocs,
8
14
  } from "../../dev/components/showcase";
9
- import { useState } from "react";
10
- import { type DateRange } from "react-day-picker";
11
-
12
- import { Calendar } from "../../components/micro/calendar";
13
- import { DatePicker } from "../../components/macro/date-picker";
14
15
  import { type Size } from "../../lib/types";
15
16
 
16
17
  function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
@@ -110,10 +111,10 @@ function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
110
111
  label="Disabled Dates"
111
112
  description="Vô hiệu hóa chọn ngày (VD: ngày trong quá khứ)."
112
113
  codeString={`<Calendar
113
- mode="single"
114
- disabled={(date) => date < new Date()}
115
- className="rounded-xl border border-border shadow"
116
- />`}
114
+ mode="single"
115
+ disabled={(date) => date < new Date()}
116
+ className="rounded-xl border border-border shadow"
117
+ />`}
117
118
  >
118
119
  <div className="border border-border rounded-xl inline-block bg-card p-3">
119
120
  <Calendar
@@ -132,12 +133,12 @@ function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
132
133
  label="Two Months"
133
134
  description="Hiển thị 2 tháng liền kề (numberOfMonths=2) thường dùng cho Date Range."
134
135
  codeString={`<Calendar
135
- mode="range"
136
- selected={date}
137
- onSelect={setDate}
138
- numberOfMonths={2}
139
- className="rounded-xl border border-border shadow"
140
- />`}
136
+ mode="range"
137
+ selected={date}
138
+ onSelect={setDate}
139
+ numberOfMonths={2}
140
+ className="rounded-xl border border-border shadow"
141
+ />`}
141
142
  >
142
143
  <div className="border border-border rounded-xl inline-block bg-card p-3 overflow-x-auto max-w-full">
143
144
  <Calendar
@@ -156,10 +157,10 @@ function CalendarMicroShowcase({ globalSize }: { globalSize: Size }) {
156
157
  label="With Navigation"
157
158
  description="Lịch với điều hướng thả xuống cho tháng/năm."
158
159
  codeString={`<Calendar
159
- mode="single"
160
- captionLayout="dropdown"
161
- className="rounded-xl border border-border shadow"
162
- />`}
160
+ mode="single"
161
+ captionLayout="dropdown"
162
+ className="rounded-xl border border-border shadow"
163
+ />`}
163
164
  >
164
165
  <div className="border border-border rounded-xl inline-block bg-card p-3">
165
166
  <Calendar
@@ -240,12 +241,13 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
240
241
  <ExampleSection
241
242
  label="Single Dropdown"
242
243
  description="Sổ danh sách để chọn tháng và năm nhanh chóng thay vì click qua lại liên tục."
243
- codeString={`<DatePicker className="w-64"
244
- label="Birthday"
245
- captionLayout="dropdown"
246
- startMonth={new Date(1900, 0)}
247
- endMonth={new Date()}
248
- />`}
244
+ codeString={`<DatePicker
245
+ className="w-64"
246
+ label="Birthday"
247
+ captionLayout="dropdown"
248
+ startMonth={new Date(1900, 0)}
249
+ endMonth={new Date()}
250
+ />`}
249
251
  >
250
252
  <DatePicker
251
253
  className="w-64"
@@ -261,14 +263,15 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
261
263
  <ExampleSection
262
264
  label="Range Dropdown"
263
265
  description="Sổ danh sách cho cả 2 tháng khi chọn khoảng thời gian (cần numberOfMonths={2})."
264
- codeString={`<DatePicker className="w-fit"
265
- mode="range"
266
- label="Date Range with Dropdowns"
267
- captionLayout="dropdown"
268
- numberOfMonths={2}
269
- startMonth={new Date(2020, 0)}
270
- endMonth={new Date(2030, 11)}
271
- />`}
266
+ codeString={`<DatePicker
267
+ className="w-fit"
268
+ mode="range"
269
+ label="Date Range with Dropdowns"
270
+ captionLayout="dropdown"
271
+ numberOfMonths={2}
272
+ startMonth={new Date(2020, 0)}
273
+ endMonth={new Date(2030, 11)}
274
+ />`}
272
275
  >
273
276
  <DatePicker
274
277
  className="w-fit"
@@ -289,7 +292,8 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
289
292
  <ExampleSection
290
293
  label="With Label & Description"
291
294
  description="Hiển thị label và mô tả bên dưới trigger."
292
- codeString={`<DatePicker className="w-64"
295
+ codeString={`<DatePicker
296
+ className="w-64"
293
297
  label="Start Date"
294
298
  description="Chọn ngày bắt đầu dự án."
295
299
  placeholder="Pick a date"
@@ -310,7 +314,8 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
310
314
  <ExampleSection
311
315
  label="Error State"
312
316
  description="Trigger hiển thị viền đỏ khi có errorMessage."
313
- codeString={`<DatePicker className="w-64"
317
+ codeString={`<DatePicker
318
+ className="w-64"
314
319
  label="Due Date"
315
320
  errorMessage="Due date is required."
316
321
  />`}
@@ -329,10 +334,7 @@ function CalendarMacroShowcase({ globalSize }: { globalSize: Size }) {
329
334
  <ExampleSection
330
335
  label="Disabled"
331
336
  description="Trigger bị vô hiệu hoá, người dùng không thể mở calendar."
332
- codeString={`<DatePicker className="w-64"
333
- label="Date"
334
- disabled
335
- />`}
337
+ codeString={`<DatePicker className="w-64" label="Date" disabled />`}
336
338
  >
337
339
  <DatePicker
338
340
  className="w-64"