@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
@@ -0,0 +1,431 @@
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
+ /**
86
+ * Every opening JSX tag with its attribute text.
87
+ *
88
+ * Brace- and quote-aware, so a `>` inside an arrow function or an object
89
+ * literal in a prop value does not end the tag early — which is what a plain
90
+ * `<Tag[^>]*>` does on `onClick={() => x > 1}`. Scanning resumes right after
91
+ * the tag name, so a tag nested in a prop value (`trigger={<Card …>}`) is
92
+ * found on its own as well.
93
+ */
94
+ function openingTags(source) {
95
+ const tags = [];
96
+ const re = /<([A-Z][A-Za-z0-9.]*)\b/g;
97
+ let m;
98
+ while ((m = re.exec(source)) !== null) {
99
+ const start = m.index + m[0].length;
100
+ let i = start;
101
+ let depth = 0;
102
+ let quote = null;
103
+ for (; i < source.length; i++) {
104
+ const ch = source[i];
105
+ if (quote) {
106
+ if (ch === quote) quote = null;
107
+ continue;
108
+ }
109
+ if (ch === '"' || ch === "'" || ch === "`") quote = ch;
110
+ else if (ch === "{") depth++;
111
+ else if (ch === "}") depth--;
112
+ else if (ch === ">" && depth === 0) break;
113
+ }
114
+ tags.push({ name: m[1], attrs: source.slice(start, i), start, end: i });
115
+ }
116
+ return tags;
117
+ }
118
+
119
+ /**
120
+ * The element's own props, with every `{ … }` value that holds JSX blanked to
121
+ * spaces of the same length — so a check reads `fillWidth` and `maxWidth` on
122
+ * the element itself and not on a tag nested inside one of its values
123
+ * (`dropdown={<Column maxWidth={20} />}`), and an index into the masked text
124
+ * is still an index into the original.
125
+ */
126
+ function ownProps(attrs) {
127
+ let out = "";
128
+ let depth = 0;
129
+ let quote = null;
130
+ let from = 0;
131
+ for (let i = 0; i < attrs.length; i++) {
132
+ const ch = attrs[i];
133
+ if (quote) {
134
+ if (ch === quote) quote = null;
135
+ continue;
136
+ }
137
+ if (ch === '"' || ch === "'" || ch === "`") quote = ch;
138
+ else if (ch === "{") {
139
+ if (depth === 0) {
140
+ out += attrs.slice(from, i);
141
+ from = i;
142
+ }
143
+ depth++;
144
+ } else if (ch === "}") {
145
+ depth--;
146
+ if (depth === 0) {
147
+ const block = attrs.slice(from, i + 1);
148
+ out += /<[A-Z]/.test(block) ? `{${" ".repeat(block.length - 2)}}` : block;
149
+ from = i + 1;
150
+ }
151
+ }
152
+ }
153
+ return out + attrs.slice(from);
154
+ }
155
+
156
+ /** Apply a replacement to the element's own props only, never inside nested JSX. */
157
+ function replaceOwnProps(attrs, pattern, replacement) {
158
+ const masked = ownProps(attrs);
159
+ const flags = pattern.flags.includes("g") ? pattern.flags : `${pattern.flags}g`;
160
+ const re = new RegExp(pattern.source, flags);
161
+ let out = "";
162
+ let last = 0;
163
+ for (const m of masked.matchAll(re)) {
164
+ out += attrs.slice(last, m.index) + m[0].replace(pattern, replacement);
165
+ last = m.index + m[0].length;
166
+ if (!pattern.flags.includes("g")) break;
167
+ }
168
+ return out + attrs.slice(last);
169
+ }
170
+
171
+ /**
172
+ * Collapse two props on one element into a shorthand: the earlier of the two
173
+ * becomes the shorthand, the later is removed, and nothing else moves.
174
+ */
175
+ function collapsePair(attrs, first, second, shorthand) {
176
+ const own = ownProps(attrs);
177
+ const a = own.search(first);
178
+ const b = own.search(second);
179
+ if (a < 0 || b < 0) return attrs;
180
+ const [lead, trail] = a < b ? [first, second] : [second, first];
181
+ const asShorthand = new RegExp(`(\\s)${lead.source.replace(/^\(\?:\^\|\\s\)/, "")}`);
182
+ const removed = new RegExp(`\\s+${trail.source.replace(/^\(\?:\^\|\\s\)/, "")}`);
183
+ return replaceOwnProps(replaceOwnProps(attrs, removed, ""), asShorthand, `$1${shorthand}`);
184
+ }
185
+
186
+ const FILL_WIDTH = /(?:^|\s)fillWidth(?=[\s/]|$)/;
187
+ const FILL_HEIGHT = /(?:^|\s)fillHeight(?=[\s/]|$)/;
188
+
189
+ /** Both centring props on one element, whatever sits between them. */
190
+ function isCentered(attrs) {
191
+ const own = ownProps(attrs);
192
+ return HORIZONTAL_CENTER.test(own) && VERTICAL_CENTER.test(own);
193
+ }
194
+
195
+ /** Does the element carry `prop`, bare or with a value? */
196
+ function hasProp(attrs, prop) {
197
+ return new RegExp(`(?:^|\\s)${prop}(?=[\\s=/]|$)`).test(ownProps(attrs));
198
+ }
199
+
200
+ const HORIZONTAL_CENTER = /(?:^|\s)horizontal=["']center["']/;
201
+ const VERTICAL_CENTER = /(?:^|\s)vertical=["']center["']/;
202
+ const LITERAL_MAX_WIDTH =
203
+ /(?:^|\s)maxWidth=(?:"[^"]*"|\{\s*(?:\d+(?:\.\d+)?|"[^"]*"|'[^']*')\s*\})(?=[\s/]|$)/;
204
+ const MIN_WIDTH_ZERO = /(?:^|\s)minWidth=(?:\{\s*0\s*\}|\{?["']0["']\}?)(?=[\s/]|$)/;
205
+ const DEFAULT_BORDER = /(?:^|\s)(border(?:Top|Right|Bottom|Left|X|Y)?)=["']neutral-alpha-weak["']/;
206
+
207
+ function validate(source, spec, iconNames) {
208
+ const issues = [];
209
+
210
+ const add = (rule, message, fix) => issues.push({ rule, message, fix });
211
+
212
+ // Per element: `fillWidth` on a parent and `fillHeight` on its child is not
213
+ // a shorthand missed, and neither is `horizontal="center"` on a header row
214
+ // beside `vertical="center"` on the row inside it.
215
+ const tags = openingTags(source);
216
+ if (tags.some((t) => hasProp(t.attrs, "fillWidth") && hasProp(t.attrs, "fillHeight"))) {
217
+ add("layout.shorthands", "Use fill instead of fillWidth + fillHeight", "fill");
218
+ }
219
+ if (/<Flex[^>]*direction="column"/.test(source)) {
220
+ add("layout.shorthands", 'Use Column instead of Flex direction="column"', "Column");
221
+ }
222
+ if (/<Flex[^>]*direction="row"/.test(source)) {
223
+ add("layout.shorthands", 'Use Row instead of Flex direction="row"', "Row");
224
+ }
225
+ if (tags.some((t) => isCentered(t.attrs))) {
226
+ add(
227
+ "layout.shorthands",
228
+ 'Use center instead of horizontal="center" vertical="center"',
229
+ "center",
230
+ );
231
+ }
232
+
233
+ if (/position="relative"/.test(source)) {
234
+ add("layout.defaults", 'position="relative" is the default — omit it');
235
+ }
236
+
237
+ // Props another prop on the same element already implies. Checked per tag,
238
+ // because `fillWidth` and `maxWidth` on two different elements is fine, and
239
+ // only for a literal `maxWidth`: a computed one may resolve to `undefined`,
240
+ // and then `fillWidth` is the only thing filling the width.
241
+ if (
242
+ tags.some((t) => hasProp(t.attrs, "fillWidth") && LITERAL_MAX_WIDTH.test(ownProps(t.attrs)))
243
+ ) {
244
+ add(
245
+ "layout.defaults",
246
+ "fillWidth beside maxWidth — maxWidth already fills the width, omit fillWidth",
247
+ "drop-fillWidth",
248
+ );
249
+ }
250
+ if (tags.some((t) => hasProp(t.attrs, "fillWidth") && MIN_WIDTH_ZERO.test(ownProps(t.attrs)))) {
251
+ add(
252
+ "layout.defaults",
253
+ "minWidth={0} beside fillWidth — fillWidth already sets min-width: 0, omit minWidth",
254
+ "drop-minWidth-0",
255
+ );
256
+ }
257
+ const named = tags.map((t) => ownProps(t.attrs).match(DEFAULT_BORDER)).find(Boolean);
258
+ if (named) {
259
+ add(
260
+ "border.default",
261
+ `${named[1]}="neutral-alpha-weak" restates the default border — write bare ${named[1]}, and name a colour only to deviate`,
262
+ "default-border",
263
+ );
264
+ }
265
+
266
+ // A zIndex only means something against a sibling in the same stacking
267
+ // group, and that group is always anchored by something positioned.
268
+ if (/\bzIndex=/.test(source) && !/position=["'](?:absolute|fixed|sticky)["']/.test(source)) {
269
+ add(
270
+ "zIndex.scope",
271
+ "zIndex with nothing positioned absolute, fixed or sticky — zIndex belongs to an isolated stacking group, not a lone element",
272
+ );
273
+ }
274
+
275
+ if (/<Button[^>]*variant="primary"/.test(source)) {
276
+ add("layout.defaults", 'variant="primary" is the Button default — omit it');
277
+ }
278
+
279
+ // Scoped to the tag: `lines` is a different prop on Background and CodeBlock.
280
+ if (/<Textarea[^>]*\blines=\{?["']auto["']/.test(source)) {
281
+ add("layout.defaults", 'lines="auto" is the Textarea default — omit it');
282
+ }
283
+
284
+ if (hasLiteralColor(source)) {
285
+ add("color.tokens", "Use semantic color tokens, not hex/rgb");
286
+ }
287
+
288
+ if (/<img[\s>/]|<a[\s>/]|<button[\s>/]/.test(source)) {
289
+ add(
290
+ "components.primitives",
291
+ "Use Once UI components (Media, SmartLink, Button) instead of raw HTML",
292
+ );
293
+ }
294
+
295
+ for (const match of source.matchAll(/<Card\b[^>]*>/g)) {
296
+ if (/\b(href|onClick)=/.test(match[0])) continue;
297
+ // A card handed to a `trigger` prop is operated by whatever owns it
298
+ // (DropdownWrapper, Dialog), so it carries no handler of its own and is
299
+ // not the static-panel misuse this rule is looking for.
300
+ if (insidePropValue(source, match.index, "trigger")) continue;
301
+ add(
302
+ "Card.interactive",
303
+ "Card without href/onClick — use Column + surface recipe for static panels",
304
+ );
305
+ break;
306
+ }
307
+
308
+ const iconPropRe = /(?:prefixIcon|suffixIcon|name)=["']([^"']+)["']/g;
309
+ let iconMatch;
310
+ while ((iconMatch = iconPropRe.exec(source)) !== null) {
311
+ const name = iconMatch[1];
312
+ if (iconNames.size && !iconNames.has(name)) {
313
+ add("Icon.names", `Unknown icon name "${name}" — use IconName from spec.json`);
314
+ }
315
+ }
316
+
317
+ if (
318
+ /\b(?:delay|speed)=\{[^}]*\*\s*0?\.\d+/.test(source) ||
319
+ /\b(?:delay|speed)=\{\s*0?\.\d+\s*\}/.test(source)
320
+ ) {
321
+ add(
322
+ "RevealFx.delay",
323
+ "RevealFx delay and ShineFx speed are milliseconds — use index * 100, not index * 0.1",
324
+ );
325
+ }
326
+
327
+ if (/<Fade[^>]*>[\s\S]*<(Column|Row)[^>]*overflowY/.test(source)) {
328
+ add("Fade.edge", "Fade wrapping scroll content — use as absolute edge strip instead");
329
+ }
330
+
331
+ if (/style=\{\{[^}]*(gap|padding|margin|color|background):/.test(source)) {
332
+ add("spacing.tokens", "Use token props (gap, padding, background) instead of style={{}}");
333
+ }
334
+
335
+ return issues;
336
+ }
337
+
338
+ /**
339
+ * Rewrite the attribute text of opening tags, one at a time from a fresh scan,
340
+ * since a tag nested in a prop value overlaps its parent's attribute text.
341
+ */
342
+ function rewriteTags(source, edit) {
343
+ let out = source;
344
+ for (;;) {
345
+ const tag = openingTags(out).find((t) => edit(t.attrs, t.name) !== t.attrs);
346
+ if (!tag) return out;
347
+ out = out.slice(0, tag.start) + edit(tag.attrs, tag.name) + out.slice(tag.end);
348
+ }
349
+ }
350
+
351
+ function applyFixes(source, issues) {
352
+ let out = source;
353
+ for (const issue of issues) {
354
+ if (issue.fix === "fill") {
355
+ out = rewriteTags(out, (attrs) => collapsePair(attrs, FILL_WIDTH, FILL_HEIGHT, "fill"));
356
+ }
357
+ if (issue.fix === "center") {
358
+ out = rewriteTags(out, (attrs) =>
359
+ collapsePair(attrs, HORIZONTAL_CENTER, VERTICAL_CENTER, "center"),
360
+ );
361
+ }
362
+ if (issue.fix === "drop-fillWidth") {
363
+ out = rewriteTags(out, (attrs) =>
364
+ hasProp(attrs, "fillWidth") && LITERAL_MAX_WIDTH.test(ownProps(attrs))
365
+ ? replaceOwnProps(attrs, /\s+fillWidth(?=[\s/]|$)/, "")
366
+ : attrs,
367
+ );
368
+ }
369
+ if (issue.fix === "drop-minWidth-0") {
370
+ out = rewriteTags(out, (attrs) =>
371
+ hasProp(attrs, "fillWidth") && MIN_WIDTH_ZERO.test(ownProps(attrs))
372
+ ? replaceOwnProps(attrs, /\s+minWidth=(?:\{\s*0\s*\}|\{?["']0["']\}?)(?=[\s/]|$)/, "")
373
+ : attrs,
374
+ );
375
+ }
376
+ if (issue.fix === "default-border") {
377
+ out = rewriteTags(out, (attrs) =>
378
+ replaceOwnProps(
379
+ attrs,
380
+ /(border(?:Top|Right|Bottom|Left|X|Y)?)=["']neutral-alpha-weak["']/g,
381
+ "$1",
382
+ ),
383
+ );
384
+ }
385
+ }
386
+ return out;
387
+ }
388
+
389
+ function main() {
390
+ const spec = loadSpec();
391
+ const iconNames = parseIconNames(spec);
392
+ const fix = process.argv.includes("--fix");
393
+ const { source, file } = readInput(process.argv.slice(2));
394
+
395
+ const issues = validate(source, spec, iconNames);
396
+
397
+ if (issues.length === 0) {
398
+ console.log(`✓ ${file}: no mechanical issues`);
399
+ process.exit(0);
400
+ }
401
+
402
+ console.log(`✗ ${file}: ${issues.length} issue(s)`);
403
+ for (const issue of issues) {
404
+ console.log(` [${issue.rule}] ${issue.message}`);
405
+ }
406
+
407
+ if (fix) {
408
+ const fixed = applyFixes(source, issues);
409
+ if (fixed !== source && !process.argv.includes("--stdin")) {
410
+ const fileArg = process.argv.find((a) => a.endsWith(".tsx") || a.endsWith(".jsx"));
411
+ fs.writeFileSync(fileArg, fixed);
412
+ console.log(`Applied auto-fixes to ${fileArg}`);
413
+ }
414
+ }
415
+
416
+ process.exit(1);
417
+ }
418
+
419
+ // Importable for tests; the CLI runs only when this file is invoked directly.
420
+ if (require.main === module) main();
421
+
422
+ module.exports = {
423
+ validate,
424
+ applyFixes,
425
+ loadSpec,
426
+ parseIconNames,
427
+ hasLiteralColor,
428
+ insidePropValue,
429
+ openingTags,
430
+ ownProps,
431
+ };
@@ -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';
@@ -1 +1 @@
1
- {"version":3,"file":"og-utils.js","sourceRoot":"","sources":["../../src/server/og-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"og-utils.js","sourceRoot":"","sources":["../../src/server/og-utils.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,39 @@
1
+ /* GENERATED by scripts/generate-utilities.mjs — do not edit.
2
+ * The class matrix lives in scripts/utilities.spec.mjs; change it there and
3
+ * re-run `pnpm generate:utilities`. */
4
+
1
5
  $breakpoint-xs: 480px;
2
6
  $breakpoint-s: 768px;
3
7
  $breakpoint-m: 1024px;
4
8
  $breakpoint-l: 1440px;
9
+ $breakpoint-xl: 1441px;
5
10
 
6
11
  @mixin xs {
7
- @media (max-width: #{$breakpoint-xs}) {
12
+ @media (max-width: 480px) {
8
13
  @content;
9
14
  }
10
15
  }
11
16
 
12
17
  @mixin s {
13
- @media (max-width: #{$breakpoint-s}) {
18
+ @media (max-width: 768px) {
14
19
  @content;
15
20
  }
16
21
  }
17
22
 
18
23
  @mixin m {
19
- @media (max-width: #{$breakpoint-m}) {
24
+ @media (max-width: 1024px) {
20
25
  @content;
21
26
  }
22
27
  }
23
28
 
24
29
  @mixin l {
25
- @media (max-width: #{$breakpoint-l}) {
30
+ @media (max-width: 1440px) {
31
+ @content;
32
+ }
33
+ }
34
+
35
+ @mixin xl {
36
+ @media (min-width: 1441px) {
26
37
  @content;
27
38
  }
28
- }
39
+ }
@@ -6,6 +6,20 @@ class ResizeObserverMock {
6
6
  unobserve() { }
7
7
  disconnect() { }
8
8
  }
9
+ /** jsdom ships no IntersectionObserver; the canvas effects gate their animation loop on it. */
10
+ class IntersectionObserverMock {
11
+ constructor() {
12
+ this.root = null;
13
+ this.rootMargin = "";
14
+ this.thresholds = [];
15
+ }
16
+ observe() { }
17
+ unobserve() { }
18
+ disconnect() { }
19
+ takeRecords() {
20
+ return [];
21
+ }
22
+ }
9
23
  const installBrowserMocks = () => {
10
24
  if (!("ResizeObserver" in globalThis)) {
11
25
  Object.defineProperty(globalThis, "ResizeObserver", {
@@ -14,6 +28,13 @@ const installBrowserMocks = () => {
14
28
  value: ResizeObserverMock,
15
29
  });
16
30
  }
31
+ if (!("IntersectionObserver" in globalThis)) {
32
+ Object.defineProperty(globalThis, "IntersectionObserver", {
33
+ configurable: true,
34
+ writable: true,
35
+ value: IntersectionObserverMock,
36
+ });
37
+ }
17
38
  Object.defineProperty(window, "scrollTo", {
18
39
  configurable: true,
19
40
  writable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,kBAAkB;IACtB,OAAO,KAAI,CAAC;IACZ,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB;AAED,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,IAAI,CAAC,CAAC,gBAAgB,IAAI,UAAU,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE;YAClD,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;QACxC,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;YACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,mBAAmB,EAAE,CAAC;AAEtB,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE;QACpD,YAAY,EAAE,IAAI;QAClB,GAAG;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,GAAG,CAAC,KAAc;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,EAAE,CAAC;IACV,EAAE,CAAC,eAAe,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,kBAAkB;IACtB,OAAO,KAAI,CAAC;IACZ,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB;AAED,+FAA+F;AAC/F,MAAM,wBAAwB;IAA9B;QACW,SAAI,GAAG,IAAI,CAAC;QACZ,eAAU,GAAG,EAAE,CAAC;QAChB,eAAU,GAAa,EAAE,CAAC;IAOrC,CAAC;IANC,OAAO,KAAI,CAAC;IACZ,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;IACf,WAAW;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,GAAG,EAAE;IAC/B,IAAI,CAAC,CAAC,gBAAgB,IAAI,UAAU,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,EAAE;YAClD,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,kBAAkB;SAC1B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,sBAAsB,IAAI,UAAU,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,sBAAsB,EAAE;YACxD,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE;QACxC,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;QAC1C,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;YACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;YACvB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;YAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,mBAAmB,EAAE,CAAC;AAEtB,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;IACxC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE;QACpD,YAAY,EAAE,IAAI;QAClB,GAAG;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,GAAG,CAAC,KAAc;YAChB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,EAAE,CAAC;IACV,EAAE,CAAC,eAAe,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC"}