gladvn 0.2.16 → 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 (315) 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 +2 -2
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.js +2 -2
  161. package/dist/index.js.map +1 -1
  162. package/dist/lib/utils.d.ts.map +1 -1
  163. package/package.json +3 -1
  164. package/scripts/format-codestrings.ts +87 -0
  165. package/scripts/organize-imports.ts +21 -0
  166. package/scripts/regex-format.cjs +67 -0
  167. package/scripts/tmp.tsx +25 -0
  168. package/src/components/macro/accordion-preset.test.tsx +1 -0
  169. package/src/components/macro/accordion-preset.tsx +2 -1
  170. package/src/components/macro/alert-dialog-preset.tsx +44 -43
  171. package/src/components/macro/alert-preset.tsx +7 -3
  172. package/src/components/macro/avatar-preset.tsx +2 -1
  173. package/src/components/macro/breadcrumb-preset.tsx +2 -1
  174. package/src/components/macro/card-preset.tsx +2 -1
  175. package/src/components/macro/carousel-preset.tsx +5 -2
  176. package/src/components/macro/checkbox-preset.test.tsx +1 -0
  177. package/src/components/macro/checkbox-preset.tsx +6 -2
  178. package/src/components/macro/combobox-preset.tsx +6 -3
  179. package/src/components/macro/command-preset.tsx +7 -3
  180. package/src/components/macro/date-picker.tsx +77 -59
  181. package/src/components/macro/dialog-preset.tsx +42 -38
  182. package/src/components/macro/empty-preset.tsx +2 -1
  183. package/src/components/macro/field-preset.test.tsx +1 -0
  184. package/src/components/macro/field-preset.tsx +2 -1
  185. package/src/components/macro/input-otp-preset.tsx +6 -2
  186. package/src/components/macro/input-preset.test.tsx +1 -0
  187. package/src/components/macro/input-preset.tsx +4 -2
  188. package/src/components/macro/pagination-preset.tsx +3 -1
  189. package/src/components/macro/progress-preset.test.tsx +1 -0
  190. package/src/components/macro/progress-preset.tsx +2 -1
  191. package/src/components/macro/radio-group-preset.tsx +4 -1
  192. package/src/components/macro/select-preset.tsx +35 -30
  193. package/src/components/macro/slider-preset.test.tsx +1 -0
  194. package/src/components/macro/slider-preset.tsx +4 -1
  195. package/src/components/macro/switch-preset.test.tsx +1 -0
  196. package/src/components/macro/switch-preset.tsx +4 -1
  197. package/src/components/macro/tabs-preset.test.tsx +1 -0
  198. package/src/components/macro/tabs-preset.tsx +4 -2
  199. package/src/components/macro/textarea-preset.test.tsx +1 -0
  200. package/src/components/macro/textarea-preset.tsx +4 -1
  201. package/src/components/micro/accordion.tsx +3 -2
  202. package/src/components/micro/alert-dialog.tsx +2 -1
  203. package/src/components/micro/alert.tsx +3 -2
  204. package/src/components/micro/aspect-ratio.tsx +2 -1
  205. package/src/components/micro/avatar.tsx +2 -1
  206. package/src/components/micro/badge.tsx +3 -3
  207. package/src/components/micro/breadcrumb.tsx +3 -2
  208. package/src/components/micro/button.test.tsx +1 -0
  209. package/src/components/micro/button.tsx +3 -3
  210. package/src/components/micro/calendar.tsx +10 -9
  211. package/src/components/micro/carousel.tsx +3 -2
  212. package/src/components/micro/chart.tsx +1 -0
  213. package/src/components/micro/checkbox.tsx +2 -2
  214. package/src/components/micro/collapsible.tsx +4 -2
  215. package/src/components/micro/combobox.tsx +47 -29
  216. package/src/components/micro/command.tsx +23 -16
  217. package/src/components/micro/context-menu.tsx +3 -2
  218. package/src/components/micro/dialog.tsx +2 -1
  219. package/src/components/micro/drawer.tsx +2 -1
  220. package/src/components/micro/dropdown-menu.tsx +3 -2
  221. package/src/components/micro/empty.tsx +2 -1
  222. package/src/components/micro/field.tsx +4 -3
  223. package/src/components/micro/hover-card.tsx +20 -19
  224. package/src/components/micro/input-group.tsx +5 -4
  225. package/src/components/micro/input-otp.tsx +3 -2
  226. package/src/components/micro/input.tsx +3 -2
  227. package/src/components/micro/item.tsx +1 -0
  228. package/src/components/micro/label.tsx +2 -1
  229. package/src/components/micro/menubar.tsx +2 -1
  230. package/src/components/micro/navigation-menu.tsx +18 -17
  231. package/src/components/micro/pagination.tsx +2 -1
  232. package/src/components/micro/popover.tsx +2 -1
  233. package/src/components/micro/progress.tsx +2 -1
  234. package/src/components/micro/radio-group.tsx +3 -3
  235. package/src/components/micro/select.tsx +5 -4
  236. package/src/components/micro/sheet.tsx +2 -1
  237. package/src/components/micro/sidebar.tsx +4 -1
  238. package/src/components/micro/skeleton.tsx +2 -1
  239. package/src/components/micro/slider.tsx +4 -1
  240. package/src/components/micro/sonner.tsx +2 -1
  241. package/src/components/micro/spinner.tsx +1 -2
  242. package/src/components/micro/switch.tsx +2 -2
  243. package/src/components/micro/table.tsx +2 -1
  244. package/src/components/micro/tabs.tsx +4 -3
  245. package/src/components/micro/textarea.tsx +2 -1
  246. package/src/components/micro/toggle-group.tsx +1 -0
  247. package/src/components/micro/toggle.tsx +1 -3
  248. package/src/components/micro/tooltip.tsx +9 -3
  249. package/src/dev/App.tsx +66 -41
  250. package/src/dev/components/code-highlighter.tsx +2 -1
  251. package/src/dev/components/dev-context.tsx +1 -0
  252. package/src/dev/components/showcase.tsx +13 -14
  253. package/src/dev/data.ts +206 -52
  254. package/src/dev/main.tsx +4 -4
  255. package/src/dev/sections/buttons.tsx +14 -12
  256. package/src/dev/sections/feedback.tsx +7 -2
  257. package/src/dev/sections/forms.tsx +11 -11
  258. package/src/dev/sections/overview.tsx +2 -1
  259. package/src/dev/showcase/accordion.tsx +399 -314
  260. package/src/dev/showcase/alert-dialog.tsx +387 -384
  261. package/src/dev/showcase/alert.tsx +271 -258
  262. package/src/dev/showcase/aspect-ratio.tsx +102 -105
  263. package/src/dev/showcase/avatar.tsx +216 -145
  264. package/src/dev/showcase/badge.tsx +78 -50
  265. package/src/dev/showcase/breadcrumb.tsx +88 -85
  266. package/src/dev/showcase/button.tsx +72 -96
  267. package/src/dev/showcase/calendar.tsx +41 -39
  268. package/src/dev/showcase/card.tsx +170 -148
  269. package/src/dev/showcase/carousel.tsx +239 -77
  270. package/src/dev/showcase/chart.tsx +5 -4
  271. package/src/dev/showcase/checkbox.tsx +206 -140
  272. package/src/dev/showcase/collapsible.tsx +108 -84
  273. package/src/dev/showcase/combobox.tsx +272 -199
  274. package/src/dev/showcase/command.tsx +31 -28
  275. package/src/dev/showcase/context-menu.tsx +94 -77
  276. package/src/dev/showcase/dialog.tsx +445 -424
  277. package/src/dev/showcase/drawer.tsx +142 -135
  278. package/src/dev/showcase/dropdown-menu.tsx +165 -161
  279. package/src/dev/showcase/empty.tsx +173 -158
  280. package/src/dev/showcase/hover-card.tsx +92 -52
  281. package/src/dev/showcase/input-group.tsx +193 -160
  282. package/src/dev/showcase/input-otp.tsx +109 -99
  283. package/src/dev/showcase/input.tsx +78 -42
  284. package/src/dev/showcase/item.tsx +101 -98
  285. package/src/dev/showcase/kbd.tsx +78 -62
  286. package/src/dev/showcase/label.tsx +16 -23
  287. package/src/dev/showcase/menubar.tsx +274 -251
  288. package/src/dev/showcase/navigation-menu.tsx +175 -170
  289. package/src/dev/showcase/overview.tsx +164 -148
  290. package/src/dev/showcase/pagination.tsx +101 -69
  291. package/src/dev/showcase/popover.tsx +113 -86
  292. package/src/dev/showcase/progress.tsx +99 -69
  293. package/src/dev/showcase/radio-group.tsx +217 -134
  294. package/src/dev/showcase/resizable.tsx +65 -55
  295. package/src/dev/showcase/scroll-area.tsx +32 -22
  296. package/src/dev/showcase/select.tsx +192 -136
  297. package/src/dev/showcase/separator.tsx +28 -24
  298. package/src/dev/showcase/sheet.tsx +182 -134
  299. package/src/dev/showcase/sidebar.tsx +9 -5
  300. package/src/dev/showcase/skeleton.tsx +54 -59
  301. package/src/dev/showcase/slider.tsx +158 -129
  302. package/src/dev/showcase/sonner.tsx +3 -5
  303. package/src/dev/showcase/spinner.tsx +22 -18
  304. package/src/dev/showcase/switch.tsx +207 -110
  305. package/src/dev/showcase/table.tsx +44 -32
  306. package/src/dev/showcase/tabs.tsx +272 -267
  307. package/src/dev/showcase/textarea.tsx +162 -116
  308. package/src/dev/showcase/theme-provider.tsx +596 -534
  309. package/src/dev/showcase/toast.tsx +37 -38
  310. package/src/dev/showcase/toggle-group.tsx +87 -39
  311. package/src/dev/showcase/toggle.tsx +36 -27
  312. package/src/dev/showcase/tooltip.tsx +154 -119
  313. package/src/lib/utils.test.ts +1 -0
  314. package/src/lib/utils.ts +1 -1
  315. package/src/styles/gladvn.css +1 -1
