@once-ui-system/core 1.8.3 → 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 (577) 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 +1 -1
  198. package/dist/components/CompareImage.d.ts.map +1 -1
  199. package/dist/components/CompareImage.js +2 -2
  200. package/dist/components/CompareImage.js.map +1 -1
  201. package/dist/components/DateInput.d.ts.map +1 -1
  202. package/dist/components/DateInput.js +10 -1
  203. package/dist/components/DateInput.js.map +1 -1
  204. package/dist/components/DatePicker.d.ts +2 -2
  205. package/dist/components/DatePicker.d.ts.map +1 -1
  206. package/dist/components/DatePicker.js +21 -14
  207. package/dist/components/DatePicker.js.map +1 -1
  208. package/dist/components/DateRangeInput.js +3 -3
  209. package/dist/components/DateRangeInput.js.map +1 -1
  210. package/dist/components/Dialog.d.ts +1 -1
  211. package/dist/components/Dialog.d.ts.map +1 -1
  212. package/dist/components/Dialog.js +14 -14
  213. package/dist/components/Dialog.js.map +1 -1
  214. package/dist/components/DropdownWrapper.d.ts +8 -3
  215. package/dist/components/DropdownWrapper.d.ts.map +1 -1
  216. package/dist/components/DropdownWrapper.js +17 -6
  217. package/dist/components/DropdownWrapper.js.map +1 -1
  218. package/dist/components/Effect.d.ts +41 -0
  219. package/dist/components/Effect.d.ts.map +1 -0
  220. package/dist/components/Effect.js +30 -0
  221. package/dist/components/Effect.js.map +1 -0
  222. package/dist/components/ElementType.d.ts +2 -1
  223. package/dist/components/ElementType.d.ts.map +1 -1
  224. package/dist/components/ElementType.js +4 -2
  225. package/dist/components/ElementType.js.map +1 -1
  226. package/dist/components/EmojiPicker.d.ts +1 -1
  227. package/dist/components/EmojiPicker.d.ts.map +1 -1
  228. package/dist/components/EmojiPicker.js +1 -1
  229. package/dist/components/EmojiPicker.js.map +1 -1
  230. package/dist/components/FadingLettersFx.d.ts +1 -1
  231. package/dist/components/FadingLettersFx.d.ts.map +1 -1
  232. package/dist/components/Feedback.d.ts +1 -1
  233. package/dist/components/Feedback.d.ts.map +1 -1
  234. package/dist/components/Feedback.js +2 -2
  235. package/dist/components/Feedback.js.map +1 -1
  236. package/dist/components/Flex.d.ts.map +1 -1
  237. package/dist/components/Flex.js +46 -5
  238. package/dist/components/Flex.js.map +1 -1
  239. package/dist/components/Heading.d.ts +1 -1
  240. package/dist/components/Icon.d.ts.map +1 -1
  241. package/dist/components/Icon.js.map +1 -1
  242. package/dist/components/IconButton.d.ts +1 -1
  243. package/dist/components/IconButton.d.ts.map +1 -1
  244. package/dist/components/IconButton.js +4 -4
  245. package/dist/components/IconButton.js.map +1 -1
  246. package/dist/components/InfiniteScroll.d.ts +1 -1
  247. package/dist/components/InfiniteScroll.d.ts.map +1 -1
  248. package/dist/components/InfoTip.d.ts +17 -0
  249. package/dist/components/InfoTip.d.ts.map +1 -0
  250. package/dist/components/InfoTip.js +12 -0
  251. package/dist/components/InfoTip.js.map +1 -0
  252. package/dist/components/Input.d.ts +11 -5
  253. package/dist/components/Input.d.ts.map +1 -1
  254. package/dist/components/Input.js +32 -16
  255. package/dist/components/Input.js.map +1 -1
  256. package/dist/components/Input.module.scss +313 -1
  257. package/dist/components/InteractiveDetails.d.ts.map +1 -1
  258. package/dist/components/InteractiveDetails.js +1 -1
  259. package/dist/components/InteractiveDetails.js.map +1 -1
  260. package/dist/components/Kbd.d.ts.map +1 -1
  261. package/dist/components/Kbd.js +4 -1
  262. package/dist/components/Kbd.js.map +1 -1
  263. package/dist/components/Logo.d.ts +16 -4
  264. package/dist/components/Logo.d.ts.map +1 -1
  265. package/dist/components/Logo.js +32 -14
  266. package/dist/components/Logo.js.map +1 -1
  267. package/dist/components/Media.d.ts +9 -2
  268. package/dist/components/Media.d.ts.map +1 -1
  269. package/dist/components/Media.js +25 -16
  270. package/dist/components/Media.js.map +1 -1
  271. package/dist/components/MediaAudioPlayer.d.ts +29 -0
  272. package/dist/components/MediaAudioPlayer.d.ts.map +1 -0
  273. package/dist/components/MediaAudioPlayer.js +115 -0
  274. package/dist/components/MediaAudioPlayer.js.map +1 -0
  275. package/dist/components/MediaAudioPlayer.module.scss +38 -0
  276. package/dist/components/Modal.d.ts +1 -1
  277. package/dist/components/Modal.d.ts.map +1 -1
  278. package/dist/components/Modal.js +10 -10
  279. package/dist/components/Modal.js.map +1 -1
  280. package/dist/components/NavGroup.d.ts +33 -0
  281. package/dist/components/NavGroup.d.ts.map +1 -0
  282. package/dist/components/NavGroup.js +27 -0
  283. package/dist/components/NavGroup.js.map +1 -0
  284. package/dist/components/NavIcon.d.ts +1 -1
  285. package/dist/components/NavIcon.d.ts.map +1 -1
  286. package/dist/components/NavIcon.js +2 -2
  287. package/dist/components/NavIcon.js.map +1 -1
  288. package/dist/components/NavItem.d.ts +24 -0
  289. package/dist/components/NavItem.d.ts.map +1 -0
  290. package/dist/components/NavItem.js +18 -0
  291. package/dist/components/NavItem.js.map +1 -0
  292. package/dist/components/NumberInput.js +1 -1
  293. package/dist/components/NumberInput.js.map +1 -1
  294. package/dist/components/OgCard.d.ts +1 -1
  295. package/dist/components/OgCard.js +3 -3
  296. package/dist/components/OgCard.js.map +1 -1
  297. package/dist/components/Option.d.ts +3 -3
  298. package/dist/components/Option.d.ts.map +1 -1
  299. package/dist/components/Option.js +2 -2
  300. package/dist/components/Option.js.map +1 -1
  301. package/dist/components/Particle.d.ts +2 -2
  302. package/dist/components/Particle.d.ts.map +1 -1
  303. package/dist/components/PasswordInput.d.ts.map +1 -1
  304. package/dist/components/PasswordInput.js +2 -2
  305. package/dist/components/PasswordInput.js.map +1 -1
  306. package/dist/components/ProgressBar.d.ts +1 -1
  307. package/dist/components/ProgressBar.d.ts.map +1 -1
  308. package/dist/components/ProgressBar.js +2 -2
  309. package/dist/components/ProgressBar.js.map +1 -1
  310. package/dist/components/Pulse.d.ts +1 -1
  311. package/dist/components/Pulse.d.ts.map +1 -1
  312. package/dist/components/Pulse.js +2 -2
  313. package/dist/components/Pulse.js.map +1 -1
  314. package/dist/components/RadioButton.d.ts +2 -2
  315. package/dist/components/RadioButton.d.ts.map +1 -1
  316. package/dist/components/RadioButton.js +1 -1
  317. package/dist/components/RadioButton.js.map +1 -1
  318. package/dist/components/RevealFx.d.ts +2 -1
  319. package/dist/components/RevealFx.d.ts.map +1 -1
  320. package/dist/components/RevealFx.js +8 -8
  321. package/dist/components/RevealFx.js.map +1 -1
  322. package/dist/components/ScrollContainer.d.ts.map +1 -1
  323. package/dist/components/ScrollContainer.js +1 -1
  324. package/dist/components/ScrollContainer.js.map +1 -1
  325. package/dist/components/ScrollToTop.d.ts +1 -1
  326. package/dist/components/Scrubber.d.ts +70 -0
  327. package/dist/components/Scrubber.d.ts.map +1 -0
  328. package/dist/components/Scrubber.js +161 -0
  329. package/dist/components/Scrubber.js.map +1 -0
  330. package/dist/components/SegmentedControl.d.ts +4 -4
  331. package/dist/components/SegmentedControl.d.ts.map +1 -1
  332. package/dist/components/SegmentedControl.js +11 -11
  333. package/dist/components/SegmentedControl.js.map +1 -1
  334. package/dist/components/Select.d.ts.map +1 -1
  335. package/dist/components/Select.js +48 -15
  336. package/dist/components/Select.js.map +1 -1
  337. package/dist/components/ServerFlex.d.ts +0 -1
  338. package/dist/components/ServerFlex.d.ts.map +1 -1
  339. package/dist/components/ServerFlex.js +99 -52
  340. package/dist/components/ServerFlex.js.map +1 -1
  341. package/dist/components/ServerGrid.d.ts +0 -1
  342. package/dist/components/ServerGrid.d.ts.map +1 -1
  343. package/dist/components/ServerGrid.js +11 -9
  344. package/dist/components/ServerGrid.js.map +1 -1
  345. package/dist/components/Setting.d.ts +50 -0
  346. package/dist/components/Setting.d.ts.map +1 -0
  347. package/dist/components/Setting.js +43 -0
  348. package/dist/components/Setting.js.map +1 -0
  349. package/dist/components/ShineFx.d.ts +1 -0
  350. package/dist/components/ShineFx.d.ts.map +1 -1
  351. package/dist/components/ShineFx.js +2 -2
  352. package/dist/components/ShineFx.js.map +1 -1
  353. package/dist/components/Skeleton.d.ts +16 -3
  354. package/dist/components/Skeleton.d.ts.map +1 -1
  355. package/dist/components/Skeleton.js +2 -2
  356. package/dist/components/Skeleton.js.map +1 -1
  357. package/dist/components/Skeleton.module.scss +14 -51
  358. package/dist/components/SplitView.d.ts +23 -3
  359. package/dist/components/SplitView.d.ts.map +1 -1
  360. package/dist/components/SplitView.js +90 -58
  361. package/dist/components/SplitView.js.map +1 -1
  362. package/dist/components/StyleOverlay.d.ts.map +1 -1
  363. package/dist/components/StyleOverlay.js +1 -1
  364. package/dist/components/StyleOverlay.js.map +1 -1
  365. package/dist/components/StylePanel.d.ts +47 -6
  366. package/dist/components/StylePanel.d.ts.map +1 -1
  367. package/dist/components/StylePanel.js +16 -189
  368. package/dist/components/StylePanel.js.map +1 -1
  369. package/dist/components/StylePanel.module.scss +6 -1
  370. package/dist/components/StylePanelSections.d.ts +117 -0
  371. package/dist/components/StylePanelSections.d.ts.map +1 -0
  372. package/dist/components/StylePanelSections.js +175 -0
  373. package/dist/components/StylePanelSections.js.map +1 -0
  374. package/dist/components/Swiper.d.ts +7 -1
  375. package/dist/components/Swiper.d.ts.map +1 -1
  376. package/dist/components/Swiper.js +7 -7
  377. package/dist/components/Swiper.js.map +1 -1
  378. package/dist/components/Switch.d.ts +2 -2
  379. package/dist/components/Switch.d.ts.map +1 -1
  380. package/dist/components/Switch.js +4 -4
  381. package/dist/components/Switch.js.map +1 -1
  382. package/dist/components/Table.d.ts +1 -1
  383. package/dist/components/Table.d.ts.map +1 -1
  384. package/dist/components/Table.js +2 -2
  385. package/dist/components/Table.js.map +1 -1
  386. package/dist/components/Tag.d.ts +1 -1
  387. package/dist/components/Tag.d.ts.map +1 -1
  388. package/dist/components/Tag.js +2 -2
  389. package/dist/components/Tag.js.map +1 -1
  390. package/dist/components/Text.d.ts +1 -1
  391. package/dist/components/Textarea.d.ts +15 -5
  392. package/dist/components/Textarea.d.ts.map +1 -1
  393. package/dist/components/Textarea.js +31 -17
  394. package/dist/components/Textarea.js.map +1 -1
  395. package/dist/components/ThemeInit.d.ts.map +1 -1
  396. package/dist/components/ThemeInit.js +6 -4
  397. package/dist/components/ThemeInit.js.map +1 -1
  398. package/dist/components/ThemeSwitcher.d.ts +14 -1
  399. package/dist/components/ThemeSwitcher.d.ts.map +1 -1
  400. package/dist/components/ThemeSwitcher.js +19 -9
  401. package/dist/components/ThemeSwitcher.js.map +1 -1
  402. package/dist/components/ThemeSwitcher.module.scss +54 -0
  403. package/dist/components/Toast.d.ts +1 -1
  404. package/dist/components/Toast.d.ts.map +1 -1
  405. package/dist/components/Toast.js +2 -2
  406. package/dist/components/Toast.js.map +1 -1
  407. package/dist/components/ToggleButton.d.ts +9 -2
  408. package/dist/components/ToggleButton.d.ts.map +1 -1
  409. package/dist/components/ToggleButton.js +5 -5
  410. package/dist/components/ToggleButton.js.map +1 -1
  411. package/dist/components/User.js +1 -1
  412. package/dist/components/User.js.map +1 -1
  413. package/dist/components/index.d.ts +7 -0
  414. package/dist/components/index.d.ts.map +1 -1
  415. package/dist/components/index.js +7 -0
  416. package/dist/components/index.js.map +1 -1
  417. package/dist/contexts/AdapterProvider.d.ts +50 -0
  418. package/dist/contexts/AdapterProvider.d.ts.map +1 -0
  419. package/dist/contexts/AdapterProvider.js +91 -0
  420. package/dist/contexts/AdapterProvider.js.map +1 -0
  421. package/dist/contexts/DataThemeProvider.d.ts +1 -1
  422. package/dist/contexts/DataThemeProvider.d.ts.map +1 -1
  423. package/dist/contexts/IconProvider.d.ts +3 -3
  424. package/dist/contexts/IconProvider.d.ts.map +1 -1
  425. package/dist/contexts/IconProvider.js +2 -2
  426. package/dist/contexts/IconProvider.js.map +1 -1
  427. package/dist/contexts/LayoutProvider.d.ts +0 -2
  428. package/dist/contexts/LayoutProvider.d.ts.map +1 -1
  429. package/dist/contexts/LayoutProvider.js +15 -10
  430. package/dist/contexts/LayoutProvider.js.map +1 -1
  431. package/dist/contexts/ThemeProvider.d.ts +29 -1
  432. package/dist/contexts/ThemeProvider.d.ts.map +1 -1
  433. package/dist/contexts/ThemeProvider.js +42 -15
  434. package/dist/contexts/ThemeProvider.js.map +1 -1
  435. package/dist/contexts/index.d.ts +3 -2
  436. package/dist/contexts/index.d.ts.map +1 -1
  437. package/dist/contexts/index.js +3 -2
  438. package/dist/contexts/index.js.map +1 -1
  439. package/dist/css/styles.css +1 -1
  440. package/dist/css/tokens.css +1 -1
  441. package/dist/data/emoji-data.json +0 -10
  442. package/dist/hooks/index.d.ts +0 -1
  443. package/dist/hooks/index.d.ts.map +1 -1
  444. package/dist/hooks/index.js +0 -1
  445. package/dist/hooks/index.js.map +1 -1
  446. package/dist/icons/ATTRIBUTION.md +19 -0
  447. package/dist/icons/data.d.ts +1919 -0
  448. package/dist/icons/data.d.ts.map +1 -0
  449. package/dist/icons/data.js +102 -0
  450. package/dist/icons/data.js.map +1 -0
  451. package/dist/icons/renderIcon.d.ts +26 -0
  452. package/dist/icons/renderIcon.d.ts.map +1 -0
  453. package/dist/icons/renderIcon.js +22 -0
  454. package/dist/icons/renderIcon.js.map +1 -0
  455. package/dist/icons.d.ts +35 -4
  456. package/dist/icons.d.ts.map +1 -1
  457. package/dist/icons.js +13 -60
  458. package/dist/icons.js.map +1 -1
  459. package/dist/modules/code/CodeBlock.impl.d.ts +2 -1
  460. package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
  461. package/dist/modules/code/CodeBlock.impl.js +7 -2
  462. package/dist/modules/code/CodeBlock.impl.js.map +1 -1
  463. package/dist/modules/data/ChartHeader.d.ts.map +1 -1
  464. package/dist/modules/data/ChartHeader.js +1 -1
  465. package/dist/modules/data/ChartHeader.js.map +1 -1
  466. package/dist/modules/data/DataTooltip.d.ts +1 -1
  467. package/dist/modules/data/DataTooltip.d.ts.map +1 -1
  468. package/dist/modules/data/DataTooltip.js +2 -2
  469. package/dist/modules/data/DataTooltip.js.map +1 -1
  470. package/dist/modules/data/LinearGauge.d.ts +4 -3
  471. package/dist/modules/data/LinearGauge.d.ts.map +1 -1
  472. package/dist/modules/data/LinearGauge.js +1 -1
  473. package/dist/modules/data/LinearGauge.js.map +1 -1
  474. package/dist/modules/data/PieChart.impl.d.ts +1 -1
  475. package/dist/modules/data/PieChart.impl.d.ts.map +1 -1
  476. package/dist/modules/data/PieChart.impl.js +4 -1
  477. package/dist/modules/data/PieChart.impl.js.map +1 -1
  478. package/dist/modules/data/RadialGauge.d.ts +4 -3
  479. package/dist/modules/data/RadialGauge.d.ts.map +1 -1
  480. package/dist/modules/data/RadialGauge.js +1 -1
  481. package/dist/modules/data/RadialGauge.js.map +1 -1
  482. package/dist/modules/data/interfaces.d.ts +12 -3
  483. package/dist/modules/data/interfaces.d.ts.map +1 -1
  484. package/dist/modules/index.d.ts +1 -4
  485. package/dist/modules/index.d.ts.map +1 -1
  486. package/dist/modules/index.js +9 -3
  487. package/dist/modules/index.js.map +1 -1
  488. package/dist/modules/media/MediaUpload.impl.d.ts +1 -1
  489. package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -1
  490. package/dist/modules/media/MediaUpload.impl.js +1 -1
  491. package/dist/modules/media/MediaUpload.impl.js.map +1 -1
  492. package/dist/modules/navigation/Kbar.d.ts +5 -4
  493. package/dist/modules/navigation/Kbar.d.ts.map +1 -1
  494. package/dist/modules/navigation/Kbar.js +32 -35
  495. package/dist/modules/navigation/Kbar.js.map +1 -1
  496. package/dist/modules/navigation/MegaMenu.d.ts +5 -3
  497. package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
  498. package/dist/modules/navigation/MegaMenu.js +24 -12
  499. package/dist/modules/navigation/MegaMenu.js.map +1 -1
  500. package/dist/modules/navigation/MobileMegaMenu.d.ts +3 -2
  501. package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -1
  502. package/dist/modules/navigation/MobileMegaMenu.js +1 -1
  503. package/dist/modules/navigation/MobileMegaMenu.js.map +1 -1
  504. package/dist/modules/seo/Meta.d.ts +40 -2
  505. package/dist/modules/seo/Meta.d.ts.map +1 -1
  506. package/dist/modules/seo/Meta.js.map +1 -1
  507. package/dist/modules/seo/Schema.d.ts +2 -1
  508. package/dist/modules/seo/Schema.d.ts.map +1 -1
  509. package/dist/modules/seo/Schema.js +1 -2
  510. package/dist/modules/seo/Schema.js.map +1 -1
  511. package/dist/next/index.d.ts +35 -0
  512. package/dist/next/index.d.ts.map +1 -0
  513. package/dist/next/index.js +56 -0
  514. package/dist/next/index.js.map +1 -0
  515. package/dist/package.json +52 -7
  516. package/dist/scripts/init-agent.js +156 -0
  517. package/dist/scripts/validate-ai-code.js +213 -0
  518. package/dist/server/og-utils.d.ts +9 -3
  519. package/dist/server/og-utils.d.ts.map +1 -1
  520. package/dist/server/og-utils.js +15 -9
  521. package/dist/server/og-utils.js.map +1 -1
  522. package/dist/styles/breakpoints.scss +16 -5
  523. package/dist/test/setup.js +21 -0
  524. package/dist/test/setup.js.map +1 -1
  525. package/dist/types.d.ts +13 -1
  526. package/dist/types.d.ts.map +1 -1
  527. package/dist/types.js.map +1 -1
  528. package/dist/utils/colorScheme.d.ts +35 -0
  529. package/dist/utils/colorScheme.d.ts.map +1 -0
  530. package/dist/utils/colorScheme.js +140 -0
  531. package/dist/utils/colorScheme.js.map +1 -0
  532. package/dist/utils/index.d.ts +2 -0
  533. package/dist/utils/index.d.ts.map +1 -1
  534. package/dist/utils/index.js +2 -0
  535. package/dist/utils/index.js.map +1 -1
  536. package/dist/utils/navMatch.d.ts +21 -0
  537. package/dist/utils/navMatch.d.ts.map +1 -0
  538. package/dist/utils/navMatch.js +26 -0
  539. package/dist/utils/navMatch.js.map +1 -0
  540. package/package.json +66 -11
  541. package/scripts/validate-ai-code.js +74 -10
  542. package/dist/css/styles.css.map +0 -1
  543. package/dist/css/tokens.css.map +0 -1
  544. package/dist/hooks/useResponsiveClasses.d.ts +0 -9
  545. package/dist/hooks/useResponsiveClasses.d.ts.map +0 -1
  546. package/dist/hooks/useResponsiveClasses.js +0 -293
  547. package/dist/hooks/useResponsiveClasses.js.map +0 -1
  548. package/dist/styles/background.scss +0 -423
  549. package/dist/styles/border.scss +0 -546
  550. package/dist/styles/color.scss +0 -183
  551. package/dist/styles/display.scss +0 -391
  552. package/dist/styles/flex.scss +0 -518
  553. package/dist/styles/global.scss +0 -36
  554. package/dist/styles/grid.scss +0 -293
  555. package/dist/styles/index.scss +0 -14
  556. package/dist/styles/position.scss +0 -1549
  557. package/dist/styles/shadow.scss +0 -19
  558. package/dist/styles/size.scss +0 -53
  559. package/dist/styles/spacing.scss +0 -1505
  560. package/dist/styles/typography.scss +0 -223
  561. package/dist/styles/utilities.scss +0 -23
  562. package/dist/tokens/border.scss +0 -95
  563. package/dist/tokens/data.scss +0 -107
  564. package/dist/tokens/function.scss +0 -742
  565. package/dist/tokens/index.scss +0 -8
  566. package/dist/tokens/layout.scss +0 -275
  567. package/dist/tokens/scheme.scss +0 -352
  568. package/dist/tokens/shadow.scss +0 -7
  569. package/dist/tokens/theme.scss +0 -657
  570. package/dist/tokens/typography.scss +0 -118
  571. package/next-env.d.ts +0 -5
  572. package/scripts/copy-files.js +0 -103
  573. package/scripts/generate-ai-spec.js +0 -464
  574. package/scripts/generate-emoji-data.js +0 -128
  575. package/scss.d.ts +0 -4
  576. package/tsconfig.vitest.json +0 -20
  577. package/vitest.config.ts +0 -19
