gladvn 0.2.22 → 0.2.27

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 (463) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -58
  3. package/bin/cli.js +352 -150
  4. package/llms.txt +7 -5
  5. package/package.json +14 -26
  6. package/src/blocks/auth-card.tsx +104 -0
  7. package/src/blocks/auth-dialog.tsx +116 -0
  8. package/src/blocks/auth-recovery.tsx +61 -0
  9. package/src/blocks/auth-split.tsx +132 -0
  10. package/src/blocks/dashboard.tsx +182 -0
  11. package/src/blocks/settings.tsx +104 -0
  12. package/src/components/macro/accordion-preset.tsx +2 -1
  13. package/src/components/macro/alert-dialog-preset.tsx +3 -2
  14. package/src/components/macro/alert-preset.tsx +2 -1
  15. package/src/components/macro/avatar-preset.tsx +2 -1
  16. package/src/components/macro/breadcrumb-preset.tsx +2 -1
  17. package/src/components/macro/card-preset.tsx +2 -1
  18. package/src/components/macro/carousel-preset.tsx +2 -1
  19. package/src/components/macro/checkbox-preset.tsx +2 -1
  20. package/src/components/macro/combobox-preset.tsx +5 -3
  21. package/src/components/macro/command-preset.tsx +7 -4
  22. package/src/components/macro/date-picker.tsx +3 -2
  23. package/src/components/macro/dialog-preset.tsx +3 -2
  24. package/src/components/macro/empty-preset.tsx +2 -1
  25. package/src/components/macro/field-preset.tsx +2 -1
  26. package/src/components/macro/input-otp-preset.tsx +2 -1
  27. package/src/components/macro/input-preset.tsx +2 -1
  28. package/src/components/macro/pagination-preset.tsx +2 -1
  29. package/src/components/macro/progress-preset.tsx +2 -1
  30. package/src/components/macro/select-preset.tsx +3 -2
  31. package/src/components/macro/slider-preset.tsx +2 -1
  32. package/src/components/macro/switch-preset.tsx +2 -1
  33. package/src/components/macro/tabs-preset.tsx +2 -1
  34. package/src/components/micro/accordion.test.tsx +96 -0
  35. package/src/components/micro/alert-dialog.tsx +1 -1
  36. package/src/components/micro/alert.test.tsx +77 -0
  37. package/src/components/micro/avatar.tsx +1 -1
  38. package/src/components/micro/badge.test.tsx +57 -0
  39. package/src/components/micro/breadcrumb.tsx +1 -1
  40. package/src/components/micro/button.test.tsx +101 -4
  41. package/src/components/micro/card.test.tsx +54 -0
  42. package/src/components/micro/card.tsx +1 -1
  43. package/src/components/micro/carousel.tsx +1 -1
  44. package/src/components/micro/chart.tsx +1 -1
  45. package/src/components/micro/checkbox.test.tsx +92 -0
  46. package/src/components/micro/combobox.tsx +1 -1
  47. package/src/components/micro/command.tsx +1 -1
  48. package/src/components/micro/context-menu.tsx +1 -1
  49. package/src/components/micro/dialog.test.tsx +127 -0
  50. package/src/components/micro/dialog.tsx +1 -1
  51. package/src/components/micro/direction.tsx +1 -1
  52. package/src/components/micro/drawer.tsx +2 -2
  53. package/src/components/micro/dropdown-menu.test.tsx +132 -0
  54. package/src/components/micro/dropdown-menu.tsx +1 -1
  55. package/src/components/micro/empty.tsx +1 -1
  56. package/src/components/micro/field.tsx +1 -1
  57. package/src/components/micro/input-group.tsx +1 -1
  58. package/src/components/micro/input.test.tsx +95 -0
  59. package/src/components/micro/item.tsx +1 -1
  60. package/src/components/micro/menubar.tsx +1 -1
  61. package/src/components/micro/navigation-menu.tsx +1 -1
  62. package/src/components/micro/pagination.tsx +1 -1
  63. package/src/components/micro/popover.test.tsx +83 -0
  64. package/src/components/micro/popover.tsx +1 -1
  65. package/src/components/micro/progress.tsx +1 -1
  66. package/src/components/micro/select.test.tsx +122 -0
  67. package/src/components/micro/select.tsx +1 -1
  68. package/src/components/micro/sheet.test.tsx +122 -0
  69. package/src/components/micro/sheet.tsx +1 -1
  70. package/src/components/micro/sidebar.tsx +1 -1
  71. package/src/components/micro/switch.test.tsx +108 -0
  72. package/src/components/micro/table.tsx +1 -1
  73. package/src/components/micro/tabs.test.tsx +90 -0
  74. package/src/components/micro/tooltip.test.tsx +107 -0
  75. package/src/components/micro/tooltip.tsx +1 -1
  76. package/src/dev/data.ts +8 -0
  77. package/src/dev/main.tsx +4 -0
  78. package/src/dev/showcase/accordion.tsx +4 -2
  79. package/src/dev/showcase/alert-dialog.tsx +7 -4
  80. package/src/dev/showcase/alert.tsx +6 -3
  81. package/src/dev/showcase/aspect-ratio.tsx +2 -1
  82. package/src/dev/showcase/avatar.tsx +6 -3
  83. package/src/dev/showcase/badge.tsx +2 -1
  84. package/src/dev/showcase/breadcrumb.tsx +7 -4
  85. package/src/dev/showcase/button.tsx +2 -1
  86. package/src/dev/showcase/calendar.tsx +2 -1
  87. package/src/dev/showcase/card.tsx +4 -2
  88. package/src/dev/showcase/carousel.tsx +4 -2
  89. package/src/dev/showcase/chart.tsx +4 -2
  90. package/src/dev/showcase/checkbox.tsx +4 -2
  91. package/src/dev/showcase/collapsible.tsx +4 -2
  92. package/src/dev/showcase/combobox.tsx +9 -5
  93. package/src/dev/showcase/command.tsx +6 -3
  94. package/src/dev/showcase/context-menu.tsx +5 -3
  95. package/src/dev/showcase/dialog.tsx +5 -3
  96. package/src/dev/showcase/drawer.tsx +5 -3
  97. package/src/dev/showcase/dropdown-menu.tsx +7 -4
  98. package/src/dev/showcase/empty.tsx +6 -3
  99. package/src/dev/showcase/hover-card.tsx +7 -4
  100. package/src/dev/showcase/input-group.tsx +6 -3
  101. package/src/dev/showcase/input-otp.tsx +6 -3
  102. package/src/dev/showcase/input.tsx +6 -3
  103. package/src/dev/showcase/item.tsx +4 -2
  104. package/src/dev/showcase/kbd.tsx +10 -6
  105. package/src/dev/showcase/label.tsx +2 -1
  106. package/src/dev/showcase/menubar.tsx +5 -3
  107. package/src/dev/showcase/navigation-menu.tsx +5 -3
  108. package/src/dev/showcase/overview.tsx +9 -5
  109. package/src/dev/showcase/pagination.tsx +4 -2
  110. package/src/dev/showcase/popover.tsx +5 -3
  111. package/src/dev/showcase/progress.tsx +4 -2
  112. package/src/dev/showcase/radio-group.tsx +2 -1
  113. package/src/dev/showcase/resizable.tsx +4 -2
  114. package/src/dev/showcase/scroll-area.tsx +2 -1
  115. package/src/dev/showcase/select.tsx +7 -4
  116. package/src/dev/showcase/separator.tsx +2 -1
  117. package/src/dev/showcase/sheet.tsx +5 -3
  118. package/src/dev/showcase/sidebar.tsx +4 -2
  119. package/src/dev/showcase/skeleton.tsx +2 -1
  120. package/src/dev/showcase/slider.tsx +6 -3
  121. package/src/dev/showcase/sonner.tsx +2 -1
  122. package/src/dev/showcase/spinner.tsx +2 -1
  123. package/src/dev/showcase/switch.tsx +2 -1
  124. package/src/dev/showcase/table.tsx +4 -2
  125. package/src/dev/showcase/tabs.tsx +4 -2
  126. package/src/dev/showcase/textarea.tsx +6 -3
  127. package/src/dev/showcase/toast.tsx +2 -1
  128. package/src/dev/showcase/toggle-group.tsx +6 -3
  129. package/src/dev/showcase/toggle.tsx +2 -1
  130. package/src/dev/showcase/tooltip.tsx +5 -3
  131. package/src/dev/showcase/why.tsx +271 -0
  132. package/src/hooks/use-mobile.test.ts +72 -0
  133. package/src/lib/utils.test.ts +26 -10
  134. package/src/styles/gladvn.css +0 -1
  135. package/src/styles/tokens.css +4 -0
  136. package/dist/components/macro/accordion-preset.d.ts +0 -14
  137. package/dist/components/macro/accordion-preset.d.ts.map +0 -1
  138. package/dist/components/macro/alert-dialog-preset.d.ts +0 -26
  139. package/dist/components/macro/alert-dialog-preset.d.ts.map +0 -1
  140. package/dist/components/macro/alert-preset.d.ts +0 -14
  141. package/dist/components/macro/alert-preset.d.ts.map +0 -1
  142. package/dist/components/macro/avatar-preset.d.ts +0 -11
  143. package/dist/components/macro/avatar-preset.d.ts.map +0 -1
  144. package/dist/components/macro/breadcrumb-preset.d.ts +0 -12
  145. package/dist/components/macro/breadcrumb-preset.d.ts.map +0 -1
  146. package/dist/components/macro/card-preset.d.ts +0 -10
  147. package/dist/components/macro/card-preset.d.ts.map +0 -1
  148. package/dist/components/macro/carousel-preset.d.ts +0 -18
  149. package/dist/components/macro/carousel-preset.d.ts.map +0 -1
  150. package/dist/components/macro/checkbox-preset.d.ts +0 -14
  151. package/dist/components/macro/checkbox-preset.d.ts.map +0 -1
  152. package/dist/components/macro/combobox-preset.d.ts +0 -27
  153. package/dist/components/macro/combobox-preset.d.ts.map +0 -1
  154. package/dist/components/macro/command-preset.d.ts +0 -16
  155. package/dist/components/macro/command-preset.d.ts.map +0 -1
  156. package/dist/components/macro/date-picker.d.ts +0 -62
  157. package/dist/components/macro/date-picker.d.ts.map +0 -1
  158. package/dist/components/macro/dialog-preset.d.ts +0 -24
  159. package/dist/components/macro/dialog-preset.d.ts.map +0 -1
  160. package/dist/components/macro/empty-preset.d.ts +0 -15
  161. package/dist/components/macro/empty-preset.d.ts.map +0 -1
  162. package/dist/components/macro/field-preset.d.ts +0 -15
  163. package/dist/components/macro/field-preset.d.ts.map +0 -1
  164. package/dist/components/macro/index.d.ts +0 -22
  165. package/dist/components/macro/index.d.ts.map +0 -1
  166. package/dist/components/macro/input-otp-preset.d.ts +0 -19
  167. package/dist/components/macro/input-otp-preset.d.ts.map +0 -1
  168. package/dist/components/macro/input-preset.d.ts +0 -21
  169. package/dist/components/macro/input-preset.d.ts.map +0 -1
  170. package/dist/components/macro/pagination-preset.d.ts +0 -13
  171. package/dist/components/macro/pagination-preset.d.ts.map +0 -1
  172. package/dist/components/macro/progress-preset.d.ts +0 -10
  173. package/dist/components/macro/progress-preset.d.ts.map +0 -1
  174. package/dist/components/macro/radio-group-preset.d.ts +0 -22
  175. package/dist/components/macro/radio-group-preset.d.ts.map +0 -1
  176. package/dist/components/macro/select-preset.d.ts +0 -42
  177. package/dist/components/macro/select-preset.d.ts.map +0 -1
  178. package/dist/components/macro/slider-preset.d.ts +0 -12
  179. package/dist/components/macro/slider-preset.d.ts.map +0 -1
  180. package/dist/components/macro/switch-preset.d.ts +0 -12
  181. package/dist/components/macro/switch-preset.d.ts.map +0 -1
  182. package/dist/components/macro/tabs-preset.d.ts +0 -17
  183. package/dist/components/macro/tabs-preset.d.ts.map +0 -1
  184. package/dist/components/macro/textarea-preset.d.ts +0 -17
  185. package/dist/components/macro/textarea-preset.d.ts.map +0 -1
  186. package/dist/components/micro/accordion.d.ts +0 -15
  187. package/dist/components/micro/accordion.d.ts.map +0 -1
  188. package/dist/components/micro/alert-dialog.d.ts +0 -33
  189. package/dist/components/micro/alert-dialog.d.ts.map +0 -1
  190. package/dist/components/micro/alert.d.ts +0 -35
  191. package/dist/components/micro/alert.d.ts.map +0 -1
  192. package/dist/components/micro/aspect-ratio.d.ts +0 -20
  193. package/dist/components/micro/aspect-ratio.d.ts.map +0 -1
  194. package/dist/components/micro/avatar.d.ts +0 -23
  195. package/dist/components/micro/avatar.d.ts.map +0 -1
  196. package/dist/components/micro/badge.d.ts +0 -23
  197. package/dist/components/micro/badge.d.ts.map +0 -1
  198. package/dist/components/micro/breadcrumb.d.ts +0 -31
  199. package/dist/components/micro/breadcrumb.d.ts.map +0 -1
  200. package/dist/components/micro/button.d.ts +0 -46
  201. package/dist/components/micro/button.d.ts.map +0 -1
  202. package/dist/components/micro/calendar.d.ts +0 -28
  203. package/dist/components/micro/calendar.d.ts.map +0 -1
  204. package/dist/components/micro/card.d.ts +0 -28
  205. package/dist/components/micro/card.d.ts.map +0 -1
  206. package/dist/components/micro/carousel.d.ts +0 -29
  207. package/dist/components/micro/carousel.d.ts.map +0 -1
  208. package/dist/components/micro/chart.d.ts +0 -49
  209. package/dist/components/micro/chart.d.ts.map +0 -1
  210. package/dist/components/micro/checkbox.d.ts +0 -17
  211. package/dist/components/micro/checkbox.d.ts.map +0 -1
  212. package/dist/components/micro/collapsible.d.ts +0 -15
  213. package/dist/components/micro/collapsible.d.ts.map +0 -1
  214. package/dist/components/micro/combobox.d.ts +0 -34
  215. package/dist/components/micro/combobox.d.ts.map +0 -1
  216. package/dist/components/micro/command.d.ts +0 -79
  217. package/dist/components/micro/command.d.ts.map +0 -1
  218. package/dist/components/micro/context-menu.d.ts +0 -58
  219. package/dist/components/micro/context-menu.d.ts.map +0 -1
  220. package/dist/components/micro/dialog.d.ts +0 -15
  221. package/dist/components/micro/dialog.d.ts.map +0 -1
  222. package/dist/components/micro/direction.d.ts +0 -2
  223. package/dist/components/micro/direction.d.ts.map +0 -1
  224. package/dist/components/micro/drawer.d.ts +0 -18
  225. package/dist/components/micro/drawer.d.ts.map +0 -1
  226. package/dist/components/micro/dropdown-menu.d.ts +0 -40
  227. package/dist/components/micro/dropdown-menu.d.ts.map +0 -1
  228. package/dist/components/micro/empty.d.ts +0 -30
  229. package/dist/components/micro/empty.d.ts.map +0 -1
  230. package/dist/components/micro/field.d.ts +0 -29
  231. package/dist/components/micro/field.d.ts.map +0 -1
  232. package/dist/components/micro/hover-card.d.ts +0 -18
  233. package/dist/components/micro/hover-card.d.ts.map +0 -1
  234. package/dist/components/micro/input-group.d.ts +0 -17
  235. package/dist/components/micro/input-group.d.ts.map +0 -1
  236. package/dist/components/micro/input-otp.d.ts +0 -44
  237. package/dist/components/micro/input-otp.d.ts.map +0 -1
  238. package/dist/components/micro/input.d.ts +0 -29
  239. package/dist/components/micro/input.d.ts.map +0 -1
  240. package/dist/components/micro/item.d.ts +0 -31
  241. package/dist/components/micro/item.d.ts.map +0 -1
  242. package/dist/components/micro/kbd.d.ts +0 -9
  243. package/dist/components/micro/kbd.d.ts.map +0 -1
  244. package/dist/components/micro/label.d.ts +0 -15
  245. package/dist/components/micro/label.d.ts.map +0 -1
  246. package/dist/components/micro/menubar.d.ts +0 -40
  247. package/dist/components/micro/menubar.d.ts.map +0 -1
  248. package/dist/components/micro/navigation-menu.d.ts +0 -26
  249. package/dist/components/micro/navigation-menu.d.ts.map +0 -1
  250. package/dist/components/micro/pagination.d.ts +0 -33
  251. package/dist/components/micro/pagination.d.ts.map +0 -1
  252. package/dist/components/micro/popover.d.ts +0 -24
  253. package/dist/components/micro/popover.d.ts.map +0 -1
  254. package/dist/components/micro/progress.d.ts +0 -19
  255. package/dist/components/micro/progress.d.ts.map +0 -1
  256. package/dist/components/micro/radio-group.d.ts +0 -13
  257. package/dist/components/micro/radio-group.d.ts.map +0 -1
  258. package/dist/components/micro/resizable.d.ts +0 -12
  259. package/dist/components/micro/resizable.d.ts.map +0 -1
  260. package/dist/components/micro/scroll-area.d.ts +0 -12
  261. package/dist/components/micro/scroll-area.d.ts.map +0 -1
  262. package/dist/components/micro/select.d.ts +0 -22
  263. package/dist/components/micro/select.d.ts.map +0 -1
  264. package/dist/components/micro/separator.d.ts +0 -9
  265. package/dist/components/micro/separator.d.ts.map +0 -1
  266. package/dist/components/micro/sheet.d.ts +0 -17
  267. package/dist/components/micro/sheet.d.ts.map +0 -1
  268. package/dist/components/micro/sidebar.d.ts +0 -28
  269. package/dist/components/micro/sidebar.d.ts.map +0 -1
  270. package/dist/components/micro/skeleton.d.ts +0 -16
  271. package/dist/components/micro/skeleton.d.ts.map +0 -1
  272. package/dist/components/micro/slider.d.ts +0 -21
  273. package/dist/components/micro/slider.d.ts.map +0 -1
  274. package/dist/components/micro/sonner.d.ts +0 -5
  275. package/dist/components/micro/sonner.d.ts.map +0 -1
  276. package/dist/components/micro/spinner.d.ts +0 -21
  277. package/dist/components/micro/spinner.d.ts.map +0 -1
  278. package/dist/components/micro/switch.d.ts +0 -13
  279. package/dist/components/micro/switch.d.ts.map +0 -1
  280. package/dist/components/micro/table.d.ts +0 -17
  281. package/dist/components/micro/table.d.ts.map +0 -1
  282. package/dist/components/micro/tabs.d.ts +0 -13
  283. package/dist/components/micro/tabs.d.ts.map +0 -1
  284. package/dist/components/micro/textarea.d.ts +0 -24
  285. package/dist/components/micro/textarea.d.ts.map +0 -1
  286. package/dist/components/micro/theme-provider.d.ts +0 -76
  287. package/dist/components/micro/theme-provider.d.ts.map +0 -1
  288. package/dist/components/micro/toggle-group.d.ts +0 -22
  289. package/dist/components/micro/toggle-group.d.ts.map +0 -1
  290. package/dist/components/micro/toggle.d.ts +0 -16
  291. package/dist/components/micro/toggle.d.ts.map +0 -1
  292. package/dist/components/micro/tooltip.d.ts +0 -21
  293. package/dist/components/micro/tooltip.d.ts.map +0 -1
  294. package/dist/dev/App.d.ts +0 -3
  295. package/dist/dev/App.d.ts.map +0 -1
  296. package/dist/dev/components/GladvnLogo.d.ts +0 -10
  297. package/dist/dev/components/GladvnLogo.d.ts.map +0 -1
  298. package/dist/dev/components/code-highlighter.d.ts +0 -5
  299. package/dist/dev/components/code-highlighter.d.ts.map +0 -1
  300. package/dist/dev/components/dev-context.d.ts +0 -12
  301. package/dist/dev/components/dev-context.d.ts.map +0 -1
  302. package/dist/dev/components/showcase.d.ts +0 -72
  303. package/dist/dev/components/showcase.d.ts.map +0 -1
  304. package/dist/dev/data.d.ts +0 -68
  305. package/dist/dev/data.d.ts.map +0 -1
  306. package/dist/dev/main.d.ts +0 -1
  307. package/dist/dev/main.d.ts.map +0 -1
  308. package/dist/dev/sections/buttons.d.ts +0 -2
  309. package/dist/dev/sections/buttons.d.ts.map +0 -1
  310. package/dist/dev/sections/display.d.ts +0 -2
  311. package/dist/dev/sections/display.d.ts.map +0 -1
  312. package/dist/dev/sections/feedback.d.ts +0 -2
  313. package/dist/dev/sections/feedback.d.ts.map +0 -1
  314. package/dist/dev/sections/forms.d.ts +0 -2
  315. package/dist/dev/sections/forms.d.ts.map +0 -1
  316. package/dist/dev/sections/interactive.d.ts +0 -2
  317. package/dist/dev/sections/interactive.d.ts.map +0 -1
  318. package/dist/dev/sections/overview.d.ts +0 -2
  319. package/dist/dev/sections/overview.d.ts.map +0 -1
  320. package/dist/dev/showcase/accordion.d.ts +0 -2
  321. package/dist/dev/showcase/accordion.d.ts.map +0 -1
  322. package/dist/dev/showcase/alert-dialog.d.ts +0 -2
  323. package/dist/dev/showcase/alert-dialog.d.ts.map +0 -1
  324. package/dist/dev/showcase/alert.d.ts +0 -2
  325. package/dist/dev/showcase/alert.d.ts.map +0 -1
  326. package/dist/dev/showcase/aspect-ratio.d.ts +0 -2
  327. package/dist/dev/showcase/aspect-ratio.d.ts.map +0 -1
  328. package/dist/dev/showcase/avatar.d.ts +0 -2
  329. package/dist/dev/showcase/avatar.d.ts.map +0 -1
  330. package/dist/dev/showcase/badge.d.ts +0 -2
  331. package/dist/dev/showcase/badge.d.ts.map +0 -1
  332. package/dist/dev/showcase/breadcrumb.d.ts +0 -2
  333. package/dist/dev/showcase/breadcrumb.d.ts.map +0 -1
  334. package/dist/dev/showcase/button.d.ts +0 -2
  335. package/dist/dev/showcase/button.d.ts.map +0 -1
  336. package/dist/dev/showcase/calendar.d.ts +0 -2
  337. package/dist/dev/showcase/calendar.d.ts.map +0 -1
  338. package/dist/dev/showcase/card.d.ts +0 -2
  339. package/dist/dev/showcase/card.d.ts.map +0 -1
  340. package/dist/dev/showcase/carousel.d.ts +0 -2
  341. package/dist/dev/showcase/carousel.d.ts.map +0 -1
  342. package/dist/dev/showcase/chart.d.ts +0 -2
  343. package/dist/dev/showcase/chart.d.ts.map +0 -1
  344. package/dist/dev/showcase/checkbox.d.ts +0 -2
  345. package/dist/dev/showcase/checkbox.d.ts.map +0 -1
  346. package/dist/dev/showcase/collapsible.d.ts +0 -3
  347. package/dist/dev/showcase/collapsible.d.ts.map +0 -1
  348. package/dist/dev/showcase/combobox.d.ts +0 -2
  349. package/dist/dev/showcase/combobox.d.ts.map +0 -1
  350. package/dist/dev/showcase/command.d.ts +0 -2
  351. package/dist/dev/showcase/command.d.ts.map +0 -1
  352. package/dist/dev/showcase/context-menu.d.ts +0 -2
  353. package/dist/dev/showcase/context-menu.d.ts.map +0 -1
  354. package/dist/dev/showcase/dialog.d.ts +0 -2
  355. package/dist/dev/showcase/dialog.d.ts.map +0 -1
  356. package/dist/dev/showcase/drawer.d.ts +0 -2
  357. package/dist/dev/showcase/drawer.d.ts.map +0 -1
  358. package/dist/dev/showcase/dropdown-menu.d.ts +0 -2
  359. package/dist/dev/showcase/dropdown-menu.d.ts.map +0 -1
  360. package/dist/dev/showcase/empty.d.ts +0 -2
  361. package/dist/dev/showcase/empty.d.ts.map +0 -1
  362. package/dist/dev/showcase/hover-card.d.ts +0 -2
  363. package/dist/dev/showcase/hover-card.d.ts.map +0 -1
  364. package/dist/dev/showcase/input-group.d.ts +0 -2
  365. package/dist/dev/showcase/input-group.d.ts.map +0 -1
  366. package/dist/dev/showcase/input-otp.d.ts +0 -2
  367. package/dist/dev/showcase/input-otp.d.ts.map +0 -1
  368. package/dist/dev/showcase/input.d.ts +0 -2
  369. package/dist/dev/showcase/input.d.ts.map +0 -1
  370. package/dist/dev/showcase/item.d.ts +0 -2
  371. package/dist/dev/showcase/item.d.ts.map +0 -1
  372. package/dist/dev/showcase/kbd.d.ts +0 -2
  373. package/dist/dev/showcase/kbd.d.ts.map +0 -1
  374. package/dist/dev/showcase/label.d.ts +0 -2
  375. package/dist/dev/showcase/label.d.ts.map +0 -1
  376. package/dist/dev/showcase/menubar.d.ts +0 -2
  377. package/dist/dev/showcase/menubar.d.ts.map +0 -1
  378. package/dist/dev/showcase/navigation-menu.d.ts +0 -3
  379. package/dist/dev/showcase/navigation-menu.d.ts.map +0 -1
  380. package/dist/dev/showcase/overview.d.ts +0 -2
  381. package/dist/dev/showcase/overview.d.ts.map +0 -1
  382. package/dist/dev/showcase/pagination.d.ts +0 -2
  383. package/dist/dev/showcase/pagination.d.ts.map +0 -1
  384. package/dist/dev/showcase/popover.d.ts +0 -2
  385. package/dist/dev/showcase/popover.d.ts.map +0 -1
  386. package/dist/dev/showcase/progress.d.ts +0 -2
  387. package/dist/dev/showcase/progress.d.ts.map +0 -1
  388. package/dist/dev/showcase/radio-group.d.ts +0 -2
  389. package/dist/dev/showcase/radio-group.d.ts.map +0 -1
  390. package/dist/dev/showcase/resizable.d.ts +0 -2
  391. package/dist/dev/showcase/resizable.d.ts.map +0 -1
  392. package/dist/dev/showcase/scroll-area.d.ts +0 -2
  393. package/dist/dev/showcase/scroll-area.d.ts.map +0 -1
  394. package/dist/dev/showcase/select.d.ts +0 -2
  395. package/dist/dev/showcase/select.d.ts.map +0 -1
  396. package/dist/dev/showcase/separator.d.ts +0 -2
  397. package/dist/dev/showcase/separator.d.ts.map +0 -1
  398. package/dist/dev/showcase/sheet.d.ts +0 -2
  399. package/dist/dev/showcase/sheet.d.ts.map +0 -1
  400. package/dist/dev/showcase/sidebar.d.ts +0 -2
  401. package/dist/dev/showcase/sidebar.d.ts.map +0 -1
  402. package/dist/dev/showcase/skeleton.d.ts +0 -2
  403. package/dist/dev/showcase/skeleton.d.ts.map +0 -1
  404. package/dist/dev/showcase/slider.d.ts +0 -2
  405. package/dist/dev/showcase/slider.d.ts.map +0 -1
  406. package/dist/dev/showcase/sonner.d.ts +0 -2
  407. package/dist/dev/showcase/sonner.d.ts.map +0 -1
  408. package/dist/dev/showcase/spinner.d.ts +0 -2
  409. package/dist/dev/showcase/spinner.d.ts.map +0 -1
  410. package/dist/dev/showcase/switch.d.ts +0 -2
  411. package/dist/dev/showcase/switch.d.ts.map +0 -1
  412. package/dist/dev/showcase/table.d.ts +0 -2
  413. package/dist/dev/showcase/table.d.ts.map +0 -1
  414. package/dist/dev/showcase/tabs.d.ts +0 -2
  415. package/dist/dev/showcase/tabs.d.ts.map +0 -1
  416. package/dist/dev/showcase/textarea.d.ts +0 -2
  417. package/dist/dev/showcase/textarea.d.ts.map +0 -1
  418. package/dist/dev/showcase/toast.d.ts +0 -2
  419. package/dist/dev/showcase/toast.d.ts.map +0 -1
  420. package/dist/dev/showcase/toggle-group.d.ts +0 -2
  421. package/dist/dev/showcase/toggle-group.d.ts.map +0 -1
  422. package/dist/dev/showcase/toggle.d.ts +0 -2
  423. package/dist/dev/showcase/toggle.d.ts.map +0 -1
  424. package/dist/dev/showcase/tooltip.d.ts +0 -2
  425. package/dist/dev/showcase/tooltip.d.ts.map +0 -1
  426. package/dist/hooks/use-controllable-state.d.ts +0 -14
  427. package/dist/hooks/use-controllable-state.d.ts.map +0 -1
  428. package/dist/hooks/use-mobile.d.ts +0 -2
  429. package/dist/hooks/use-mobile.d.ts.map +0 -1
  430. package/dist/index.cjs +0 -5099
  431. package/dist/index.cjs.map +0 -1
  432. package/dist/index.d.ts +0 -58
  433. package/dist/index.d.ts.map +0 -1
  434. package/dist/index.js +0 -4753
  435. package/dist/index.js.map +0 -1
  436. package/dist/lib/types.d.ts +0 -4
  437. package/dist/lib/types.d.ts.map +0 -1
  438. package/dist/lib/utils.d.ts +0 -3
  439. package/dist/lib/utils.d.ts.map +0 -1
  440. package/dist/preset.d.ts +0 -18
  441. package/dist/preset.d.ts.map +0 -1
  442. package/dist/test/setup.d.ts +0 -1
  443. package/dist/test/setup.d.ts.map +0 -1
  444. package/scripts/add-icononly-prop.ts +0 -84
  445. package/scripts/audit-best-practices.ts +0 -114
  446. package/scripts/audit-showcase.ts +0 -262
  447. package/scripts/audit-showcases.ts +0 -83
  448. package/scripts/clean-imports.ts +0 -21
  449. package/scripts/count_missing.ts +0 -24
  450. package/scripts/find-css-vars.ts +0 -62
  451. package/scripts/fix-portals.ts +0 -90
  452. package/scripts/format-codestrings.ts +0 -87
  453. package/scripts/full-audit.ts +0 -89
  454. package/scripts/merge-components.cjs +0 -65
  455. package/scripts/merge-components.js +0 -64
  456. package/scripts/optimize-barrel.ts +0 -116
  457. package/scripts/organize-imports.ts +0 -21
  458. package/scripts/refactor_divs.ts +0 -39
  459. package/scripts/regex-format.cjs +0 -67
  460. package/scripts/remove_div_wrappers.ts +0 -17
  461. package/scripts/tmp.tsx +0 -25
  462. package/scripts/update-gaps.ts +0 -83
  463. package/scripts/update_showcase_codestrings.ts +0 -87