@@ -1,18 +1,9 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
2
- import {
3
- DocsP,
4
- ExampleGrid,
5
- ExampleSection,
6
- Showcase,
7
- ShowcaseDocs,
8
- } from "../../dev/components/showcase";
9
1
  import {
10
2
  CheckCircle2Icon,
11
3
  CheckIcon,
12
4
  LayersIcon,
13
5
  UserIcon,
14
6
  } from "lucide-react";
15
- import { useState } from "react";
16
7
 
17
8
  import { AvatarPreset } from "../../components/macro/avatar-preset";
18
9
  import {
@@ -23,6 +14,14 @@ import {
23
14
  AvatarGroupCount,
24
15
  AvatarImage,
25
16
  } from "../../components/micro/avatar";
17
+ import { useDevContext } from "../../dev/components/dev-context";
18
+ import {
19
+ DocsP,
20
+ ExampleGrid,
21
+ ExampleSection,
22
+ Showcase,
23
+ ShowcaseDocs,
24
+ } from "../../dev/components/showcase";
26
25
  import { type Size } from "../../lib/types";
27
26
 
28
27
  // ──────────────────────────────────────────────────────────
@@ -36,11 +35,13 @@ function AvatarMacroShowcase({ globalSize }: { globalSize: Size }) {
36
35
  label="Tiêu chuẩn (Standard)"
37
36
  description="Avatar tự động fallback dựa vào tên truyền vào alt."
38
37
  codeString={`<div className="flex items-center gap-4">
39
- <AvatarPreset src="https://github.com/shadcn.png" alt="Shadcn" />
40
- <AvatarPreset alt="John Doe" />
41
- <AvatarPreset />
42
- </div>
43
- `}
38
+ <AvatarPreset
39
+ src="https://github.com/shadcn.png"
40
+ alt="Shadcn"
41
+ />
42
+ <AvatarPreset alt="John Doe" />
43
+ <AvatarPreset />
44
+ </div>`}
44
45
  >
45
46
  <div className="flex items-center gap-4">
46
47
  <AvatarPreset
@@ -57,11 +58,14 @@ function AvatarMacroShowcase({ globalSize }: { globalSize: Size }) {
57
58
  label="Trạng thái (Status)"
58
59
  description="Hỗ trợ sẵn các trạng thái: online, offline, away."
59
60
  codeString={`<div className="flex items-center gap-4">
60
- <AvatarPreset src="https://github.com/shadcn.png" alt="Shadcn" status="online" />
61
- <AvatarPreset alt="Alice" status="away" />
62
- <AvatarPreset status="offline" />
63
- </div>
64
- `}
61
+ <AvatarPreset
62
+ src="https://github.com/shadcn.png"
63
+ alt="Shadcn"
64
+ status="online"
65
+ />
66
+ <AvatarPreset alt="Alice" status="away" />
67
+ <AvatarPreset status="offline" />
68
+ </div>`}
65
69
  >
66
70
  <div className="flex items-center gap-4">
67
71
  <AvatarPreset
@@ -81,11 +85,14 @@ function AvatarMacroShowcase({ globalSize }: { globalSize: Size }) {
81
85
  description="Kết hợp Preset với AvatarGroup để tiết kiệm code."
82
86
  fullWidth
83
87
  codeString={`<AvatarGroup>
84
- <AvatarPreset src="https://github.com/shadcn.png" alt="Shadcn" />
85
- <AvatarPreset alt="Alice Smith" />
86
- <AvatarPreset alt="Bob Jones" />
87
- <AvatarGroupCount>+3</AvatarGroupCount>
88
- </AvatarGroup>`}
88
+ <AvatarPreset
89
+ src="https://github.com/shadcn.png"
90
+ alt="Shadcn"
91
+ />
92
+ <AvatarPreset alt="Alice Smith" />
93
+ <AvatarPreset alt="Bob Jones" />
94
+ <AvatarGroupCount>+3</AvatarGroupCount>
95
+ </AvatarGroup>`}
89
96
  >
90
97
  <div className="flex flex-col gap-4">
91
98
  <AvatarGroup>
@@ -115,20 +122,28 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
115
122
  label="Với Hình ảnh (With Image)"
116
123
  description="Hiển thị ảnh và sẽ fallback về chữ nếu ảnh lỗi."
117
124
  codeString={`<div className="flex items-center gap-4">
118
- <Avatar>
119
- <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
120
- <AvatarFallback>CN</AvatarFallback>
121
- </Avatar>
122
- <Avatar>
123
- <AvatarImage src="https://github.com/vercel.png" alt="@vercel" />
124
- <AvatarFallback>VC</AvatarFallback>
125
- </Avatar>
126
- <Avatar>
127
- <AvatarImage src="https://github.com/leerob.png" alt="@leerob" />
128
- <AvatarFallback>LR</AvatarFallback>
129
- </Avatar>
130
- </div>
131
- `}
125
+ <Avatar>
126
+ <AvatarImage
127
+ src="https://github.com/shadcn.png"
128
+ alt="@shadcn"
129
+ />
130
+ <AvatarFallback>CN</AvatarFallback>
131
+ </Avatar>
132
+ <Avatar>
133
+ <AvatarImage
134
+ src="https://github.com/vercel.png"
135
+ alt="@vercel"
136
+ />
137
+ <AvatarFallback>VC</AvatarFallback>
138
+ </Avatar>
139
+ <Avatar>
140
+ <AvatarImage
141
+ src="https://github.com/leerob.png"
142
+ alt="@leerob"
143
+ />
144
+ <AvatarFallback>LR</AvatarFallback>
145
+ </Avatar>
146
+ </div>`}
132
147
  >
133
148
  <div className="flex items-center gap-4">
134
149
  <Avatar size={globalSize}>
@@ -150,20 +165,36 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
150
165
  label="Lỗi Ảnh & Chỉ có Fallback"
151
166
  description="Khi không có ảnh hoặc ảnh lỗi, fallback sẽ hiển thị."
152
167
  codeString={`<div className="flex items-center gap-4">
153
- <Avatar>
154
- <AvatarImage src="https://broken-url.invalid/avatar.png" alt="broken" />
155
- <AvatarFallback>BR</AvatarFallback>
156
- </Avatar>
157
- <Avatar>
158
- <AvatarFallback>JD</AvatarFallback>
159
- </Avatar>
160
- <Avatar>
161
- <AvatarFallback>
162
- <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="size-4"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg>
163
- </AvatarFallback>
164
- </Avatar>
165
- </div>
166
- `}
168
+ <Avatar>
169
+ <AvatarImage
170
+ src="https://broken-url.invalid/avatar.png"
171
+ alt="broken"
172
+ />
173
+ <AvatarFallback>BR</AvatarFallback>
174
+ </Avatar>
175
+ <Avatar>
176
+ <AvatarFallback>JD</AvatarFallback>
177
+ </Avatar>
178
+ <Avatar>
179
+ <AvatarFallback>
180
+ <svg
181
+ xmlns="http://www.w3.org/2000/svg"
182
+ width="24"
183
+ height="24"
184
+ viewBox="0 0 24 24"
185
+ fill="none"
186
+ stroke="currentColor"
187
+ strokeWidth="2"
188
+ strokeLinecap="round"
189
+ strokeLinejoin="round"
190
+ className="size-4"
191
+ >
192
+ <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" />
193
+ <circle cx="12" cy="7" r="4" />
194
+ </svg>
195
+ </AvatarFallback>
196
+ </Avatar>
197
+ </div>`}
167
198
  >
168
199
  <div className="flex items-center gap-4">
169
200
  <Avatar size={globalSize}>
@@ -203,24 +234,33 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
203
234
  label="Huy hiệu (With Badge)"
204
235
  description="Bạn có thể tự định vị Badge ở bất cứ đâu trên Avatar."
205
236
  codeString={`<div className="flex items-center gap-6">
206
- <div className="flex flex-col items-center gap-2">
207
- <Avatar>
208
- <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
209
- <AvatarFallback>CN</AvatarFallback>
210
- <AvatarBadge className="absolute z-10 right-0 bottom-0 bg-green-500" />
211
- </Avatar>
212
- <span className="text-xs text-muted-foreground">Online</span>
213
- </div>
214
- <div className="flex flex-col items-center gap-2">
215
- <Avatar>
216
- <AvatarImage src="https://github.com/vercel.png" alt="@vercel" />
217
- <AvatarFallback>VC</AvatarFallback>
218
- <AvatarBadge className="absolute z-10 right-0 top-0 bg-red-500" />
219
- </Avatar>
220
- <span className="text-xs text-muted-foreground">Notification</span>
221
- </div>
222
- </div>
223
- `}
237
+ <div className="flex flex-col items-center gap-2">
238
+ <Avatar>
239
+ <AvatarImage
240
+ src="https://github.com/shadcn.png"
241
+ alt="@shadcn"
242
+ />
243
+ <AvatarFallback>CN</AvatarFallback>
244
+ <AvatarBadge className="absolute z-10 right-0 bottom-0 bg-green-500" />
245
+ </Avatar>
246
+ <span className="text-xs text-muted-foreground">
247
+ Online
248
+ </span>
249
+ </div>
250
+ <div className="flex flex-col items-center gap-2">
251
+ <Avatar>
252
+ <AvatarImage
253
+ src="https://github.com/vercel.png"
254
+ alt="@vercel"
255
+ />
256
+ <AvatarFallback>VC</AvatarFallback>
257
+ <AvatarBadge className="absolute z-10 right-0 top-0 bg-red-500" />
258
+ </Avatar>
259
+ <span className="text-xs text-muted-foreground">
260
+ Notification
261
+ </span>
262
+ </div>
263
+ </div>`}
224
264
  >
