@once-ui-system/core 1.8.4 → 2.0.0-alpha.0

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 (561) hide show
  1. package/ai/catalog.json +166 -78
  2. package/ai/components/Accordion.json +1 -1
  3. package/ai/components/BarChart.json +34 -3
  4. package/ai/components/Book.json +128 -0
  5. package/ai/components/Button.json +1 -1
  6. package/ai/components/Card.json +1 -0
  7. package/ai/components/Carousel.json +1 -1
  8. package/ai/components/ChartHeader.json +2 -1
  9. package/ai/components/ChartStatus.json +2 -1
  10. package/ai/components/Checkbox.json +2 -2
  11. package/ai/components/CodeBlock.json +23 -2
  12. package/ai/components/ColorInput.json +1 -1
  13. package/ai/components/DataTooltip.json +3 -2
  14. package/ai/components/DatePicker.json +2 -2
  15. package/ai/components/Dialog.json +1 -1
  16. package/ai/components/DropdownWrapper.json +6 -4
  17. package/ai/components/Effect.json +133 -0
  18. package/ai/components/Fade.json +1 -1
  19. package/ai/components/Feedback.json +1 -1
  20. package/ai/components/IconButton.json +1 -1
  21. package/ai/components/InfoTip.json +125 -0
  22. package/ai/components/Input.json +5 -4
  23. package/ai/components/Legend.json +2 -1
  24. package/ai/components/LineBarChart.json +34 -3
  25. package/ai/components/LineChart.json +39 -3
  26. package/ai/components/LinearGauge.json +3 -2
  27. package/ai/components/LinearGradient.json +2 -1
  28. package/ai/components/Logo.json +2 -2
  29. package/ai/components/Media.json +1 -1
  30. package/ai/components/MediaUpload.json +21 -2
  31. package/ai/components/Modal.json +1 -1
  32. package/ai/components/NavGroup.json +130 -0
  33. package/ai/components/NavIcon.json +1 -1
  34. package/ai/components/NavItem.json +14 -0
  35. package/ai/components/Option.json +2 -2
  36. package/ai/components/Particle.json +1 -1
  37. package/ai/components/PieChart.json +32 -3
  38. package/ai/components/ProgressBar.json +1 -1
  39. package/ai/components/Pulse.json +1 -1
  40. package/ai/components/RadialGauge.json +4 -3
  41. package/ai/components/RadialGradient.json +2 -1
  42. package/ai/components/RadioButton.json +1 -1
  43. package/ai/components/RevealFx.json +1 -1
  44. package/ai/components/Scrubber.json +136 -0
  45. package/ai/components/SegmentedControl.json +3 -3
  46. package/ai/components/Setting.json +128 -0
  47. package/ai/components/SettingAxes.json +127 -0
  48. package/ai/components/SettingGroup.json +129 -0
  49. package/ai/components/ShineFx.json +1 -1
  50. package/ai/components/Skeleton.json +2 -3
  51. package/ai/components/SplitView.json +2 -0
  52. package/ai/components/StylePanel.json +4 -2
  53. package/ai/components/Swatch.json +11 -0
  54. package/ai/components/Swiper.json +1 -1
  55. package/ai/components/Switch.json +1 -1
  56. package/ai/components/Tag.json +1 -1
  57. package/ai/components/Textarea.json +6 -5
  58. package/ai/components/ThemeSwitcher.json +3 -0
  59. package/ai/components/Toast.json +1 -1
  60. package/ai/components/ToggleButton.json +2 -1
  61. package/ai/eval-tasks.md +8 -0
  62. package/ai/examples/app-shell.tsx +111 -0
  63. package/ai/examples/auth.tsx +1 -1
  64. package/ai/examples/blocks/Dashboard1.tsx +17 -28
  65. package/ai/examples/blocks/Feed3.tsx +4 -4
  66. package/ai/examples/blocks/Footer1.tsx +5 -3
  67. package/ai/examples/blocks/Footer2.tsx +3 -3
  68. package/ai/examples/blocks/Footer3.tsx +1 -1
  69. package/ai/examples/blocks/Footer4.tsx +6 -5
  70. package/ai/examples/blocks/Header1.tsx +7 -6
  71. package/ai/examples/blocks/Header3.tsx +7 -7
  72. package/ai/examples/blocks/Header4.tsx +5 -5
  73. package/ai/examples/blocks/Sidebar4.tsx +1 -1
  74. package/ai/examples/blocks/Streaming1.tsx +4 -4
  75. package/ai/examples/blocks/Table1.tsx +6 -6
  76. package/ai/examples/blocks/Waitlist1.tsx +5 -5
  77. package/ai/examples/blocks/content/resources.ts +3 -1
  78. package/ai/examples/dashboard.tsx +8 -9
  79. package/ai/examples/marketing-hero.tsx +2 -2
  80. package/ai/examples/pricing.tsx +4 -5
  81. package/ai/examples/settings.tsx +3 -3
  82. package/ai/gotchas.json +80 -23
  83. package/ai/layouts.md +154 -0
  84. package/ai/manifest.json +3 -2
  85. package/ai/recipes.md +49 -4
  86. package/ai/rules.compact.md +18 -3
  87. package/ai/rules.md +68 -10
  88. package/ai/spec.json +634 -176
  89. package/dist/ai/catalog.json +166 -78
  90. package/dist/ai/components/Accordion.json +1 -1
  91. package/dist/ai/components/BarChart.json +34 -3
  92. package/dist/ai/components/Book.json +128 -0
  93. package/dist/ai/components/Button.json +1 -1
  94. package/dist/ai/components/Card.json +1 -0
  95. package/dist/ai/components/Carousel.json +1 -1
  96. package/dist/ai/components/ChartHeader.json +2 -1
  97. package/dist/ai/components/ChartStatus.json +2 -1
  98. package/dist/ai/components/Checkbox.json +2 -2
  99. package/dist/ai/components/CodeBlock.json +23 -2
  100. package/dist/ai/components/ColorInput.json +1 -1
  101. package/dist/ai/components/DataTooltip.json +3 -2
  102. package/dist/ai/components/DatePicker.json +2 -2
  103. package/dist/ai/components/Dialog.json +1 -1
  104. package/dist/ai/components/DropdownWrapper.json +6 -4
  105. package/dist/ai/components/Effect.json +133 -0
  106. package/dist/ai/components/Fade.json +1 -1
  107. package/dist/ai/components/Feedback.json +1 -1
  108. package/dist/ai/components/IconButton.json +1 -1
  109. package/dist/ai/components/InfoTip.json +125 -0
  110. package/dist/ai/components/Input.json +5 -4
  111. package/dist/ai/components/Legend.json +2 -1
  112. package/dist/ai/components/LineBarChart.json +34 -3
  113. package/dist/ai/components/LineChart.json +39 -3
  114. package/dist/ai/components/LinearGauge.json +3 -2
  115. package/dist/ai/components/LinearGradient.json +2 -1
  116. package/dist/ai/components/Logo.json +2 -2
  117. package/dist/ai/components/Media.json +1 -1
  118. package/dist/ai/components/MediaUpload.json +21 -2
  119. package/dist/ai/components/Modal.json +1 -1
  120. package/dist/ai/components/NavGroup.json +130 -0
  121. package/dist/ai/components/NavIcon.json +1 -1
  122. package/dist/ai/components/NavItem.json +14 -0
  123. package/dist/ai/components/Option.json +2 -2
  124. package/dist/ai/components/Particle.json +1 -1
  125. package/dist/ai/components/PieChart.json +32 -3
  126. package/dist/ai/components/ProgressBar.json +1 -1
  127. package/dist/ai/components/Pulse.json +1 -1
  128. package/dist/ai/components/RadialGauge.json +4 -3
  129. package/dist/ai/components/RadialGradient.json +2 -1
  130. package/dist/ai/components/RadioButton.json +1 -1
  131. package/dist/ai/components/RevealFx.json +1 -1
  132. package/dist/ai/components/Scrubber.json +136 -0
  133. package/dist/ai/components/SegmentedControl.json +3 -3
  134. package/dist/ai/components/Setting.json +128 -0
  135. package/dist/ai/components/SettingAxes.json +127 -0
  136. package/dist/ai/components/SettingGroup.json +129 -0
  137. package/dist/ai/components/ShineFx.json +1 -1
  138. package/dist/ai/components/Skeleton.json +2 -3
  139. package/dist/ai/components/SplitView.json +2 -0
  140. package/dist/ai/components/StylePanel.json +4 -2
  141. package/dist/ai/components/Swatch.json +11 -0
  142. package/dist/ai/components/Swiper.json +1 -1
  143. package/dist/ai/components/Switch.json +1 -1
  144. package/dist/ai/components/Tag.json +1 -1
  145. package/dist/ai/components/Textarea.json +6 -5
  146. package/dist/ai/components/ThemeSwitcher.json +3 -0
  147. package/dist/ai/components/Toast.json +1 -1
  148. package/dist/ai/components/ToggleButton.json +2 -1
  149. package/dist/ai/eval-tasks.md +8 -0
  150. package/dist/ai/gotchas.json +80 -23
  151. package/dist/ai/layouts.md +154 -0
  152. package/dist/ai/manifest.json +3 -2
  153. package/dist/ai/recipes.md +49 -4
  154. package/dist/ai/rules.compact.md +18 -3
  155. package/dist/ai/rules.md +68 -10
  156. package/dist/ai/spec.json +634 -176
  157. package/dist/components/Accordion.d.ts +2 -1
  158. package/dist/components/Accordion.d.ts.map +1 -1
  159. package/dist/components/Accordion.js.map +1 -1
  160. package/dist/components/Avatar.js +1 -1
  161. package/dist/components/Avatar.js.map +1 -1
  162. package/dist/components/Background.d.ts +6 -6
  163. package/dist/components/Background.d.ts.map +1 -1
  164. package/dist/components/Book.d.ts +28 -0
  165. package/dist/components/Book.d.ts.map +1 -0
  166. package/dist/components/Book.js +24 -0
  167. package/dist/components/Book.js.map +1 -0
  168. package/dist/components/Book.module.scss +45 -0
  169. package/dist/components/Button.d.ts +1 -1
  170. package/dist/components/Button.d.ts.map +1 -1
  171. package/dist/components/Button.js +4 -4
  172. package/dist/components/Button.js.map +1 -1
  173. package/dist/components/Card.d.ts +8 -0
  174. package/dist/components/Card.d.ts.map +1 -1
  175. package/dist/components/Card.js +10 -2
  176. package/dist/components/Card.js.map +1 -1
  177. package/dist/components/Card.module.scss +11 -1
  178. package/dist/components/Carousel.d.ts +7 -1
  179. package/dist/components/Carousel.d.ts.map +1 -1
  180. package/dist/components/Carousel.js +7 -7
  181. package/dist/components/Carousel.js.map +1 -1
  182. package/dist/components/Carousel.module.scss +1 -8
  183. package/dist/components/Checkbox.d.ts +3 -3
  184. package/dist/components/Checkbox.d.ts.map +1 -1
  185. package/dist/components/Checkbox.js +5 -5
  186. package/dist/components/Checkbox.js.map +1 -1
  187. package/dist/components/ClientFlex.d.ts.map +1 -1
  188. package/dist/components/ClientFlex.js +5 -10
  189. package/dist/components/ClientFlex.js.map +1 -1
  190. package/dist/components/ClientGrid.d.ts.map +1 -1
  191. package/dist/components/ClientGrid.js +2 -7
  192. package/dist/components/ClientGrid.js.map +1 -1
  193. package/dist/components/ColorInput.d.ts +1 -1
  194. package/dist/components/ColorInput.d.ts.map +1 -1
  195. package/dist/components/ColorInput.js +7 -13
  196. package/dist/components/ColorInput.js.map +1 -1
  197. package/dist/components/CompareImage.d.ts.map +1 -1
  198. package/dist/components/CompareImage.js +2 -2
  199. package/dist/components/CompareImage.js.map +1 -1
  200. package/dist/components/DateInput.d.ts.map +1 -1
  201. package/dist/components/DateInput.js +10 -1
  202. package/dist/components/DateInput.js.map +1 -1
  203. package/dist/components/DatePicker.d.ts +2 -2
  204. package/dist/components/DatePicker.d.ts.map +1 -1
  205. package/dist/components/DatePicker.js +21 -14
  206. package/dist/components/DatePicker.js.map +1 -1
  207. package/dist/components/DateRangeInput.js +3 -3
  208. package/dist/components/DateRangeInput.js.map +1 -1
  209. package/dist/components/Dialog.d.ts +1 -1
  210. package/dist/components/Dialog.d.ts.map +1 -1
  211. package/dist/components/Dialog.js +14 -14
  212. package/dist/components/Dialog.js.map +1 -1
  213. package/dist/components/DropdownWrapper.d.ts +8 -3
  214. package/dist/components/DropdownWrapper.d.ts.map +1 -1
  215. package/dist/components/DropdownWrapper.js +17 -6
  216. package/dist/components/DropdownWrapper.js.map +1 -1
  217. package/dist/components/Effect.d.ts +41 -0
  218. package/dist/components/Effect.d.ts.map +1 -0
  219. package/dist/components/Effect.js +30 -0
  220. package/dist/components/Effect.js.map +1 -0
  221. package/dist/components/ElementType.d.ts +2 -1
  222. package/dist/components/ElementType.d.ts.map +1 -1
  223. package/dist/components/ElementType.js +4 -2
  224. package/dist/components/ElementType.js.map +1 -1
  225. package/dist/components/EmojiPicker.d.ts.map +1 -1
  226. package/dist/components/EmojiPicker.js +1 -1
  227. package/dist/components/EmojiPicker.js.map +1 -1
  228. package/dist/components/Feedback.d.ts +1 -1
  229. package/dist/components/Feedback.d.ts.map +1 -1
  230. package/dist/components/Feedback.js +2 -2
  231. package/dist/components/Feedback.js.map +1 -1
  232. package/dist/components/Flex.d.ts.map +1 -1
  233. package/dist/components/Flex.js +46 -5
  234. package/dist/components/Flex.js.map +1 -1
  235. package/dist/components/Icon.d.ts.map +1 -1
  236. package/dist/components/Icon.js.map +1 -1
  237. package/dist/components/IconButton.d.ts +1 -1
  238. package/dist/components/IconButton.d.ts.map +1 -1
  239. package/dist/components/IconButton.js +4 -4
  240. package/dist/components/IconButton.js.map +1 -1
  241. package/dist/components/InfoTip.d.ts +17 -0
  242. package/dist/components/InfoTip.d.ts.map +1 -0
  243. package/dist/components/InfoTip.js +12 -0
  244. package/dist/components/InfoTip.js.map +1 -0
  245. package/dist/components/Input.d.ts +11 -5
  246. package/dist/components/Input.d.ts.map +1 -1
  247. package/dist/components/Input.js +32 -16
  248. package/dist/components/Input.js.map +1 -1
  249. package/dist/components/Input.module.scss +313 -1
  250. package/dist/components/InteractiveDetails.d.ts.map +1 -1
  251. package/dist/components/InteractiveDetails.js +1 -1
  252. package/dist/components/InteractiveDetails.js.map +1 -1
  253. package/dist/components/Kbd.d.ts.map +1 -1
  254. package/dist/components/Kbd.js +4 -1
  255. package/dist/components/Kbd.js.map +1 -1
  256. package/dist/components/Logo.d.ts +16 -4
  257. package/dist/components/Logo.d.ts.map +1 -1
  258. package/dist/components/Logo.js +32 -14
  259. package/dist/components/Logo.js.map +1 -1
  260. package/dist/components/Media.d.ts +9 -2
  261. package/dist/components/Media.d.ts.map +1 -1
  262. package/dist/components/Media.js +25 -16
  263. package/dist/components/Media.js.map +1 -1
  264. package/dist/components/MediaAudioPlayer.d.ts +29 -0
  265. package/dist/components/MediaAudioPlayer.d.ts.map +1 -0
  266. package/dist/components/MediaAudioPlayer.js +115 -0
  267. package/dist/components/MediaAudioPlayer.js.map +1 -0
  268. package/dist/components/MediaAudioPlayer.module.scss +38 -0
  269. package/dist/components/Modal.d.ts +1 -1
  270. package/dist/components/Modal.d.ts.map +1 -1
  271. package/dist/components/Modal.js +10 -10
  272. package/dist/components/Modal.js.map +1 -1
  273. package/dist/components/NavGroup.d.ts +33 -0
  274. package/dist/components/NavGroup.d.ts.map +1 -0
  275. package/dist/components/NavGroup.js +27 -0
  276. package/dist/components/NavGroup.js.map +1 -0
  277. package/dist/components/NavIcon.d.ts +1 -1
  278. package/dist/components/NavIcon.d.ts.map +1 -1
  279. package/dist/components/NavIcon.js +2 -2
  280. package/dist/components/NavIcon.js.map +1 -1
  281. package/dist/components/NavItem.d.ts +24 -0
  282. package/dist/components/NavItem.d.ts.map +1 -0
  283. package/dist/components/NavItem.js +18 -0
  284. package/dist/components/NavItem.js.map +1 -0
  285. package/dist/components/NumberInput.js +1 -1
  286. package/dist/components/NumberInput.js.map +1 -1
  287. package/dist/components/OgCard.js +3 -3
  288. package/dist/components/OgCard.js.map +1 -1
  289. package/dist/components/Option.d.ts +3 -3
  290. package/dist/components/Option.d.ts.map +1 -1
  291. package/dist/components/Option.js +2 -2
  292. package/dist/components/Option.js.map +1 -1
  293. package/dist/components/Particle.d.ts +2 -2
  294. package/dist/components/Particle.d.ts.map +1 -1
  295. package/dist/components/PasswordInput.d.ts.map +1 -1
  296. package/dist/components/PasswordInput.js +2 -2
  297. package/dist/components/PasswordInput.js.map +1 -1
  298. package/dist/components/ProgressBar.d.ts +1 -1
  299. package/dist/components/ProgressBar.d.ts.map +1 -1
  300. package/dist/components/ProgressBar.js +2 -2
  301. package/dist/components/ProgressBar.js.map +1 -1
  302. package/dist/components/Pulse.d.ts +1 -1
  303. package/dist/components/Pulse.d.ts.map +1 -1
  304. package/dist/components/Pulse.js +2 -2
  305. package/dist/components/Pulse.js.map +1 -1
  306. package/dist/components/RadioButton.d.ts +2 -2
  307. package/dist/components/RadioButton.d.ts.map +1 -1
  308. package/dist/components/RadioButton.js +1 -1
  309. package/dist/components/RadioButton.js.map +1 -1
  310. package/dist/components/RevealFx.d.ts +2 -1
  311. package/dist/components/RevealFx.d.ts.map +1 -1
  312. package/dist/components/RevealFx.js +8 -8
  313. package/dist/components/RevealFx.js.map +1 -1
  314. package/dist/components/ScrollContainer.d.ts.map +1 -1
  315. package/dist/components/ScrollContainer.js +1 -1
  316. package/dist/components/ScrollContainer.js.map +1 -1
  317. package/dist/components/Scrubber.d.ts +70 -0
  318. package/dist/components/Scrubber.d.ts.map +1 -0
  319. package/dist/components/Scrubber.js +161 -0
  320. package/dist/components/Scrubber.js.map +1 -0
  321. package/dist/components/SegmentedControl.d.ts +4 -4
  322. package/dist/components/SegmentedControl.d.ts.map +1 -1
  323. package/dist/components/SegmentedControl.js +11 -11
  324. package/dist/components/SegmentedControl.js.map +1 -1
  325. package/dist/components/Select.d.ts.map +1 -1
  326. package/dist/components/Select.js +48 -15
  327. package/dist/components/Select.js.map +1 -1
  328. package/dist/components/ServerFlex.d.ts +0 -1
  329. package/dist/components/ServerFlex.d.ts.map +1 -1
  330. package/dist/components/ServerFlex.js +99 -52
  331. package/dist/components/ServerFlex.js.map +1 -1
  332. package/dist/components/ServerGrid.d.ts +0 -1
  333. package/dist/components/ServerGrid.d.ts.map +1 -1
  334. package/dist/components/ServerGrid.js +11 -9
  335. package/dist/components/ServerGrid.js.map +1 -1
  336. package/dist/components/Setting.d.ts +50 -0
  337. package/dist/components/Setting.d.ts.map +1 -0
  338. package/dist/components/Setting.js +43 -0
  339. package/dist/components/Setting.js.map +1 -0
  340. package/dist/components/ShineFx.d.ts +1 -0
  341. package/dist/components/ShineFx.d.ts.map +1 -1
  342. package/dist/components/ShineFx.js +2 -2
  343. package/dist/components/ShineFx.js.map +1 -1
  344. package/dist/components/Skeleton.d.ts +16 -3
  345. package/dist/components/Skeleton.d.ts.map +1 -1
  346. package/dist/components/Skeleton.js +2 -2
  347. package/dist/components/Skeleton.js.map +1 -1
  348. package/dist/components/Skeleton.module.scss +14 -51
  349. package/dist/components/SplitView.d.ts +23 -3
  350. package/dist/components/SplitView.d.ts.map +1 -1
  351. package/dist/components/SplitView.js +90 -58
  352. package/dist/components/SplitView.js.map +1 -1
  353. package/dist/components/StyleOverlay.d.ts.map +1 -1
  354. package/dist/components/StyleOverlay.js +1 -1
  355. package/dist/components/StyleOverlay.js.map +1 -1
  356. package/dist/components/StylePanel.d.ts +47 -6
  357. package/dist/components/StylePanel.d.ts.map +1 -1
  358. package/dist/components/StylePanel.js +16 -189
  359. package/dist/components/StylePanel.js.map +1 -1
  360. package/dist/components/StylePanel.module.scss +6 -1
  361. package/dist/components/StylePanelSections.d.ts +117 -0
  362. package/dist/components/StylePanelSections.d.ts.map +1 -0
  363. package/dist/components/StylePanelSections.js +175 -0
  364. package/dist/components/StylePanelSections.js.map +1 -0
  365. package/dist/components/Swiper.d.ts +7 -1
  366. package/dist/components/Swiper.d.ts.map +1 -1
  367. package/dist/components/Swiper.js +7 -7
  368. package/dist/components/Swiper.js.map +1 -1
  369. package/dist/components/Switch.d.ts +2 -2
  370. package/dist/components/Switch.d.ts.map +1 -1
  371. package/dist/components/Switch.js +4 -4
  372. package/dist/components/Switch.js.map +1 -1
  373. package/dist/components/Table.d.ts.map +1 -1
  374. package/dist/components/Table.js +2 -2
  375. package/dist/components/Table.js.map +1 -1
  376. package/dist/components/Tag.d.ts +1 -1
  377. package/dist/components/Tag.d.ts.map +1 -1
  378. package/dist/components/Tag.js +2 -2
  379. package/dist/components/Tag.js.map +1 -1
  380. package/dist/components/Textarea.d.ts +15 -5
  381. package/dist/components/Textarea.d.ts.map +1 -1
  382. package/dist/components/Textarea.js +31 -17
  383. package/dist/components/Textarea.js.map +1 -1
  384. package/dist/components/ThemeSwitcher.d.ts +14 -1
  385. package/dist/components/ThemeSwitcher.d.ts.map +1 -1
  386. package/dist/components/ThemeSwitcher.js +19 -9
  387. package/dist/components/ThemeSwitcher.js.map +1 -1
  388. package/dist/components/ThemeSwitcher.module.scss +54 -0
  389. package/dist/components/Toast.d.ts +1 -1
  390. package/dist/components/Toast.d.ts.map +1 -1
  391. package/dist/components/Toast.js +2 -2
  392. package/dist/components/Toast.js.map +1 -1
  393. package/dist/components/ToggleButton.d.ts +9 -2
  394. package/dist/components/ToggleButton.d.ts.map +1 -1
  395. package/dist/components/ToggleButton.js +5 -5
  396. package/dist/components/ToggleButton.js.map +1 -1
  397. package/dist/components/User.js +1 -1
  398. package/dist/components/User.js.map +1 -1
  399. package/dist/components/index.d.ts +7 -0
  400. package/dist/components/index.d.ts.map +1 -1
  401. package/dist/components/index.js +7 -0
  402. package/dist/components/index.js.map +1 -1
  403. package/dist/contexts/AdapterProvider.d.ts +50 -0
  404. package/dist/contexts/AdapterProvider.d.ts.map +1 -0
  405. package/dist/contexts/AdapterProvider.js +91 -0
  406. package/dist/contexts/AdapterProvider.js.map +1 -0
  407. package/dist/contexts/IconProvider.d.ts +2 -2
  408. package/dist/contexts/IconProvider.d.ts.map +1 -1
  409. package/dist/contexts/IconProvider.js +2 -2
  410. package/dist/contexts/IconProvider.js.map +1 -1
  411. package/dist/contexts/LayoutProvider.d.ts +0 -2
  412. package/dist/contexts/LayoutProvider.d.ts.map +1 -1
  413. package/dist/contexts/LayoutProvider.js +15 -10
  414. package/dist/contexts/LayoutProvider.js.map +1 -1
  415. package/dist/contexts/ThemeProvider.d.ts +29 -1
  416. package/dist/contexts/ThemeProvider.d.ts.map +1 -1
  417. package/dist/contexts/ThemeProvider.js +42 -15
  418. package/dist/contexts/ThemeProvider.js.map +1 -1
  419. package/dist/contexts/index.d.ts +3 -2
  420. package/dist/contexts/index.d.ts.map +1 -1
  421. package/dist/contexts/index.js +3 -2
  422. package/dist/contexts/index.js.map +1 -1
  423. package/dist/css/styles.css +1 -1
  424. package/dist/css/tokens.css +1 -1
  425. package/dist/hooks/index.d.ts +0 -1
  426. package/dist/hooks/index.d.ts.map +1 -1
  427. package/dist/hooks/index.js +0 -1
  428. package/dist/hooks/index.js.map +1 -1
  429. package/dist/icons/ATTRIBUTION.md +19 -0
  430. package/dist/icons/data.d.ts +1919 -0
  431. package/dist/icons/data.d.ts.map +1 -0
  432. package/dist/icons/data.js +102 -0
  433. package/dist/icons/data.js.map +1 -0
  434. package/dist/icons/renderIcon.d.ts +26 -0
  435. package/dist/icons/renderIcon.d.ts.map +1 -0
  436. package/dist/icons/renderIcon.js +22 -0
  437. package/dist/icons/renderIcon.js.map +1 -0
  438. package/dist/icons.d.ts +35 -4
  439. package/dist/icons.d.ts.map +1 -1
  440. package/dist/icons.js +13 -60
  441. package/dist/icons.js.map +1 -1
  442. package/dist/modules/code/CodeBlock.impl.d.ts +2 -1
  443. package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
  444. package/dist/modules/code/CodeBlock.impl.js +7 -2
  445. package/dist/modules/code/CodeBlock.impl.js.map +1 -1
  446. package/dist/modules/data/ChartHeader.d.ts.map +1 -1
  447. package/dist/modules/data/ChartHeader.js +1 -1
  448. package/dist/modules/data/ChartHeader.js.map +1 -1
  449. package/dist/modules/data/DataTooltip.d.ts +1 -1
  450. package/dist/modules/data/DataTooltip.d.ts.map +1 -1
  451. package/dist/modules/data/DataTooltip.js +2 -2
  452. package/dist/modules/data/DataTooltip.js.map +1 -1
  453. package/dist/modules/data/LinearGauge.d.ts +3 -2
  454. package/dist/modules/data/LinearGauge.d.ts.map +1 -1
  455. package/dist/modules/data/LinearGauge.js +1 -1
  456. package/dist/modules/data/LinearGauge.js.map +1 -1
  457. package/dist/modules/data/PieChart.impl.d.ts +1 -1
  458. package/dist/modules/data/PieChart.impl.d.ts.map +1 -1
  459. package/dist/modules/data/PieChart.impl.js +4 -1
  460. package/dist/modules/data/PieChart.impl.js.map +1 -1
  461. package/dist/modules/data/RadialGauge.d.ts +3 -2
  462. package/dist/modules/data/RadialGauge.d.ts.map +1 -1
  463. package/dist/modules/data/RadialGauge.js +1 -1
  464. package/dist/modules/data/RadialGauge.js.map +1 -1
  465. package/dist/modules/data/interfaces.d.ts +12 -3
  466. package/dist/modules/data/interfaces.d.ts.map +1 -1
  467. package/dist/modules/index.d.ts +1 -4
  468. package/dist/modules/index.d.ts.map +1 -1
  469. package/dist/modules/index.js +9 -3
  470. package/dist/modules/index.js.map +1 -1
  471. package/dist/modules/media/MediaUpload.impl.d.ts +1 -1
  472. package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -1
  473. package/dist/modules/media/MediaUpload.impl.js +1 -1
  474. package/dist/modules/media/MediaUpload.impl.js.map +1 -1
  475. package/dist/modules/navigation/Kbar.d.ts +5 -4
  476. package/dist/modules/navigation/Kbar.d.ts.map +1 -1
  477. package/dist/modules/navigation/Kbar.js +32 -35
  478. package/dist/modules/navigation/Kbar.js.map +1 -1
  479. package/dist/modules/navigation/MegaMenu.d.ts +5 -3
  480. package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
  481. package/dist/modules/navigation/MegaMenu.js +24 -12
  482. package/dist/modules/navigation/MegaMenu.js.map +1 -1
  483. package/dist/modules/navigation/MobileMegaMenu.d.ts +3 -2
  484. package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -1
  485. package/dist/modules/navigation/MobileMegaMenu.js +1 -1
  486. package/dist/modules/navigation/MobileMegaMenu.js.map +1 -1
  487. package/dist/modules/seo/Meta.d.ts +40 -2
  488. package/dist/modules/seo/Meta.d.ts.map +1 -1
  489. package/dist/modules/seo/Meta.js.map +1 -1
  490. package/dist/modules/seo/Schema.d.ts.map +1 -1
  491. package/dist/modules/seo/Schema.js +1 -2
  492. package/dist/modules/seo/Schema.js.map +1 -1
  493. package/dist/next/index.d.ts +35 -0
  494. package/dist/next/index.d.ts.map +1 -0
  495. package/dist/next/index.js +56 -0
  496. package/dist/next/index.js.map +1 -0
  497. package/dist/package.json +52 -7
  498. package/dist/scripts/init-agent.js +0 -0
  499. package/dist/scripts/validate-ai-code.js +74 -10
  500. package/dist/server/og-utils.d.ts +9 -3
  501. package/dist/server/og-utils.d.ts.map +1 -1
  502. package/dist/server/og-utils.js +15 -9
  503. package/dist/server/og-utils.js.map +1 -1
  504. package/dist/styles/breakpoints.scss +16 -5
  505. package/dist/test/setup.js +21 -0
  506. package/dist/test/setup.js.map +1 -1
  507. package/dist/types.d.ts +13 -1
  508. package/dist/types.d.ts.map +1 -1
  509. package/dist/types.js.map +1 -1
  510. package/dist/utils/colorScheme.d.ts +35 -0
  511. package/dist/utils/colorScheme.d.ts.map +1 -0
  512. package/dist/utils/colorScheme.js +140 -0
  513. package/dist/utils/colorScheme.js.map +1 -0
  514. package/dist/utils/index.d.ts +2 -0
  515. package/dist/utils/index.d.ts.map +1 -1
  516. package/dist/utils/index.js +2 -0
  517. package/dist/utils/index.js.map +1 -1
  518. package/dist/utils/navMatch.d.ts +21 -0
  519. package/dist/utils/navMatch.d.ts.map +1 -0
  520. package/dist/utils/navMatch.js +26 -0
  521. package/dist/utils/navMatch.js.map +1 -0
  522. package/package.json +228 -171
  523. package/scripts/init-agent.js +0 -0
  524. package/scripts/validate-ai-code.js +74 -10
  525. package/LICENSE.md +0 -21
  526. package/dist/css/styles.css.map +0 -1
  527. package/dist/css/tokens.css.map +0 -1
  528. package/dist/hooks/useResponsiveClasses.d.ts +0 -9
  529. package/dist/hooks/useResponsiveClasses.d.ts.map +0 -1
  530. package/dist/hooks/useResponsiveClasses.js +0 -293
  531. package/dist/hooks/useResponsiveClasses.js.map +0 -1
  532. package/dist/styles/background.scss +0 -423
  533. package/dist/styles/border.scss +0 -546
  534. package/dist/styles/color.scss +0 -183
  535. package/dist/styles/display.scss +0 -391
  536. package/dist/styles/flex.scss +0 -518
  537. package/dist/styles/global.scss +0 -36
  538. package/dist/styles/grid.scss +0 -293
  539. package/dist/styles/index.scss +0 -14
  540. package/dist/styles/position.scss +0 -1549
  541. package/dist/styles/shadow.scss +0 -19
  542. package/dist/styles/size.scss +0 -53
  543. package/dist/styles/spacing.scss +0 -1505
  544. package/dist/styles/typography.scss +0 -223
  545. package/dist/styles/utilities.scss +0 -23
  546. package/dist/tokens/border.scss +0 -95
  547. package/dist/tokens/data.scss +0 -107
  548. package/dist/tokens/function.scss +0 -742
  549. package/dist/tokens/index.scss +0 -8
  550. package/dist/tokens/layout.scss +0 -275
  551. package/dist/tokens/scheme.scss +0 -352
  552. package/dist/tokens/shadow.scss +0 -7
  553. package/dist/tokens/theme.scss +0 -657
  554. package/dist/tokens/typography.scss +0 -118
  555. package/next-env.d.ts +0 -5
  556. package/scripts/copy-files.js +0 -103
  557. package/scripts/generate-ai-spec.js +0 -464
  558. package/scripts/generate-emoji-data.js +0 -128
  559. package/scss.d.ts +0 -4
  560. package/tsconfig.vitest.json +0 -20
  561. package/vitest.config.ts +0 -19
