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,4 +0,0 @@
1
- export type Size = "sm" | "md" | "lg";
2
- export type Color = "primary" | "secondary" | "destructive" | "success" | "warning" | "info" | "tertiary" | "muted" | "accent";
3
- export type Variant = "solid" | "outline" | "ghost" | "soft" | "link";
4
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,MAAM,MAAM,KAAK,GACb,SAAS,GACT,WAAW,GACX,aAAa,GACb,SAAS,GACT,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC"}
@@ -1,3 +0,0 @@
1
- import { ClassValue } from 'clsx';
2
- export declare function cn(...inputs: ClassValue[]): string;
3
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
package/dist/preset.d.ts DELETED
@@ -1,18 +0,0 @@
1
- export * from './components/macro/accordion-preset';
2
- export * from './components/macro/avatar-preset';
3
- export * from './components/macro/breadcrumb-preset';
4
- export * from './components/macro/carousel-preset';
5
- export * from './components/macro/checkbox-preset';
6
- export * from './components/macro/combobox-preset';
7
- export * from './components/macro/field-preset';
8
- export * from './components/macro/input-otp-preset';
9
- export * from './components/macro/input-preset';
10
- export * from './components/macro/pagination-preset';
11
- export * from './components/macro/progress-preset';
12
- export * from './components/macro/radio-group-preset';
13
- export * from './components/macro/select-preset';
14
- export * from './components/macro/slider-preset';
15
- export * from './components/macro/switch-preset';
16
- export * from './components/macro/tabs-preset';
17
- export * from './components/macro/textarea-preset';
18
- //# sourceMappingURL=preset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC"}
@@ -1 +0,0 @@
1
- //# sourceMappingURL=setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC"}
@@ -1,84 +0,0 @@
1
- import { Project, SyntaxKind, JsxElement, JsxSelfClosingElement } from "ts-morph";
2
-
3
- const project = new Project({
4
- tsConfigFilePath: "tsconfig.json",
5
- });
6
-
7
- const sourceFiles = project.getSourceFiles("src/**/*.tsx");
8
-
9
- let changed = 0;
10
-
11
- for (const sf of sourceFiles) {
12
- let fileChanged = false;
13
-
14
- const jsxElements = sf.getDescendantsOfKind(SyntaxKind.JsxElement);
15
-
16
- for (const jsx of jsxElements) {
17
- const opening = jsx.getOpeningElement();
18
- const tagName = opening.getTagNameNode().getText();
19
-
20
- if (tagName === "Button") {
21
- // check if it already has iconOnly
22
- const hasIconOnly = opening.getAttributes().some(attr => {
23
- if (attr.getKind() === SyntaxKind.JsxAttribute) {
24
- return attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "iconOnly";
25
- }
26
- return false;
27
- });
28
-
29
- // also check if it has data-icon="true" manually passed
30
- const hasDataIcon = opening.getAttributes().some(attr => {
31
- if (attr.getKind() === SyntaxKind.JsxAttribute) {
32
- return attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "data-icon";
33
- }
34
- return false;
35
- });
36
-
37
- if (!hasIconOnly && !hasDataIcon) {
38
- // check children
39
- const children = jsx.getJsxChildren();
40
- // filter out whitespace text
41
- const significantChildren = children.filter(c => {
42
- if (c.getKind() === SyntaxKind.JsxText) {
43
- return c.getText().trim() !== "";
44
- }
45
- if (c.getKind() === SyntaxKind.JsxExpression) {
46
- // Sometimes it's a comment { /* comment */ }, ignore empty expressions if no actual elements.
47
- // But actually an expression like {icon} might be an icon.
48
- // Let's assume expressions might be text, so we skip auto-adding if there are expressions unless it's just one expression.
49
- // Actually, to be safe, only add if the child is explicitly an Icon component.
50
- }
51
- return true;
52
- });
53
-
54
- if (significantChildren.length === 1) {
55
- const child = significantChildren[0];
56
- let isIcon = false;
57
-
58
- if (child.getKind() === SyntaxKind.JsxElement) {
59
- const childTag = child.asKind(SyntaxKind.JsxElement)?.getOpeningElement().getTagNameNode().getText();
60
- if (childTag && (childTag.endsWith("Icon") || childTag === "svg")) isIcon = true;
61
- } else if (child.getKind() === SyntaxKind.JsxSelfClosingElement) {
62
- const childTag = child.asKind(SyntaxKind.JsxSelfClosingElement)?.getTagNameNode().getText();
63
- if (childTag && (childTag.endsWith("Icon") || childTag === "svg")) isIcon = true;
64
- } else if (child.getKind() === SyntaxKind.JsxExpression) {
65
- // {icon} or something. We can't safely know if it's an icon. So skip.
66
- }
67
-
68
- if (isIcon) {
69
- opening.addAttribute({ name: "iconOnly" });
70
- fileChanged = true;
71
- }
72
- }
73
- }
74
- }
75
- }
76
-
77
- if (fileChanged) {
78
- sf.saveSync();
79
- changed++;
80
- console.log("Updated", sf.getFilePath());
81
- }
82
- }
83
-
84
- console.log(`Updated ${changed} files.`);
@@ -1,114 +0,0 @@
1
- import { Project, SyntaxKind } from "ts-morph";
2
- import * as fs from "fs";
3
- import * as path from "path";
4
-
5
- const project = new Project({
6
- tsConfigFilePath: "tsconfig.json",
7
- });
8
-
9
- const sourceFiles = project.getSourceFiles("src/components/micro/*.tsx");
10
-
11
- interface Violation {
12
- file: string;
13
- type: string;
14
- message: string;
15
- line: number;
16
- }
17
-
18
- const violations: Violation[] = [];
19
-
20
- // Regular expressions for anti-patterns
21
- const MAGIC_CSS_REGEX =
22
- /\[&_?[a-zA-Z0-9\->\+~]\]|\*:\[?[a-zA-Z0-9\->\+~]\]?|has-\[>?[a-zA-Z0-9\->\+~]\]/;
23
- const ARBITRARY_VAR_REGEX = /var\(--[a-zA-Z0-9-]+\)|-\[--[a-zA-Z0-9-]+\]/;
24
- // Exclude semantic colors (primary, muted, etc.), find raw colors
25
- const HARDCODED_COLOR_REGEX =
26
- /(bg|text|border|ring)-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-[1-9]00/;
27
-
28
- for (const sf of sourceFiles) {
29
- const fileName = sf.getBaseName();
30
-
31
- // 1. Check for "default" variants/sizes statically
32
- const text = sf.getFullText();
33
- const lines = text.split("\n");
34
-
35
- lines.forEach((line, index) => {
36
- const lineNum = index + 1;
37
-
38
- // Check for Magic CSS
39
- if (MAGIC_CSS_REGEX.test(line) && !line.includes("eslint-disable")) {
40
- // Small exception for specific radix states if needed, but let's flag them all first
41
- violations.push({
42
- file: fileName,
43
- type: "Magic CSS",
44
- message:
45
- "Found descendant/magic CSS combinator: " +
46
- line.trim().substring(0, 50),
47
- line: lineNum,
48
- });
49
- }
50
-
51
- // Check for Arbitrary Variables
52
- if (
53
- ARBITRARY_VAR_REGEX.test(line) &&
54
- !line.includes("radix-") &&
55
- !line.includes("collapsible-") &&
56
- !line.includes("accordion-")
57
- ) {
58
- violations.push({
59
- file: fileName,
60
- type: "Arbitrary CSS Variable",
61
- message:
62
- "Found arbitrary CSS variable not from Headless UI: " +
63
- line.trim().substring(0, 50),
64
- line: lineNum,
65
- });
66
- }
67
-
68
- // Check for Hardcoded Colors
69
- if (HARDCODED_COLOR_REGEX.test(line)) {
70
- violations.push({
71
- file: fileName,
72
- type: "Hardcoded Color",
73
- message:
74
- "Found raw Tailwind color instead of semantic token: " +
75
- line.trim().substring(0, 50),
76
- line: lineNum,
77
- });
78
- }
79
-
80
- // Check for default variants
81
- if (/(variant|size|color):\s*["']default["']/.test(line)) {
82
- violations.push({
83
- file: fileName,
84
- type: "Default Variant",
85
- message: "Found 'default' as a variant/size/color value",
86
- line: lineNum,
87
- });
88
- }
89
- });
90
- }
91
-
92
- // Group violations by file
93
- const grouped: Record<string, Violation[]> = {};
94
- for (const v of violations) {
95
- if (!grouped[v.file]) grouped[v.file] = [];
96
- grouped[v.file].push(v);
97
- }
98
-
99
- console.log("=== COMPONENT BEST PRACTICES AUDIT ===");
100
- if (violations.length === 0) {
101
- console.log(
102
- "✅ All components passed the Best Practices Audit with 100% compliance!",
103
- );
104
- } else {
105
- console.log(
106
- `❌ Found ${violations.length} violations across ${Object.keys(grouped).length} components.\n`,
107
- );
108
- for (const file of Object.keys(grouped)) {
109
- console.log(`\n📄 ${file}`);
110
- for (const v of grouped[file]) {
111
- console.log(` - [${v.type}] Line ${v.line}: ${v.message}`);
112
- }
113
- }
114
- }
@@ -1,262 +0,0 @@
1
- import {
2
- Project,
3
- SyntaxKind,
4
- JsxOpeningElement,
5
- JsxSelfClosingElement,
6
- } from "ts-morph";
7
- import * as fs from "fs";
8
- import * as path from "path";
9
-
10
- const project = new Project({
11
- tsConfigFilePath: "tsconfig.json",
12
- });
13
-
14
- const uiSourceFiles = project.getSourceFiles("src/components/micro/*.tsx");
15
- const monolithicSourceFiles = project.getSourceFiles(
16
- "src/components/monolithic/*.tsx",
17
- );
18
- const showcaseSourceFiles = project.getSourceFiles("src/dev/showcase/*.tsx");
19
-
20
- type ComponentCoverage = {
21
- name: string;
22
- uiFile: string;
23
- exportedComponents: string[];
24
- variants: Record<string, string[]>;
25
- showcaseFile: string | null;
26
- missingComponents: string[];
27
- missingVariants: Record<string, string[]>;
28
- };
29
-
30
- const results: ComponentCoverage[] = [];
31
-
32
- for (const uiFile of uiSourceFiles) {
33
- const baseName = uiFile.getBaseNameWithoutExtension();
34
- const showcaseFile = showcaseSourceFiles.find(
35
- (f) => f.getBaseNameWithoutExtension() === baseName,
36
- );
37
-
38
- // Find all exported components (Capitalized names)
39
- const exportedComponents: string[] = [];
40
-
41
- // Named exports
42
- for (const [name, declarations] of uiFile.getExportedDeclarations()) {
43
- if (
44
- /^[A-Z]/.test(name) &&
45
- !name.includes("Context") &&
46
- !name.includes("Provider") &&
47
- !name.includes("Overlay") &&
48
- !name.includes("Portal")
49
- ) {
50
- const decl = declarations[0];
51
- if (
52
- decl &&
53
- decl.getKind() !== SyntaxKind.TypeAliasDeclaration &&
54
- decl.getKind() !== SyntaxKind.InterfaceDeclaration
55
- ) {
56
- exportedComponents.push(name);
57
- }
58
- }
59
- }
60
-
61
- // Find variants from CVA
62
- const variants: Record<string, string[]> = {};
63
- const cvaCalls = uiFile
64
- .getDescendantsOfKind(SyntaxKind.CallExpression)
65
- .filter((c) => c.getExpression().getText() === "cva");
66
-
67
- for (const cvaCall of cvaCalls) {
68
- const args = cvaCall.getArguments();
69
- if (args.length >= 2) {
70
- const configObj = args[1].asKind(SyntaxKind.ObjectLiteralExpression);
71
- if (configObj) {
72
- const variantsProp = configObj.getProperty("variants");
73
- if (
74
- variantsProp &&
75
- variantsProp.getKind() === SyntaxKind.PropertyAssignment
76
- ) {
77
- const variantsObj = variantsProp.getInitializerIfKind(
78
- SyntaxKind.ObjectLiteralExpression,
79
- );
80
- if (variantsObj) {
81
- for (const variantProp of variantsObj.getProperties()) {
82
- if (variantProp.getKind() === SyntaxKind.PropertyAssignment) {
83
- const variantName = variantProp.getName();
84
- const variantValuesObj = variantProp.getInitializerIfKind(
85
- SyntaxKind.ObjectLiteralExpression,
86
- );
87
- if (variantValuesObj) {
88
- variants[variantName] = variantValuesObj
89
- .getProperties()
90
- .map((p) => p.getName().replace(/['"]/g, ""));
91
- }
92
- }
93
- }
94
- }
95
- }
96
- }
97
- }
98
- }
99
-
100
- // Also check monolithic wrapper for extra variants/components if it exists
101
- const monolithicFile = monolithicSourceFiles.find(
102
- (f) => f.getBaseNameWithoutExtension() === baseName,
103
- );
104
- if (monolithicFile) {
105
- for (const [
106
- name,
107
- declarations,
108
- ] of monolithicFile.getExportedDeclarations()) {
109
- if (
110
- /^[A-Z]/.test(name) &&
111
- !name.includes("Context") &&
112
- !name.includes("Provider") &&
113
- !exportedComponents.includes(name)
114
- ) {
115
- const decl = declarations[0];
116
- if (
117
- decl &&
118
- decl.getKind() !== SyntaxKind.TypeAliasDeclaration &&
119
- decl.getKind() !== SyntaxKind.InterfaceDeclaration
120
- ) {
121
- exportedComponents.push(name);
122
- }
123
- }
124
- }
125
- }
126
-
127
- const missingComponents: string[] = [];
128
- const missingVariants: Record<string, string[]> = {};
129
-
130
- if (showcaseFile) {
131
- const jsxElements = [
132
- ...showcaseFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),
133
- ...showcaseFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement),
134
- ];
135
-
136
- const usedTags = new Set(
137
- jsxElements.map((el) => el.getTagNameNode().getText()),
138
- );
139
-
140
- // Check components
141
- for (const comp of exportedComponents) {
142
- if (!usedTags.has(comp)) {
143
- const isNamespacedUsed = Array.from(usedTags).some(
144
- (tag) => tag.includes(`.${comp}`) || tag.endsWith(comp),
145
- );
146
- if (!isNamespacedUsed) {
147
- missingComponents.push(comp);
148
- }
149
- }
150
- }
151
-
152
- // Check variants
153
- const usedAttributes: Record<string, Set<string>> = {};
154
- for (const el of jsxElements) {
155
- for (const attr of el.getAttributes()) {
156
- if (attr.getKind() === SyntaxKind.JsxAttribute) {
157
- const name = attr.getNameNode().getText();
158
- const init = attr.getInitializer();
159
- let value = "";
160
- if (init) {
161
- if (init.getKind() === SyntaxKind.StringLiteral) {
162
- value = init.getText().replace(/['"]/g, "");
163
- } else if (init.getKind() === SyntaxKind.JsxExpression) {
164
- value = init.getExpression()?.getText() || "";
165
- }
166
- } else {
167
- value = "true";
168
- }
169
- if (!usedAttributes[name]) usedAttributes[name] = new Set();
170
- usedAttributes[name].add(value);
171
- }
172
- }
173
- }
174
-
175
- for (const [vName, vValues] of Object.entries(variants)) {
176
- missingVariants[vName] = [];
177
- const usedVals = usedAttributes[vName] || new Set();
178
- const usedValsStr = Array.from(usedVals).join(" ");
179
-
180
- for (const val of vValues) {
181
- if (val === "default") continue;
182
- if (
183
- !usedValsStr.includes(val) &&
184
- !usedValsStr.includes(`"${val}"`) &&
185
- !usedValsStr.includes(`'${val}'`)
186
- ) {
187
- if (vName === "size" && usedValsStr.includes("globalSize")) {
188
- continue;
189
- }
190
- missingVariants[vName].push(val);
191
- }
192
- }
193
- if (missingVariants[vName].length === 0) {
194
- delete missingVariants[vName];
195
- }
196
- }
197
- }
198
-
199
- if (exportedComponents.length > 0 || Object.keys(variants).length > 0) {
200
- results.push({
201
- name: baseName,
202
- uiFile: uiFile.getFilePath(),
203
- exportedComponents,
204
- variants,
205
- showcaseFile: showcaseFile?.getFilePath() || null,
206
- missingComponents,
207
- missingVariants,
208
- });
209
- }
210
- }
211
-
212
- let md = `# Báo Cáo Mức Độ Phủ Sóng Của Showcase (AST Auditing)
213
- *Tạo lúc: ${new Date().toLocaleString()}*
214
-
215
- Mục tiêu: Đảm bảo toàn bộ Component, Sub-component, Variant, Color, Size được export từ \`src/components/micro/*\` đều có ít nhất một ví dụ trong \`src/dev/showcase/*\`.
216
-
217
- `;
218
-
219
- let perfectCount = 0;
220
- let missingShowcaseCount = 0;
221
-
222
- for (const res of results) {
223
- if (!res.showcaseFile) {
224
- missingShowcaseCount++;
225
- md += `## ❌ ${res.name} (Thiếu hoàn toàn Showcase)\n`;
226
- continue;
227
- }
228
-
229
- const hasMissingComps = res.missingComponents.length > 0;
230
- const hasMissingVars = Object.keys(res.missingVariants).length > 0;
231
-
232
- if (!hasMissingComps && !hasMissingVars) {
233
- perfectCount++;
234
- continue;
235
- }
236
-
237
- md += `## ⚠️ ${res.name}\n`;
238
- if (hasMissingComps) {
239
- md += `- **Thiếu Sub-components:** ${res.missingComponents.map((c) => "`" + c + "`").join(", ")}\n`;
240
- }
241
- if (hasMissingVars) {
242
- md += `- **Thiếu Variants:**\n`;
243
- for (const [vName, vVals] of Object.entries(res.missingVariants)) {
244
- md += ` - \`${vName}\`: ${vVals.map((v) => "`" + v + "`").join(", ")}\n`;
245
- }
246
- }
247
- md += "\n";
248
- }
249
-
250
- md += `## Tóm Tắt\n`;
251
- md += `- Tổng số Components: ${results.length}\n`;
252
- md += `- Hoàn hảo (100% Coverage): ${perfectCount}\n`;
253
- md += `- Thiếu Showcase File: ${missingShowcaseCount}\n`;
254
- md += `- Cần bổ sung ví dụ: ${results.length - perfectCount - missingShowcaseCount}\n`;
255
-
256
- fs.writeFileSync(
257
- "/Users/y/.gemini/antigravity-ide/brain/b74152fa-bc73-4d65-9843-c65a49e0b5c5/showcase_coverage_report.md",
258
- md,
259
- );
260
- console.log(
261
- "Report generated at /Users/y/.gemini/antigravity-ide/brain/b74152fa-bc73-4d65-9843-c65a49e0b5c5/showcase_coverage_report.md",
262
- );
@@ -1,83 +0,0 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import { fileURLToPath } from "url";
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- const uiDir = path.join(__dirname, "../src/components/micro");
9
- const showcaseDir = path.join(__dirname, "../src/dev/showcase");
10
-
11
- const uiFiles = fs
12
- .readdirSync(uiDir)
13
- .filter((f) => f.endsWith(".tsx") && !f.includes("index.tsx"));
14
-
15
- const issues: Record<string, string[]> = {};
16
-
17
- for (const file of uiFiles) {
18
- const componentName = file.replace(".tsx", "");
19
- const showcaseFile = path.join(showcaseDir, file);
20
- const uiContent = fs.readFileSync(path.join(uiDir, file), "utf-8");
21
-
22
- if (!fs.existsSync(showcaseFile)) continue;
23
- const showcaseContent = fs.readFileSync(showcaseFile, "utf-8");
24
-
25
- issues[componentName] = [];
26
-
27
- // 1. Check exports vs imports
28
- const exportMatches = uiContent.match(/export \{([^}]+)\}/);
29
- if (exportMatches) {
30
- const exports = exportMatches[1]
31
- .split(",")
32
- .map((e) => e.trim())
33
- .filter((e) => e);
34
- for (const exp of exports) {
35
- const actualExport = exp.includes(" as ")
36
- ? exp.split(" as ")[1].trim()
37
- : exp;
38
- if (
39
- actualExport &&
40
- !showcaseContent.includes(actualExport) &&
41
- actualExport !== "type"
42
- ) {
43
- issues[componentName].push(`Missing subcomponent: ${actualExport}`);
44
- }
45
- }
46
- }
47
-
48
- // 2. Check globalSize
49
- if (uiContent.includes("size: {") || uiContent.includes('size = "')) {
50
- if (!showcaseContent.includes("globalSize")) {
51
- issues[componentName].push("Missing globalSize toggle");
52
- }
53
- }
54
-
55
- // 3. Check variants
56
- if (uiContent.includes("variant: {")) {
57
- const variantMatch = uiContent.match(/variant:\s*\{([^}]+)\}/);
58
- if (variantMatch) {
59
- const variants = variantMatch[1]
60
- .split("\n")
61
- .map((l) => l.trim().split(":")[0].replace(/['"]/g, ""))
62
- .filter((v) => v && !v.includes("//") && v !== "default");
63
- for (const v of variants) {
64
- if (
65
- !showcaseContent.includes(`variant="${v}"`) &&
66
- !showcaseContent.includes(`variant='${v}'`)
67
- ) {
68
- issues[componentName].push(`Missing variant demo: ${v}`);
69
- }
70
- }
71
- }
72
- }
73
- }
74
-
75
- let hasIssues = false;
76
- for (const [comp, compIssues] of Object.entries(issues)) {
77
- if (compIssues.length > 0) {
78
- hasIssues = true;
79
- console.log(`\n❌ ${comp}.tsx:`);
80
- compIssues.forEach((i) => console.log(` - ${i}`));
81
- }
82
- }
83
- if (!hasIssues) console.log("All showcases fully cover their components!");
@@ -1,21 +0,0 @@
1
- import { Project } from "ts-morph";
2
-
3
- const project = new Project({
4
- tsConfigFilePath: "/Users/y/Desktop/github/gladvn/tsconfig.json",
5
- });
6
-
7
- const sourceFiles = project.getSourceFiles(
8
- "/Users/y/Desktop/github/gladvn/src/dev/showcase/**/*.tsx",
9
- );
10
- console.log(`Found ${sourceFiles.length} showcase files to process.`);
11
-
12
- for (const sourceFile of sourceFiles) {
13
- // Use fixUnusedIdentifiers to let TS compiler fix unused imports
14
- const text = sourceFile.getFullText();
15
- // We can just use the organize imports feature
16
- sourceFile.organizeImports();
17
- sourceFile.fixUnusedIdentifiers();
18
- }
19
-
20
- project.saveSync();
21
- console.log("Cleanup complete!");
@@ -1,24 +0,0 @@
1
- import { Project, SyntaxKind } from "ts-morph";
2
-
3
- const project = new Project({
4
- tsConfigFilePath: "tsconfig.json",
5
- });
6
-
7
- const sourceFiles = project.getSourceFiles("src/dev/showcase/**/*.tsx");
8
- let missing = 0;
9
- let total = 0;
10
-
11
- for (const sourceFile of sourceFiles) {
12
- const exampleSections = sourceFile.getDescendantsOfKind(SyntaxKind.JsxElement)
13
- .filter(element => element.getOpeningElement().getTagNameNode().getText() === "ExampleSection");
14
-
15
- for (const section of exampleSections) {
16
- total++;
17
- const hasCodeString = section.getOpeningElement().getAttributes().some(attr => {
18
- return attr.getKind() === SyntaxKind.JsxAttribute &&
19
- attr.asKind(SyntaxKind.JsxAttribute)?.getNameNode().getText() === "codeString";
20
- });
21
- if (!hasCodeString) missing++;
22
- }
23
- }
24
- console.log(`Total ExampleSections: ${total}, Missing codeString: ${missing}`);