gladvn 0.2.14

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 (500) hide show
  1. package/README.md +112 -0
  2. package/bin/cli.js +326 -0
  3. package/dist/components/macro/accordion-preset.d.ts +14 -0
  4. package/dist/components/macro/accordion-preset.d.ts.map +1 -0
  5. package/dist/components/macro/alert-dialog-preset.d.ts +26 -0
  6. package/dist/components/macro/alert-dialog-preset.d.ts.map +1 -0
  7. package/dist/components/macro/alert-preset.d.ts +14 -0
  8. package/dist/components/macro/alert-preset.d.ts.map +1 -0
  9. package/dist/components/macro/avatar-preset.d.ts +11 -0
  10. package/dist/components/macro/avatar-preset.d.ts.map +1 -0
  11. package/dist/components/macro/breadcrumb-preset.d.ts +12 -0
  12. package/dist/components/macro/breadcrumb-preset.d.ts.map +1 -0
  13. package/dist/components/macro/card-preset.d.ts +10 -0
  14. package/dist/components/macro/card-preset.d.ts.map +1 -0
  15. package/dist/components/macro/carousel-preset.d.ts +18 -0
  16. package/dist/components/macro/carousel-preset.d.ts.map +1 -0
  17. package/dist/components/macro/checkbox-preset.d.ts +14 -0
  18. package/dist/components/macro/checkbox-preset.d.ts.map +1 -0
  19. package/dist/components/macro/combobox-preset.d.ts +27 -0
  20. package/dist/components/macro/combobox-preset.d.ts.map +1 -0
  21. package/dist/components/macro/command-preset.d.ts +16 -0
  22. package/dist/components/macro/command-preset.d.ts.map +1 -0
  23. package/dist/components/macro/date-picker.d.ts +62 -0
  24. package/dist/components/macro/date-picker.d.ts.map +1 -0
  25. package/dist/components/macro/dialog-preset.d.ts +24 -0
  26. package/dist/components/macro/dialog-preset.d.ts.map +1 -0
  27. package/dist/components/macro/empty-preset.d.ts +15 -0
  28. package/dist/components/macro/empty-preset.d.ts.map +1 -0
  29. package/dist/components/macro/field-preset.d.ts +15 -0
  30. package/dist/components/macro/field-preset.d.ts.map +1 -0
  31. package/dist/components/macro/index.d.ts +22 -0
  32. package/dist/components/macro/index.d.ts.map +1 -0
  33. package/dist/components/macro/input-otp-preset.d.ts +13 -0
  34. package/dist/components/macro/input-otp-preset.d.ts.map +1 -0
  35. package/dist/components/macro/input-preset.d.ts +21 -0
  36. package/dist/components/macro/input-preset.d.ts.map +1 -0
  37. package/dist/components/macro/pagination-preset.d.ts +13 -0
  38. package/dist/components/macro/pagination-preset.d.ts.map +1 -0
  39. package/dist/components/macro/progress-preset.d.ts +10 -0
  40. package/dist/components/macro/progress-preset.d.ts.map +1 -0
  41. package/dist/components/macro/radio-group-preset.d.ts +22 -0
  42. package/dist/components/macro/radio-group-preset.d.ts.map +1 -0
  43. package/dist/components/macro/select-preset.d.ts +42 -0
  44. package/dist/components/macro/select-preset.d.ts.map +1 -0
  45. package/dist/components/macro/slider-preset.d.ts +12 -0
  46. package/dist/components/macro/slider-preset.d.ts.map +1 -0
  47. package/dist/components/macro/switch-preset.d.ts +12 -0
  48. package/dist/components/macro/switch-preset.d.ts.map +1 -0
  49. package/dist/components/macro/tabs-preset.d.ts +17 -0
  50. package/dist/components/macro/tabs-preset.d.ts.map +1 -0
  51. package/dist/components/macro/textarea-preset.d.ts +17 -0
  52. package/dist/components/macro/textarea-preset.d.ts.map +1 -0
  53. package/dist/components/micro/accordion.d.ts +8 -0
  54. package/dist/components/micro/accordion.d.ts.map +1 -0
  55. package/dist/components/micro/alert-dialog.d.ts +33 -0
  56. package/dist/components/micro/alert-dialog.d.ts.map +1 -0
  57. package/dist/components/micro/alert.d.ts +28 -0
  58. package/dist/components/micro/alert.d.ts.map +1 -0
  59. package/dist/components/micro/aspect-ratio.d.ts +13 -0
  60. package/dist/components/micro/aspect-ratio.d.ts.map +1 -0
  61. package/dist/components/micro/avatar.d.ts +23 -0
  62. package/dist/components/micro/avatar.d.ts.map +1 -0
  63. package/dist/components/micro/badge.d.ts +16 -0
  64. package/dist/components/micro/badge.d.ts.map +1 -0
  65. package/dist/components/micro/breadcrumb.d.ts +24 -0
  66. package/dist/components/micro/breadcrumb.d.ts.map +1 -0
  67. package/dist/components/micro/button.d.ts +39 -0
  68. package/dist/components/micro/button.d.ts.map +1 -0
  69. package/dist/components/micro/calendar.d.ts +28 -0
  70. package/dist/components/micro/calendar.d.ts.map +1 -0
  71. package/dist/components/micro/card.d.ts +28 -0
  72. package/dist/components/micro/card.d.ts.map +1 -0
  73. package/dist/components/micro/carousel.d.ts +29 -0
  74. package/dist/components/micro/carousel.d.ts.map +1 -0
  75. package/dist/components/micro/chart.d.ts +49 -0
  76. package/dist/components/micro/chart.d.ts.map +1 -0
  77. package/dist/components/micro/checkbox.d.ts +17 -0
  78. package/dist/components/micro/checkbox.d.ts.map +1 -0
  79. package/dist/components/micro/collapsible.d.ts +15 -0
  80. package/dist/components/micro/collapsible.d.ts.map +1 -0
  81. package/dist/components/micro/combobox.d.ts +33 -0
  82. package/dist/components/micro/combobox.d.ts.map +1 -0
  83. package/dist/components/micro/command.d.ts +79 -0
  84. package/dist/components/micro/command.d.ts.map +1 -0
  85. package/dist/components/micro/context-menu.d.ts +60 -0
  86. package/dist/components/micro/context-menu.d.ts.map +1 -0
  87. package/dist/components/micro/dialog.d.ts +14 -0
  88. package/dist/components/micro/dialog.d.ts.map +1 -0
  89. package/dist/components/micro/direction.d.ts +2 -0
  90. package/dist/components/micro/direction.d.ts.map +1 -0
  91. package/dist/components/micro/drawer.d.ts +17 -0
  92. package/dist/components/micro/drawer.d.ts.map +1 -0
  93. package/dist/components/micro/dropdown-menu.d.ts +37 -0
  94. package/dist/components/micro/dropdown-menu.d.ts.map +1 -0
  95. package/dist/components/micro/empty.d.ts +23 -0
  96. package/dist/components/micro/empty.d.ts.map +1 -0
  97. package/dist/components/micro/field.d.ts +29 -0
  98. package/dist/components/micro/field.d.ts.map +1 -0
  99. package/dist/components/micro/hover-card.d.ts +17 -0
  100. package/dist/components/micro/hover-card.d.ts.map +1 -0
  101. package/dist/components/micro/input-group.d.ts +17 -0
  102. package/dist/components/micro/input-group.d.ts.map +1 -0
  103. package/dist/components/micro/input-otp.d.ts +44 -0
  104. package/dist/components/micro/input-otp.d.ts.map +1 -0
  105. package/dist/components/micro/input.d.ts +22 -0
  106. package/dist/components/micro/input.d.ts.map +1 -0
  107. package/dist/components/micro/item.d.ts +31 -0
  108. package/dist/components/micro/item.d.ts.map +1 -0
  109. package/dist/components/micro/kbd.d.ts +9 -0
  110. package/dist/components/micro/kbd.d.ts.map +1 -0
  111. package/dist/components/micro/label.d.ts +15 -0
  112. package/dist/components/micro/label.d.ts.map +1 -0
  113. package/dist/components/micro/menubar.d.ts +41 -0
  114. package/dist/components/micro/menubar.d.ts.map +1 -0
  115. package/dist/components/micro/navigation-menu.d.ts +18 -0
  116. package/dist/components/micro/navigation-menu.d.ts.map +1 -0
  117. package/dist/components/micro/pagination.d.ts +33 -0
  118. package/dist/components/micro/pagination.d.ts.map +1 -0
  119. package/dist/components/micro/popover.d.ts +23 -0
  120. package/dist/components/micro/popover.d.ts.map +1 -0
  121. package/dist/components/micro/progress.d.ts +19 -0
  122. package/dist/components/micro/progress.d.ts.map +1 -0
  123. package/dist/components/micro/radio-group.d.ts +13 -0
  124. package/dist/components/micro/radio-group.d.ts.map +1 -0
  125. package/dist/components/micro/resizable.d.ts +12 -0
  126. package/dist/components/micro/resizable.d.ts.map +1 -0
  127. package/dist/components/micro/scroll-area.d.ts +12 -0
  128. package/dist/components/micro/scroll-area.d.ts.map +1 -0
  129. package/dist/components/micro/select.d.ts +21 -0
  130. package/dist/components/micro/select.d.ts.map +1 -0
  131. package/dist/components/micro/separator.d.ts +9 -0
  132. package/dist/components/micro/separator.d.ts.map +1 -0
  133. package/dist/components/micro/sheet.d.ts +17 -0
  134. package/dist/components/micro/sheet.d.ts.map +1 -0
  135. package/dist/components/micro/sidebar.d.ts +28 -0
  136. package/dist/components/micro/sidebar.d.ts.map +1 -0
  137. package/dist/components/micro/skeleton.d.ts +9 -0
  138. package/dist/components/micro/skeleton.d.ts.map +1 -0
  139. package/dist/components/micro/slider.d.ts +14 -0
  140. package/dist/components/micro/slider.d.ts.map +1 -0
  141. package/dist/components/micro/sonner.d.ts +5 -0
  142. package/dist/components/micro/sonner.d.ts.map +1 -0
  143. package/dist/components/micro/spinner.d.ts +21 -0
  144. package/dist/components/micro/spinner.d.ts.map +1 -0
  145. package/dist/components/micro/switch.d.ts +13 -0
  146. package/dist/components/micro/switch.d.ts.map +1 -0
  147. package/dist/components/micro/table.d.ts +17 -0
  148. package/dist/components/micro/table.d.ts.map +1 -0
  149. package/dist/components/micro/tabs.d.ts +13 -0
  150. package/dist/components/micro/tabs.d.ts.map +1 -0
  151. package/dist/components/micro/textarea.d.ts +17 -0
  152. package/dist/components/micro/textarea.d.ts.map +1 -0
  153. package/dist/components/micro/theme-provider.d.ts +76 -0
  154. package/dist/components/micro/theme-provider.d.ts.map +1 -0
  155. package/dist/components/micro/toggle-group.d.ts +22 -0
  156. package/dist/components/micro/toggle-group.d.ts.map +1 -0
  157. package/dist/components/micro/toggle.d.ts +16 -0
  158. package/dist/components/micro/toggle.d.ts.map +1 -0
  159. package/dist/components/micro/tooltip.d.ts +20 -0
  160. package/dist/components/micro/tooltip.d.ts.map +1 -0
  161. package/dist/dev/App.d.ts +3 -0
  162. package/dist/dev/App.d.ts.map +1 -0
  163. package/dist/dev/components/GladcnLogo.d.ts +10 -0
  164. package/dist/dev/components/GladcnLogo.d.ts.map +1 -0
  165. package/dist/dev/components/code-highlighter.d.ts +5 -0
  166. package/dist/dev/components/code-highlighter.d.ts.map +1 -0
  167. package/dist/dev/components/dev-context.d.ts +12 -0
  168. package/dist/dev/components/dev-context.d.ts.map +1 -0
  169. package/dist/dev/components/showcase.d.ts +72 -0
  170. package/dist/dev/components/showcase.d.ts.map +1 -0
  171. package/dist/dev/data.d.ts +68 -0
  172. package/dist/dev/data.d.ts.map +1 -0
  173. package/dist/dev/main.d.ts +1 -0
  174. package/dist/dev/main.d.ts.map +1 -0
  175. package/dist/dev/sections/buttons.d.ts +2 -0
  176. package/dist/dev/sections/buttons.d.ts.map +1 -0
  177. package/dist/dev/sections/display.d.ts +2 -0
  178. package/dist/dev/sections/display.d.ts.map +1 -0
  179. package/dist/dev/sections/feedback.d.ts +2 -0
  180. package/dist/dev/sections/feedback.d.ts.map +1 -0
  181. package/dist/dev/sections/forms.d.ts +2 -0
  182. package/dist/dev/sections/forms.d.ts.map +1 -0
  183. package/dist/dev/sections/interactive.d.ts +2 -0
  184. package/dist/dev/sections/interactive.d.ts.map +1 -0
  185. package/dist/dev/sections/overview.d.ts +2 -0
  186. package/dist/dev/sections/overview.d.ts.map +1 -0
  187. package/dist/dev/showcase/accordion.d.ts +2 -0
  188. package/dist/dev/showcase/accordion.d.ts.map +1 -0
  189. package/dist/dev/showcase/alert-dialog.d.ts +2 -0
  190. package/dist/dev/showcase/alert-dialog.d.ts.map +1 -0
  191. package/dist/dev/showcase/alert.d.ts +2 -0
  192. package/dist/dev/showcase/alert.d.ts.map +1 -0
  193. package/dist/dev/showcase/aspect-ratio.d.ts +2 -0
  194. package/dist/dev/showcase/aspect-ratio.d.ts.map +1 -0
  195. package/dist/dev/showcase/avatar.d.ts +2 -0
  196. package/dist/dev/showcase/avatar.d.ts.map +1 -0
  197. package/dist/dev/showcase/badge.d.ts +2 -0
  198. package/dist/dev/showcase/badge.d.ts.map +1 -0
  199. package/dist/dev/showcase/breadcrumb.d.ts +2 -0
  200. package/dist/dev/showcase/breadcrumb.d.ts.map +1 -0
  201. package/dist/dev/showcase/button.d.ts +2 -0
  202. package/dist/dev/showcase/button.d.ts.map +1 -0
  203. package/dist/dev/showcase/calendar.d.ts +2 -0
  204. package/dist/dev/showcase/calendar.d.ts.map +1 -0
  205. package/dist/dev/showcase/card.d.ts +2 -0
  206. package/dist/dev/showcase/card.d.ts.map +1 -0
  207. package/dist/dev/showcase/carousel.d.ts +2 -0
  208. package/dist/dev/showcase/carousel.d.ts.map +1 -0
  209. package/dist/dev/showcase/chart.d.ts +2 -0
  210. package/dist/dev/showcase/chart.d.ts.map +1 -0
  211. package/dist/dev/showcase/checkbox.d.ts +2 -0
  212. package/dist/dev/showcase/checkbox.d.ts.map +1 -0
  213. package/dist/dev/showcase/collapsible.d.ts +3 -0
  214. package/dist/dev/showcase/collapsible.d.ts.map +1 -0
  215. package/dist/dev/showcase/combobox.d.ts +2 -0
  216. package/dist/dev/showcase/combobox.d.ts.map +1 -0
  217. package/dist/dev/showcase/command.d.ts +2 -0
  218. package/dist/dev/showcase/command.d.ts.map +1 -0
  219. package/dist/dev/showcase/context-menu.d.ts +2 -0
  220. package/dist/dev/showcase/context-menu.d.ts.map +1 -0
  221. package/dist/dev/showcase/dialog.d.ts +2 -0
  222. package/dist/dev/showcase/dialog.d.ts.map +1 -0
  223. package/dist/dev/showcase/drawer.d.ts +2 -0
  224. package/dist/dev/showcase/drawer.d.ts.map +1 -0
  225. package/dist/dev/showcase/dropdown-menu.d.ts +2 -0
  226. package/dist/dev/showcase/dropdown-menu.d.ts.map +1 -0
  227. package/dist/dev/showcase/empty.d.ts +2 -0
  228. package/dist/dev/showcase/empty.d.ts.map +1 -0
  229. package/dist/dev/showcase/hover-card.d.ts +2 -0
  230. package/dist/dev/showcase/hover-card.d.ts.map +1 -0
  231. package/dist/dev/showcase/input-group.d.ts +2 -0
  232. package/dist/dev/showcase/input-group.d.ts.map +1 -0
  233. package/dist/dev/showcase/input-otp.d.ts +2 -0
  234. package/dist/dev/showcase/input-otp.d.ts.map +1 -0
  235. package/dist/dev/showcase/input.d.ts +2 -0
  236. package/dist/dev/showcase/input.d.ts.map +1 -0
  237. package/dist/dev/showcase/item.d.ts +2 -0
  238. package/dist/dev/showcase/item.d.ts.map +1 -0
  239. package/dist/dev/showcase/kbd.d.ts +2 -0
  240. package/dist/dev/showcase/kbd.d.ts.map +1 -0
  241. package/dist/dev/showcase/label.d.ts +2 -0
  242. package/dist/dev/showcase/label.d.ts.map +1 -0
  243. package/dist/dev/showcase/menubar.d.ts +2 -0
  244. package/dist/dev/showcase/menubar.d.ts.map +1 -0
  245. package/dist/dev/showcase/navigation-menu.d.ts +3 -0
  246. package/dist/dev/showcase/navigation-menu.d.ts.map +1 -0
  247. package/dist/dev/showcase/overview.d.ts +2 -0
  248. package/dist/dev/showcase/overview.d.ts.map +1 -0
  249. package/dist/dev/showcase/pagination.d.ts +2 -0
  250. package/dist/dev/showcase/pagination.d.ts.map +1 -0
  251. package/dist/dev/showcase/popover.d.ts +2 -0
  252. package/dist/dev/showcase/popover.d.ts.map +1 -0
  253. package/dist/dev/showcase/progress.d.ts +2 -0
  254. package/dist/dev/showcase/progress.d.ts.map +1 -0
  255. package/dist/dev/showcase/radio-group.d.ts +2 -0
  256. package/dist/dev/showcase/radio-group.d.ts.map +1 -0
  257. package/dist/dev/showcase/resizable.d.ts +2 -0
  258. package/dist/dev/showcase/resizable.d.ts.map +1 -0
  259. package/dist/dev/showcase/scroll-area.d.ts +2 -0
  260. package/dist/dev/showcase/scroll-area.d.ts.map +1 -0
  261. package/dist/dev/showcase/select.d.ts +2 -0
  262. package/dist/dev/showcase/select.d.ts.map +1 -0
  263. package/dist/dev/showcase/separator.d.ts +2 -0
  264. package/dist/dev/showcase/separator.d.ts.map +1 -0
  265. package/dist/dev/showcase/sheet.d.ts +2 -0
  266. package/dist/dev/showcase/sheet.d.ts.map +1 -0
  267. package/dist/dev/showcase/sidebar.d.ts +2 -0
  268. package/dist/dev/showcase/sidebar.d.ts.map +1 -0
  269. package/dist/dev/showcase/skeleton.d.ts +2 -0
  270. package/dist/dev/showcase/skeleton.d.ts.map +1 -0
  271. package/dist/dev/showcase/slider.d.ts +2 -0
  272. package/dist/dev/showcase/slider.d.ts.map +1 -0
  273. package/dist/dev/showcase/sonner.d.ts +2 -0
  274. package/dist/dev/showcase/sonner.d.ts.map +1 -0
  275. package/dist/dev/showcase/spinner.d.ts +2 -0
  276. package/dist/dev/showcase/spinner.d.ts.map +1 -0
  277. package/dist/dev/showcase/switch.d.ts +2 -0
  278. package/dist/dev/showcase/switch.d.ts.map +1 -0
  279. package/dist/dev/showcase/table.d.ts +2 -0
  280. package/dist/dev/showcase/table.d.ts.map +1 -0
  281. package/dist/dev/showcase/tabs.d.ts +2 -0
  282. package/dist/dev/showcase/tabs.d.ts.map +1 -0
  283. package/dist/dev/showcase/textarea.d.ts +2 -0
  284. package/dist/dev/showcase/textarea.d.ts.map +1 -0
  285. package/dist/dev/showcase/theme-provider.d.ts +2 -0
  286. package/dist/dev/showcase/theme-provider.d.ts.map +1 -0
  287. package/dist/dev/showcase/toast.d.ts +2 -0
  288. package/dist/dev/showcase/toast.d.ts.map +1 -0
  289. package/dist/dev/showcase/toggle-group.d.ts +2 -0
  290. package/dist/dev/showcase/toggle-group.d.ts.map +1 -0
  291. package/dist/dev/showcase/toggle.d.ts +2 -0
  292. package/dist/dev/showcase/toggle.d.ts.map +1 -0
  293. package/dist/dev/showcase/tooltip.d.ts +2 -0
  294. package/dist/dev/showcase/tooltip.d.ts.map +1 -0
  295. package/dist/hooks/use-controllable-state.d.ts +14 -0
  296. package/dist/hooks/use-controllable-state.d.ts.map +1 -0
  297. package/dist/hooks/use-mobile.d.ts +2 -0
  298. package/dist/hooks/use-mobile.d.ts.map +1 -0
  299. package/dist/index.cjs +5099 -0
  300. package/dist/index.cjs.map +1 -0
  301. package/dist/index.d.ts +58 -0
  302. package/dist/index.d.ts.map +1 -0
  303. package/dist/index.js +4740 -0
  304. package/dist/index.js.map +1 -0
  305. package/dist/lib/types.d.ts +4 -0
  306. package/dist/lib/types.d.ts.map +1 -0
  307. package/dist/lib/utils.d.ts +3 -0
  308. package/dist/lib/utils.d.ts.map +1 -0
  309. package/dist/preset.d.ts +18 -0
  310. package/dist/preset.d.ts.map +1 -0
  311. package/dist/test/setup.d.ts +1 -0
  312. package/dist/test/setup.d.ts.map +1 -0
  313. package/llms.txt +74 -0
  314. package/package.json +117 -0
  315. package/scripts/add-icononly-prop.ts +84 -0
  316. package/scripts/audit-best-practices.ts +114 -0
  317. package/scripts/audit-showcase.ts +262 -0
  318. package/scripts/audit-showcases.ts +83 -0
  319. package/scripts/clean-imports.ts +21 -0
  320. package/scripts/count_missing.ts +24 -0
  321. package/scripts/find-css-vars.ts +62 -0
  322. package/scripts/fix-portals.ts +90 -0
  323. package/scripts/full-audit.ts +89 -0
  324. package/scripts/merge-components.cjs +65 -0
  325. package/scripts/merge-components.js +64 -0
  326. package/scripts/optimize-barrel.ts +116 -0
  327. package/scripts/postinstall.cjs +228 -0
  328. package/scripts/refactor_divs.ts +39 -0
  329. package/scripts/remove_div_wrappers.ts +17 -0
  330. package/scripts/update-gaps.ts +83 -0
  331. package/scripts/update_showcase_codestrings.ts +87 -0
  332. package/src/components/macro/accordion-preset.test.tsx +37 -0
  333. package/src/components/macro/accordion-preset.tsx +41 -0
  334. package/src/components/macro/alert-dialog-preset.tsx +116 -0
  335. package/src/components/macro/alert-preset.tsx +94 -0
  336. package/src/components/macro/avatar-preset.tsx +54 -0
  337. package/src/components/macro/breadcrumb-preset.tsx +50 -0
  338. package/src/components/macro/card-preset.tsx +44 -0
  339. package/src/components/macro/carousel-preset.tsx +150 -0
  340. package/src/components/macro/checkbox-preset.test.tsx +49 -0
  341. package/src/components/macro/checkbox-preset.tsx +84 -0
  342. package/src/components/macro/combobox-preset.tsx +171 -0
  343. package/src/components/macro/command-preset.tsx +74 -0
  344. package/src/components/macro/date-picker.tsx +289 -0
  345. package/src/components/macro/dialog-preset.tsx +105 -0
  346. package/src/components/macro/empty-preset.tsx +46 -0
  347. package/src/components/macro/field-preset.test.tsx +69 -0
  348. package/src/components/macro/field-preset.tsx +65 -0
  349. package/src/components/macro/index.ts +21 -0
  350. package/src/components/macro/input-otp-preset.tsx +98 -0
  351. package/src/components/macro/input-preset.test.tsx +52 -0
  352. package/src/components/macro/input-preset.tsx +139 -0
  353. package/src/components/macro/pagination-preset.tsx +153 -0
  354. package/src/components/macro/progress-preset.test.tsx +65 -0
  355. package/src/components/macro/progress-preset.tsx +45 -0
  356. package/src/components/macro/radio-group-preset.tsx +115 -0
  357. package/src/components/macro/select-preset.tsx +168 -0
  358. package/src/components/macro/slider-preset.test.tsx +43 -0
  359. package/src/components/macro/slider-preset.tsx +86 -0
  360. package/src/components/macro/switch-preset.test.tsx +53 -0
  361. package/src/components/macro/switch-preset.tsx +70 -0
  362. package/src/components/macro/tabs-preset.test.tsx +31 -0
  363. package/src/components/macro/tabs-preset.tsx +51 -0
  364. package/src/components/macro/textarea-preset.test.tsx +39 -0
  365. package/src/components/macro/textarea-preset.tsx +55 -0
  366. package/src/components/micro/accordion.tsx +76 -0
  367. package/src/components/micro/alert-dialog.tsx +213 -0
  368. package/src/components/micro/alert.tsx +146 -0
  369. package/src/components/micro/aspect-ratio.tsx +38 -0
  370. package/src/components/micro/avatar.tsx +143 -0
  371. package/src/components/micro/badge.tsx +207 -0
  372. package/src/components/micro/breadcrumb.tsx +162 -0
  373. package/src/components/micro/button.test.tsx +25 -0
  374. package/src/components/micro/button.tsx +361 -0
  375. package/src/components/micro/calendar.tsx +383 -0
  376. package/src/components/micro/card.tsx +112 -0
  377. package/src/components/micro/carousel.tsx +341 -0
  378. package/src/components/micro/chart.tsx +392 -0
  379. package/src/components/micro/checkbox.tsx +74 -0
  380. package/src/components/micro/collapsible.tsx +65 -0
  381. package/src/components/micro/combobox.tsx +349 -0
  382. package/src/components/micro/command.tsx +238 -0
  383. package/src/components/micro/context-menu.tsx +285 -0
  384. package/src/components/micro/dialog.tsx +143 -0
  385. package/src/components/micro/direction.tsx +13 -0
  386. package/src/components/micro/drawer.tsx +149 -0
  387. package/src/components/micro/dropdown-menu.tsx +305 -0
  388. package/src/components/micro/empty.tsx +144 -0
  389. package/src/components/micro/field.tsx +311 -0
  390. package/src/components/micro/hover-card.tsx +86 -0
  391. package/src/components/micro/input-group.tsx +269 -0
  392. package/src/components/micro/input-otp.tsx +130 -0
  393. package/src/components/micro/input.tsx +56 -0
  394. package/src/components/micro/item.tsx +206 -0
  395. package/src/components/micro/kbd.tsx +38 -0
  396. package/src/components/micro/label.tsx +48 -0
  397. package/src/components/micro/menubar.tsx +302 -0
  398. package/src/components/micro/navigation-menu.tsx +197 -0
  399. package/src/components/micro/pagination.tsx +162 -0
  400. package/src/components/micro/popover.tsx +131 -0
  401. package/src/components/micro/progress.tsx +144 -0
  402. package/src/components/micro/radio-group.tsx +73 -0
  403. package/src/components/micro/resizable.tsx +64 -0
  404. package/src/components/micro/scroll-area.tsx +68 -0
  405. package/src/components/micro/select.tsx +234 -0
  406. package/src/components/micro/separator.tsx +37 -0
  407. package/src/components/micro/sheet.tsx +144 -0
  408. package/src/components/micro/sidebar.tsx +238 -0
  409. package/src/components/micro/skeleton.tsx +29 -0
  410. package/src/components/micro/slider.tsx +135 -0
  411. package/src/components/micro/sonner.tsx +85 -0
  412. package/src/components/micro/spinner.tsx +44 -0
  413. package/src/components/micro/switch.tsx +70 -0
  414. package/src/components/micro/table.tsx +210 -0
  415. package/src/components/micro/tabs.tsx +100 -0
  416. package/src/components/micro/textarea.tsx +53 -0
  417. package/src/components/micro/theme-provider.tsx +163 -0
  418. package/src/components/micro/toggle-group.tsx +121 -0
  419. package/src/components/micro/toggle.tsx +55 -0
  420. package/src/components/micro/tooltip.tsx +105 -0
  421. package/src/dev/App.tsx +322 -0
  422. package/src/dev/_debug_select.html +29 -0
  423. package/src/dev/components/GladcnLogo.tsx +80 -0
  424. package/src/dev/components/code-highlighter.tsx +67 -0
  425. package/src/dev/components/dev-context.tsx +31 -0
  426. package/src/dev/components/showcase.tsx +413 -0
  427. package/src/dev/data.ts +341 -0
  428. package/src/dev/index.css +55 -0
  429. package/src/dev/main.tsx +30 -0
  430. package/src/dev/sections/buttons.tsx +303 -0
  431. package/src/dev/sections/display.tsx +270 -0
  432. package/src/dev/sections/feedback.tsx +371 -0
  433. package/src/dev/sections/forms.tsx +652 -0
  434. package/src/dev/sections/interactive.tsx +51 -0
  435. package/src/dev/sections/overview.tsx +396 -0
  436. package/src/dev/showcase/accordion.tsx +947 -0
  437. package/src/dev/showcase/alert-dialog.tsx +1056 -0
  438. package/src/dev/showcase/alert.tsx +756 -0
  439. package/src/dev/showcase/aspect-ratio.tsx +339 -0
  440. package/src/dev/showcase/avatar.tsx +470 -0
  441. package/src/dev/showcase/badge.tsx +227 -0
  442. package/src/dev/showcase/breadcrumb.tsx +269 -0
  443. package/src/dev/showcase/button.tsx +309 -0
  444. package/src/dev/showcase/calendar.tsx +380 -0
  445. package/src/dev/showcase/card.tsx +448 -0
  446. package/src/dev/showcase/carousel.tsx +562 -0
  447. package/src/dev/showcase/chart.tsx +130 -0
  448. package/src/dev/showcase/checkbox.tsx +611 -0
  449. package/src/dev/showcase/collapsible.tsx +298 -0
  450. package/src/dev/showcase/combobox.tsx +777 -0
  451. package/src/dev/showcase/command.tsx +245 -0
  452. package/src/dev/showcase/context-menu.tsx +239 -0
  453. package/src/dev/showcase/dialog.tsx +1141 -0
  454. package/src/dev/showcase/drawer.tsx +392 -0
  455. package/src/dev/showcase/dropdown-menu.tsx +420 -0
  456. package/src/dev/showcase/empty.tsx +493 -0
  457. package/src/dev/showcase/hover-card.tsx +336 -0
  458. package/src/dev/showcase/input-group.tsx +511 -0
  459. package/src/dev/showcase/input-otp.tsx +404 -0
  460. package/src/dev/showcase/input.tsx +530 -0
  461. package/src/dev/showcase/item.tsx +295 -0
  462. package/src/dev/showcase/kbd.tsx +276 -0
  463. package/src/dev/showcase/label.tsx +121 -0
  464. package/src/dev/showcase/menubar.tsx +392 -0
  465. package/src/dev/showcase/navigation-menu.tsx +304 -0
  466. package/src/dev/showcase/overview.tsx +1106 -0
  467. package/src/dev/showcase/pagination.tsx +312 -0
  468. package/src/dev/showcase/popover.tsx +374 -0
  469. package/src/dev/showcase/progress.tsx +299 -0
  470. package/src/dev/showcase/radio-group.tsx +612 -0
  471. package/src/dev/showcase/resizable.tsx +237 -0
  472. package/src/dev/showcase/scroll-area.tsx +157 -0
  473. package/src/dev/showcase/select.tsx +628 -0
  474. package/src/dev/showcase/separator.tsx +126 -0
  475. package/src/dev/showcase/sheet.tsx +566 -0
  476. package/src/dev/showcase/sidebar.tsx +120 -0
  477. package/src/dev/showcase/skeleton.tsx +213 -0
  478. package/src/dev/showcase/slider.tsx +506 -0
  479. package/src/dev/showcase/sonner.tsx +376 -0
  480. package/src/dev/showcase/spinner.tsx +124 -0
  481. package/src/dev/showcase/switch.tsx +602 -0
  482. package/src/dev/showcase/table.tsx +196 -0
  483. package/src/dev/showcase/tabs.tsx +662 -0
  484. package/src/dev/showcase/textarea.tsx +498 -0
  485. package/src/dev/showcase/theme-provider.tsx +894 -0
  486. package/src/dev/showcase/toast.tsx +119 -0
  487. package/src/dev/showcase/toggle-group.tsx +223 -0
  488. package/src/dev/showcase/toggle.tsx +171 -0
  489. package/src/dev/showcase/tooltip.tsx +372 -0
  490. package/src/hooks/use-controllable-state.ts +87 -0
  491. package/src/hooks/use-mobile.ts +21 -0
  492. package/src/index.ts +62 -0
  493. package/src/lib/types.ts +14 -0
  494. package/src/lib/utils.test.ts +14 -0
  495. package/src/lib/utils.ts +6 -0
  496. package/src/preset.ts +17 -0
  497. package/src/styles/gladcn.css +116 -0
  498. package/src/styles/tokens.css +213 -0
  499. package/src/test/setup.ts +8 -0
  500. package/src/vite-env.d.ts +1 -0
