@usetheo/ui 0.9.0-next.0 → 0.10.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 (474) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/dist/chunk-2UJROWAG.js +106 -0
  3. package/dist/chunk-2UJROWAG.js.map +1 -0
  4. package/dist/chunk-2XPWOUEH.js +68 -0
  5. package/dist/chunk-2XPWOUEH.js.map +1 -0
  6. package/dist/chunk-3GHLNCM3.js +42 -0
  7. package/dist/chunk-3GHLNCM3.js.map +1 -0
  8. package/dist/chunk-3HOXC25T.js +48 -0
  9. package/dist/chunk-3HOXC25T.js.map +1 -0
  10. package/dist/chunk-3QGO5SB3.js +46 -0
  11. package/dist/chunk-3QGO5SB3.js.map +1 -0
  12. package/dist/chunk-47QJVWW2.js +85 -0
  13. package/dist/chunk-47QJVWW2.js.map +1 -0
  14. package/dist/chunk-4L63UW3I.js +35 -0
  15. package/dist/chunk-4L63UW3I.js.map +1 -0
  16. package/dist/chunk-4UUSJJFZ.js +25 -0
  17. package/dist/chunk-4UUSJJFZ.js.map +1 -0
  18. package/dist/chunk-4ZBZBRG5.js +127 -0
  19. package/dist/chunk-4ZBZBRG5.js.map +1 -0
  20. package/dist/chunk-57NXT3OX.js +92 -0
  21. package/dist/chunk-57NXT3OX.js.map +1 -0
  22. package/dist/chunk-5FF5EUZP.js +44 -0
  23. package/dist/chunk-5FF5EUZP.js.map +1 -0
  24. package/dist/chunk-5UGQXB2P.js +714 -0
  25. package/dist/chunk-5UGQXB2P.js.map +1 -0
  26. package/dist/chunk-62FT22CI.js +85 -0
  27. package/dist/chunk-62FT22CI.js.map +1 -0
  28. package/dist/chunk-673R3GSK.js +19 -0
  29. package/dist/chunk-673R3GSK.js.map +1 -0
  30. package/dist/chunk-6VINZJBV.js +128 -0
  31. package/dist/chunk-6VINZJBV.js.map +1 -0
  32. package/dist/chunk-74NZ5U3E.js +145 -0
  33. package/dist/chunk-74NZ5U3E.js.map +1 -0
  34. package/dist/chunk-755NWSNW.js +36 -0
  35. package/dist/chunk-755NWSNW.js.map +1 -0
  36. package/dist/chunk-7GLBWWMW.js +70 -0
  37. package/dist/chunk-7GLBWWMW.js.map +1 -0
  38. package/dist/chunk-7RXYW5VM.js +88 -0
  39. package/dist/chunk-7RXYW5VM.js.map +1 -0
  40. package/dist/chunk-AC4MGCXI.js +92 -0
  41. package/dist/chunk-AC4MGCXI.js.map +1 -0
  42. package/dist/chunk-AEVSVDT6.js +67 -0
  43. package/dist/chunk-AEVSVDT6.js.map +1 -0
  44. package/dist/chunk-AODIMN2N.js +68 -0
  45. package/dist/chunk-AODIMN2N.js.map +1 -0
  46. package/dist/chunk-ATHOPBCA.js +61 -0
  47. package/dist/chunk-ATHOPBCA.js.map +1 -0
  48. package/dist/chunk-AXKBNRZW.js +173 -0
  49. package/dist/chunk-AXKBNRZW.js.map +1 -0
  50. package/dist/chunk-B75MEYNR.js +106 -0
  51. package/dist/chunk-B75MEYNR.js.map +1 -0
  52. package/dist/chunk-BGKA6DI6.js +34 -0
  53. package/dist/chunk-BGKA6DI6.js.map +1 -0
  54. package/dist/chunk-BNQAJGEN.js +88 -0
  55. package/dist/chunk-BNQAJGEN.js.map +1 -0
  56. package/dist/chunk-BP2SETUC.js +101 -0
  57. package/dist/chunk-BP2SETUC.js.map +1 -0
  58. package/dist/chunk-BPUQWMBD.js +79 -0
  59. package/dist/chunk-BPUQWMBD.js.map +1 -0
  60. package/dist/chunk-BVDASR3Y.js +74 -0
  61. package/dist/chunk-BVDASR3Y.js.map +1 -0
  62. package/dist/chunk-CDA6RYOX.js +115 -0
  63. package/dist/chunk-CDA6RYOX.js.map +1 -0
  64. package/dist/chunk-CG7O3A42.js +80 -0
  65. package/dist/chunk-CG7O3A42.js.map +1 -0
  66. package/dist/chunk-CIYGNPKT.js +76 -0
  67. package/dist/chunk-CIYGNPKT.js.map +1 -0
  68. package/dist/chunk-CKXY4FTV.js +59 -0
  69. package/dist/chunk-CKXY4FTV.js.map +1 -0
  70. package/dist/chunk-CVOKZITR.js +82 -0
  71. package/dist/chunk-CVOKZITR.js.map +1 -0
  72. package/dist/chunk-CWFMFKDI.js +82 -0
  73. package/dist/chunk-CWFMFKDI.js.map +1 -0
  74. package/dist/chunk-CWVKSV7S.js +124 -0
  75. package/dist/chunk-CWVKSV7S.js.map +1 -0
  76. package/dist/chunk-CYOLRWOX.js +63 -0
  77. package/dist/chunk-CYOLRWOX.js.map +1 -0
  78. package/dist/chunk-D23LRJT6.js +116 -0
  79. package/dist/chunk-D23LRJT6.js.map +1 -0
  80. package/dist/chunk-DAKIL5PC.js +186 -0
  81. package/dist/chunk-DAKIL5PC.js.map +1 -0
  82. package/dist/chunk-DFADMEJK.js +127 -0
  83. package/dist/chunk-DFADMEJK.js.map +1 -0
  84. package/dist/chunk-E5A7HN6H.js +32 -0
  85. package/dist/chunk-E5A7HN6H.js.map +1 -0
  86. package/dist/chunk-EI63GTN7.js +57 -0
  87. package/dist/chunk-EI63GTN7.js.map +1 -0
  88. package/dist/chunk-EP25QJ4N.js +146 -0
  89. package/dist/chunk-EP25QJ4N.js.map +1 -0
  90. package/dist/chunk-ET44426Q.js +80 -0
  91. package/dist/chunk-ET44426Q.js.map +1 -0
  92. package/dist/chunk-ETEIDY34.js +67 -0
  93. package/dist/chunk-ETEIDY34.js.map +1 -0
  94. package/dist/chunk-EU55O4P7.js +76 -0
  95. package/dist/chunk-EU55O4P7.js.map +1 -0
  96. package/dist/chunk-F436537E.js +104 -0
  97. package/dist/chunk-F436537E.js.map +1 -0
  98. package/dist/chunk-FLBTGNQI.js +86 -0
  99. package/dist/chunk-FLBTGNQI.js.map +1 -0
  100. package/dist/chunk-FUT45NFW.js +46 -0
  101. package/dist/chunk-FUT45NFW.js.map +1 -0
  102. package/dist/chunk-G3LWNTVZ.js +51 -0
  103. package/dist/chunk-G3LWNTVZ.js.map +1 -0
  104. package/dist/chunk-GBJB5WLT.js +58 -0
  105. package/dist/chunk-GBJB5WLT.js.map +1 -0
  106. package/dist/chunk-GIEPEFRX.js +110 -0
  107. package/dist/chunk-GIEPEFRX.js.map +1 -0
  108. package/dist/chunk-GSO7MISR.js +58 -0
  109. package/dist/chunk-GSO7MISR.js.map +1 -0
  110. package/dist/chunk-GUQFYUIC.js +61 -0
  111. package/dist/chunk-GUQFYUIC.js.map +1 -0
  112. package/dist/chunk-H3ANHVEL.js +83 -0
  113. package/dist/chunk-H3ANHVEL.js.map +1 -0
  114. package/dist/chunk-H3VJMFJQ.js +35 -0
  115. package/dist/chunk-H3VJMFJQ.js.map +1 -0
  116. package/dist/chunk-HG4WEERE.js +26 -0
  117. package/dist/chunk-HG4WEERE.js.map +1 -0
  118. package/dist/chunk-HGPBGLNP.js +51 -0
  119. package/dist/chunk-HGPBGLNP.js.map +1 -0
  120. package/dist/chunk-HQFTW7SF.js +141 -0
  121. package/dist/chunk-HQFTW7SF.js.map +1 -0
  122. package/dist/chunk-I7WYM63C.js +170 -0
  123. package/dist/chunk-I7WYM63C.js.map +1 -0
  124. package/dist/chunk-JQXLPVWP.js +74 -0
  125. package/dist/chunk-JQXLPVWP.js.map +1 -0
  126. package/dist/chunk-K5ARID4S.js +26 -0
  127. package/dist/chunk-K5ARID4S.js.map +1 -0
  128. package/dist/chunk-K6RTLPIJ.js +41 -0
  129. package/dist/chunk-K6RTLPIJ.js.map +1 -0
  130. package/dist/chunk-KQNKKV2C.js +56 -0
  131. package/dist/chunk-KQNKKV2C.js.map +1 -0
  132. package/dist/chunk-KRN4NE4U.js +155 -0
  133. package/dist/chunk-KRN4NE4U.js.map +1 -0
  134. package/dist/chunk-L2BI762I.js +82 -0
  135. package/dist/chunk-L2BI762I.js.map +1 -0
  136. package/dist/chunk-LEEH63B2.js +56 -0
  137. package/dist/chunk-LEEH63B2.js.map +1 -0
  138. package/dist/chunk-LHRWVM3G.js +42 -0
  139. package/dist/chunk-LHRWVM3G.js.map +1 -0
  140. package/dist/chunk-LIGWMGXM.js +117 -0
  141. package/dist/chunk-LIGWMGXM.js.map +1 -0
  142. package/dist/chunk-LKYSX3QF.js +104 -0
  143. package/dist/chunk-LKYSX3QF.js.map +1 -0
  144. package/dist/chunk-MCIFB6VS.js +54 -0
  145. package/dist/chunk-MCIFB6VS.js.map +1 -0
  146. package/dist/chunk-NQZYY4LR.js +84 -0
  147. package/dist/chunk-NQZYY4LR.js.map +1 -0
  148. package/dist/chunk-O23LKHUR.js +66 -0
  149. package/dist/chunk-O23LKHUR.js.map +1 -0
  150. package/dist/chunk-PASI2U2R.js +23 -0
  151. package/dist/chunk-PASI2U2R.js.map +1 -0
  152. package/dist/chunk-PPH5NTHV.js +34 -0
  153. package/dist/chunk-PPH5NTHV.js.map +1 -0
  154. package/dist/chunk-PR6OZF6D.js +28 -0
  155. package/dist/chunk-PR6OZF6D.js.map +1 -0
  156. package/dist/chunk-PWXOXPFT.js +142 -0
  157. package/dist/chunk-PWXOXPFT.js.map +1 -0
  158. package/dist/chunk-QB6BNHO3.js +112 -0
  159. package/dist/chunk-QB6BNHO3.js.map +1 -0
  160. package/dist/chunk-QSOIJ6J3.js +91 -0
  161. package/dist/chunk-QSOIJ6J3.js.map +1 -0
  162. package/dist/chunk-QU6RLHYH.js +156 -0
  163. package/dist/chunk-QU6RLHYH.js.map +1 -0
  164. package/dist/chunk-R63ZKLQM.js +45 -0
  165. package/dist/chunk-R63ZKLQM.js.map +1 -0
  166. package/dist/chunk-RTYYJPPE.js +77 -0
  167. package/dist/chunk-RTYYJPPE.js.map +1 -0
  168. package/dist/chunk-RVOBP7PO.js +116 -0
  169. package/dist/chunk-RVOBP7PO.js.map +1 -0
  170. package/dist/chunk-SF6R5VMQ.js +97 -0
  171. package/dist/chunk-SF6R5VMQ.js.map +1 -0
  172. package/dist/chunk-SP4CP5HY.js +57 -0
  173. package/dist/chunk-SP4CP5HY.js.map +1 -0
  174. package/dist/chunk-SWJ4EUOI.js +30 -0
  175. package/dist/chunk-SWJ4EUOI.js.map +1 -0
  176. package/dist/chunk-TK24HQJJ.js +128 -0
  177. package/dist/chunk-TK24HQJJ.js.map +1 -0
  178. package/dist/chunk-TO3UAT6O.js +221 -0
  179. package/dist/chunk-TO3UAT6O.js.map +1 -0
  180. package/dist/chunk-UAYOOTRR.js +77 -0
  181. package/dist/chunk-UAYOOTRR.js.map +1 -0
  182. package/dist/chunk-UDTAMHXW.js +55 -0
  183. package/dist/chunk-UDTAMHXW.js.map +1 -0
  184. package/dist/chunk-UGKI466V.js +12 -0
  185. package/dist/chunk-UGKI466V.js.map +1 -0
  186. package/dist/chunk-UOXU7NDY.js +120 -0
  187. package/dist/chunk-UOXU7NDY.js.map +1 -0
  188. package/dist/chunk-V7OOTVK3.js +106 -0
  189. package/dist/chunk-V7OOTVK3.js.map +1 -0
  190. package/dist/chunk-VI5M7KJ2.js +1022 -0
  191. package/dist/chunk-VI5M7KJ2.js.map +1 -0
  192. package/dist/chunk-VM4RMQQN.js +11 -0
  193. package/dist/chunk-VM4RMQQN.js.map +1 -0
  194. package/dist/chunk-VMMATOPE.js +64 -0
  195. package/dist/chunk-VMMATOPE.js.map +1 -0
  196. package/dist/chunk-W2PVSIW3.js +89 -0
  197. package/dist/chunk-W2PVSIW3.js.map +1 -0
  198. package/dist/chunk-W3DUDZDU.js +88 -0
  199. package/dist/chunk-W3DUDZDU.js.map +1 -0
  200. package/dist/chunk-WKEUU2FU.js +114 -0
  201. package/dist/chunk-WKEUU2FU.js.map +1 -0
  202. package/dist/chunk-WKLW7RC6.js +28 -0
  203. package/dist/chunk-WKLW7RC6.js.map +1 -0
  204. package/dist/chunk-WSJGZNUH.js +111 -0
  205. package/dist/chunk-WSJGZNUH.js.map +1 -0
  206. package/dist/chunk-WVPDQMC2.js +144 -0
  207. package/dist/chunk-WVPDQMC2.js.map +1 -0
  208. package/dist/chunk-WWNH5ENT.js +43 -0
  209. package/dist/chunk-WWNH5ENT.js.map +1 -0
  210. package/dist/chunk-X5L62PXY.js +112 -0
  211. package/dist/chunk-X5L62PXY.js.map +1 -0
  212. package/dist/chunk-XGCV5E6W.js +133 -0
  213. package/dist/chunk-XGCV5E6W.js.map +1 -0
  214. package/dist/chunk-XRKIEL5M.js +72 -0
  215. package/dist/chunk-XRKIEL5M.js.map +1 -0
  216. package/dist/chunk-XUJYEADU.js +80 -0
  217. package/dist/chunk-XUJYEADU.js.map +1 -0
  218. package/dist/chunk-XVYNSIQC.js +116 -0
  219. package/dist/chunk-XVYNSIQC.js.map +1 -0
  220. package/dist/chunk-XWTISHXO.js +54 -0
  221. package/dist/chunk-XWTISHXO.js.map +1 -0
  222. package/dist/chunk-YOGHS4UU.js +202 -0
  223. package/dist/chunk-YOGHS4UU.js.map +1 -0
  224. package/dist/chunk-YRSKXEOD.js +135 -0
  225. package/dist/chunk-YRSKXEOD.js.map +1 -0
  226. package/dist/chunk-ZALLCR7X.js +108 -0
  227. package/dist/chunk-ZALLCR7X.js.map +1 -0
  228. package/dist/chunk-ZDAOHMCW.js +46 -0
  229. package/dist/chunk-ZDAOHMCW.js.map +1 -0
  230. package/dist/chunk-ZESICCKK.js +37 -0
  231. package/dist/chunk-ZESICCKK.js.map +1 -0
  232. package/dist/chunk-ZIKFOD6N.js +87 -0
  233. package/dist/chunk-ZIKFOD6N.js.map +1 -0
  234. package/dist/chunk-ZJRWCQEN.js +76 -0
  235. package/dist/chunk-ZJRWCQEN.js.map +1 -0
  236. package/dist/chunk-ZSRJCIWF.js +24 -0
  237. package/dist/chunk-ZSRJCIWF.js.map +1 -0
  238. package/dist/chunk-ZXPDS6DH.js +3 -0
  239. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  240. package/dist/components.css +1 -1
  241. package/dist/composites/account-menu/index.js +6 -0
  242. package/dist/composites/account-menu/index.js.map +1 -0
  243. package/dist/composites/agent-composer/index.js +7 -0
  244. package/dist/composites/agent-composer/index.js.map +1 -0
  245. package/dist/composites/agent-editor/index.js +10 -0
  246. package/dist/composites/agent-editor/index.js.map +1 -0
  247. package/dist/composites/agent-stream/index.js +12 -0
  248. package/dist/composites/agent-stream/index.js.map +1 -0
  249. package/dist/composites/agent-timeline/index.js +5 -0
  250. package/dist/composites/agent-timeline/index.js.map +1 -0
  251. package/dist/composites/approval-card/index.js +5 -0
  252. package/dist/composites/approval-card/index.js.map +1 -0
  253. package/dist/composites/chat-composer/index.js +6 -0
  254. package/dist/composites/chat-composer/index.js.map +1 -0
  255. package/dist/composites/chat-message/index.js +6 -0
  256. package/dist/composites/chat-message/index.js.map +1 -0
  257. package/dist/composites/code-block/index.js +5 -0
  258. package/dist/composites/code-block/index.js.map +1 -0
  259. package/dist/composites/command-palette/index.js +5 -0
  260. package/dist/composites/command-palette/index.js.map +1 -0
  261. package/dist/composites/confirm-dialog/index.js +7 -0
  262. package/dist/composites/confirm-dialog/index.js.map +1 -0
  263. package/dist/composites/cron-jobs-list/index.js +5 -0
  264. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  265. package/dist/composites/deployment-row/index.js +5 -0
  266. package/dist/composites/deployment-row/index.js.map +1 -0
  267. package/dist/composites/domain-config/index.js +7 -0
  268. package/dist/composites/domain-config/index.js.map +1 -0
  269. package/dist/composites/env-var-editor/index.js +7 -0
  270. package/dist/composites/env-var-editor/index.js.map +1 -0
  271. package/dist/composites/mcp-server-list/index.js +5 -0
  272. package/dist/composites/mcp-server-list/index.js.map +1 -0
  273. package/dist/composites/permission-modal/index.js +6 -0
  274. package/dist/composites/permission-modal/index.js.map +1 -0
  275. package/dist/composites/preview-env-card/index.js +6 -0
  276. package/dist/composites/preview-env-card/index.js.map +1 -0
  277. package/dist/composites/preview-panel/index.js +5 -0
  278. package/dist/composites/preview-panel/index.js.map +1 -0
  279. package/dist/composites/project-card/index.js +6 -0
  280. package/dist/composites/project-card/index.js.map +1 -0
  281. package/dist/composites/rollback-ui/index.js +6 -0
  282. package/dist/composites/rollback-ui/index.js.map +1 -0
  283. package/dist/composites/rule-editor/index.js +11 -0
  284. package/dist/composites/rule-editor/index.js.map +1 -0
  285. package/dist/composites/skill-editor/index.js +11 -0
  286. package/dist/composites/skill-editor/index.js.map +1 -0
  287. package/dist/composites/skills-list/index.js +5 -0
  288. package/dist/composites/skills-list/index.js.map +1 -0
  289. package/dist/composites/task-header/index.js +5 -0
  290. package/dist/composites/task-header/index.js.map +1 -0
  291. package/dist/composites/usage-meter/index.js +5 -0
  292. package/dist/composites/usage-meter/index.js.map +1 -0
  293. package/dist/index.js +130 -9493
  294. package/dist/index.js.map +1 -1
  295. package/dist/primitives/agent-error-card/index.js +5 -0
  296. package/dist/primitives/agent-error-card/index.js.map +1 -0
  297. package/dist/primitives/agent-event/index.js +4 -0
  298. package/dist/primitives/agent-event/index.js.map +1 -0
  299. package/dist/primitives/agent-handoff/index.js +4 -0
  300. package/dist/primitives/agent-handoff/index.js.map +1 -0
  301. package/dist/primitives/agent-profile/index.js +4 -0
  302. package/dist/primitives/agent-profile/index.js.map +1 -0
  303. package/dist/primitives/agent-starting-state/index.js +5 -0
  304. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  305. package/dist/primitives/agent-streaming/index.js +5 -0
  306. package/dist/primitives/agent-streaming/index.js.map +1 -0
  307. package/dist/primitives/alert/index.js +4 -0
  308. package/dist/primitives/alert/index.js.map +1 -0
  309. package/dist/primitives/artifact-preview/index.js +4 -0
  310. package/dist/primitives/artifact-preview/index.js.map +1 -0
  311. package/dist/primitives/attachment-chip/index.js +4 -0
  312. package/dist/primitives/attachment-chip/index.js.map +1 -0
  313. package/dist/primitives/audit-log-entry/index.js +4 -0
  314. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  315. package/dist/primitives/auto-compact-notice/index.js +5 -0
  316. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  317. package/dist/primitives/avatar/index.js +4 -0
  318. package/dist/primitives/avatar/index.js.map +1 -0
  319. package/dist/primitives/badge/index.js +4 -0
  320. package/dist/primitives/badge/index.js.map +1 -0
  321. package/dist/primitives/browser-controls/index.js +4 -0
  322. package/dist/primitives/browser-controls/index.js.map +1 -0
  323. package/dist/primitives/build-log-stream/index.js +5 -0
  324. package/dist/primitives/build-log-stream/index.js.map +1 -0
  325. package/dist/primitives/button/index.js +4 -0
  326. package/dist/primitives/button/index.js.map +1 -0
  327. package/dist/primitives/capability-indicator/index.js +4 -0
  328. package/dist/primitives/capability-indicator/index.js.map +1 -0
  329. package/dist/primitives/card/index.js +4 -0
  330. package/dist/primitives/card/index.js.map +1 -0
  331. package/dist/primitives/chat-thread/index.js +5 -0
  332. package/dist/primitives/chat-thread/index.js.map +1 -0
  333. package/dist/primitives/checkbox/index.js +4 -0
  334. package/dist/primitives/checkbox/index.js.map +1 -0
  335. package/dist/primitives/context-card/index.js +4 -0
  336. package/dist/primitives/context-card/index.js.map +1 -0
  337. package/dist/primitives/context-window-bar/index.js +4 -0
  338. package/dist/primitives/context-window-bar/index.js.map +1 -0
  339. package/dist/primitives/copy-button/index.js +4 -0
  340. package/dist/primitives/copy-button/index.js.map +1 -0
  341. package/dist/primitives/cost-meter/index.js +4 -0
  342. package/dist/primitives/cost-meter/index.js.map +1 -0
  343. package/dist/primitives/created-files-card/index.js +4 -0
  344. package/dist/primitives/created-files-card/index.js.map +1 -0
  345. package/dist/primitives/cron-job-card/index.js +4 -0
  346. package/dist/primitives/cron-job-card/index.js.map +1 -0
  347. package/dist/primitives/danger-zone/index.js +4 -0
  348. package/dist/primitives/danger-zone/index.js.map +1 -0
  349. package/dist/primitives/dialog/index.js +4 -0
  350. package/dist/primitives/dialog/index.js.map +1 -0
  351. package/dist/primitives/diff-viewer/index.js +4 -0
  352. package/dist/primitives/diff-viewer/index.js.map +1 -0
  353. package/dist/primitives/empty-state/index.js +4 -0
  354. package/dist/primitives/empty-state/index.js.map +1 -0
  355. package/dist/primitives/folder-context-card/index.js +4 -0
  356. package/dist/primitives/folder-context-card/index.js.map +1 -0
  357. package/dist/primitives/folder-selector/index.js +4 -0
  358. package/dist/primitives/folder-selector/index.js.map +1 -0
  359. package/dist/primitives/form-field/index.js +4 -0
  360. package/dist/primitives/form-field/index.js.map +1 -0
  361. package/dist/primitives/hook-config/index.js +4 -0
  362. package/dist/primitives/hook-config/index.js.map +1 -0
  363. package/dist/primitives/hook-event-log/index.js +4 -0
  364. package/dist/primitives/hook-event-log/index.js.map +1 -0
  365. package/dist/primitives/input/index.js +4 -0
  366. package/dist/primitives/input/index.js.map +1 -0
  367. package/dist/primitives/intent-selector/index.js +4 -0
  368. package/dist/primitives/intent-selector/index.js.map +1 -0
  369. package/dist/primitives/label/index.js +4 -0
  370. package/dist/primitives/label/index.js.map +1 -0
  371. package/dist/primitives/lane-board/index.js +4 -0
  372. package/dist/primitives/lane-board/index.js.map +1 -0
  373. package/dist/primitives/login-split/index.js +4 -0
  374. package/dist/primitives/login-split/index.js.map +1 -0
  375. package/dist/primitives/mcp-server-card/index.js +4 -0
  376. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  377. package/dist/primitives/memory-editor/index.js +4 -0
  378. package/dist/primitives/memory-editor/index.js.map +1 -0
  379. package/dist/primitives/mention-menu/index.js +4 -0
  380. package/dist/primitives/mention-menu/index.js.map +1 -0
  381. package/dist/primitives/metrics-panel/index.js +4 -0
  382. package/dist/primitives/metrics-panel/index.js.map +1 -0
  383. package/dist/primitives/model-card/index.js +4 -0
  384. package/dist/primitives/model-card/index.js.map +1 -0
  385. package/dist/primitives/model-selector/index.js +4 -0
  386. package/dist/primitives/model-selector/index.js.map +1 -0
  387. package/dist/primitives/pagination/index.js +4 -0
  388. package/dist/primitives/pagination/index.js.map +1 -0
  389. package/dist/primitives/permission-matrix/index.js +4 -0
  390. package/dist/primitives/permission-matrix/index.js.map +1 -0
  391. package/dist/primitives/plan-badge/index.js +4 -0
  392. package/dist/primitives/plan-badge/index.js.map +1 -0
  393. package/dist/primitives/progress/index.js +4 -0
  394. package/dist/primitives/progress/index.js.map +1 -0
  395. package/dist/primitives/progress-checklist/index.js +4 -0
  396. package/dist/primitives/progress-checklist/index.js.map +1 -0
  397. package/dist/primitives/project-switcher/index.js +4 -0
  398. package/dist/primitives/project-switcher/index.js.map +1 -0
  399. package/dist/primitives/quick-action-chips/index.js +4 -0
  400. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  401. package/dist/primitives/radio-group/index.js +4 -0
  402. package/dist/primitives/radio-group/index.js.map +1 -0
  403. package/dist/primitives/recent-folders-list/index.js +4 -0
  404. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  405. package/dist/primitives/rule-card/index.js +4 -0
  406. package/dist/primitives/rule-card/index.js.map +1 -0
  407. package/dist/primitives/run-stats/index.js +4 -0
  408. package/dist/primitives/run-stats/index.js.map +1 -0
  409. package/dist/primitives/running-tasks-panel/index.js +4 -0
  410. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  411. package/dist/primitives/scroll-area/index.js +4 -0
  412. package/dist/primitives/scroll-area/index.js.map +1 -0
  413. package/dist/primitives/select/index.js +4 -0
  414. package/dist/primitives/select/index.js.map +1 -0
  415. package/dist/primitives/session-list-item/index.js +4 -0
  416. package/dist/primitives/session-list-item/index.js.map +1 -0
  417. package/dist/primitives/session-timeline/index.js +4 -0
  418. package/dist/primitives/session-timeline/index.js.map +1 -0
  419. package/dist/primitives/sheet/index.js +4 -0
  420. package/dist/primitives/sheet/index.js.map +1 -0
  421. package/dist/primitives/sidebar/index.js +4 -0
  422. package/dist/primitives/sidebar/index.js.map +1 -0
  423. package/dist/primitives/skeleton/index.js +5 -0
  424. package/dist/primitives/skeleton/index.js.map +1 -0
  425. package/dist/primitives/skill-card/index.js +4 -0
  426. package/dist/primitives/skill-card/index.js.map +1 -0
  427. package/dist/primitives/social-auth-row/index.js +4 -0
  428. package/dist/primitives/social-auth-row/index.js.map +1 -0
  429. package/dist/primitives/stat-tile/index.js +4 -0
  430. package/dist/primitives/stat-tile/index.js.map +1 -0
  431. package/dist/primitives/status-dot/index.js +4 -0
  432. package/dist/primitives/status-dot/index.js.map +1 -0
  433. package/dist/primitives/steps-rail/index.js +4 -0
  434. package/dist/primitives/steps-rail/index.js.map +1 -0
  435. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  436. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  437. package/dist/primitives/switch/index.js +4 -0
  438. package/dist/primitives/switch/index.js.map +1 -0
  439. package/dist/primitives/system-prompt-editor/index.js +4 -0
  440. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  441. package/dist/primitives/table/index.js +4 -0
  442. package/dist/primitives/table/index.js.map +1 -0
  443. package/dist/primitives/tabs/index.js +4 -0
  444. package/dist/primitives/tabs/index.js.map +1 -0
  445. package/dist/primitives/task-plan/index.js +4 -0
  446. package/dist/primitives/task-plan/index.js.map +1 -0
  447. package/dist/primitives/terminal-panel/index.js +5 -0
  448. package/dist/primitives/terminal-panel/index.js.map +1 -0
  449. package/dist/primitives/textarea/index.js +4 -0
  450. package/dist/primitives/textarea/index.js.map +1 -0
  451. package/dist/primitives/timestamp/index.js +4 -0
  452. package/dist/primitives/timestamp/index.js.map +1 -0
  453. package/dist/primitives/toast/index.js +4 -0
  454. package/dist/primitives/toast/index.js.map +1 -0
  455. package/dist/primitives/token-usage-chart/index.js +4 -0
  456. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  457. package/dist/primitives/tool-call/index.js +4 -0
  458. package/dist/primitives/tool-call/index.js.map +1 -0
  459. package/dist/primitives/tool-call-card/index.js +4 -0
  460. package/dist/primitives/tool-call-card/index.js.map +1 -0
  461. package/dist/primitives/tool-result/index.js +4 -0
  462. package/dist/primitives/tool-result/index.js.map +1 -0
  463. package/dist/primitives/tools-list/index.js +4 -0
  464. package/dist/primitives/tools-list/index.js.map +1 -0
  465. package/dist/primitives/tooltip/index.js +4 -0
  466. package/dist/primitives/tooltip/index.js.map +1 -0
  467. package/dist/primitives/topnav/index.js +4 -0
  468. package/dist/primitives/topnav/index.js.map +1 -0
  469. package/dist/slide/index.js +1 -712
  470. package/dist/slide/index.js.map +1 -1
  471. package/dist/slide-deck/index.js +2 -688
  472. package/dist/slide-deck/index.js.map +1 -1
  473. package/llms.txt +6 -5
  474. package/package.json +115 -115
