@once-ui-system/core 1.8.5 → 2.0.0-alpha.1

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 (571) hide show
  1. package/AGENTS.md +1 -1
  2. package/ai/catalog.json +166 -78
  3. package/ai/components/Accordion.json +1 -1
  4. package/ai/components/BarChart.json +34 -3
  5. package/ai/components/Book.json +128 -0
  6. package/ai/components/Button.json +1 -1
  7. package/ai/components/Card.json +1 -0
  8. package/ai/components/Carousel.json +1 -1
  9. package/ai/components/ChartHeader.json +2 -1
  10. package/ai/components/ChartStatus.json +2 -1
  11. package/ai/components/Checkbox.json +2 -2
  12. package/ai/components/CodeBlock.json +23 -2
  13. package/ai/components/ColorInput.json +1 -1
  14. package/ai/components/DataTooltip.json +3 -2
  15. package/ai/components/DatePicker.json +2 -2
  16. package/ai/components/Dialog.json +1 -1
  17. package/ai/components/DropdownWrapper.json +6 -4
  18. package/ai/components/Effect.json +133 -0
  19. package/ai/components/Fade.json +1 -1
  20. package/ai/components/Feedback.json +1 -1
  21. package/ai/components/IconButton.json +1 -1
  22. package/ai/components/InfoTip.json +125 -0
  23. package/ai/components/Input.json +5 -4
  24. package/ai/components/Legend.json +2 -1
  25. package/ai/components/LineBarChart.json +34 -3
  26. package/ai/components/LineChart.json +39 -3
  27. package/ai/components/LinearGauge.json +3 -2
  28. package/ai/components/LinearGradient.json +2 -1
  29. package/ai/components/Logo.json +2 -2
  30. package/ai/components/Media.json +1 -1
  31. package/ai/components/MediaUpload.json +21 -2
  32. package/ai/components/Modal.json +1 -1
  33. package/ai/components/NavGroup.json +130 -0
  34. package/ai/components/NavIcon.json +1 -1
  35. package/ai/components/NavItem.json +14 -0
  36. package/ai/components/Option.json +2 -2
  37. package/ai/components/Particle.json +1 -1
  38. package/ai/components/PieChart.json +32 -3
  39. package/ai/components/ProgressBar.json +1 -1
  40. package/ai/components/Pulse.json +1 -1
  41. package/ai/components/RadialGauge.json +4 -3
  42. package/ai/components/RadialGradient.json +2 -1
  43. package/ai/components/RadioButton.json +1 -1
  44. package/ai/components/RevealFx.json +1 -1
  45. package/ai/components/Scrubber.json +136 -0
  46. package/ai/components/SegmentedControl.json +3 -3
  47. package/ai/components/Setting.json +128 -0
  48. package/ai/components/SettingAxes.json +127 -0
  49. package/ai/components/SettingGroup.json +129 -0
  50. package/ai/components/ShineFx.json +1 -1
  51. package/ai/components/Skeleton.json +2 -3
  52. package/ai/components/SplitView.json +2 -0
  53. package/ai/components/StylePanel.json +4 -2
  54. package/ai/components/Swatch.json +11 -0
  55. package/ai/components/Swiper.json +1 -1
  56. package/ai/components/Switch.json +1 -1
  57. package/ai/components/Tag.json +1 -1
  58. package/ai/components/Textarea.json +6 -5
  59. package/ai/components/ThemeSwitcher.json +3 -0
  60. package/ai/components/Toast.json +1 -1
  61. package/ai/components/ToggleButton.json +2 -1
  62. package/ai/eval-tasks.md +10 -1
  63. package/ai/examples/app-shell.tsx +111 -0
  64. package/ai/examples/auth.tsx +2 -3
  65. package/ai/examples/blocks/Dashboard1.tsx +25 -36
  66. package/ai/examples/blocks/Feed3.tsx +8 -8
  67. package/ai/examples/blocks/Footer1.tsx +5 -3
  68. package/ai/examples/blocks/Footer2.tsx +3 -3
  69. package/ai/examples/blocks/Footer3.tsx +1 -1
  70. package/ai/examples/blocks/Footer4.tsx +6 -5
  71. package/ai/examples/blocks/Header1.tsx +7 -6
  72. package/ai/examples/blocks/Header2.tsx +1 -1
  73. package/ai/examples/blocks/Header3.tsx +7 -7
  74. package/ai/examples/blocks/Header4.tsx +6 -7
  75. package/ai/examples/blocks/Productivity1.tsx +1 -1
  76. package/ai/examples/blocks/Roadmap1.tsx +3 -3
  77. package/ai/examples/blocks/Sidebar1.tsx +1 -1
  78. package/ai/examples/blocks/Sidebar2.tsx +1 -1
  79. package/ai/examples/blocks/Sidebar4.tsx +1 -1
  80. package/ai/examples/blocks/Streaming1.tsx +4 -4
  81. package/ai/examples/blocks/Table1.tsx +9 -9
  82. package/ai/examples/blocks/Waitlist1.tsx +5 -5
  83. package/ai/examples/blocks/content/resources.ts +3 -1
  84. package/ai/examples/dashboard.tsx +13 -14
  85. package/ai/examples/marketing-hero.tsx +4 -4
  86. package/ai/examples/pricing.tsx +7 -8
  87. package/ai/examples/settings.tsx +7 -7
  88. package/ai/gotchas.json +99 -25
  89. package/ai/layouts.md +154 -0
  90. package/ai/manifest.json +3 -2
  91. package/ai/recipes.md +50 -5
  92. package/ai/rules.compact.md +26 -5
  93. package/ai/rules.md +84 -14
  94. package/ai/spec.json +634 -176
  95. package/ai/tasks/settings.json +1 -1
  96. package/dist/AGENTS.md +1 -1
  97. package/dist/ai/catalog.json +166 -78
  98. package/dist/ai/components/Accordion.json +1 -1
  99. package/dist/ai/components/BarChart.json +34 -3
  100. package/dist/ai/components/Book.json +128 -0
  101. package/dist/ai/components/Button.json +1 -1
  102. package/dist/ai/components/Card.json +1 -0
  103. package/dist/ai/components/Carousel.json +1 -1
  104. package/dist/ai/components/ChartHeader.json +2 -1
  105. package/dist/ai/components/ChartStatus.json +2 -1
  106. package/dist/ai/components/Checkbox.json +2 -2
  107. package/dist/ai/components/CodeBlock.json +23 -2
  108. package/dist/ai/components/ColorInput.json +1 -1
  109. package/dist/ai/components/DataTooltip.json +3 -2
  110. package/dist/ai/components/DatePicker.json +2 -2
  111. package/dist/ai/components/Dialog.json +1 -1
  112. package/dist/ai/components/DropdownWrapper.json +6 -4
  113. package/dist/ai/components/Effect.json +133 -0
  114. package/dist/ai/components/Fade.json +1 -1
  115. package/dist/ai/components/Feedback.json +1 -1
  116. package/dist/ai/components/IconButton.json +1 -1
  117. package/dist/ai/components/InfoTip.json +125 -0
  118. package/dist/ai/components/Input.json +5 -4
  119. package/dist/ai/components/Legend.json +2 -1
  120. package/dist/ai/components/LineBarChart.json +34 -3
  121. package/dist/ai/components/LineChart.json +39 -3
  122. package/dist/ai/components/LinearGauge.json +3 -2
  123. package/dist/ai/components/LinearGradient.json +2 -1
  124. package/dist/ai/components/Logo.json +2 -2
  125. package/dist/ai/components/Media.json +1 -1
  126. package/dist/ai/components/MediaUpload.json +21 -2
  127. package/dist/ai/components/Modal.json +1 -1
  128. package/dist/ai/components/NavGroup.json +130 -0
  129. package/dist/ai/components/NavIcon.json +1 -1
  130. package/dist/ai/components/NavItem.json +14 -0
  131. package/dist/ai/components/Option.json +2 -2
  132. package/dist/ai/components/Particle.json +1 -1
  133. package/dist/ai/components/PieChart.json +32 -3
  134. package/dist/ai/components/ProgressBar.json +1 -1
  135. package/dist/ai/components/Pulse.json +1 -1
  136. package/dist/ai/components/RadialGauge.json +4 -3
  137. package/dist/ai/components/RadialGradient.json +2 -1
  138. package/dist/ai/components/RadioButton.json +1 -1
  139. package/dist/ai/components/RevealFx.json +1 -1
  140. package/dist/ai/components/Scrubber.json +136 -0
  141. package/dist/ai/components/SegmentedControl.json +3 -3
  142. package/dist/ai/components/Setting.json +128 -0
  143. package/dist/ai/components/SettingAxes.json +127 -0
  144. package/dist/ai/components/SettingGroup.json +129 -0
  145. package/dist/ai/components/ShineFx.json +1 -1
  146. package/dist/ai/components/Skeleton.json +2 -3
  147. package/dist/ai/components/SplitView.json +2 -0
  148. package/dist/ai/components/StylePanel.json +4 -2
  149. package/dist/ai/components/Swatch.json +11 -0
  150. package/dist/ai/components/Swiper.json +1 -1
  151. package/dist/ai/components/Switch.json +1 -1
  152. package/dist/ai/components/Tag.json +1 -1
  153. package/dist/ai/components/Textarea.json +6 -5
  154. package/dist/ai/components/ThemeSwitcher.json +3 -0
  155. package/dist/ai/components/Toast.json +1 -1
  156. package/dist/ai/components/ToggleButton.json +2 -1
  157. package/dist/ai/eval-tasks.md +10 -1
  158. package/dist/ai/gotchas.json +99 -25
  159. package/dist/ai/layouts.md +154 -0
  160. package/dist/ai/manifest.json +3 -2
  161. package/dist/ai/recipes.md +50 -5
  162. package/dist/ai/rules.compact.md +26 -5
  163. package/dist/ai/rules.md +84 -14
  164. package/dist/ai/spec.json +634 -176
  165. package/dist/ai/tasks/settings.json +1 -1
  166. package/dist/components/Accordion.d.ts +2 -1
  167. package/dist/components/Accordion.d.ts.map +1 -1
  168. package/dist/components/Accordion.js.map +1 -1
  169. package/dist/components/Avatar.d.ts.map +1 -1
  170. package/dist/components/Avatar.js +2 -2
  171. package/dist/components/Avatar.js.map +1 -1
  172. package/dist/components/Background.d.ts +6 -6
  173. package/dist/components/Background.d.ts.map +1 -1
  174. package/dist/components/Book.d.ts +28 -0
  175. package/dist/components/Book.d.ts.map +1 -0
  176. package/dist/components/Book.js +24 -0
  177. package/dist/components/Book.js.map +1 -0
  178. package/dist/components/Book.module.scss +45 -0
  179. package/dist/components/Button.d.ts +1 -1
  180. package/dist/components/Button.d.ts.map +1 -1
  181. package/dist/components/Button.js +4 -4
  182. package/dist/components/Button.js.map +1 -1
  183. package/dist/components/Card.d.ts +8 -0
  184. package/dist/components/Card.d.ts.map +1 -1
  185. package/dist/components/Card.js +10 -2
  186. package/dist/components/Card.js.map +1 -1
  187. package/dist/components/Card.module.scss +11 -1
  188. package/dist/components/Carousel.d.ts +7 -1
  189. package/dist/components/Carousel.d.ts.map +1 -1
  190. package/dist/components/Carousel.js +7 -7
  191. package/dist/components/Carousel.js.map +1 -1
  192. package/dist/components/Carousel.module.scss +1 -8
  193. package/dist/components/Checkbox.d.ts +3 -3
  194. package/dist/components/Checkbox.d.ts.map +1 -1
  195. package/dist/components/Checkbox.js +5 -5
  196. package/dist/components/Checkbox.js.map +1 -1
  197. package/dist/components/ClientFlex.d.ts.map +1 -1
  198. package/dist/components/ClientFlex.js +5 -10
  199. package/dist/components/ClientFlex.js.map +1 -1
  200. package/dist/components/ClientGrid.d.ts.map +1 -1
  201. package/dist/components/ClientGrid.js +2 -7
  202. package/dist/components/ClientGrid.js.map +1 -1
  203. package/dist/components/ColorInput.d.ts +1 -1
  204. package/dist/components/ColorInput.d.ts.map +1 -1
  205. package/dist/components/ColorInput.js +7 -13
  206. package/dist/components/ColorInput.js.map +1 -1
  207. package/dist/components/CompareImage.d.ts.map +1 -1
  208. package/dist/components/CompareImage.js +2 -2
  209. package/dist/components/CompareImage.js.map +1 -1
  210. package/dist/components/DateInput.d.ts.map +1 -1
  211. package/dist/components/DateInput.js +10 -1
  212. package/dist/components/DateInput.js.map +1 -1
  213. package/dist/components/DatePicker.d.ts +2 -2
  214. package/dist/components/DatePicker.d.ts.map +1 -1
  215. package/dist/components/DatePicker.js +21 -14
  216. package/dist/components/DatePicker.js.map +1 -1
  217. package/dist/components/DateRangeInput.js +3 -3
  218. package/dist/components/DateRangeInput.js.map +1 -1
  219. package/dist/components/Dialog.d.ts +1 -1
  220. package/dist/components/Dialog.d.ts.map +1 -1
  221. package/dist/components/Dialog.js +14 -14
  222. package/dist/components/Dialog.js.map +1 -1
  223. package/dist/components/DropdownWrapper.d.ts +8 -3
  224. package/dist/components/DropdownWrapper.d.ts.map +1 -1
  225. package/dist/components/DropdownWrapper.js +17 -6
  226. package/dist/components/DropdownWrapper.js.map +1 -1
  227. package/dist/components/Effect.d.ts +41 -0
  228. package/dist/components/Effect.d.ts.map +1 -0
  229. package/dist/components/Effect.js +30 -0
  230. package/dist/components/Effect.js.map +1 -0
  231. package/dist/components/ElementType.d.ts +2 -1
  232. package/dist/components/ElementType.d.ts.map +1 -1
  233. package/dist/components/ElementType.js +4 -2
  234. package/dist/components/ElementType.js.map +1 -1
  235. package/dist/components/EmojiPicker.d.ts.map +1 -1
  236. package/dist/components/EmojiPicker.js +1 -1
  237. package/dist/components/EmojiPicker.js.map +1 -1
  238. package/dist/components/Feedback.d.ts +1 -1
  239. package/dist/components/Feedback.d.ts.map +1 -1
  240. package/dist/components/Feedback.js +2 -2
  241. package/dist/components/Feedback.js.map +1 -1
  242. package/dist/components/Flex.d.ts.map +1 -1
  243. package/dist/components/Flex.js +46 -5
  244. package/dist/components/Flex.js.map +1 -1
  245. package/dist/components/Icon.d.ts.map +1 -1
  246. package/dist/components/Icon.js.map +1 -1
  247. package/dist/components/IconButton.d.ts +1 -1
  248. package/dist/components/IconButton.d.ts.map +1 -1
  249. package/dist/components/IconButton.js +4 -4
  250. package/dist/components/IconButton.js.map +1 -1
  251. package/dist/components/InfoTip.d.ts +17 -0
  252. package/dist/components/InfoTip.d.ts.map +1 -0
  253. package/dist/components/InfoTip.js +12 -0
  254. package/dist/components/InfoTip.js.map +1 -0
  255. package/dist/components/Input.d.ts +11 -5
  256. package/dist/components/Input.d.ts.map +1 -1
  257. package/dist/components/Input.js +32 -16
  258. package/dist/components/Input.js.map +1 -1
  259. package/dist/components/Input.module.scss +313 -1
  260. package/dist/components/InteractiveDetails.d.ts.map +1 -1
  261. package/dist/components/InteractiveDetails.js +1 -1
  262. package/dist/components/InteractiveDetails.js.map +1 -1
  263. package/dist/components/Kbd.d.ts.map +1 -1
  264. package/dist/components/Kbd.js +4 -1
  265. package/dist/components/Kbd.js.map +1 -1
  266. package/dist/components/Logo.d.ts +16 -4
  267. package/dist/components/Logo.d.ts.map +1 -1
  268. package/dist/components/Logo.js +32 -14
  269. package/dist/components/Logo.js.map +1 -1
  270. package/dist/components/Media.d.ts +9 -2
  271. package/dist/components/Media.d.ts.map +1 -1
  272. package/dist/components/Media.js +25 -16
  273. package/dist/components/Media.js.map +1 -1
  274. package/dist/components/MediaAudioPlayer.d.ts +29 -0
  275. package/dist/components/MediaAudioPlayer.d.ts.map +1 -0
  276. package/dist/components/MediaAudioPlayer.js +115 -0
  277. package/dist/components/MediaAudioPlayer.js.map +1 -0
  278. package/dist/components/MediaAudioPlayer.module.scss +38 -0
  279. package/dist/components/Modal.d.ts +1 -1
  280. package/dist/components/Modal.d.ts.map +1 -1
  281. package/dist/components/Modal.js +10 -10
  282. package/dist/components/Modal.js.map +1 -1
  283. package/dist/components/NavGroup.d.ts +33 -0
  284. package/dist/components/NavGroup.d.ts.map +1 -0
  285. package/dist/components/NavGroup.js +27 -0
  286. package/dist/components/NavGroup.js.map +1 -0
  287. package/dist/components/NavIcon.d.ts +1 -1
  288. package/dist/components/NavIcon.d.ts.map +1 -1
  289. package/dist/components/NavIcon.js +2 -2
  290. package/dist/components/NavIcon.js.map +1 -1
  291. package/dist/components/NavItem.d.ts +24 -0
  292. package/dist/components/NavItem.d.ts.map +1 -0
  293. package/dist/components/NavItem.js +18 -0
  294. package/dist/components/NavItem.js.map +1 -0
  295. package/dist/components/NumberInput.js +1 -1
  296. package/dist/components/NumberInput.js.map +1 -1
  297. package/dist/components/OgCard.d.ts.map +1 -1
  298. package/dist/components/OgCard.js +7 -4
  299. package/dist/components/OgCard.js.map +1 -1
  300. package/dist/components/Option.d.ts +3 -3
  301. package/dist/components/Option.d.ts.map +1 -1
  302. package/dist/components/Option.js +2 -2
  303. package/dist/components/Option.js.map +1 -1
  304. package/dist/components/Particle.d.ts +2 -2
  305. package/dist/components/Particle.d.ts.map +1 -1
  306. package/dist/components/PasswordInput.d.ts.map +1 -1
  307. package/dist/components/PasswordInput.js +2 -2
  308. package/dist/components/PasswordInput.js.map +1 -1
  309. package/dist/components/ProgressBar.d.ts +1 -1
  310. package/dist/components/ProgressBar.d.ts.map +1 -1
  311. package/dist/components/ProgressBar.js +2 -2
  312. package/dist/components/ProgressBar.js.map +1 -1
  313. package/dist/components/Pulse.d.ts +1 -1
  314. package/dist/components/Pulse.d.ts.map +1 -1
  315. package/dist/components/Pulse.js +2 -2
  316. package/dist/components/Pulse.js.map +1 -1
  317. package/dist/components/RadioButton.d.ts +2 -2
  318. package/dist/components/RadioButton.d.ts.map +1 -1
  319. package/dist/components/RadioButton.js +1 -1
  320. package/dist/components/RadioButton.js.map +1 -1
  321. package/dist/components/RevealFx.d.ts +2 -1
  322. package/dist/components/RevealFx.d.ts.map +1 -1
  323. package/dist/components/RevealFx.js +8 -8
  324. package/dist/components/RevealFx.js.map +1 -1
  325. package/dist/components/ScrollContainer.d.ts.map +1 -1
  326. package/dist/components/ScrollContainer.js +1 -1
  327. package/dist/components/ScrollContainer.js.map +1 -1
  328. package/dist/components/Scrubber.d.ts +70 -0
  329. package/dist/components/Scrubber.d.ts.map +1 -0
  330. package/dist/components/Scrubber.js +161 -0
  331. package/dist/components/Scrubber.js.map +1 -0
  332. package/dist/components/SegmentedControl.d.ts +4 -4
  333. package/dist/components/SegmentedControl.d.ts.map +1 -1
  334. package/dist/components/SegmentedControl.js +11 -11
  335. package/dist/components/SegmentedControl.js.map +1 -1
  336. package/dist/components/Select.d.ts.map +1 -1
  337. package/dist/components/Select.js +48 -15
  338. package/dist/components/Select.js.map +1 -1
  339. package/dist/components/ServerFlex.d.ts +0 -1
  340. package/dist/components/ServerFlex.d.ts.map +1 -1
  341. package/dist/components/ServerFlex.js +99 -52
  342. package/dist/components/ServerFlex.js.map +1 -1
  343. package/dist/components/ServerGrid.d.ts +0 -1
  344. package/dist/components/ServerGrid.d.ts.map +1 -1
  345. package/dist/components/ServerGrid.js +11 -9
  346. package/dist/components/ServerGrid.js.map +1 -1
  347. package/dist/components/Setting.d.ts +50 -0
  348. package/dist/components/Setting.d.ts.map +1 -0
  349. package/dist/components/Setting.js +43 -0
  350. package/dist/components/Setting.js.map +1 -0
  351. package/dist/components/ShineFx.d.ts +1 -0
  352. package/dist/components/ShineFx.d.ts.map +1 -1
  353. package/dist/components/ShineFx.js +2 -2
  354. package/dist/components/ShineFx.js.map +1 -1
  355. package/dist/components/Skeleton.d.ts +16 -3
  356. package/dist/components/Skeleton.d.ts.map +1 -1
  357. package/dist/components/Skeleton.js +2 -2
  358. package/dist/components/Skeleton.js.map +1 -1
  359. package/dist/components/Skeleton.module.scss +14 -51
  360. package/dist/components/SplitView.d.ts +23 -3
  361. package/dist/components/SplitView.d.ts.map +1 -1
  362. package/dist/components/SplitView.js +90 -58
  363. package/dist/components/SplitView.js.map +1 -1
  364. package/dist/components/StyleOverlay.d.ts.map +1 -1
  365. package/dist/components/StyleOverlay.js +1 -1
  366. package/dist/components/StyleOverlay.js.map +1 -1
  367. package/dist/components/StylePanel.d.ts +47 -6
  368. package/dist/components/StylePanel.d.ts.map +1 -1
  369. package/dist/components/StylePanel.js +16 -189
  370. package/dist/components/StylePanel.js.map +1 -1
  371. package/dist/components/StylePanel.module.scss +6 -1
  372. package/dist/components/StylePanelSections.d.ts +117 -0
  373. package/dist/components/StylePanelSections.d.ts.map +1 -0
  374. package/dist/components/StylePanelSections.js +175 -0
  375. package/dist/components/StylePanelSections.js.map +1 -0
  376. package/dist/components/Swiper.d.ts +7 -1
  377. package/dist/components/Swiper.d.ts.map +1 -1
  378. package/dist/components/Swiper.js +7 -7
  379. package/dist/components/Swiper.js.map +1 -1
  380. package/dist/components/Switch.d.ts +2 -2
  381. package/dist/components/Switch.d.ts.map +1 -1
  382. package/dist/components/Switch.js +4 -4
  383. package/dist/components/Switch.js.map +1 -1
  384. package/dist/components/Table.d.ts.map +1 -1
  385. package/dist/components/Table.js +4 -4
  386. package/dist/components/Table.js.map +1 -1
  387. package/dist/components/Tag.d.ts +1 -1
  388. package/dist/components/Tag.d.ts.map +1 -1
  389. package/dist/components/Tag.js +2 -2
  390. package/dist/components/Tag.js.map +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/ThemeSwitcher.d.ts +14 -1
  396. package/dist/components/ThemeSwitcher.d.ts.map +1 -1
  397. package/dist/components/ThemeSwitcher.js +19 -9
  398. package/dist/components/ThemeSwitcher.js.map +1 -1
  399. package/dist/components/ThemeSwitcher.module.scss +54 -0
  400. package/dist/components/Toast.d.ts +1 -1
  401. package/dist/components/Toast.d.ts.map +1 -1
  402. package/dist/components/Toast.js +2 -2
  403. package/dist/components/Toast.js.map +1 -1
  404. package/dist/components/ToggleButton.d.ts +9 -2
  405. package/dist/components/ToggleButton.d.ts.map +1 -1
  406. package/dist/components/ToggleButton.js +5 -5
  407. package/dist/components/ToggleButton.js.map +1 -1
  408. package/dist/components/User.js +1 -1
  409. package/dist/components/User.js.map +1 -1
  410. package/dist/components/index.d.ts +7 -0
  411. package/dist/components/index.d.ts.map +1 -1
  412. package/dist/components/index.js +7 -0
  413. package/dist/components/index.js.map +1 -1
  414. package/dist/contexts/AdapterProvider.d.ts +50 -0
  415. package/dist/contexts/AdapterProvider.d.ts.map +1 -0
  416. package/dist/contexts/AdapterProvider.js +91 -0
  417. package/dist/contexts/AdapterProvider.js.map +1 -0
  418. package/dist/contexts/IconProvider.d.ts +2 -2
  419. package/dist/contexts/IconProvider.d.ts.map +1 -1
  420. package/dist/contexts/IconProvider.js +2 -2
  421. package/dist/contexts/IconProvider.js.map +1 -1
  422. package/dist/contexts/LayoutProvider.d.ts +0 -2
  423. package/dist/contexts/LayoutProvider.d.ts.map +1 -1
  424. package/dist/contexts/LayoutProvider.js +15 -10
  425. package/dist/contexts/LayoutProvider.js.map +1 -1
  426. package/dist/contexts/ThemeProvider.d.ts +29 -1
  427. package/dist/contexts/ThemeProvider.d.ts.map +1 -1
  428. package/dist/contexts/ThemeProvider.js +42 -15
  429. package/dist/contexts/ThemeProvider.js.map +1 -1
  430. package/dist/contexts/index.d.ts +3 -2
  431. package/dist/contexts/index.d.ts.map +1 -1
  432. package/dist/contexts/index.js +3 -2
  433. package/dist/contexts/index.js.map +1 -1
  434. package/dist/css/styles.css +1 -1
  435. package/dist/css/tokens.css +1 -1
  436. package/dist/data/emoji-data.json +8 -10
  437. package/dist/hooks/index.d.ts +0 -1
  438. package/dist/hooks/index.d.ts.map +1 -1
  439. package/dist/hooks/index.js +0 -1
  440. package/dist/hooks/index.js.map +1 -1
  441. package/dist/icons/ATTRIBUTION.md +19 -0
  442. package/dist/icons/data.d.ts +1919 -0
  443. package/dist/icons/data.d.ts.map +1 -0
  444. package/dist/icons/data.js +102 -0
  445. package/dist/icons/data.js.map +1 -0
  446. package/dist/icons/renderIcon.d.ts +26 -0
  447. package/dist/icons/renderIcon.d.ts.map +1 -0
  448. package/dist/icons/renderIcon.js +22 -0
  449. package/dist/icons/renderIcon.js.map +1 -0
  450. package/dist/icons.d.ts +35 -4
  451. package/dist/icons.d.ts.map +1 -1
  452. package/dist/icons.js +13 -60
  453. package/dist/icons.js.map +1 -1
  454. package/dist/modules/code/CodeBlock.impl.d.ts +2 -1
  455. package/dist/modules/code/CodeBlock.impl.d.ts.map +1 -1
  456. package/dist/modules/code/CodeBlock.impl.js +7 -2
  457. package/dist/modules/code/CodeBlock.impl.js.map +1 -1
  458. package/dist/modules/data/ChartHeader.d.ts.map +1 -1
  459. package/dist/modules/data/ChartHeader.js +1 -1
  460. package/dist/modules/data/ChartHeader.js.map +1 -1
  461. package/dist/modules/data/DataTooltip.d.ts +1 -1
  462. package/dist/modules/data/DataTooltip.d.ts.map +1 -1
  463. package/dist/modules/data/DataTooltip.js +2 -2
  464. package/dist/modules/data/DataTooltip.js.map +1 -1
  465. package/dist/modules/data/LinearGauge.d.ts +3 -2
  466. package/dist/modules/data/LinearGauge.d.ts.map +1 -1
  467. package/dist/modules/data/LinearGauge.js +1 -1
  468. package/dist/modules/data/LinearGauge.js.map +1 -1
  469. package/dist/modules/data/PieChart.impl.d.ts +1 -1
  470. package/dist/modules/data/PieChart.impl.d.ts.map +1 -1
  471. package/dist/modules/data/PieChart.impl.js +4 -1
  472. package/dist/modules/data/PieChart.impl.js.map +1 -1
  473. package/dist/modules/data/RadialGauge.d.ts +3 -2
  474. package/dist/modules/data/RadialGauge.d.ts.map +1 -1
  475. package/dist/modules/data/RadialGauge.js +1 -1
  476. package/dist/modules/data/RadialGauge.js.map +1 -1
  477. package/dist/modules/data/interfaces.d.ts +12 -3
  478. package/dist/modules/data/interfaces.d.ts.map +1 -1
  479. package/dist/modules/index.d.ts +1 -4
  480. package/dist/modules/index.d.ts.map +1 -1
  481. package/dist/modules/index.js +9 -3
  482. package/dist/modules/index.js.map +1 -1
  483. package/dist/modules/media/MediaUpload.impl.d.ts +1 -1
  484. package/dist/modules/media/MediaUpload.impl.d.ts.map +1 -1
  485. package/dist/modules/media/MediaUpload.impl.js +1 -1
  486. package/dist/modules/media/MediaUpload.impl.js.map +1 -1
  487. package/dist/modules/navigation/Kbar.d.ts +5 -4
  488. package/dist/modules/navigation/Kbar.d.ts.map +1 -1
  489. package/dist/modules/navigation/Kbar.js +32 -35
  490. package/dist/modules/navigation/Kbar.js.map +1 -1
  491. package/dist/modules/navigation/MegaMenu.d.ts +5 -3
  492. package/dist/modules/navigation/MegaMenu.d.ts.map +1 -1
  493. package/dist/modules/navigation/MegaMenu.js +24 -12
  494. package/dist/modules/navigation/MegaMenu.js.map +1 -1
  495. package/dist/modules/navigation/MobileMegaMenu.d.ts +3 -2
  496. package/dist/modules/navigation/MobileMegaMenu.d.ts.map +1 -1
  497. package/dist/modules/navigation/MobileMegaMenu.js +1 -1
  498. package/dist/modules/navigation/MobileMegaMenu.js.map +1 -1
  499. package/dist/modules/seo/Meta.d.ts +40 -2
  500. package/dist/modules/seo/Meta.d.ts.map +1 -1
  501. package/dist/modules/seo/Meta.js.map +1 -1
  502. package/dist/modules/seo/Schema.d.ts.map +1 -1
  503. package/dist/modules/seo/Schema.js +1 -2
  504. package/dist/modules/seo/Schema.js.map +1 -1
  505. package/dist/next/index.d.ts +35 -0
  506. package/dist/next/index.d.ts.map +1 -0
  507. package/dist/next/index.js +56 -0
  508. package/dist/next/index.js.map +1 -0
  509. package/dist/package.json +52 -7
  510. package/dist/scripts/init-agent.js +156 -0
  511. package/dist/scripts/validate-ai-code.js +431 -0
  512. package/dist/server/og-utils.d.ts +9 -3
  513. package/dist/server/og-utils.d.ts.map +1 -1
  514. package/dist/server/og-utils.js +15 -9
  515. package/dist/server/og-utils.js.map +1 -1
  516. package/dist/styles/breakpoints.scss +16 -5
  517. package/dist/test/setup.js +21 -0
  518. package/dist/test/setup.js.map +1 -1
  519. package/dist/types.d.ts +13 -1
  520. package/dist/types.d.ts.map +1 -1
  521. package/dist/types.js.map +1 -1
  522. package/dist/utils/colorScheme.d.ts +35 -0
  523. package/dist/utils/colorScheme.d.ts.map +1 -0
  524. package/dist/utils/colorScheme.js +140 -0
  525. package/dist/utils/colorScheme.js.map +1 -0
  526. package/dist/utils/index.d.ts +2 -0
  527. package/dist/utils/index.d.ts.map +1 -1
  528. package/dist/utils/index.js +2 -0
  529. package/dist/utils/index.js.map +1 -1
  530. package/dist/utils/navMatch.d.ts +21 -0
  531. package/dist/utils/navMatch.d.ts.map +1 -0
  532. package/dist/utils/navMatch.js +26 -0
  533. package/dist/utils/navMatch.js.map +1 -0
  534. package/package.json +66 -11
  535. package/scripts/validate-ai-code.js +309 -27
  536. package/dist/css/styles.css.map +0 -1
  537. package/dist/css/tokens.css.map +0 -1
  538. package/dist/hooks/useResponsiveClasses.d.ts +0 -9
  539. package/dist/hooks/useResponsiveClasses.d.ts.map +0 -1
  540. package/dist/hooks/useResponsiveClasses.js +0 -293
  541. package/dist/hooks/useResponsiveClasses.js.map +0 -1
  542. package/dist/styles/background.scss +0 -423
  543. package/dist/styles/border.scss +0 -546
  544. package/dist/styles/color.scss +0 -183
  545. package/dist/styles/display.scss +0 -391
  546. package/dist/styles/flex.scss +0 -518
  547. package/dist/styles/global.scss +0 -36
  548. package/dist/styles/grid.scss +0 -293
  549. package/dist/styles/index.scss +0 -14
  550. package/dist/styles/position.scss +0 -1549
  551. package/dist/styles/shadow.scss +0 -19
  552. package/dist/styles/size.scss +0 -53
  553. package/dist/styles/spacing.scss +0 -1505
  554. package/dist/styles/typography.scss +0 -223
  555. package/dist/styles/utilities.scss +0 -23
  556. package/dist/tokens/border.scss +0 -95
  557. package/dist/tokens/data.scss +0 -107
  558. package/dist/tokens/function.scss +0 -742
  559. package/dist/tokens/index.scss +0 -8
  560. package/dist/tokens/layout.scss +0 -275
  561. package/dist/tokens/scheme.scss +0 -352
  562. package/dist/tokens/shadow.scss +0 -7
  563. package/dist/tokens/theme.scss +0 -657
  564. package/dist/tokens/typography.scss +0 -118
  565. package/next-env.d.ts +0 -5
  566. package/scripts/copy-files.js +0 -103
  567. package/scripts/generate-ai-spec.js +0 -464
  568. package/scripts/generate-emoji-data.js +0 -128
  569. package/scss.d.ts +0 -4
  570. package/tsconfig.vitest.json +0 -20
  571. package/vitest.config.ts +0 -19