@@ -0,0 +1,227 @@
1
+ import { useDevContext } from "../../dev/components/dev-context";
2
+ import { Badge } from "../../components/micro/badge";
3
+ import {
4
+ DocsCode,
5
+ DocsP,
6
+ ExampleGrid,
7
+ ExampleSection,
8
+ Showcase,
9
+ ShowcaseDocs,
10
+ } from "../../dev/components/showcase";
11
+ import { type Size } from "../../lib/types";
12
+ import { AlertTriangleIcon, CheckIcon, InfoIcon, XIcon } from "lucide-react";
13
+ import { useState } from "react";
14
+
15
+ export default function BadgeShowcase() {
16
+ const { size: globalSize } = useDevContext();
17
+ return (
18
+ <Showcase
19
+ title="Badge"
20
+ description="Hiển thị nhãn trạng thái, phân loại hoặc đếm số lượng."
21
+ generalConcept={
22
+ <ShowcaseDocs>
23
+ <DocsP>
24
+ Dùng để làm nổi bật trạng thái, nhãn phân loại hoặc số lượng. Thường
25
+ là phần tử không tương tác, nhưng cũng có thể biến thành liên kết
26
+ bằng cách dùng prop <DocsCode>render</DocsCode>.
27
+ </DocsP>
28
+ </ShowcaseDocs>
29
+ }
30
+ tabs={[
31
+ {
32
+ label: "Micro (Primitive)",
33
+ content: <BadgeMicroShowcase globalSize={globalSize} />,
34
+ },
35
+ ]}
36
+ />
37
+ );
38
+ }
39
+
40
+ function BadgeMicroShowcase({ globalSize }: { globalSize: Size }) {
41
+ return (
42
+ <div className="space-y-10 mt-6">
43
+ {/* ── Variants ── */}
44
+ <ExampleSection
45
+ label="Variants"
46
+ description="Tất cả các kiểu hiển thị hiện có."
47
+ codeString={`<Badge variant="solid">Solid</Badge>
48
+ <Badge variant="soft">Soft</Badge>
49
+ <Badge variant="outline">Outline</Badge>`}
50
+ >
51
+ <Badge variant="solid">Solid</Badge>
52
+ <Badge variant="soft">Soft</Badge>
53
+ <Badge variant="outline">Outline</Badge>
54
+ </ExampleSection>
55
+
56
+ {/* ── Colors ── */}
57
+ <ExampleGrid>
58
+ <ExampleSection
59
+ label="Solid Colors"
60
+ description="Các màu semantic áp dụng cho Badge dạng Solid."
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>`}
68
+ >
69
+ <Badge color="primary">Primary</Badge>
70
+ <Badge color="secondary">Secondary</Badge>
71
+ <Badge color="destructive">Destructive</Badge>
72
+ <Badge color="warning">Warning</Badge>
73
+ <Badge color="success">Success</Badge>
74
+ <Badge color="info">Info</Badge>
75
+ <Badge color="muted">Muted</Badge>
76
+ </ExampleSection>
77
+
78
+ <ExampleSection
79
+ label="Soft Colors"
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>`}
88
+ >
89
+ <Badge variant="soft" color="primary">
90
+ Primary
91
+ </Badge>
92
+ <Badge variant="soft" color="secondary">
93
+ Secondary
94
+ </Badge>
95
+ <Badge variant="soft" color="destructive">
96
+ Destructive
97
+ </Badge>
98
+ <Badge variant="soft" color="warning">
99
+ Warning
100
+ </Badge>
101
+ <Badge variant="soft" color="success">
102
+ Success
103
+ </Badge>
104
+ <Badge variant="soft" color="info">
105
+ Info
106
+ </Badge>
107
+ <Badge variant="soft" color="muted">
108
+ Muted
109
+ </Badge>
110
+ </ExampleSection>
111
+ </ExampleGrid>
112
+
113
+ {/* ── With Icons ── */}
114
+ <ExampleSection
115
+ label="With Icons"
116
+ description="Badge kèm icon để bổ sung ngữ cảnh."
117
+ codeString={`<Badge color="success">
118
+ <CheckIcon className="size-3.5" />
119
+ Approved
120
+ </Badge>
121
+
122
+ <Badge color="destructive">
123
+ <XIcon className="size-3.5" />
124
+ Rejected
125
+ </Badge>
126
+
127
+ <Badge color="warning" variant="soft">
128
+ <AlertTriangleIcon className="size-3.5" />
129
+ Pending
130
+ </Badge>
131
+
132
+ <Badge color="info" variant="outline">
133
+ <InfoIcon className="size-3.5" />
134
+ Draft
135
+ </Badge>`}
136
+ >
137
+ <Badge color="success">
138
+ <CheckIcon className="size-3.5" />
139
+ Approved
140
+ </Badge>
141
+ <Badge color="destructive">
142
+ <XIcon className="size-3.5" />
143
+ Rejected
144
+ </Badge>
145
+ <Badge color="warning" variant="soft">
146
+ <AlertTriangleIcon className="size-3.5" />
147
+ Pending
148
+ </Badge>
149
+ <Badge color="info" variant="outline">
150
+ <InfoIcon className="size-3.5" />
151
+ Draft
152
+ </Badge>
153
+ </ExampleSection>
154
+
155
+ {/* ── Real-world Use Cases ── */}
156
+ <ExampleGrid>
157
+ <ExampleSection
158
+ label="Status Indicators"
159
+ 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>`}
164
+ >
165
+ <Badge color="success" variant="soft">
166
+ Active
167
+ </Badge>
168
+ <Badge color="secondary" variant="soft">
169
+ Inactive
170
+ </Badge>
171
+ <Badge color="destructive" variant="soft">
172
+ Expired
173
+ </Badge>
174
+ <Badge color="muted" variant="outline">
175
+ Archived
176
+ </Badge>
177
+ </ExampleSection>
178
+ <ExampleSection
179
+ label="Tags & Categories"
180
+ 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>`}
185
+ >
186
+ <Badge variant="outline" color="primary">
187
+ React
188
+ </Badge>
189
+ <Badge variant="outline" color="secondary">
190
+ TypeScript
191
+ </Badge>
192
+ <Badge variant="outline" color="info">
193
+ Tailwind
194
+ </Badge>
195
+ <Badge variant="outline" color="warning">
196
+ Vite
197
+ </Badge>
198
+ </ExampleSection>
199
+ </ExampleGrid>
200
+
201
+ {/* ── As Link ── */}
202
+ <ExampleSection
203
+ label="As Link"
204
+ description="Badge render dưới dạng thẻ a nhờ prop render."
205
+ codeString={`<Badge render={<a href="#" />}>
206
+ Clickable Badge
207
+ </Badge>
208
+
209
+ <Badge color="secondary" render={<a href="#" />}>
210
+ Secondary Link
211
+ </Badge>
212
+
213
+ <Badge variant="outline" render={<a href="#" />}>
214
+ Outline Link
215
+ </Badge>`}
216
+ >
217
+ <Badge render={<a href="#" />}>Clickable Badge</Badge>
218
+ <Badge color="secondary" render={<a href="#" />}>
219
+ Secondary Link
220
+ </Badge>
221
+ <Badge variant="outline" render={<a href="#" />}>
222
+ Outline Link
223
+ </Badge>
224
+ </ExampleSection>
225
+ </div>
226
+ );
227
+ }
@@ -0,0 +1,269 @@
1
+ import {
2
+ DocsP,
3
+ ExampleGrid,
4
+ ExampleSection,
5
+ Showcase,
6
+ ShowcaseDocs,
7
+ } from "../../dev/components/showcase";
8
+ import { SlashIcon } from "lucide-react";
9
+
10
+ import { BreadcrumbPreset } from "../../components/macro/breadcrumb-preset";
11
+ import {
12
+ Breadcrumb,
13
+ BreadcrumbEllipsis,
14
+ BreadcrumbItem,
15
+ BreadcrumbLink,
16
+ BreadcrumbList,
17
+ BreadcrumbPage,
18
+ BreadcrumbSeparator,
19
+ } from "../../components/micro/breadcrumb";
20
+ import {
21
+ DropdownMenu,
22
+ DropdownMenuContent,
23
+ DropdownMenuItem,
24
+ DropdownMenuPortal,
25
+ DropdownMenuTrigger,
26
+ } from "../../components/micro/dropdown-menu";
27
+
28
+ // ──────────────────────────────────────────────────────────
29
+ // SECTION 1: Macro Content
30
+ // ──────────────────────────────────────────────────────────
31
+ function BreadcrumbMacroShowcase() {
32
+ return (
33
+ <div className="space-y-10 mt-6">
34
+ <ExampleGrid>
35
+ <ExampleSection
36
+ label="Tiêu chuẩn (Standard)"
37
+ description="Mảng điều hướng cơ bản."
38
+ codeString={`<BreadcrumbPreset
39
+ items={[
40
+ { label: "Trang chủ", href: "/" },
41
+ { label: "Thành phần", href: "/components" },
42
+ { label: "Breadcrumb" },
43
+ ]}
44
+ />
45
+ `}
46
+ >
47
+ <BreadcrumbPreset
48
+ items={[
49
+ { label: "Trang chủ", href: "/" },
50
+ { label: "Thành phần", href: "/components" },
51
+ { label: "Breadcrumb" },
52
+ ]}
53
+ />
54
+ </ExampleSection>
55
+
56
+ <ExampleSection
57
+ label="Nhiều cấp (Deep Navigation)"
58
+ description="Đường dẫn dài hơn điển hình cho các trang lồng nhau."
59
+ 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
+ `}
68
+ >
69
+ <BreadcrumbPreset
70
+ items={[
71
+ { label: "Dashboard", href: "/dashboard" },
72
+ { label: "Cài đặt", href: "/settings" },
73
+ { label: "Tài khoản", href: "/settings/account" },
74
+ { label: "Hóa đơn" },
75
+ ]}
76
+ />
77
+ </ExampleSection>
78
+ </ExampleGrid>
79
+ </div>
80
+ );
81
+ }
82
+
83
+ // ──────────────────────────────────────────────────────────
84
+ // SECTION 2: Micro Content
85
+ // ──────────────────────────────────────────────────────────
86
+ function BreadcrumbMicroShowcase() {
87
+ return (
88
+ <div className="space-y-10 mt-6">
89
+ <ExampleSection
90
+ label="Cơ bản (Default)"
91
+ description="Lắp ráp thủ công các item với dấu phân cách chevron mặc định."
92
+ fullWidth
93
+ 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
+ `}
109
+ >
110
+ <Breadcrumb className="w-full max-w-lg">
111
+ <BreadcrumbList>
112
+ <BreadcrumbItem>
113
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
114
+ </BreadcrumbItem>
115
+ <BreadcrumbSeparator />
116
+ <BreadcrumbItem>
117
+ <BreadcrumbLink href="/components">Thành phần</BreadcrumbLink>
118
+ </BreadcrumbItem>
119
+ <BreadcrumbSeparator />
120
+ <BreadcrumbItem>
121
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
122
+ </BreadcrumbItem>
123
+ </BreadcrumbList>
124
+ </Breadcrumb>
125
+ </ExampleSection>
126
+
127
+ <ExampleGrid>
128
+ <ExampleSection
129
+ label="Đổi dấu phân cách (Custom Separator)"
130
+ description="Truyền icon bất kỳ (VD: SlashIcon) vào bên trong BreadcrumbSeparator."
131
+ 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>`}
150
+ >
151
+ <Breadcrumb className="w-full max-w-lg">
152
+ <BreadcrumbList>
153
+ <BreadcrumbItem>
154
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
155
+ </BreadcrumbItem>
156
+ <BreadcrumbSeparator>
157
+ <SlashIcon className="size-3.5" />
158
+ </BreadcrumbSeparator>
159
+ <BreadcrumbItem>
160
+ <BreadcrumbLink href="/components">Thành phần</BreadcrumbLink>
161
+ </BreadcrumbItem>
162
+ <BreadcrumbSeparator>
163
+ <SlashIcon className="size-3.5" />
164
+ </BreadcrumbSeparator>
165
+ <BreadcrumbItem>
166
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
167
+ </BreadcrumbItem>
168
+ </BreadcrumbList>
169
+ </Breadcrumb>
170
+ </ExampleSection>
171
+
172
+ <ExampleSection
173
+ label="Dấu ba chấm (With Ellipsis)"
174
+ description="Sử dụng BreadcrumbEllipsis cùng DropdownMenu để giấu các đường dẫn trung gian."
175
+ 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>`}
206
+ >
207
+ <Breadcrumb className="w-full max-w-lg">
208
+ <BreadcrumbList>
209
+ <BreadcrumbItem>
210
+ <BreadcrumbLink href="/">Trang chủ</BreadcrumbLink>
211
+ </BreadcrumbItem>
212
+ <BreadcrumbSeparator />
213
+ <BreadcrumbItem>
214
+ <DropdownMenu>
215
+ <DropdownMenuTrigger className="flex items-center gap-1 hover:text-foreground">
216
+ <BreadcrumbEllipsis className="h-4 w-4" />
217
+ <span className="sr-only">Toggle menu</span>
218
+ </DropdownMenuTrigger>
219
+ <DropdownMenuPortal>
220
+ <DropdownMenuContent align="start">
221
+ <DropdownMenuItem>Tài liệu</DropdownMenuItem>
222
+ <DropdownMenuItem>Giao diện</DropdownMenuItem>
223
+ <DropdownMenuItem>GitHub</DropdownMenuItem>
224
+ </DropdownMenuContent>
225
+ </DropdownMenuPortal>
226
+ </DropdownMenu>
227
+ </BreadcrumbItem>
228
+ <BreadcrumbSeparator />
229
+ <BreadcrumbItem>
230
+ <BreadcrumbLink href="/docs/components">
231
+ Thành phần
232
+ </BreadcrumbLink>
233
+ </BreadcrumbItem>
234
+ <BreadcrumbSeparator />
235
+ <BreadcrumbItem>
236
+ <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
237
+ </BreadcrumbItem>
238
+ </BreadcrumbList>
239
+ </Breadcrumb>
240
+ </ExampleSection>
241
+ </ExampleGrid>
242
+ </div>
243
+ );
244
+ }
245
+
246
+ // ──────────────────────────────────────────────────────────
247
+ // SECTION 3: Entry point
248
+ // ──────────────────────────────────────────────────────────
249
+ export default function BreadcrumbShowcase() {
250
+ return (
251
+ <Showcase
252
+ title="Breadcrumb"
253
+ description="Hiển thị đường dẫn điều hướng, giúp người dùng biết vị trí hiện tại trong hệ thống."
254
+ generalConcept={
255
+ <ShowcaseDocs>
256
+ <DocsP>
257
+ Dùng để hiển thị đường dẫn điều hướng, giúp người dùng nhận biết vị
258
+ trí hiện tại của họ trong cấu trúc của ứng dụng và cho phép họ dễ
259
+ dàng quay lại các trang cấp cao hơn.
260
+ </DocsP>
261
+ </ShowcaseDocs>
262
+ }
263
+ tabs={[
264
+ { label: "Micro (Primitive)", content: <BreadcrumbMicroShowcase /> },
265
+ { label: "Macro (Preset)", content: <BreadcrumbMacroShowcase /> },
266
+ ]}
267
+ />
268
+ );
269
+ }