@signalflare-ai/ui 0.5.0 → 1.1.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 (316) hide show
  1. package/CHANGELOG.md +129 -1
  2. package/ai/USAGE.md +64 -0
  3. package/ai/component-registry.json +563 -619
  4. package/ai/component-registry.md +224 -85
  5. package/ai/schemas.ts +545 -102
  6. package/bin/sf.js +2 -3
  7. package/dist/.build-complete +1 -1
  8. package/dist/ai/schemas.d.ts +1659 -5532
  9. package/dist/ai/schemas.d.ts.map +1 -1
  10. package/dist/{ai-actions-DG1dhDMP.js → ai-actions-DSVeQn4e.js} +1 -1
  11. package/dist/{ai-actions-DG1dhDMP.js.map → ai-actions-DSVeQn4e.js.map} +1 -1
  12. package/dist/{ai-agent-card-BbtL4NII.js → ai-agent-card-BXHwhWAU.js} +1 -1
  13. package/dist/{ai-agent-card-BbtL4NII.js.map → ai-agent-card-BXHwhWAU.js.map} +1 -1
  14. package/dist/{ai-approval-Mb7-BY6i.js → ai-approval-aa0qvjFN.js} +1 -1
  15. package/dist/{ai-approval-Mb7-BY6i.js.map → ai-approval-aa0qvjFN.js.map} +1 -1
  16. package/dist/{ai-code-block-BI_z0UVR.js → ai-code-block-BgtIxtZZ.js} +1 -1
  17. package/dist/{ai-code-block-BI_z0UVR.js.map → ai-code-block-BgtIxtZZ.js.map} +1 -1
  18. package/dist/{ai-conversation-DYtExcrw.js → ai-conversation-CArP7C8K.js} +1 -1
  19. package/dist/{ai-conversation-DYtExcrw.js.map → ai-conversation-CArP7C8K.js.map} +1 -1
  20. package/dist/{ai-info-banner-BpzauUAY.js → ai-info-banner-uFxHHwBA.js} +1 -1
  21. package/dist/{ai-info-banner-BpzauUAY.js.map → ai-info-banner-uFxHHwBA.js.map} +1 -1
  22. package/dist/{ai-message-CV8SBoHM.js → ai-message-BjnFznXy.js} +1 -1
  23. package/dist/{ai-message-CV8SBoHM.js.map → ai-message-BjnFznXy.js.map} +1 -1
  24. package/dist/{ai-mission-header-ByYkJ6YP.js → ai-mission-header-08__gULL.js} +1 -1
  25. package/dist/{ai-mission-header-ByYkJ6YP.js.map → ai-mission-header-08__gULL.js.map} +1 -1
  26. package/dist/ai-part-group-DBtgTgAn.js +277 -0
  27. package/dist/ai-part-group-DBtgTgAn.js.map +1 -0
  28. package/dist/ai-prompt-input-CuluUzpf.js +1996 -0
  29. package/dist/ai-prompt-input-CuluUzpf.js.map +1 -0
  30. package/dist/{ai-question-Dp1g9k2o.js → ai-question-CHHoDJMg.js} +1 -1
  31. package/dist/{ai-question-Dp1g9k2o.js.map → ai-question-CHHoDJMg.js.map} +1 -1
  32. package/dist/{ai-reasoning-UAmNx_LD.js → ai-reasoning-CnL6ZSr5.js} +84 -5
  33. package/dist/ai-reasoning-CnL6ZSr5.js.map +1 -0
  34. package/dist/{ai-response-BWoVsNQG.js → ai-response-BEUg3xvd.js} +13 -16
  35. package/dist/ai-response-BEUg3xvd.js.map +1 -0
  36. package/dist/{ai-shimmer-BpOmfonu.js → ai-shimmer-By5_L05p.js} +1 -1
  37. package/dist/{ai-shimmer-BpOmfonu.js.map → ai-shimmer-By5_L05p.js.map} +1 -1
  38. package/dist/{ai-status-badge-WhbKVeqn.js → ai-status-badge-BGYGWYF6.js} +1 -1
  39. package/dist/{ai-status-badge-WhbKVeqn.js.map → ai-status-badge-BGYGWYF6.js.map} +1 -1
  40. package/dist/{ai-streaming-text-ClL7FwvD.js → ai-streaming-text-CMfoThV0.js} +1 -1
  41. package/dist/{ai-streaming-text-ClL7FwvD.js.map → ai-streaming-text-CMfoThV0.js.map} +1 -1
  42. package/dist/{ai-subagent-BruGN1UE.js → ai-subagent-DcPRqkAA.js} +1 -1
  43. package/dist/{ai-subagent-BruGN1UE.js.map → ai-subagent-DcPRqkAA.js.map} +1 -1
  44. package/dist/{ai-suggestion-CNsCZj5P.js → ai-suggestion-MgeCg5Ar.js} +1 -1
  45. package/dist/{ai-suggestion-CNsCZj5P.js.map → ai-suggestion-MgeCg5Ar.js.map} +1 -1
  46. package/dist/{ai-task-list-B9CpMDYN.js → ai-task-list-Da9zIm00.js} +9 -12
  47. package/dist/ai-task-list-Da9zIm00.js.map +1 -0
  48. package/dist/{ai-timeline-Bb5ntsr3.js → ai-timeline-Cwu045IR.js} +1 -1
  49. package/dist/ai-timeline-Cwu045IR.js.map +1 -0
  50. package/dist/{ai-tool-BGH8nQ_D.js → ai-tool-Cn1O4xjP.js} +168 -11
  51. package/dist/ai-tool-Cn1O4xjP.js.map +1 -0
  52. package/dist/{ai-usage-bar-BI-p-JBk.js → ai-usage-bar-DjS12DMp.js} +1 -1
  53. package/dist/{ai-usage-bar-BI-p-JBk.js.map → ai-usage-bar-DjS12DMp.js.map} +1 -1
  54. package/dist/catalog.js +3 -3
  55. package/dist/catalog.js.map +1 -1
  56. package/dist/{chart-Bes4MN3C.js → chart-BK3sVPnD.js} +442 -248
  57. package/dist/chart-BK3sVPnD.js.map +1 -0
  58. package/dist/{checkbox-CPX7lBaU.js → checkbox-DYhUmZNw.js} +4 -4
  59. package/dist/checkbox-DYhUmZNw.js.map +1 -0
  60. package/dist/{clipboard-text-92YeCybc.js → clipboard-text-ssybngLw.js} +2 -2
  61. package/dist/{clipboard-text-92YeCybc.js.map → clipboard-text-ssybngLw.js.map} +1 -1
  62. package/dist/{code-DE1Yy1Cu.js → code-Cx-QSoOT.js} +2 -2
  63. package/dist/{code-DE1Yy1Cu.js.map → code-Cx-QSoOT.js.map} +1 -1
  64. package/dist/{combobox-B0bLdsX8.js → combobox-C0iW6a0r.js} +2 -2
  65. package/dist/{combobox-B0bLdsX8.js.map → combobox-C0iW6a0r.js.map} +1 -1
  66. package/dist/command-line/cli.js +22 -27
  67. package/dist/{command-palette-CBTY8EiF.js → command-palette-DGzioeki.js} +2 -2
  68. package/dist/command-palette-DGzioeki.js.map +1 -0
  69. package/dist/components/ai-actions.js +1 -1
  70. package/dist/components/ai-agent-card.js +1 -1
  71. package/dist/components/ai-approval.js +1 -1
  72. package/dist/components/ai-code-block.js +1 -1
  73. package/dist/components/ai-conversation.js +1 -1
  74. package/dist/components/ai-info-banner.js +1 -1
  75. package/dist/components/ai-message.js +1 -1
  76. package/dist/components/ai-mission-header.js +1 -1
  77. package/dist/components/ai-part-group.js +3 -0
  78. package/dist/components/ai-prompt-input.js +2 -2
  79. package/dist/components/ai-question.js +1 -1
  80. package/dist/components/ai-reasoning.js +1 -1
  81. package/dist/components/ai-response.js +1 -1
  82. package/dist/components/ai-shimmer.js +1 -1
  83. package/dist/components/ai-status-badge.js +1 -1
  84. package/dist/components/ai-streaming-text.js +1 -1
  85. package/dist/components/ai-subagent.js +1 -1
  86. package/dist/components/ai-suggestion.js +1 -1
  87. package/dist/components/ai-task-list.js +1 -1
  88. package/dist/components/ai-timeline.js +1 -1
  89. package/dist/components/ai-tool.js +1 -1
  90. package/dist/components/ai-usage-bar.js +1 -1
  91. package/dist/components/chart.js +3 -2
  92. package/dist/components/checkbox.js +1 -1
  93. package/dist/components/clipboard-text.js +1 -1
  94. package/dist/components/code.js +1 -1
  95. package/dist/components/combobox.js +1 -1
  96. package/dist/components/command-palette.js +1 -1
  97. package/dist/components/data-grid.js +1 -1
  98. package/dist/components/date-picker.js +1 -1
  99. package/dist/components/dropdown.js +1 -1
  100. package/dist/components/filters.js +1 -1
  101. package/dist/components/input.js +2 -2
  102. package/dist/components/link.js +2 -2
  103. package/dist/components/link.js.map +1 -1
  104. package/dist/components/pagination.js +1 -1
  105. package/dist/components/radio.js +1 -1
  106. package/dist/components/select.js +1 -1
  107. package/dist/components/sensitive-input.js +1 -1
  108. package/dist/components/sidebar.js +1 -1
  109. package/dist/components/sparkline.js +3 -0
  110. package/dist/components/stat-card.js +3 -0
  111. package/dist/components/table.js +1 -1
  112. package/dist/components/text-roll.js +3 -0
  113. package/dist/components/theme-toggle.js +1 -1
  114. package/dist/components/use-agent-harness.js +1 -1
  115. package/dist/{data-grid-UJ9ja5cu.js → data-grid-CG76N_hK.js} +6 -6
  116. package/dist/data-grid-CG76N_hK.js.map +1 -0
  117. package/dist/{date-picker-ebekkC3R.js → date-picker-Dqg9L4xu.js} +2 -2
  118. package/dist/{date-picker-ebekkC3R.js.map → date-picker-Dqg9L4xu.js.map} +1 -1
  119. package/dist/{dist-BNlyONdD.js → dist-1-gcEL2L.js} +224 -135
  120. package/dist/dist-1-gcEL2L.js.map +1 -0
  121. package/dist/{dropdown-J5T4pHaR.js → dropdown-qnEYRFXZ.js} +2 -2
  122. package/dist/{dropdown-J5T4pHaR.js.map → dropdown-qnEYRFXZ.js.map} +1 -1
  123. package/dist/echart-DURZEyai.js +314 -0
  124. package/dist/echart-DURZEyai.js.map +1 -0
  125. package/dist/{filters-BdBogf7D.js → filters-Bw_U6ZTx.js} +5 -5
  126. package/dist/filters-Bw_U6ZTx.js.map +1 -0
  127. package/dist/flow-BRsYUCJa.js.map +1 -1
  128. package/dist/genui.js +2 -2
  129. package/dist/genui.js.map +1 -1
  130. package/dist/index.js +45 -42
  131. package/dist/index.js.map +1 -1
  132. package/dist/{input-BxQAnXki.js → input-DXYUjGgD.js} +2 -2
  133. package/dist/{input-BxQAnXki.js.map → input-DXYUjGgD.js.map} +1 -1
  134. package/dist/{input-Cn25I4o5.js → input-DddtBN-g.js} +2 -2
  135. package/dist/{input-Cn25I4o5.js.map → input-DddtBN-g.js.map} +1 -1
  136. package/dist/layer-card-BME0eljh.js.map +1 -1
  137. package/dist/{pagination-C_YqCy8l.js → pagination-BVqdlONY.js} +2 -2
  138. package/dist/{pagination-C_YqCy8l.js.map → pagination-BVqdlONY.js.map} +1 -1
  139. package/dist/primitives/otp-field.js +2 -0
  140. package/dist/primitives.js +1 -0
  141. package/dist/{radio-B7zg1wUI.js → radio-BNSwOt3B.js} +3 -3
  142. package/dist/radio-BNSwOt3B.js.map +1 -0
  143. package/dist/{select-9p721G00.js → select-1w2aebGQ.js} +2 -2
  144. package/dist/select-1w2aebGQ.js.map +1 -0
  145. package/dist/{sensitive-input-D5je2NLl.js → sensitive-input-82Cez3vj.js} +2 -2
  146. package/dist/{sensitive-input-D5je2NLl.js.map → sensitive-input-82Cez3vj.js.map} +1 -1
  147. package/dist/{sidebar-DOwBrq57.js → sidebar-CAsCmSpM.js} +3 -3
  148. package/dist/sidebar-CAsCmSpM.js.map +1 -0
  149. package/dist/sparkline-DdbeM4Ai.js +108 -0
  150. package/dist/sparkline-DdbeM4Ai.js.map +1 -0
  151. package/dist/src/blocks/agent-harness/agent-harness.d.ts +30 -9
  152. package/dist/src/blocks/agent-harness/agent-harness.d.ts.map +1 -1
  153. package/dist/src/blocks/agent-harness/agent-harness.stories.tsx +114 -0
  154. package/dist/src/blocks/agent-harness/agent-harness.tsx +144 -63
  155. package/dist/src/blocks/commander/commander.stories.tsx +31 -0
  156. package/dist/src/blocks/dashboard-grid/dashboard-grid.d.ts +48 -0
  157. package/dist/src/blocks/dashboard-grid/dashboard-grid.d.ts.map +1 -0
  158. package/dist/src/blocks/dashboard-grid/dashboard-grid.stories.tsx +19 -0
  159. package/dist/src/blocks/dashboard-grid/dashboard-grid.tsx +110 -0
  160. package/dist/src/blocks/dashboard-grid/index.d.ts +2 -0
  161. package/dist/src/blocks/dashboard-grid/index.d.ts.map +1 -0
  162. package/dist/src/blocks/delete-resource/delete-resource.stories.tsx +31 -0
  163. package/dist/src/blocks/map-block/map-block.stories.tsx +41 -0
  164. package/dist/src/blocks/metrics-overview/index.d.ts +2 -0
  165. package/dist/src/blocks/metrics-overview/index.d.ts.map +1 -0
  166. package/dist/src/blocks/metrics-overview/metrics-overview.d.ts +67 -0
  167. package/dist/src/blocks/metrics-overview/metrics-overview.d.ts.map +1 -0
  168. package/dist/src/blocks/metrics-overview/metrics-overview.stories.tsx +26 -0
  169. package/dist/src/blocks/metrics-overview/metrics-overview.tsx +139 -0
  170. package/dist/src/blocks/page-header/page-header.stories.tsx +56 -0
  171. package/dist/src/blocks/resource-list/resource-list.stories.tsx +31 -0
  172. package/dist/src/catalog/catalog.d.ts +1 -1
  173. package/dist/src/catalog/index.d.ts +1 -1
  174. package/dist/src/catalog/types.d.ts +1 -1
  175. package/dist/src/command-line/build-cli.d.ts +1 -1
  176. package/dist/src/command-line/cli.d.ts +1 -1
  177. package/dist/src/command-line/commands/add.d.ts +1 -1
  178. package/dist/src/command-line/commands/add.d.ts.map +1 -1
  179. package/dist/src/command-line/commands/ai.d.ts.map +1 -1
  180. package/dist/src/command-line/commands/blocks.d.ts +1 -1
  181. package/dist/src/command-line/commands/blocks.d.ts.map +1 -1
  182. package/dist/src/command-line/commands/doc.d.ts +1 -1
  183. package/dist/src/command-line/commands/doc.d.ts.map +1 -1
  184. package/dist/src/command-line/commands/ls.d.ts +1 -1
  185. package/dist/src/command-line/commands/ls.d.ts.map +1 -1
  186. package/dist/src/command-line/commands/migrate.d.ts +3 -3
  187. package/dist/src/command-line/commands/migrate.d.ts.map +1 -1
  188. package/dist/src/command-line/utils/config.d.ts +1 -1
  189. package/dist/src/command-line/utils/transformer.d.ts +1 -1
  190. package/dist/src/components/ai-part-group/ai-part-group.d.ts +134 -0
  191. package/dist/src/components/ai-part-group/ai-part-group.d.ts.map +1 -0
  192. package/dist/src/components/ai-part-group/index.d.ts +2 -0
  193. package/dist/src/components/ai-part-group/index.d.ts.map +1 -0
  194. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts +241 -8
  195. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -1
  196. package/dist/src/components/ai-prompt-input/controller.d.ts +49 -0
  197. package/dist/src/components/ai-prompt-input/controller.d.ts.map +1 -0
  198. package/dist/src/components/ai-prompt-input/index.d.ts +3 -1
  199. package/dist/src/components/ai-prompt-input/index.d.ts.map +1 -1
  200. package/dist/src/components/ai-prompt-input/types.d.ts +102 -0
  201. package/dist/src/components/ai-prompt-input/types.d.ts.map +1 -0
  202. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts +17 -1
  203. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -1
  204. package/dist/src/components/ai-response/ai-response.d.ts +1 -2
  205. package/dist/src/components/ai-response/ai-response.d.ts.map +1 -1
  206. package/dist/src/components/ai-task-list/ai-task-list.d.ts.map +1 -1
  207. package/dist/src/components/ai-tool/ai-tool.d.ts +17 -1
  208. package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -1
  209. package/dist/src/components/chart/area-chart.d.ts +69 -0
  210. package/dist/src/components/chart/area-chart.d.ts.map +1 -0
  211. package/dist/src/components/chart/bar-chart.d.ts +60 -0
  212. package/dist/src/components/chart/bar-chart.d.ts.map +1 -0
  213. package/dist/src/components/chart/color.d.ts +56 -0
  214. package/dist/src/components/chart/color.d.ts.map +1 -1
  215. package/dist/src/components/chart/echart.d.ts.map +1 -1
  216. package/dist/src/components/chart/index.d.ts +5 -0
  217. package/dist/src/components/chart/index.d.ts.map +1 -1
  218. package/dist/src/components/chart/pie-chart.d.ts +64 -0
  219. package/dist/src/components/chart/pie-chart.d.ts.map +1 -0
  220. package/dist/src/components/chart/scatter-chart.d.ts +57 -0
  221. package/dist/src/components/chart/scatter-chart.d.ts.map +1 -0
  222. package/dist/src/components/chart/stacked-bar-chart.d.ts +59 -0
  223. package/dist/src/components/chart/stacked-bar-chart.d.ts.map +1 -0
  224. package/dist/src/components/chart/timeseries-chart.d.ts.map +1 -1
  225. package/dist/src/components/code/code.d.ts +1 -1
  226. package/dist/src/components/command-palette/command-palette.d.ts +1 -1
  227. package/dist/src/components/data-grid/data-grid.d.ts.map +1 -1
  228. package/dist/src/components/data-grid/index.d.ts +1 -1
  229. package/dist/src/components/data-grid/index.d.ts.map +1 -1
  230. package/dist/src/components/data-grid/types.d.ts.map +1 -1
  231. package/dist/src/components/date-picker/date-picker.d.ts +2 -2
  232. package/dist/src/components/filters/filters.d.ts.map +1 -1
  233. package/dist/src/components/filters/helpers.d.ts.map +1 -1
  234. package/dist/src/components/filters/types.d.ts.map +1 -1
  235. package/dist/src/components/layer-card/layer-card.d.ts +1 -1
  236. package/dist/src/components/link/link.d.ts +2 -2
  237. package/dist/src/components/radio/radio.d.ts +1 -1
  238. package/dist/src/components/select/select.d.ts +1 -1
  239. package/dist/src/components/sidebar/sidebar.d.ts +2 -2
  240. package/dist/src/components/sparkline/index.d.ts +2 -0
  241. package/dist/src/components/sparkline/index.d.ts.map +1 -0
  242. package/dist/src/components/sparkline/sparkline.d.ts +52 -0
  243. package/dist/src/components/sparkline/sparkline.d.ts.map +1 -0
  244. package/dist/src/components/stat-card/index.d.ts +2 -0
  245. package/dist/src/components/{ai-loader → stat-card}/index.d.ts.map +1 -1
  246. package/dist/src/components/stat-card/stat-card.d.ts +80 -0
  247. package/dist/src/components/stat-card/stat-card.d.ts.map +1 -0
  248. package/dist/src/components/text-roll/index.d.ts +2 -0
  249. package/dist/src/components/text-roll/index.d.ts.map +1 -0
  250. package/dist/src/components/text-roll/text-roll.d.ts +49 -0
  251. package/dist/src/components/text-roll/text-roll.d.ts.map +1 -0
  252. package/dist/src/components/toast/toast.d.ts.map +1 -1
  253. package/dist/src/components/use-agent-harness/use-agent-harness.d.ts +2 -2
  254. package/dist/src/genui/genui.d.ts.map +1 -1
  255. package/dist/src/index.d.ts +5 -2
  256. package/dist/src/index.d.ts.map +1 -1
  257. package/dist/src/primitives/index.d.ts +1 -0
  258. package/dist/src/primitives/index.d.ts.map +1 -1
  259. package/dist/src/primitives/otp-field.d.ts +13 -0
  260. package/dist/src/primitives/otp-field.d.ts.map +1 -0
  261. package/dist/src/registry/index.d.ts +1 -1
  262. package/dist/src/registry/types.d.ts +1 -1
  263. package/dist/stat-card-CEZscNh8.js +103 -0
  264. package/dist/stat-card-CEZscNh8.js.map +1 -0
  265. package/dist/styles/sf-binding.css +28 -62
  266. package/dist/styles/sf-standalone.css +2 -2
  267. package/dist/styles/shadcn.css +120 -0
  268. package/dist/styles/theme-blue-tint.css +98 -0
  269. package/dist/styles/theme-fedramp.css +3 -12
  270. package/dist/styles/theme-minimal.css +26 -104
  271. package/dist/styles/theme-sf.css +96 -114
  272. package/dist/{table-CIMx0Oq0.js → table-Rv4JMy0B.js} +2 -2
  273. package/dist/{table-CIMx0Oq0.js.map → table-Rv4JMy0B.js.map} +1 -1
  274. package/dist/text-roll-BZ3I1umc.js +79 -0
  275. package/dist/text-roll-BZ3I1umc.js.map +1 -0
  276. package/dist/{theme-toggle-Dpgnoj_Q.js → theme-toggle-Bhu681D7.js} +1 -1
  277. package/dist/{theme-toggle-Dpgnoj_Q.js.map → theme-toggle-Bhu681D7.js.map} +1 -1
  278. package/dist/{use-agent-harness-DZzcn96L.js → use-agent-harness-BMyF8pTq.js} +5 -5
  279. package/dist/use-agent-harness-BMyF8pTq.js.map +1 -0
  280. package/package.json +48 -19
  281. package/scripts/component-registry/discovery.ts +2 -2
  282. package/scripts/component-registry/index.ts +3 -3
  283. package/scripts/component-registry/props-filter.ts +1 -1
  284. package/scripts/component-registry/utils.ts +5 -5
  285. package/scripts/component-registry/variant-parser.ts +124 -19
  286. package/scripts/convert-demos-to-stories.ts +253 -0
  287. package/scripts/css-build.ts +4 -3
  288. package/scripts/generate-primitives.ts +11 -3
  289. package/scripts/theme-generator/config.ts +339 -71
  290. package/scripts/theme-generator/generate-css.ts +17 -3
  291. package/scripts/theme-generator/index.ts +3 -3
  292. package/scripts/theme-generator/migrate.ts +1 -1
  293. package/dist/ai-loader-Cr3eQkNS.js +0 -134
  294. package/dist/ai-loader-Cr3eQkNS.js.map +0 -1
  295. package/dist/ai-prompt-input-Bo1YuJly.js +0 -769
  296. package/dist/ai-prompt-input-Bo1YuJly.js.map +0 -1
  297. package/dist/ai-reasoning-UAmNx_LD.js.map +0 -1
  298. package/dist/ai-response-BWoVsNQG.js.map +0 -1
  299. package/dist/ai-task-list-B9CpMDYN.js.map +0 -1
  300. package/dist/ai-timeline-Bb5ntsr3.js.map +0 -1
  301. package/dist/ai-tool-BGH8nQ_D.js.map +0 -1
  302. package/dist/chart-Bes4MN3C.js.map +0 -1
  303. package/dist/checkbox-CPX7lBaU.js.map +0 -1
  304. package/dist/command-palette-CBTY8EiF.js.map +0 -1
  305. package/dist/components/ai-loader.js +0 -3
  306. package/dist/data-grid-UJ9ja5cu.js.map +0 -1
  307. package/dist/dist-BNlyONdD.js.map +0 -1
  308. package/dist/filters-BdBogf7D.js.map +0 -1
  309. package/dist/radio-B7zg1wUI.js.map +0 -1
  310. package/dist/select-9p721G00.js.map +0 -1
  311. package/dist/sidebar-DOwBrq57.js.map +0 -1
  312. package/dist/src/components/ai-loader/ai-loader.d.ts +0 -44
  313. package/dist/src/components/ai-loader/ai-loader.d.ts.map +0 -1
  314. package/dist/src/components/ai-loader/index.d.ts +0 -2
  315. package/dist/styles/theme-navigator.css +0 -137
  316. package/dist/use-agent-harness-DZzcn96L.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,25 +188,20 @@ 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(),