225
265
  <div className="flex items-center gap-6">
226
266
  <div className="flex flex-col items-center gap-2">
@@ -247,20 +287,28 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
247
287
  label="Nhóm cơ bản (Basic Group)"
248
288
  description="Xếp chồng nhiều avatar lên nhau."
249
289
  codeString={`<AvatarGroup>
250
- <Avatar>
251
- <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
252
- <AvatarFallback>CN</AvatarFallback>
253
- </Avatar>
254
- <Avatar>
255
- <AvatarImage src="https://github.com/vercel.png" alt="@vercel" />
256
- <AvatarFallback>VC</AvatarFallback>
257
- </Avatar>
258
- <Avatar>
259
- <AvatarImage src="https://github.com/leerob.png" alt="@leerob" />
260
- <AvatarFallback>LR</AvatarFallback>
261
- </Avatar>
262
- </AvatarGroup>
263
- `}
290
+ <Avatar>
291
+ <AvatarImage
292
+ src="https://github.com/shadcn.png"
293
+ alt="@shadcn"
294
+ />
295
+ <AvatarFallback>CN</AvatarFallback>
296
+ </Avatar>
297
+ <Avatar>
298
+ <AvatarImage
299
+ src="https://github.com/vercel.png"
300
+ alt="@vercel"
301
+ />
302
+ <AvatarFallback>VC</AvatarFallback>
303
+ </Avatar>
304
+ <Avatar>
305
+ <AvatarImage
306
+ src="https://github.com/leerob.png"
307
+ alt="@leerob"
308
+ />
309
+ <AvatarFallback>LR</AvatarFallback>
310
+ </Avatar>
311
+ </AvatarGroup>`}
264
312
  >
265
313
  <AvatarGroup>
266
314
  <Avatar size={globalSize}>
@@ -282,17 +330,22 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
282
330
  label="Kèm bộ đếm (With Count)"
283
331
  description="Hiển thị những avatar còn lại bị ẩn."
284
332
  codeString={`<AvatarGroup>