@@ -1,118 +0,0 @@
1
- @use "../styles/breakpoints.scss" as breakpoints;
2
-
3
- :root {
4
- /* FONT WEIGHT */
5
- --font-weight-thin: 100;
6
- --font-weight-extraLight: 200;
7
- --font-weight-light: 300;
8
- --font-weight-normal: 400;
9
- --font-weight-medium: 500;
10
- --font-weight-semiBold: 600;
11
- --font-weight-bold: 700;
12
- --font-weight-extraBold: 800;
13
-
14
- --font-weight-body-default: var(--font-weight-normal);
15
- --font-weight-body-strong: var(--font-weight-bold);
16
- --font-weight-label-default: var(--font-weight-normal);
17
- --font-weight-label-strong: var(--font-weight-semiBold);
18
- --font-weight-code-default: var(--font-weight-normal);
19
- --font-weight-code-strong: var(--font-weight-bold);
20
- --font-weight-heading-default: var(--font-weight-normal);
21
- --font-weight-heading-strong: var(--font-weight-semiBold);
22
- --font-weight-display-default: var(--font-weight-light);
23
- --font-weight-display-normal: var(--font-weight-normal);
24
- --font-weight-display-medium: var(--font-weight-medium);
25
- --font-weight-display-strong: var(--font-weight-semiBold);
26
-
27
- /* FONT SIZE */
28
- --font-size-display-xl: 5rem;
29
- --font-size-display-l: 4rem;
30
- --font-size-display-m: 3rem;
31
- --font-size-display-s: 2.5rem;
32
- --font-size-display-xs: 2rem;
33
-
34
- --font-size-heading-xl: 1.5rem;
35
- --font-size-heading-l: 1.33rem;
36
- --font-size-heading-m: 1.25rem;
37
- --font-size-heading-s: 1.125rem;
38
- --font-size-heading-xs: 1rem;
39
-
40
- --font-size-body-xl: 1.25rem;
41
- --font-size-body-l: 1.125rem;
42
- --font-size-body-m: 1rem;
43
- --font-size-body-s: 0.875rem;
44
- --font-size-body-xs: 0.75rem;
45
-
46
- --font-size-label-xl: 1.125rem;
47
- --font-size-label-l: 1rem;
48
- --font-size-label-m: 0.925rem;
49
- --font-size-label-s: 0.825rem;
50
- --font-size-label-xs: 0.75rem;
51
-
52
- /* LINE HEIGHT */
53
- --line-height-display-xl: 5rem;
54
- --line-height-display-l: 4.25rem;
55
- --line-height-display-m: 3.25rem;
56
- --line-height-display-s: 3rem;
57
- --line-height-display-xs: 2.5rem;
58
-
59
- --line-height-heading-xl: 2rem;
60
- --line-height-heading-l: 1.75rem;
61
- --line-height-heading-m: 1.5rem;
62
- --line-height-heading-s: 1.5rem;
63
- --line-height-heading-xs: 1.25rem;
64
-
65
- --line-height-body-xl: 1.75rem;
66
- --line-height-body-l: 1.5rem;
67
- --line-height-body-m: 1.5rem;
68
- --line-height-body-s: 1.125rem;
69
- --line-height-body-xs: 1rem;
70
-
71
- --line-height-label-xl: 1.5rem;
72
- --line-height-label-l: 1.25rem;
73
- --line-height-label-m: 1.25rem;
74
- --line-height-label-s: 1rem;
75
- --line-height-label-xs: 0.875rem;
76
- }
77
-
78
- @include breakpoints.m {
79
- :root {
80
- /* FONT SIZE */
81
- --font-size-display-xl: 3.5rem;
82
- --font-size-display-l: 3.25rem;
83
- --font-size-display-m: 2.75rem;
84
- --font-size-display-s: 2.25rem;
85
- --font-size-display-xs: 1.75rem;
86
-
87
- --font-size-heading-xl: 1.33rem;
88
- --font-size-heading-l: 1.25rem;
89
- --font-size-heading-m: 1.125rem;
90
-
91
- /* LINE HEIGHT */
92
- --line-height-display-xl: 3.75rem;
93
- --line-height-display-l: 3.5rem;
94
- --line-height-display-m: 3rem;
95
- --line-height-display-s: 2.5rem;
96
- --line-height-display-xs: 2rem;
97
-
98
- --line-height-heading-xl: 1.75rem;
99
- --line-height-heading-l: 1.5rem;
100
- --line-height-heading-m: 1.25rem;
101
- }
102
- }
103
-
104
- @include breakpoints.s {
105
- :root {
106
- /* FONT SIZE */
107
- --font-size-display-xl: 2.75rem;
108
- --font-size-display-l: 2.5rem;
109
- --font-size-display-m: 2.25rem;
110
- --font-size-display-s: 2rem;
111
-
112
- /* LINE HEIGHT */
113
- --line-height-display-xl: 3rem;
114
- --line-height-display-l: 2.75rem;
115
- --line-height-display-m: 2.5rem;
116
- --line-height-display-s: 2.5rem;
117
- }
118
- }
package/next-env.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /// <reference types="next" />
2
- /// <reference types="next/image-types/global" />
3
-
4
- // NOTE: This file should not be edited
5
- // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
@@ -1,103 +0,0 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
-
4
- // Function to copy directory recursively
5
- function copyDir(src, dest) {
6
- // Create destination directory if it doesn't exist
7
- if (!fs.existsSync(dest)) {
8
- fs.mkdirSync(dest, { recursive: true });
9
- }
10
-
11
- // Read source directory
12
- const entries = fs.readdirSync(src, { withFileTypes: true });
13
-
14
- for (const entry of entries) {
15
- const srcPath = path.join(src, entry.name);
16
- const destPath = path.join(dest, entry.name);
17
-
18
- if (entry.isDirectory()) {
19
- // Recursively copy directory
20
- copyDir(srcPath, destPath);
21
- } else {
22
- // Copy file if it's not a TypeScript file (TS files are handled by tsc)
23
- const ext = path.extname(entry.name).toLowerCase();
24
- if (![".ts", ".tsx"].includes(ext)) {
25
- fs.copyFileSync(srcPath, destPath);
26
- }
27
- }
28
- }
29
- }
30
-
31
- // Copy all style files and other assets
32
- const srcDir = path.resolve(__dirname, "../src");
33
- const destDir = path.resolve(__dirname, "../dist");
34
-
35
- // Copy package.json with modifications
36
- const packageJson = require("../package.json");
37
-
38
- // Remove unnecessary fields for the published package
39
- const fieldsToRemove = ["scripts", "devDependencies", "overrides"];
40
-
41
- fieldsToRemove.forEach((field) => {
42
- delete packageJson[field];
43
- });
44
-
45
- // Move some dependencies to peerDependencies
46
- const peerDeps = {
47
- react: packageJson.dependencies.react,
48
- "react-dom": packageJson.dependencies["react-dom"],
49
- next: packageJson.dependencies.next,
50
- };
51
-
52
- // Add peer dependencies
53
- packageJson.peerDependencies = {
54
- ...peerDeps,
55
- react: ">=18.0.0",
56
- "react-dom": ">=18.0.0",
57
- next: ">=13.0.0",
58
- };
59
-
60
- // Remove peer deps from dependencies
61
- Object.keys(peerDeps).forEach((dep) => {
62
- delete packageJson.dependencies[dep];
63
- });
64
-
65
- // Write the modified package.json to dist
66
- fs.writeFileSync(path.resolve(destDir, "package.json"), JSON.stringify(packageJson, null, 2));
67
-
68
- // Copy README and AGENTS.md
69
- if (fs.existsSync(path.resolve(__dirname, "../README.md"))) {
70
- fs.copyFileSync(path.resolve(__dirname, "../README.md"), path.resolve(destDir, "README.md"));
71
- }
72
- if (fs.existsSync(path.resolve(__dirname, "../AGENTS.md"))) {
73
- fs.copyFileSync(path.resolve(__dirname, "../AGENTS.md"), path.resolve(destDir, "AGENTS.md"));
74
- }
75
-
76
- // Copy CLI scripts and agent templates for npm publish
77
- const scriptsDir = path.resolve(destDir, "scripts");
78
- fs.mkdirSync(scriptsDir, { recursive: true });
79
- for (const script of ["init-agent.js", "validate-ai-code.js"]) {
80
- fs.copyFileSync(
81
- path.resolve(__dirname, script),
82
- path.join(scriptsDir, script),
83
- );
84
- }
85
- const agentSrc = path.resolve(__dirname, "../agent");
86
- const agentDest = path.resolve(destDir, "agent");
87
- if (fs.existsSync(agentSrc)) {
88
- copyDir(agentSrc, agentDest);
89
- }
90
-
91
- // Copy style files
92
- console.log("Copying style files and other assets...");
93
- copyDir(srcDir, destDir);
94
-
95
- // Copy AI harness artifacts for npm publish
96
- const aiDir = path.resolve(__dirname, "../ai");
97
- const aiDest = path.resolve(destDir, "ai");
98
- if (fs.existsSync(aiDir)) {
99
- console.log("Copying AI artifacts...");
100
- copyDir(aiDir, aiDest);
101
- }
102
-
103
- console.log("Files copied successfully!");
@@ -1,464 +0,0 @@
1
- /**
2
- * Generates ai/spec.json — a compressed, machine-readable description of every
3
- * exported component: own props (with types and defaults), shared prop mixins
4
- * (encoded once), and token aliases.
5
- *
6
- * Compression strategy:
7
- * - Props declared in src/interfaces.ts are grouped into "mixins" and emitted
8
- * once; components only reference mixin names.
9
- * - Props inherited from React/DOM typings (node_modules) are omitted.
10
- * - Wrapper components (e.g. Row extends ComponentProps<typeof Flex>) get an
11
- * "extends" reference instead of repeating the base component's props.
12
- * - Each prop is a single string: "type", "type = default", or "!type" (required).
13
- */
14
-
15
- const fs = require("fs");
16
- const path = require("path");
17
-
18
- const ROOT = path.join(__dirname, "..");
19
- const SRC = path.join(ROOT, "src");
20
- const OUT_DIR = path.join(ROOT, "ai");
21
- const OUT_FILE = path.join(OUT_DIR, "spec.json");
22
-
23
- const BARRELS = [
24
- { file: path.join(SRC, "components", "index.ts"), group: "components" },
25
- { file: path.join(SRC, "modules", "index.ts"), group: "modules" },
26
- ];
27
-
28
- // Internal/low-level exports that AI should not use directly
29
- const EXCLUDE = new Set([
30
- "ServerFlex",
31
- "ClientFlex",
32
- "ServerGrid",
33
- "ClientGrid",
34
- "ElementType",
35
- "FocusTrap",
36
- "ScrollLock",
37
- "ThemeInit",
38
- "ArrowNavigation",
39
- "Meta",
40
- ]);
41
-
42
- // Token aliases worth defining once in the spec (read from types.ts source)
43
- const TOKEN_ALIASES = [
44
- "SpacingToken",
45
- "StaticSpacingToken",
46
- "ResponsiveSpacingToken",
47
- "TShirtSizes",
48
- "ColorScheme",
49
- "ColorWeight",
50
- "Colors",
51
- "RadiusSize",
52
- "ShadowSize",
53
- "TextVariant",
54
- "TextType",
55
- "TextWeight",
56
- "TextSize",
57
- "gridSize",
58
- "opacity",
59
- "flex",
60
- "CSSUnit",
61
- ];
62
-
63
- function loadTsConfig(ts) {
64
- const configPath = path.join(ROOT, "tsconfig.json");
65
- const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
66
- const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, ROOT);
67
- return parsed.options;
68
- }
69
-
70
- function isInNodeModules(decl) {
71
- return decl.getSourceFile().fileName.includes("node_modules");
72
- }
73
-
74
- function normalize(p) {
75
- return p.replace(/\\/g, "/");
76
- }
77
-
78
- /** Strip quotes from string literal default values */
79
- function cleanDefault(text) {
80
- const t = text.trim();
81
- if (/^["'].*["']$/.test(t)) return t.slice(1, -1);
82
- return t;
83
- }
84
-
85
- /** Compact a type-node source text: collapse whitespace, strip leading pipe */
86
- function typeText(node) {
87
- if (!node) return "unknown";
88
- return node
89
- .getText()
90
- .replace(/\s*\n\s*/g, " ")
91
- .replace(/\s{2,}/g, " ")
92
- .replace(/^\|\s*/, "");
93
- }
94
-
95
- async function main() {
96
- const ts = await import("typescript");
97
- const options = loadTsConfig(ts);
98
- const rootNames = BARRELS.map((b) => b.file).filter(fs.existsSync);
99
- const program = ts.createProgram(rootNames, options);
100
- const checker = program.getTypeChecker();
101
-
102
- const interfacesFile = normalize(path.join(SRC, "interfaces.ts"));
103
-
104
- const mixinsUsed = new Map(); // mixinName -> Map<propName, propString>
105
- const components = {};
106
- const warnings = [];
107
-
108
- /** Resolve the function node (arrow/function expr) implementing a component */
109
- function getComponentFunction(decl) {
110
- if (ts.isFunctionDeclaration(decl)) return decl;
111
- if (ts.isVariableDeclaration(decl) && decl.initializer) {
112
- let init = decl.initializer;
113
- // unwrap forwardRef(...) / memo(forwardRef(...))
114
- while (ts.isCallExpression(init)) {
115
- const arg = init.arguments[0];
116
- if (!arg) return undefined;
117
- init = arg;
118
- }
119
- if (ts.isArrowFunction(init) || ts.isFunctionExpression(init)) return init;
120
- }
121
- return undefined;
122
- }
123
-
124
- /** Extract destructuring defaults from a component function's first param */
125
- function getDefaults(fn) {
126
- const defaults = {};
127
- if (!fn || !fn.parameters.length) return defaults;
128
- const param = fn.parameters[0];
129
- if (!ts.isObjectBindingPattern(param.name)) return defaults;
130
- for (const el of param.name.elements) {
131
- if (el.initializer && ts.isIdentifier(el.propertyName ?? el.name)) {
132
- const key = (el.propertyName ?? el.name).getText();
133
- defaults[key] = cleanDefault(el.initializer.getText());
134
- }
135
- }
136
- return defaults;
137
- }
138
-
139
- /** Get the props type for a component declaration */
140
- function getPropsType(decl) {
141
- // forwardRef<Ref, Props>(...)
142
- if (ts.isVariableDeclaration(decl) && decl.initializer && ts.isCallExpression(decl.initializer)) {
143
- const call = decl.initializer;
144
- if (call.typeArguments && call.typeArguments.length >= 2) {
145
- return checker.getTypeFromTypeNode(call.typeArguments[1]);
146
- }
147
- }
148
- // const X: React.FC<Props> = ...
149
- if (ts.isVariableDeclaration(decl) && decl.type && ts.isTypeReferenceNode(decl.type)) {
150
- const typeName = decl.type.typeName.getText();
151
- if (
152
- /(^|\.)(FC|FunctionComponent)$/.test(typeName) &&
153
- decl.type.typeArguments &&
154
- decl.type.typeArguments.length >= 1
155
- ) {
156
- return checker.getTypeFromTypeNode(decl.type.typeArguments[0]);
157
- }
158
- }
159
- const fn = getComponentFunction(decl);
160
- if (fn && fn.parameters.length && fn.parameters[0].type) {
161
- return checker.getTypeFromTypeNode(fn.parameters[0].type);
162
- }
163
- return undefined;
164
- }
165
-
166
- /** Build the prop string: "type", "type = default", "!type" (required) */
167
- function propString(propSymbol, decl, defaults) {
168
- const name = propSymbol.getName();
169
- let type = "unknown";
170
- if (
171
- (ts.isPropertySignature(decl) || ts.isPropertyDeclaration(decl)) &&
172
- decl.type
173
- ) {
174
- type = typeText(decl.type);
175
- } else {
176
- type = checker.typeToString(checker.getTypeOfSymbol(propSymbol));
177
- }
178
- const optional = (propSymbol.flags & ts.SymbolFlags.Optional) !== 0;
179
- let out = optional ? type : `!${type}`;
180
- if (defaults && defaults[name] !== undefined) {
181
- out += ` = ${defaults[name]}`;
182
- }
183
- return out;
184
- }
185
-
186
- function processExport(name, symbol, group) {
187
- if (EXCLUDE.has(name)) return;
188
- if (!/^[A-Z]/.test(name)) return; // components only
189
-
190
- let target = symbol;
191
- if (target.flags & ts.SymbolFlags.Alias) {
192
- target = checker.getAliasedSymbol(target);
193
- }
194
- const decl = target.valueDeclaration ?? (target.declarations && target.declarations[0]);
195
- if (!decl) return;
196
- if (!ts.isVariableDeclaration(decl) && !ts.isFunctionDeclaration(decl)) return;
197
-
198
- const propsType = getPropsType(decl);
199
- if (!propsType) {
200
- warnings.push(`No props type resolved for ${name}; skipped`);
201
- return;
202
- }
203
-
204
- // For union props (e.g. ButtonProps | AnchorProps) merge member properties
205
- const typesToScan = propsType.isUnion() ? propsType.types : [propsType];
206
- const seen = new Map(); // propName -> symbol
207
- for (const t of typesToScan) {
208
- for (const p of checker.getPropertiesOfType(t)) {
209
- if (!seen.has(p.getName())) seen.set(p.getName(), p);
210
- }
211
- }
212
-
213
- const fn = getComponentFunction(decl);
214
- const defaults = getDefaults(fn);
215
-
216
- const ownFile = normalize(decl.getSourceFile().fileName);
217
- const mixins = new Set();
218
- const extendsComponents = new Set();
219
- const props = {};
220
-
221
- for (const [propName, propSym] of seen) {
222
- const pDecl = propSym.valueDeclaration ?? (propSym.declarations && propSym.declarations[0]);
223
- if (!pDecl) continue;
224
- if (isInNodeModules(pDecl)) continue; // React/DOM inherited noise
225
-
226
- const declFile = normalize(pDecl.getSourceFile().fileName);
227
-
228
- if (declFile === interfacesFile) {
229
- // shared mixin prop: attribute to parent interface, emit once globally
230
- const parent = pDecl.parent && ts.isInterfaceDeclaration(pDecl.parent) ? pDecl.parent.name.getText() : null;
231
- if (parent) {
232
- mixins.add(parent);
233
- if (!mixinsUsed.has(parent)) mixinsUsed.set(parent, new Map());
234
- if (!mixinsUsed.get(parent).has(propName)) {
235
- mixinsUsed.get(parent).set(propName, propString(propSym, pDecl, {}));
236
- }
237
- // keep component-level default override visible
238
- if (defaults[propName] !== undefined) {
239
- props[propName] = propString(propSym, pDecl, defaults);
240
- }
241
- continue;
242
- }
243
- }
244
-
245
- if (declFile !== ownFile && declFile.includes("/src/")) {
246
- // declared in another component's file → wrapper relationship
247
- const base = path.basename(declFile).replace(/\.(tsx|ts)$/, "");
248
- extendsComponents.add(base);
249
- continue;
250
- }
251
-
252
- props[propName] = propString(propSym, pDecl, defaults);
253
- }
254
-
255
- const entry = { group };
256
- if (extendsComponents.size) entry.extends = [...extendsComponents];
257
- if (mixins.size) entry.mixins = [...mixins].sort();
258
- if (Object.keys(props).length) entry.props = props;
259
- components[name] = entry;
260
- }
261
-
262
- for (const barrel of BARRELS) {
263
- if (!fs.existsSync(barrel.file)) continue;
264
- const sf = program.getSourceFile(barrel.file);
265
- if (!sf) continue;
266
- const moduleSymbol = checker.getSymbolAtLocation(sf);
267
- if (!moduleSymbol) continue;
268
- for (const exp of checker.getExportsOfModule(moduleSymbol)) {
269
- processExport(exp.getName(), exp, barrel.group);
270
- }
271
- }
272
-
273
- // Emit interfaces.ts types referenced by name in prop strings (e.g. FlexBreakpointProps)
274
- const interfacesSf = program.getSourceFile(path.join(SRC, "interfaces.ts"));
275
- if (interfacesSf) {
276
- const declared = new Map();
277
- interfacesSf.forEachChild((node) => {
278
- if (ts.isInterfaceDeclaration(node)) declared.set(node.name.getText(), node);
279
- });
280
- const allPropStrings = [];
281
- for (const c of Object.values(components)) {
282
- if (c.props) allPropStrings.push(...Object.values(c.props));
283
- }
284
- for (const m of mixinsUsed.values()) {
285
- allPropStrings.push(...m.values());
286
- }
287
- const blob = allPropStrings.join("\n");
288
- for (const [ifaceName, node] of declared) {
289
- if (mixinsUsed.has(ifaceName)) continue;
290
- if (!new RegExp(`\\b${ifaceName}\\b`).test(blob)) continue;
291
- const propsMap = new Map();
292
- for (const member of node.members) {
293
- if (!ts.isPropertySignature(member) || !member.name) continue;
294
- const pName = member.name.getText();
295
- const optional = !!member.questionToken;
296
- const t = typeText(member.type);
297
- propsMap.set(pName, optional ? t : `!${t}`);
298
- }
299
- mixinsUsed.set(ifaceName, propsMap);
300
- }
301
- }
302
-
303
- // Token aliases from types.ts (compact source text)
304
- const tokens = {};
305
- const typesSf = program.getSourceFile(path.join(SRC, "types.ts"));
306
- if (typesSf) {
307
- typesSf.forEachChild((node) => {
308
- if (ts.isTypeAliasDeclaration(node) && TOKEN_ALIASES.includes(node.name.getText())) {
309
- tokens[node.name.getText()] = typeText(node.type);
310
- }
311
- });
312
- }
313
-
314
- // IconName erases to string (Record<string, IconType>) — emit actual keys from icons.ts
315
- const iconsSf = program.getSourceFile(path.join(SRC, "icons.ts"));
316
- if (iconsSf) {
317
- iconsSf.forEachChild((node) => {
318
- if (!ts.isVariableStatement(node)) return;
319
- for (const decl of node.declarationList.declarations) {
320
- if (decl.name.getText() !== "iconLibrary" || !decl.initializer) continue;
321
- if (!ts.isObjectLiteralExpression(decl.initializer)) continue;
322
- const names = decl.initializer.properties
323
- .map((p) => (p.name ? p.name.getText() : null))
324
- .filter(Boolean);
325
- tokens.IconName = names.map((n) => `"${n}"`).join(" | ");
326
- }
327
- });
328
- }
329
-
330
- const mixins = {};
331
- for (const [name, propsMap] of [...mixinsUsed.entries()].sort()) {
332
- mixins[name] = Object.fromEntries(propsMap);
333
- }
334
-
335
- const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8"));
336
- const spec = {
337
- name: pkg.name,
338
- version: pkg.version,
339
- generated: new Date().toISOString().split("T")[0],
340
- format:
341
- "props are 'type', 'type = default', or '!type' (required). Components with 'mixins' also accept all props of those mixins. 'extends' means all props of that component are accepted.",
342
- tokens,
343
- mixins,
344
- components,
345
- };
346
-
347
- fs.mkdirSync(OUT_DIR, { recursive: true });
348
- fs.writeFileSync(OUT_FILE, JSON.stringify(spec, null, 1));
349
-
350
- emitArtifacts(spec, pkg.version);
351
-
352
- const count = Object.keys(components).length;
353
- console.log(`AI spec generated: ${count} components -> ${path.relative(ROOT, OUT_FILE)}`);
354
- if (warnings.length) {
355
- console.log(`Warnings (${warnings.length}):`);
356
- for (const w of warnings) console.log(` - ${w}`);
357
- }
358
- }
359
-
360
- /** Post-process Row/Column and emit sliced agent artifacts */
361
- function emitArtifacts(spec, version) {
362
- const shorthands = {
363
- fill: { replaces: "fillWidth fillHeight", on: ["Row", "Column", "Flex", "Grid"] },
364
- fit: { replaces: "fitWidth fitHeight", on: ["Row", "Column", "Flex", "Grid"] },
365
- center: { replaces: 'horizontal="center" vertical="center"', on: ["Row", "Column", "Flex"] },
366
- layout: {
367
- Column: { preferOver: 'Flex direction="column"' },
368
- Row: { preferOver: 'Flex direction="row"' },
369
- Flex: { useWhen: "direction changes at breakpoints only" },
370
- },
371
- };
372
-
373
- if (spec.components.Row) {
374
- spec.components.Row.preset = { direction: "row" };
375
- spec.components.Row.preferOver = 'Flex with direction="row"';
376
- }
377
- if (spec.components.Column) {
378
- spec.components.Column.preset = { direction: "column" };
379
- spec.components.Column.preferOver = 'Flex with direction="column"';
380
- }
381
- spec.shorthands = shorthands;
382
-
383
- fs.writeFileSync(OUT_FILE, JSON.stringify(spec, null, 1));
384
-
385
- const seedPath = path.join(OUT_DIR, "catalog.seed.json");
386
- const seed = fs.existsSync(seedPath)
387
- ? JSON.parse(fs.readFileSync(seedPath, "utf8"))
388
- : {};
389
-
390
- const catalog = { version, generated: spec.generated, components: {} };
391
- for (const [name, entry] of Object.entries(spec.components)) {
392
- const meta = seed[name] || {};
393
- catalog.components[name] = {
394
- group: entry.group,
395
- extends: entry.extends,
396
- purpose: meta.purpose || `${name} component`,
397
- tags: meta.tags || [entry.group],
398
- ...(meta.avoid ? { avoid: meta.avoid } : {}),
399
- ...(meta.preferOver ? { preferOver: meta.preferOver } : {}),
400
- ...(meta.pairsWith ? { pairsWith: meta.pairsWith } : {}),
401
- };
402
- }
403
- fs.writeFileSync(path.join(OUT_DIR, "catalog.json"), JSON.stringify(catalog, null, 1));
404
-
405
- const componentsDir = path.join(OUT_DIR, "components");
406
- fs.mkdirSync(componentsDir, { recursive: true });
407
- for (const [name, entry] of Object.entries(spec.components)) {
408
- const slice = {
409
- name,
410
- ...entry,
411
- mixinsRef: entry.mixins || [],
412
- tokensRef: Object.keys(entry.mixins || []).length ? "see spec.json mixins" : undefined,
413
- };
414
- if (slice.mixins) {
415
- slice.resolvedMixins = {};
416
- for (const mixin of slice.mixins) {
417
- if (spec.mixins[mixin]) slice.resolvedMixins[mixin] = spec.mixins[mixin];
418
- }
419
- }
420
- fs.writeFileSync(path.join(componentsDir, `${name}.json`), JSON.stringify(slice, null, 1));
421
- }
422
-
423
- const manifest = {
424
- version,
425
- generated: spec.generated,
426
- files: {
427
- spec: "spec.json",
428
- catalog: "catalog.json",
429
- rules: "rules.compact.md",
430
- rulesFull: "rules.md",
431
- recipes: "recipes.md",
432
- gotchas: "gotchas.json",
433
- tasks: "tasks/index.json",
434
- examples: "examples/",
435
- blocks: "examples/blocks/manifest.json",
436
- components: "components/",
437
- },
438
- bootstrap: ["rules.compact.md", "catalog.json"],
439
- resolve: "tasks/index.json",
440
- };
441
- fs.writeFileSync(path.join(OUT_DIR, "manifest.json"), JSON.stringify(manifest, null, 1));
442
-
443
- syncDocsPublic();
444
- console.log(`AI artifacts: catalog + ${Object.keys(spec.components).length} component slices`);
445
- }
446
-
447
- function syncDocsPublic() {
448
- const docsAi = path.join(ROOT, "../../apps/docs/public/ai");
449
- if (!fs.existsSync(path.dirname(docsAi))) return;
450
- copyDir(OUT_DIR, docsAi);
451
- console.log(`Synced AI artifacts -> ${path.relative(ROOT, docsAi)}`);
452
- }
453
-
454
- function copyDir(src, dest) {
455
- if (!fs.existsSync(dest)) fs.mkdirSync(dest, { recursive: true });
456
- for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
457
- const srcPath = path.join(src, entry.name);
458
- const destPath = path.join(dest, entry.name);
459
- if (entry.isDirectory()) copyDir(srcPath, destPath);
460
- else fs.copyFileSync(srcPath, destPath);
461
- }
462
- }
463
-
464
- main().catch((e) => { console.error(e); process.exit(1); });