@usetheo/ui 0.9.0-next.0 → 0.11.0-next.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 (502) hide show
  1. package/CHANGELOG.md +215 -0
  2. package/README.md +22 -21
  3. package/dist/chunk-2UJROWAG.js +106 -0
  4. package/dist/chunk-2UJROWAG.js.map +1 -0
  5. package/dist/chunk-2XPWOUEH.js +68 -0
  6. package/dist/chunk-2XPWOUEH.js.map +1 -0
  7. package/dist/chunk-3GHLNCM3.js +42 -0
  8. package/dist/chunk-3GHLNCM3.js.map +1 -0
  9. package/dist/chunk-3HOXC25T.js +48 -0
  10. package/dist/chunk-3HOXC25T.js.map +1 -0
  11. package/dist/chunk-3QGO5SB3.js +46 -0
  12. package/dist/chunk-3QGO5SB3.js.map +1 -0
  13. package/dist/chunk-47QJVWW2.js +85 -0
  14. package/dist/chunk-47QJVWW2.js.map +1 -0
  15. package/dist/chunk-4L63UW3I.js +35 -0
  16. package/dist/chunk-4L63UW3I.js.map +1 -0
  17. package/dist/chunk-4UUSJJFZ.js +25 -0
  18. package/dist/chunk-4UUSJJFZ.js.map +1 -0
  19. package/dist/chunk-4ZBZBRG5.js +127 -0
  20. package/dist/chunk-4ZBZBRG5.js.map +1 -0
  21. package/dist/chunk-57NXT3OX.js +92 -0
  22. package/dist/chunk-57NXT3OX.js.map +1 -0
  23. package/dist/chunk-5FF5EUZP.js +44 -0
  24. package/dist/chunk-5FF5EUZP.js.map +1 -0
  25. package/dist/chunk-5UGQXB2P.js +714 -0
  26. package/dist/chunk-5UGQXB2P.js.map +1 -0
  27. package/dist/chunk-62FT22CI.js +85 -0
  28. package/dist/chunk-62FT22CI.js.map +1 -0
  29. package/dist/chunk-673R3GSK.js +19 -0
  30. package/dist/chunk-673R3GSK.js.map +1 -0
  31. package/dist/chunk-6VINZJBV.js +128 -0
  32. package/dist/chunk-6VINZJBV.js.map +1 -0
  33. package/dist/chunk-74NZ5U3E.js +145 -0
  34. package/dist/chunk-74NZ5U3E.js.map +1 -0
  35. package/dist/chunk-755NWSNW.js +36 -0
  36. package/dist/chunk-755NWSNW.js.map +1 -0
  37. package/dist/chunk-7GLBWWMW.js +70 -0
  38. package/dist/chunk-7GLBWWMW.js.map +1 -0
  39. package/dist/chunk-7RXYW5VM.js +88 -0
  40. package/dist/chunk-7RXYW5VM.js.map +1 -0
  41. package/dist/chunk-AC4MGCXI.js +92 -0
  42. package/dist/chunk-AC4MGCXI.js.map +1 -0
  43. package/dist/chunk-AEVSVDT6.js +67 -0
  44. package/dist/chunk-AEVSVDT6.js.map +1 -0
  45. package/dist/chunk-AODIMN2N.js +68 -0
  46. package/dist/chunk-AODIMN2N.js.map +1 -0
  47. package/dist/chunk-ATHOPBCA.js +61 -0
  48. package/dist/chunk-ATHOPBCA.js.map +1 -0
  49. package/dist/chunk-AXKBNRZW.js +173 -0
  50. package/dist/chunk-AXKBNRZW.js.map +1 -0
  51. package/dist/chunk-B75MEYNR.js +106 -0
  52. package/dist/chunk-B75MEYNR.js.map +1 -0
  53. package/dist/chunk-BGKA6DI6.js +34 -0
  54. package/dist/chunk-BGKA6DI6.js.map +1 -0
  55. package/dist/chunk-BNQAJGEN.js +88 -0
  56. package/dist/chunk-BNQAJGEN.js.map +1 -0
  57. package/dist/chunk-BP2SETUC.js +101 -0
  58. package/dist/chunk-BP2SETUC.js.map +1 -0
  59. package/dist/chunk-BPUQWMBD.js +79 -0
  60. package/dist/chunk-BPUQWMBD.js.map +1 -0
  61. package/dist/chunk-BVDASR3Y.js +74 -0
  62. package/dist/chunk-BVDASR3Y.js.map +1 -0
  63. package/dist/chunk-BX7A5GUV.js +78 -0
  64. package/dist/chunk-BX7A5GUV.js.map +1 -0
  65. package/dist/chunk-CDA6RYOX.js +115 -0
  66. package/dist/chunk-CDA6RYOX.js.map +1 -0
  67. package/dist/chunk-CG7O3A42.js +80 -0
  68. package/dist/chunk-CG7O3A42.js.map +1 -0
  69. package/dist/chunk-CIYGNPKT.js +76 -0
  70. package/dist/chunk-CIYGNPKT.js.map +1 -0
  71. package/dist/chunk-CKXY4FTV.js +59 -0
  72. package/dist/chunk-CKXY4FTV.js.map +1 -0
  73. package/dist/chunk-CVOKZITR.js +82 -0
  74. package/dist/chunk-CVOKZITR.js.map +1 -0
  75. package/dist/chunk-CWFMFKDI.js +82 -0
  76. package/dist/chunk-CWFMFKDI.js.map +1 -0
  77. package/dist/chunk-CWVKSV7S.js +124 -0
  78. package/dist/chunk-CWVKSV7S.js.map +1 -0
  79. package/dist/chunk-CYOLRWOX.js +63 -0
  80. package/dist/chunk-CYOLRWOX.js.map +1 -0
  81. package/dist/chunk-D23LRJT6.js +116 -0
  82. package/dist/chunk-D23LRJT6.js.map +1 -0
  83. package/dist/chunk-DFADMEJK.js +127 -0
  84. package/dist/chunk-DFADMEJK.js.map +1 -0
  85. package/dist/chunk-DKQAHZG2.js +83 -0
  86. package/dist/chunk-DKQAHZG2.js.map +1 -0
  87. package/dist/chunk-E5A7HN6H.js +32 -0
  88. package/dist/chunk-E5A7HN6H.js.map +1 -0
  89. package/dist/chunk-EI63GTN7.js +57 -0
  90. package/dist/chunk-EI63GTN7.js.map +1 -0
  91. package/dist/chunk-EP25QJ4N.js +146 -0
  92. package/dist/chunk-EP25QJ4N.js.map +1 -0
  93. package/dist/chunk-ET44426Q.js +80 -0
  94. package/dist/chunk-ET44426Q.js.map +1 -0
  95. package/dist/chunk-ETEIDY34.js +67 -0
  96. package/dist/chunk-ETEIDY34.js.map +1 -0
  97. package/dist/chunk-EU55O4P7.js +76 -0
  98. package/dist/chunk-EU55O4P7.js.map +1 -0
  99. package/dist/chunk-F436537E.js +104 -0
  100. package/dist/chunk-F436537E.js.map +1 -0
  101. package/dist/chunk-FLBTGNQI.js +86 -0
  102. package/dist/chunk-FLBTGNQI.js.map +1 -0
  103. package/dist/chunk-FUT45NFW.js +46 -0
  104. package/dist/chunk-FUT45NFW.js.map +1 -0
  105. package/dist/chunk-G3LWNTVZ.js +51 -0
  106. package/dist/chunk-G3LWNTVZ.js.map +1 -0
  107. package/dist/chunk-GBJB5WLT.js +58 -0
  108. package/dist/chunk-GBJB5WLT.js.map +1 -0
  109. package/dist/chunk-GIEPEFRX.js +110 -0
  110. package/dist/chunk-GIEPEFRX.js.map +1 -0
  111. package/dist/chunk-GSO7MISR.js +58 -0
  112. package/dist/chunk-GSO7MISR.js.map +1 -0
  113. package/dist/chunk-GUQFYUIC.js +61 -0
  114. package/dist/chunk-GUQFYUIC.js.map +1 -0
  115. package/dist/chunk-H3VJMFJQ.js +35 -0
  116. package/dist/chunk-H3VJMFJQ.js.map +1 -0
  117. package/dist/chunk-HG4WEERE.js +26 -0
  118. package/dist/chunk-HG4WEERE.js.map +1 -0
  119. package/dist/chunk-HGPBGLNP.js +51 -0
  120. package/dist/chunk-HGPBGLNP.js.map +1 -0
  121. package/dist/chunk-HQFTW7SF.js +141 -0
  122. package/dist/chunk-HQFTW7SF.js.map +1 -0
  123. package/dist/chunk-I7WYM63C.js +170 -0
  124. package/dist/chunk-I7WYM63C.js.map +1 -0
  125. package/dist/chunk-IPEYGWA7.js +186 -0
  126. package/dist/chunk-IPEYGWA7.js.map +1 -0
  127. package/dist/chunk-IWSLOBYG.js +199 -0
  128. package/dist/chunk-IWSLOBYG.js.map +1 -0
  129. package/dist/chunk-JQXLPVWP.js +74 -0
  130. package/dist/chunk-JQXLPVWP.js.map +1 -0
  131. package/dist/chunk-K5ARID4S.js +26 -0
  132. package/dist/chunk-K5ARID4S.js.map +1 -0
  133. package/dist/chunk-K6RTLPIJ.js +41 -0
  134. package/dist/chunk-K6RTLPIJ.js.map +1 -0
  135. package/dist/chunk-KQNKKV2C.js +56 -0
  136. package/dist/chunk-KQNKKV2C.js.map +1 -0
  137. package/dist/chunk-KRN4NE4U.js +155 -0
  138. package/dist/chunk-KRN4NE4U.js.map +1 -0
  139. package/dist/chunk-L2BI762I.js +82 -0
  140. package/dist/chunk-L2BI762I.js.map +1 -0
  141. package/dist/chunk-LEEH63B2.js +56 -0
  142. package/dist/chunk-LEEH63B2.js.map +1 -0
  143. package/dist/chunk-LHRWVM3G.js +42 -0
  144. package/dist/chunk-LHRWVM3G.js.map +1 -0
  145. package/dist/chunk-LIGWMGXM.js +117 -0
  146. package/dist/chunk-LIGWMGXM.js.map +1 -0
  147. package/dist/chunk-LKYSX3QF.js +104 -0
  148. package/dist/chunk-LKYSX3QF.js.map +1 -0
  149. package/dist/chunk-MCIFB6VS.js +54 -0
  150. package/dist/chunk-MCIFB6VS.js.map +1 -0
  151. package/dist/chunk-MI5CXMZU.js +171 -0
  152. package/dist/chunk-MI5CXMZU.js.map +1 -0
  153. package/dist/chunk-NQZYY4LR.js +84 -0
  154. package/dist/chunk-NQZYY4LR.js.map +1 -0
  155. package/dist/chunk-O23LKHUR.js +66 -0
  156. package/dist/chunk-O23LKHUR.js.map +1 -0
  157. package/dist/chunk-PASI2U2R.js +23 -0
  158. package/dist/chunk-PASI2U2R.js.map +1 -0
  159. package/dist/chunk-PPH5NTHV.js +34 -0
  160. package/dist/chunk-PPH5NTHV.js.map +1 -0
  161. package/dist/chunk-PR6OZF6D.js +28 -0
  162. package/dist/chunk-PR6OZF6D.js.map +1 -0
  163. package/dist/chunk-PWXOXPFT.js +142 -0
  164. package/dist/chunk-PWXOXPFT.js.map +1 -0
  165. package/dist/chunk-QB6BNHO3.js +112 -0
  166. package/dist/chunk-QB6BNHO3.js.map +1 -0
  167. package/dist/chunk-QJGGTIUN.js +110 -0
  168. package/dist/chunk-QJGGTIUN.js.map +1 -0
  169. package/dist/chunk-QSOIJ6J3.js +91 -0
  170. package/dist/chunk-QSOIJ6J3.js.map +1 -0
  171. package/dist/chunk-R2PAGRDP.js +152 -0
  172. package/dist/chunk-R2PAGRDP.js.map +1 -0
  173. package/dist/chunk-R63ZKLQM.js +45 -0
  174. package/dist/chunk-R63ZKLQM.js.map +1 -0
  175. package/dist/chunk-RTYYJPPE.js +77 -0
  176. package/dist/chunk-RTYYJPPE.js.map +1 -0
  177. package/dist/chunk-RVOBP7PO.js +116 -0
  178. package/dist/chunk-RVOBP7PO.js.map +1 -0
  179. package/dist/chunk-SF6R5VMQ.js +97 -0
  180. package/dist/chunk-SF6R5VMQ.js.map +1 -0
  181. package/dist/chunk-SP4CP5HY.js +57 -0
  182. package/dist/chunk-SP4CP5HY.js.map +1 -0
  183. package/dist/chunk-SWJ4EUOI.js +30 -0
  184. package/dist/chunk-SWJ4EUOI.js.map +1 -0
  185. package/dist/chunk-TK24HQJJ.js +128 -0
  186. package/dist/chunk-TK24HQJJ.js.map +1 -0
  187. package/dist/chunk-TNBJ36XJ.js +156 -0
  188. package/dist/chunk-TNBJ36XJ.js.map +1 -0
  189. package/dist/chunk-TO3UAT6O.js +221 -0
  190. package/dist/chunk-TO3UAT6O.js.map +1 -0
  191. package/dist/chunk-UAYOOTRR.js +77 -0
  192. package/dist/chunk-UAYOOTRR.js.map +1 -0
  193. package/dist/chunk-UDTAMHXW.js +55 -0
  194. package/dist/chunk-UDTAMHXW.js.map +1 -0
  195. package/dist/chunk-UGKI466V.js +12 -0
  196. package/dist/chunk-UGKI466V.js.map +1 -0
  197. package/dist/chunk-UOXU7NDY.js +120 -0
  198. package/dist/chunk-UOXU7NDY.js.map +1 -0
  199. package/dist/chunk-V7OOTVK3.js +106 -0
  200. package/dist/chunk-V7OOTVK3.js.map +1 -0
  201. package/dist/chunk-VI5M7KJ2.js +1022 -0
  202. package/dist/chunk-VI5M7KJ2.js.map +1 -0
  203. package/dist/chunk-VM4RMQQN.js +11 -0
  204. package/dist/chunk-VM4RMQQN.js.map +1 -0
  205. package/dist/chunk-VMMATOPE.js +64 -0
  206. package/dist/chunk-VMMATOPE.js.map +1 -0
  207. package/dist/chunk-W2PVSIW3.js +89 -0
  208. package/dist/chunk-W2PVSIW3.js.map +1 -0
  209. package/dist/chunk-W3DUDZDU.js +88 -0
  210. package/dist/chunk-W3DUDZDU.js.map +1 -0
  211. package/dist/chunk-WKEUU2FU.js +114 -0
  212. package/dist/chunk-WKEUU2FU.js.map +1 -0
  213. package/dist/chunk-WKLW7RC6.js +28 -0
  214. package/dist/chunk-WKLW7RC6.js.map +1 -0
  215. package/dist/chunk-WSJGZNUH.js +111 -0
  216. package/dist/chunk-WSJGZNUH.js.map +1 -0
  217. package/dist/chunk-WVPDQMC2.js +144 -0
  218. package/dist/chunk-WVPDQMC2.js.map +1 -0
  219. package/dist/chunk-WWNH5ENT.js +43 -0
  220. package/dist/chunk-WWNH5ENT.js.map +1 -0
  221. package/dist/chunk-X5L62PXY.js +112 -0
  222. package/dist/chunk-X5L62PXY.js.map +1 -0
  223. package/dist/chunk-XGCV5E6W.js +133 -0
  224. package/dist/chunk-XGCV5E6W.js.map +1 -0
  225. package/dist/chunk-XRKIEL5M.js +72 -0
  226. package/dist/chunk-XRKIEL5M.js.map +1 -0
  227. package/dist/chunk-XUJYEADU.js +80 -0
  228. package/dist/chunk-XUJYEADU.js.map +1 -0
  229. package/dist/chunk-XVYNSIQC.js +116 -0
  230. package/dist/chunk-XVYNSIQC.js.map +1 -0
  231. package/dist/chunk-XWTISHXO.js +54 -0
  232. package/dist/chunk-XWTISHXO.js.map +1 -0
  233. package/dist/chunk-YOGHS4UU.js +202 -0
  234. package/dist/chunk-YOGHS4UU.js.map +1 -0
  235. package/dist/chunk-YRSKXEOD.js +135 -0
  236. package/dist/chunk-YRSKXEOD.js.map +1 -0
  237. package/dist/chunk-ZALLCR7X.js +108 -0
  238. package/dist/chunk-ZALLCR7X.js.map +1 -0
  239. package/dist/chunk-ZDAOHMCW.js +46 -0
  240. package/dist/chunk-ZDAOHMCW.js.map +1 -0
  241. package/dist/chunk-ZESICCKK.js +37 -0
  242. package/dist/chunk-ZESICCKK.js.map +1 -0
  243. package/dist/chunk-ZIKFOD6N.js +87 -0
  244. package/dist/chunk-ZIKFOD6N.js.map +1 -0
  245. package/dist/chunk-ZJRWCQEN.js +76 -0
  246. package/dist/chunk-ZJRWCQEN.js.map +1 -0
  247. package/dist/chunk-ZSRJCIWF.js +24 -0
  248. package/dist/chunk-ZSRJCIWF.js.map +1 -0
  249. package/dist/chunk-ZXPDS6DH.js +3 -0
  250. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  251. package/dist/components.css +1 -1
  252. package/dist/composites/account-menu/index.js +6 -0
  253. package/dist/composites/account-menu/index.js.map +1 -0
  254. package/dist/composites/agent-composer/index.js +7 -0
  255. package/dist/composites/agent-composer/index.js.map +1 -0
  256. package/dist/composites/agent-editor/index.js +10 -0
  257. package/dist/composites/agent-editor/index.js.map +1 -0
  258. package/dist/composites/agent-stream/index.js +12 -0
  259. package/dist/composites/agent-stream/index.js.map +1 -0
  260. package/dist/composites/agent-timeline/index.js +5 -0
  261. package/dist/composites/agent-timeline/index.js.map +1 -0
  262. package/dist/composites/approval-card/index.js +5 -0
  263. package/dist/composites/approval-card/index.js.map +1 -0
  264. package/dist/composites/chat-composer/index.js +6 -0
  265. package/dist/composites/chat-composer/index.js.map +1 -0
  266. package/dist/composites/chat-message/index.js +6 -0
  267. package/dist/composites/chat-message/index.js.map +1 -0
  268. package/dist/composites/code-block/index.js +5 -0
  269. package/dist/composites/code-block/index.js.map +1 -0
  270. package/dist/composites/command-palette/index.js +5 -0
  271. package/dist/composites/command-palette/index.js.map +1 -0
  272. package/dist/composites/confirm-dialog/index.js +7 -0
  273. package/dist/composites/confirm-dialog/index.js.map +1 -0
  274. package/dist/composites/cron-jobs-list/index.js +5 -0
  275. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  276. package/dist/composites/data-table/index.js +10 -0
  277. package/dist/composites/data-table/index.js.map +1 -0
  278. package/dist/composites/deployment-row/index.js +5 -0
  279. package/dist/composites/deployment-row/index.js.map +1 -0
  280. package/dist/composites/domain-config/index.js +7 -0
  281. package/dist/composites/domain-config/index.js.map +1 -0
  282. package/dist/composites/env-var-editor/index.js +7 -0
  283. package/dist/composites/env-var-editor/index.js.map +1 -0
  284. package/dist/composites/mcp-server-list/index.js +5 -0
  285. package/dist/composites/mcp-server-list/index.js.map +1 -0
  286. package/dist/composites/page-shell/index.js +7 -0
  287. package/dist/composites/page-shell/index.js.map +1 -0
  288. package/dist/composites/permission-modal/index.js +6 -0
  289. package/dist/composites/permission-modal/index.js.map +1 -0
  290. package/dist/composites/preview-env-card/index.js +6 -0
  291. package/dist/composites/preview-env-card/index.js.map +1 -0
  292. package/dist/composites/preview-panel/index.js +5 -0
  293. package/dist/composites/preview-panel/index.js.map +1 -0
  294. package/dist/composites/project-card/index.js +6 -0
  295. package/dist/composites/project-card/index.js.map +1 -0
  296. package/dist/composites/rollback-ui/index.js +6 -0
  297. package/dist/composites/rollback-ui/index.js.map +1 -0
  298. package/dist/composites/rule-editor/index.js +11 -0
  299. package/dist/composites/rule-editor/index.js.map +1 -0
  300. package/dist/composites/skill-editor/index.js +11 -0
  301. package/dist/composites/skill-editor/index.js.map +1 -0
  302. package/dist/composites/skills-list/index.js +5 -0
  303. package/dist/composites/skills-list/index.js.map +1 -0
  304. package/dist/composites/task-header/index.js +5 -0
  305. package/dist/composites/task-header/index.js.map +1 -0
  306. package/dist/composites/usage-meter/index.js +5 -0
  307. package/dist/composites/usage-meter/index.js.map +1 -0
  308. package/dist/index.d.ts +281 -12
  309. package/dist/index.js +129 -9487
  310. package/dist/index.js.map +1 -1
  311. package/dist/primitives/action-bar/index.js +4 -0
  312. package/dist/primitives/action-bar/index.js.map +1 -0
  313. package/dist/primitives/agent-error-card/index.js +5 -0
  314. package/dist/primitives/agent-error-card/index.js.map +1 -0
  315. package/dist/primitives/agent-event/index.js +4 -0
  316. package/dist/primitives/agent-event/index.js.map +1 -0
  317. package/dist/primitives/agent-handoff/index.js +4 -0
  318. package/dist/primitives/agent-handoff/index.js.map +1 -0
  319. package/dist/primitives/agent-profile/index.js +4 -0
  320. package/dist/primitives/agent-profile/index.js.map +1 -0
  321. package/dist/primitives/agent-starting-state/index.js +5 -0
  322. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  323. package/dist/primitives/agent-streaming/index.js +5 -0
  324. package/dist/primitives/agent-streaming/index.js.map +1 -0
  325. package/dist/primitives/alert/index.js +4 -0
  326. package/dist/primitives/alert/index.js.map +1 -0
  327. package/dist/primitives/artifact-preview/index.js +4 -0
  328. package/dist/primitives/artifact-preview/index.js.map +1 -0
  329. package/dist/primitives/attachment-chip/index.js +4 -0
  330. package/dist/primitives/attachment-chip/index.js.map +1 -0
  331. package/dist/primitives/audit-log-entry/index.js +4 -0
  332. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  333. package/dist/primitives/auto-compact-notice/index.js +5 -0
  334. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  335. package/dist/primitives/avatar/index.js +4 -0
  336. package/dist/primitives/avatar/index.js.map +1 -0
  337. package/dist/primitives/badge/index.js +4 -0
  338. package/dist/primitives/badge/index.js.map +1 -0
  339. package/dist/primitives/browser-controls/index.js +4 -0
  340. package/dist/primitives/browser-controls/index.js.map +1 -0
  341. package/dist/primitives/build-log-stream/index.js +5 -0
  342. package/dist/primitives/build-log-stream/index.js.map +1 -0
  343. package/dist/primitives/button/index.js +4 -0
  344. package/dist/primitives/button/index.js.map +1 -0
  345. package/dist/primitives/capability-indicator/index.js +4 -0
  346. package/dist/primitives/capability-indicator/index.js.map +1 -0
  347. package/dist/primitives/card/index.js +4 -0
  348. package/dist/primitives/card/index.js.map +1 -0
  349. package/dist/primitives/chat-thread/index.js +5 -0
  350. package/dist/primitives/chat-thread/index.js.map +1 -0
  351. package/dist/primitives/checkbox/index.js +4 -0
  352. package/dist/primitives/checkbox/index.js.map +1 -0
  353. package/dist/primitives/context-card/index.js +4 -0
  354. package/dist/primitives/context-card/index.js.map +1 -0
  355. package/dist/primitives/context-window-bar/index.js +4 -0
  356. package/dist/primitives/context-window-bar/index.js.map +1 -0
  357. package/dist/primitives/copy-button/index.js +4 -0
  358. package/dist/primitives/copy-button/index.js.map +1 -0
  359. package/dist/primitives/cost-meter/index.js +4 -0
  360. package/dist/primitives/cost-meter/index.js.map +1 -0
  361. package/dist/primitives/created-files-card/index.js +4 -0
  362. package/dist/primitives/created-files-card/index.js.map +1 -0
  363. package/dist/primitives/cron-job-card/index.js +4 -0
  364. package/dist/primitives/cron-job-card/index.js.map +1 -0
  365. package/dist/primitives/danger-zone/index.js +4 -0
  366. package/dist/primitives/danger-zone/index.js.map +1 -0
  367. package/dist/primitives/dialog/index.js +4 -0
  368. package/dist/primitives/dialog/index.js.map +1 -0
  369. package/dist/primitives/diff-viewer/index.js +4 -0
  370. package/dist/primitives/diff-viewer/index.js.map +1 -0
  371. package/dist/primitives/dropdown-menu/index.js +4 -0
  372. package/dist/primitives/dropdown-menu/index.js.map +1 -0
  373. package/dist/primitives/empty-state/index.js +4 -0
  374. package/dist/primitives/empty-state/index.js.map +1 -0
  375. package/dist/primitives/folder-context-card/index.js +4 -0
  376. package/dist/primitives/folder-context-card/index.js.map +1 -0
  377. package/dist/primitives/folder-selector/index.js +4 -0
  378. package/dist/primitives/folder-selector/index.js.map +1 -0
  379. package/dist/primitives/form-field/index.js +4 -0
  380. package/dist/primitives/form-field/index.js.map +1 -0
  381. package/dist/primitives/hook-config/index.js +4 -0
  382. package/dist/primitives/hook-config/index.js.map +1 -0
  383. package/dist/primitives/hook-event-log/index.js +4 -0
  384. package/dist/primitives/hook-event-log/index.js.map +1 -0
  385. package/dist/primitives/input/index.js +4 -0
  386. package/dist/primitives/input/index.js.map +1 -0
  387. package/dist/primitives/intent-selector/index.js +4 -0
  388. package/dist/primitives/intent-selector/index.js.map +1 -0
  389. package/dist/primitives/label/index.js +4 -0
  390. package/dist/primitives/label/index.js.map +1 -0
  391. package/dist/primitives/lane-board/index.js +4 -0
  392. package/dist/primitives/lane-board/index.js.map +1 -0
  393. package/dist/primitives/login-split/index.js +4 -0
  394. package/dist/primitives/login-split/index.js.map +1 -0
  395. package/dist/primitives/mcp-server-card/index.js +4 -0
  396. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  397. package/dist/primitives/memory-editor/index.js +4 -0
  398. package/dist/primitives/memory-editor/index.js.map +1 -0
  399. package/dist/primitives/mention-menu/index.js +4 -0
  400. package/dist/primitives/mention-menu/index.js.map +1 -0
  401. package/dist/primitives/metrics-panel/index.js +4 -0
  402. package/dist/primitives/metrics-panel/index.js.map +1 -0
  403. package/dist/primitives/model-card/index.js +4 -0
  404. package/dist/primitives/model-card/index.js.map +1 -0
  405. package/dist/primitives/model-selector/index.js +4 -0
  406. package/dist/primitives/model-selector/index.js.map +1 -0
  407. package/dist/primitives/pagination/index.js +4 -0
  408. package/dist/primitives/pagination/index.js.map +1 -0
  409. package/dist/primitives/permission-matrix/index.js +4 -0
  410. package/dist/primitives/permission-matrix/index.js.map +1 -0
  411. package/dist/primitives/pin-input/index.js +4 -0
  412. package/dist/primitives/pin-input/index.js.map +1 -0
  413. package/dist/primitives/plan-badge/index.js +4 -0
  414. package/dist/primitives/plan-badge/index.js.map +1 -0
  415. package/dist/primitives/progress/index.js +4 -0
  416. package/dist/primitives/progress/index.js.map +1 -0
  417. package/dist/primitives/progress-checklist/index.js +4 -0
  418. package/dist/primitives/progress-checklist/index.js.map +1 -0
  419. package/dist/primitives/project-switcher/index.js +4 -0
  420. package/dist/primitives/project-switcher/index.js.map +1 -0
  421. package/dist/primitives/quick-action-chips/index.js +4 -0
  422. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  423. package/dist/primitives/radio-group/index.js +4 -0
  424. package/dist/primitives/radio-group/index.js.map +1 -0
  425. package/dist/primitives/recent-folders-list/index.js +4 -0
  426. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  427. package/dist/primitives/rule-card/index.js +4 -0
  428. package/dist/primitives/rule-card/index.js.map +1 -0
  429. package/dist/primitives/run-stats/index.js +4 -0
  430. package/dist/primitives/run-stats/index.js.map +1 -0
  431. package/dist/primitives/running-tasks-panel/index.js +4 -0
  432. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  433. package/dist/primitives/scroll-area/index.js +4 -0
  434. package/dist/primitives/scroll-area/index.js.map +1 -0
  435. package/dist/primitives/select/index.js +4 -0
  436. package/dist/primitives/select/index.js.map +1 -0
  437. package/dist/primitives/session-list-item/index.js +4 -0
  438. package/dist/primitives/session-list-item/index.js.map +1 -0
  439. package/dist/primitives/session-timeline/index.js +4 -0
  440. package/dist/primitives/session-timeline/index.js.map +1 -0
  441. package/dist/primitives/sheet/index.js +4 -0
  442. package/dist/primitives/sheet/index.js.map +1 -0
  443. package/dist/primitives/sidebar/index.js +4 -0
  444. package/dist/primitives/sidebar/index.js.map +1 -0
  445. package/dist/primitives/skeleton/index.js +5 -0
  446. package/dist/primitives/skeleton/index.js.map +1 -0
  447. package/dist/primitives/skill-card/index.js +4 -0
  448. package/dist/primitives/skill-card/index.js.map +1 -0
  449. package/dist/primitives/social-auth-row/index.js +4 -0
  450. package/dist/primitives/social-auth-row/index.js.map +1 -0
  451. package/dist/primitives/stat-tile/index.js +4 -0
  452. package/dist/primitives/stat-tile/index.js.map +1 -0
  453. package/dist/primitives/status-dot/index.js +4 -0
  454. package/dist/primitives/status-dot/index.js.map +1 -0
  455. package/dist/primitives/steps-rail/index.js +4 -0
  456. package/dist/primitives/steps-rail/index.js.map +1 -0
  457. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  458. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  459. package/dist/primitives/switch/index.js +4 -0
  460. package/dist/primitives/switch/index.js.map +1 -0
  461. package/dist/primitives/system-prompt-editor/index.js +4 -0
  462. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  463. package/dist/primitives/table/index.js +4 -0
  464. package/dist/primitives/table/index.js.map +1 -0
  465. package/dist/primitives/tabs/index.js +4 -0
  466. package/dist/primitives/tabs/index.js.map +1 -0
  467. package/dist/primitives/task-plan/index.js +4 -0
  468. package/dist/primitives/task-plan/index.js.map +1 -0
  469. package/dist/primitives/terminal-panel/index.js +5 -0
  470. package/dist/primitives/terminal-panel/index.js.map +1 -0
  471. package/dist/primitives/textarea/index.js +4 -0
  472. package/dist/primitives/textarea/index.js.map +1 -0
  473. package/dist/primitives/timestamp/index.js +4 -0
  474. package/dist/primitives/timestamp/index.js.map +1 -0
  475. package/dist/primitives/toast/index.js +4 -0
  476. package/dist/primitives/toast/index.js.map +1 -0
  477. package/dist/primitives/token-usage-chart/index.js +4 -0
  478. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  479. package/dist/primitives/tool-call/index.js +4 -0
  480. package/dist/primitives/tool-call/index.js.map +1 -0
  481. package/dist/primitives/tool-call-card/index.js +4 -0
  482. package/dist/primitives/tool-call-card/index.js.map +1 -0
  483. package/dist/primitives/tool-result/index.js +4 -0
  484. package/dist/primitives/tool-result/index.js.map +1 -0
  485. package/dist/primitives/tools-list/index.js +4 -0
  486. package/dist/primitives/tools-list/index.js.map +1 -0
  487. package/dist/primitives/tooltip/index.js +4 -0
  488. package/dist/primitives/tooltip/index.js.map +1 -0
  489. package/dist/primitives/topnav/index.js +4 -0
  490. package/dist/primitives/topnav/index.js.map +1 -0
  491. package/dist/slide/index.js +1 -712
  492. package/dist/slide/index.js.map +1 -1
  493. package/dist/slide-deck/index.js +2 -688
  494. package/dist/slide-deck/index.js.map +1 -1
  495. package/llms.txt +8 -6
  496. package/package.json +177 -157
  497. package/registry/index.json +30 -0
  498. package/registry/r/action-bar.json +22 -0
  499. package/registry/r/data-table.json +27 -0
  500. package/registry/r/dropdown-menu.json +23 -0
  501. package/registry/r/page-shell.json +25 -0
  502. package/registry/r/pin-input.json +20 -0