@@ -1,14 +1,16 @@
1
1
  import {
2
2
  ResizableHandle,
3
3
  ResizablePanel,
4
- ResizablePanelGroup } from "../../components/micro/resizable";
4
+ ResizablePanelGroup
5
+ } from "../../components/micro/resizable";
5
6
  import {
6
7
  DocsCode,
7
8
  DocsP,
8
9
  ExampleGrid,
9
10
  ExampleSection,
10
11
  Showcase,
11
- ShowcaseDocs } from "../../dev/components/showcase";
12
+ ShowcaseDocs
13
+ } from "../../dev/components/showcase";
12
14
 
13
15
  // ──────────────────────────────────────────────────────────
14
16
  // SECTION 1: Micro Content
@@ -6,7 +6,8 @@ import {
6
6
  ExampleGrid,
7
7
  ExampleSection,
8
8
  Showcase,
9
- ShowcaseDocs } from "../../dev/components/showcase";
9
+ ShowcaseDocs
10
+ } from "../../dev/components/showcase";
10
11
 
11
12
  // ──────────────────────────────────────────────────────────
12
13
  // SECTION 1: Explicit Sub-components for Demo
@@ -9,19 +9,21 @@ import {
9
9
  FieldContent,
10
10
  FieldDescription,
11
11
  FieldError,
12
- FieldLabel } from "../../components/micro/field";
12
+ FieldLabel
13
+ } from "../../components/micro/field";
13
14
  import {
14
15
  Select,
15
16
  SelectContent,
16
17
  SelectGroup,
17
18
  SelectItem,
18
19
  SelectLabel,
19
-
20
+
20
21
  SelectScrollDownButton,
21
22
  SelectScrollUpButton,
22
23
  SelectSeparator,
23
24
  SelectTrigger,
24
- SelectValue } from "../../components/micro/select";
25
+ SelectValue
26
+ } from "../../components/micro/select";
25
27
  import { useDevContext } from "../../dev/components/dev-context";