@@ -0,0 +1,35 @@
1
+ import type React from "react";
2
+ import { type OnceUIAdapters } from "../contexts/AdapterProvider";
3
+ import { LayoutProvider as BaseLayoutProvider } from "../contexts/LayoutProvider";
4
+ export declare const nextAdapters: OnceUIAdapters;
5
+ export interface NextAdapterProviderProps {
6
+ children: React.ReactNode;
7
+ }
8
+ export declare const NextAdapterProvider: React.FC<NextAdapterProviderProps>;
9
+ /**
10
+ * Drop-in replacement for core's `LayoutProvider`, with the Next adapters
11
+ * already installed.
12
+ *
13
+ * This is the whole migration for a Next.js app on 1.8.x: change the import
14
+ * path for `LayoutProvider`, and `SmartLink`, `Button`/`Card`/`ToggleButton`
15
+ * with an `href`, `Media`, `Logo`, `MegaMenu` and `Kbar` keep routing through
16
+ * next/link and next/image exactly as before. No provider is added to the tree
17
+ * and no props change.
18
+ *
19
+ * - import { LayoutProvider } from "@once-ui-system/core";
20
+ * + import { LayoutProvider } from "@once-ui-system/core/next";
21
+ *
22
+ * Detection is deliberately not attempted. The adapters include two hooks whose
23
+ * implementations call different numbers of hooks — the DOM `useNavigate`
24
+ * returns a closure, the Next one calls `useRouter` and `useCallback` — so
25
+ * swapping them after mount breaks the rules of hooks. Resolution has to be
26
+ * settled before the first render, and a browser bundle has no synchronous way
27
+ * to conditionally resolve an optional module. An explicit import is the
28
+ * honest, bundler-independent version of the same thing.
29
+ *
30
+ * Apps that already compose `AdapterProvider` themselves can keep using
31
+ * `NextAdapterProvider` directly; this only removes the boilerplate for the
32
+ * common case.
33
+ */
34
+ export declare const LayoutProvider: React.FC<React.ComponentProps<typeof BaseLayoutProvider>>;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AA4BlF,eAAO,MAAM,YAAY,EAAE,cAK1B,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAElE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAOpF,CAAC"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import NextImage from "next/image";
4
+ import NextLink from "next/link";
5
+ import { usePathname, useRouter } from "next/navigation";
6
+ import { forwardRef, useCallback } from "react";
7
+ import { AdapterProvider, } from "../contexts/AdapterProvider";
8
+ import { LayoutProvider as BaseLayoutProvider } from "../contexts/LayoutProvider";
9
+ /**
10
+ * Next.js adapter bindings — the ONLY runtime `next/*` imports in core
11
+ * outside modules/seo and server/ (enforced by framework-boundary.test.ts).
12
+ * Imported via the `@once-ui-system/core/next` subpath, never the root
13
+ * barrel, so non-Next bundlers never resolve `next/*`. This module becomes
14
+ * the seed of `@once-ui-system/nextjs` in 2.0 Phase 4.
15
+ */
16
+ const NextAdapterLink = forwardRef(({ href, children, ...props }, ref) => (_jsx(NextLink, { href: href, ref: ref, ...props, children: children })));
17
+ NextAdapterLink.displayName = "NextAdapterLink";
18
+ const NextAdapterImage = ({ width, height, ...props }) => (_jsx(NextImage, { width: width, height: height, ...props }));
19
+ const useNextNavigate = () => {
20
+ const router = useRouter();
21
+ return useCallback((href) => router.push(href), [router]);
22
+ };
23
+ export const nextAdapters = {
24
+ Link: NextAdapterLink,
25
+ Image: NextAdapterImage,
26
+ usePathname,
27
+ useNavigate: useNextNavigate,
28
+ };
29
+ export const NextAdapterProvider = ({ children }) => (_jsx(AdapterProvider, { adapters: nextAdapters, children: children }));
30
+ /**
31
+ * Drop-in replacement for core's `LayoutProvider`, with the Next adapters
32
+ * already installed.
33
+ *
34
+ * This is the whole migration for a Next.js app on 1.8.x: change the import
35
+ * path for `LayoutProvider`, and `SmartLink`, `Button`/`Card`/`ToggleButton`
36
+ * with an `href`, `Media`, `Logo`, `MegaMenu` and `Kbar` keep routing through
37
+ * next/link and next/image exactly as before. No provider is added to the tree
38
+ * and no props change.
39
+ *
40
+ * - import { LayoutProvider } from "@once-ui-system/core";
41
+ * + import { LayoutProvider } from "@once-ui-system/core/next";
42
+ *
43
+ * Detection is deliberately not attempted. The adapters include two hooks whose
44
+ * implementations call different numbers of hooks — the DOM `useNavigate`
45
+ * returns a closure, the Next one calls `useRouter` and `useCallback` — so
46
+ * swapping them after mount breaks the rules of hooks. Resolution has to be
47
+ * settled before the first render, and a browser bundle has no synchronous way
48
+ * to conditionally resolve an optional module. An explicit import is the
49
+ * honest, bundler-independent version of the same thing.
50
+ *
51
+ * Apps that already compose `AdapterProvider` themselves can keep using
52
+ * `NextAdapterProvider` directly; this only removes the boilerplate for the
53
+ * common case.
54
+ */
55
+ export const LayoutProvider = ({ children, ...props }) => (_jsx(NextAdapterProvider, { children: _jsx(BaseLayoutProvider, { ...props, children: children }) }));
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAGL,eAAe,GAEhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAElF;;;;;;GAMG;AAEH,MAAM,eAAe,GAAG,UAAU,CAChC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACrC,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAM,KAAK,YACtC,QAAQ,GACA,CACZ,CACF,CAAC;AACF,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAEhD,MAAM,gBAAgB,GAAgC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CACrF,KAAC,SAAS,IAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAM,KAAK,GAAI,CACvD,CAAC;AAEF,MAAM,eAAe,GAAG,GAA6B,EAAE;IACrD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO,WAAW,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,gBAAgB;IACvB,WAAW;IACX,WAAW,EAAE,eAAe;CAC7B,CAAC;AAMF,MAAM,CAAC,MAAM,mBAAmB,GAAuC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACvF,KAAC,eAAe,IAAC,QAAQ,EAAE,YAAY,YAAG,QAAQ,GAAmB,CACtE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,CAAC,MAAM,cAAc,GAA8D,CAAC,EACxF,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,EAAE,CAAC,CACJ,KAAC,mBAAmB,cAClB,KAAC,kBAAkB,OAAK,KAAK,YAAG,QAAQ,GAAsB,GAC1C,CACvB,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,18 @@
1
1
  {
2
2
  "name": "@once-ui-system/core",
3
- "version": "1.8.3",
3
+ "version": "2.0.0-alpha.0",
4
+ "publishConfig": {
5
+ "access": "public",
6
+ "tag": "alpha"
7
+ },
8
+ "files": [
9
+ "dist",
10
+ "ai",
11
+ "agent",
12
+ "AGENTS.md",
13
+ "scripts/init-agent.js",
14
+ "scripts/validate-ai-code.js"
15
+ ],
4
16
  "description": "Once UI for Next.js NPM package",
5
17
  "keywords": [
6
18
  "once-ui",
@@ -99,6 +111,11 @@
99
111
  "import": "./dist/server/index.js",
100
112
  "require": "./dist/server/index.js"
101
113
  },
114
+ "./next": {
115
+ "types": "./dist/next/index.d.ts",
116
+ "import": "./dist/next/index.js",
117
+ "require": "./dist/next/index.js"
118
+ },
102
119
  "./ai/manifest.json": "./ai/manifest.json",
103
120
  "./ai/spec.json": "./ai/spec.json",
104
121
  "./ai/catalog.json": "./ai/catalog.json",
@@ -106,20 +123,33 @@
106
123
  "./ai/rules.compact.md": "./ai/rules.compact.md",
107
124
  "./ai/rules.md": "./ai/rules.md",
108
125
  "./ai/recipes.md": "./ai/recipes.md",
126
+ "./ai/layouts.md": "./ai/layouts.md",
109
127
  "./ai/tasks/*": "./ai/tasks/*",
110
128
  "./ai/components/*": "./ai/components/*",
111
129
  "./ai/examples/*": "./ai/examples/*",
112
130
  "./ai/examples/blocks/*": "./ai/examples/blocks/*",
113
- "./AGENTS.md": "./AGENTS.md"
131
+ "./AGENTS.md": "./AGENTS.md",
132
+ "./data": {
133
+ "types": "./dist/modules/data/index.d.ts",
134
+ "import": "./dist/modules/data/index.js",
135
+ "require": "./dist/modules/data/index.js"
136
+ },
137
+ "./code": {
138
+ "types": "./dist/modules/code/index.d.ts",
139
+ "import": "./dist/modules/code/index.js",
140
+ "require": "./dist/modules/code/index.js"
141
+ },
142
+ "./media": {
143
+ "types": "./dist/modules/media/index.d.ts",
144
+ "import": "./dist/modules/media/index.js",
145
+ "require": "./dist/modules/media/index.js"
146
+ },
147
+ "./package.json": "./package.json"
114
148
  },