package/CHANGELOG.md CHANGED
@@ -7,6 +7,221 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.11.0-next.0] - 2026-05-25
11
+
12
+ Minor (additive, zero breaking change) — ships Brief #5 from the
13
+ TheoCloud dashboard team, closing 3 measured Deep Review findings.
14
+ Five new components: 3 brief-asks (PinInput, DataTable, PageShell)
15
+ + 2 explicit pre-requisites (DropdownMenu, ActionBar) that the
16
+ brief assumed existed but didn't.
17
+
18
+ Plan: `.claude/knowledge-base/plans/dashboard-primitives-brief-5-plan.md`
19
+ ADR: `.claude/knowledge-base/decisions/page-shell-composite-pattern.md`
20
+ Brief: `theo/docs/handoff/2026-05-25-theo-ui-cloud-dashboard-brief-5.md`
21
+
22
+ ### Added
23
+
24
+ - **`<DropdownMenu>` primitive (NEW, Brief #5 pre-req)** — accessible
25
+ menu built on `@radix-ui/react-dropdown-menu` (already a bundled
26
+ dep, no new peer needed). Sub-components attached via
27
+ `Object.assign`: `Trigger`, `Portal`, `Content`, `Item`,
28
+ `CheckboxItem`, `RadioItem`, `Label`, `Separator`, `Shortcut`,
29
+ `Group`, `Sub`, `SubTrigger`, `SubContent`, `RadioGroup`. Styled
30
+ with `@usetheo/ui` design tokens. Consolidates 5 prior direct-
31
+ Radix usages (`model-selector`, `intent-selector`, `agent-profile`,
32
+ `theme-switcher`, `theo-code-shell`) under a single styled
33
+ wrapper. 6 unit tests + 5 Ladle stories. SSR-safe.
34
+ - **`<ActionBar>` primitive (NEW, Brief #5 pre-req)** — page-top
35
+ action strip with three optional slots: search input (flex-1,
36
+ grows to fill), filter icon button, primary action button
37
+ (right-aligned). Returns `null` when no slots are provided.
38
+ Primary action supports `loading` state with `Loader2` spinner.
39
+ Usable standalone or composed inside `<PageShell>`. 6 unit tests
40
+ + 5 Ladle stories.
41
+ - **`<PinInput>` primitive (NEW)** — multi-slot OTP / code input
42
+ with auto-advance focus, paste handling (whitespace stripped),
43
+ arrow-key navigation, backspace clearing + focus back. Default
44
+ 6 slots, configurable. `inputMode="numeric"` (default, triggers
45
+ mobile numeric keyboard via `pattern="[0-9]*"`) or
46
+ `alphanumeric` (auto-uppercase). Optional `mask` renders bullets.
47
+ Optional `error` state applies destructive border. `onComplete`
48
+ fires once on transitions to complete (NOT on mount with pre-
49
+ filled value — verified via test). Closes Deep Review § 2.12 P2
50
+ (Verification page off-brand single-input pattern). 17 unit
51
+ tests + 7 Ladle stories.
52
+ - **`<DataTable>` composite (NEW)** — generic, sortable,
53
+ expandable composite over `<Table>` + `<Pagination>` +
54
+ `<Skeleton>` + `<EmptyState>` + `<DropdownMenu>`. Generic over
55
+ `T` (e.g. `DataTable<Domain>`). Sortable headers (controlled via
56
+ `onSortChange` OR uncontrolled client-side). Sticky header
57
+ (default true). Expandable rows with `expandable(row)` callback
58
+ — multi-row default, opt-in `expandMode="single"`. Row actions
59
+ via `rowActions(row)` opens DropdownMenu. Client-side pagination
60
+ with `pageSize`; sort changes reset to page 0. Loading state
61
+ renders 5 skeleton rows. Empty state delegates to `<EmptyState>`
62
+ or custom `emptyState` prop. Expanded row `colSpan` correctly
63
+ accounts for chevron + actions columns (EC-1 fix). pageSize<=0
64
+ clamps to 1 graceful degradation. Closes Deep Review Top-5
65
+ fix #2, § 2.2 P1, § 2.4 P1 (card-grid → sortable table for
66
+ Domains + Projects). 19 unit tests + 8 Ladle stories.
67
+ - **`<PageShell>` composite (NEW)** — page-level scaffold. Title
68
+ + optional description + optional ActionBar (when search /
69
+ primaryAction / onFilterClick provided), then one of four
70
+ mutually-exclusive content states with strict precedence:
71
+ loading > error > empty > children. Default loading is a
72
+ centered spinner Card; `loadingNode?` escape hatch for custom
73
+ skeletons. Error renders Card with message + optional retry
74
+ button + optional docs link. Empty delegates to `<EmptyState>`.
75
+ `aria-busy="true"` on the `<main>` element while loading. Does
76
+ NOT manage `document.title` (D3 scope-narrowing); consumers
77
+ wire `onTitleChange?` callback to their own hook. Dedupes
78
+ ~20 LOC × 13 dashboard pages of boilerplate. 15 unit tests + 6
79
+ Ladle stories.
80
+
81
+ ### Notes
82
+
83
+ - Edge-case review surfaced 1 MUST FIX (DataTable expanded row
84
+ colSpan miscalculation when rowActions present) + 14 SHOULD TEST
85
+ + 7 DOCUMENT — all incorporated into TDD blocks before
86
+ implementation.
87
+ - D3 scope-narrowing: PageShell does NOT include `useSetPageTitle`
88
+ / `PageMetaProvider` — those are consumer-scope hooks. The
89
+ library exposes only the visible heading + an `onTitleChange?`
90
+ callback for the consumer to wire their own title management.
91
+ - DropdownMenu consolidation is opt-in: the 5 existing direct-
92
+ Radix usages stay untouched in this release; migration is a
93
+ follow-up PR.
94
+ - Zero new peer-deps. `@radix-ui/react-dropdown-menu` was already
95
+ bundled.
96
+
97
+ ### Bundle delta (consumer canary)
98
+
99
+ Measured against TheoCloud dashboard (no consumer migration to the
100
+ new primitives yet — pure version bump):
101
+
102
+ | Metric | 0.10.0-next.0 | 0.11.0-next.0 | Δ |
103
+ |---|---|---|---|
104
+ | `@usetheo/ui` chunk | TBD | TBD | TBD |
105
+ | TOTAL initial JS | TBD | TBD | TBD |
106
+
107
+ (Evidence file:
108
+ `.claude/knowledge-base/baselines/2026-05-26-post-brief-5/theocloud-bundle-delta.txt`)
109
+
110
+ ## [0.10.0-next.0] - 2026-05-25
111
+
112
+ Minor (additive, zero breaking change) — fixes a publishing-pipeline
113
+ defect surfaced by the TheoCloud dashboard bundle audit
114
+ (`MEET-ASYNC-AMENDMENT-2026-05-24-002`). Since 0.7.0, the ~100 subpath
115
+ exports declared in `package.json#exports` (`./alert`, `./button`,
116
+ `./table`, …) were **cosmetic** — each pointed at the same
117
+ `./dist/index.js` (the 417 KB barrel). `import { Alert } from
118
+ "@usetheo/ui/alert"` resolved byte-identical to
119
+ `import { Alert } from "@usetheo/ui"`, and barrel tree-shaking
120
+ failed in consumers because of `forwardRef` side-effect bailouts,
121
+ `Object.assign` compound components, and `sideEffects: ["**/*.css"]`
122
+ conservatism. TheoCloud measured **0 KB dropped** from the 240 KB
123
+ minified barrel regardless of how few exports were used.
124
+
125
+ This release extends the per-component dist pattern that already
126
+ worked for `whiteboard` / `slide` / `slide-deck` to every primitive
127
+ and composite. The barrel `import { X } from "@usetheo/ui"` is
128
+ preserved unchanged (additive migration shape, same as `@mui/material`).
129
+
130
+ Plan: `.claude/knowledge-base/plans/subpath-tree-shaking-plan.md`
131
+ ADR: `.claude/knowledge-base/decisions/subpath-exports-per-component.md`
132
+ Brief: `theo/docs/handoff/2026-05-24-theo-ui-subpath-tree-shaking-brief-4.md`
133
+
134
+ ### Changed
135
+
136
+ - **`tsup.config.ts`** auto-globs primitive + composite entries from
137
+ `src/components/{primitives,composites}/<name>/index.ts` at
138
+ config-load time. 87 primitives + 26 composites — 3 excluded
139
+ (`whiteboard`, `slide`, `slide-deck` retain their existing manual
140
+ isolated entries). New components ship subpath-shaped automatically
141
+ without `package.json#exports` hand-maintenance.
142
+ - **`splitting: true`** in tsup now dedupes shared utilities (`cn`,
143
+ forwardRef wrappers, theme helpers, lucide icon imports) into
144
+ `dist/chunk-<hash>.js` instead of inlining into every per-component
145
+ bundle. ~119 shared chunks emitted; barrel + per-component dist
146
+ files re-export from them.
147
+ - **`dts: { entry: ... }`** restricted to the barrel + isolated
148
+ engines only (D5 escalation). Generating per-component `.d.ts` for
149
+ all 114 entries OOMs the rollup-plugin-dts worker thread even with
150
+ `NODE_OPTIONS=--max-old-space-size=8192` (the flag does not
151
+ propagate to workers). Per-component subpaths resolve their `types`
152
+ field at the barrel `dist/index.d.ts` — TypeScript still finds
153
+ `Alert`/`AlertProps` from `import { Alert } from "@usetheo/ui/alert"`.
154
+ Trade-off: consumers' typecheck pulls the full type graph regardless
155
+ of subpath, but the JS dist (where tree-shaking matters) is
156
+ per-component and small.
157
+
158
+ ### Added
159
+
160
+ - **`scripts/regen-subpath-exports.ts`** — runs after `tsup` and
161
+ rewrites `package.json#exports` so per-component subpaths point at
162
+ their own dist file. Refuses to write if any non-root entry still
163
+ points at `./dist/index.js` (permanent guard against the cosmetic-
164
+ subpath defect coming back). Verifies that every source-tree
165
+ component has a matching dist entry (EC-2 guard against silent
166
+ partial builds). Wired into `package.json#scripts.build` so
167
+ `pnpm build` produces a consistent `dist/` + `exports` map every
168
+ time.
169
+ - **`scripts/sync-exports.ts`** updated to resolve each component's
170
+ layer (primitives vs composites) via filesystem and emit the
171
+ correct per-component dist path. Stays the source-of-truth for
172
+ the structure gate; `regen-subpath-exports.ts` is the same logic
173
+ applied post-build against the actual dist tree.
174
+
175
+ ### Bundle deltas
176
+
177
+ | File | Before (0.9.0-next.0) | After (0.10.0-next.0) | Δ |
178
+ |---|---|---|---|
179
+ | `dist/index.js` | 417,113 B | 49,018 B | **−88.2%** |
180
+ | `dist/slide/index.js` | 23,825 B | 400 B | −98.3% |
181
+ | `dist/slide-deck/index.js` | 58,413 B | 35,795 B | −38.7% |
182
+ | `dist/components.css` | 89,654 B | 93,069 B | +3.8% (within ±5%) |
183
+ | `dist/styles.css` | 4,720 B | 4,720 B | 0% |
184
+ | **Build time** | 17.72 s | 15.98 s | −10% |
185
+ | **Tarball (`pnpm pack`)** | 1.1 MB | 1.2 MB | +9% |
186
+ | **New per-component dist files** | 0 | 113 | + |
187
+ | **Shared chunks (`dist/chunk-*.js`)** | 0 | 119 | + |
188
+
189
+ The barrel shrank because all component code now lives in shared
190
+ chunks. **Consumer-side bundle delta against TheoCloud dashboard
191
+ (measured 2026-05-25):**
192
+
193
+ | Metric | 0.9.0-next.0 | 0.10.0-next.0 | Δ |
194
+ |---|---|---|---|
195
+ | `@usetheo/ui` chunk | 36.96 KB brotli | 10.96 KB brotli | **−26.00 KB (−70.3%)** |
196
+ | TOTAL initial JS | 176.27 KB brotli | 134.68 KB brotli | −41.59 KB (−23.6%) |
197
+
198
+ Per-chunk cap (50 KB): passes with 39 KB headroom (was 13 KB).
199
+ Total hard gate (240 KB): passes with 105 KB headroom (was 64 KB).
200
+
201
+ **Notable:** the savings were realized WITHOUT migrating consumer
202
+ imports to subpath form. The barrel benefits from tree-shaking now
203
+ because `dist/index.js` is structured as a collection of
204
+ per-component re-exports from shared chunks — Vite/Rollup's
205
+ tree-shaker can drop individual chunks per consumer usage. Subpath-
206
+ form migration is expected to yield additional savings on top.
207
+
208
+ Evidence file:
209
+ `.claude/knowledge-base/baselines/2026-05-25-post-subpath/theocloud-bundle-delta.txt`
210
+
211
+ ### Migration (consumer-side, opt-in)
212
+
213
+ ```diff
214
+ - import { Card, Button, Alert } from "@usetheo/ui";
215
+ + import { Card } from "@usetheo/ui/card";
216
+ + import { Button } from "@usetheo/ui/button";
217
+ + import { Alert } from "@usetheo/ui/alert";
218
+ ```
219
+
220
+ The barrel import keeps working — migration is gradual, file by
221
+ file. CSS, themes, and isolated engines stay barrel-imported:
222
+ `import { ThemeProvider, violetForge } from "@usetheo/ui"`,
223
+ `import "@usetheo/ui/styles.css"`.
224
+
10
225
  ## [0.9.0-next.0] - 2026-05-23
11
226
 
12
227
  Minor — adds the two deferred primitives revealed by the Brief #3
package/README.md CHANGED
@@ -13,8 +13,8 @@ A React component library built for AI agent surfaces and cloud dashboards. **10
13
13
  <!-- BEGIN:counts -->
14
14
  [![license](https://img.shields.io/badge/license-Apache--2.0-7C3AED?style=flat-square)](./LICENSE)
15
15
  [![react](https://img.shields.io/badge/react-18+-7C3AED?style=flat-square&logo=react&logoColor=white)](https://react.dev)
16
- [![tests](https://img.shields.io/badge/tests-1281%20passing-success?style=flat-square)](#quality-gates)
17
- [![components](https://img.shields.io/badge/components-134-7C3AED?style=flat-square)](#component-catalog)
16
+ [![tests](https://img.shields.io/badge/tests-1344%20passing-success?style=flat-square)](#quality-gates)
17
+ [![components](https://img.shields.io/badge/components-139-7C3AED?style=flat-square)](#component-catalog)
18
18
  [![shadcn](https://img.shields.io/badge/shadcn-compatible-000?style=flat-square)](https://ui.shadcn.com/docs/registry)
19
19
  <!-- END:counts -->
20
20
 
@@ -133,32 +133,33 @@ import { ThemeProvider, ThemeScript } from "@usetheo/ui";
133
133
  ## Component catalog
134
134
 
135
135
  <!-- BEGIN:component-catalog-intro -->
136
- **134 components**, organized by mechanical rule: a *primitive* imports no other `@usetheo/ui` component; a *composite* does.
136
+ **139 components**, organized by mechanical rule: a *primitive* imports no other `@usetheo/ui` component; a *composite* does.
137
137
  <!-- END:component-catalog-intro -->
138
138
 
139
139
  <details>
140
140
  <summary>
141
141
  <!-- BEGIN:primitives-count -->
142
- **Primitives** (89) — building blocks
142
+ **Primitives** (92) — building blocks
143
143
  <!-- END:primitives-count -->
144
144
  </summary>
145
145
 
146
146
  <!-- BEGIN:primitives -->
147
- `AgentErrorCard` · `AgentEvent` · `AgentHandoff` · `AgentProfile` · `AgentStartingState` · `AgentStreaming`
148
- `Alert` · `ArtifactPreview` · `AttachmentChip` · `AuditLogEntry` · `AutoCompactNotice` · `Avatar`
149
- `Badge` · `BrowserControls` · `BuildLogStream` · `Button` · `CapabilityIndicator` · `Card`
150
- `ChatThread` · `Checkbox` · `ContextCard` · `ContextWindowBar` · `CopyButton` · `CostMeter`
151
- `CreatedFilesCard` · `CronJobCard` · `DangerZone` · `Dialog` · `DiffViewer` · `EmptyState`
152
- `FolderContextCard` · `FolderSelector` · `FormField` · `HookConfig` · `HookEventLog` · `Input`
153
- `IntentSelector` · `Label` · `LaneBoard` · `LoginSplit` · `MCPServerCard` · `MemoryEditor`
154
- `MentionMenu` · `MetricsPanel` · `ModelCard` · `ModelSelector` · `Pagination` · `PermissionMatrix`
155
- `PlanBadge` · `Progress` · `ProgressChecklist` · `ProjectSwitcher` · `QuickActionChips` · `RadioGroup`
156
- `RecentFoldersList` · `RuleCard` · `RunStats` · `RunningTasksPanel` · `ScrollArea` · `Select`
157
- `SessionListItem` · `SessionTimeline` · `Sheet` · `Sidebar` · `Skeleton` · `SkillCard`
158
- `SocialAuthRow` · `StatTile` · `StatusDot` · `StepsRail` · `SubAgentDispatch` · `Switch`
159
- `SystemPromptEditor` · `Table` · `Tabs` · `TaskNode` · `TaskPlan` · `TerminalPanel`
160
- `Textarea` · `Timestamp` · `Toast` · `Toaster` · `TokenUsageChart` · `ToolCall`
161
- `ToolCallCard` · `ToolResult` · `ToolsList` · `Tooltip` · `TopNav`
147
+ `ActionBar` · `AgentErrorCard` · `AgentEvent` · `AgentHandoff` · `AgentProfile` · `AgentStartingState`
148
+ `AgentStreaming` · `Alert` · `ArtifactPreview` · `AttachmentChip` · `AuditLogEntry` · `AutoCompactNotice`
149
+ `Avatar` · `Badge` · `BrowserControls` · `BuildLogStream` · `Button` · `CapabilityIndicator`
150
+ `Card` · `ChatThread` · `Checkbox` · `ContextCard` · `ContextWindowBar` · `CopyButton`
151
+ `CostMeter` · `CreatedFilesCard` · `CronJobCard` · `DangerZone` · `Dialog` · `DiffViewer`
152
+ `DropdownMenu` · `EmptyState` · `FolderContextCard` · `FolderSelector` · `FormField` · `HookConfig`
153
+ `HookEventLog` · `Input` · `IntentSelector` · `Label` · `LaneBoard` · `LoginSplit`
154
+ `MCPServerCard` · `MemoryEditor` · `MentionMenu` · `MetricsPanel` · `ModelCard` · `ModelSelector`
155
+ `Pagination` · `PermissionMatrix` · `PinInput` · `PlanBadge` · `Progress` · `ProgressChecklist`
156
+ `ProjectSwitcher` · `QuickActionChips` · `RadioGroup` · `RecentFoldersList` · `RuleCard` · `RunStats`
157
+ `RunningTasksPanel` · `ScrollArea` · `Select` · `SessionListItem` · `SessionTimeline` · `Sheet`
158
+ `Sidebar` · `Skeleton` · `SkillCard` · `SocialAuthRow` · `StatTile` · `StatusDot`
159
+ `StepsRail` · `SubAgentDispatch` · `Switch` · `SystemPromptEditor` · `Table` · `Tabs`
160
+ `TaskNode` · `TaskPlan` · `TerminalPanel` · `Textarea` · `Timestamp` · `Toast`
161
+ `Toaster` · `TokenUsageChart` · `ToolCall` · `ToolCallCard` · `ToolResult` · `ToolsList`
162
+ `Tooltip` · `TopNav`
162
163
  <!-- END:primitives -->
163
164
 
164
165
  </details>
@@ -166,12 +167,12 @@ import { ThemeProvider, ThemeScript } from "@usetheo/ui";
166
167
  <details>
167
168
  <summary>
168
169
  <!-- BEGIN:composites-count -->
169
- **Composites** (45) — assembled flows
170
+ **Composites** (47) — assembled flows
170
171
  <!-- END:composites-count -->
171
172
  </summary>
172
173
 
173
174
  <!-- BEGIN:composites -->
174
- `AccountMenu` · `AgentComposer` · `AgentEditor` · `AgentStream` · `AgentTimeline` · `ApprovalCard` · `ChatComposer` · `ChatMessage` · `ChatMessageAction` · `ChatMessageActions` · `ChatMessageBranch` · `ChatMessageBranchContent` · `ChatMessageBranchNext` · `ChatMessageBranchPage` · `ChatMessageBranchPrevious` · `ChatMessageBranchSelector` · `ChatMessageContent` · `ChatMessageResponse` · `ChatMessageRoot` · `ChatMessageToolbar` · `CodeBlock` · `CommandPalette` · `ConfirmDialog` · `CronJobsList` · `DataPart` · `DeploymentRow` · `DomainConfig` · `EnvVarEditor` · `FilePart` · `MCPServerList` · `PermissionModal` · `PreviewEnvCard` · `PreviewPanel` · `ProjectCard` · `ReasoningPart` · `RollbackUI` · `RuleEditor` · `SkillEditor` · `SkillsList` · `SourceDocumentPart` · `SourceUrlPart` · `TaskHeader` · `TextPart` · `ToolCallPart` · `UsageMeter`
175
+ `AccountMenu` · `AgentComposer` · `AgentEditor` · `AgentStream` · `AgentTimeline` · `ApprovalCard` · `ChatComposer` · `ChatMessage` · `ChatMessageAction` · `ChatMessageActions` · `ChatMessageBranch` · `ChatMessageBranchContent` · `ChatMessageBranchNext` · `ChatMessageBranchPage` · `ChatMessageBranchPrevious` · `ChatMessageBranchSelector` · `ChatMessageContent` · `ChatMessageResponse` · `ChatMessageRoot` · `ChatMessageToolbar` · `CodeBlock` · `CommandPalette` · `ConfirmDialog` · `CronJobsList` · `DataPart` · `DataTable` · `DeploymentRow` · `DomainConfig` · `EnvVarEditor` · `FilePart` · `MCPServerList` · `PageShell` · `PermissionModal` · `PreviewEnvCard` · `PreviewPanel` · `ProjectCard` · `ReasoningPart` · `RollbackUI` · `RuleEditor` · `SkillEditor` · `SkillsList` · `SourceDocumentPart` · `SourceUrlPart` · `TaskHeader` · `TextPart` · `ToolCallPart` · `UsageMeter`
175
176
  <!-- END:composites -->
176
177
 
177
178
  </details>
@@ -0,0 +1,106 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import { X } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var Overlay2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8
+ DialogPrimitive.Overlay,
9
+ {
10
+ ref,
11
+ className: cn(
12
+ "fixed inset-0 z-50 bg-background/80",
13
+ "data-[state=open]:fade-in-0 data-[state=open]:animate-in",
14
+ "data-[state=closed]:fade-out-0 data-[state=closed]:animate-out",
15
+ className
16
+ ),
17
+ ...props
18
+ }
19
+ ));
20
+ Overlay2.displayName = "Dialog.Overlay";
21
+ var Content2 = forwardRef(
22
+ ({ className, children, hideCloseButton, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
23
+ /* @__PURE__ */ jsx(Overlay2, {}),
24
+ /* @__PURE__ */ jsxs(
25
+ DialogPrimitive.Content,
26
+ {
27
+ ref,
28
+ className: cn(
29
+ "-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg",
30
+ "rounded-2xl border bg-card text-card-foreground shadow-lg",
31
+ "data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
32
+ "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out",
33
+ "duration-base",
34
+ className
35
+ ),
36
+ ...props,
37
+ children: [
38
+ children,
39
+ !hideCloseButton ? /* @__PURE__ */ jsxs(
40
+ DialogPrimitive.Close,
41
+ {
42
+ className: cn(
43
+ "absolute top-4 right-4 rounded-md p-1 opacity-70",
44
+ "transition-opacity hover:opacity-100",
45
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
46
+ "disabled:pointer-events-none"
47
+ ),
48
+ children: [
49
+ /* @__PURE__ */ jsx(X, { className: "size-4" }),
50
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
51
+ ]
52
+ }
53
+ ) : null
54
+ ]
55
+ }
56
+ )
57
+ ] })
58
+ );
59
+ Content2.displayName = "Dialog.Content";
60
+ var Header = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pb-3 text-left", className), ...props });
61
+ Header.displayName = "Dialog.Header";
62
+ var Body = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("px-6 pb-6 text-body-md text-muted-foreground", className), ...props });
63
+ Body.displayName = "Dialog.Body";
64
+ var Footer = ({ className, ...props }) => /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ className: cn("flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end", className),
68
+ ...props
69
+ }
70
+ );
71
+ Footer.displayName = "Dialog.Footer";
72
+ var Title2 = forwardRef(
73
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
74
+ DialogPrimitive.Title,
75
+ {
76
+ ref,
77
+ className: cn("font-display text-foreground text-title-lg tracking-tight", className),
78
+ ...props
79
+ }
80
+ )
81
+ );
82
+ Title2.displayName = "Dialog.Title";
83
+ var Description2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
84
+ DialogPrimitive.Description,
85
+ {
86
+ ref,
87
+ className: cn("text-body-sm text-muted-foreground", className),
88
+ ...props
89
+ }
90
+ ));
91
+ Description2.displayName = "Dialog.Description";
92
+ var Dialog = /* @__PURE__ */ Object.assign(DialogPrimitive.Root, {
93
+ Trigger: DialogPrimitive.Trigger,
94
+ Close: DialogPrimitive.Close,
95
+ Content: Content2,
96
+ Overlay: Overlay2,
97
+ Header,
98
+ Body,
99
+ Footer,
100
+ Title: Title2,
101
+ Description: Description2
102
+ });
103
+
104
+ export { Dialog };
105
+ //# sourceMappingURL=chunk-2UJROWAG.js.map
106
+ //# sourceMappingURL=chunk-2UJROWAG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/dialog/dialog.tsx"],"names":["Overlay","Content","Title","Description"],"mappings":";;;;;;AA2BA,IAAMA,QAAAA,GAAU,WAGd,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qCAAA;AAAA,MACA,0DAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACDA,QAAAA,CAAQ,WAAA,GAAc,gBAAA;AAMtB,IAAMC,QAAAA,GAAU,UAAA;AAAA,EACd,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnD,IAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACD,UAAA,EAAQ,CAAA;AAAA,oBACT,IAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,+EAAA;AAAA,UACA,2DAAA;AAAA,UACA,uFAAA;AAAA,UACA,gGAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,CAAC,eAAA,mBACA,IAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kDAAA;AAAA,gBACA,sCAAA;AAAA,gBACA,oIAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,QAAA,EAAS,CAAA;AAAA,gCACtB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,WACjC,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF;AAEJ,CAAA;AACAC,QAAAA,CAAQ,WAAA,GAAc,gBAAA;AAEtB,IAAM,MAAA,GAAS,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBACpC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAExF,MAAA,CAAO,WAAA,GAAc,eAAA;AAErB,IAAM,IAAA,GAAO,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBAClC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE5F,IAAA,CAAK,WAAA,GAAc,aAAA;AAEnB,IAAM,SAAS,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACpC,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,iEAAA,EAAmE,SAAS,CAAA;AAAA,IACzF,GAAG;AAAA;AACN,CAAA;AAEF,MAAA,CAAO,WAAA,GAAc,eAAA;AAIrB,IAAMC,MAAAA,GAAQ,UAAA;AAAA,EACZ,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,MACnF,GAAG;AAAA;AAAA;AAGV,CAAA;AACAA,MAAAA,CAAM,WAAA,GAAc,cAAA;AAEpB,IAAMC,YAAAA,GAAc,WAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,IAC5D,GAAG;AAAA;AACN,CACD,CAAA;AACDA,YAAAA,CAAY,WAAA,GAAc,oBAAA;AAE1B,IAAM,MAAA,mBAAuB,MAAA,CAAO,MAAA,CAAuB,eAAA,CAAA,IAAA,EAAM;AAAA,EAC/D,OAAA,EAAyB,eAAA,CAAA,OAAA;AAAA,EACzB,KAAA,EAAuB,eAAA,CAAA,KAAA;AAAA,EACvB,OAAA,EAAAF,QAAAA;AAAA,EACA,OAAA,EAAAD,QAAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,EAAAE,MAAAA;AAAA,EACA,WAAA,EAAAC;AACF,CAAC","file":"chunk-2UJROWAG.js","sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Dialog — modal overlay built on Radix Dialog.\n *\n * Composition:\n * <Dialog>\n * <Dialog.Trigger>Open</Dialog.Trigger>\n * <Dialog.Content>\n * <Dialog.Header>\n * <Dialog.Title>…</Dialog.Title>\n * <Dialog.Description>…</Dialog.Description>\n * </Dialog.Header>\n * <Dialog.Body>…</Dialog.Body>\n * <Dialog.Footer>…</Dialog.Footer>\n * </Dialog.Content>\n * </Dialog>\n *\n * Overlay is a theme-neutral backdrop (`bg-background/80`) with no glass blur\n * (anti-glass guideline). Content uses card surface, rounded-2xl, shadow-lg\n * + slight glow on enter.\n */\n\nconst Overlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80\",\n \"data-[state=open]:fade-in-0 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out\",\n className,\n )}\n {...props}\n />\n));\nOverlay.displayName = \"Dialog.Overlay\";\n\ninterface ContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n hideCloseButton?: boolean;\n}\n\nconst Content = forwardRef<ElementRef<typeof DialogPrimitive.Content>, ContentProps>(\n ({ className, children, hideCloseButton, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg\",\n \"rounded-2xl border bg-card text-card-foreground shadow-lg\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n \"duration-base\",\n className,\n )}\n {...props}\n >\n {children}\n {!hideCloseButton ? (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 rounded-md p-1 opacity-70\",\n \"transition-opacity hover:opacity-100\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n \"disabled:pointer-events-none\",\n )}\n >\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n ),\n);\nContent.displayName = \"Dialog.Content\";\n\nconst Header = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-1.5 p-6 pb-3 text-left\", className)} {...props} />\n);\nHeader.displayName = \"Dialog.Header\";\n\nconst Body = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"px-6 pb-6 text-body-md text-muted-foreground\", className)} {...props} />\n);\nBody.displayName = \"Dialog.Body\";\n\nconst Footer = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n);\nFooter.displayName = \"Dialog.Footer\";\n\ntype TitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nconst Title = forwardRef<ElementRef<typeof DialogPrimitive.Title>, TitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"font-display text-foreground text-title-lg tracking-tight\", className)}\n {...props}\n />\n ),\n);\nTitle.displayName = \"Dialog.Title\";\n\nconst Description = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDescription.displayName = \"Dialog.Description\";\n\nconst Dialog = /*#__PURE__*/ Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Close: DialogPrimitive.Close,\n Content,\n Overlay,\n Header,\n Body,\n Footer,\n Title,\n Description,\n});\n\nexport { Dialog };\n"]}
@@ -0,0 +1,68 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var INTENT_FILL = {
6
+ default: "bg-primary",
7
+ success: "bg-success",
8
+ warning: "bg-warning",
9
+ destructive: "bg-destructive"
10
+ };
11
+ var Progress = forwardRef(
12
+ ({
13
+ className,
14
+ value = 0,
15
+ max = 100,
16
+ intent = "default",
17
+ height = "h-1",
18
+ indeterminate = false,
19
+ ...props
20
+ }, ref) => {
21
+ const clampedMax = Math.max(0, max);
22
+ const clampedValue = Math.min(clampedMax, Math.max(0, value));
23
+ const percent = clampedMax > 0 ? clampedValue / clampedMax * 100 : 0;
24
+ const fillClass = INTENT_FILL[intent];
25
+ return (
26
+ // biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.
27
+ /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ ref,
31
+ role: "progressbar",
32
+ "aria-valuemin": 0,
33
+ "aria-valuemax": clampedMax,
34
+ "aria-valuenow": indeterminate ? void 0 : clampedValue,
35
+ "aria-busy": indeterminate ? true : void 0,
36
+ className: cn("relative w-full overflow-hidden rounded-full bg-muted", height, className),
37
+ ...props,
38
+ children: indeterminate ? /* @__PURE__ */ jsx(
39
+ "div",
40
+ {
41
+ className: cn(
42
+ "absolute inset-y-0 left-0 w-1/3 rounded-full",
43
+ "animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none",
44
+ "motion-reduce:w-full motion-reduce:opacity-50",
45
+ fillClass
46
+ )
47
+ }
48
+ ) : /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ className: cn(
52
+ "h-full rounded-full transition-[width] duration-base ease-out-soft",
53
+ "motion-reduce:transition-none",
54
+ fillClass
55
+ ),
56
+ style: { width: `${percent}%` }
57
+ }
58
+ )
59
+ }
60
+ )
61
+ );
62
+ }
63
+ );
64
+ Progress.displayName = "Progress";
65
+
66
+ export { Progress };
67
+ //# sourceMappingURL=chunk-2XPWOUEH.js.map
68
+ //# sourceMappingURL=chunk-2XPWOUEH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/progress/progress.tsx"],"names":[],"mappings":";;;;AA+CA,IAAM,WAAA,GAAoE;AAAA,EACxE,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAA;AAEA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA,GAAQ,CAAA;AAAA,IACR,GAAA,GAAM,GAAA;AAAA,IACN,MAAA,GAAS,SAAA;AAAA,IACT,MAAA,GAAS,KAAA;AAAA,IACT,aAAA,GAAgB,KAAA;AAAA,IAChB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,UAAA,EAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,UAAA,GAAa,CAAA,GAAK,YAAA,GAAe,aAAc,GAAA,GAAM,CAAA;AACrE,IAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,IAAA;AAAA;AAAA,sBAEE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,aAAA;AAAA,UACL,eAAA,EAAe,CAAA;AAAA,UACf,eAAA,EAAe,UAAA;AAAA,UACf,eAAA,EAAe,gBAAgB,MAAA,GAAY,YAAA;AAAA,UAC3C,WAAA,EAAW,gBAAgB,IAAA,GAAO,MAAA;AAAA,UAClC,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,MAAA,EAAQ,SAAS,CAAA;AAAA,UACvF,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA,aAAA,mBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,uFAAA;AAAA,gBACA,+CAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF,mBAEA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oEAAA;AAAA,gBACA,+BAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAAI;AAAA;AAChC;AAAA;AAEJ;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-2XPWOUEH.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Progress — accessible progress bar primitive.\n *\n * Built on `<div role=\"progressbar\">` (NOT native `<progress>`) so Tailwind\n * classes can style the track + fill cross-browser (Chrome/Safari/Firefox\n * shadow-DOM hooks for `<progress>` diverge). Matches Radix / shadcn /\n * Mantine convention.\n *\n * Variants:\n * - intent: `default` | `success` | `warning` | `destructive` — controls fill color\n * - height: `h-1` (4px, default) | `h-1.5` | `h-2` | `h-3`\n * - indeterminate: animated bar, no value (e.g. \"uploading…\", \"building…\")\n *\n * Composition:\n * <Progress value={42} max={100} intent=\"success\" aria-label=\"Upload\" />\n * <Progress indeterminate aria-label=\"Building\" />\n *\n * A11y:\n * - role=\"progressbar\"\n * - aria-valuenow / aria-valuemin / aria-valuemax (determinate)\n * - aria-busy=\"true\" when indeterminate\n * - Respects `prefers-reduced-motion` (no animation when set)\n *\n * Used by `<UsageMeter>` to render each metric's fill bar, but ships as a\n * standalone primitive for direct consumer use (deploy phase, file upload,\n * build progress, quota fill).\n */\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n /** Current value (0..max). Values outside the range are clamped. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Visual intent — controls fill color. */\n intent?: \"default\" | \"success\" | \"warning\" | \"destructive\";\n /** Bar height in tailwind units. Defaults to `\"h-1\"` (4px). */\n height?: \"h-1\" | \"h-1.5\" | \"h-2\" | \"h-3\";\n /** When true, animated bar with no value. Omits `aria-valuenow`, adds `aria-busy`. */\n indeterminate?: boolean;\n /** Accessible label. Required if not preceded by an `aria-labelledby` element. */\n \"aria-label\"?: string;\n}\n\nconst INTENT_FILL: Record<NonNullable<ProgressProps[\"intent\"]>, string> = {\n default: \"bg-primary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n destructive: \"bg-destructive\",\n};\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n value = 0,\n max = 100,\n intent = \"default\",\n height = \"h-1\",\n indeterminate = false,\n ...props\n },\n ref,\n ) => {\n const clampedMax = Math.max(0, max);\n const clampedValue = Math.min(clampedMax, Math.max(0, value));\n const percent = clampedMax > 0 ? (clampedValue / clampedMax) * 100 : 0;\n const fillClass = INTENT_FILL[intent];\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={clampedMax}\n aria-valuenow={indeterminate ? undefined : clampedValue}\n aria-busy={indeterminate ? true : undefined}\n className={cn(\"relative w-full overflow-hidden rounded-full bg-muted\", height, className)}\n {...props}\n >\n {indeterminate ? (\n <div\n className={cn(\n \"absolute inset-y-0 left-0 w-1/3 rounded-full\",\n \"animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none\",\n \"motion-reduce:w-full motion-reduce:opacity-50\",\n fillClass,\n )}\n />\n ) : (\n <div\n className={cn(\n \"h-full rounded-full transition-[width] duration-base ease-out-soft\",\n \"motion-reduce:transition-none\",\n fillClass,\n )}\n style={{ width: `${percent}%` }}\n />\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\nexport { Progress };\n"]}
@@ -0,0 +1,42 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Clock, Coins, FileEdit } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var RunStats = forwardRef(
7
+ ({ className, duration, tokens, filesChanged, ...props }, ref) => /* @__PURE__ */ jsxs(
8
+ "div",
9
+ {
10
+ ref,
11
+ className: cn(
12
+ "flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground",
13
+ className
14
+ ),
15
+ ...props,
16
+ children: [
17
+ duration ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
18
+ /* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
19
+ " ",
20
+ duration
21
+ ] }) : null,
22
+ tokens ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
23
+ /* @__PURE__ */ jsx(Coins, { className: "size-3", "aria-hidden": "true" }),
24
+ " ",
25
+ tokens,
26
+ " tokens"
27
+ ] }) : null,
28
+ filesChanged !== void 0 ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
29
+ /* @__PURE__ */ jsx(FileEdit, { className: "size-3", "aria-hidden": "true" }),
30
+ " ",
31
+ filesChanged,
32
+ " files"
33
+ ] }) : null
34
+ ]
35
+ }
36
+ )
37
+ );
38
+ RunStats.displayName = "RunStats";
39
+
40
+ export { RunStats };
41
+ //# sourceMappingURL=chunk-3GHLNCM3.js.map
42
+ //# sourceMappingURL=chunk-3GHLNCM3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/run-stats/run-stats.tsx"],"names":[],"mappings":";;;;;AAmBA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,QAAQ,YAAA,EAAc,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxD,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EACnD,CAAA,GACE,IAAA;AAAA,QACH,MAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,MAAA;AAAA,UAAO;AAAA,SAAA,EAC1D,CAAA,GACE,IAAA;AAAA,QACH,YAAA,KAAiB,MAAA,mBAChB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,YAAA;AAAA,UAAa;AAAA,SAAA,EACnE,CAAA,GACE;AAAA;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3GHLNCM3.js","sourcesContent":["import { Clock, Coins, FileEdit } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface RunStatsProps extends HTMLAttributes<HTMLDivElement> {\n duration?: string;\n /** Formatted token count, e.g. \"35.7k\". */\n tokens?: string;\n /** Number of files changed in the run. */\n filesChanged?: number;\n}\n\n/**\n * RunStats — inline metric row shown after an agent run.\n *\n * Visual: muted bullet-separated row with clock + tokens + files-changed icons.\n * All optional — the component skips entries that aren't provided.\n */\nconst RunStats = forwardRef<HTMLDivElement, RunStatsProps>(\n ({ className, duration, tokens, filesChanged, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {duration ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Clock className=\"size-3\" aria-hidden=\"true\" /> {duration}\n </span>\n ) : null}\n {tokens ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Coins className=\"size-3\" aria-hidden=\"true\" /> {tokens} tokens\n </span>\n ) : null}\n {filesChanged !== undefined ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <FileEdit className=\"size-3\" aria-hidden=\"true\" /> {filesChanged} files\n </span>\n ) : null}\n </div>\n ),\n);\nRunStats.displayName = \"RunStats\";\n\nexport { RunStats };\n"]}
@@ -0,0 +1,48 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as SwitchPrimitive from '@radix-ui/react-switch';
3
+ import { cva } from 'class-variance-authority';
4
+ import { forwardRef } from 'react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var switchVariants = cva(
8
+ [
9
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
10
+ "transition-[background-color,box-shadow] duration-base ease-out-soft",
11
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
12
+ "data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]",
13
+ "data-[state=unchecked]:bg-muted",
14
+ "disabled:cursor-not-allowed disabled:opacity-50"
15
+ ],
16
+ {
17
+ variants: {
18
+ size: {
19
+ sm: "h-4 w-7",
20
+ md: "h-5 w-9",
21
+ lg: "h-6 w-11"
22
+ }
23
+ },
24
+ defaultVariants: { size: "md" }
25
+ }
26
+ );
27
+ var thumbClassBySize = {
28
+ sm: "size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5",
29
+ md: "size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5",
30
+ lg: "size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5"
31
+ };
32
+ var Switch = forwardRef(
33
+ ({ className, size, ...props }, ref) => /* @__PURE__ */ jsx(SwitchPrimitive.Root, { ref, className: cn(switchVariants({ size }), className), ...props, children: /* @__PURE__ */ jsx(
34
+ SwitchPrimitive.Thumb,
35
+ {
36
+ className: cn(
37
+ "pointer-events-none block rounded-full bg-card shadow-sm",
38
+ "transition-transform duration-base ease-out-soft",
39
+ thumbClassBySize[size ?? "md"]
40
+ )
41
+ }
42
+ ) })
43
+ );
44
+ Switch.displayName = "Switch";
45
+
46
+ export { Switch };
47
+ //# sourceMappingURL=chunk-3HOXC25T.js.map
48
+ //# sourceMappingURL=chunk-3HOXC25T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/switch/switch.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,8FAAA;AAAA,IACA,sEAAA;AAAA,IACA,0IAAA;AAAA,IACA,gGAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAAK;AAElC,CAAA;AAEA,IAAM,gBAAA,GAA6F;AAAA,EACjG,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAMA,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC9B,GAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,KAAU,SAAA,EAAW,EAAA,CAAG,eAAe,EAAE,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACtF,QAAA,kBAAA,GAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,kDAAA;AAAA,QACA,gBAAA,CAAiB,QAAQ,IAAI;AAAA;AAC/B;AAAA,GACF,EACF;AAEJ;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-3HOXC25T.js","sourcesContent":["import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Switch — built on Radix Switch. Used for binary toggles (autoaccept,\n * dark mode preview, feature flags).\n *\n * Off-state uses --muted, on-state uses --primary with a subtle glow shadow\n * to mark \"this is active\" in the violet brand language.\n *\n * The `size` prop accepts `\"sm\" | \"md\" | \"lg\"`. Default `md` preserves the\n * 20×36 track from before this prop existed.\n */\nconst switchVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-[background-color,box-shadow] duration-base ease-out-soft\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]\",\n \"data-[state=unchecked]:bg-muted\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-4 w-7\",\n md: \"h-5 w-9\",\n lg: \"h-6 w-11\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst thumbClassBySize: Record<NonNullable<VariantProps<typeof switchVariants>[\"size\"]>, string> = {\n sm: \"size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n lg: \"size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n};\n\ninterface SwitchProps\n extends ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchVariants> {}\n\nconst Switch = forwardRef<ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n ({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root ref={ref} className={cn(switchVariants({ size }), className)} {...props}>\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block rounded-full bg-card shadow-sm\",\n \"transition-transform duration-base ease-out-soft\",\n thumbClassBySize[size ?? \"md\"],\n )}\n />\n </SwitchPrimitive.Root>\n ),\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch, switchVariants };\n"]}