183
197
  title: z.string().optional(),
184
198
  });
185
199
 
186
- export const AiLoaderPropsSchema = z.object({
187
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
188
- className: z.string().optional(),
189
- id: z.string().optional(),
190
- lang: z.string().optional(),
191
- title: z.string().optional(),
192
- size: z.enum(["sm", "base", "lg"]).optional(), // Icon size. - `"sm"` — 12px - `"base"` — 16px (default) - `"lg"` — 20px
193
- });
194
-
195
200
  export const AiMessagePropsSchema = z.object({
196
201
  from: z.enum(["user", "assistant", "system"]), // Message sender role — controls layout and group class.
197
- 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(),
198
205
  className: z.string().optional(),
199
206
  id: z.string().optional(),
200
207
  lang: z.string().optional(),
@@ -214,7 +221,21 @@ export const AiMissionHeaderPropsSchema = z.object({
214
221
  className: z.string().optional(),
215
222
  id: z.string().optional(),
216
223
  lang: z.string().optional(),
217
- 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(),
227
+ });
228
+
229
+ export const AiPartGroupPropsSchema = z.object({
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).
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.
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.
233
+ children: z
234
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
235
+ .optional(),
236
+ className: z.string().optional(),
237
+ id: z.string().optional(),
238
+ lang: z.string().optional(),
218
239
  });
219
240
 
220
241
  export const AiQuestionPropsSchema = z.object({
@@ -226,14 +247,16 @@ export const AiQuestionPropsSchema = z.object({
226
247
  allowCustom: z.boolean().optional(), // Allow freeform text input (custom answer). Default: `true`. When options are provided, this adds a text field below them.
227
248
  icon: z.unknown().optional(), // Custom icon for the question header.
228
249
  answeredWith: z.string().optional(), // The answer that was submitted (shown when `status="answered"`).
229
- 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(),
230
253
  className: z.string().optional(),
231
254
  id: z.string().optional(),
232
255
  lang: z.string().optional(),
233
256
  });
234
257
 
235
258
  export const AiReasoningPropsSchema = z.object({
236
- variant: z.enum(["default", "inline", "minimal"]).optional(), // Display variant.
259
+ variant: z.enum(["default", "inline", "minimal", "ephemeral"]).optional(), // Display variant.
237
260
  isStreaming: z.boolean().optional(), // Whether reasoning is currently streaming.
238
261
  duration: z.number().optional(), // Duration in seconds (passed in or self-tracked when streaming).
239
262
  defaultExpanded: z.boolean().optional(), // Default expanded state.
@@ -242,16 +265,22 @@ export const AiReasoningPropsSchema = z.object({
242
265
  icon: z.unknown().optional(), // Custom icon override. Defaults to `SparkleIcon` (streaming) or `BrainIcon` (done). Use to distinguish observation/reflection blocks from standard reasoning.
243
266
  label: z.string().optional(), // Custom label override. Defaults to `"Thinking..."` (streaming) or `"Reasoning"` (done). Use to label observational memory blocks: `"Observing..."`, `"Reflecting..."`, etc.
244
267
  streamingLabel: z.string().optional(), // Custom streaming label. When provided, used instead of `label` while `isStreaming` is true. Falls back to `label`, then to the default `"Thinking..."`.
268
+ dismissDelay: z.number().optional(), // For `variant="ephemeral"`: ms to keep the completed row visible before fading out. Set to `0` to disable auto-dismiss.
269
+ persist: z.boolean().optional(), // For `variant="ephemeral"`: when `true`, the row never auto-dismisses. User-expanded rows are pinned automatically.
245
270
  className: z.string().optional(),
246
271
  id: z.string().optional(),
247
272
  lang: z.string().optional(),
248
273
  title: z.string().optional(),
249
- 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(),
250
277
  });
251
278
 
252
279
  export const AiResponsePropsSchema = z.object({
253
280
  className: z.string().optional(), // Additional CSS classes
254
- 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
255
284
  });
256
285
 
257
286
  export const AiShimmerPropsSchema = z.object({
@@ -267,7 +296,9 @@ export const AiStatusBadgePropsSchema = z.object({
267
296
  label: z.string(), // Label text displayed in the badge.
268
297
  status: z.enum(["idle", "running", "success", "error"]).optional(), // Current status — determines the status icon on the right.
269
298
  info: z.string().optional(), // Additional info text (e.g. "2/3") shown after the label.
270
- 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(),
271
302
  className: z.string().optional(),
272
303
  id: z.string().optional(),
273
304
  lang: z.string().optional(),
@@ -276,7 +307,9 @@ export const AiStatusBadgePropsSchema = z.object({
276
307
 
277
308
  export const AiStreamingTextPropsSchema = z.object({
278
309
  className: z.string().optional(), // Additional CSS classes
279
- 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
280
313
  });
281
314
 
282
315
  export const AiSubagentPropsSchema = z.object({
@@ -288,7 +321,9 @@ export const AiSubagentPropsSchema = z.object({
288
321
  icon: z.unknown().optional(), // Custom icon. Defaults to `RobotIcon`.
289
322
  defaultExpanded: z.boolean().optional(), // Whether the subagent content is expanded by default.
290
323
  open: z.boolean().optional(), // Controlled open state.
291
- 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(),
292
327
  className: z.string().optional(),
293
328
  id: z.string().optional(),
294
329
  lang: z.string().optional(),
@@ -296,7 +331,9 @@ export const AiSubagentPropsSchema = z.object({
296
331
  });
297
332
 
298
333
  export const AiSuggestionsPropsSchema = z.object({
299
- 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(),
300
337
  className: z.string().optional(),
301
338
  id: z.string().optional(),
302
339
  lang: z.string().optional(),
@@ -308,7 +345,9 @@ export const AiTaskListPropsSchema = z.object({
308
345
  title: z.string().optional(), // Optional title above the task list.
309
346
  icon: z.unknown().optional(), // Custom icon for the title area.
310
347
  showProgress: z.boolean().optional(), // Show a progress summary (e.g. "3 / 7 done"). Default: `true`.
311
- 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(),
312
351
  className: z.string().optional(),
313
352
  id: z.string().optional(),
314
353
  lang: z.string().optional(),
@@ -320,7 +359,9 @@ export const AiTimelinePropsSchema = z.object({
320
359
  showNowMarker: z.boolean().optional(), // Whether to show a pulsing "now" marker at the live edge.
321
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).
322
361
  density: z.enum(["comfortable", "compact"]).optional(), // Lane density variant.
323
- 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.
324
365
  className: z.string().optional(),
325
366
  id: z.string().optional(),
326
367
  lang: z.string().optional(),
@@ -328,17 +369,21 @@ export const AiTimelinePropsSchema = z.object({
328
369
  });
329
370
 
330
371
  export const AiToolCallPropsSchema = z.object({
331
- variant: z.enum(["default", "inline", "minimal"]).optional(), // Display variant.
372
+ variant: z.enum(["default", "inline", "minimal", "ephemeral"]).optional(), // Display variant.
332
373
  duration: z.number().optional(), // Duration in milliseconds.
333
374
  summary: z.string().optional(), // Summary text shown alongside the tool name.
334
375
  icon: z.unknown().optional(), // Custom icon override.
335
376
  approvalState: z.enum(["awaiting", "approved", "declined"]).optional(), // Approval state for tools requiring confirmation.
336
377
  defaultExpanded: z.boolean().optional(), // Default expanded state for the collapsible.
378
+ dismissDelay: z.number().optional(), // For `variant="ephemeral"`: ms to keep the completed row visible before fading out. Set to `0` to disable auto-dismiss.
379
+ persist: z.boolean().optional(), // For `variant="ephemeral"`: when `true`, the row never auto-dismisses. Errors and user-expanded rows are pinned automatically.
337
380
  className: z.string().optional(),
338
381
  id: z.string().optional(),
339
382
  lang: z.string().optional(),
340
383
  title: z.string().optional(),
341
- 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(),
342
387
  });
343
388
 
344
389
  export const AiUsageBarPropsSchema = z.object({
@@ -348,7 +393,9 @@ export const AiUsageBarPropsSchema = z.object({
348
393
  cost: z.number().optional(), // Estimated cost in USD.
349
394
  modelId: z.string().optional(), // Model ID being used (shown as label).
350
395
  icon: z.unknown().optional(), // Custom icon. Defaults to `LightningIcon`.
351
- 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(),
352
399
  className: z.string().optional(),
353
400
  id: z.string().optional(),
354
401
  lang: z.string().optional(),
@@ -356,38 +403,73 @@ export const AiUsageBarPropsSchema = z.object({
356
403
  });
357
404
 
358
405
  export const BadgePropsSchema = z.object({
359
- 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
360
419
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
361
- 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.
362
423
  icon: z.unknown().optional(), // Icon component rendered alongside the text.
363
424
  iconPosition: z.enum(["left", "right"]).optional(), // Position of the icon relative to the text.
364
425
  loading: z.boolean().optional(), // Shows a loading spinner, replacing the icon slot.
365
426
  dot: z.enum(["green", "red", "yellow", "blue", "gray"]).optional(), // Renders a small colored status dot before the text.
366
- 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.
367
430
  href: z.string().optional(),
368
431
  });
369
432
 
370
433
  export const BannerPropsSchema = z.object({
371
- 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`).
372
437
  text: z.string().optional(),
373
- 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.
374
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
375
442
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
376
443
  });
377
444
 
378
445
  export const BreadcrumbsPropsSchema = z.object({
379
446
  size: z.enum(["sm", "base"]).optional(), // Size of the breadcrumbs. - `"sm"` — Compact breadcrumbs for dense UIs - `"base"` — Default breadcrumbs size
380
- 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(),
381
450
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
382
451
  });
383
452
 
384
453
  export const ButtonPropsSchema = z.object({
385
454
  shape: z.enum(["base", "square", "circle"]).optional(),
386
455
  size: z.enum(["xs", "sm", "base", "lg"]).optional(),
387
- variant: z.enum(["primary", "secondary", "ghost", "destructive", "secondary-destructive", "outline"]).optional(),
388
- 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(),
389
469
  className: z.string().optional(),
390
- 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.
391
473
  loading: z.boolean().optional(), // Shows a loading spinner and disables interaction.
392
474
  id: z.string().optional(),
393
475
  lang: z.string().optional(),
@@ -400,8 +482,12 @@ export const ButtonPropsSchema = z.object({
400
482
 
401
483
  export const CheckboxPropsSchema = z.object({
402
484
  variant: z.enum(["default", "error"]).optional(), // Visual variant: "default" or "error" for validation failures (visual only, no error text)
403
- 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
404
- 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
405
491
  controlFirst: z.boolean().optional(), // When true (default), checkbox appears before label. When false, label appears before checkbox.
406
492
  checked: z.boolean().optional(), // Whether the checkbox is checked (controlled)
407
493
  indeterminate: z.boolean().optional(), // Whether the checkbox is in indeterminate state
@@ -428,7 +514,9 @@ export const CodePropsSchema = z.object({
428
514
  });
429
515
 
430
516
  export const CollapsiblePropsSchema = z.object({
431
- 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(),
432
520
  label: z.string(), // Text label displayed in the trigger button
433
521
  open: z.boolean().optional(), // Whether the collapsible content is visible
434
522
  className: z.string().optional(), // Additional CSS classes for the content panel
@@ -439,12 +527,20 @@ export const ComboboxPropsSchema = z.object({
439
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
440
528
  items: z.array(z.unknown()), // Array of items to display in the dropdown
441
529
  value: z.array(z.unknown()).optional(), // Currently selected value(s)
442
- 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)
443
533
  className: z.string().optional(), // Additional CSS classes
444
- 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
445
537
  required: z.boolean().optional(), // Whether the combobox is required
446
- 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
447
- 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
448
544
  error: z.unknown().optional(), // Error message or validation error object
449
545
  onValueChange: z.unknown().optional(), // Callback when selection changes
450
546
  multiple: z.boolean().optional(), // Allow multiple selections
@@ -453,18 +549,24 @@ export const ComboboxPropsSchema = z.object({
453
549
 
454
550
  export const CommandPalettePropsSchema = z.object({
455
551
  open: z.boolean(), // Whether the dialog is open
456
- 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
457
555
  });
458
556
 
459
557
  export const DataGridPropsSchema = z.object({
460
558
  layout: z.enum(["auto", "fixed"]).optional(),
461
559
  className: z.string().optional(), // Additional CSS classes
462
- 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
463
563
  });
464
564
 
465
565
  export const DatePickerPropsSchema = z.object({
466
566
  className: z.string().optional(), // Additional CSS classes
467
- 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
468
570
  });
469
571
 
470
572
  export const DateRangePickerPropsSchema = z.object({
@@ -478,7 +580,9 @@ export const DateRangePickerPropsSchema = z.object({
478
580
 
479
581
  export const DialogPropsSchema = z.object({
480
582
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
481
- 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).
482
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
483
587
  });
484
588
 
@@ -488,29 +592,43 @@ export const DropdownMenuPropsSchema = z.object({
488
592
 
489
593
  export const EmptyPropsSchema = z.object({
490
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
491
- 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`).
492
598
  title: z.string(), // Primary heading text for the empty state.
493
599
  description: z.string().optional(), // Secondary description text displayed below the title.
494
600
  commandLine: z.string().optional(), // Shell command displayed in a copyable code block.
495
- 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.
496
604
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
497
605
  });
498
606
 
499
607
  export const FieldPropsSchema = z.object({
500
608
  controlFirst: z.boolean().optional(), // When `true`, places the control before the label (for checkbox/switch layouts).
501
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // The form control element(s) to wrap (Input, Select, Checkbox, etc.).
502
- 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.
503
615
  required: z.boolean().optional(), // When explicitly `false`, shows gray "(optional)" text after the label. When `true` or `undefined`, no indicator is shown.
504
- 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.
505
619
  error: z.unknown().optional(), // Validation error with a message and a browser `ValidityState` match key.
506
- 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).
507
623
  });
508
624
 
509
625
  export const FiltersPropsSchema = z.object({
510
626
  filters: z.array(z.unknown()), // Active filters array
511
627
  fields: z.array(z.unknown()), // Available field configurations
512
628
  size: z.enum(["sm", "default", "lg"]).optional(), // Size variant for filter pills
513
- 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)
514
632
  showSearchInput: z.boolean().optional(), // Whether to show a search input in the add filter menu
515
633
  allowMultiple: z.boolean().optional(), // Whether to allow multiple filters on the same field
516
634
  enableShortcut: z.boolean().optional(), // Whether to enable keyboard shortcut (Cmd/Ctrl + K) to open add filter
@@ -522,20 +640,40 @@ export const FiltersPropsSchema = z.object({
522
640
  });
523
641
 
524
642
  export const GridPropsSchema = z.object({
525
- 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.
526
646
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
527
647
  id: z.string().optional(),
528
648
  lang: z.string().optional(),
529
649
  title: z.string().optional(),
530
650
  mobileDivider: z.boolean().optional(), // Show dividers between grid items on mobile (only works with `"4up"` variant).
531
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
532
- 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
533
665
  });
534
666
 
535
667
  export const InputPropsSchema = z.object({
536
- 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
537
- 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
538
- 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
539
677
  error: z.unknown().optional(), // Error message or validation error object
540
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
541
679
  variant: z.enum(["default", "error"]).optional(), // Visual variant. - `"default"` — Standard input - `"error"` — Error state for validation failures
@@ -544,23 +682,31 @@ export const InputPropsSchema = z.object({
544
682
  export const InputAreaPropsSchema = z.object({});
545
683
 
546
684
  export const LabelPropsSchema = z.object({
547
- 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.
548
688
  showOptional: z.boolean().optional(), // When `true`, shows gray "(optional)" text after the label.
549
- 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.
550
692
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
551
693
  htmlFor: z.string().optional(), // The id of the form element this label is associated with
552
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.
553
695
  });
554
696
 
555
697
  export const LayerCardPropsSchema = z.object({
556
- 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(),
557
701
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
558
702
  });
559
703
 
560
704
  export const LinkPropsSchema = z.object({
561
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
562
706
  to: z.string().optional(),
563
- 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(),
564
710
  className: z.string().optional(),
565
711
  id: z.string().optional(),
566
712
  lang: z.string().optional(),
@@ -572,8 +718,22 @@ export const LinkPropsSchema = z.object({
572
718
  ping: z.string().optional(),
573
719
  target: z.unknown().optional(),
574
720
  type: z.string().optional(),
575
- 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(),
576
- 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.
577
737
  });
578
738
 
579
739
  export const LoaderPropsSchema = z.object({
@@ -616,7 +776,9 @@ export const PromptInputPropsSchema = z.object({
616
776
  globalDrop: z.boolean().optional(), // When true, accept drops anywhere on document. Default false.
617
777
  maxFiles: z.number().optional(), // Maximum number of attached files.
618
778
  maxFileSize: z.number().optional(), // Maximum file size in bytes.
619
- 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.
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.
620
782
  backLayerTitle: z.string().optional(), // Title shown in the back layer header row. Defaults to `"Context"`.
621
783
  backLayerOpen: z.boolean().optional(), // Controls whether the back layer is visible. Pair with `onBackLayerOpenChange` for a controlled pattern.
622
784
  autoOpenBackLayerWhen: z.boolean().optional(), // Automatically opens the back layer when this condition is true. Useful for showing pending approvals/questions without manual toggle.
@@ -624,15 +786,21 @@ export const PromptInputPropsSchema = z.object({
624
786
  id: z.string().optional(),
625
787
  lang: z.string().optional(),
626
788
  title: z.string().optional(),
627
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
789
+ children: z
790
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
791
+ .optional(),
628
792
  });
629
793
 
630
794
  export const RadioPropsSchema = z.object({
631
795
  legend: z.string(), // Legend text for the group (required for accessibility)
632
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child Radio.Item components
796
+ children: z
797
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
798
+ .optional(), // Child Radio.Item components
633
799
  orientation: z.enum(["vertical", "horizontal"]).optional(), // Layout direction of the radio items
634
800
  error: z.string().optional(), // Error message for the group
635
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text for the group
801
+ description: z
802
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
803
+ .optional(), // Helper text for the group
636
804
  value: z.string().optional(), // Value of the radio that should be selected (controlled)
637
805
  disabled: z.boolean().optional(), // Whether all radios in the group are disabled
638
806
  controlPosition: z.enum(["start", "end"]).optional(), // Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio
@@ -642,16 +810,24 @@ export const RadioPropsSchema = z.object({
642
810
 
643
811
  export const SelectPropsSchema = z.object({
644
812
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
645
- 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.
813
+ label: z
814
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
815
+ .optional(), // Label content for the select (enables Field wrapper) — can be a string or any React node.
646
816
  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.
647
817
  placeholder: z.string().optional(), // Placeholder text shown when no value is selected.
648
818
  loading: z.boolean().optional(), // When `true`, shows a skeleton loader in place of the selected value.
649
819
  disabled: z.boolean().optional(), // Whether the select is disabled.
650
820
  required: z.boolean().optional(), // Whether the select is required. When `false`, shows "(optional)" text.
651
- labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content displayed next to the label via an info icon.
821
+ labelTooltip: z
822
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
823
+ .optional(), // Tooltip content displayed next to the label via an info icon.
652
824
  value: z.string().optional(), // Currently selected value (controlled mode).
653
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // `Select.Option` elements to render in the dropdown.
654
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the select.
825
+ children: z
826
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
827
+ .optional(), // `Select.Option` elements to render in the dropdown.
828
+ description: z
829
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
830
+ .optional(), // Helper text displayed below the select.
655
831
  error: z.unknown().optional(), // Error message string or validation error object with `match` key.
656
832
  onValueChange: z.unknown().optional(), // Callback when selection changes
657
833
  defaultValue: z.string().optional(), // Initial value for uncontrolled mode
@@ -673,13 +849,21 @@ export const SensitiveInputPropsSchema = z.object({
673
849
  id: z.string().optional(),
674
850
  lang: z.string().optional(),
675
851
  title: z.string().optional(),
676
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
852
+ children: z
853
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
854
+ .optional(),
677
855
  value: z.string().optional(), // Controlled value
678
856
  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
679
857
  variant: z.enum(["default", "error"]).optional(), // Style variant of the input. - `"default"` — Default input appearance - `"error"` — Error state for validation failures
680
- 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
681
- 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
682
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text displayed below the input
858
+ label: z
859
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
860
+ .optional(), // Label content for the input (enables Field wrapper and sets masked state label) - can be a string or any React node
861
+ labelTooltip: z
862
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
863
+ .optional(), // Tooltip content to display next to the label via an info icon
864
+ description: z
865
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
866
+ .optional(), // Helper text displayed below the input
683
867
  error: z.unknown().optional(), // Error message or validation error object
684
868
  });
685
869
 
@@ -693,12 +877,16 @@ export const SidebarPropsSchema = z.object({
693
877
  defaultWidth: z.number().optional(), // Initial width in pixels when resizable.
694
878
  minWidth: z.number().optional(), // Minimum width in pixels when resizing.
695
879
  maxWidth: z.number().optional(), // Maximum width in pixels when resizing.
696
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content — typically `<Sidebar>` + main content.
880
+ children: z
881
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
882
+ .optional(), // Content — typically `<Sidebar>` + main content.
697
883
  className: z.string().optional(), // Additional CSS classes for the wrapper div.
698
884
  });
699
885
 
700
886
  export const SignalFlareAILogoPropsSchema = z.object({
701
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(),
887
+ children: z
888
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
889
+ .optional(),
702
890
  className: z.string().optional(),
703
891
  height: z.unknown().optional(),
704
892
  id: z.string().optional(),
@@ -712,7 +900,23 @@ export const SignalFlareAILogoPropsSchema = z.object({
712
900
  accentHeight: z.unknown().optional(),
713
901
  accumulate: z.enum(["none", "sum"]).optional(),
714
902
  additive: z.enum(["replace", "sum"]).optional(),
715
- alignmentBaseline: z.enum(["auto", "baseline", "before-edge", "text-before-edge", "middle", "central", "after-edge", "text-after-edge", "ideographic", "alphabetic", "hanging", "mathematical", "inherit"]).optional(),
903
+ alignmentBaseline: z
904
+ .enum([
905
+ "auto",
906
+ "baseline",
907
+ "before-edge",
908
+ "text-before-edge",
909
+ "middle",
910
+ "central",
911
+ "after-edge",
912
+ "text-after-edge",
913
+ "ideographic",
914
+ "alphabetic",
915
+ "hanging",
916
+ "mathematical",
917
+ "inherit",
918
+ ])
919
+ .optional(),
716
920
  allowReorder: z.enum(["no", "yes"]).optional(),
717
921
  alphabetic: z.unknown().optional(),
718
922
  amplitude: z.unknown().optional(),
@@ -736,7 +940,9 @@ export const SignalFlareAILogoPropsSchema = z.object({
736
940
  clipPathUnits: z.unknown().optional(),
737
941
  clipRule: z.unknown().optional(),
738
942
  colorInterpolation: z.unknown().optional(),
739
- colorInterpolationFilters: z.enum(["auto", "sRGB", "linearRGB", "inherit"]).optional(),
943
+ colorInterpolationFilters: z
944
+ .enum(["auto", "sRGB", "linearRGB", "inherit"])
945
+ .optional(),
740
946
  colorProfile: z.unknown().optional(),
741
947
  colorRendering: z.unknown().optional(),
742
948
  contentScriptType: z.unknown().optional(),
@@ -751,7 +957,23 @@ export const SignalFlareAILogoPropsSchema = z.object({
751
957
  direction: z.unknown().optional(),
752
958
  display: z.unknown().optional(),
753
959
  divisor: z.unknown().optional(),
754
- dominantBaseline: z.enum(["auto", "use-script", "no-change", "reset-size", "ideographic", "alphabetic", "hanging", "mathematical", "central", "middle", "text-after-edge", "text-before-edge", "inherit"]).optional(),
960
+ dominantBaseline: z
961
+ .enum([
962
+ "auto",
963
+ "use-script",
964
+ "no-change",
965
+ "reset-size",
966
+ "ideographic",
967
+ "alphabetic",
968
+ "hanging",
969
+ "mathematical",
970
+ "central",
971
+ "middle",
972
+ "text-after-edge",
973
+ "text-before-edge",
974
+ "inherit",
975
+ ])
976
+ .optional(),
755
977
  dur: z.unknown().optional(),
756
978
  dx: z.unknown().optional(),
757
979
  dy: z.unknown().optional(),
@@ -954,16 +1176,48 @@ export const SignalFlareAILogoPropsSchema = z.object({
954
1176
  variant: z.enum(["glyph", "full"]).optional(), // Logo variant - `glyph`: Map pin icon only - `full`: Full logo with wordmark and decorative element
955
1177
  });
956
1178
 
1179
+ export const SparklinePropsSchema = z.object({
1180
+ className: z.string().optional(), // Additional CSS classes
1181
+ children: z
1182
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1183
+ .optional(), // Child elements
1184
+ });
1185
+
1186
+ export const StatCardPropsSchema = z.object({
1187
+ size: z.enum(["sm", "base"]).optional(), // Size of the card. Defaults to `"base"`.
1188
+ label: z
1189
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1190
+ .optional(), // Short descriptive label (e.g. `"Active users"`).
1191
+ value: z
1192
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1193
+ .optional(), // Primary value to emphasise (pre-formatted).
1194
+ hint: z
1195
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1196
+ .optional(), // Optional secondary text displayed under the value.
1197
+ delta: z.unknown().optional(), // Optional change indicator (arrow + number + label).
1198
+ trend: z
1199
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1200
+ .optional(), // Optional content slot rendered on the right-hand side — typically a `Sparkline` showing the metric's trend.
1201
+ loading: z.boolean().optional(), // When `true`, renders a skeleton placeholder in place of value + delta.
1202
+ className: z.string().optional(), // Additional CSS classes merged via `cn()`.
1203
+ });
1204
+
957
1205
  export const SurfacePropsSchema = z.object({
958
1206
  as: z.unknown().optional(), // The HTML element type to render as (e.g. `"div"`, `"section"`, `"article"`).
959
1207
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
960
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content rendered inside the surface.
1208
+ children: z
1209
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1210
+ .optional(), // Content rendered inside the surface.
961
1211
  });
962
1212
 
963
1213
  export const SwitchPropsSchema = z.object({
964
1214
  variant: z.enum(["default", "error"]).optional(), // Visual variant: "default" or "error" for validation failures (visual only, no error text)
965
- 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.
966
- 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
1215
+ label: z
1216
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1217
+ .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.
1218
+ labelTooltip: z
1219
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1220
+ .optional(), // Tooltip content to display next to the label via an info icon
967
1221
  required: z.boolean().optional(), // Whether the switch is required. When explicitly false, shows "(optional)" text after the label.
968
1222
  controlFirst: z.boolean().optional(), // When true (default), switch appears before label. When false, label appears before switch.
969
1223
  size: z.enum(["sm", "base", "lg"]).optional(),
@@ -984,7 +1238,9 @@ export const TablePropsSchema = z.object({
984
1238
  layout: z.enum(["auto", "fixed"]).optional(),
985
1239
  variant: z.enum(["default", "selected"]).optional(),
986
1240
  className: z.string().optional(), // Additional CSS classes
987
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1241
+ children: z
1242
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1243
+ .optional(), // Child elements
988
1244
  });
989
1245
 
990
1246
  export const TabsPropsSchema = z.object({
@@ -1000,11 +1256,35 @@ export const TabsPropsSchema = z.object({
1000
1256
  });
1001
1257
 
1002
1258
  export const TextPropsSchema = z.object({
1003
- 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
1259
+ variant: z
1260
+ .enum([
1261
+ "heading1",
1262
+ "heading2",
1263
+ "heading3",
1264
+ "body",
1265
+ "secondary",
1266
+ "success",
1267
+ "error",
1268
+ "mono",
1269
+ "mono-secondary",
1270
+ ])
1271
+ .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
1004
1272
  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
1005
1273
  bold: z.boolean().optional(), // Whether to use bold font weight (only applies to body variants).
1006
1274
  as: z.unknown().optional(), // The HTML element type to render as (e.g. `"span"`, `"p"`, `"h1"`). Auto-selected based on variant if omitted.
1007
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Text content.
1275
+ children: z
1276
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1277
+ .optional(), // Text content.
1278
+ });
1279
+
1280
+ export const TextRollPropsSchema = z.object({
1281
+ children: z.string(), // Text to animate. Each character rolls in / out independently.
1282
+ duration: z.number().optional(), // Duration (seconds) of each letter's enter and exit tween.
1283
+ getEnterDelay: z.unknown().optional(), // Per-letter delay for the enter animation.
1284
+ getExitDelay: z.unknown().optional(), // Per-letter delay for the exit animation.
1285
+ className: z.string().optional(), // Additional CSS classes merged via `cn()`. Use sf semantic tokens only.
1286
+ transition: z.unknown().optional(), // Shared transition for both enter and exit tweens.
1287
+ variants: z.unknown().optional(), // Override the default rotate-X roll with custom enter/exit variants.
1008
1288
  });
1009
1289
 
1010
1290
  export const ThemeTogglePropsSchema = z.object({
@@ -1017,14 +1297,24 @@ export const ThemeTogglePropsSchema = z.object({
1017
1297
  export const ToastyPropsSchema = z.object({
1018
1298
  variant: z.enum(["default", "error", "warning"]).optional(),
1019
1299
  className: z.string().optional(), // Additional CSS classes
1020
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1300
+ children: z
1301
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1302
+ .optional(), // Child elements
1021
1303
  });
1022
1304
 
1023
1305
  export const TooltipPropsSchema = z.object({
1024
1306
  side: z.enum(["top", "bottom", "left", "right"]).optional(),
1025
1307
  className: z.string().optional(), // Additional CSS classes
1026
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
1027
- content: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]), // Content to display in the tooltip
1308
+ children: z
1309
+ .union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema])
1310
+ .optional(), // Child elements
1311
+ content: z.union([
1312
+ z.string(),
1313
+ z.number(),
1314
+ z.boolean(),
1315
+ z.null(),
1316
+ DynamicValueSchema,
1317
+ ]), // Content to display in the tooltip
1028
1318
  });
1029
1319
 
1030
1320
  // =============================================================================
@@ -1034,7 +1324,74 @@ export const TooltipPropsSchema = z.object({
1034
1324
  /**
1035
1325
  * All valid component type names
1036
1326
  */
1037
- export type KumoComponentType = "AiActions" | "AiAgentCard" | "AiApproval" | "AiCodeBlock" | "AiConversation" | "AiInfoBanner" | "AiLoader" | "AiMessage" | "AiMissionHeader" | "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" | "Surface" | "Switch" | "Table" | "Tabs" | "Text" | "ThemeToggle" | "Toasty" | "Tooltip";
1327
+ export type KumoComponentType =
1328
+ | "AiActions"
1329
+ | "AiAgentCard"
1330
+ | "AiApproval"
1331
+ | "AiCodeBlock"
1332
+ | "AiConversation"
1333
+ | "AiInfoBanner"
1334
+ | "AiMessage"
1335
+ | "AiMissionHeader"
1336
+ | "AiPartGroup"
1337
+ | "AiQuestion"
1338
+ | "AiReasoning"
1339
+ | "AiResponse"
1340
+ | "AiShimmer"
1341
+ | "AiStatusBadge"
1342
+ | "AiStreamingText"
1343
+ | "AiSubagent"
1344
+ | "AiSuggestions"
1345
+ | "AiTaskList"
1346
+ | "AiTimeline"
1347
+ | "AiToolCall"
1348
+ | "AiUsageBar"
1349
+ | "Badge"
1350
+ | "Banner"
1351
+ | "Breadcrumbs"
1352
+ | "Button"
1353
+ | "Checkbox"
1354
+ | "ClipboardText"
1355
+ | "Code"
1356
+ | "Collapsible"
1357
+ | "Combobox"
1358
+ | "CommandPalette"
1359
+ | "DataGrid"
1360
+ | "DatePicker"
1361
+ | "DateRangePicker"
1362
+ | "Dialog"
1363
+ | "DropdownMenu"
1364
+ | "Empty"
1365
+ | "Field"
1366
+ | "Filters"
1367
+ | "Grid"
1368
+ | "Input"
1369
+ | "InputArea"
1370
+ | "Label"
1371
+ | "LayerCard"
1372
+ | "Link"
1373
+ | "Loader"
1374
+ | "MenuBar"
1375
+ | "Meter"
1376
+ | "Pagination"
1377
+ | "Popover"
1378
+ | "PromptInput"
1379
+ | "Radio"
1380
+ | "Select"
1381
+ | "SensitiveInput"
1382
+ | "Sidebar"
1383
+ | "SignalFlareAILogo"
1384
+ | "Sparkline"
1385
+ | "StatCard"
1386
+ | "Surface"
1387
+ | "Switch"
1388
+ | "Table"
1389
+ | "Tabs"
1390
+ | "Text"
1391
+ | "TextRoll"
1392
+ | "ThemeToggle"
1393
+ | "Toasty"
1394
+ | "Tooltip";
1038
1395
 
1039
1396
  export const KumoComponentTypeSchema = z.enum([
1040
1397
  "AiActions",
@@ -1043,9 +1400,9 @@ export const KumoComponentTypeSchema = z.enum([
1043
1400
  "AiCodeBlock",
1044
1401
  "AiConversation",
1045
1402
  "AiInfoBanner",
1046
- "AiLoader",
1047
1403
  "AiMessage",
1048
1404
  "AiMissionHeader",
1405
+ "AiPartGroup",
1049
1406
  "AiQuestion",
1050
1407
  "AiReasoning",
1051
1408
  "AiResponse",
@@ -1093,11 +1450,14 @@ export const KumoComponentTypeSchema = z.enum([
1093
1450
  "SensitiveInput",
1094
1451
  "Sidebar",
1095
1452
  "SignalFlareAILogo",
1453
+ "Sparkline",
1454
+ "StatCard",
1096
1455
  "Surface",
1097
1456
  "Switch",
1098
1457
  "Table",
1099
1458
  "Tabs",
1100
1459
  "Text",
1460
+ "TextRoll",
1101
1461
  "ThemeToggle",
1102
1462
  "Toasty",
1103
1463
  "Tooltip",
@@ -1113,9 +1473,9 @@ export const ComponentPropsSchemas = {
1113
1473
  AiCodeBlock: AiCodeBlockPropsSchema,
1114
1474
  AiConversation: AiConversationPropsSchema,
1115
1475
  AiInfoBanner: AiInfoBannerPropsSchema,
1116
- AiLoader: AiLoaderPropsSchema,
1117
1476
  AiMessage: AiMessagePropsSchema,
1118
1477
  AiMissionHeader: AiMissionHeaderPropsSchema,
1478
+ AiPartGroup: AiPartGroupPropsSchema,
1119
1479
  AiQuestion: AiQuestionPropsSchema,
1120
1480
  AiReasoning: AiReasoningPropsSchema,
1121
1481
  AiResponse: AiResponsePropsSchema,
@@ -1163,11 +1523,14 @@ export const ComponentPropsSchemas = {
1163
1523
  SensitiveInput: SensitiveInputPropsSchema,
1164
1524
  Sidebar: SidebarPropsSchema,
1165
1525
  SignalFlareAILogo: SignalFlareAILogoPropsSchema,
1526
+ Sparkline: SparklinePropsSchema,
1527
+ StatCard: StatCardPropsSchema,
1166
1528
  Surface: SurfacePropsSchema,
1167
1529
  Switch: SwitchPropsSchema,
1168
1530
  Table: TablePropsSchema,
1169
1531
  Tabs: TabsPropsSchema,
1170
1532
  Text: TextPropsSchema,
1533
+ TextRoll: TextRollPropsSchema,
1171
1534
  ThemeToggle: ThemeTogglePropsSchema,
1172
1535
  Toasty: ToastyPropsSchema,
1173
1536
  Tooltip: TooltipPropsSchema,
@@ -1209,10 +1572,22 @@ export type UITree = z.infer<typeof UITreeSchema>;
1209
1572
  /**
1210
1573
  * Validate an element's props against its component schema
1211
1574
  */
1212
- export function validateElementProps(element: UIElement): SafeParseResult<unknown> {
1213
- const schema = ComponentPropsSchemas[element.type as keyof typeof ComponentPropsSchemas];
1575
+ export function validateElementProps(
1576
+ element: UIElement
1577
+ ): SafeParseResult<unknown> {
1578
+ const schema =
1579
+ ComponentPropsSchemas[element.type as keyof typeof ComponentPropsSchemas];
1214
1580
  if (!schema) {
1215
- return { success: false, error: new z.ZodError([{ code: 'custom', message: `Unknown component type: ${element.type}`, path: ['type'] }]) };
1581
+ return {
1582
+ success: false,
1583
+ error: new z.ZodError([
1584
+ {
1585
+ code: "custom",
1586
+ message: `Unknown component type: ${element.type}`,
1587
+ path: ["type"],
1588
+ },
1589
+ ]),
1590
+ };
1216
1591
  }
1217
1592
  return schema.safeParse(element.props);
1218
1593
  }
@@ -1227,4 +1602,72 @@ export function validateUITree(tree: unknown): SafeParseResult<UITree> {
1227
1602
  /**
1228
1603
  * List of all component names (for catalog generation)
1229
1604
  */
1230
- export const SF_COMPONENT_NAMES = ["AiActions", "AiAgentCard", "AiApproval", "AiCodeBlock", "AiConversation", "AiInfoBanner", "AiLoader", "AiMessage", "AiMissionHeader", "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", "Surface", "Switch", "Table", "Tabs", "Text", "ThemeToggle", "Toasty", "Tooltip"] as const;
1605
+ export const SF_COMPONENT_NAMES = [
1606
+ "AiActions",
1607
+ "AiAgentCard",
1608
+ "AiApproval",
1609
+ "AiCodeBlock",
1610
+ "AiConversation",
1611
+ "AiInfoBanner",
1612
+ "AiMessage",
1613
+ "AiMissionHeader",
1614
+ "AiPartGroup",
1615
+ "AiQuestion",
1616
+ "AiReasoning",
1617
+ "AiResponse",
1618
+ "AiShimmer",
1619
+ "AiStatusBadge",
1620
+ "AiStreamingText",
1621
+ "AiSubagent",
1622
+ "AiSuggestions",
1623
+ "AiTaskList",
1624
+ "AiTimeline",
1625
+ "AiToolCall",
1626
+ "AiUsageBar",
1627
+ "Badge",
1628
+ "Banner",
1629
+ "Breadcrumbs",
1630
+ "Button",
1631
+ "Checkbox",
1632
+ "ClipboardText",
1633
+ "Code",
1634
+ "Collapsible",
1635
+ "Combobox",
1636
+ "CommandPalette",
1637
+ "DataGrid",
1638
+ "DatePicker",
1639
+ "DateRangePicker",
1640
+ "Dialog",
1641
+ "DropdownMenu",
1642
+ "Empty",
1643
+ "Field",
1644
+ "Filters",
1645
+ "Grid",
1646
+ "Input",
1647
+ "InputArea",
1648
+ "Label",
1649
+ "LayerCard",
1650
+ "Link",
1651
+ "Loader",
1652
+ "MenuBar",
1653
+ "Meter",
1654
+ "Pagination",
1655
+ "Popover",
1656
+ "PromptInput",
1657
+ "Radio",
1658
+ "Select",
1659
+ "SensitiveInput",
1660
+ "Sidebar",
1661
+ "SignalFlareAILogo",
1662
+ "Sparkline",
1663
+ "StatCard",
1664
+ "Surface",
1665
+ "Switch",
1666
+ "Table",
1667
+ "Tabs",
1668
+ "Text",
1669
+ "TextRoll",
1670
+ "ThemeToggle",
1671
+ "Toasty",
1672
+ "Tooltip",
1673
+ ] as const;