26
28
  import {
27
29
  DocsCode,
@@ -30,7 +32,8 @@ import {
30
32
  ExampleGrid,
31
33
  ExampleSection,
32
34
  Showcase,
33
- ShowcaseDocs } from "../../dev/components/showcase";
35
+ ShowcaseDocs
36
+ } from "../../dev/components/showcase";
34
37
  import { type Size } from "../../lib/types";
35
38
 
36
39
  // ──────────────────────────────────────────────────────────
@@ -5,7 +5,8 @@ import {
5
5
  DocsP,
6
6
  ExampleSection,
7
7
  Showcase,
8
- ShowcaseDocs } from "../../dev/components/showcase";
8
+ ShowcaseDocs
9
+ } from "../../dev/components/showcase";
9
10
 
10
11
  // ──────────────────────────────────────────────────────────
11
12
  // SECTION 1: Micro Content (Only Micro exists)
@@ -12,9 +12,10 @@ import {
12
12
  SheetDescription,
13
13
  SheetFooter,
14
14
  SheetHeader,
15
-
15
+
16
16
  SheetTitle,
17
- SheetTrigger } from "../../components/micro/sheet";
17
+ SheetTrigger
18
+ } from "../../components/micro/sheet";
18
19
  import { useDevContext } from "../../dev/components/dev-context";