package/CHANGELOG.md CHANGED
@@ -7,6 +7,105 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.10.0-next.0] - 2026-05-25
11
+
12
+ Minor (additive, zero breaking change) — fixes a publishing-pipeline
13
+ defect surfaced by the TheoCloud dashboard bundle audit
14
+ (`MEET-ASYNC-AMENDMENT-2026-05-24-002`). Since 0.7.0, the ~100 subpath
15
+ exports declared in `package.json#exports` (`./alert`, `./button`,
16
+ `./table`, …) were **cosmetic** — each pointed at the same
17
+ `./dist/index.js` (the 417 KB barrel). `import { Alert } from
18
+ "@usetheo/ui/alert"` resolved byte-identical to
19
+ `import { Alert } from "@usetheo/ui"`, and barrel tree-shaking
20
+ failed in consumers because of `forwardRef` side-effect bailouts,
21
+ `Object.assign` compound components, and `sideEffects: ["**/*.css"]`
22
+ conservatism. TheoCloud measured **0 KB dropped** from the 240 KB
23
+ minified barrel regardless of how few exports were used.
24
+
25
+ This release extends the per-component dist pattern that already
26
+ worked for `whiteboard` / `slide` / `slide-deck` to every primitive
27
+ and composite. The barrel `import { X } from "@usetheo/ui"` is
28
+ preserved unchanged (additive migration shape, same as `@mui/material`).
29
+
30
+ Plan: `.claude/knowledge-base/plans/subpath-tree-shaking-plan.md`
31
+ ADR: `.claude/knowledge-base/decisions/subpath-exports-per-component.md`
32
+ Brief: `theo/docs/handoff/2026-05-24-theo-ui-subpath-tree-shaking-brief-4.md`
33
+
34
+ ### Changed
35
+
36
+ - **`tsup.config.ts`** auto-globs primitive + composite entries from
37
+ `src/components/{primitives,composites}/<name>/index.ts` at
38
+ config-load time. 87 primitives + 26 composites — 3 excluded
39
+ (`whiteboard`, `slide`, `slide-deck` retain their existing manual
40
+ isolated entries). New components ship subpath-shaped automatically
41
+ without `package.json#exports` hand-maintenance.
42
+ - **`splitting: true`** in tsup now dedupes shared utilities (`cn`,
43
+ forwardRef wrappers, theme helpers, lucide icon imports) into
44
+ `dist/chunk-<hash>.js` instead of inlining into every per-component
45
+ bundle. ~119 shared chunks emitted; barrel + per-component dist
46
+ files re-export from them.
47
+ - **`dts: { entry: ... }`** restricted to the barrel + isolated
48
+ engines only (D5 escalation). Generating per-component `.d.ts` for
49
+ all 114 entries OOMs the rollup-plugin-dts worker thread even with
50
+ `NODE_OPTIONS=--max-old-space-size=8192` (the flag does not
51
+ propagate to workers). Per-component subpaths resolve their `types`
52
+ field at the barrel `dist/index.d.ts` — TypeScript still finds
53
+ `Alert`/`AlertProps` from `import { Alert } from "@usetheo/ui/alert"`.
54
+ Trade-off: consumers' typecheck pulls the full type graph regardless
55
+ of subpath, but the JS dist (where tree-shaking matters) is
56
+ per-component and small.
57
+
58
+ ### Added
59
+
60
+ - **`scripts/regen-subpath-exports.ts`** — runs after `tsup` and
61
+ rewrites `package.json#exports` so per-component subpaths point at
62
+ their own dist file. Refuses to write if any non-root entry still
63
+ points at `./dist/index.js` (permanent guard against the cosmetic-
64
+ subpath defect coming back). Verifies that every source-tree
65
+ component has a matching dist entry (EC-2 guard against silent
66
+ partial builds). Wired into `package.json#scripts.build` so
67
+ `pnpm build` produces a consistent `dist/` + `exports` map every
68
+ time.
69
+ - **`scripts/sync-exports.ts`** updated to resolve each component's
70
+ layer (primitives vs composites) via filesystem and emit the
71
+ correct per-component dist path. Stays the source-of-truth for
72
+ the structure gate; `regen-subpath-exports.ts` is the same logic
73
+ applied post-build against the actual dist tree.
74
+
75
+ ### Bundle deltas
76
+
77
+ | File | Before (0.9.0-next.0) | After (0.10.0-next.0) | Δ |
78
+ |---|---|---|---|
79
+ | `dist/index.js` | 417,113 B | 49,018 B | **−88.2%** |
80
+ | `dist/slide/index.js` | 23,825 B | 400 B | −98.3% |
81
+ | `dist/slide-deck/index.js` | 58,413 B | 35,795 B | −38.7% |
82
+ | `dist/components.css` | 89,654 B | 93,069 B | +3.8% (within ±5%) |
83
+ | `dist/styles.css` | 4,720 B | 4,720 B | 0% |
84
+ | **Build time** | 17.72 s | 15.98 s | −10% |
85
+ | **Tarball (`pnpm pack`)** | 1.1 MB | 1.2 MB | +9% |
86
+ | **New per-component dist files** | 0 | 113 | + |
87
+ | **Shared chunks (`dist/chunk-*.js`)** | 0 | 119 | + |
88
+
89
+ The barrel shrank because all component code now lives in shared
90
+ chunks. Consumer-side bundle delta against TheoCloud dashboard:
91
+ **TBD — see Phase 8 evidence file** at
92
+ `.claude/knowledge-base/baselines/2026-05-25-post-subpath/theocloud-bundle-delta.txt`
93
+ once measured.
94
+
95
+ ### Migration (consumer-side, opt-in)
96
+
97
+ ```diff
98
+ - import { Card, Button, Alert } from "@usetheo/ui";
99
+ + import { Card } from "@usetheo/ui/card";
100
+ + import { Button } from "@usetheo/ui/button";
101
+ + import { Alert } from "@usetheo/ui/alert";
102
+ ```
103
+
104
+ The barrel import keeps working — migration is gradual, file by
105
+ file. CSS, themes, and isolated engines stay barrel-imported:
106
+ `import { ThemeProvider, violetForge } from "@usetheo/ui"`,
107
+ `import "@usetheo/ui/styles.css"`.
108
+
10
109
  ## [0.9.0-next.0] - 2026-05-23
