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,119 @@
1
+ import { useDevContext } from "../../dev/components/dev-context";
2
+ import {
3
+ DocsH3,
4
+ DocsP,
5
+ ExampleSection,
6
+ Showcase,
7
+ ShowcaseDocs,
8
+ } from "../../dev/components/showcase";
9
+ import { useState } from "react";
10
+ import { toast } from "sonner";
11
+
12
+ import { Button } from "../../components/micro/button";
13
+ import { type Size } from "../../lib/types";
14
+
15
+ function ToastMicroShowcase({ globalSize }: { globalSize: Size }) {
16
+ return (
17
+ <div className="space-y-10 mt-6">
18
+ <ExampleSection
19
+ label="Toast Notifications"
20
+ description="Nhấp để kích hoạt các loại toast khác nhau."
21
+ codeString={`<div className="flex flex-wrap gap-3">
22
+ <Button
23
+ variant="outline"
24
+ onClick={() => {
25
+ toast("Event has been created", {
26
+ description: "Sunday, December 03, 2023 at 9:00 AM",
27
+ action: {
28
+ label: "Undo",
29
+ onClick: () => console.log("Undo"),
30
+ },
31
+ });
32
+ }}
33
+ >
34
+ Show Toast
35
+ </Button>
36
+ <Button
37
+ variant="outline"
38
+ color="success"
39
+ onClick={() => {
40
+ toast.success("Profile updated successfully");
41
+ }}
42
+ >
43
+ Success Toast
44
+ </Button>
45
+ <Button
46
+ variant="outline"
47
+ color="destructive"
48
+ onClick={() => {
49
+ toast.error("Failed to update profile");
50
+ }}
51
+ >
52
+ Error Toast
53
+ </Button>
54
+ </div>
55
+ `}
56
+ >
57
+ <div className="flex flex-wrap gap-3">
58
+ <Button
59
+ variant="outline"
60
+ size={globalSize}
61
+ onClick={() => {
62
+ toast("Event has been created", {
63
+ description: "Sunday, December 03, 2023 at 9:00 AM",
64
+ action: {
65
+ label: "Undo",
66
+ onClick: () => console.log("Undo"),
67
+ },
68
+ });
69
+ }}
70
+ >
71
+ Show Toast
72
+ </Button>
73
+ <Button
74
+ variant="outline"
75
+ color="success"
76
+ size={globalSize}
77
+ onClick={() => {
78
+ toast.success("Profile updated successfully");
79
+ }}
80
+ >
81
+ Success Toast
82
+ </Button>
83
+ <Button
84
+ variant="outline"
85
+ color="destructive"
86
+ size={globalSize}
87
+ onClick={() => {
88
+ toast.error("Failed to update profile");
89
+ }}
90
+ >
91
+ Error Toast
92
+ </Button>
93
+ </div>
94
+ </ExampleSection>
95
+ </div>
96
+ );
97
+ }
98
+
99
+ export default function ToastShowcase() {
100
+ const { size: globalSize } = useDevContext();
101
+ return (
102
+ <Showcase
103
+ title="Toast"
104
+ description="Một thông báo ngắn gọn được hiển thị tạm thời."
105
+ generalConcept={
106
+ <ShowcaseDocs>
107
+ <DocsH3>Toast (Sonner)</DocsH3>
108
+ <DocsP>Sử dụng để hiển thị các thông báo nhanh cho người dùng.</DocsP>
109
+ </ShowcaseDocs>
110
+ }
111
+ tabs={[
112
+ {
113
+ label: "Micro (Primitive)",
114
+ content: <ToastMicroShowcase globalSize={globalSize} />,
115
+ },
116
+ ]}
117
+ />
118
+ );
119
+ }
@@ -0,0 +1,223 @@
1
+ import { useDevContext } from "../../dev/components/dev-context";
2
+ import { useState } from "react";
3
+ import {
4
+ AlignCenterIcon,
5
+ AlignLeftIcon,
6
+ AlignRightIcon,
7
+ BoldIcon,
8
+ ItalicIcon,
9
+ UnderlineIcon,
10
+ } from "lucide-react";
11
+
12
+ import {
13
+ ToggleGroup,
14
+ ToggleGroupItem,
15
+ } from "../../components/micro/toggle-group";
16
+ import { type Size } from "../../lib/types";
17
+ import {
18
+ DocsCode,
19
+ DocsH3,
20
+ DocsP,
21
+ ExampleGrid,
22
+ ExampleSection,
23
+ Showcase,
24
+ ShowcaseDocs,
25
+ } from "../../dev/components/showcase";
26
+
27
+ // ──────────────────────────────────────────────────────────
28
+ // SECTION 1: Micro Content
29
+ // ──────────────────────────────────────────────────────────
30
+ function ToggleGroupMicroShowcase({ globalSize }: { globalSize: Size }) {
31
+ return (
32
+ <div className="space-y-10 mt-6">
33
+ {/* Single vs Multiple */}
34
+ <ExampleGrid>
35
+ <ExampleSection
36
+ label="Single Selection"
37
+ description="Chỉ có một mục có thể hoạt động tại một thời điểm."
38
+ codeString={`<ToggleGroup defaultValue={["center"]}>
39
+ <ToggleGroupItem value="left" aria-label="Align left">
40
+ <AlignLeftIcon />
41
+ </ToggleGroupItem>
42
+ <ToggleGroupItem value="center" aria-label="Align center">
43
+ <AlignCenterIcon />
44
+ </ToggleGroupItem>
45
+ <ToggleGroupItem value="right" aria-label="Align right">
46
+ <AlignRightIcon />
47
+ </ToggleGroupItem>
48
+ </ToggleGroup>`}
49
+ >
50
+ <ToggleGroup defaultValue={["center"]} size={globalSize}>
51
+ <ToggleGroupItem value="left" aria-label="Align left">
52
+ <AlignLeftIcon />
53
+ </ToggleGroupItem>
54
+ <ToggleGroupItem value="center" aria-label="Align center">
55
+ <AlignCenterIcon />
56
+ </ToggleGroupItem>
57
+ <ToggleGroupItem value="right" aria-label="Align right">
58
+ <AlignRightIcon />
59
+ </ToggleGroupItem>
60
+ </ToggleGroup>
61
+ </ExampleSection>
62
+
63
+ <ExampleSection
64
+ label="Multiple Selection"
65
+ description="Nhiều mục có thể được kích hoạt đồng thời."
66
+ codeString={`<ToggleGroup defaultValue={["bold", "italic"]}>
67
+ <ToggleGroupItem value="bold" aria-label="Toggle bold">
68
+ <BoldIcon />
69
+ </ToggleGroupItem>
70
+ <ToggleGroupItem value="italic" aria-label="Toggle italic">
71
+ <ItalicIcon />
72
+ </ToggleGroupItem>
73
+ <ToggleGroupItem value="underline" aria-label="Toggle underline">
74
+ <UnderlineIcon />
75
+ </ToggleGroupItem>
76
+ </ToggleGroup>`}
77
+ >
78
+ <ToggleGroup defaultValue={["bold", "italic"]} size={globalSize}>
79
+ <ToggleGroupItem value="bold" aria-label="Toggle bold">
80
+ <BoldIcon />
81
+ </ToggleGroupItem>
82
+ <ToggleGroupItem value="italic" aria-label="Toggle italic">
83
+ <ItalicIcon />
84
+ </ToggleGroupItem>
85
+ <ToggleGroupItem value="underline" aria-label="Toggle underline">
86
+ <UnderlineIcon />
87
+ </ToggleGroupItem>
88
+ </ToggleGroup>
89
+ </ExampleSection>
90
+ </ExampleGrid>
91
+
92
+ {/* Variants */}
93
+ <ExampleGrid>
94
+ <ExampleSection
95
+ label="Outline Variant"
96
+ description='variant="outline" — viền bao quanh từng item.'
97
+ codeString={`<ToggleGroup variant="outline">
98
+ <ToggleGroupItem value="bold" aria-label="Bold"><BoldIcon /></ToggleGroupItem>
99
+ <ToggleGroupItem value="italic" aria-label="Italic"><ItalicIcon /></ToggleGroupItem>
100
+ <ToggleGroupItem value="underline" aria-label="Underline"><UnderlineIcon /></ToggleGroupItem>
101
+ </ToggleGroup>`}
102
+ >
103
+ <ToggleGroup variant="outline" size={globalSize}>
104
+ <ToggleGroupItem value="bold" aria-label="Bold">
105
+ <BoldIcon />
106
+ </ToggleGroupItem>
107
+ <ToggleGroupItem value="italic" aria-label="Italic">
108
+ <ItalicIcon />
109
+ </ToggleGroupItem>
110
+ <ToggleGroupItem value="underline" aria-label="Underline">
111
+ <UnderlineIcon />
112
+ </ToggleGroupItem>
113
+ </ToggleGroup>
114
+ </ExampleSection>
115
+
116
+ <ExampleSection
117
+ label="Compact (spacing={0})"
118
+ description="spacing={0} — các nút dính liền nhau, phù hợp với toolbar."
119
+ codeString={`<ToggleGroup variant="outline" spacing={0}>
120
+ <ToggleGroupItem value="left" aria-label="Align left"><AlignLeftIcon /></ToggleGroupItem>
121
+ <ToggleGroupItem value="center" aria-label="Align center"><AlignCenterIcon /></ToggleGroupItem>
122
+ <ToggleGroupItem value="right" aria-label="Align right"><AlignRightIcon /></ToggleGroupItem>
123
+ </ToggleGroup>`}
124
+ >
125
+ <ToggleGroup variant="outline" spacing={0} size={globalSize}>
126
+ <ToggleGroupItem value="left" aria-label="Align left">
127
+ <AlignLeftIcon />
128
+ </ToggleGroupItem>
129
+ <ToggleGroupItem value="center" aria-label="Align center">
130
+ <AlignCenterIcon />
131
+ </ToggleGroupItem>
132
+ <ToggleGroupItem value="right" aria-label="Align right">
133
+ <AlignRightIcon />
134
+ </ToggleGroupItem>
135
+ </ToggleGroup>
136
+ </ExampleSection>
137
+ </ExampleGrid>
138
+
139
+ {/* Vertical & Disabled */}
140
+ <ExampleGrid>
141
+ <ExampleSection
142
+ label="Vertical"
143
+ description='orientation="vertical" — sắp xếp các nút theo chiều dọc.'
144
+ codeString={`<ToggleGroup orientation="vertical">
145
+ <ToggleGroupItem value="bold" aria-label="Bold"><BoldIcon /></ToggleGroupItem>
146
+ <ToggleGroupItem value="italic" aria-label="Italic"><ItalicIcon /></ToggleGroupItem>
147
+ <ToggleGroupItem value="underline" aria-label="Underline"><UnderlineIcon /></ToggleGroupItem>
148
+ </ToggleGroup>`}
149
+ >
150
+ <ToggleGroup orientation="vertical" size={globalSize}>
151
+ <ToggleGroupItem value="bold" aria-label="Bold">
152
+ <BoldIcon />
153
+ </ToggleGroupItem>
154
+ <ToggleGroupItem value="italic" aria-label="Italic">
155
+ <ItalicIcon />
156
+ </ToggleGroupItem>
157
+ <ToggleGroupItem value="underline" aria-label="Underline">
158
+ <UnderlineIcon />
159
+ </ToggleGroupItem>
160
+ </ToggleGroup>
161
+ </ExampleSection>
162
+
163
+ <ExampleSection
164
+ label="Disabled Items"
165
+ description="Từng ToggleGroupItem có thể bị vô hiệu hóa riêng lẻ."
166
+ codeString={`<ToggleGroup>
167
+ <ToggleGroupItem value="bold" aria-label="Bold"><BoldIcon /></ToggleGroupItem>
168
+ <ToggleGroupItem value="italic" disabled aria-label="Italic (disabled)"><ItalicIcon /></ToggleGroupItem>
169
+ <ToggleGroupItem value="underline" aria-label="Underline"><UnderlineIcon /></ToggleGroupItem>
170
+ </ToggleGroup>`}
171
+ >
172
+ <ToggleGroup size={globalSize}>
173
+ <ToggleGroupItem value="bold" aria-label="Bold">
174
+ <BoldIcon />
175
+ </ToggleGroupItem>
176
+ <ToggleGroupItem
177
+ value="italic"
178
+ disabled
179
+ aria-label="Italic (disabled)"
180
+ >
181
+ <ItalicIcon />
182
+ </ToggleGroupItem>
183
+ <ToggleGroupItem value="underline" aria-label="Underline">
184
+ <UnderlineIcon />
185
+ </ToggleGroupItem>
186
+ </ToggleGroup>
187
+ </ExampleSection>
188
+ </ExampleGrid>
189
+ </div>
190
+ );
191
+ }
192
+
193
+ // ──────────────────────────────────────────────────────────
194
+ // SECTION 2: Entry point
195
+ // ──────────────────────────────────────────────────────────
196
+ export default function ToggleGroupShowcase() {
197
+ const { size: globalSize } = useDevContext();
198
+ return (
199
+ <Showcase
200
+ title="Toggle Group"
201
+ description="Một tập hợp các nút hai trạng thái có thể bật hoặc tắt, hỗ trợ đơn và đa lựa chọn."
202
+ generalConcept={
203
+ <ShowcaseDocs>
204
+ <DocsH3>Toggle Group</DocsH3>
205
+ <DocsP>
206
+ <DocsCode>ToggleGroup</DocsCode> nhóm nhiều{" "}
207
+ <DocsCode>ToggleGroupItem</DocsCode> lại với nhau. Props{" "}
208
+ <DocsCode>variant</DocsCode> và <DocsCode>size</DocsCode> được
209
+ truyền qua Context xuống tất cả items — không cần set trên từng
210
+ item. Dùng <DocsCode>{"spacing={0}"}</DocsCode> để tạo toolbar
211
+ compact với các nút dính liền nhau.
212
+ </DocsP>
213
+ </ShowcaseDocs>
214
+ }
215
+ tabs={[
216
+ {
217
+ label: "Micro (Primitive)",
218
+ content: <ToggleGroupMicroShowcase globalSize={globalSize} />,
219
+ },
220
+ ]}
221
+ />
222
+ );
223
+ }
@@ -0,0 +1,171 @@
1
+ import { useDevContext } from "../../dev/components/dev-context";
2
+ import { useState } from "react";
3
+ import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
4
+
5
+ import { Toggle } from "../../components/micro/toggle";
6
+ import { type Size } from "../../lib/types";
7
+ import {
8
+ DocsCode,
9
+ DocsH3,
10
+ DocsP,
11
+ ExampleGrid,
12
+ ExampleSection,
13
+ Showcase,
14
+ ShowcaseDocs,
15
+ } from "../../dev/components/showcase";
16
+
17
+ // ──────────────────────────────────────────────────────────
18
+ // SECTION 1: Micro Content
19
+ // ──────────────────────────────────────────────────────────
20
+ function ToggleMicroShowcase({ globalSize }: { globalSize: Size }) {
21
+ return (
22
+ <div className="space-y-10 mt-6">
23
+ {/* Variants */}
24
+ <ExampleGrid>
25
+ <ExampleSection
26
+ label="Default (Ghost)"
27
+ description="Variant mặc định — không viền, chỉ đổi nền khi pressed."
28
+ codeString={`<Toggle aria-label="Toggle italic">
29
+ <ItalicIcon />
30
+ Italic
31
+ </Toggle>
32
+ <Toggle aria-label="Toggle bold">
33
+ <BoldIcon />
34
+ Bold
35
+ </Toggle>`}
36
+ >
37
+ <div className="flex gap-2">
38
+ <Toggle aria-label="Toggle italic" size={globalSize}>
39
+ <ItalicIcon />
40
+ Italic
41
+ </Toggle>
42
+ <Toggle aria-label="Toggle bold" size={globalSize}>
43
+ <BoldIcon />
44
+ Bold
45
+ </Toggle>
46
+ </div>
47
+ </ExampleSection>
48
+
49
+ <ExampleSection
50
+ label="Outline"
51
+ description='variant="outline" thêm viền border-input xung quanh toggle.'
52
+ codeString={`<Toggle variant="outline" aria-label="Toggle italic">
53
+ <ItalicIcon />
54
+ Italic
55
+ </Toggle>
56
+ <Toggle variant="outline" aria-label="Toggle underline">
57
+ <UnderlineIcon />
58
+ Underline
59
+ </Toggle>`}
60
+ >
61
+ <div className="flex gap-2">
62
+ <Toggle
63
+ variant="outline"
64
+ aria-label="Toggle italic"
65
+ size={globalSize}
66
+ >
67
+ <ItalicIcon />
68
+ Italic
69
+ </Toggle>
70
+ <Toggle
71
+ variant="outline"
72
+ aria-label="Toggle underline"
73
+ size={globalSize}
74
+ >
75
+ <UnderlineIcon />
76
+ Underline
77
+ </Toggle>
78
+ </div>
79
+ </ExampleSection>
80
+ </ExampleGrid>
81
+
82
+ {/* Icon Only & Disabled */}
83
+ <ExampleGrid>
84
+ <ExampleSection
85
+ label="Icon Only"
86
+ description="Toggle chỉ có icon — luôn truyền aria-label để đảm bảo a11y."
87
+ codeString={`<Toggle aria-label="Toggle italic"><ItalicIcon /></Toggle>
88
+ <Toggle aria-label="Toggle bold"><BoldIcon /></Toggle>
89
+ <Toggle variant="outline" aria-label="Toggle underline"><UnderlineIcon /></Toggle>`}
90
+ >
91
+ <div className="flex gap-2">
92
+ <Toggle aria-label="Toggle italic" size={globalSize}>
93
+ <ItalicIcon />
94
+ </Toggle>
95
+ <Toggle aria-label="Toggle bold" size={globalSize}>
96
+ <BoldIcon />
97
+ </Toggle>
98
+ <Toggle
99
+ variant="outline"
100
+ aria-label="Toggle underline"
101
+ size={globalSize}
102
+ >
103
+ <UnderlineIcon />
104
+ </Toggle>
105
+ </div>
106
+ </ExampleSection>
107
+
108
+ <ExampleSection
109
+ label="Disabled"
110
+ description="Toggle bị vô hiệu hóa — không thể tương tác, hiển thị mờ."
111
+ codeString={`<Toggle disabled aria-label="Toggle italic">
112
+ <ItalicIcon />
113
+ Italic
114
+ </Toggle>
115
+ <Toggle variant="outline" disabled aria-label="Toggle bold">
116
+ <BoldIcon />
117
+ Bold
118
+ </Toggle>`}
119
+ >
120
+ <div className="flex gap-2">
121
+ <Toggle disabled aria-label="Toggle italic" size={globalSize}>
122
+ <ItalicIcon />
123
+ Italic
124
+ </Toggle>
125
+ <Toggle
126
+ variant="outline"
127
+ disabled
128
+ aria-label="Toggle bold"
129
+ size={globalSize}
130
+ >
131
+ <BoldIcon />
132
+ Bold
133
+ </Toggle>
134
+ </div>
135
+ </ExampleSection>
136
+ </ExampleGrid>
137
+ </div>
138
+ );
139
+ }
140
+
141
+ // ──────────────────────────────────────────────────────────
142
+ // SECTION 2: Entry point
143
+ // ──────────────────────────────────────────────────────────
144
+ export default function ToggleShowcase() {
145
+ const { size: globalSize } = useDevContext();
146
+ return (
147
+ <Showcase
148
+ title="Toggle"
149
+ description="Nút hai trạng thái có thể bật hoặc tắt, hỗ trợ icon, text, variants và sizes."
150
+ generalConcept={
151
+ <ShowcaseDocs>
152
+ <DocsH3>Toggle</DocsH3>
153
+ <DocsP>
154
+ <DocsCode>Toggle</DocsCode> là nút có 2 trạng thái bật/tắt dựa trên{" "}
155
+ <DocsCode>aria-pressed</DocsCode>. Hỗ trợ 2 variant:{" "}
156
+ <DocsCode>default</DocsCode> (ghost, không viền) và{" "}
157
+ <DocsCode>outline</DocsCode> (có viền). Luôn truyền{" "}
158
+ <DocsCode>aria-label</DocsCode> khi Toggle chỉ chứa icon để đảm bảo
159
+ a11y.
160
+ </DocsP>
161
+ </ShowcaseDocs>
162
+ }
163
+ tabs={[
164
+ {
165
+ label: "Micro (Primitive)",
166
+ content: <ToggleMicroShowcase globalSize={globalSize} />,
167
+ },
168
+ ]}
169
+ />
170
+ );
171
+ }