19
20
  import {
20
21
  DocsCode,
@@ -22,7 +23,8 @@ import {
22
23
  ExampleGrid,
23
24
  ExampleSection,
24
25
  Showcase,
25
- ShowcaseDocs } from "../../dev/components/showcase";
26
+ ShowcaseDocs
27
+ } from "../../dev/components/showcase";
26
28
  import { type Size } from "../../lib/types";
27
29
 
28
30
  // ──────────────────────────────────────────────────────────
@@ -6,12 +6,14 @@ import {
6
6
  SidebarLogo,
7
7
  SidebarMenuItem,
8
8
  SidebarMenuItemList,
9
- useSidebarToggle } from "../../components/micro/sidebar";
9
+ useSidebarToggle
10
+ } from "../../components/micro/sidebar";
10
11
  import {
11
12
  DocsP,
12
13
  ExampleSection,
13
14
  Showcase,
14
- ShowcaseDocs } from "../../dev/components/showcase";
15
+ ShowcaseDocs
16
+ } from "../../dev/components/showcase";
15
17
 
16
18
  function SidebarMicroShowcase() {
17
19
  const { sidebarRef, toggleSidebar, defaultState } =
@@ -6,7 +6,8 @@ import {
6
6
  ExampleGrid,
7
7
  ExampleSection,
8
8
  Showcase,
9
- ShowcaseDocs } from "../../dev/components/showcase";
9
+ ShowcaseDocs
10
+ } from "../../dev/components/showcase";
10
11
 