285
- <Avatar>
286
- <AvatarImage src="https://github.com/shadcn.png" alt="@shadcn" />
287
- <AvatarFallback>CN</AvatarFallback>
288
- </Avatar>
289
- <Avatar>
290
- <AvatarImage src="https://github.com/vercel.png" alt="@vercel" />
291
- <AvatarFallback>VC</AvatarFallback>
292
- </Avatar>
293
- <AvatarGroupCount>+12</AvatarGroupCount>
294
- </AvatarGroup>
295
- `}
333
+ <Avatar>
334
+ <AvatarImage
335
+ src="https://github.com/shadcn.png"
336
+ alt="@shadcn"
337
+ />
338
+ <AvatarFallback>CN</AvatarFallback>
339
+ </Avatar>
340
+ <Avatar>
341
+ <AvatarImage
342
+ src="https://github.com/vercel.png"
343
+ alt="@vercel"
344
+ />
345
+ <AvatarFallback>VC</AvatarFallback>
346
+ </Avatar>
347
+ <AvatarGroupCount>+12</AvatarGroupCount>
348
+ </AvatarGroup>`}
296
349
  >
297
350
  <AvatarGroup>
298
351
  <Avatar size={globalSize}>
@@ -313,60 +366,77 @@ function AvatarMicroShowcase({ globalSize }: { globalSize: Size }) {
313
366
  description="Các kịch bản thực tế giúp bạn quyết định nên dùng Micro hay Macro."
314
367
  fullWidth
315
368
  codeString={`<div className="grid grid-cols-1 gap-6 md:grid-cols-2">
316
- {/* ── Story 1: Macro wins ── */}
317
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
318
- <div className="flex items-start gap-3">
319
- <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
320
- <CheckCircle2Icon className="size-4" aria-hidden="true" />
321
- </span>
322
- <div>
323
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
324
- Story 1 · Dùng Macro
325
- </p>
326
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">
327
- Hiển thị Avatar chuẩn với URL và Fallback
328
- </h3>
369
+ {/* ── Story 1: Macro wins ── */}
370
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
371
+ <div className="flex items-start gap-3">
372
+ <span className="mt-0.5 shrink-0 rounded-full bg-green-500/10 p-1.5 text-green-600">
373
+ <CheckCircle2Icon
374
+ className="size-4"
375
+ aria-hidden="true"
376
+ />
377
+ </span>
378
+ <div>
379
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
380
+ Story 1 · Dùng Macro
381
+ </p>
382
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
383
+ Hiển thị Avatar chuẩn với URL và Fallback
384
+ </h3>
385
+ </div>
386
+ </div>
387
+ <p className="text-xs text-muted-foreground leading-relaxed">
388
+ Hầu hết các trường hợp bạn chỉ có một URL hình ảnh
389
+ và một cái tên. Macro tự động hiển thị ảnh, nếu ảnh
390
+ lỗi thì tự sinh chữ viết tắt dựa trên tên cực kỳ
391
+ tiện lợi mà không cần viết nhiều code.
392
+ </p>
393
+ <div className="rounded-lg bg-muted/50 p-3 flex justify-center">
394
+ <AvatarPreset
395
+ src="https://github.com/shadcn.png"
396
+ alt="Shadcn"
397
+ size="lg"
398
+ />
329
399
  </div>
330
400
  </div>
331
- <p className="text-xs text-muted-foreground leading-relaxed">
332
- Hầu hết các trường hợp bạn chỉ có một URL hình ảnh và một cái tên. Macro tự động hiển thị ảnh, nếu ảnh lỗi thì tự sinh chữ viết tắt dựa trên tên cực kỳ tiện lợi mà không cần viết nhiều code.
333
- </p>
334
- <div className="rounded-lg bg-muted/50 p-3 flex justify-center">
335
- <AvatarPreset src="https://github.com/shadcn.png" alt="Shadcn" size="lg" />
336
- </div>
337
- </div>
338
401
 
339
- {/* ── Story 2: Micro wins ── */}
340
- <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
341
- <div className="flex items-start gap-3">
342
- <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
343
- <LayersIcon className="size-4" aria-hidden="true" />
344
- </span>
345
- <div>
346
- <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
347
- Story 2 · Dùng Micro
348
- </p>
349
- <h3 className="mt-0.5 text-sm font-semibold text-foreground">
350
- Layout Fallback phức tạp hoặc tích hợp Badge đặc thù
351
- </h3>
402
+ {/* ── Story 2: Micro wins ── */}
403
+ <div className="rounded-xl border border-border bg-card p-5 flex flex-col gap-4">
404
+ <div className="flex items-start gap-3">
405
+ <span className="mt-0.5 shrink-0 rounded-full bg-blue-500/10 p-1.5 text-blue-600">
406
+ <LayersIcon
407
+ className="size-4"
408
+ aria-hidden="true"
409
+ />
410
+ </span>
411
+ <div>
412
+ <p className="text-xs font-semibold uppercase tracking-wider text-muted-foreground">
413
+ Story 2 · Dùng Micro
414
+ </p>
415
+ <h3 className="mt-0.5 text-sm font-semibold text-foreground">
416
+ Layout Fallback phức tạp hoặc tích hợp Badge đặc
417
+ thù
418
+ </h3>
419
+ </div>
420
+ </div>
421
+ <p className="text-xs text-muted-foreground leading-relaxed">
422
+ Khi bạn muốn Fallback là một Icon thay vì Text, hoặc
423
+ muốn đính kèm một Badge tùy chỉnh hoàn toàn tự do
424
+ (như icon viền, thông báo tin nhắn), bạn phải dùng
425
+ Primitive để lắp ghép.
426
+ </p>
427
+ <div className="rounded-lg bg-muted/50 p-3 flex justify-center">
428
+ <Avatar size="lg">
429
+ <AvatarImage src="/broken.png" alt="Avatar" />
430
+ <AvatarFallback>
431
+ <UserIcon className="size-1/2 text-muted-foreground" />
432
+ </AvatarFallback>
433
+ <AvatarBadge className="bg-blue-500">
434
+ <CheckIcon className="size-2 text-white" />
435
+ </AvatarBadge>
436
+ </Avatar>
352
437
  </div>
353
438
  </div>
354
- <p className="text-xs text-muted-foreground leading-relaxed">
355
- Khi bạn muốn Fallback là một Icon thay vì Text, hoặc muốn đính kèm một Badge tùy chỉnh hoàn toàn tự do (như icon viền, thông báo tin nhắn), bạn phải dùng Primitive để lắp ghép.
356
- </p>
357
- <div className="rounded-lg bg-muted/50 p-3 flex justify-center">
358
- <Avatar size="lg">
359
- <AvatarImage src="/broken.png" alt="Avatar" />
360
- <AvatarFallback>
361
- <UserIcon className="size-1/2 text-muted-foreground" />
362
- </AvatarFallback>
363
- <AvatarBadge className="bg-blue-500">
364
- <CheckIcon className="size-2 text-white" />
365
- </AvatarBadge>
366
- </Avatar>
367
- </div>
368
- </div>
369
- </div>`}
439
+ </div>`}
370
440
  >
371
441
  <div className="grid grid-cols-1 gap-6 md:grid-cols-2">
372
442
  {/* ── Story 1: Macro wins ── */}
@@ -451,7 +521,8 @@ export default function AvatarShowcase() {
451
521
  <ShowcaseDocs>
452
522
  <DocsP>
453
523
  Dùng để hiển thị hình ảnh đại diện cho người dùng, nhóm hoặc tổ
454
- chức. Hỗ trợ tự động hiển thị chữ cái viết tắt hoặc icon mặc định khi không tải được ảnh.
524
+ chức. Hỗ trợ tự động hiển thị chữ cái viết tắt hoặc icon mặc định
525
+ khi không tải được ảnh.
455
526
  </DocsP>
456
527
  </ShowcaseDocs>
457
528
  }
@@ -1,5 +1,7 @@
1
- import { useDevContext } from "../../dev/components/dev-context";
1
+ import { AlertTriangleIcon, CheckIcon, InfoIcon, XIcon } from "lucide-react";
2
+
2
3
  import { Badge } from "../../components/micro/badge";
4
+ import { useDevContext } from "../../dev/components/dev-context";
3
5
  import {
4
6
  DocsCode,
5
7
  DocsP,
@@ -9,8 +11,6 @@ import {
9
11
  ShowcaseDocs,
10
12
  } from "../../dev/components/showcase";
11
13
  import { type Size } from "../../lib/types";
12
- import { AlertTriangleIcon, CheckIcon, InfoIcon, XIcon } from "lucide-react";
13
- import { useState } from "react";
14
14
 
15
15
  export default function BadgeShowcase() {
16
16
  const { size: globalSize } = useDevContext();
@@ -45,8 +45,8 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
45
45
  label="Variants"
46
46
  description="Tất cả các kiểu hiển thị hiện có."
47
47
  codeString={`<Badge variant="solid">Solid</Badge>
48
- <Badge variant="soft">Soft</Badge>
49
- <Badge variant="outline">Outline</Badge>`}
48
+ <Badge variant="soft">Soft</Badge>
49
+ <Badge variant="outline">Outline</Badge>`}
50
50
  >