11
110
 
12
111
  Minor — adds the two deferred primitives revealed by the Brief #3
@@ -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":"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","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"]}
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var SocialAuthRow = forwardRef(
6
+ ({ className, providers, onSelect, vertical, ...props }, ref) => /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ ref,
10
+ className: cn(
11
+ "grid gap-2",
12
+ vertical ? "grid-cols-1" : `grid-cols-${Math.min(providers.length, 4)}`,
13
+ className
14
+ ),
15
+ style: !vertical ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` } : void 0,
16
+ ...props,
17
+ children: providers.map((p) => {
18
+ const Icon = p.icon;
19
+ return /* @__PURE__ */ jsxs(
20
+ "button",
21
+ {
22
+ type: "button",
23
+ onClick: () => onSelect?.(p.id),
24
+ className: cn(
25
+ "inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card",
26
+ "px-4 font-medium font-sans text-body-sm text-foreground",
27
+ "transition-colors duration-base ease-out-soft",
28
+ "hover:bg-muted",
29
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
30
+ ),
31
+ children: [
32
+ /* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }),
33
+ p.label
34
+ ]
35
+ },
36
+ p.id
37
+ );
38
+ })
39
+ }
40
+ )
41
+ );
42
+ SocialAuthRow.displayName = "SocialAuthRow";
43
+
44
+ export { SocialAuthRow };
45
+ //# sourceMappingURL=chunk-3QGO5SB3.js.map
46
+ //# sourceMappingURL=chunk-3QGO5SB3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/social-auth-row/social-auth-row.tsx"],"names":[],"mappings":";;;;AA2BA,IAAM,aAAA,GAAgB,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,SAAA,EAAW,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvD,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,YAAA;AAAA,QACA,QAAA,GAAW,gBAAgB,CAAA,UAAA,EAAa,IAAA,CAAK,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,QACrE;AAAA,OACF;AAAA,MACA,KAAA,EACE,CAAC,QAAA,GACG,EAAE,qBAAqB,CAAA,OAAA,EAAU,SAAA,CAAU,MAAM,CAAA,iBAAA,CAAA,EAAoB,GACrE,MAAA;AAAA,MAEL,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,QAAA,MAAM,OAAO,CAAA,CAAE,IAAA;AACf,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,QAAA,GAAW,CAAA,CAAE,EAAE,CAAA;AAAA,YAC9B,SAAA,EAAW,EAAA;AAAA,cACT,4FAAA;AAAA,cACA,yDAAA;AAAA,cACA,+CAAA;AAAA,cACA,gBAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,cAC3C,CAAA,CAAE;AAAA;AAAA,WAAA;AAAA,UAZE,CAAA,CAAE;AAAA,SAaT;AAAA,MAEJ,CAAC;AAAA;AAAA;AAGP;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"chunk-3QGO5SB3.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\n\nexport interface SocialProvider {\n id: string;\n label: ReactNode;\n /** Icon component (e.g. brand-specific SVG). */\n icon: IconComponent;\n}\n\ninterface SocialAuthRowProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n providers: SocialProvider[];\n onSelect?: (id: string) => void;\n /**\n * Stack vertically instead of horizontally (single-column flow).\n */\n vertical?: boolean;\n}\n\n/**\n * SocialAuthRow — row of OAuth provider buttons.\n *\n * Stateless; caller wires the redirect on `onSelect`. Buttons share Theo button\n * styling but with provider icon prominently on the left.\n */\nconst SocialAuthRow = forwardRef<HTMLDivElement, SocialAuthRowProps>(\n ({ className, providers, onSelect, vertical, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid gap-2\",\n vertical ? \"grid-cols-1\" : `grid-cols-${Math.min(providers.length, 4)}`,\n className,\n )}\n style={\n !vertical\n ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` }\n : undefined\n }\n {...props}\n >\n {providers.map((p) => {\n const Icon = p.icon;\n return (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => onSelect?.(p.id)}\n className={cn(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card\",\n \"px-4 font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors duration-base ease-out-soft\",\n \"hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n {p.label}\n </button>\n );\n })}\n </div>\n ),\n);\nSocialAuthRow.displayName = \"SocialAuthRow\";\n\nexport { SocialAuthRow };\n"]}
@@ -0,0 +1,85 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Users, User, BookOpen, Sparkles } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var SOURCE_CONFIG = {
7
+ builtin: { label: "Built-in", icon: Sparkles, tone: "text-primary" },
8
+ project: { label: "Project", icon: BookOpen, tone: "text-accent" },
9
+ user: { label: "User", icon: User, tone: "text-info" },
10
+ plugin: { label: "Plugin", icon: Users, tone: "text-muted-foreground" }
11
+ };
12
+ var SkillCard = forwardRef(
13
+ ({ className, skill, onToggle, ...props }, ref) => {
14
+ const config = SOURCE_CONFIG[skill.source];
15
+ const Icon = config.icon;
16
+ const state = skill.state ?? "enabled";
17
+ const enabled = state === "enabled";
18
+ return /* @__PURE__ */ jsxs(
19
+ "article",
20
+ {
21
+ ref,
22
+ className: cn(
23
+ "grid gap-3 rounded-xl border bg-card p-4",
24
+ !enabled && "opacity-60",
25
+ className
26
+ ),
27
+ ...props,
28
+ children: [
29
+ /* @__PURE__ */ jsxs("header", { className: "flex items-start justify-between gap-3", children: [
30
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
31
+ /* @__PURE__ */ jsx("span", { className: cn("grid size-8 place-items-center rounded-md bg-muted", config.tone), children: /* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }) }),
32
+ /* @__PURE__ */ jsxs("div", { className: "grid", children: [
33
+ /* @__PURE__ */ jsx("h4", { className: "font-medium font-mono text-body-sm text-foreground", children: skill.name }),
34
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: config.label })
35
+ ] })
36
+ ] }),
37
+ onToggle ? /* @__PURE__ */ jsx(
38
+ "button",
39
+ {
40
+ type: "button",
41
+ onClick: () => onToggle(skill.id, enabled ? "disabled" : "enabled"),
42
+ "aria-pressed": enabled,
43
+ className: cn(
44
+ "inline-flex items-center rounded-full border px-2.5 py-0.5",
45
+ "font-mono text-label uppercase tracking-wider transition-colors",
46
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
47
+ enabled ? "border-success/40 bg-success/15 text-success" : "border-border/40 bg-muted text-muted-foreground"
48
+ ),
49
+ children: enabled ? "Enabled" : "Disabled"
50
+ }
51
+ ) : null
52
+ ] }),
53
+ skill.description ? /* @__PURE__ */ jsx("p", { className: "text-body-sm text-muted-foreground", children: skill.description }) : null,
54
+ skill.allowedTools && skill.allowedTools.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
55
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground uppercase tracking-wider", children: "tools:" }),
56
+ skill.allowedTools.map((tool) => /* @__PURE__ */ jsx(
57
+ "span",
58
+ {
59
+ className: "inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label",
60
+ children: tool
61
+ },
62
+ tool
63
+ ))
64
+ ] }) : null,
65
+ skill.triggers && skill.triggers.length > 0 ? /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5", children: [
66
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground uppercase tracking-wider", children: "triggers:" }),
67
+ skill.triggers.map((trigger) => /* @__PURE__ */ jsx(
68
+ "span",
69
+ {
70
+ className: "inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 font-mono text-label text-primary",
71
+ children: trigger
72
+ },
73
+ trigger
74
+ ))
75
+ ] }) : null
76
+ ]
77
+ }
78
+ );
79
+ }
80
+ );
81
+ SkillCard.displayName = "SkillCard";
82
+
83
+ export { SkillCard };
84
+ //# sourceMappingURL=chunk-47QJVWW2.js.map
85
+ //# sourceMappingURL=chunk-47QJVWW2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/skill-card/skill-card.tsx"],"names":[],"mappings":";;;;;AAUA,IAAM,aAAA,GAA2F;AAAA,EAC/F,SAAS,EAAE,KAAA,EAAO,YAAY,IAAA,EAAM,QAAA,EAAU,MAAM,cAAA,EAAe;AAAA,EACnE,SAAS,EAAE,KAAA,EAAO,WAAW,IAAA,EAAM,QAAA,EAAU,MAAM,aAAA,EAAc;AAAA,EACjE,MAAM,EAAE,KAAA,EAAO,QAAQ,IAAA,EAAM,IAAA,EAAM,MAAM,WAAA,EAAY;AAAA,EACrD,QAAQ,EAAE,KAAA,EAAO,UAAU,IAAA,EAAM,KAAA,EAAO,MAAM,uBAAA;AAChD,CAAA;AA0BA,IAAM,SAAA,GAAY,UAAA;AAAA,EAChB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACjD,IAAA,MAAM,MAAA,GAAS,aAAA,CAAc,KAAA,CAAM,MAAM,CAAA;AACzC,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,SAAA;AAC7B,IAAA,MAAM,UAAU,KAAA,KAAU,SAAA;AAC1B,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,CAAC,OAAA,IAAW,YAAA;AAAA,UACZ;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,QAAA,EAAA,EAAO,WAAU,wCAAA,EAChB,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,oDAAA,EAAsD,MAAA,CAAO,IAAI,CAAA,EACnF,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,QAAO,CAAA,EAC9C,CAAA;AAAA,8BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,oDAAA,EAAsD,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK,CAAA;AAAA,gCAC/E,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0EAAA,EACb,iBAAO,KAAA,EACV;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,YACC,QAAA,mBACC,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAS,MAAM,QAAA,CAAS,MAAM,EAAA,EAAI,OAAA,GAAU,aAAa,SAAS,CAAA;AAAA,gBAClE,cAAA,EAAc,OAAA;AAAA,gBACd,SAAA,EAAW,EAAA;AAAA,kBACT,4DAAA;AAAA,kBACA,iEAAA;AAAA,kBACA,yEAAA;AAAA,kBACA,UACI,8CAAA,GACA;AAAA,iBACN;AAAA,gBAEC,oBAAU,SAAA,GAAY;AAAA;AAAA,aACzB,GACE;AAAA,WAAA,EACN,CAAA;AAAA,UACC,KAAA,CAAM,8BACL,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,oCAAA,EAAsC,QAAA,EAAA,KAAA,CAAM,aAAY,CAAA,GACnE,IAAA;AAAA,UACH,KAAA,CAAM,gBAAgB,KAAA,CAAM,YAAA,CAAa,SAAS,CAAA,mBACjD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,QAAA,EAEtF,CAAA;AAAA,YACC,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,qBACvB,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,+FAAA;AAAA,gBAET,QAAA,EAAA;AAAA,eAAA;AAAA,cAHI;AAAA,aAKR;AAAA,WAAA,EACH,CAAA,GACE,IAAA;AAAA,UACH,KAAA,CAAM,YAAY,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,mBACzC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,WAAA,EAEtF,CAAA;AAAA,YACC,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,qBACnB,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,iGAAA;AAAA,gBAET,QAAA,EAAA;AAAA,eAAA;AAAA,cAHI;AAAA,aAKR;AAAA,WAAA,EACH,CAAA,GACE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-47QJVWW2.js","sourcesContent":["import { BookOpen, Sparkles, User, Users } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\nimport type { Mode } from \"../../../types/mode.js\";\n\nexport type SkillSource = \"builtin\" | \"project\" | \"user\" | \"plugin\";\nexport type SkillState = \"enabled\" | \"disabled\";\n\nconst SOURCE_CONFIG: Record<SkillSource, { label: string; icon: IconComponent; tone: string }> = {\n builtin: { label: \"Built-in\", icon: Sparkles, tone: \"text-primary\" },\n project: { label: \"Project\", icon: BookOpen, tone: \"text-accent\" },\n user: { label: \"User\", icon: User, tone: \"text-info\" },\n plugin: { label: \"Plugin\", icon: Users, tone: \"text-muted-foreground\" },\n};\n\nexport interface Skill {\n id: string;\n name: string;\n description?: ReactNode;\n /** Where the skill comes from. */\n source: SkillSource;\n /** Optional tools the skill is allowed to use (informational). */\n allowedTools?: string[];\n /** Optional trigger keywords / patterns for discovery. */\n triggers?: string[];\n state?: SkillState;\n /** Modes this skill is visible in. Omit / empty = global (all modes). */\n modes?: Mode[];\n}\n\ninterface SkillCardProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onToggle\"> {\n skill: Skill;\n onToggle?: (id: string, next: SkillState) => void;\n}\n\n/**\n * SkillCard — single skill entry showing what it does, where it came from,\n * and which tools it needs. Toggle to enable/disable for the current session.\n */\nconst SkillCard = forwardRef<HTMLDivElement, SkillCardProps>(\n ({ className, skill, onToggle, ...props }, ref) => {\n const config = SOURCE_CONFIG[skill.source];\n const Icon = config.icon;\n const state = skill.state ?? \"enabled\";\n const enabled = state === \"enabled\";\n return (\n <article\n ref={ref}\n className={cn(\n \"grid gap-3 rounded-xl border bg-card p-4\",\n !enabled && \"opacity-60\",\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"grid size-8 place-items-center rounded-md bg-muted\", config.tone)}>\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n </span>\n <div className=\"grid\">\n <h4 className=\"font-medium font-mono text-body-sm text-foreground\">{skill.name}</h4>\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {config.label}\n </span>\n </div>\n </div>\n {onToggle ? (\n <button\n type=\"button\"\n onClick={() => onToggle(skill.id, enabled ? \"disabled\" : \"enabled\")}\n aria-pressed={enabled}\n className={cn(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5\",\n \"font-mono text-label uppercase tracking-wider transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n enabled\n ? \"border-success/40 bg-success/15 text-success\"\n : \"border-border/40 bg-muted text-muted-foreground\",\n )}\n >\n {enabled ? \"Enabled\" : \"Disabled\"}\n </button>\n ) : null}\n </header>\n {skill.description ? (\n <p className=\"text-body-sm text-muted-foreground\">{skill.description}</p>\n ) : null}\n {skill.allowedTools && skill.allowedTools.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n <span className=\"font-mono text-label text-muted-foreground uppercase tracking-wider\">\n tools:\n </span>\n {skill.allowedTools.map((tool) => (\n <span\n key={tool}\n className=\"inline-flex items-center rounded-md bg-muted px-2 py-0.5 font-mono text-foreground text-label\"\n >\n {tool}\n </span>\n ))}\n </div>\n ) : null}\n {skill.triggers && skill.triggers.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5\">\n <span className=\"font-mono text-label text-muted-foreground uppercase tracking-wider\">\n triggers:\n </span>\n {skill.triggers.map((trigger) => (\n <span\n key={trigger}\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2 py-0.5 font-mono text-label text-primary\"\n >\n {trigger}\n </span>\n ))}\n </div>\n ) : null}\n </article>\n );\n },\n);\nSkillCard.displayName = \"SkillCard\";\n\nexport { SkillCard };\n"]}
@@ -0,0 +1,35 @@
1
+ import { useInLiveRegion } from './chunk-UGKI466V.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { Loader2 } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var AgentStartingState = forwardRef(
8
+ ({ className, label = "Starting up\u2026", hint, ...props }, ref) => {
9
+ const inLiveRegion = useInLiveRegion();
10
+ return /* @__PURE__ */ jsxs(
11
+ "output",
12
+ {
13
+ ref,
14
+ "aria-live": inLiveRegion ? void 0 : "polite",
15
+ className: cn(
16
+ "flex items-center gap-3 rounded-xl border border-primary/30 border-dashed bg-primary/5 px-4 py-3",
17
+ className
18
+ ),
19
+ ...props,
20
+ children: [
21
+ /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin text-primary", "aria-hidden": "true" }),
22
+ /* @__PURE__ */ jsxs("div", { className: "grid", children: [
23
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-body-sm text-foreground", children: label }),
24
+ hint ? /* @__PURE__ */ jsx("span", { className: "text-body-sm text-muted-foreground", children: hint }) : null
25
+ ] })
26
+ ]
27
+ }
28
+ );
29
+ }
30
+ );
31
+ AgentStartingState.displayName = "AgentStartingState";
32
+
33
+ export { AgentStartingState };
34
+ //# sourceMappingURL=chunk-4L63UW3I.js.map
35
+ //# sourceMappingURL=chunk-4L63UW3I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/agent-starting-state/agent-starting-state.tsx"],"names":[],"mappings":";;;;;;AAmBA,IAAM,kBAAA,GAAqB,UAAA;AAAA,EACzB,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,qBAAgB,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAE9D,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,uBACE,IAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAW,eAAe,MAAA,GAAY,QAAA;AAAA,QACtC,SAAA,EAAW,EAAA;AAAA,UACT,kGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,kCAAA,EAAmC,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,0BACzE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EAA4C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACjE,uBAAO,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,gBAAK,CAAA,GAAU;AAAA,WAAA,EAC/E;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,kBAAA,CAAmB,WAAA,GAAc,oBAAA","file":"chunk-4L63UW3I.js","sourcesContent":["import { Loader2 } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { OutputHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { useInLiveRegion } from \"../../../lib/live-region-context.js\";\n\ninterface AgentStartingStateProps extends OutputHTMLAttributes<HTMLOutputElement> {\n /** Title shown next to the spinner. Default \"Starting up…\". */\n label?: ReactNode;\n /** Optional secondary copy explaining the bootstrap step. */\n hint?: ReactNode;\n}\n\n/**\n * AgentStartingState — full-width skeleton shown while the agent boots.\n *\n * Visual: violet spinner + label, optional hint below. Wrapped in a soft card.\n * Uses semantic `<output aria-live=\"polite\">` so screen readers announce the state.\n */\nconst AgentStartingState = forwardRef<HTMLOutputElement, AgentStartingStateProps>(\n ({ className, label = \"Starting up…\", hint, ...props }, ref) => {\n // T4.1 (MF-4): omit aria-live when nested inside a container live region.\n const inLiveRegion = useInLiveRegion();\n return (\n <output\n ref={ref}\n aria-live={inLiveRegion ? undefined : \"polite\"}\n className={cn(\n \"flex items-center gap-3 rounded-xl border border-primary/30 border-dashed bg-primary/5 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <Loader2 className=\"size-4 animate-spin text-primary\" aria-hidden=\"true\" />\n <div className=\"grid\">\n <span className=\"font-medium text-body-sm text-foreground\">{label}</span>\n {hint ? <span className=\"text-body-sm text-muted-foreground\">{hint}</span> : null}\n </div>\n </output>\n );\n },\n);\nAgentStartingState.displayName = \"AgentStartingState\";\n\nexport { AgentStartingState };\n"]}