11
12
  // ──────────────────────────────────────────────────────────
12
13
  // SECTION 1: Micro Content (Only Micro exists)
@@ -6,13 +6,15 @@ import {
6
6
  FieldContent,
7
7
  FieldDescription,
8
8
  FieldError,
9
- FieldLabel } from "../../components/micro/field";
9
+ FieldLabel
10
+ } from "../../components/micro/field";
10
11
  import {
11
12
  Slider as CompositionalSlider,
12
13
  SliderControl,
13
14
  SliderIndicator,
14
15
  SliderThumb,
15
- SliderTrack } from "../../components/micro/slider";
16
+ SliderTrack
17
+ } from "../../components/micro/slider";
16
18
  import { useDevContext } from "../../dev/components/dev-context";
17
19
  import {
18
20
  DocsCode,
@@ -21,7 +23,8 @@ import {
21
23
  ExampleGrid,
22
24
  ExampleSection,
23
25
  Showcase,
24
- ShowcaseDocs } from "../../dev/components/showcase";
26
+ ShowcaseDocs
27
+ } from "../../dev/components/showcase";
25
28
  import { type Size } from "../../lib/types";
26
29
 
27
30
  // ──────────────────────────────────────────────────────────
@@ -8,7 +8,8 @@ import {
8
8
  ExampleGrid,
9
9
  ExampleSection,
10
10
  Showcase,
11
- ShowcaseDocs } from "../../dev/components/showcase";
11
+ ShowcaseDocs
12
+ } from "../../dev/components/showcase";
12
13
 