51
51
  <Badge variant="solid">Solid</Badge>
52
52
  <Badge variant="soft">Soft</Badge>
@@ -59,12 +59,12 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
59
59
  label="Solid Colors"
60
60
  description="Các màu semantic áp dụng cho Badge dạng Solid."
61
61
  codeString={`<Badge color="primary">Primary</Badge>
62
- <Badge color="secondary">Secondary</Badge>
63
- <Badge color="destructive">Destructive</Badge>
64
- <Badge color="warning">Warning</Badge>
65
- <Badge color="success">Success</Badge>
66
- <Badge color="info">Info</Badge>
67
- <Badge color="muted">Muted</Badge>`}
62
+ <Badge color="secondary">Secondary</Badge>
63
+ <Badge color="destructive">Destructive</Badge>
64
+ <Badge color="warning">Warning</Badge>
65
+ <Badge color="success">Success</Badge>
66
+ <Badge color="info">Info</Badge>
67
+ <Badge color="muted">Muted</Badge>`}
68
68
  >
69
69
  <Badge color="primary">Primary</Badge>
70
70
  <Badge color="secondary">Secondary</Badge>
@@ -78,13 +78,27 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
78
78
  <ExampleSection
79
79
  label="Soft Colors"
80
80
  description="Các màu semantic áp dụng cho Badge dạng Soft."
81
- codeString={`<Badge variant="soft" color="primary">Primary</Badge>
82
- <Badge variant="soft" color="secondary">Secondary</Badge>
83
- <Badge variant="soft" color="destructive">Destructive</Badge>
84
- <Badge variant="soft" color="warning">Warning</Badge>
85
- <Badge variant="soft" color="success">Success</Badge>
86
- <Badge variant="soft" color="info">Info</Badge>
87
- <Badge variant="soft" color="muted">Muted</Badge>`}
81
+ codeString={`<Badge variant="soft" color="primary">
82
+ Primary
83
+ </Badge>
84
+ <Badge variant="soft" color="secondary">
85
+ Secondary
86
+ </Badge>
87
+ <Badge variant="soft" color="destructive">
88
+ Destructive
89
+ </Badge>
90
+ <Badge variant="soft" color="warning">
91
+ Warning
92
+ </Badge>
93
+ <Badge variant="soft" color="success">
94
+ Success
95
+ </Badge>
96
+ <Badge variant="soft" color="info">
97
+ Info
98
+ </Badge>
99
+ <Badge variant="soft" color="muted">
100
+ Muted
101
+ </Badge>`}
88
102
  >
89
103
  <Badge variant="soft" color="primary">
90
104
  Primary
@@ -115,24 +129,24 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
115
129
  label="With Icons"
116
130
  description="Badge kèm icon để bổ sung ngữ cảnh."
117
131
  codeString={`<Badge color="success">