115
149
  "dependencies": {
116
150
  "@floating-ui/react-dom": "^2.1.9",
117
151
  "clsx": "^2.1.1",
118
- "compressorjs": "^1.3.0",
119
- "date-fns": "^4.4.0",
120
- "prismjs": "^1.30.0",
121
- "react-icons": "^5.7.0",
122
- "recharts": "^3.10.1"
152
+ "date-fns": "^4.4.0"
123
153
  },
124
154
  "peerDependencies": {
125
155
  "react": ">=18.0.0",
@@ -127,8 +157,23 @@
127
157
  "next": ">=13.0.0"
128
158
  },
129
159
  "peerDependenciesMeta": {
160
+ "next": {
161
+ "optional": true
162
+ },
163
+ "sass": {
164
+ "optional": true
165
+ },
130
166
  "sharp": {
131
167
  "optional": true
168
+ },
169
+ "recharts": {
170
+ "optional": true
171
+ },
172
+ "prismjs": {
173
+ "optional": true
174
+ },
175
+ "compressorjs": {
176
+ "optional": true
132
177
  }
133
178
  }
134
179
  }
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Scaffold agent harness pointers in a consumer project.
4
+ * Usage: npx once-ui-init-agent [--force] [--dry-run]
5
+ */
6
+
7
+ const fs = require("fs");
8
+ const path = require("path");
9
+
10
+ const PACKAGE_ROOT = path.join(__dirname, "..");
11
+ const MARKER_START = "<!-- once-ui-agent-harness:start -->";
12
+ const MARKER_END = "<!-- once-ui-agent-harness:end -->";
13
+
14
+ const PROJECT_AGENTS_SECTION = `${MARKER_START}
15
+ ## Once UI codegen harness
16
+
17
+ Before generating Once UI code, load the harness from your installed package (not full doc pages):
18
+
19
+ 1. Read \`node_modules/@once-ui-system/core/ai/manifest.json\`
20
+ 2. Load bootstrap: \`ai/rules.compact.md\` + \`ai/catalog.json\`
21
+ 3. Match intent via \`ai/tasks/index.json\` → fetch task bundle + component slices
22
+ 4. Validate: \`npx once-ui-validate-ai-code path/to/file.tsx\`
23
+
24
+ npm exports: \`@once-ui-system/core/ai/manifest.json\`
25
+
26
+ Remote fallback: https://docs.once-ui.com/ai/manifest.json
27
+ ${MARKER_END}
28
+ `;
29
+
30
+ function parseArgs(argv) {
31
+ return {
32
+ force: argv.includes("--force"),
33
+ dryRun: argv.includes("--dry-run"),
34
+ };
35
+ }
36
+
37
+ function findProjectRoot(startDir = process.cwd()) {
38
+ let dir = path.resolve(startDir);
39
+
40
+ while (true) {
41
+ const pkgPath = path.join(dir, "package.json");
42
+ if (fs.existsSync(pkgPath)) {
43
+ try {
44
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
45
+ if (pkg.name !== "@once-ui-system/core") {
46
+ return dir;
47
+ }
48
+ } catch {
49
+ // keep walking
50
+ }
51
+ }
52
+
53
+ const parent = path.dirname(dir);
54
+ if (parent === dir) {
55
+ break;
56
+ }
57
+ dir = parent;
58
+ }
59
+
60
+ return path.resolve(startDir);
61
+ }
62
+
63
+ function upsertMarkedSection(existing, section, force) {
64
+ if (existing.includes(MARKER_START) && existing.includes(MARKER_END)) {
65
+ if (!force) {
66
+ return { content: existing, changed: false, reason: "AGENTS.md already contains Once UI harness section" };
67
+ }
68
+
69
+ const start = existing.indexOf(MARKER_START);
70
+ const end = existing.indexOf(MARKER_END) + MARKER_END.length;
71
+ return {
72
+ content: `${existing.slice(0, start)}${section}${existing.slice(end)}`,
73
+ changed: true,
74
+ };
75
+ }
76
+
77
+ if (existing.trim().length === 0) {
78
+ return {
79
+ content: `# AGENTS.md\n\n${section}\n`,
80
+ changed: true,
81
+ };
82
+ }
83
+
84
+ return {
85
+ content: `${existing.trimEnd()}\n\n${section}\n`,
86
+ changed: true,
87
+ };
88
+ }
89
+
90
+ function writeFile(root, relativePath, content, { dryRun, force }) {
91
+ const target = path.join(root, relativePath);
92
+ const exists = fs.existsSync(target);
93
+
94
+ if (exists && !force) {
95
+ const current = fs.readFileSync(target, "utf8");
96
+ if (current === content) {
97
+ return { path: target, status: "unchanged" };
98
+ }
99
+ return { path: target, status: "skipped", reason: "already exists (use --force)" };
100
+ }
101
+
102
+ if (dryRun) {
103
+ return { path: target, status: "would-write" };
104
+ }
105
+
106
+ fs.mkdirSync(path.dirname(target), { recursive: true });
107
+ fs.writeFileSync(target, content, "utf8");
108
+ return { path: target, status: exists ? "updated" : "created" };
109
+ }
110
+
111
+ function main() {
112
+ const options = parseArgs(process.argv.slice(2));
113
+ const projectRoot = findProjectRoot();
114
+ const cursorRuleTemplate = fs.readFileSync(
115
+ path.join(PACKAGE_ROOT, "agent", "once-ui-codegen.mdc"),
116
+ "utf8",
117
+ );
118
+
119
+ const agentsPath = path.join(projectRoot, "AGENTS.md");
120
+ let agentsContent = "";
121
+ if (fs.existsSync(agentsPath)) {
122
+ agentsContent = fs.readFileSync(agentsPath, "utf8");
123
+ }
124
+
125
+ const agentsResult = upsertMarkedSection(agentsContent, PROJECT_AGENTS_SECTION, options.force);
126
+ const results = [];
127
+
128
+ if (agentsResult.changed) {
129
+ results.push(
130
+ writeFile(projectRoot, "AGENTS.md", agentsResult.content, options),
131
+ );
132
+ } else {
133
+ results.push({
134
+ path: agentsPath,
135
+ status: "unchanged",
136
+ reason: agentsResult.reason,
137
+ });
138
+ }
139
+
140
+ results.push(
141
+ writeFile(projectRoot, ".cursor/rules/once-ui-codegen.mdc", cursorRuleTemplate, options),
142
+ );
143
+
144
+ console.log(`Once UI agent harness setup (${options.dryRun ? "dry run" : "applied"})`);
145
+ console.log(`Project root: ${projectRoot}`);
146
+ for (const result of results) {
147
+ const suffix = result.reason ? ` (${result.reason})` : "";
148
+ console.log(`- ${result.status}: ${path.relative(projectRoot, result.path)}${suffix}`);
149
+ }
150
+
151
+ if (!options.dryRun) {
152
+ console.log("\nNext: open a .tsx file and ask your agent to build Once UI — it should load the harness from node_modules/@once-ui-system/core/ai/");
153
+ }
154
+ }
155
+
156
+ main();
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Mechanical Once UI codegen validator.
4
+ * Usage: node scripts/validate-ai-code.js <file.tsx> [--fix]
5
+ * node scripts/validate-ai-code.js --stdin < file.tsx
6
+ */
7
+
8
+ const fs = require("fs");
9
+ const path = require("path");
10
+
11
+ const ROOT = path.join(__dirname, "..");
12
+ const SPEC_PATH = path.join(ROOT, "ai", "spec.json");
13
+
14
+ function loadSpec() {
15
+ if (!fs.existsSync(SPEC_PATH)) return { components: {}, tokens: {} };
16
+ return JSON.parse(fs.readFileSync(SPEC_PATH, "utf8"));
17
+ }
18
+
19
+ function parseIconNames(spec) {
20
+ const raw = spec.tokens?.IconName || "";
21
+ const matches = raw.match(/"([^"]+)"/g) || [];
22
+ return new Set(matches.map((m) => m.slice(1, -1)));
23
+ }
24
+
25
+ function readInput(argv) {
26
+ const fileArg = argv.find((a) => !a.startsWith("-"));
27
+ if (argv.includes("--stdin")) {
28
+ return { source: fs.readFileSync(0, "utf8"), file: "<stdin>" };
29
+ }
30
+ if (!fileArg) {
31
+ console.error("Usage: validate-ai-code.js <file.tsx> [--fix] | --stdin");
32
+ process.exit(2);
33
+ }
34
+ return { source: fs.readFileSync(fileArg, "utf8"), file: fileArg };
35
+ }
36
+
37
+ /**
38
+ * A literal colour in a styling position.
39
+ *
40
+ * The rule used to be a bare `#[0-9a-fA-F]{3,8}` over the whole file, which
41
+ * flagged two things that are not colours at all: any string that happens to
42
+ * look like hex (an order id `"#1024"` is a valid #RGBA literal), and the
43
+ * `fill` / `stroke` of an inline `<svg>`, where a raw value is the only thing
44
+ * that works — which is why 2.0 types those props `ColorValue` rather than
45
+ * `Colors`. So it looks at where the value sits, not only at its shape.
46
+ */
47
+ function hasLiteralColor(source) {
48
+ const LITERAL = /#[0-9a-fA-F]{3,8}\b|rgba?\s*\(/;
49
+ const SVG_PAINT =
50
+ /^(?:fill|stroke|stopColor|stop-color|floodColor|flood-color|lightingColor|lighting-color)$/;
51
+
52
+ for (const block of source.match(/style=\{\{[\s\S]*?\}\}/g) || []) {
53
+ if (LITERAL.test(block)) return true;
54
+ }
55
+
56
+ for (const [, name, value] of source.matchAll(/([A-Za-z-]+)=\{?["']([^"']*)["']/g)) {
57
+ if (SVG_PAINT.test(name)) continue;
58
+ if (!/colou?r|background|border|shadow|gradient/i.test(name)) continue;
59
+ if (LITERAL.test(value)) return true;
60
+ }
61
+ return false;
62
+ }
63
+
64
+ /**
65
+ * Is `index` inside the braces of a `<prop>={ ... }` value?
66
+ *
67
+ * Counts braces forward from each occurrence of the prop, which is enough for
68
+ * JSX: a `{` inside a string would have to be unbalanced to fool it, and the
69
+ * answer is only used to suppress a warning.
70
+ */
71
+ function insidePropValue(source, index, prop) {
72
+ for (const m of source.matchAll(new RegExp(`\\b${prop}=\\{`, "g"))) {
73
+ if (m.index > index) return false;
74
+ let depth = 1;
75
+ let i = m.index + m[0].length;
76
+ for (; i < source.length && depth > 0; i++) {
77
+ if (source[i] === "{") depth++;
78
+ else if (source[i] === "}") depth--;
79
+ }
80
+ if (index > m.index && index < i) return true;
81
+ }
82
+ return false;
83
+ }
84
+
85
+ function validate(source, spec, iconNames) {
86
+ const issues = [];
87
+
88
+ const add = (rule, message, fix) => issues.push({ rule, message, fix });
89
+
90
+ if (/fillWidth[\s\S]{0,80}fillHeight|<Flex[^>]*direction="column"|<Flex[^>]*direction="row"/.test(source)) {
91
+ if (/fillWidth[\s\S]{0,120}fillHeight/.test(source)) {
92
+ add("layout.shorthands", "Use fill instead of fillWidth + fillHeight", "fill");
93
+ }
94
+ if (/<Flex[^>]*direction="column"/.test(source)) {
95
+ add("layout.shorthands", "Use Column instead of Flex direction=\"column\"", "Column");
96
+ }
97
+ if (/<Flex[^>]*direction="row"/.test(source)) {
98
+ add("layout.shorthands", "Use Row instead of Flex direction=\"row\"", "Row");
99
+ }
100
+ }
101
+
102
+ if (/horizontal="center"[\s\S]{0,80}vertical="center"/.test(source)) {
103
+ add("layout.shorthands", "Use center instead of horizontal=\"center\" vertical=\"center\"", "center");
104
+ }
105
+
106
+ if (/position="relative"/.test(source)) {
107
+ add("layout.defaults", "position=\"relative\" is the default — omit it");
108
+ }
109
+
110
+ if (/<Button[^>]*variant="primary"/.test(source)) {
111
+ add("layout.defaults", "variant=\"primary\" is the Button default — omit it");
112
+ }
113
+
114
+ // Scoped to the tag: `lines` is a different prop on Background and CodeBlock.
115
+ if (/<Textarea[^>]*\blines=\{?["']auto["']/.test(source)) {
116
+ add("layout.defaults", "lines=\"auto\" is the Textarea default — omit it");
117
+ }
118
+
119
+ if (hasLiteralColor(source)) {
120
+ add("color.tokens", "Use semantic color tokens, not hex/rgb");
121
+ }
122
+
123
+ if (/<img[\s>/]|<a[\s>/]|<button[\s>/]/.test(source)) {
124
+ add("components.primitives", "Use Once UI components (Media, SmartLink, Button) instead of raw HTML");
125
+ }
126
+
127
+ for (const match of source.matchAll(/<Card\b[^>]*>/g)) {
128
+ if (/\b(href|onClick)=/.test(match[0])) continue;
129
+ // A card handed to a `trigger` prop is operated by whatever owns it
130
+ // (DropdownWrapper, Dialog), so it carries no handler of its own and is
131
+ // not the static-panel misuse this rule is looking for.
132
+ if (insidePropValue(source, match.index, "trigger")) continue;
133
+ add("Card.interactive", "Card without href/onClick — use Column + surface recipe for static panels");
134
+ break;
135
+ }
136
+
137
+ const iconPropRe = /(?:prefixIcon|suffixIcon|name)=["']([^"']+)["']/g;
138
+ let iconMatch;
139
+ while ((iconMatch = iconPropRe.exec(source)) !== null) {
140
+ const name = iconMatch[1];
141
+ if (iconNames.size && !iconNames.has(name)) {
142
+ add("Icon.names", `Unknown icon name "${name}" — use IconName from spec.json`);
143
+ }
144
+ }
145
+
146
+ if (
147
+ /\b(?:delay|speed)=\{[^}]*\*\s*0?\.\d+/.test(source) ||
148
+ /\b(?:delay|speed)=\{\s*0?\.\d+\s*\}/.test(source)
149
+ ) {
150
+ add(
151
+ "RevealFx.delay",
152
+ "RevealFx delay and ShineFx speed are milliseconds — use index * 100, not index * 0.1",
153
+ );
154
+ }
155
+
156
+ if (/<Fade[^>]*>[\s\S]*<(Column|Row)[^>]*overflowY/.test(source)) {
157
+ add("Fade.edge", "Fade wrapping scroll content — use as absolute edge strip instead");
158
+ }
159
+
160
+ if (/style=\{\{[^}]*(gap|padding|margin|color|background):/.test(source)) {
161
+ add("spacing.tokens", "Use token props (gap, padding, background) instead of style={{}}");
162
+ }
163
+
164
+ return issues;
165
+ }
166
+
167
+ function applyFixes(source, issues) {
168
+ let out = source;
169
+ for (const issue of issues) {
170
+ if (issue.fix === "fill") {
171
+ out = out.replace(/\bfillWidth\b\s*\n?\s*\bfillHeight\b/g, "fill");
172
+ }
173
+ if (issue.fix === "center") {
174
+ out = out.replace(/\bhorizontal="center"\s*\n?\s*vertical="center"/g, "center");
175
+ }
176
+ }
177
+ return out;
178
+ }
179
+
180
+ function main() {
181
+ const spec = loadSpec();
182
+ const iconNames = parseIconNames(spec);
183
+ const fix = process.argv.includes("--fix");
184
+ const { source, file } = readInput(process.argv.slice(2));
185
+
186
+ const issues = validate(source, spec, iconNames);
187
+
188
+ if (issues.length === 0) {
189
+ console.log(`✓ ${file}: no mechanical issues`);
190
+ process.exit(0);
191
+ }
192
+
193
+ console.log(`✗ ${file}: ${issues.length} issue(s)`);
194
+ for (const issue of issues) {
195
+ console.log(` [${issue.rule}] ${issue.message}`);
196
+ }
197
+
198
+ if (fix) {
199
+ const fixed = applyFixes(source, issues);
200
+ if (fixed !== source && !process.argv.includes("--stdin")) {
201
+ const fileArg = process.argv.find((a) => a.endsWith(".tsx") || a.endsWith(".jsx"));
202
+ fs.writeFileSync(fileArg, fixed);
203
+ console.log(`Applied auto-fixes to ${fileArg}`);
204
+ }
205
+ }
206
+
207
+ process.exit(1);
208
+ }
209
+
210
+ // Importable for tests; the CLI runs only when this file is invoked directly.
211
+ if (require.main === module) main();
212
+
213
+ module.exports = { validate, loadSpec, parseIconNames, hasLiteralColor, insidePropValue };
@@ -1,4 +1,10 @@
1
- import { NextResponse } from 'next/server';
1
+ /**
2
+ * Open Graph fetch/proxy handlers.
3
+ *
4
+ * Uses the standard `Response` rather than `NextResponse`: `NextResponse`
5
+ * extends `Response`, so Next route handlers accept these return values
6
+ * unchanged, and the module no longer pulls `next/server` into core.
7
+ */
2
8
  import { type OGUrlValidationOptions } from './og-url-validation';
3
9
  export interface OGData {
4
10
  url: string;
@@ -12,12 +18,12 @@ export interface OGFetchOptions extends OGUrlValidationOptions {
12
18
  userAgent?: string;
13
19
  decodeEntities?: boolean;
14
20
  }
15
- export declare function handleOGFetch(request: Request, options?: OGFetchOptions): Promise<NextResponse>;
21
+ export declare function handleOGFetch(request: Request, options?: OGFetchOptions): Promise<Response>;
16
22
  export interface OGProxyOptions extends OGUrlValidationOptions {
17
23
  userAgent?: string;
18
24
  cacheMaxAge?: number;
19
25
  }
20
- export declare function handleOGProxy(request: Request, options?: OGProxyOptions): Promise<NextResponse>;
26
+ export declare function handleOGProxy(request: Request, options?: OGProxyOptions): Promise<Response>;
21
27
  export { OGUrlValidationError, validateOgUrl } from './og-url-validation';
22
28
  export type { OGUrlValidationOptions } from './og-url-validation';
23
29
  //# sourceMappingURL=og-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"og-utils.d.ts","sourceRoot":"","sources":["../../src/server/og-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAGL,KAAK,sBAAsB,EAE5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA2DD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAkFzG;AAED,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CA0DzG;AAED,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"og-utils.d.ts","sourceRoot":"","sources":["../../src/server/og-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAGL,KAAK,sBAAsB,EAE5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA2DD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkFrG;AAED,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA0DrG;AAED,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,10 @@
1
- import { NextResponse } from 'next/server';
1
+ /**
2
+ * Open Graph fetch/proxy handlers.
3
+ *
4
+ * Uses the standard `Response` rather than `NextResponse`: `NextResponse`
5
+ * extends `Response`, so Next route handlers accept these return values
6
+ * unchanged, and the module no longer pulls `next/server` into core.
7
+ */
2
8
  import { fetchValidatedUrl, OGUrlValidationError, validateOgUrl, } from './og-url-validation';
3
9
  function decodeHTMLEntities(text) {
4
10
  return text.replace(/&(#?[a-zA-Z0-9]+);/g, (match, entity) => {
@@ -41,14 +47,14 @@ async function fetchWithTimeout(url, timeout = 5000, userAgent = 'Mozilla/5.0 (c
41
47
  }
42
48
  }
43
49
  function validationErrorResponse() {
44
- return NextResponse.json({ error: 'URL is not allowed' }, { status: 400 });
50
+ return Response.json({ error: 'URL is not allowed' }, { status: 400 });
45
51
  }
46
52
  export async function handleOGFetch(request, options = {}) {
47
53
  const { timeout = 5000, userAgent = 'Mozilla/5.0 (compatible; OG-Fetcher/1.0)', decodeEntities = true, allowedDomains, } = options;
48
54
  const { searchParams } = new URL(request.url);
49
55
  const url = searchParams.get('url');
50
56
  if (!url) {
51
- return NextResponse.json({ error: 'URL parameter is required' }, { status: 400 });
57
+ return Response.json({ error: 'URL parameter is required' }, { status: 400 });
52
58
  }
53
59
  const validationOptions = { allowedDomains };
54
60
  try {
@@ -99,11 +105,11 @@ export async function handleOGFetch(request, options = {}) {
99
105
  ogData.title = decodeHTMLEntities(ogData.title);
100
106
  ogData.description = decodeHTMLEntities(ogData.description);
101
107
  }
102
- return NextResponse.json(ogData);
108
+ return Response.json(ogData);
103
109
  }
104
110
  catch (error) {
105
111
  console.error('Error fetching OG data:', error);
106
- return NextResponse.json({ error: 'Failed to fetch Open Graph data' }, { status: 500 });
112
+ return Response.json({ error: 'Failed to fetch Open Graph data' }, { status: 500 });
107
113
  }
108
114
  }
109
115
  export async function handleOGProxy(request, options = {}) {
@@ -111,7 +117,7 @@ export async function handleOGProxy(request, options = {}) {
111
117
  const { searchParams } = new URL(request.url);
112
118
  const url = searchParams.get('url');
113
119
  if (!url) {
114
- return NextResponse.json({ error: 'URL parameter is required' }, { status: 400 });
120
+ return Response.json({ error: 'URL parameter is required' }, { status: 400 });
115
121
  }
116
122
  const validationOptions = { allowedDomains };
117
123
  try {
@@ -130,11 +136,11 @@ export async function handleOGProxy(request, options = {}) {
130
136
  },
131
137
  }, validationOptions);
132
138
  if (!response.ok) {
133
- return NextResponse.json({ error: 'Failed to fetch image' }, { status: response.status >= 400 && response.status < 600 ? response.status : 502 });
139
+ return Response.json({ error: 'Failed to fetch image' }, { status: response.status >= 400 && response.status < 600 ? response.status : 502 });
134
140
  }
135
141
  const contentType = response.headers.get('content-type') || 'image/jpeg';
136
142
  const buffer = await response.arrayBuffer();
137
- return new NextResponse(buffer, {
143
+ return new Response(buffer, {
138
144
  headers: {
139
145
  'Content-Type': contentType,
140
146
  'Cache-Control': `public, max-age=${cacheMaxAge}`,
@@ -143,7 +149,7 @@ export async function handleOGProxy(request, options = {}) {
143
149
  }
144
150
  catch (error) {
145
151
  console.error('Error proxying image:', error);
146
- return NextResponse.json({ error: 'Failed to proxy image' }, { status: 500 });
152
+ return Response.json({ error: 'Failed to proxy image' }, { status: 500 });
147
153
  }
148
154
  }
149
155
  export { OGUrlValidationError, validateOgUrl } from './og-url-validation';