13
14
  // Simulated async operation for Promise demo
14
15
  const mockSave = () =>
@@ -7,7 +7,8 @@ import {
7
7
  ExampleGrid,
8
8
  ExampleSection,
9
9
  Showcase,
10
- ShowcaseDocs } from "../../dev/components/showcase";
10
+ ShowcaseDocs
11
+ } from "../../dev/components/showcase";
11
12
  import { type Size } from "../../lib/types";
12
13
 
13
14
  // ──────────────────────────────────────────────────────────
@@ -16,7 +16,8 @@ import {
16
16
  ExampleGrid,
17
17
  ExampleSection,
18
18
  Showcase,
19
- ShowcaseDocs } from "../../dev/components/showcase";
19
+ ShowcaseDocs
20
+ } from "../../dev/components/showcase";
20
21
  import { type Size } from "../../lib/types";
21
22
 
22
23
  // ──────────────────────────────────────────────────────────
@@ -8,13 +8,15 @@ import {
8
8
  TableFooter,
9
9
  TableHead,
10
10
  TableHeader,
11
- TableRow } from "../../components/micro/table";
11
+ TableRow
12
+ } from "../../components/micro/table";
12
13
  import {
13
14
  DocsH3,
14
15
  DocsP,
15
16
  ExampleSection,
16
17
  Showcase,
17
- ShowcaseDocs } from "../../dev/components/showcase";
18
+ ShowcaseDocs
19
+ } from "../../dev/components/showcase";
18
20
 
19
21
  type SortDirection = "asc" | "desc" | "none";
20
22
 
@@ -5,7 +5,8 @@ import {
5
5
  Tabs,
6
6
  TabsContent,
7
7
  TabsList,
8
- TabsTrigger } from "../../components/micro/tabs";
8
+ TabsTrigger
9
+ } from "../../components/micro/tabs";
9
10
  import {
10
11
  DocsCode,
11
12
  DocsH3,
@@ -13,7 +14,8 @@ import {
13
14
  ExampleGrid,
14
15
  ExampleSection,
15
16
  Showcase,
16
- ShowcaseDocs } from "../../dev/components/showcase";
17
+ ShowcaseDocs
18
+ } from "../../dev/components/showcase";
17
19
 
18
20
  // ──────────────────────────────────────────────────────────
19
21
  // SECTION 1: Macro Content
@@ -5,12 +5,14 @@ import {
5
5
  Field,
6
6
  FieldContent,
7
7
  FieldError,
8
- FieldLabel } from "../../components/micro/field";
8
+ FieldLabel
9
+ } from "../../components/micro/field";
9
10
  import {
10
11
  InputGroup,
11
12
  InputGroupAddon,
12
13
  InputGroupText,
13
- InputGroupTextarea } from "../../components/micro/input-group";
14
+ InputGroupTextarea
15
+ } from "../../components/micro/input-group";
14
16
  import { Textarea } from "../../components/micro/textarea";
15
17
  import { useDevContext } from "../../dev/components/dev-context";
16
18
  import {
@@ -20,7 +22,8 @@ import {
20
22
  ExampleGrid,
21
23
  ExampleSection,
22
24
  Showcase,
23
- ShowcaseDocs } from "../../dev/components/showcase";
25
+ ShowcaseDocs
26
+ } from "../../dev/components/showcase";
24
27
  import { type Size } from "../../lib/types";
25
28
 
26
29
  // ──────────────────────────────────────────────────────────
@@ -7,7 +7,8 @@ import {
7
7
  DocsP,
8
8
  ExampleSection,
9
9
  Showcase,
10
- ShowcaseDocs } from "../../dev/components/showcase";
10
+ ShowcaseDocs
11
+ } from "../../dev/components/showcase";
11
12
  import { type Size } from "../../lib/types";
12
13
 
13
14
  function ToastMicroShowcase({ globalSize }: { globalSize: Size }) {
@@ -4,11 +4,13 @@ import {
4
4
  AlignRightIcon,
5
5
  BoldIcon,
6
6
  ItalicIcon,
7
- UnderlineIcon } from "lucide-react";
7
+ UnderlineIcon
8
+ } from "lucide-react";
8
9
 
9
10
  import {
10
11
  ToggleGroup,
11
- ToggleGroupItem } from "../../components/micro/toggle-group";
12
+ ToggleGroupItem
13
+ } from "../../components/micro/toggle-group";
12
14
  import { useDevContext } from "../../dev/components/dev-context";
13
15
  import {
14
16
  DocsCode,
@@ -17,7 +19,8 @@ import {
17
19
  ExampleGrid,
18
20
  ExampleSection,
19
21
  Showcase,
20
- ShowcaseDocs } from "../../dev/components/showcase";
22
+ ShowcaseDocs
23
+ } from "../../dev/components/showcase";
21
24
  import { type Size } from "../../lib/types";
22
25
 
23
26
  // ──────────────────────────────────────────────────────────
@@ -9,7 +9,8 @@ import {
9
9
  ExampleGrid,
10
10
  ExampleSection,
11
11
  Showcase,
12
- ShowcaseDocs } from "../../dev/components/showcase";
12
+ ShowcaseDocs
13
+ } from "../../dev/components/showcase";
13
14
  import { type Size } from "../../lib/types";
14
15
 
15
16
  // ──────────────────────────────────────────────────────────
@@ -4,9 +4,10 @@ import { Button } from "../../components/micro/button";
4
4
  import {
5
5
  Tooltip,
6
6
  TooltipContent,
7
-
7
+
8
8
  TooltipProvider,
9
- TooltipTrigger } from "../../components/micro/tooltip";
9
+ TooltipTrigger
10
+ } from "../../components/micro/tooltip";
10
11
  import { useDevContext } from "../../dev/components/dev-context";
11
12
  import {
12
13
  DocsCode,
@@ -15,7 +16,8 @@ import {
15
16
  ExampleGrid,
16
17
  ExampleSection,
17
18
  Showcase,
18
- ShowcaseDocs } from "../../dev/components/showcase";
19
+ ShowcaseDocs
20
+ } from "../../dev/components/showcase";
19
21
  import { type Size } from "../../lib/types";