118
- <CheckIcon className="size-3.5" />
119
- Approved
120
- </Badge>
132
+ <CheckIcon className="size-3.5" />
133
+ Approved
134
+ </Badge>
121
135
 
122
- <Badge color="destructive">
123
- <XIcon className="size-3.5" />
124
- Rejected
125
- </Badge>
136
+ <Badge color="destructive">
137
+ <XIcon className="size-3.5" />
138
+ Rejected
139
+ </Badge>
126
140
 
127
- <Badge color="warning" variant="soft">
128
- <AlertTriangleIcon className="size-3.5" />
129
- Pending
130
- </Badge>
141
+ <Badge color="warning" variant="soft">
142
+ <AlertTriangleIcon className="size-3.5" />
143
+ Pending
144
+ </Badge>
131
145
 
132
- <Badge color="info" variant="outline">
133
- <InfoIcon className="size-3.5" />
134
- Draft
135
- </Badge>`}
146
+ <Badge color="info" variant="outline">
147
+ <InfoIcon className="size-3.5" />
148
+ Draft
149
+ </Badge>`}
136
150
  >
137
151
  <Badge color="success">
138
152
  <CheckIcon className="size-3.5" />
@@ -157,10 +171,18 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
157
171
  <ExampleSection
158
172
  label="Status Indicators"
