@signalflare-ai/ui 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/CHANGELOG.md +77 -1
  2. package/ai/component-registry.json +208 -550
  3. package/ai/component-registry.md +3042 -3115
  4. package/ai/schemas.ts +504 -96
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts.map +1 -1
  7. package/dist/{ai-actions-BdUZI3Gk.js → ai-actions-CBfz5XEf.js} +4 -4
  8. package/dist/{ai-actions-BdUZI3Gk.js.map → ai-actions-CBfz5XEf.js.map} +1 -1
  9. package/dist/{ai-agent-card-BR2NIYhi.js → ai-agent-card-CByAUe0q.js} +3 -3
  10. package/dist/ai-agent-card-CByAUe0q.js.map +1 -0
  11. package/dist/{ai-approval-Ba7mrKba.js → ai-approval-Ci8N70a7.js} +4 -3
  12. package/dist/{ai-approval-Ba7mrKba.js.map → ai-approval-Ci8N70a7.js.map} +1 -1
  13. package/dist/{ai-code-block-CZtoL73R.js → ai-code-block-P9TJHvaC.js} +37 -39
  14. package/dist/ai-code-block-P9TJHvaC.js.map +1 -0
  15. package/dist/{ai-conversation-Cc7WlaBg.js → ai-conversation-Qslfdi1t.js} +28 -42
  16. package/dist/ai-conversation-Qslfdi1t.js.map +1 -0
  17. package/dist/{ai-info-banner-C7EWPBj7.js → ai-info-banner-B_9vtGK3.js} +3 -3
  18. package/dist/{ai-info-banner-C7EWPBj7.js.map → ai-info-banner-B_9vtGK3.js.map} +1 -1
  19. package/dist/{ai-message-Bp7L68U_.js → ai-message-Ci3gwM7G.js} +6 -6
  20. package/dist/{ai-message-Bp7L68U_.js.map → ai-message-Ci3gwM7G.js.map} +1 -1
  21. package/dist/{ai-mission-header-TiCJfTNt.js → ai-mission-header-CaBc19-t.js} +2 -2
  22. package/dist/{ai-mission-header-TiCJfTNt.js.map → ai-mission-header-CaBc19-t.js.map} +1 -1
  23. package/dist/{ai-part-group-DNb9I446.js → ai-part-group-Dx1Mr92B.js} +5 -4
  24. package/dist/ai-part-group-Dx1Mr92B.js.map +1 -0
  25. package/dist/{ai-prompt-input-BVvov_KF.js → ai-prompt-input-Bm4XoSj2.js} +19 -17
  26. package/dist/ai-prompt-input-Bm4XoSj2.js.map +1 -0
  27. package/dist/{ai-question-GPPMk7YM.js → ai-question-OyJovxGe.js} +4 -3
  28. package/dist/{ai-question-GPPMk7YM.js.map → ai-question-OyJovxGe.js.map} +1 -1
  29. package/dist/{ai-reasoning-_feFjk56.js → ai-reasoning-BLfBXx3F.js} +9 -5
  30. package/dist/ai-reasoning-BLfBXx3F.js.map +1 -0
  31. package/dist/{ai-response-CvjV3WhV.js → ai-response-hbVCZJmo.js} +2 -2
  32. package/dist/{ai-response-CvjV3WhV.js.map → ai-response-hbVCZJmo.js.map} +1 -1
  33. package/dist/{ai-shimmer-j6lKIrjj.js → ai-shimmer-BamNMNK3.js} +2 -2
  34. package/dist/{ai-shimmer-j6lKIrjj.js.map → ai-shimmer-BamNMNK3.js.map} +1 -1
  35. package/dist/{ai-status-badge-CSU_QOdz.js → ai-status-badge-BZLczdkI.js} +2 -2
  36. package/dist/{ai-status-badge-CSU_QOdz.js.map → ai-status-badge-BZLczdkI.js.map} +1 -1
  37. package/dist/{ai-streaming-text-IWW1BhvZ.js → ai-streaming-text-DgYu64UH.js} +1 -1
  38. package/dist/{ai-streaming-text-IWW1BhvZ.js.map → ai-streaming-text-DgYu64UH.js.map} +1 -1
  39. package/dist/{ai-subagent-JA4iIMW3.js → ai-subagent-p97AI1h9.js} +3 -3
  40. package/dist/{ai-subagent-JA4iIMW3.js.map → ai-subagent-p97AI1h9.js.map} +1 -1
  41. package/dist/{ai-suggestion-BdO6MBuH.js → ai-suggestion-Bj6vF7CT.js} +3 -3
  42. package/dist/{ai-suggestion-BdO6MBuH.js.map → ai-suggestion-Bj6vF7CT.js.map} +1 -1
  43. package/dist/{ai-task-list-DYw4R1FA.js → ai-task-list-C_UQYpk9.js} +6 -4
  44. package/dist/{ai-task-list-DYw4R1FA.js.map → ai-task-list-C_UQYpk9.js.map} +1 -1
  45. package/dist/{ai-timeline-C42tOUT8.js → ai-timeline-CePL1LOU.js} +3 -3
  46. package/dist/ai-timeline-CePL1LOU.js.map +1 -0
  47. package/dist/{ai-tool-03jOTwUI.js → ai-tool-CfRcwmHT.js} +17 -11
  48. package/dist/ai-tool-CfRcwmHT.js.map +1 -0
  49. package/dist/{ai-usage-bar-BRf5LC_b.js → ai-usage-bar-45pVRCGA.js} +2 -2
  50. package/dist/{ai-usage-bar-BRf5LC_b.js.map → ai-usage-bar-45pVRCGA.js.map} +1 -1
  51. package/dist/{badge-BheXjMc8.js → badge-Beb-6uut.js} +5 -5
  52. package/dist/{badge-BheXjMc8.js.map → badge-Beb-6uut.js.map} +1 -1
  53. package/dist/{banner-CcsjunJg.js → banner-CCEksxPg.js} +3 -3
  54. package/dist/{banner-CcsjunJg.js.map → banner-CCEksxPg.js.map} +1 -1
  55. package/dist/{breadcrumbs-CouSyy3H.js → breadcrumbs-HiTmgaZ4.js} +5 -5
  56. package/dist/{breadcrumbs-CouSyy3H.js.map → breadcrumbs-HiTmgaZ4.js.map} +1 -1
  57. package/dist/{button-CO6-qPax.js → button-BHOgXJRU.js} +4 -4
  58. package/dist/{button-CO6-qPax.js.map → button-BHOgXJRU.js.map} +1 -1
  59. package/dist/catalog.js +1 -1
  60. package/dist/catalog.js.map +1 -1
  61. package/dist/{chart-Dg0qUeSc.js → chart-B9FfZdKs.js} +7 -7
  62. package/dist/chart-B9FfZdKs.js.map +1 -0
  63. package/dist/{checkbox-D7p4QKsC.js → checkbox-Cy_OCyay.js} +3 -3
  64. package/dist/{checkbox-D7p4QKsC.js.map → checkbox-Cy_OCyay.js.map} +1 -1
  65. package/dist/{clipboard-text-kLaMogs3.js → clipboard-text-CKSvNp9L.js} +6 -5
  66. package/dist/clipboard-text-CKSvNp9L.js.map +1 -0
  67. package/dist/{cn-YROP2_ox.js → cn-CmAOpn49.js} +2 -2
  68. package/dist/{cn-YROP2_ox.js.map → cn-CmAOpn49.js.map} +1 -1
  69. package/dist/{code-BN8InC0G.js → code-JsQz-0G_.js} +4 -4
  70. package/dist/{code-BN8InC0G.js.map → code-JsQz-0G_.js.map} +1 -1
  71. package/dist/{collapsible-D_ueZ0jz.js → collapsible-1kOZ-89L.js} +2 -2
  72. package/dist/{collapsible-D_ueZ0jz.js.map → collapsible-1kOZ-89L.js.map} +1 -1
  73. package/dist/{combobox-B7TOK0U2.js → combobox-CQwDmqgA.js} +4 -4
  74. package/dist/{combobox-B7TOK0U2.js.map → combobox-CQwDmqgA.js.map} +1 -1
  75. package/dist/command-line/cli.js +3 -3
  76. package/dist/{command-palette-CuNUyJca.js → command-palette-Bkuv3e6o.js} +20 -5
  77. package/dist/command-palette-Bkuv3e6o.js.map +1 -0
  78. package/dist/components/ai-actions.js +1 -1
  79. package/dist/components/ai-agent-card.js +1 -1
  80. package/dist/components/ai-approval.js +1 -1
  81. package/dist/components/ai-code-block.js +1 -1
  82. package/dist/components/ai-conversation.js +1 -1
  83. package/dist/components/ai-info-banner.js +1 -1
  84. package/dist/components/ai-message.js +1 -1
  85. package/dist/components/ai-mission-header.js +1 -1
  86. package/dist/components/ai-part-group.js +1 -1
  87. package/dist/components/ai-prompt-input.js +1 -1
  88. package/dist/components/ai-question.js +1 -1
  89. package/dist/components/ai-reasoning.js +1 -1
  90. package/dist/components/ai-response.js +1 -1
  91. package/dist/components/ai-shimmer.js +1 -1
  92. package/dist/components/ai-status-badge.js +1 -1
  93. package/dist/components/ai-streaming-text.js +1 -1
  94. package/dist/components/ai-subagent.js +1 -1
  95. package/dist/components/ai-suggestion.js +1 -1
  96. package/dist/components/ai-task-list.js +1 -1
  97. package/dist/components/ai-timeline.js +1 -1
  98. package/dist/components/ai-tool.js +1 -1
  99. package/dist/components/ai-usage-bar.js +1 -1
  100. package/dist/components/badge.js +1 -1
  101. package/dist/components/banner.js +1 -1
  102. package/dist/components/breadcrumbs.js +1 -1
  103. package/dist/components/button.js +1 -1
  104. package/dist/components/chart.js +2 -2
  105. package/dist/components/checkbox.js +1 -1
  106. package/dist/components/clipboard-text.js +1 -1
  107. package/dist/components/code.js +1 -1
  108. package/dist/components/collapsible.js +1 -1
  109. package/dist/components/combobox.js +1 -1
  110. package/dist/components/command-palette.js +1 -1
  111. package/dist/components/data-grid.js +1 -1
  112. package/dist/components/date-picker.js +1 -1
  113. package/dist/components/date-range-picker.js +1 -1
  114. package/dist/components/dialog.js +1 -1
  115. package/dist/components/dropdown.js +1 -1
  116. package/dist/components/empty.js +1 -1
  117. package/dist/components/field.js +1 -1
  118. package/dist/components/filters.js +1 -1
  119. package/dist/components/flow.js +1 -1
  120. package/dist/components/grid.js +1 -1
  121. package/dist/components/input.js +2 -2
  122. package/dist/components/label.js +1 -1
  123. package/dist/components/layer-card.js +1 -1
  124. package/dist/components/link.js +3 -3
  125. package/dist/components/link.js.map +1 -1
  126. package/dist/components/loader.js +2 -2
  127. package/dist/components/menubar.js +1 -1
  128. package/dist/components/meter.js +1 -1
  129. package/dist/components/pagination.js +1 -1
  130. package/dist/components/popover.js +1 -1
  131. package/dist/components/radio.js +1 -1
  132. package/dist/components/select.js +1 -1
  133. package/dist/components/sensitive-input.js +1 -1
  134. package/dist/components/sidebar.js +1 -1
  135. package/dist/components/signalflare-ai-logo.js +1 -1
  136. package/dist/components/sparkline.js +1 -1
  137. package/dist/components/stat-card.js +1 -1
  138. package/dist/components/surface.js +1 -1
  139. package/dist/components/switch.js +1 -1
  140. package/dist/components/table.js +1 -1
  141. package/dist/components/tabs.js +1 -1
  142. package/dist/components/text-roll.js +1 -1
  143. package/dist/components/text.js +1 -1
  144. package/dist/components/theme-toggle.js +1 -1
  145. package/dist/components/toast.js +1 -1
  146. package/dist/components/tooltip.js +1 -1
  147. package/dist/components/use-agent-harness.js +1 -1
  148. package/dist/{data-grid-DGHmU0w3.js → data-grid-DDSFMHud.js} +136 -53
  149. package/dist/data-grid-DDSFMHud.js.map +1 -0
  150. package/dist/{date-picker--ox89RBy.js → date-picker-O34AqG3f.js} +2 -2
  151. package/dist/{date-picker--ox89RBy.js.map → date-picker-O34AqG3f.js.map} +1 -1
  152. package/dist/{date-range-picker-DVa7QBqE.js → date-range-picker-YKYvum_r.js} +29 -39
  153. package/dist/{date-range-picker-DVa7QBqE.js.map → date-range-picker-YKYvum_r.js.map} +1 -1
  154. package/dist/{dialog-Bv1oSFOd.js → dialog-DYqu4aDO.js} +3 -3
  155. package/dist/{dialog-Bv1oSFOd.js.map → dialog-DYqu4aDO.js.map} +1 -1
  156. package/dist/{dist-B6iWiWwp.js → dist-6AtBsaJE.js} +153 -47
  157. package/dist/dist-6AtBsaJE.js.map +1 -0
  158. package/dist/{dropdown-B_nrGXjV.js → dropdown-XzbnRLYR.js} +15 -5
  159. package/dist/dropdown-XzbnRLYR.js.map +1 -0
  160. package/dist/{echart-CdOUaT-r.js → echart-DGBIVAv1.js} +23 -57
  161. package/dist/{echart-CdOUaT-r.js.map → echart-DGBIVAv1.js.map} +1 -1
  162. package/dist/{empty-DZnN0zKX.js → empty-C1tAkawe.js} +6 -6
  163. package/dist/{empty-DZnN0zKX.js.map → empty-C1tAkawe.js.map} +1 -1
  164. package/dist/{field-B_yVof52.js → field-DBpFzzBS.js} +3 -3
  165. package/dist/{field-B_yVof52.js.map → field-DBpFzzBS.js.map} +1 -1
  166. package/dist/{filters-cpJCY21R.js → filters-SmEl93za.js} +10 -10
  167. package/dist/filters-SmEl93za.js.map +1 -0
  168. package/dist/{flow-B4v198ot.js → flow-BLzgbq1T.js} +6 -6
  169. package/dist/flow-BLzgbq1T.js.map +1 -0
  170. package/dist/genui.js +2 -2
  171. package/dist/genui.js.map +1 -1
  172. package/dist/{grid-CEd64Lnh.js → grid-CifjQL-5.js} +2 -2
  173. package/dist/{grid-CEd64Lnh.js.map → grid-CifjQL-5.js.map} +1 -1
  174. package/dist/{highlight-to-react-D0Yav4jk.js → highlight-to-react-DN9dUCS2.js} +9 -15
  175. package/dist/highlight-to-react-DN9dUCS2.js.map +1 -0
  176. package/dist/index.js +71 -71
  177. package/dist/index.js.map +1 -1
  178. package/dist/{input-ClB_E4Lb.js → input-COmx2M_R.js} +5 -5
  179. package/dist/{input-ClB_E4Lb.js.map → input-COmx2M_R.js.map} +1 -1
  180. package/dist/{input-B2bbijRh.js → input-GkfMQZC_.js} +3 -3
  181. package/dist/{input-B2bbijRh.js.map → input-GkfMQZC_.js.map} +1 -1
  182. package/dist/{label-DUv_urO1.js → label-CiGZ464N.js} +3 -3
  183. package/dist/{label-DUv_urO1.js.map → label-CiGZ464N.js.map} +1 -1
  184. package/dist/{layer-card-BK7eYfwn.js → layer-card-8l8GuLQr.js} +2 -2
  185. package/dist/{layer-card-BK7eYfwn.js.map → layer-card-8l8GuLQr.js.map} +1 -1
  186. package/dist/{layout-DJHMMap2.js → layout-CWBE0qwx.js} +258 -154
  187. package/dist/layout-CWBE0qwx.js.map +1 -0
  188. package/dist/{link-provider-BUZKXaNE.js → link-provider-BSn8YJon.js} +2 -2
  189. package/dist/link-provider-BSn8YJon.js.map +1 -0
  190. package/dist/{loader-DAcc-Uag.js → loader-BEMz8pJO.js} +1 -1
  191. package/dist/{loader-DAcc-Uag.js.map → loader-BEMz8pJO.js.map} +1 -1
  192. package/dist/{measured-text-BI3dTJmH.js → measured-text-CXkdw9Yr.js} +45 -30
  193. package/dist/measured-text-CXkdw9Yr.js.map +1 -0
  194. package/dist/{menubar-Cxf3xeAt.js → menubar-CoOr4ocj.js} +3 -3
  195. package/dist/{menubar-Cxf3xeAt.js.map → menubar-CoOr4ocj.js.map} +1 -1
  196. package/dist/{meter-BFFe9l5b.js → meter-Pf_VOl59.js} +2 -2
  197. package/dist/{meter-BFFe9l5b.js.map → meter-Pf_VOl59.js.map} +1 -1
  198. package/dist/{pagination-yS372Tr4.js → pagination-DSY279Ta.js} +2 -2
  199. package/dist/{pagination-yS372Tr4.js.map → pagination-DSY279Ta.js.map} +1 -1
  200. package/dist/{popover-SRoJaCZr.js → popover-BY-e9co1.js} +2 -2
  201. package/dist/{popover-SRoJaCZr.js.map → popover-BY-e9co1.js.map} +1 -1
  202. package/dist/{radio-BcwhwYNB.js → radio-DZwL13j0.js} +2 -2
  203. package/dist/{radio-BcwhwYNB.js.map → radio-DZwL13j0.js.map} +1 -1
  204. package/dist/{select-DMhdoHMa.js → select-BFifYqHA.js} +6 -6
  205. package/dist/{select-DMhdoHMa.js.map → select-BFifYqHA.js.map} +1 -1
  206. package/dist/{sensitive-input-CJUpIRal.js → sensitive-input-DHLZcM73.js} +4 -4
  207. package/dist/{sensitive-input-CJUpIRal.js.map → sensitive-input-DHLZcM73.js.map} +1 -1
  208. package/dist/{sidebar-D4zrlYpn.js → sidebar-odGsdvG4.js} +6 -7
  209. package/dist/sidebar-odGsdvG4.js.map +1 -0
  210. package/dist/{signalflare-ai-logo-Bipogceq.js → signalflare-ai-logo-CNaDT_w8.js} +2 -2
  211. package/dist/{signalflare-ai-logo-Bipogceq.js.map → signalflare-ai-logo-CNaDT_w8.js.map} +1 -1
  212. package/dist/{skeleton-line-CH1-h6e2.js → skeleton-line-CxxYVTO2.js} +2 -2
  213. package/dist/{skeleton-line-CH1-h6e2.js.map → skeleton-line-CxxYVTO2.js.map} +1 -1
  214. package/dist/{sparkline-DHmgj1d0.js → sparkline-BQ-4j2W2.js} +2 -2
  215. package/dist/{sparkline-DHmgj1d0.js.map → sparkline-BQ-4j2W2.js.map} +1 -1
  216. package/dist/src/blocks/agent-harness/agent-harness.tsx +11 -11
  217. package/dist/src/blocks/commander/commander.tsx +15 -15
  218. package/dist/src/blocks/map-block/map-block.d.ts.map +1 -1
  219. package/dist/src/blocks/map-block/map-block.tsx +11 -7
  220. package/dist/src/components/ai-approval/ai-approval.d.ts.map +1 -1
  221. package/dist/src/components/ai-code-block/ai-code-block.d.ts +14 -13
  222. package/dist/src/components/ai-code-block/ai-code-block.d.ts.map +1 -1
  223. package/dist/src/components/ai-conversation/ai-conversation.d.ts.map +1 -1
  224. package/dist/src/components/ai-part-group/ai-part-group.d.ts.map +1 -1
  225. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  226. package/dist/src/components/ai-prompt-input/controller.d.ts.map +1 -1
  227. package/dist/src/components/ai-prompt-input/types.d.ts.map +1 -1
  228. package/dist/src/components/ai-question/ai-question.d.ts.map +1 -1
  229. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
  230. package/dist/src/components/ai-response/ai-response.d.ts.map +1 -1
  231. package/dist/src/components/ai-subagent/ai-subagent.d.ts.map +1 -1
  232. package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -1
  233. package/dist/src/components/chart/echart.d.ts.map +1 -1
  234. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
  235. package/dist/src/components/data-grid/data-grid.d.ts +2 -1
  236. package/dist/src/components/data-grid/data-grid.d.ts.map +1 -1
  237. package/dist/src/components/data-grid/features.d.ts +20 -0
  238. package/dist/src/components/data-grid/features.d.ts.map +1 -0
  239. package/dist/src/components/data-grid/types.d.ts +38 -7
  240. package/dist/src/components/data-grid/types.d.ts.map +1 -1
  241. package/dist/src/components/filters/filters.d.ts.map +1 -1
  242. package/dist/src/components/flow/use-children.d.ts +1 -1
  243. package/dist/src/components/link/link.d.ts.map +1 -1
  244. package/dist/src/components/sidebar/sidebar.d.ts +1 -1
  245. package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts.map +1 -1
  246. package/dist/src/components/text/text.d.ts +2 -1
  247. package/dist/src/components/text/text.d.ts.map +1 -1
  248. package/dist/src/components/text-roll/text-roll.d.ts.map +1 -1
  249. package/dist/src/components/theme-toggle/theme-toggle.d.ts.map +1 -1
  250. package/dist/src/components/toast/toast.d.ts.map +1 -1
  251. package/dist/src/utils/highlight-to-react.d.ts.map +1 -1
  252. package/dist/src/utils/measured-text.d.ts.map +1 -1
  253. package/dist/src/utils/use-measured-text.d.ts.map +1 -1
  254. package/dist/{stat-card-Ew-ofzEm.js → stat-card-Bspk4XFr.js} +4 -4
  255. package/dist/stat-card-Bspk4XFr.js.map +1 -0
  256. package/dist/styles/sf-standalone.css +1 -1
  257. package/dist/styles/theme-fedramp.css +3 -12
  258. package/dist/styles/theme-minimal.css +26 -104
  259. package/dist/styles/theme-sf.css +37 -142
  260. package/dist/{surface-DGwRlC0o.js → surface-CWdSFVUx.js} +3 -3
  261. package/dist/{surface-DGwRlC0o.js.map → surface-CWdSFVUx.js.map} +1 -1
  262. package/dist/{switch-BxAMfHdt.js → switch-TA4cByCJ.js} +5 -5
  263. package/dist/switch-TA4cByCJ.js.map +1 -0
  264. package/dist/{table-BBeAtYVZ.js → table-BM8JBGBs.js} +3 -3
  265. package/dist/{table-BBeAtYVZ.js.map → table-BM8JBGBs.js.map} +1 -1
  266. package/dist/{tabs-CeHu7Scn.js → tabs-bnH2vGLv.js} +2 -2
  267. package/dist/{tabs-CeHu7Scn.js.map → tabs-bnH2vGLv.js.map} +1 -1
  268. package/dist/{text-Cqryz7rk.js → text-iQ0YUFNg.js} +4 -5
  269. package/dist/{text-Cqryz7rk.js.map → text-iQ0YUFNg.js.map} +1 -1
  270. package/dist/{text-roll-Ch52hcQj.js → text-roll-C3U2jd2u.js} +5 -2
  271. package/dist/text-roll-C3U2jd2u.js.map +1 -0
  272. package/dist/{theme-toggle-LDfIKEqx.js → theme-toggle-BTVxD-fD.js} +10 -9
  273. package/dist/theme-toggle-BTVxD-fD.js.map +1 -0
  274. package/dist/{toast-CaFQNYng.js → toast-CgZVaAkw.js} +3 -3
  275. package/dist/{toast-CaFQNYng.js.map → toast-CgZVaAkw.js.map} +1 -1
  276. package/dist/{tooltip-g9lFsvcT.js → tooltip-uobk6Oh-.js} +3 -3
  277. package/dist/{tooltip-g9lFsvcT.js.map → tooltip-uobk6Oh-.js.map} +1 -1
  278. package/dist/{use-agent-harness-BTcNJdw4.js → use-agent-harness-Dl8w6X5O.js} +3 -3
  279. package/dist/{use-agent-harness-BTcNJdw4.js.map → use-agent-harness-Dl8w6X5O.js.map} +1 -1
  280. package/dist/utils.js +3 -3
  281. package/package.json +27 -25
  282. package/scripts/component-registry/discovery.ts +11 -10
  283. package/scripts/component-registry/example-cleanup.ts +8 -8
  284. package/scripts/component-registry/index.ts +6 -6
  285. package/scripts/component-registry/schema-generator.ts +1 -1
  286. package/scripts/component-registry/sub-components.ts +35 -23
  287. package/scripts/component-registry/utils.ts +11 -11
  288. package/scripts/component-registry/variant-parser.ts +17 -15
  289. package/scripts/convert-demos-to-stories.ts +5 -5
  290. package/scripts/theme-generator/config.ts +1 -5
  291. package/scripts/theme-generator/generate-css.ts +1 -1
  292. package/scripts/theme-generator/migrate.ts +3 -3
  293. package/dist/ai-agent-card-BR2NIYhi.js.map +0 -1
  294. package/dist/ai-code-block-CZtoL73R.js.map +0 -1
  295. package/dist/ai-conversation-Cc7WlaBg.js.map +0 -1
  296. package/dist/ai-part-group-DNb9I446.js.map +0 -1
  297. package/dist/ai-prompt-input-BVvov_KF.js.map +0 -1
  298. package/dist/ai-reasoning-_feFjk56.js.map +0 -1
  299. package/dist/ai-timeline-C42tOUT8.js.map +0 -1
  300. package/dist/ai-tool-03jOTwUI.js.map +0 -1
  301. package/dist/chart-Dg0qUeSc.js.map +0 -1
  302. package/dist/clipboard-text-kLaMogs3.js.map +0 -1
  303. package/dist/command-palette-CuNUyJca.js.map +0 -1
  304. package/dist/data-grid-DGHmU0w3.js.map +0 -1
  305. package/dist/dist-B6iWiWwp.js.map +0 -1
  306. package/dist/dropdown-B_nrGXjV.js.map +0 -1
  307. package/dist/filters-cpJCY21R.js.map +0 -1
  308. package/dist/flow-B4v198ot.js.map +0 -1
  309. package/dist/highlight-to-react-D0Yav4jk.js.map +0 -1
  310. package/dist/layout-DJHMMap2.js.map +0 -1
  311. package/dist/link-provider-BUZKXaNE.js.map +0 -1
  312. package/dist/measured-text-BI3dTJmH.js.map +0 -1
  313. package/dist/sidebar-D4zrlYpn.js.map +0 -1
  314. package/dist/stat-card-Ew-ofzEm.js.map +0 -1
  315. package/dist/switch-BxAMfHdt.js.map +0 -1
  316. package/dist/text-roll-Ch52hcQj.js.map +0 -1
  317. package/dist/theme-toggle-LDfIKEqx.js.map +0 -1