20
22
 
21
23
  // ──────────────────────────────────────────────────────────
@@ -0,0 +1,271 @@
1
+ import {
2
+ ArrowRightIcon,
3
+ CheckIcon,
4
+ CodeIcon,
5
+ CopyIcon,
6
+ LayersIcon,
7
+ SparklesIcon,
8
+ } from "lucide-react";
9
+ import { useState } from "react";
10
+ import { toast } from "sonner";
11
+ import { Button } from "../../components/micro/button";
12
+ import { Card, CardContent } from "../../components/micro/card";
13
+
14
+ export default function WhyGladvn() {
15
+ const [copied, setCopied] = useState(false);
16
+
17
+ const handleCopy = () => {
18
+ navigator.clipboard.writeText("npx gladvn init");
19
+ setCopied(true);
20
+ toast.success("Đã copy lệnh vào clipboard");
21
+ setTimeout(() => setCopied(false), 2000);
22
+ };
23
+
24
+ return (
25
+ <div className="space-y-24 overflow-hidden pb-24 font-sans max-w-5xl mx-auto">
26
+ {/* HERO SECTION */}
27
+ <section className="relative pt-20 pb-16">
28
+ <div className="absolute inset-0 -z-10 h-full w-full bg-background bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(var(--primary-rgb),0.2),rgba(255,255,255,0))] dark:bg-[radial-gradient(ellipse_80%_80%_at_50%_-20%,rgba(var(--primary-rgb),0.15),rgba(255,255,255,0))]" />
29
+
30
+ <div className="container relative z-10 flex flex-col items-center text-center px-4">
31
+ <div className="inline-flex items-center gap-2 px-4 py-1.5 mb-8 text-sm font-medium rounded-full border border-primary/20 bg-background/50 backdrop-blur-md shadow-sm">
32
+ <SparklesIcon className="w-3.5 h-3.5 text-primary" />
33
+ <span className="text-muted-foreground">
34
+ Tagline chính thức
35
+ </span>
36
+ </div>
37
+
38
+ <h1 className="max-w-4xl text-5xl md:text-7xl font-extrabold tracking-tighter mb-8 leading-tight">
39
+ <span className="block text-foreground drop-shadow-sm">
40
+ Composable React components.
41
+ </span>
42
+ <span className="block mt-2 bg-gradient-to-r from-primary via-info to-primary bg-[length:200%_auto] bg-clip-text text-transparent animate-[spin_8s_linear_infinite] [animation-name:gradient]">
43
+ From primitive to preset — you choose.
44
+ </span>
45
+ </h1>
46
+
47
+ <p className="max-w-2xl text-lg md:text-xl text-muted-foreground leading-relaxed mb-10">
48
+ A CLI to scaffold beautiful, accessible React components. Built on Base UI + Tailwind CSS v4.
49
+ </p>
50
+
51
+ <div className="flex flex-col sm:flex-row items-center gap-4">
52
+ <button
53
+ onClick={handleCopy}
54
+ className="bg-background/80 hover:bg-background border-border backdrop-blur-md px-6 py-4 rounded-2xl border hover:border-primary/50 transition-colors font-mono text-sm shadow-inner flex items-center gap-4 cursor-pointer group/copy"
55
+ >
56
+ <span className="text-primary font-bold">~</span>
57
+ <span>npx gladvn init</span>
58
+ <div className="ml-4 text-muted-foreground group-hover/copy:text-primary transition-colors">
59
+ {copied ? <CheckIcon className="size-4 text-success" /> : <CopyIcon className="size-4" />}
60
+ </div>
61
+ </button>
62
+ <Button
63
+ size="lg"
64
+ className="h-14 px-8 rounded-2xl text-base"
65
+ render={<a href="/" />}
66
+ >
67
+ Xem Docs <ArrowRightIcon className="ml-2 size-4" />
68
+ </Button>
69
+ </div>
70
+ </div>
71
+ </section>
72
+
73
+ {/* THE PROBLEM */}
74
+ <section className="px-4">
75
+ <div className="rounded-[2.5rem] border border-destructive/20 bg-destructive/5 p-8 md:p-16 text-center">
76
+ <h2 className="text-3xl md:text-4xl font-extrabold tracking-tight mb-6">
77
+ Most UI libraries force a choice:
78
+ </h2>
79
+ <p className="text-xl md:text-2xl text-muted-foreground mb-12">
80
+ Low-level pain <span className="text-destructive font-bold">OR</span> High-level lock-in.
81
+ </p>
82
+
83
+ <div className="grid md:grid-cols-3 gap-6 max-w-4xl mx-auto text-left">
84
+ <Card className="bg-background border-destructive/10">
85
+ <CardContent className="p-6">
86
+ <div className="text-destructive text-2xl mb-4">🔴</div>
87
+ <h3 className="font-bold mb-2">Quá primitive</h3>
88
+ <p className="text-muted-foreground text-sm">Bạn phải tự xây dựng mọi thứ từ đầu (như Radix UI thuần).</p>
89
+ </CardContent>
90
+ </Card>
91
+ <Card className="bg-background border-destructive/10">
92
+ <CardContent className="p-6">
93
+ <div className="text-destructive text-2xl mb-4">🔴</div>
94
+ <h3 className="font-bold mb-2">Quá opinionated</h3>
95
+ <p className="text-muted-foreground text-sm">Bạn phải chiến đấu với các preset mặc định (như MUI hay AntD).</p>
96
+ </CardContent>
97
+ </Card>
98
+ <Card className="bg-background border-destructive/10">
99
+ <CardContent className="p-6">
100
+ <div className="text-destructive text-2xl mb-4">🔴</div>
101
+ <h3 className="font-bold mb-2">Không rõ ranh giới</h3>
102
+ <p className="text-muted-foreground text-sm">Codebase trở nên hỗn độn giữa style thuần và logic nghiệp vụ.</p>
103
+ </CardContent>
104
+ </Card>
105
+ </div>
106
+ </div>
107
+ </section>
108
+
109
+ {/* THE SOLUTION */}
110
+ <section className="px-4 space-y-12">
111
+ <div className="text-center max-w-2xl mx-auto space-y-4">
112
+ <h2 className="text-3xl md:text-4xl font-extrabold tracking-tight">
113
+ The Solution: Micro/Macro Architecture
114
+ </h2>
115
+ <p className="text-muted-foreground text-lg">
116
+ Gladvn là thư viện React duy nhất phân tách rõ ràng giữa primitive "dumb" components và smart presets.
117
+ </p>
118
+ </div>
119
+
120
+ <div className="grid md:grid-cols-2 gap-8">
121
+ <div className="rounded-[2rem] border-2 border-primary/20 bg-primary/5 p-8 flex flex-col justify-between h-full">
122
+ <div>
123
+ <div className="inline-flex p-3 rounded-xl bg-primary/10 text-primary mb-6">
124
+ <CodeIcon className="size-6" />
125
+ </div>
126
+ <h3 className="text-2xl font-bold mb-4">Micro: Build your way</h3>
127
+ <p className="text-muted-foreground mb-8">
128
+ Lắp ráp từng mảnh ghép để kiểm soát 100% UI.
129
+ </p>
130
+ </div>
131
+ <div className="p-4 rounded-xl bg-background/80 border border-border font-mono text-sm text-muted-foreground shadow-inner">
132
+ <span className="text-primary">{"<Button "}</span>
133
+ <span className="text-info">variant=</span><span className="text-success">"solid"</span>
134
+ <span className="text-info"> color=</span><span className="text-success">"primary"</span>
135
+ <span className="text-primary">{">"}</span>
136
+ <span className="text-foreground">Submit</span>
137
+ <span className="text-primary">{"</Button>"}</span>
138
+ </div>
139
+ </div>
140
+
141
+ <div className="rounded-[2rem] border-2 border-info/20 bg-info/5 p-8 flex flex-col justify-between h-full">
142
+ <div>
143
+ <div className="inline-flex p-3 rounded-xl bg-info/10 text-info mb-6">
144
+ <LayersIcon className="size-6" />
145
+ </div>
146
+ <h3 className="text-2xl font-bold mb-4">Macro: Move fast</h3>
147
+ <p className="text-muted-foreground mb-8">
148
+ Dùng các preset làm sẵn để phát triển nhanh chóng.
149
+ </p>
150
+ </div>
151
+ <div className="p-4 rounded-xl bg-background/80 border border-border font-mono text-sm text-muted-foreground shadow-inner">
152
+ <span className="text-primary">{"<InputPreset "}</span>
153
+ <br/>
154
+ <span className="pl-4 text-info">label=</span><span className="text-success">"Email"</span>
155
+ <br/>
156
+ <span className="pl-4 text-info">error=</span><span className="text-foreground">{"{errors.email}"}</span>
157
+ <br/>
158
+ <span className="text-primary">{"/>"}</span>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </section>
163
+
164
+ {/* MORE REASONS */}
165
+ <section className="px-4">
166
+ <h2 className="text-2xl font-bold mb-8 pl-4 border-l-4 border-primary">More Reasons to Choose Gladvn</h2>
167
+ <div className="grid md:grid-cols-3 gap-6">
168
+ <Card className="hover:border-primary/50 transition-colors">
169
+ <CardContent className="p-6 space-y-4">
170
+ <div className="text-3xl font-black text-primary">45</div>
171
+ <h3 className="font-bold text-lg">Tổ hợp Component Styles</h3>
172
+ <p className="text-sm text-muted-foreground">
173
+ 9 Semantic Colors × 5 Variants. Tất cả đều nhất quán và accessibility-ready ngay từ đầu.
174
+ </p>
175
+ </CardContent>
176
+ </Card>
177
+ <Card className="hover:border-primary/50 transition-colors">
178
+ <CardContent className="p-6 space-y-4">
179
+ <div className="text-3xl font-black text-success">Zero</div>
180
+ <h3 className="font-bold text-lg">Lỗi Portal Theming</h3>
181
+ <p className="text-sm text-muted-foreground">
182
+ Dialog, Tooltip tự động tunnel theme qua Portal. Không còn lỗi màu sắc trong overlay.
183
+ </p>
184
+ </CardContent>
185
+ </Card>
186
+ <Card className="hover:border-primary/50 transition-colors">
187
+ <CardContent className="p-6 space-y-4">
188
+ <div className="text-3xl font-black text-info">AI</div>
189
+ <h3 className="font-bold text-lg">Thiết kế cho AI</h3>
190
+ <p className="text-sm text-muted-foreground">
191
+ File <code>llms.txt</code> và hệ thống data-attributes giúp AI hiểu và dùng component chuẩn xác.
192
+ </p>
193
+ </CardContent>
194
+ </Card>
195
+ </div>
196
+ </section>
197
+
198
+ {/* VS SHADCN */}
199
+ <section className="px-4">
200
+ <h2 className="text-2xl font-bold mb-8 text-center">So sánh nhanh</h2>
201
+ <div className="overflow-x-auto rounded-2xl border border-border bg-card">
202
+ <table className="w-full text-sm text-left">
203
+ <thead className="bg-muted/50 text-muted-foreground">
204
+ <tr>
205
+ <th className="px-6 py-4 font-medium">Feature</th>
206
+ <th className="px-6 py-4 font-bold text-primary">gladvn</th>
207
+ <th className="px-6 py-4 font-medium">shadcn/ui</th>
208
+ <th className="px-6 py-4 font-medium">MUI</th>
209
+ </tr>
210
+ </thead>
211
+ <tbody className="divide-y divide-border">
212
+ <tr className="hover:bg-muted/20">
213
+ <td className="px-6 py-4 font-medium">Installation</td>
214
+ <td className="px-6 py-4 font-mono text-xs">npx gladvn init</td>
215
+ <td className="px-6 py-4 font-mono text-xs">npx shadcn@latest init</td>
216
+ <td className="px-6 py-4 font-mono text-xs">npm install @mui/material</td>
217
+ </tr>
218
+ <tr className="hover:bg-muted/20">
219
+ <td className="px-6 py-4 font-medium">Own your code</td>
220
+ <td className="px-6 py-4">✅ Yes</td>
221
+ <td className="px-6 py-4">✅ Yes</td>
222
+ <td className="px-6 py-4">❌ npm</td>
223
+ </tr>
224
+ <tr className="hover:bg-muted/20 bg-primary/5">
225
+ <td className="px-6 py-4 font-bold">Micro/Macro Arch</td>
226
+ <td className="px-6 py-4 font-bold text-primary">✅ Yes</td>
227
+ <td className="px-6 py-4">❌ No</td>
228
+ <td className="px-6 py-4">⚠️ Partial</td>
229
+ </tr>
230
+ <tr className="hover:bg-muted/20">
231
+ <td className="px-6 py-4 font-medium">Semantic colors</td>
232
+ <td className="px-6 py-4">✅ 9 colors</td>
233
+ <td className="px-6 py-4">⚠️ 2 colors</td>
234
+ <td className="px-6 py-4">✅ Extensive</td>
235
+ </tr>
236
+ <tr className="hover:bg-muted/20">
237
+ <td className="px-6 py-4 font-medium">Headless UI</td>
238
+ <td className="px-6 py-4">Base UI (MUI)</td>
239
+ <td className="px-6 py-4">Radix UI</td>
240
+ <td className="px-6 py-4">Own</td>
241
+ </tr>
242
+ <tr className="hover:bg-muted/20">
243
+ <td className="px-6 py-4 font-medium">Tailwind v4</td>
244
+ <td className="px-6 py-4">✅ Native</td>
245
+ <td className="px-6 py-4">✅ Native</td>
246
+ <td className="px-6 py-4">❌ CSS-in-JS</td>
247
+ </tr>
248
+ </tbody>
249
+ </table>
250
+ </div>
251
+ </section>
252
+
253
+ {/* CTA */}
254
+ <section className="px-4 pb-20">
255
+ <div className="rounded-[3rem] bg-foreground text-background p-12 md:p-20 text-center relative overflow-hidden">
256
+ <div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
257
+ <div className="relative z-10">
258
+ <h2 className="text-4xl md:text-5xl font-black mb-8">Ready to build differently?</h2>
259
+ <button
260
+ onClick={handleCopy}
261
+ className="bg-background text-foreground hover:bg-muted px-8 py-4 rounded-full font-mono text-base font-bold shadow-xl flex items-center gap-4 mx-auto transition-transform hover:scale-105"
262
+ >
263
+ <span>npx gladvn init</span>
264
+ {copied ? <CheckIcon className="size-5 text-success" /> : <CopyIcon className="size-5" />}
265
+ </button>
266
+ </div>
267
+ </div>
268
+ </section>
269
+ </div>
270
+ );
271
+ }