159
173
  description="Dùng để hiển thị trạng thái."
160
- codeString={`<Badge color="success" variant="soft">Active</Badge>
161
- <Badge color="secondary" variant="soft">Inactive</Badge>
162
- <Badge color="destructive" variant="soft">Expired</Badge>
163
- <Badge color="muted" variant="outline">Archived</Badge>`}
174
+ codeString={`<Badge color="success" variant="soft">
175
+ Active
176
+ </Badge>
177
+ <Badge color="secondary" variant="soft">
178
+ Inactive
179
+ </Badge>
180
+ <Badge color="destructive" variant="soft">
181
+ Expired
182
+ </Badge>
183
+ <Badge color="muted" variant="outline">
184
+ Archived
185
+ </Badge>`}
164
186
  >
165
187
  <Badge color="success" variant="soft">
166
188
  Active
@@ -178,10 +200,18 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
178
200
  <ExampleSection
179
201
  label="Tags & Categories"
180
202
  description="Dùng để hiển thị danh mục."
181
- codeString={`<Badge variant="outline" color="primary">React</Badge>
182
- <Badge variant="outline" color="secondary">TypeScript</Badge>
183
- <Badge variant="outline" color="info">Tailwind</Badge>
184
- <Badge variant="outline" color="warning">Vite</Badge>`}
203
+ codeString={`<Badge variant="outline" color="primary">
204
+ React
205
+ </Badge>
206
+ <Badge variant="outline" color="secondary">
207
+ TypeScript
208
+ </Badge>
209
+ <Badge variant="outline" color="info">
210
+ Tailwind
211
+ </Badge>
212
+ <Badge variant="outline" color="warning">
213
+ Vite
214
+ </Badge>`}
185
215
  >
186
216
  <Badge variant="outline" color="primary">
187
217
  React
@@ -202,17 +232,15 @@ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
202
232
  <ExampleSection
203
233
  label="As Link"
204
234
  description="Badge render dưới dạng thẻ a nhờ prop render."
205
- codeString={`<Badge render={<a href="#" />}>
206
- Clickable Badge
207
- </Badge>
235
+ codeString={`<Badge render={<a href="#" />}>Clickable Badge</Badge>
208
236
 
209
- <Badge color="secondary" render={<a href="#" />}>
210
- Secondary Link
211
- </Badge>
237
+ <Badge color="secondary" render={<a href="#" />}>
238
+ Secondary Link
239
+ </Badge>
212
240
 
213
- <Badge variant="outline" render={<a href="#" />}>
214
- Outline Link
215
- </Badge>`}
241
+ <Badge variant="outline" render={<a href="#" />}>
242
+ Outline Link
243
+ </Badge>`}
216
244
  >
217
245
  <Badge render={<a href="#" />}>Clickable Badge</Badge>
218
246
  <Badge color="secondary" render={<a href="#" />}>