package/ai/schemas.ts CHANGED
@@ -100,8 +100,12 @@ export const ActionSchema = z.object({
100
100
  name: z.string(),
101
101
  params: z.record(z.string(), DynamicValueSchema).optional(),
102
102
  confirm: ActionConfirmSchema.optional(),
103
- onSuccess: z.object({ set: z.record(z.string(), DynamicValueSchema) }).optional(),
104
- onError: z.object({ set: z.record(z.string(), DynamicValueSchema) }).optional(),
103
+ onSuccess: z
104
+ .object({ set: z.record(z.string(), DynamicValueSchema) })
105
+ .optional(),
106
+ onError: z
107
+ .object({ set: z.record(z.string(), DynamicValueSchema) })
108
+ .optional(),
105
109
  });
106
110
 
107
111
  export type Action = z.infer<typeof ActionSchema>;
@@ -111,7 +115,9 @@ export type Action = z.infer<typeof ActionSchema>;
111
115
  // =============================================================================
112
116
 
113
117
  export const AiActionsPropsSchema = z.object({
114
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
118
+ children: z
119
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
120
+ .optional(),
115
121
  className: z.string().optional(),
116
122
  id: z.string().optional(),
117
123
  lang: z.string().optional(),
@@ -148,7 +154,9 @@ export const AiApprovalPropsSchema = z.object({
148
154
  approveLabel: z.string().optional(), // Label for the approve button. Default: `"Approve"`.
149
155
  rejectLabel: z.string().optional(), // Label for the reject button. Default: `"Reject"`.
150
156
  showFeedback: z.boolean().optional(), // Show a text input for rejection feedback. Default: `false`.
151
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
157
+ children: z
158
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
159
+ .optional(),
152
160
  className: z.string().optional(),
153
161
  id: z.string().optional(),
154
162
  lang: z.string().optional(),
@@ -158,7 +166,9 @@ export const AiCodeBlockPropsSchema = z.object({
158
166
  code: z.string(), // The raw code string to display and make copyable.
159
167
  language: z.string().optional(), // Language identifier for syntax highlighting (display only, no highlighting applied).
160
168
  showLineNumbers: z.boolean().optional(), // Show line numbers.
161
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
169
+ children: z
170
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
171
+ .optional(),
162
172
  className: z.string().optional(),
163
173
  id: z.string().optional(),
164
174
  lang: z.string().optional(),
@@ -166,7 +176,9 @@ export const AiCodeBlockPropsSchema = z.object({
166
176
  });
167
177
 
168
178
  export const AiConversationPropsSchema = z.object({
169
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
179
+ children: z
180
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
181
+ .optional(),
170
182
  className: z.string().optional(),
171
183
  id: z.string().optional(),
172
184
  lang: z.string().optional(),
@@ -176,7 +188,9 @@ export const AiConversationPropsSchema = z.object({
176
188
  export const AiInfoBannerPropsSchema = z.object({
177
189
  level: z.enum(["info", "error", "change"]).optional(), // Banner level controls icon and color treatment.
178
190
  icon: z.unknown().optional(), // Custom icon override.
179
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
191
+ children: z
192
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
193
+ .optional(),
180
194
  className: z.string().optional(),
181
195
  id: z.string().optional(),
182
196
  lang: z.string().optional(),
@@ -185,7 +199,9 @@ export const AiInfoBannerPropsSchema = z.object({
185
199
 
186
200
  export const AiMessagePropsSchema = z.object({
187
201
  from: z.enum(["user", "assistant", "system"]), // Message sender role — controls layout and group class.
188
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
202
+ children: z
203
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
204
+ .optional(),
189
205
  className: z.string().optional(),
190
206
  id: z.string().optional(),
191
207
  lang: z.string().optional(),
@@ -205,14 +221,18 @@ export const AiMissionHeaderPropsSchema = z.object({
205
221
  className: z.string().optional(),
206
222
  id: z.string().optional(),
207
223
  lang: z.string().optional(),
208
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
224
+ children: z
225
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
226
+ .optional(),
209
227
  });
210
228
 
211
229
  export const AiPartGroupPropsSchema = z.object({
212
230
  groupKey: z.string(), // Stable identifier — usually the parent message id. Required so the group can persist its frozen snapshot across re-mounts (scroll-back into a virtualized list re-renders without restarting animations).
213
231
  complete: z.boolean().optional(), // Set to `true` once the parent stream has finished. Triggers the group to snapshot its current children and from then on render only the static collapsed summary — ephemeral children never re-mount.
214
232
  title: z.string().optional(), // Title shown in the collapsed summary line. Falls back to the first reasoning text snippet, then to a step count.
215
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
233
+ children: z
234
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
235
+ .optional(),
216
236
  className: z.string().optional(),
217
237
  id: z.string().optional(),
218
238
  lang: z.string().optional(),
@@ -227,7 +247,9 @@ export const AiQuestionPropsSchema = z.object({
227
247
  allowCustom: z.boolean().optional(), // Allow freeform text input (custom answer). Default: `true`. When options are provided, this adds a text field below them.
228
248
  icon: z.unknown().optional(), // Custom icon for the question header.
229
249
  answeredWith: z.string().optional(), // The answer that was submitted (shown when `status="answered"`).
230
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
250
+ children: z
251
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
252
+ .optional(),
231
253
  className: z.string().optional(),
232
254
  id: z.string().optional(),
233
255
  lang: z.string().optional(),
@@ -249,12 +271,16 @@ export const AiReasoningPropsSchema = z.object({
249
271
  id: z.string().optional(),
250
272
  lang: z.string().optional(),
251
273
  title: z.string().optional(),
252
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
274
+ children: z
275
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
276
+ .optional(),
253
277
  });
254
278
 
255
279
  export const AiResponsePropsSchema = z.object({
256
280
  className: z.string().optional(), // Additional CSS classes
257
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
281
+ children: z
282
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
283
+ .optional(), // Child elements
258
284
  });
259
285
 
260
286
  export const AiShimmerPropsSchema = z.object({
@@ -270,7 +296,9 @@ export const AiStatusBadgePropsSchema = z.object({
270
296
  label: z.string(), // Label text displayed in the badge.
271
297
  status: z.enum(["idle", "running", "success", "error"]).optional(), // Current status — determines the status icon on the right.
272
298
  info: z.string().optional(), // Additional info text (e.g. "2/3") shown after the label.
273
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
299
+ children: z
300
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
301
+ .optional(),
274
302
  className: z.string().optional(),
275
303
  id: z.string().optional(),
276
304
  lang: z.string().optional(),
@@ -279,7 +307,9 @@ export const AiStatusBadgePropsSchema = z.object({
279
307
 
280
308
  export const AiStreamingTextPropsSchema = z.object({
281
309
  className: z.string().optional(), // Additional CSS classes
282
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
310
+ children: z
311
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
312
+ .optional(), // Child elements
283
313
  });
284
314
 
285
315
  export const AiSubagentPropsSchema = z.object({
@@ -291,7 +321,9 @@ export const AiSubagentPropsSchema = z.object({
291
321
  icon: z.unknown().optional(), // Custom icon. Defaults to `RobotIcon`.
292
322
  defaultExpanded: z.boolean().optional(), // Whether the subagent content is expanded by default.
293
323
  open: z.boolean().optional(), // Controlled open state.
294
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
324
+ children: z
325
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
326
+ .optional(),
295
327
  className: z.string().optional(),
296
328
  id: z.string().optional(),
297
329
  lang: z.string().optional(),
@@ -299,7 +331,9 @@ export const AiSubagentPropsSchema = z.object({
299
331
  });
300
332
 
301
333
  export const AiSuggestionsPropsSchema = z.object({
302
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
334
+ children: z
335
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
336
+ .optional(),
303
337
  className: z.string().optional(),
304
338
  id: z.string().optional(),
305
339
  lang: z.string().optional(),
@@ -311,7 +345,9 @@ export const AiTaskListPropsSchema = z.object({
311
345
  title: z.string().optional(), // Optional title above the task list.
312
346
  icon: z.unknown().optional(), // Custom icon for the title area.
313
347
  showProgress: z.boolean().optional(), // Show a progress summary (e.g. "3 / 7 done"). Default: `true`.
314
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
348
+ children: z
349
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
350
+ .optional(),
315
351
  className: z.string().optional(),
316
352
  id: z.string().optional(),
317
353
  lang: z.string().optional(),
@@ -323,7 +359,9 @@ export const AiTimelinePropsSchema = z.object({
323
359
  showNowMarker: z.boolean().optional(), // Whether to show a pulsing "now" marker at the live edge.
324
360
  nowMs: z.number().optional(), // Current timestamp in ms. Used to render the "now" marker and open-ended block widths. Pass a stable `useState` value to prevent hydration shifts. When omitted, `Date.now()` is called at render time (fine for live views driven by a ticking parent, not suitable for SSR).
325
361
  density: z.enum(["comfortable", "compact"]).optional(), // Lane density variant.
326
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Children should be `AiTimelineLane` components.
362
+ children: z
363
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
364
+ .optional(), // Children should be `AiTimelineLane` components.
327
365
  className: z.string().optional(),
328
366
  id: z.string().optional(),
329
367
  lang: z.string().optional(),
@@ -343,7 +381,9 @@ export const AiToolCallPropsSchema = z.object({
343
381
  id: z.string().optional(),
344
382
  lang: z.string().optional(),
345
383
  title: z.string().optional(),
346
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
384
+ children: z
385
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
386
+ .optional(),
347
387
  });
348
388
 
349
389
  export const AiUsageBarPropsSchema = z.object({
@@ -353,7 +393,9 @@ export const AiUsageBarPropsSchema = z.object({
353
393
  cost: z.number().optional(), // Estimated cost in USD.
354
394
  modelId: z.string().optional(), // Model ID being used (shown as label).
355
395
  icon: z.unknown().optional(), // Custom icon. Defaults to `LightningIcon`.
356
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
396
+ children: z
397
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
398
+ .optional(),
357
399
  className: z.string().optional(),
358
400
  id: z.string().optional(),
359
401
  lang: z.string().optional(),
@@ -361,38 +403,73 @@ export const AiUsageBarPropsSchema = z.object({
361
403
  });
362
404
 
363
405
  export const BadgePropsSchema = z.object({
364
- variant: z.enum(["primary", "secondary", "destructive", "outline", "beta", "success", "warning", "info", "ghost"]).optional(), // Visual style of the badge. - `"primary"` — High-emphasis badge for important labels - `"secondary"` — Subtle badge for secondary information - `"destructive"` — Error or danger state indicator - `"outline"` — Bordered badge with transparent background - `"beta"` — Dashed-border badge for beta/experimental features - `"success"` — Positive status indicator - `"warning"` — Caution or attention indicator - `"info"` — Informational badge - `"ghost"` — Text-only badge with no background or border
406
+ variant: z
407
+ .enum([
408
+ "primary",
409
+ "secondary",
410
+ "destructive",
411
+ "outline",
412
+ "beta",
413
+ "success",
414
+ "warning",
415
+ "info",
416
+ "ghost",
417
+ ])
418
+ .optional(), // Visual style of the badge. - `"primary"` — High-emphasis badge for important labels - `"secondary"` — Subtle badge for secondary information - `"destructive"` — Error or danger state indicator - `"outline"` — Bordered badge with transparent background - `"beta"` — Dashed-border badge for beta/experimental features - `"success"` — Positive status indicator - `"warning"` — Caution or attention indicator - `"info"` — Informational badge - `"ghost"` — Text-only badge with no background or border
365
419
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
366
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content rendered inside the badge.
420
+ children: z
421
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
422
+ .optional(), // Content rendered inside the badge.
367
423
  icon: z.unknown().optional(), // Icon component rendered alongside the text.
368
424
  iconPosition: z.enum(["left", "right"]).optional(), // Position of the icon relative to the text.
369
425
  loading: z.boolean().optional(), // Shows a loading spinner, replacing the icon slot.
370
426
  dot: z.enum(["green", "red", "yellow", "blue", "gray"]).optional(), // Renders a small colored status dot before the text.
371
- tooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Wraps the badge in a Tooltip with this content. Requires a TooltipProvider ancestor.
427
+ tooltip: z
428
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
429
+ .optional(), // Wraps the badge in a Tooltip with this content. Requires a TooltipProvider ancestor.
372
430
  href: z.string().optional(),
373
431
  });
374
432
 
375
433
  export const BannerPropsSchema = z.object({
376
- icon: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Icon element rendered before the banner text (e.g. from `@phosphor-icons/react`).
434
+ icon: z
435
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
436
+ .optional(), // Icon element rendered before the banner text (e.g. from `@phosphor-icons/react`).
377
437
  text: z.string().optional(),
378
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Banner message content. Accepts strings or custom React elements.
438
+ children: z
439
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
440
+ .optional(), // Banner message content. Accepts strings or custom React elements.
379
441
  variant: z.enum(["default", "alert", "error"]).optional(), // Visual style of the banner. - `"default"` — Informational blue banner for general messages - `"alert"` — Warning yellow banner for cautionary messages - `"error"` — Error red banner for critical issues
380
442
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
381
443
  });
382
444
 
383
445
  export const BreadcrumbsPropsSchema = z.object({
384
446
  size: z.enum(["sm", "base"]).optional(), // Size of the breadcrumbs. - `"sm"` — Compact breadcrumbs for dense UIs - `"base"` — Default breadcrumbs size
385
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
447
+ children: z
448
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
449
+ .optional(),
386
450
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
387
451
  });
388
452
 
389
453
  export const ButtonPropsSchema = z.object({
390
454
  shape: z.enum(["base", "square", "circle"]).optional(),
391
455
  size: z.enum(["xs", "sm", "base", "lg"]).optional(),
392
- variant: z.enum(["primary", "secondary", "ghost", "destructive", "secondary-destructive", "outline"]).optional(),
393
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
456
+ variant: z
457
+ .enum([
458
+ "primary",
459
+ "secondary",
460
+ "ghost",
461
+ "destructive",
462
+ "secondary-destructive",
463
+ "outline",
464
+ ])
465
+ .optional(),
466
+ children: z
467
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
468
+ .optional(),
394
469
  className: z.string().optional(),
395
- icon: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Icon from `@phosphor-icons/react` or a React element. Rendered before children.
470
+ icon: z
471
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
472
+ .optional(), // Icon from `@phosphor-icons/react` or a React element. Rendered before children.
396
473
  loading: z.boolean().optional(), // Shows a loading spinner and disables interaction.
397
474
  id: z.string().optional(),
398
475
  lang: z.string().optional(),
@@ -405,8 +482,12 @@ export const ButtonPropsSchema = z.object({
405
482
 
406
483
  export const CheckboxPropsSchema = z.object({
407
484
  variant: z.enum(["default", "error"]).optional(), // Visual variant: "default" or "error" for validation failures (visual only, no error text)
408
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the checkbox (enables built-in Field wrapper) - can be a string or any React node
409
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
485
+ label: z
486
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
487
+ .optional(), // Label content for the checkbox (enables built-in Field wrapper) - can be a string or any React node
488
+ labelTooltip: z
489
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
490
+ .optional(), // Tooltip content to display next to the label via an info icon
410
491
  controlFirst: z.boolean().optional(), // When true (default), checkbox appears before label. When false, label appears before checkbox.
411
492
  checked: z.boolean().optional(), // Whether the checkbox is checked (controlled)
412
493
  indeterminate: z.boolean().optional(), // Whether the checkbox is in indeterminate state
@@ -433,7 +514,9 @@ export const CodePropsSchema = z.object({
433
514
  });
434
515
 
435
516
  export const CollapsiblePropsSchema = z.object({
436
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
517
+ children: z
518
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
519
+ .optional(),
437
520
  label: z.string(), // Text label displayed in the trigger button
438
521
  open: z.boolean().optional(), // Whether the collapsible content is visible
439
522
  className: z.string().optional(), // Additional CSS classes for the content panel
@@ -444,12 +527,20 @@ export const ComboboxPropsSchema = z.object({
444
527
  inputSide: z.enum(["right", "top"]).optional(), // Position of the text input relative to chips in multi-select mode. - `"right"` — Input inline to the right of chips - `"top"` — Input above chips
445
528
  items: z.array(z.unknown()), // Array of items to display in the dropdown
446
529
  value: z.array(z.unknown()).optional(), // Currently selected value(s)
447
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Combobox content (trigger, content, items)
530
+ children: z
531
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
532
+ .optional(), // Combobox content (trigger, content, items)
448
533
  className: z.string().optional(), // Additional CSS classes
449
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the combobox (enables Field wrapper) - can be a string or any React node
534
+ label: z
535
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
536
+ .optional(), // Label content for the combobox (enables Field wrapper) - can be a string or any React node
450
537
  required: z.boolean().optional(), // Whether the combobox is required
451
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
452
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the combobox
538
+ labelTooltip: z
539
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
540
+ .optional(), // Tooltip content to display next to the label via an info icon
541
+ description: z
542
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
543
+ .optional(), // Helper text displayed below the combobox
453
544
  error: z.unknown().optional(), // Error message or validation error object
454
545
  onValueChange: z.unknown().optional(), // Callback when selection changes
455
546
  multiple: z.boolean().optional(), // Allow multiple selections
@@ -458,18 +549,24 @@ export const ComboboxPropsSchema = z.object({
458
549
 
459
550
  export const CommandPalettePropsSchema = z.object({
460
551
  open: z.boolean(), // Whether the dialog is open
461
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child content - typically one or more Panel components
552
+ children: z
553
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
554
+ .optional(), // Child content - typically one or more Panel components
462
555
  });
463
556
 
464
557
  export const DataGridPropsSchema = z.object({
465
558
  layout: z.enum(["auto", "fixed"]).optional(),
466
559
  className: z.string().optional(), // Additional CSS classes
467
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
560
+ children: z
561
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
562
+ .optional(), // Child elements
468
563
  });
469
564
 
470
565
  export const DatePickerPropsSchema = z.object({
471
566
  className: z.string().optional(), // Additional CSS classes
472
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
567
+ children: z
568
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
569
+ .optional(), // Child elements
473
570
  });
474
571
 
475
572
  export const DateRangePickerPropsSchema = z.object({
@@ -483,7 +580,9 @@ export const DateRangePickerPropsSchema = z.object({
483
580
 
484
581
  export const DialogPropsSchema = z.object({
485
582
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
486
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Dialog content (typically Title, Description, Close, and action buttons).
583
+ children: z
584
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
585
+ .optional(), // Dialog content (typically Title, Description, Close, and action buttons).
487
586
  size: z.enum(["base", "sm", "lg", "xl"]).optional(), // Dialog width. - `"sm"` — Small (min 288px) for simple confirmations - `"base"` — Default (min 384px) - `"lg"` — Large (min 512px) for complex content - `"xl"` — Extra large (min 768px) for detailed views
488
587
  });
489
588
 
@@ -493,29 +592,43 @@ export const DropdownMenuPropsSchema = z.object({
493
592
 
494
593
  export const EmptyPropsSchema = z.object({
495
594
  size: z.enum(["sm", "base", "lg"]).optional(), // Size of the empty state container. - `"sm"` — Compact empty state for smaller containers - `"base"` — Default empty state size - `"lg"` — Large empty state for prominent placement
496
- icon: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Decorative icon displayed above the title (e.g. from `@phosphor-icons/react`).
595
+ icon: z
596
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
597
+ .optional(), // Decorative icon displayed above the title (e.g. from `@phosphor-icons/react`).
497
598
  title: z.string(), // Primary heading text for the empty state.
498
599
  description: z.string().optional(), // Secondary description text displayed below the title.
499
600
  commandLine: z.string().optional(), // Shell command displayed in a copyable code block.
500
- contents: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Additional content (buttons, links) rendered below the description.
601
+ contents: z
602
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
603
+ .optional(), // Additional content (buttons, links) rendered below the description.
501
604
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
502
605
  });
503
606
 
504
607
  export const FieldPropsSchema = z.object({
505
608
  controlFirst: z.boolean().optional(), // When `true`, places the control before the label (for checkbox/switch layouts).
506
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // The form control element(s) to wrap (Input, Select, Checkbox, etc.).
507
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // The label content — can be a string or any React node.
609
+ children: z
610
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
611
+ .optional(), // The form control element(s) to wrap (Input, Select, Checkbox, etc.).
612
+ label: z
613
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
614
+ .optional(), // The label content — can be a string or any React node.
508
615
  required: z.boolean().optional(), // When explicitly `false`, shows gray "(optional)" text after the label. When `true` or `undefined`, no indicator is shown.
509
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content displayed next to the label via an info icon.
616
+ labelTooltip: z
617
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
618
+ .optional(), // Tooltip content displayed next to the label via an info icon.
510
619
  error: z.unknown().optional(), // Validation error with a message and a browser `ValidityState` match key.
511
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the control (hidden when `error` is present).
620
+ description: z
621
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
622
+ .optional(), // Helper text displayed below the control (hidden when `error` is present).
512
623
  });
513
624
 
514
625
  export const FiltersPropsSchema = z.object({
515
626
  filters: z.array(z.unknown()), // Active filters array
516
627
  fields: z.array(z.unknown()), // Available field configurations
517
628
  size: z.enum(["sm", "default", "lg"]).optional(), // Size variant for filter pills
518
- trigger: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Custom trigger element (replaces default "Add Filter" button)
629
+ trigger: z
630
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
631
+ .optional(), // Custom trigger element (replaces default "Add Filter" button)
519
632
  showSearchInput: z.boolean().optional(), // Whether to show a search input in the add filter menu
520
633
  allowMultiple: z.boolean().optional(), // Whether to allow multiple filters on the same field
521
634
  enableShortcut: z.boolean().optional(), // Whether to enable keyboard shortcut (Cmd/Ctrl + K) to open add filter
@@ -527,20 +640,40 @@ export const FiltersPropsSchema = z.object({
527
640
  });
528
641
 
529
642
  export const GridPropsSchema = z.object({
530
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Grid items to render.
643
+ children: z
644
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
645
+ .optional(), // Grid items to render.
531
646
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
532
647
  id: z.string().optional(),
533
648
  lang: z.string().optional(),
534
649
  title: z.string().optional(),
535
650
  mobileDivider: z.boolean().optional(), // Show dividers between grid items on mobile (only works with `"4up"` variant).
536
651
  gap: z.enum(["none", "sm", "base", "lg"]).optional(), // Gap size between grid items. - `"none"` — No gap - `"sm"` — 12px gap - `"base"` — Responsive gap (8px → 24px → 32px) - `"lg"` — 32px gap
537
- variant: z.enum(["2up", "side-by-side", "2-1", "1-2", "1-3up", "3up", "4up", "6up", "1-2-4up"]).optional(), // Responsive column layout variant. - `"2up"` — 1 col → 2 cols at md - `"side-by-side"` — Always 2 cols - `"2-1"` — 66%/33% split at md - `"1-2"` — 33%/66% split at md - `"3up"` — 1 → 2 → 3 cols - `"4up"` — 1 → 2 → 3 → 4 cols - `"6up"` — 2 → 3 → 4 → 6 cols - `"1-2-4up"` — 1 → 2 → 4 cols
652
+ variant: z
653
+ .enum([
654
+ "2up",
655
+ "side-by-side",
656
+ "2-1",
657
+ "1-2",
658
+ "1-3up",
659
+ "3up",
660
+ "4up",
661
+ "6up",
662
+ "1-2-4up",
663
+ ])
664
+ .optional(), // Responsive column layout variant. - `"2up"` — 1 col → 2 cols at md - `"side-by-side"` — Always 2 cols - `"2-1"` — 66%/33% split at md - `"1-2"` — 33%/66% split at md - `"3up"` — 1 → 2 → 3 cols - `"4up"` — 1 → 2 → 3 → 4 cols - `"6up"` — 2 → 3 → 4 → 6 cols - `"1-2-4up"` — 1 → 2 → 4 cols
538
665
  });
539
666
 
540
667
  export const InputPropsSchema = z.object({
541
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the input (enables Field wrapper) - can be a string or any React node
542
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
543
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the input
668
+ label: z
669
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
670
+ .optional(), // Label content for the input (enables Field wrapper) - can be a string or any React node
671
+ labelTooltip: z
672
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
673
+ .optional(), // Tooltip content to display next to the label via an info icon
674
+ description: z
675
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
676
+ .optional(), // Helper text displayed below the input
544
677
  error: z.unknown().optional(), // Error message or validation error object
545
678
  size: z.enum(["xs", "sm", "base", "lg"]).optional(), // Input size. - `"xs"` — Extra small for compact UIs - `"sm"` — Small for secondary fields - `"base"` — Default size - `"lg"` — Large for prominent fields
546
679
  variant: z.enum(["default", "error"]).optional(), // Visual variant. - `"default"` — Standard input - `"error"` — Error state for validation failures
@@ -549,23 +682,31 @@ export const InputPropsSchema = z.object({
549
682
  export const InputAreaPropsSchema = z.object({});
550
683
 
551
684
  export const LabelPropsSchema = z.object({
552
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // The label content — can be a string or any React node.
685
+ children: z
686
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
687
+ .optional(), // The label content — can be a string or any React node.
553
688
  showOptional: z.boolean().optional(), // When `true`, shows gray "(optional)" text after the label.
554
- tooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content displayed next to the label via an info icon.
689
+ tooltip: z
690
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
691
+ .optional(), // Tooltip content displayed next to the label via an info icon.
555
692
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
556
693
  htmlFor: z.string().optional(), // The id of the form element this label is associated with
557
694
  asContent: z.boolean().optional(), // When true, only renders the inline content (indicators, tooltip) without the outer label element with font styling. Useful when composed inside another label element that already provides the text styling.
558
695
  });
559
696
 
560
697
  export const LayerCardPropsSchema = z.object({
561
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
698
+ children: z
699
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
700
+ .optional(),
562
701
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
563
702
  });
564
703
 
565
704
  export const LinkPropsSchema = z.object({
566
705
  variant: z.enum(["inline", "current", "plain"]).optional(), // Visual style of the link. - `"inline"` — Inline text link that flows with content - `"current"` — Link that inherits color from parent text - `"plain"` — Link without underline decoration
567
706
  to: z.string().optional(),
568
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
707
+ children: z
708
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
709
+ .optional(),
569
710
  className: z.string().optional(),
570
711
  id: z.string().optional(),
571
712
  lang: z.string().optional(),
@@ -577,8 +718,22 @@ export const LinkPropsSchema = z.object({
577
718
  ping: z.string().optional(),
578
719
  target: z.unknown().optional(),
579
720
  type: z.string().optional(),
580
- referrerPolicy: z.enum(["", "no-referrer", "no-referrer-when-downgrade", "origin", "origin-when-cross-origin", "same-origin", "strict-origin", "strict-origin-when-cross-origin", "unsafe-url"]).optional(),
581
- render: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Allows you to replace the component's HTML element with a different tag, or compose it with another component. Accepts a `ReactElement` or a function that returns the element to render.
721
+ referrerPolicy: z
722
+ .enum([
723
+ "",
724
+ "no-referrer",
725
+ "no-referrer-when-downgrade",
726
+ "origin",
727
+ "origin-when-cross-origin",
728
+ "same-origin",
729
+ "strict-origin",
730
+ "strict-origin-when-cross-origin",
731
+ "unsafe-url",
732
+ ])
733
+ .optional(),
734
+ render: z
735
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
736
+ .optional(), // Allows you to replace the component's HTML element with a different tag, or compose it with another component. Accepts a `ReactElement` or a function that returns the element to render.
582
737
  });
583
738
 
584
739
  export const LoaderPropsSchema = z.object({
@@ -621,8 +776,12 @@ export const PromptInputPropsSchema = z.object({
621
776
  globalDrop: z.boolean().optional(), // When true, accept drops anywhere on document. Default false.
622
777
  maxFiles: z.number().optional(), // Maximum number of attached files.
623
778
  maxFileSize: z.number().optional(), // Maximum file size in bytes.
624
- backLayer: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content rendered in the collapsible back layer (e.g. HITL approvals, task lists). When provided the prompt input is wrapped in a LayerCard shell with a header row containing a chevron toggle. Use `PromptInputBackLayer` to compose structured content for this slot.
625
- backLayerTitle: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Header content shown in the back layer header row. Strings render as plain text; pass JSX to compose with icons/spinners/badges. Defaults to `"Context"`.
779
+ backLayer: z
780
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
781
+ .optional(), // Content rendered in the collapsible back layer (e.g. HITL approvals, task lists). When provided the prompt input is wrapped in a LayerCard shell with a header row containing a chevron toggle. Use `PromptInputBackLayer` to compose structured content for this slot.
782
+ backLayerTitle: z
783
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
784
+ .optional(), // Header content shown in the back layer header row. Strings render as plain text; pass JSX to compose with icons/spinners/badges. Defaults to `"Context"`.
626
785
  backLayerStatus: z.enum(["idle", "running", "error"]).optional(), // Optional status indicator rendered next to the title. `"running"` shows a small spinner; `"error"` shows an inline error icon. Use this instead of composing JSX into `backLayerTitle` for the common case of an agent doing work.
627
786
  backLayerOpen: z.boolean().optional(), // Controls whether the back layer is visible. Pair with `onBackLayerOpenChange` for a controlled pattern.
628
787
  autoOpenBackLayerWhen: z.boolean().optional(), // Automatically opens the back layer when this condition is true. Useful for showing pending approvals/questions without manual toggle.
@@ -630,15 +789,21 @@ export const PromptInputPropsSchema = z.object({
630
789
  id: z.string().optional(),
631
790
  lang: z.string().optional(),
632
791
  title: z.string().optional(),
633
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
792
+ children: z
793
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
794
+ .optional(),
634
795
  });
635
796
 
636
797
  export const RadioPropsSchema = z.object({
637
798
  legend: z.string(), // Legend text for the group (required for accessibility)
638
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child Radio.Item components
799
+ children: z
800
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
801
+ .optional(), // Child Radio.Item components
639
802
  orientation: z.enum(["vertical", "horizontal"]).optional(), // Layout direction of the radio items
640
803
  error: z.string().optional(), // Error message for the group
641
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text for the group
804
+ description: z
805
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
806
+ .optional(), // Helper text for the group
642
807
  value: z.string().optional(), // Value of the radio that should be selected (controlled)
643
808
  disabled: z.boolean().optional(), // Whether all radios in the group are disabled
644
809
  controlPosition: z.enum(["start", "end"]).optional(), // Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio
@@ -648,16 +813,24 @@ export const RadioPropsSchema = z.object({
648
813
 
649
814
  export const SelectPropsSchema = z.object({
650
815
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
651
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the select (enables Field wrapper) — can be a string or any React node.
816
+ label: z
817
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
818
+ .optional(), // Label content for the select (enables Field wrapper) — can be a string or any React node.
652
819
  hideLabel: z.boolean().optional(), // Visually hide the label while keeping it accessible to screen readers. Set to `false` to show a visible label above the select via the Field wrapper.
653
820
  placeholder: z.string().optional(), // Placeholder text shown when no value is selected.
654
821
  loading: z.boolean().optional(), // When `true`, shows a skeleton loader in place of the selected value.
655
822
  disabled: z.boolean().optional(), // Whether the select is disabled.
656
823
  required: z.boolean().optional(), // Whether the select is required. When `false`, shows "(optional)" text.
657
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content displayed next to the label via an info icon.
824
+ labelTooltip: z
825
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
826
+ .optional(), // Tooltip content displayed next to the label via an info icon.
658
827
  value: z.string().optional(), // Currently selected value (controlled mode).
659
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // `Select.Option` elements to render in the dropdown.
660
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the select.
828
+ children: z
829
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
830
+ .optional(), // `Select.Option` elements to render in the dropdown.
831
+ description: z
832
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
833
+ .optional(), // Helper text displayed below the select.
661
834
  error: z.unknown().optional(), // Error message string or validation error object with `match` key.
662
835
  onValueChange: z.unknown().optional(), // Callback when selection changes
663
836
  defaultValue: z.string().optional(), // Initial value for uncontrolled mode
@@ -679,13 +852,21 @@ export const SensitiveInputPropsSchema = z.object({
679
852
  id: z.string().optional(),
680
853
  lang: z.string().optional(),
681
854
  title: z.string().optional(),
682
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
855
+ children: z
856
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
857
+ .optional(),
683
858
  value: z.string().optional(), // Controlled value
684
859
  size: z.enum(["xs", "sm", "base", "lg"]).optional(), // Size of the input. - `"xs"` — Extra small for compact UIs - `"sm"` — Small for secondary fields - `"base"` — Default input size - `"lg"` — Large for prominent fields
685
860
  variant: z.enum(["default", "error"]).optional(), // Style variant of the input. - `"default"` — Default input appearance - `"error"` — Error state for validation failures
686
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the input (enables Field wrapper and sets masked state label) - can be a string or any React node
687
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
688
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the input
861
+ label: z
862
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
863
+ .optional(), // Label content for the input (enables Field wrapper and sets masked state label) - can be a string or any React node
864
+ labelTooltip: z
865
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
866
+ .optional(), // Tooltip content to display next to the label via an info icon
867
+ description: z
868
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
869
+ .optional(), // Helper text displayed below the input
689
870
  error: z.unknown().optional(), // Error message or validation error object
690
871
  });
691
872
 
@@ -699,12 +880,16 @@ export const SidebarPropsSchema = z.object({
699
880
  defaultWidth: z.number().optional(), // Initial width in pixels when resizable.
700
881
  minWidth: z.number().optional(), // Minimum width in pixels when resizing.
701
882
  maxWidth: z.number().optional(), // Maximum width in pixels when resizing.
702
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content — typically `<Sidebar>` + main content.
883
+ children: z
884
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
885
+ .optional(), // Content — typically `<Sidebar>` + main content.
703
886
  className: z.string().optional(), // Additional CSS classes for the wrapper div.
704
887
  });
705
888
 
706
889
  export const SignalFlareAILogoPropsSchema = z.object({
707
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
890
+ children: z
891
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
892
+ .optional(),
708
893
  className: z.string().optional(),
709
894
  height: z.unknown().optional(),
710
895
  id: z.string().optional(),
@@ -718,7 +903,23 @@ export const SignalFlareAILogoPropsSchema = z.object({
718
903
  accentHeight: z.unknown().optional(),
719
904
  accumulate: z.enum(["none", "sum"]).optional(),
720
905
  additive: z.enum(["replace", "sum"]).optional(),
721
- alignmentBaseline: z.enum(["auto", "baseline", "before-edge", "text-before-edge", "middle", "central", "after-edge", "text-after-edge", "ideographic", "alphabetic", "hanging", "mathematical", "inherit"]).optional(),
906
+ alignmentBaseline: z
907
+ .enum([
908
+ "auto",
909
+ "baseline",
910
+ "before-edge",
911
+ "text-before-edge",
912
+ "middle",
913
+ "central",
914
+ "after-edge",
915
+ "text-after-edge",
916
+ "ideographic",
917
+ "alphabetic",
918
+ "hanging",
919
+ "mathematical",
920
+ "inherit",
921
+ ])
922
+ .optional(),
722
923
  allowReorder: z.enum(["no", "yes"]).optional(),
723
924
  alphabetic: z.unknown().optional(),
724
925
  amplitude: z.unknown().optional(),
@@ -742,7 +943,9 @@ export const SignalFlareAILogoPropsSchema = z.object({
742
943
  clipPathUnits: z.unknown().optional(),
743
944
  clipRule: z.unknown().optional(),
744
945
  colorInterpolation: z.unknown().optional(),
745
- colorInterpolationFilters: z.enum(["auto", "sRGB", "linearRGB", "inherit"]).optional(),
946
+ colorInterpolationFilters: z
947
+ .enum(["auto", "sRGB", "linearRGB", "inherit"])
948
+ .optional(),
746
949
  colorProfile: z.unknown().optional(),
747
950
  colorRendering: z.unknown().optional(),
748
951
  contentScriptType: z.unknown().optional(),
@@ -757,7 +960,23 @@ export const SignalFlareAILogoPropsSchema = z.object({
757
960
  direction: z.unknown().optional(),
758
961
  display: z.unknown().optional(),
759
962
  divisor: z.unknown().optional(),
760
- dominantBaseline: z.enum(["auto", "use-script", "no-change", "reset-size", "ideographic", "alphabetic", "hanging", "mathematical", "central", "middle", "text-after-edge", "text-before-edge", "inherit"]).optional(),
963
+ dominantBaseline: z
964
+ .enum([
965
+ "auto",
966
+ "use-script",
967
+ "no-change",
968
+ "reset-size",
969
+ "ideographic",
970
+ "alphabetic",
971
+ "hanging",
972
+ "mathematical",
973
+ "central",
974
+ "middle",
975
+ "text-after-edge",
976
+ "text-before-edge",
977
+ "inherit",
978
+ ])
979
+ .optional(),
761
980
  dur: z.unknown().optional(),
762
981
  dx: z.unknown().optional(),
763
982
  dy: z.unknown().optional(),
@@ -962,16 +1181,26 @@ export const SignalFlareAILogoPropsSchema = z.object({
962
1181
 
963
1182
  export const SparklinePropsSchema = z.object({
964
1183
  className: z.string().optional(), // Additional CSS classes
965
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1184
+ children: z
1185
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1186
+ .optional(), // Child elements
966
1187
  });
967
1188
 
968
1189
  export const StatCardPropsSchema = z.object({
969
1190
  size: z.enum(["sm", "base"]).optional(), // Size of the card. Defaults to `"base"`.
970
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Short descriptive label (e.g. `"Active users"`).
971
- value: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Primary value to emphasise (pre-formatted).
972
- hint: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Optional secondary text displayed under the value.
1191
+ label: z
1192
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1193
+ .optional(), // Short descriptive label (e.g. `"Active users"`).
1194
+ value: z
1195
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1196
+ .optional(), // Primary value to emphasise (pre-formatted).
1197
+ hint: z
1198
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1199
+ .optional(), // Optional secondary text displayed under the value.
973
1200
  delta: z.unknown().optional(), // Optional change indicator (arrow + number + label).
974
- trend: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Optional content slot rendered on the right-hand side — typically a `Sparkline` showing the metric's trend.
1201
+ trend: z
1202
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1203
+ .optional(), // Optional content slot rendered on the right-hand side — typically a `Sparkline` showing the metric's trend.
975
1204
  loading: z.boolean().optional(), // When `true`, renders a skeleton placeholder in place of value + delta.
976
1205
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
977
1206
  });
@@ -979,13 +1208,19 @@ export const StatCardPropsSchema = z.object({
979
1208
  export const SurfacePropsSchema = z.object({
980
1209
  as: z.unknown().optional(), // The HTML element type to render as (e.g. `"div"`, `"section"`, `"article"`).
981
1210
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
982
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content rendered inside the surface.
1211
+ children: z
1212
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1213
+ .optional(), // Content rendered inside the surface.
983
1214
  });
984
1215
 
985
1216
  export const SwitchPropsSchema = z.object({
986
1217
  variant: z.enum(["default", "error"]).optional(), // Visual variant: "default" or "error" for validation failures (visual only, no error text)
987
- label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes.
988
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
1218
+ label: z
1219
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1220
+ .optional(), // Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes.
1221
+ labelTooltip: z
1222
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1223
+ .optional(), // Tooltip content to display next to the label via an info icon
989
1224
  required: z.boolean().optional(), // Whether the switch is required. When explicitly false, shows "(optional)" text after the label.
990
1225
  controlFirst: z.boolean().optional(), // When true (default), switch appears before label. When false, label appears before switch.
991
1226
  size: z.enum(["sm", "base", "lg"]).optional(),
@@ -1006,7 +1241,9 @@ export const TablePropsSchema = z.object({
1006
1241
  layout: z.enum(["auto", "fixed"]).optional(),
1007
1242
  variant: z.enum(["default", "selected"]).optional(),
1008
1243
  className: z.string().optional(), // Additional CSS classes
1009
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1244
+ children: z
1245
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1246
+ .optional(), // Child elements
1010
1247
  });
1011
1248
 
1012
1249
  export const TabsPropsSchema = z.object({
@@ -1022,11 +1259,25 @@ export const TabsPropsSchema = z.object({
1022
1259
  });
1023
1260
 
1024
1261
  export const TextPropsSchema = z.object({
1025
- variant: z.enum(["heading1", "heading2", "heading3", "body", "secondary", "success", "error", "mono", "mono-secondary"]).optional(), // Text style variant. Determines color, font, and weight. - `"heading1"` — Large page title (30px, semibold) - `"heading2"` — Section title (24px, semibold) - `"heading3"` — Subsection title (18px, semibold) - `"body"` — Default body text - `"secondary"` — Muted text for secondary information - `"success"` — Success state text - `"error"` — Error state text - `"mono"` — Monospace text for code - `"mono-secondary"` — Muted monospace text
1262
+ variant: z
1263
+ .enum([
1264
+ "heading1",
1265
+ "heading2",
1266
+ "heading3",
1267
+ "body",
1268
+ "secondary",
1269
+ "success",
1270
+ "error",
1271
+ "mono",
1272
+ "mono-secondary",
1273
+ ])
1274
+ .optional(), // Text style variant. Determines color, font, and weight. - `"heading1"` — Large page title (30px, semibold) - `"heading2"` — Section title (24px, semibold) - `"heading3"` — Subsection title (18px, semibold) - `"body"` — Default body text - `"secondary"` — Muted text for secondary information - `"success"` — Success state text - `"error"` — Error state text - `"mono"` — Monospace text for code - `"mono-secondary"` — Muted monospace text
1026
1275
  size: z.enum(["xs", "sm", "base", "lg"]).optional(), // Text size (only applies to body/secondary/success/error variants). - `"xs"` — 12px - `"sm"` — 14px - `"base"` — 16px - `"lg"` — 18px
1027
1276
  bold: z.boolean().optional(), // Whether to use bold font weight (only applies to body variants).
1028
1277
  as: z.unknown().optional(), // The HTML element type to render as (e.g. `"span"`, `"p"`, `"h1"`). Auto-selected based on variant if omitted.
1029
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Text content.
1278
+ children: z
1279
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1280
+ .optional(), // Text content.
1030
1281
  wrap: z.unknown().optional(), // Text layout strategy using pretext-driven measurement. - `"natural"` — No measurement, normal browser wrapping (default for body). - `"balance"` — Even wrapping, smallest maxWidth without adding lines (default for headings). - `"shrink"` — Hug widest natural line (maxWidth = line width). Good for chat bubbles. - `"reserve"` — Reserve height based on line count. Good for streaming text.
1031
1282
  reserveLines: z.number().optional(), // For `wrap="reserve"`: reserve this many lines of height. If omitted, measures current content to determine line count.
1032
1283
  });
@@ -1051,14 +1302,24 @@ export const ThemeTogglePropsSchema = z.object({
1051
1302
  export const ToastyPropsSchema = z.object({
1052
1303
  variant: z.enum(["default", "error", "warning"]).optional(),
1053
1304
  className: z.string().optional(), // Additional CSS classes
1054
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1305
+ children: z
1306
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1307
+ .optional(), // Child elements
1055
1308
  });
1056
1309
 
1057
1310
  export const TooltipPropsSchema = z.object({
1058
1311
  side: z.enum(["top", "bottom", "left", "right"]).optional(),
1059
1312
  className: z.string().optional(), // Additional CSS classes
1060
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1061
- content: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]), // Content to display in the tooltip
1313
+ children: z
1314
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1315
+ .optional(), // Child elements
1316
+ content: z.union([
1317
+ z.string(),
1318
+ z.number(),
1319
+ z.boolean(),
1320
+ z.null(),
1321
+ DynamicValueSchema,
1322
+ ]), // Content to display in the tooltip
1062
1323
  });
1063
1324
 
1064
1325
  // =============================================================================
@@ -1068,7 +1329,74 @@ export const TooltipPropsSchema = z.object({
1068
1329
  /**
1069
1330
  * All valid component type names
1070
1331
  */
1071
- export type KumoComponentType = "AiActions" | "AiAgentCard" | "AiApproval" | "AiCodeBlock" | "AiConversation" | "AiInfoBanner" | "AiMessage" | "AiMissionHeader" | "AiPartGroup" | "AiQuestion" | "AiReasoning" | "AiResponse" | "AiShimmer" | "AiStatusBadge" | "AiStreamingText" | "AiSubagent" | "AiSuggestions" | "AiTaskList" | "AiTimeline" | "AiToolCall" | "AiUsageBar" | "Badge" | "Banner" | "Breadcrumbs" | "Button" | "Checkbox" | "ClipboardText" | "Code" | "Collapsible" | "Combobox" | "CommandPalette" | "DataGrid" | "DatePicker" | "DateRangePicker" | "Dialog" | "DropdownMenu" | "Empty" | "Field" | "Filters" | "Grid" | "Input" | "InputArea" | "Label" | "LayerCard" | "Link" | "Loader" | "MenuBar" | "Meter" | "Pagination" | "Popover" | "PromptInput" | "Radio" | "Select" | "SensitiveInput" | "Sidebar" | "SignalFlareAILogo" | "Sparkline" | "StatCard" | "Surface" | "Switch" | "Table" | "Tabs" | "Text" | "TextRoll" | "ThemeToggle" | "Toasty" | "Tooltip";
1332
+ export type KumoComponentType =
1333
+ | "AiActions"
1334
+ | "AiAgentCard"
1335
+ | "AiApproval"
1336
+ | "AiCodeBlock"
1337
+ | "AiConversation"
1338
+ | "AiInfoBanner"
1339
+ | "AiMessage"
1340
+ | "AiMissionHeader"
1341
+ | "AiPartGroup"
1342
+ | "AiQuestion"
1343
+ | "AiReasoning"
1344
+ | "AiResponse"
1345
+ | "AiShimmer"
1346
+ | "AiStatusBadge"
1347
+ | "AiStreamingText"
1348
+ | "AiSubagent"
1349
+ | "AiSuggestions"
1350
+ | "AiTaskList"
1351
+ | "AiTimeline"
1352
+ | "AiToolCall"
1353
+ | "AiUsageBar"
1354
+ | "Badge"
1355
+ | "Banner"
1356
+ | "Breadcrumbs"
1357
+ | "Button"
1358
+ | "Checkbox"
1359
+ | "ClipboardText"
1360
+ | "Code"
1361
+ | "Collapsible"
1362
+ | "Combobox"
1363
+ | "CommandPalette"
1364
+ | "DataGrid"
1365
+ | "DatePicker"
1366
+ | "DateRangePicker"
1367
+ | "Dialog"
1368
+ | "DropdownMenu"
1369
+ | "Empty"
1370
+ | "Field"
1371
+ | "Filters"
1372
+ | "Grid"
1373
+ | "Input"
1374
+ | "InputArea"
1375
+ | "Label"
1376
+ | "LayerCard"
1377
+ | "Link"
1378
+ | "Loader"
1379
+ | "MenuBar"
1380
+ | "Meter"
1381
+ | "Pagination"
1382
+ | "Popover"
1383
+ | "PromptInput"
1384
+ | "Radio"
1385
+ | "Select"
1386
+ | "SensitiveInput"
1387
+ | "Sidebar"
1388
+ | "SignalFlareAILogo"
1389
+ | "Sparkline"
1390
+ | "StatCard"
1391
+ | "Surface"
1392
+ | "Switch"
1393
+ | "Table"
1394
+ | "Tabs"
1395
+ | "Text"
1396
+ | "TextRoll"
1397
+ | "ThemeToggle"
1398
+ | "Toasty"
1399
+ | "Tooltip";
1072
1400
 
1073
1401
  export const KumoComponentTypeSchema = z.enum([
1074
1402
  "AiActions",
@@ -1249,10 +1577,22 @@ export type UITree = z.infer<typeof UITreeSchema>;
1249
1577
  /**
1250
1578
  * Validate an element's props against its component schema
1251
1579
  */
1252
- export function validateElementProps(element: UIElement): SafeParseResult<unknown> {
1253
- const schema = ComponentPropsSchemas[element.type as keyof typeof ComponentPropsSchemas];
1580
+ export function validateElementProps(
1581
+ element: UIElement
1582
+ ): SafeParseResult<unknown> {
1583
+ const schema =
1584
+ ComponentPropsSchemas[element.type as keyof typeof ComponentPropsSchemas];
1254
1585
  if (!schema) {
1255
- return { success: false, error: new z.ZodError([{ code: 'custom', message: `Unknown component type: ${element.type}`, path: ['type'] }]) };
1586
+ return {
1587
+ success: false,
1588
+ error: new z.ZodError([
1589
+ {
1590
+ code: "custom",
1591
+ message: `Unknown component type: ${element.type}`,
1592
+ path: ["type"],
1593
+ },
1594
+ ]),
1595
+ };
1256
1596
  }
1257
1597
  return schema.safeParse(element.props);
1258
1598
  }
@@ -1267,4 +1607,72 @@ export function validateUITree(tree: unknown): SafeParseResult<UITree> {
1267
1607
  /**
1268
1608
  * List of all component names (for catalog generation)
1269
1609
  */
1270
- export const SF_COMPONENT_NAMES = ["AiActions", "AiAgentCard", "AiApproval", "AiCodeBlock", "AiConversation", "AiInfoBanner", "AiMessage", "AiMissionHeader", "AiPartGroup", "AiQuestion", "AiReasoning", "AiResponse", "AiShimmer", "AiStatusBadge", "AiStreamingText", "AiSubagent", "AiSuggestions", "AiTaskList", "AiTimeline", "AiToolCall", "AiUsageBar", "Badge", "Banner", "Breadcrumbs", "Button", "Checkbox", "ClipboardText", "Code", "Collapsible", "Combobox", "CommandPalette", "DataGrid", "DatePicker", "DateRangePicker", "Dialog", "DropdownMenu", "Empty", "Field", "Filters", "Grid", "Input", "InputArea", "Label", "LayerCard", "Link", "Loader", "MenuBar", "Meter", "Pagination", "Popover", "PromptInput", "Radio", "Select", "SensitiveInput", "Sidebar", "SignalFlareAILogo", "Sparkline", "StatCard", "Surface", "Switch", "Table", "Tabs", "Text", "TextRoll", "ThemeToggle", "Toasty", "Tooltip"] as const;
1610
+ export const SF_COMPONENT_NAMES = [
1611
+ "AiActions",
1612
+ "AiAgentCard",
1613
+ "AiApproval",
1614
+ "AiCodeBlock",
1615
+ "AiConversation",
1616
+ "AiInfoBanner",
1617
+ "AiMessage",
1618
+ "AiMissionHeader",
1619
+ "AiPartGroup",
1620
+ "AiQuestion",
1621
+ "AiReasoning",
1622
+ "AiResponse",
1623
+ "AiShimmer",
1624
+ "AiStatusBadge",
1625
+ "AiStreamingText",
1626
+ "AiSubagent",
1627
+ "AiSuggestions",
1628
+ "AiTaskList",
1629
+ "AiTimeline",
1630
+ "AiToolCall",
1631
+ "AiUsageBar",
1632
+ "Badge",
1633
+ "Banner",
1634
+ "Breadcrumbs",
1635
+ "Button",
1636
+ "Checkbox",
1637
+ "ClipboardText",
1638
+ "Code",
1639
+ "Collapsible",
1640
+ "Combobox",
1641
+ "CommandPalette",
1642
+ "DataGrid",
1643
+ "DatePicker",
1644
+ "DateRangePicker",
1645
+ "Dialog",
1646
+ "DropdownMenu",
1647
+ "Empty",
1648
+ "Field",
1649
+ "Filters",
1650
+ "Grid",
1651
+ "Input",
1652
+ "InputArea",
1653
+ "Label",
1654
+ "LayerCard",
1655
+ "Link",
1656
+ "Loader",
1657
+ "MenuBar",
1658
+ "Meter",
1659
+ "Pagination",
1660
+ "Popover",
1661
+ "PromptInput",
1662
+ "Radio",
1663
+ "Select",
1664
+ "SensitiveInput",
1665
+ "Sidebar",
1666
+ "SignalFlareAILogo",
1667
+ "Sparkline",
1668
+ "StatCard",
1669
+ "Surface",
1670
+ "Switch",
1671
+ "Table",
1672
+ "Tabs",
1673
+ "Text",
1674
+ "TextRoll",
1675
+ "ThemeToggle",
1676
+ "Toasty",
1677
+ "Tooltip",
1678
+ ] as const;