@@ -68,18 +68,18 @@ export const Waitlist1 = () => {
68
68
  </Badge>
69
69
  </RevealFx>
70
70
  <Column horizontal="center" align="center" gap="24">
71
- <RevealFx horizontal="center" delay={0.4}>
71
+ <RevealFx horizontal="center" delay={400}>
72
72
  <Heading variant="display-strong-xl" onBackground="neutral-strong">
73
73
  The all-in-one course platform
74
74
  </Heading>
75
75
  </RevealFx>
76
- <RevealFx horizontal="center" delay={0.6}>
76
+ <RevealFx horizontal="center" delay={600}>
77
77
  <Text onBackground="neutral-medium" variant="heading-default-xl">
78
78
  Launch and sell your courses with ease. We handle enrollment, payments and analytics. You focus on creating.
79
79
  </Text>
80
80
  </RevealFx>
81
81
  </Column>
82
- <RevealFx horizontal="center" delay={0.8}>
82
+ <RevealFx horizontal="center" delay={800}>
83
83
  <AvatarGroup
84
84
  reverse
85
85
  size="m"
@@ -110,14 +110,14 @@ export const Waitlist1 = () => {
110
110
  </Row>
111
111
  </RevealFx>
112
112
  ) : (
113
- <RevealFx key="subscribed" direction="column" horizontal="center" delay={1} gap="16" data-border="rounded">
113
+ <RevealFx key="subscribed" direction="column" horizontal="center" delay={1000} gap="16" data-border="rounded">
114
114
  <Input
115
115
  id="email"
116
116
  placeholder="Enter email"
117
117
  value={email}
118
118
  validate={(value) => validateEmail(value as string)}
119
119
  onChange={(e) => setEmail(e.target.value)}
120
- hasSuffix={
120
+ suffix={
121
121
  <IconButton size="l" style={{marginRight: "-0.5rem"}} icon="send" onClick={() => subscribe()}/>
122
122
  }
123
123
  />
@@ -1,4 +1,6 @@
1
- export const social = [
1
+ import type { IconName } from "@once-ui-system/core";
2
+
3
+ export const social: { icon: IconName; label: string; href: string }[] = [
2
4
  { icon: "link", label: "Discord", href: "https://discord.com/invite/5EyAQ4eNdS" },
3
5
  { icon: "link", label: "GitHub", href: "https://github.com/once-ui-system" },
4
6
  { icon: "document", label: "Email", href: "mailto:demo@email.com" },
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { useEffect, useRef, useState } from "react";
8
8
  import {
9
+ Button,
9
10
  Column,
10
11
  CountFx,
11
12
  Grid,
@@ -37,9 +38,9 @@ const activity = {
37
38
  { content: "Time", key: "time" },
38
39
  ],
39
40
  rows: [
40
- ["Plan upgraded to Pro", "jane@acme.co", <Tag size="s" variant="success">Completed</Tag>, "2m ago"],
41
- ["New signup", "alex@studio.io", <Tag size="s" variant="brand">New</Tag>, "14m ago"],
42
- ["Payment failed", "ops@build.dev", <Tag size="s" variant="danger">Action</Tag>, "1h ago"],
41
+ ["Plan upgraded to Pro", "jane@acme.co", <Tag size="s" scheme="success">Completed</Tag>, "2m ago"],
42
+ ["New signup", "alex@studio.io", <Tag size="s" scheme="brand">New</Tag>, "14m ago"],
43
+ ["Payment failed", "ops@build.dev", <Tag size="s" scheme="danger">Action</Tag>, "1h ago"],
43
44
  ],
44
45
  };
45
46
 
@@ -54,7 +55,7 @@ export function DashboardExample() {
54
55
 
55
56
  return (
56
57
  <Column as="main" fillWidth horizontal="center" paddingY="48" paddingX="24" gap="40">
57
- <Column fillWidth maxWidth="l" gap="40">
58
+ <Column maxWidth="l" gap="40">
58
59
  <Row fillWidth horizontal="between" vertical="end" gap="24" s={{ direction: "column", horizontal: "start" }}>
59
60
  <Column gap="8">
60
61
  <Text variant="label-default-s" onBackground="brand-medium">
@@ -65,8 +66,8 @@ export function DashboardExample() {
65
66
  </Heading>
66
67
  </Column>
67
68
  <SegmentedControl
68
- selected={range}
69
- onToggle={setRange}
69
+ value={range}
70
+ onChange={setRange}
70
71
  buttons={[
71
72
  { value: "7d", label: "7 days" },
72
73
  { value: "30d", label: "30 days" },
@@ -77,8 +78,8 @@ export function DashboardExample() {
77
78
 
78
79
  <Grid ref={statsRef} columns="4" gap="16" m={{ columns: 2 }} s={{ columns: 1 }}>
79
80
  {stats.map((stat, index) => (
80
- <RevealFx key={stat.label} fill trigger={seen} translateY="8" delay={index * 0.1}>
81
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="16">
81
+ <RevealFx key={stat.label} fill revealed={seen} translateY="8" delay={index * 100}>
82
+ <Column background="surface" border radius="l" padding="24" gap="16">
82
83
  <Row fillWidth horizontal="between" vertical="center">
83
84
  <Text variant="label-default-s" onBackground="neutral-weak">
84
85
  {stat.label}
@@ -108,7 +109,7 @@ export function DashboardExample() {
108
109
  </Grid>
109
110
 
110
111
  <Grid columns="2" gap="24" s={{ columns: 1 }}>
111
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="16" minHeight={32}>
112
+ <Column background="surface" border radius="l" padding="24" gap="16" minHeight={32}>
112
113
  <Heading as="h2" variant="heading-strong-s">
113
114
  Revenue trend
114
115
  </Heading>
@@ -119,7 +120,7 @@ export function DashboardExample() {
119
120
  </Text>
120
121
  </Column>
121
122
  </Column>
122
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="16" minHeight={32}>
123
+ <Column background="surface" border radius="l" padding="24" gap="16" minHeight={32}>
123
124
  <Heading as="h2" variant="heading-strong-s">
124
125
  Signups by channel
125
126
  </Heading>
@@ -132,14 +133,12 @@ export function DashboardExample() {
132
133
  </Column>
133
134
  </Grid>
134
135
 
135
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="24">
136
+ <Column background="surface" border radius="l" padding="24" gap="24">
136
137
  <Row fillWidth horizontal="between" vertical="center">
137
138
  <Heading as="h2" variant="heading-strong-s">
138
139
  Recent activity
139
140
  </Heading>
140
- <Text variant="label-default-s" onBackground="brand-medium" style={{ cursor: "pointer" }}>
141
- View all
142
- </Text>
141
+ <Button variant="tertiary" size="s" label="View all" />
143
142
  </Row>
144
143
  <Line />
145
144
  <Table fillWidth data={activity} />
@@ -84,13 +84,13 @@ export function MarketingHeroExample() {
84
84
  </Heading>
85
85
  </Column>
86
86
  </RevealFx>
87
- <RevealFx delay={0.1} translateY="16">
87
+ <RevealFx delay={100} translateY="16">
88
88
  <Text variant="body-default-l" onBackground="neutral-weak" align="center">
89
89
  Build semantic layouts with Row, Column and Grid. Add 100+ pre-styled components.
90
90
  Manage themes in a single file.
91
91
  </Text>
92
92
  </RevealFx>
93
- <RevealFx delay={0.2} translateY="16">
93
+ <RevealFx delay={200} translateY="16">
94
94
  <Row gap="12" s={{ direction: "column" }}>
95
95
  <Button arrowIcon>View docs</Button>
96
96
  <Button variant="secondary" suffixIcon="arrowUpRight">
@@ -103,7 +103,7 @@ export function MarketingHeroExample() {
103
103
 
104
104
  {/* Feature grid — left-aligned section header, not repeated centered blocks */}
105
105
  <Column fillWidth horizontal="center">
106
- <Column fillWidth maxWidth="l" gap="40">
106
+ <Column maxWidth="l" gap="40">
107
107
  <Column gap="12" maxWidth={32}>
108
108
  <Text variant="label-default-s" onBackground="brand-medium">
109
109
  Components
@@ -117,7 +117,7 @@ export function MarketingHeroExample() {
117
117
  <Column
118
118
  key={feature.title}
119
119
  background="surface"
120
- border="neutral-alpha-weak"
120
+ border
121
121
  radius="l"
122
122
  padding="24"
123
123
  gap="16"
@@ -6,7 +6,6 @@
6
6
  */
7
7
  import { useEffect, useRef, useState } from "react";
8
8
  import {
9
- AccordionGroup,
10
9
  Background,
11
10
  BlobFx,
12
11
  Button,
@@ -96,14 +95,14 @@ export function PricingExample() {
96
95
  </Column>
97
96
 
98
97
  <Column fillWidth horizontal="center">
99
- <Column fillWidth maxWidth="l" gap="40">
98
+ <Column maxWidth="l" gap="40">
100
99
  <Row fillWidth horizontal="between" vertical="end" gap="24" s={{ direction: "column", horizontal: "start" }}>
101
100
  <Heading as="h2" variant="display-strong-xs">
102
101
  Three plans, one decision
103
102
  </Heading>
104
103
  <SegmentedControl
105
- selected={billing}
106
- onToggle={(value) => setBilling(value as Billing)}
104
+ value={billing}
105
+ onChange={(value) => setBilling(value as Billing)}
107
106
  buttons={[
108
107
  { value: "monthly", label: "Monthly" },
109
108
  { value: "yearly", label: "Yearly −20%" },
@@ -113,7 +112,7 @@ export function PricingExample() {
113
112
 
114
113
  <Grid ref={tiersRef} columns="3" gap="24" s={{ columns: 1 }}>
115
114
  {tiers.map((tier, index) => (
116
- <RevealFx key={tier.name} fill trigger={tiersSeen} translateY="8" delay={index * 0.1}>
115
+ <RevealFx key={tier.name} fill revealed={tiersSeen} translateY="8" delay={index * 100}>
117
116
  <Column
118
117
  fill
119
118
  background="surface"
@@ -146,7 +145,7 @@ export function PricingExample() {
146
145
  <Heading as="h3" variant="heading-strong-m">
147
146
  {tier.name}
148
147
  </Heading>
149
- {tier.highlighted && <Tag variant="brand" size="s" label="Most popular" />}
148
+ {tier.highlighted && <Tag scheme="brand" size="s" label="Most popular" />}
150
149
  </Row>
151
150
  <Text variant="body-default-s" onBackground="neutral-weak">
152
151
  {tier.description}
@@ -182,7 +181,7 @@ export function PricingExample() {
182
181
  </Column>
183
182
 
184
183
  <Column fillWidth horizontal="center" background="neutral-alpha-weak" paddingY="80" paddingX="24">
185
- <Column fillWidth maxWidth="l" gap="40">
184
+ <Column maxWidth="l" gap="40">
186
185
  <Heading as="h2" variant="display-strong-xs">
187
186
  Every feature, side by side
188
187
  </Heading>
@@ -204,7 +203,7 @@ export function PricingExample() {
204
203
  </Column>
205
204
 
206
205
  <Column fillWidth horizontal="center">
207
- <Column fillWidth maxWidth="l" radius="xl" border="neutral-alpha-weak" overflow="hidden" padding="64" center>
206
+ <Column maxWidth="l" radius="xl" border overflow="hidden" padding="64" center>
208
207
  <BlobFx position="absolute" top="0" left="0" fill opacity={60} seed={2} />
209
208
  <Column zIndex={1} center gap="24" maxWidth={40}>
210
209
  <Heading as="h2" variant="display-strong-s" align="center">
@@ -29,7 +29,7 @@ const sections = [
29
29
  export function SettingsExample() {
30
30
  return (
31
31
  <Column as="main" fillWidth horizontal="center" paddingY="48" paddingX="24">
32
- <Column fillWidth maxWidth="l" gap="40">
32
+ <Column maxWidth="l" gap="40">
33
33
  <Column gap="12">
34
34
  <Text variant="label-default-s" onBackground="brand-medium">
35
35
  Settings
@@ -46,7 +46,7 @@ export function SettingsExample() {
46
46
  gap="4"
47
47
  padding="16"
48
48
  background="surface"
49
- border="neutral-alpha-weak"
49
+ border
50
50
  radius="l"
51
51
  s={{ hide: true }}
52
52
  >
@@ -66,7 +66,7 @@ export function SettingsExample() {
66
66
  }
67
67
  rightPanel={
68
68
  <Column flex={1} gap="24">
69
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="24">
69
+ <Column background="surface" border radius="l" padding="24" gap="24">
70
70
  <Heading as="h2" variant="heading-strong-m">
71
71
  Profile
72
72
  </Heading>
@@ -97,7 +97,7 @@ export function SettingsExample() {
97
97
  </Row>
98
98
  </Column>
99
99
 
100
- <Column background="surface" border="neutral-alpha-weak" radius="l" padding="24" gap="24">
100
+ <Column background="surface" border radius="l" padding="24" gap="24">
101
101
  <Heading as="h2" variant="heading-strong-m">
102
102
  Notifications
103
103
  </Heading>
@@ -108,7 +108,7 @@ export function SettingsExample() {
108
108
  Release notes and changelog
109
109
  </Text>
110
110
  </Column>
111
- <Switch isChecked onToggle={() => {}} />
111
+ <Switch checked onToggle={() => {}} />
112
112
  </Row>
113
113
  <Line />
114
114
  <Row fillWidth horizontal="between" vertical="center">
@@ -118,9 +118,9 @@ export function SettingsExample() {
118
118
  Tips, templates, and community highlights
119
119
  </Text>
120
120
  </Column>
121
- <Switch isChecked={false} onToggle={() => {}} />
121
+ <Switch checked={false} onToggle={() => {}} />
122
122
  </Row>
123
- <Checkbox label="Weekly digest" isChecked />
123
+ <Checkbox label="Weekly digest" checked />
124
124
  </Column>
125
125
 
126
126
  <Column background="surface" border="danger-alpha-medium" radius="l" padding="24" gap="16">
package/ai/gotchas.json CHANGED
@@ -1,86 +1,160 @@
1
1
  {
2
2
  "Background.gradient.width": {
3
3
  "rule": "Quarter-percent units: 400 = 100% of container. Soft glows use width 100–200, not 500.",
4
- "components": ["Background"]
4
+ "components": [
5
+ "Background"
6
+ ]
5
7
  },
6
8
  "Background.gradient.x": {
7
9
  "rule": "x/y are percent positions of the container (50/50 = center).",
8
- "components": ["Background"]
10
+ "components": [
11
+ "Background"
12
+ ]
9
13
  },
10
14
  "Background.absolute": {
11
15
  "rule": "Every absolute decorative layer needs top=\"0\" left=\"0\" or it offsets by parent padding.",
12
- "components": ["Background", "MatrixFx", "BlobFx"]
16
+ "components": [
17
+ "Background",
18
+ "MatrixFx",
19
+ "BlobFx"
20
+ ]
13
21
  },
14
22
  "Card.interactive": {
15
- "rule": "Card is for interactive surfaces only (href or onClick). Static panels use Column + background=\"surface\" border=\"neutral-alpha-weak\" radius=\"l\".",
16
- "components": ["Card"]
23
+ "rule": "Card is for interactive surfaces only (href or onClick). Static panels use Column + background=\"surface\" border radius=\"l\".",
24
+ "components": [
25
+ "Card"
26
+ ]
17
27
  },
18
28
  "Fade.edge": {
19
29
  "rule": "Fade is an edge overlay strip on scroll containers, not a content wrapper.",
20
- "components": ["Fade"]
30
+ "components": [
31
+ "Fade"
32
+ ]
21
33
  },
22
34
  "RevealFx.delay": {
23
- "rule": "delay is in seconds — stagger with delay={index * 0.1}, never index * 80.",
24
- "components": ["RevealFx"]
35
+ "rule": "delay is in milliseconds — stagger with delay={index * 100}, never index * 0.1 (that was 1.8.x; 2.0 reads 0.1 as a tenth of a millisecond, i.e. no stagger).",
36
+ "components": [
37
+ "RevealFx",
38
+ "ShineFx"
39
+ ]
25
40
  },
26
41
  "RevealFx.translateY": {
27
42
  "rule": "translateY as a number is in rem. Use translateY={1} or token \"16\" (1rem); 16 means 16rem.",
28
- "components": ["RevealFx"]
43
+ "components": [
44
+ "RevealFx"
45
+ ]
29
46
  },
30
47
  "LogoCloud.columns": {
31
48
  "rule": "LogoCloud extends Grid — always set columns and responsive overrides or logos stack in one column.",
32
- "components": ["LogoCloud"]
49
+ "components": [
50
+ "LogoCloud"
51
+ ]
33
52
  },
34
53
  "StatusIndicator.color": {
35
54
  "rule": "StatusIndicator uses color=\"green\" | \"red\" | \"orange\" | \"gray\" etc. — not variant or semantic scheme names.",
36
- "components": ["StatusIndicator"]
55
+ "components": [
56
+ "StatusIndicator"
57
+ ]
37
58
  },
38
59
  "Icon.names": {
39
- "rule": "Icon names must come from IconName in spec.json — never invent names like more, bell, arrowRight.",
40
- "components": ["Icon", "Button", "IconButton"]
60
+ "rule": "Icon names must come from iconNames in spec.json, which is a real union in 2.0 (an unregistered name is a type error, not a blank space). Do not guess a plausible name, and do not cast one with `as IconName` to silence the check. Brand marks are not in the set — an app registers those itself by augmenting IconLibraryOverrides.",
61
+ "components": [
62
+ "Icon",
63
+ "Button",
64
+ "IconButton"
65
+ ]
41
66
  },
42
67
  "Badge.duplicate": {
43
68
  "rule": "Do not pass the same text as both title prop and children — it renders twice.",
44
- "components": ["Badge"]
69
+ "components": [
70
+ "Badge"
71
+ ]
45
72
  },
46
73
  "Tag.duplicate": {
47
74
  "rule": "Do not pass the same text as both label prop and children — it renders twice.",
48
- "components": ["Tag"]
75
+ "components": [
76
+ "Tag"
77
+ ]
49
78
  },
50
79
  "color.tokens": {
51
80
  "rule": "Colors are semantic tokens ({scheme}-{weight}), never hex/rgb. background also accepts surface | overlay | page | transparent.",
52
- "components": ["Column", "Row", "Text", "Button"]
81
+ "components": [
82
+ "Column",
83
+ "Row",
84
+ "Text",
85
+ "Button"
86
+ ]
53
87
  },
54
88
  "color.background-weak": {
55
89
  "rule": "*-background-weak is nearly the page color — invisible as accent. Use alpha tokens (brand-alpha-medium) for glows.",
56
- "components": ["Background"]
90
+ "components": [
91
+ "Background"
92
+ ]
57
93
  },
58
94
  "layout.shorthands": {
59
95
  "rule": "Use fill not fillWidth fillHeight; center not horizontal=\"center\" vertical=\"center\"; Row/Column not Flex direction=.",
60
- "components": ["Row", "Column", "Flex", "Grid"]
96
+ "components": [
97
+ "Row",
98
+ "Column",
99
+ "Flex",
100
+ "Grid"
101
+ ]
61
102
  },
62
103
  "layout.defaults": {
63
- "rule": "Never write props equal to defaults: position=\"relative\", direction on Row/Column, variant=\"primary\" on Button.",
64
- "components": ["Row", "Column", "Button"]
104
+ "rule": "Never write props equal to defaults or implied by another prop on the element: position=\"relative\", direction on Row/Column, variant=\"primary\" on Button, fillWidth beside maxWidth (maxWidth already fills the width), minWidth={0} beside fillWidth (fillWidth already sets min-width: 0).",
105
+ "components": [
106
+ "Row",
107
+ "Column",
108
+ "Grid",
109
+ "Button"
110
+ ]
111
+ },
112
+ "border.default": {
113
+ "rule": "Bare border (and borderTop, borderBottom, borderX, …) draws the default border. Do not write border=\"neutral-alpha-weak\" to get it; name a colour only to deviate, e.g. border=\"brand-alpha-medium\".",
114
+ "components": [
115
+ "Row",
116
+ "Column",
117
+ "Card"
118
+ ]
119
+ },
120
+ "zIndex.scope": {
121
+ "rule": "zIndex is for an isolated stacking group: an absolute decorative layer and its content sibling (zIndex={1}), or a sticky header over its pane. Never on a lone element, never a page-wide ladder of 3 / 5 / 9 — restructure the tree instead.",
122
+ "components": [
123
+ "Row",
124
+ "Column",
125
+ "Background"
126
+ ]
65
127
  },
66
128
  "section.gaps": {
67
129
  "rule": "Gap between page sections: 80–160 (typical 104). Inside sections: 24–40.",
68
- "components": ["Column"]
130
+ "components": [
131
+ "Column"
132
+ ]
69
133
  },
70
134
  "heading.scale": {
71
135
  "rule": "Hero = display-strong-l/xl; section titles = display-strong-xs/s — never heading-* for section titles.",
72
- "components": ["Heading"]
136
+ "components": [
137
+ "Heading"
138
+ ]
73
139
  },
74
140
  "animation.budget": {
75
141
  "rule": "Entry animation budget: hero + at most 1–2 key moments. Animate coherent blocks all-or-none within a sibling set.",
76
- "components": ["RevealFx", "CountFx"]
142
+ "components": [
143
+ "RevealFx",
144
+ "CountFx"
145
+ ]
77
146
  },
78
147
  "CountFx.trigger": {
79
148
  "rule": "CountFx has no trigger prop — drive value from useInViewport latch instead.",
80
- "components": ["CountFx"]
149
+ "components": [
150
+ "CountFx"
151
+ ]
81
152
  },
82
153
  "overflow.hero": {
83
154
  "rule": "overflow=\"hidden\" on full-bleed sections clips glows into hard bands — only use when parent has radius.",
84
- "components": ["Column", "Background"]
155
+ "components": [
156
+ "Column",
157
+ "Background"
158
+ ]
85
159
  }
86
160
  }
package/ai/layouts.md ADDED
@@ -0,0 +1,154 @@
1
+ # Once UI — application layouts
2
+
3
+ Recipes for the shells a product sits inside, as opposed to the decoration in
4
+ `recipes.md`. Each is the shape a working product converged on, not a sketch.
5
+
6
+ Use them verbatim, then adjust. The values that look arbitrary usually are not —
7
+ the notes say which ones matter and why.
8
+
9
+ All three compile: they are also `ai/examples/app-shell.tsx`, which `pnpm
10
+ typecheck` covers, so a renamed prop breaks the recipe rather than leaving it
11
+ quietly wrong.
12
+
13
+ ## 1. App shell with a sidebar
14
+
15
+ The one agents get wrong most often. A dashboard built without this scrolls the
16
+ whole document, so the header and sidebar slide away and the nav has to be
17
+ scrolled back to.
18
+
19
+ ```tsx
20
+ <Column fill horizontal="center" flex={1}>
21
+ <Header /> {/* 56px tall */}
22
+ <Row fill paddingX="8">
23
+ <Sidebar s={{ hide: true }} maxWidth={18} fitHeight position="sticky" top="56" />
24
+ <Row fill horizontal="center" topRadius="l" overflow="hidden">
25
+ <Row
26
+ height="calc(100dvh - var(--static-space-56))"
27
+ overflowY="auto"
28
+ topRadius="l"
29
+ horizontal="center"
30
+ fillWidth
31
+ background="surface">
32
+ <Column maxWidth="xl" gap="m" paddingY="32" fitHeight>
33
+ {children}
34
+ </Column>
35
+ </Row>
36
+ </Row>
37
+ </Row>
38
+ </Column>
39
+ ```
40
+
41
+ What each part is doing:
42
+
43
+ - **The pane scrolls, not the page.** `height: calc(100dvh - <header>)` plus
44
+ `overflowY="auto"` is what keeps the header and sidebar in place. `dvh`, not
45
+ `vh` — on mobile `vh` ignores the browser chrome and the pane runs off-screen.
46
+ - **`position="sticky" top="56"`** on the sidebar, matching the header height.
47
+ `fitHeight` so it does not stretch and fight the sticky.
48
+ - **`topRadius="l"` + `background="surface"`** is what makes the content read as
49
+ a panel sitting on the page rather than the page itself. The radius is on the
50
+ top only, since the bottom is off-screen.
51
+ - **`s={{ hide: true }}`** rather than a media query. The mobile nav is a
52
+ separate surface, not this one reflowed.
53
+ - **`maxWidth="xl"`** inside the pane. A dashboard is wider than a document;
54
+ `"m"` is for reading.
55
+
56
+ ## 2. Data-driven navigation
57
+
58
+ ```tsx
59
+ import { NavGroup, NavItem, selectNavHref } from "@once-ui-system/core";
60
+
61
+ const current = selectNavHref(pathname, nav.flatMap((i) =>
62
+ i.items ? i.items.map((s) => s.href) : [i.href],
63
+ ));
64
+
65
+ <Column fill gap="4" paddingX="8">
66
+ {nav.map((item) =>
67
+ item.items ? (
68
+ <NavGroup
69
+ key={item.key}
70
+ label={item.label}
71
+ icon={item.icon}
72
+ defaultOpen={item.items.some((s) => s.href === current)}>
73
+ {item.items.map((sub) => (
74
+ <NavItem
75
+ key={sub.href}
76
+ href={sub.href}
77
+ label={sub.label}
78
+ badge={sub.badge}
79
+ selected={sub.href === current}
80
+ />
81
+ ))}
82
+ </NavGroup>
83
+ ) : (
84
+ <NavItem
85
+ key={item.href}
86
+ href={item.href}
87
+ icon={item.icon}
88
+ label={item.label}
89
+ selected={item.href === current}
90
+ />
91
+ ),
92
+ )}
93
+ </Column>
94
+ ```
95
+
96
+ - **`selectNavHref` over `===` or `startsWith`.** An equality check leaves a
97
+ nested route (`/settings/billing/invoices/42`) with nothing highlighted; a
98
+ prefix check lights the parent up alongside its child. It returns the longest
99
+ href that matches, which is the right one.
100
+ - **Compute `current` once** for the whole tree, not per item — a child needs to
101
+ know about its siblings to know it is the deepest match.
102
+ - **`defaultOpen` from the match**, so the group holding the current page is open
103
+ on arrival.
104
+ - Child items take **no icon**. The rail inside `NavGroup` carries the hierarchy;
105
+ a second column of icons competes with it.
106
+
107
+ ## 3. Editor shell
108
+
109
+ Two panes and a timeline — the shape of a video editor, a page builder, a
110
+ diff view.
111
+
112
+ ```tsx
113
+ <Column fill>
114
+ <SplitView
115
+ fill
116
+ leftPanel={<Column fill overflowY="auto">{/* layers, blocks, files */}</Column>}
117
+ rightPanel={<Column fill overflowY="auto">{/* canvas, preview */}</Column>}
118
+ defaultSplit={0.28}
119
+ minSplit={0.2}
120
+ maxSplit={0.6}
121
+ collapseBelow="s"
122
+ labels={{ left: "Layers", right: "Canvas" }}
123
+ />
124
+ <Scrubber
125
+ duration={duration}
126
+ value={time}
127
+ onChange={setTime}
128
+ tracks={tracks}
129
+ onGestureStart={pause}
130
+ />
131
+ </Column>
132
+ ```
133
+
134
+ - **`overflowY="auto"` on each panel, not on the SplitView.** The divider needs
135
+ the container to stay put while the panes scroll independently.
136
+ - **`collapseBelow` + `labels`.** Below the breakpoint the split becomes tabs, and
137
+ `labels` is what they say. Without it the tabs are unlabelled.
138
+ - **`onGestureStart` pauses playback.** Scrubbing while playing fights the
139
+ playhead — the drag sets a time, playback immediately moves it.
140
+ - **The timeline is a sibling of the split, not inside it.** It spans both panes,
141
+ and putting it in one makes the divider drag it.
142
+
143
+ ## Anti-patterns
144
+
145
+ - A dashboard with no scrolling pane — the whole document scrolls and the nav
146
+ leaves with it.
147
+ - `100vh` in an app shell. Use `100dvh`; `vh` is wrong on mobile the moment the
148
+ browser chrome shows or hides.
149
+ - A sticky sidebar without `fitHeight` — it stretches to the row and the sticky
150
+ never engages.
151
+ - `pathname === href` or `startsWith` for nav selection. Use `selectNavHref`.
152
+ - Icons on both a NavGroup and its children — two columns of icons, no hierarchy.
153
+ - `overflow` on the SplitView instead of on its panels — the divider stops
154
+ tracking the pointer.
package/ai/manifest.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
- "version": "1.8.5",
3
- "generated": "2026-09-16",
2
+ "version": "2.0.0-alpha.1",
3
+ "generated": "2026-09-17",
4
4
  "files": {
5
5
  "spec": "spec.json",
6
6
  "catalog": "catalog.json",
7
7
  "rules": "rules.compact.md",
8
8
  "rulesFull": "rules.md",
9
9
  "recipes": "recipes.md",
10
+ "layouts": "layouts.md",
10
11
  "gotchas": "gotchas.json",
11
12
  "tasks": "tasks/index.json",
12
13
  "examples": "examples/",