@usetheo/ui 0.8.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 (479) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +18 -18
  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-CDA6RYOX.js +115 -0
  64. package/dist/chunk-CDA6RYOX.js.map +1 -0
  65. package/dist/chunk-CG7O3A42.js +80 -0
  66. package/dist/chunk-CG7O3A42.js.map +1 -0
  67. package/dist/chunk-CIYGNPKT.js +76 -0
  68. package/dist/chunk-CIYGNPKT.js.map +1 -0
  69. package/dist/chunk-CKXY4FTV.js +59 -0
  70. package/dist/chunk-CKXY4FTV.js.map +1 -0
  71. package/dist/chunk-CVOKZITR.js +82 -0
  72. package/dist/chunk-CVOKZITR.js.map +1 -0
  73. package/dist/chunk-CWFMFKDI.js +82 -0
  74. package/dist/chunk-CWFMFKDI.js.map +1 -0
  75. package/dist/chunk-CWVKSV7S.js +124 -0
  76. package/dist/chunk-CWVKSV7S.js.map +1 -0
  77. package/dist/chunk-CYOLRWOX.js +63 -0
  78. package/dist/chunk-CYOLRWOX.js.map +1 -0
  79. package/dist/chunk-D23LRJT6.js +116 -0
  80. package/dist/chunk-D23LRJT6.js.map +1 -0
  81. package/dist/chunk-DAKIL5PC.js +186 -0
  82. package/dist/chunk-DAKIL5PC.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-E5A7HN6H.js +32 -0
  86. package/dist/chunk-E5A7HN6H.js.map +1 -0
  87. package/dist/chunk-EI63GTN7.js +57 -0
  88. package/dist/chunk-EI63GTN7.js.map +1 -0
  89. package/dist/chunk-EP25QJ4N.js +146 -0
  90. package/dist/chunk-EP25QJ4N.js.map +1 -0
  91. package/dist/chunk-ET44426Q.js +80 -0
  92. package/dist/chunk-ET44426Q.js.map +1 -0
  93. package/dist/chunk-ETEIDY34.js +67 -0
  94. package/dist/chunk-ETEIDY34.js.map +1 -0
  95. package/dist/chunk-EU55O4P7.js +76 -0
  96. package/dist/chunk-EU55O4P7.js.map +1 -0
  97. package/dist/chunk-F436537E.js +104 -0
  98. package/dist/chunk-F436537E.js.map +1 -0
  99. package/dist/chunk-FLBTGNQI.js +86 -0
  100. package/dist/chunk-FLBTGNQI.js.map +1 -0
  101. package/dist/chunk-FUT45NFW.js +46 -0
  102. package/dist/chunk-FUT45NFW.js.map +1 -0
  103. package/dist/chunk-G3LWNTVZ.js +51 -0
  104. package/dist/chunk-G3LWNTVZ.js.map +1 -0
  105. package/dist/chunk-GBJB5WLT.js +58 -0
  106. package/dist/chunk-GBJB5WLT.js.map +1 -0
  107. package/dist/chunk-GIEPEFRX.js +110 -0
  108. package/dist/chunk-GIEPEFRX.js.map +1 -0
  109. package/dist/chunk-GSO7MISR.js +58 -0
  110. package/dist/chunk-GSO7MISR.js.map +1 -0
  111. package/dist/chunk-GUQFYUIC.js +61 -0
  112. package/dist/chunk-GUQFYUIC.js.map +1 -0
  113. package/dist/chunk-H3ANHVEL.js +83 -0
  114. package/dist/chunk-H3ANHVEL.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-JQXLPVWP.js +74 -0
  126. package/dist/chunk-JQXLPVWP.js.map +1 -0
  127. package/dist/chunk-K5ARID4S.js +26 -0
  128. package/dist/chunk-K5ARID4S.js.map +1 -0
  129. package/dist/chunk-K6RTLPIJ.js +41 -0
  130. package/dist/chunk-K6RTLPIJ.js.map +1 -0
  131. package/dist/chunk-KQNKKV2C.js +56 -0
  132. package/dist/chunk-KQNKKV2C.js.map +1 -0
  133. package/dist/chunk-KRN4NE4U.js +155 -0
  134. package/dist/chunk-KRN4NE4U.js.map +1 -0
  135. package/dist/chunk-L2BI762I.js +82 -0
  136. package/dist/chunk-L2BI762I.js.map +1 -0
  137. package/dist/chunk-LEEH63B2.js +56 -0
  138. package/dist/chunk-LEEH63B2.js.map +1 -0
  139. package/dist/chunk-LHRWVM3G.js +42 -0
  140. package/dist/chunk-LHRWVM3G.js.map +1 -0
  141. package/dist/chunk-LIGWMGXM.js +117 -0
  142. package/dist/chunk-LIGWMGXM.js.map +1 -0
  143. package/dist/chunk-LKYSX3QF.js +104 -0
  144. package/dist/chunk-LKYSX3QF.js.map +1 -0
  145. package/dist/chunk-MCIFB6VS.js +54 -0
  146. package/dist/chunk-MCIFB6VS.js.map +1 -0
  147. package/dist/chunk-NQZYY4LR.js +84 -0
  148. package/dist/chunk-NQZYY4LR.js.map +1 -0
  149. package/dist/chunk-O23LKHUR.js +66 -0
  150. package/dist/chunk-O23LKHUR.js.map +1 -0
  151. package/dist/chunk-PASI2U2R.js +23 -0
  152. package/dist/chunk-PASI2U2R.js.map +1 -0
  153. package/dist/chunk-PPH5NTHV.js +34 -0
  154. package/dist/chunk-PPH5NTHV.js.map +1 -0
  155. package/dist/chunk-PR6OZF6D.js +28 -0
  156. package/dist/chunk-PR6OZF6D.js.map +1 -0
  157. package/dist/chunk-PWXOXPFT.js +142 -0
  158. package/dist/chunk-PWXOXPFT.js.map +1 -0
  159. package/dist/chunk-QB6BNHO3.js +112 -0
  160. package/dist/chunk-QB6BNHO3.js.map +1 -0
  161. package/dist/chunk-QSOIJ6J3.js +91 -0
  162. package/dist/chunk-QSOIJ6J3.js.map +1 -0
  163. package/dist/chunk-QU6RLHYH.js +156 -0
  164. package/dist/chunk-QU6RLHYH.js.map +1 -0
  165. package/dist/chunk-R63ZKLQM.js +45 -0
  166. package/dist/chunk-R63ZKLQM.js.map +1 -0
  167. package/dist/chunk-RTYYJPPE.js +77 -0
  168. package/dist/chunk-RTYYJPPE.js.map +1 -0
  169. package/dist/chunk-RVOBP7PO.js +116 -0
  170. package/dist/chunk-RVOBP7PO.js.map +1 -0
  171. package/dist/chunk-SF6R5VMQ.js +97 -0
  172. package/dist/chunk-SF6R5VMQ.js.map +1 -0
  173. package/dist/chunk-SP4CP5HY.js +57 -0
  174. package/dist/chunk-SP4CP5HY.js.map +1 -0
  175. package/dist/chunk-SWJ4EUOI.js +30 -0
  176. package/dist/chunk-SWJ4EUOI.js.map +1 -0
  177. package/dist/chunk-TK24HQJJ.js +128 -0
  178. package/dist/chunk-TK24HQJJ.js.map +1 -0
  179. package/dist/chunk-TO3UAT6O.js +221 -0
  180. package/dist/chunk-TO3UAT6O.js.map +1 -0
  181. package/dist/chunk-UAYOOTRR.js +77 -0
  182. package/dist/chunk-UAYOOTRR.js.map +1 -0
  183. package/dist/chunk-UDTAMHXW.js +55 -0
  184. package/dist/chunk-UDTAMHXW.js.map +1 -0
  185. package/dist/chunk-UGKI466V.js +12 -0
  186. package/dist/chunk-UGKI466V.js.map +1 -0
  187. package/dist/chunk-UOXU7NDY.js +120 -0
  188. package/dist/chunk-UOXU7NDY.js.map +1 -0
  189. package/dist/chunk-V7OOTVK3.js +106 -0
  190. package/dist/chunk-V7OOTVK3.js.map +1 -0
  191. package/dist/chunk-VI5M7KJ2.js +1022 -0
  192. package/dist/chunk-VI5M7KJ2.js.map +1 -0
  193. package/dist/chunk-VM4RMQQN.js +11 -0
  194. package/dist/chunk-VM4RMQQN.js.map +1 -0
  195. package/dist/chunk-VMMATOPE.js +64 -0
  196. package/dist/chunk-VMMATOPE.js.map +1 -0
  197. package/dist/chunk-W2PVSIW3.js +89 -0
  198. package/dist/chunk-W2PVSIW3.js.map +1 -0
  199. package/dist/chunk-W3DUDZDU.js +88 -0
  200. package/dist/chunk-W3DUDZDU.js.map +1 -0
  201. package/dist/chunk-WKEUU2FU.js +114 -0
  202. package/dist/chunk-WKEUU2FU.js.map +1 -0
  203. package/dist/chunk-WKLW7RC6.js +28 -0
  204. package/dist/chunk-WKLW7RC6.js.map +1 -0
  205. package/dist/chunk-WSJGZNUH.js +111 -0
  206. package/dist/chunk-WSJGZNUH.js.map +1 -0
  207. package/dist/chunk-WVPDQMC2.js +144 -0
  208. package/dist/chunk-WVPDQMC2.js.map +1 -0
  209. package/dist/chunk-WWNH5ENT.js +43 -0
  210. package/dist/chunk-WWNH5ENT.js.map +1 -0
  211. package/dist/chunk-X5L62PXY.js +112 -0
  212. package/dist/chunk-X5L62PXY.js.map +1 -0
  213. package/dist/chunk-XGCV5E6W.js +133 -0
  214. package/dist/chunk-XGCV5E6W.js.map +1 -0
  215. package/dist/chunk-XRKIEL5M.js +72 -0
  216. package/dist/chunk-XRKIEL5M.js.map +1 -0
  217. package/dist/chunk-XUJYEADU.js +80 -0
  218. package/dist/chunk-XUJYEADU.js.map +1 -0
  219. package/dist/chunk-XVYNSIQC.js +116 -0
  220. package/dist/chunk-XVYNSIQC.js.map +1 -0
  221. package/dist/chunk-XWTISHXO.js +54 -0
  222. package/dist/chunk-XWTISHXO.js.map +1 -0
  223. package/dist/chunk-YOGHS4UU.js +202 -0
  224. package/dist/chunk-YOGHS4UU.js.map +1 -0
  225. package/dist/chunk-YRSKXEOD.js +135 -0
  226. package/dist/chunk-YRSKXEOD.js.map +1 -0
  227. package/dist/chunk-ZALLCR7X.js +108 -0
  228. package/dist/chunk-ZALLCR7X.js.map +1 -0
  229. package/dist/chunk-ZDAOHMCW.js +46 -0
  230. package/dist/chunk-ZDAOHMCW.js.map +1 -0
  231. package/dist/chunk-ZESICCKK.js +37 -0
  232. package/dist/chunk-ZESICCKK.js.map +1 -0
  233. package/dist/chunk-ZIKFOD6N.js +87 -0
  234. package/dist/chunk-ZIKFOD6N.js.map +1 -0
  235. package/dist/chunk-ZJRWCQEN.js +76 -0
  236. package/dist/chunk-ZJRWCQEN.js.map +1 -0
  237. package/dist/chunk-ZSRJCIWF.js +24 -0
  238. package/dist/chunk-ZSRJCIWF.js.map +1 -0
  239. package/dist/chunk-ZXPDS6DH.js +3 -0
  240. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  241. package/dist/components.css +1 -1
  242. package/dist/composites/account-menu/index.js +6 -0
  243. package/dist/composites/account-menu/index.js.map +1 -0
  244. package/dist/composites/agent-composer/index.js +7 -0
  245. package/dist/composites/agent-composer/index.js.map +1 -0
  246. package/dist/composites/agent-editor/index.js +10 -0
  247. package/dist/composites/agent-editor/index.js.map +1 -0
  248. package/dist/composites/agent-stream/index.js +12 -0
  249. package/dist/composites/agent-stream/index.js.map +1 -0
  250. package/dist/composites/agent-timeline/index.js +5 -0
  251. package/dist/composites/agent-timeline/index.js.map +1 -0
  252. package/dist/composites/approval-card/index.js +5 -0
  253. package/dist/composites/approval-card/index.js.map +1 -0
  254. package/dist/composites/chat-composer/index.js +6 -0
  255. package/dist/composites/chat-composer/index.js.map +1 -0
  256. package/dist/composites/chat-message/index.js +6 -0
  257. package/dist/composites/chat-message/index.js.map +1 -0
  258. package/dist/composites/code-block/index.js +5 -0
  259. package/dist/composites/code-block/index.js.map +1 -0
  260. package/dist/composites/command-palette/index.js +5 -0
  261. package/dist/composites/command-palette/index.js.map +1 -0
  262. package/dist/composites/confirm-dialog/index.js +7 -0
  263. package/dist/composites/confirm-dialog/index.js.map +1 -0
  264. package/dist/composites/cron-jobs-list/index.js +5 -0
  265. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  266. package/dist/composites/deployment-row/index.js +5 -0
  267. package/dist/composites/deployment-row/index.js.map +1 -0
  268. package/dist/composites/domain-config/index.js +7 -0
  269. package/dist/composites/domain-config/index.js.map +1 -0
  270. package/dist/composites/env-var-editor/index.js +7 -0
  271. package/dist/composites/env-var-editor/index.js.map +1 -0
  272. package/dist/composites/mcp-server-list/index.js +5 -0
  273. package/dist/composites/mcp-server-list/index.js.map +1 -0
  274. package/dist/composites/permission-modal/index.js +6 -0
  275. package/dist/composites/permission-modal/index.js.map +1 -0
  276. package/dist/composites/preview-env-card/index.js +6 -0
  277. package/dist/composites/preview-env-card/index.js.map +1 -0
  278. package/dist/composites/preview-panel/index.js +5 -0
  279. package/dist/composites/preview-panel/index.js.map +1 -0
  280. package/dist/composites/project-card/index.js +6 -0
  281. package/dist/composites/project-card/index.js.map +1 -0
  282. package/dist/composites/rollback-ui/index.js +6 -0
  283. package/dist/composites/rollback-ui/index.js.map +1 -0
  284. package/dist/composites/rule-editor/index.js +11 -0
  285. package/dist/composites/rule-editor/index.js.map +1 -0
  286. package/dist/composites/skill-editor/index.js +11 -0
  287. package/dist/composites/skill-editor/index.js.map +1 -0
  288. package/dist/composites/skills-list/index.js +5 -0
  289. package/dist/composites/skills-list/index.js.map +1 -0
  290. package/dist/composites/task-header/index.js +5 -0
  291. package/dist/composites/task-header/index.js.map +1 -0
  292. package/dist/composites/usage-meter/index.js +5 -0
  293. package/dist/composites/usage-meter/index.js.map +1 -0
  294. package/dist/index.d.ts +74 -1
  295. package/dist/index.js +130 -9221
  296. package/dist/index.js.map +1 -1
  297. package/dist/primitives/agent-error-card/index.js +5 -0
  298. package/dist/primitives/agent-error-card/index.js.map +1 -0
  299. package/dist/primitives/agent-event/index.js +4 -0
  300. package/dist/primitives/agent-event/index.js.map +1 -0
  301. package/dist/primitives/agent-handoff/index.js +4 -0
  302. package/dist/primitives/agent-handoff/index.js.map +1 -0
  303. package/dist/primitives/agent-profile/index.js +4 -0
  304. package/dist/primitives/agent-profile/index.js.map +1 -0
  305. package/dist/primitives/agent-starting-state/index.js +5 -0
  306. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  307. package/dist/primitives/agent-streaming/index.js +5 -0
  308. package/dist/primitives/agent-streaming/index.js.map +1 -0
  309. package/dist/primitives/alert/index.js +4 -0
  310. package/dist/primitives/alert/index.js.map +1 -0
  311. package/dist/primitives/artifact-preview/index.js +4 -0
  312. package/dist/primitives/artifact-preview/index.js.map +1 -0
  313. package/dist/primitives/attachment-chip/index.js +4 -0
  314. package/dist/primitives/attachment-chip/index.js.map +1 -0
  315. package/dist/primitives/audit-log-entry/index.js +4 -0
  316. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  317. package/dist/primitives/auto-compact-notice/index.js +5 -0
  318. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  319. package/dist/primitives/avatar/index.js +4 -0
  320. package/dist/primitives/avatar/index.js.map +1 -0
  321. package/dist/primitives/badge/index.js +4 -0
  322. package/dist/primitives/badge/index.js.map +1 -0
  323. package/dist/primitives/browser-controls/index.js +4 -0
  324. package/dist/primitives/browser-controls/index.js.map +1 -0
  325. package/dist/primitives/build-log-stream/index.js +5 -0
  326. package/dist/primitives/build-log-stream/index.js.map +1 -0
  327. package/dist/primitives/button/index.js +4 -0
  328. package/dist/primitives/button/index.js.map +1 -0
  329. package/dist/primitives/capability-indicator/index.js +4 -0
  330. package/dist/primitives/capability-indicator/index.js.map +1 -0
  331. package/dist/primitives/card/index.js +4 -0
  332. package/dist/primitives/card/index.js.map +1 -0
  333. package/dist/primitives/chat-thread/index.js +5 -0
  334. package/dist/primitives/chat-thread/index.js.map +1 -0
  335. package/dist/primitives/checkbox/index.js +4 -0
  336. package/dist/primitives/checkbox/index.js.map +1 -0
  337. package/dist/primitives/context-card/index.js +4 -0
  338. package/dist/primitives/context-card/index.js.map +1 -0
  339. package/dist/primitives/context-window-bar/index.js +4 -0
  340. package/dist/primitives/context-window-bar/index.js.map +1 -0
  341. package/dist/primitives/copy-button/index.js +4 -0
  342. package/dist/primitives/copy-button/index.js.map +1 -0
  343. package/dist/primitives/cost-meter/index.js +4 -0
  344. package/dist/primitives/cost-meter/index.js.map +1 -0
  345. package/dist/primitives/created-files-card/index.js +4 -0
  346. package/dist/primitives/created-files-card/index.js.map +1 -0
  347. package/dist/primitives/cron-job-card/index.js +4 -0
  348. package/dist/primitives/cron-job-card/index.js.map +1 -0
  349. package/dist/primitives/danger-zone/index.js +4 -0
  350. package/dist/primitives/danger-zone/index.js.map +1 -0
  351. package/dist/primitives/dialog/index.js +4 -0
  352. package/dist/primitives/dialog/index.js.map +1 -0
  353. package/dist/primitives/diff-viewer/index.js +4 -0
  354. package/dist/primitives/diff-viewer/index.js.map +1 -0
  355. package/dist/primitives/empty-state/index.js +4 -0
  356. package/dist/primitives/empty-state/index.js.map +1 -0
  357. package/dist/primitives/folder-context-card/index.js +4 -0
  358. package/dist/primitives/folder-context-card/index.js.map +1 -0
  359. package/dist/primitives/folder-selector/index.js +4 -0
  360. package/dist/primitives/folder-selector/index.js.map +1 -0
  361. package/dist/primitives/form-field/index.js +4 -0
  362. package/dist/primitives/form-field/index.js.map +1 -0
  363. package/dist/primitives/hook-config/index.js +4 -0
  364. package/dist/primitives/hook-config/index.js.map +1 -0
  365. package/dist/primitives/hook-event-log/index.js +4 -0
  366. package/dist/primitives/hook-event-log/index.js.map +1 -0
  367. package/dist/primitives/input/index.js +4 -0
  368. package/dist/primitives/input/index.js.map +1 -0
  369. package/dist/primitives/intent-selector/index.js +4 -0
  370. package/dist/primitives/intent-selector/index.js.map +1 -0
  371. package/dist/primitives/label/index.js +4 -0
  372. package/dist/primitives/label/index.js.map +1 -0
  373. package/dist/primitives/lane-board/index.js +4 -0
  374. package/dist/primitives/lane-board/index.js.map +1 -0
  375. package/dist/primitives/login-split/index.js +4 -0
  376. package/dist/primitives/login-split/index.js.map +1 -0
  377. package/dist/primitives/mcp-server-card/index.js +4 -0
  378. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  379. package/dist/primitives/memory-editor/index.js +4 -0
  380. package/dist/primitives/memory-editor/index.js.map +1 -0
  381. package/dist/primitives/mention-menu/index.js +4 -0
  382. package/dist/primitives/mention-menu/index.js.map +1 -0
  383. package/dist/primitives/metrics-panel/index.js +4 -0
  384. package/dist/primitives/metrics-panel/index.js.map +1 -0
  385. package/dist/primitives/model-card/index.js +4 -0
  386. package/dist/primitives/model-card/index.js.map +1 -0
  387. package/dist/primitives/model-selector/index.js +4 -0
  388. package/dist/primitives/model-selector/index.js.map +1 -0
  389. package/dist/primitives/pagination/index.js +4 -0
  390. package/dist/primitives/pagination/index.js.map +1 -0
  391. package/dist/primitives/permission-matrix/index.js +4 -0
  392. package/dist/primitives/permission-matrix/index.js.map +1 -0
  393. package/dist/primitives/plan-badge/index.js +4 -0
  394. package/dist/primitives/plan-badge/index.js.map +1 -0
  395. package/dist/primitives/progress/index.js +4 -0
  396. package/dist/primitives/progress/index.js.map +1 -0
  397. package/dist/primitives/progress-checklist/index.js +4 -0
  398. package/dist/primitives/progress-checklist/index.js.map +1 -0
  399. package/dist/primitives/project-switcher/index.js +4 -0
  400. package/dist/primitives/project-switcher/index.js.map +1 -0
  401. package/dist/primitives/quick-action-chips/index.js +4 -0
  402. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  403. package/dist/primitives/radio-group/index.js +4 -0
  404. package/dist/primitives/radio-group/index.js.map +1 -0
  405. package/dist/primitives/recent-folders-list/index.js +4 -0
  406. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  407. package/dist/primitives/rule-card/index.js +4 -0
  408. package/dist/primitives/rule-card/index.js.map +1 -0
  409. package/dist/primitives/run-stats/index.js +4 -0
  410. package/dist/primitives/run-stats/index.js.map +1 -0
  411. package/dist/primitives/running-tasks-panel/index.js +4 -0
  412. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  413. package/dist/primitives/scroll-area/index.js +4 -0
  414. package/dist/primitives/scroll-area/index.js.map +1 -0
  415. package/dist/primitives/select/index.js +4 -0
  416. package/dist/primitives/select/index.js.map +1 -0
  417. package/dist/primitives/session-list-item/index.js +4 -0
  418. package/dist/primitives/session-list-item/index.js.map +1 -0
  419. package/dist/primitives/session-timeline/index.js +4 -0
  420. package/dist/primitives/session-timeline/index.js.map +1 -0
  421. package/dist/primitives/sheet/index.js +4 -0
  422. package/dist/primitives/sheet/index.js.map +1 -0
  423. package/dist/primitives/sidebar/index.js +4 -0
  424. package/dist/primitives/sidebar/index.js.map +1 -0
  425. package/dist/primitives/skeleton/index.js +5 -0
  426. package/dist/primitives/skeleton/index.js.map +1 -0
  427. package/dist/primitives/skill-card/index.js +4 -0
  428. package/dist/primitives/skill-card/index.js.map +1 -0
  429. package/dist/primitives/social-auth-row/index.js +4 -0
  430. package/dist/primitives/social-auth-row/index.js.map +1 -0
  431. package/dist/primitives/stat-tile/index.js +4 -0
  432. package/dist/primitives/stat-tile/index.js.map +1 -0
  433. package/dist/primitives/status-dot/index.js +4 -0
  434. package/dist/primitives/status-dot/index.js.map +1 -0
  435. package/dist/primitives/steps-rail/index.js +4 -0
  436. package/dist/primitives/steps-rail/index.js.map +1 -0
  437. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  438. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  439. package/dist/primitives/switch/index.js +4 -0
  440. package/dist/primitives/switch/index.js.map +1 -0
  441. package/dist/primitives/system-prompt-editor/index.js +4 -0
  442. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  443. package/dist/primitives/table/index.js +4 -0
  444. package/dist/primitives/table/index.js.map +1 -0
  445. package/dist/primitives/tabs/index.js +4 -0
  446. package/dist/primitives/tabs/index.js.map +1 -0
  447. package/dist/primitives/task-plan/index.js +4 -0
  448. package/dist/primitives/task-plan/index.js.map +1 -0
  449. package/dist/primitives/terminal-panel/index.js +5 -0
  450. package/dist/primitives/terminal-panel/index.js.map +1 -0
  451. package/dist/primitives/textarea/index.js +4 -0
  452. package/dist/primitives/textarea/index.js.map +1 -0
  453. package/dist/primitives/timestamp/index.js +4 -0
  454. package/dist/primitives/timestamp/index.js.map +1 -0
  455. package/dist/primitives/toast/index.js +4 -0
  456. package/dist/primitives/toast/index.js.map +1 -0
  457. package/dist/primitives/token-usage-chart/index.js +4 -0
  458. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  459. package/dist/primitives/tool-call/index.js +4 -0
  460. package/dist/primitives/tool-call/index.js.map +1 -0
  461. package/dist/primitives/tool-call-card/index.js +4 -0
  462. package/dist/primitives/tool-call-card/index.js.map +1 -0
  463. package/dist/primitives/tool-result/index.js +4 -0
  464. package/dist/primitives/tool-result/index.js.map +1 -0
  465. package/dist/primitives/tools-list/index.js +4 -0
  466. package/dist/primitives/tools-list/index.js.map +1 -0
  467. package/dist/primitives/tooltip/index.js +4 -0
  468. package/dist/primitives/tooltip/index.js.map +1 -0
  469. package/dist/primitives/topnav/index.js +4 -0
  470. package/dist/primitives/topnav/index.js.map +1 -0
  471. package/dist/slide/index.js +1 -712
  472. package/dist/slide/index.js.map +1 -1
  473. package/dist/slide-deck/index.js +2 -688
  474. package/dist/slide-deck/index.js.map +1 -1
  475. package/llms.txt +270 -0
  476. package/package.json +123 -114
  477. package/registry/index.json +12 -0
  478. package/registry/r/alert.json +22 -0
  479. package/registry/r/pagination.json +22 -0
@@ -0,0 +1,114 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Clock, Play, Square, Trash2 } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var STATUS_CONFIG = {
7
+ idle: { label: "Scheduled", class: "border-success/40 bg-success/10 text-success" },
8
+ running: {
9
+ label: "Running",
10
+ class: "border-primary/40 bg-primary/10 text-primary animate-pulse"
11
+ },
12
+ failed: {
13
+ label: "Last run failed",
14
+ class: "border-destructive/40 bg-destructive/10 text-destructive"
15
+ },
16
+ disabled: { label: "Disabled", class: "border-border/40 bg-muted text-muted-foreground" }
17
+ };
18
+ var CronJobCard = forwardRef(
19
+ ({ className, job, onRunNow, onToggle, onRemove, ...props }, ref) => {
20
+ const cfg = STATUS_CONFIG[job.status];
21
+ const enabled = job.status !== "disabled";
22
+ return /* @__PURE__ */ jsxs(
23
+ "article",
24
+ {
25
+ ref,
26
+ className: cn(
27
+ "grid gap-3 rounded-xl border bg-card p-4",
28
+ job.status === "disabled" && "opacity-70",
29
+ className
30
+ ),
31
+ ...props,
32
+ children: [
33
+ /* @__PURE__ */ jsxs("header", { className: "flex items-start justify-between gap-3", children: [
34
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
35
+ /* @__PURE__ */ jsx("h4", { className: "font-display text-title-md tracking-tight", children: job.name }),
36
+ /* @__PURE__ */ jsxs("p", { className: "mt-0.5 inline-flex items-center gap-2 font-mono text-code-sm text-muted-foreground", children: [
37
+ /* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
38
+ " ",
39
+ job.schedule
40
+ ] })
41
+ ] }),
42
+ /* @__PURE__ */ jsx(
43
+ "span",
44
+ {
45
+ className: cn(
46
+ "inline-flex items-center rounded-full border px-2.5 py-0.5",
47
+ "font-mono text-label uppercase tracking-wider",
48
+ cfg.class
49
+ ),
50
+ children: cfg.label
51
+ }
52
+ )
53
+ ] }),
54
+ /* @__PURE__ */ jsx("p", { className: "line-clamp-2 rounded-md bg-muted/60 px-3 py-2 font-mono text-code-sm text-foreground", children: job.prompt }),
55
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-3 font-mono text-label text-muted-foreground", children: [
56
+ /* @__PURE__ */ jsxs("span", { children: [
57
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/60", children: "last:" }),
58
+ " ",
59
+ job.lastRun ?? "never"
60
+ ] }),
61
+ /* @__PURE__ */ jsxs("span", { children: [
62
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/60", children: "next:" }),
63
+ " ",
64
+ job.nextRun ?? "\u2014"
65
+ ] })
66
+ ] }),
67
+ job.lastResult ? /* @__PURE__ */ jsx("p", { className: "text-body-sm text-muted-foreground", children: job.lastResult }) : null,
68
+ /* @__PURE__ */ jsxs("footer", { className: "flex items-center justify-end gap-1.5", children: [
69
+ onRunNow ? /* @__PURE__ */ jsxs(
70
+ "button",
71
+ {
72
+ type: "button",
73
+ onClick: () => onRunNow(job.id),
74
+ className: "inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
75
+ children: [
76
+ /* @__PURE__ */ jsx(Play, { className: "size-3" }),
77
+ " Run now"
78
+ ]
79
+ }
80
+ ) : null,
81
+ onToggle ? /* @__PURE__ */ jsxs(
82
+ "button",
83
+ {
84
+ type: "button",
85
+ onClick: () => onToggle(job.id, !enabled),
86
+ className: "inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
87
+ children: [
88
+ /* @__PURE__ */ jsx(Square, { className: "size-3" }),
89
+ " ",
90
+ enabled ? "Pause" : "Enable"
91
+ ]
92
+ }
93
+ ) : null,
94
+ onRemove ? /* @__PURE__ */ jsx(
95
+ "button",
96
+ {
97
+ type: "button",
98
+ onClick: () => onRemove(job.id),
99
+ "aria-label": `Remove ${job.name}`,
100
+ className: "rounded-md p-1.5 text-muted-foreground hover:bg-muted hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
101
+ children: /* @__PURE__ */ jsx(Trash2, { className: "size-3.5" })
102
+ }
103
+ ) : null
104
+ ] })
105
+ ]
106
+ }
107
+ );
108
+ }
109
+ );
110
+ CronJobCard.displayName = "CronJobCard";
111
+
112
+ export { CronJobCard };
113
+ //# sourceMappingURL=chunk-WKEUU2FU.js.map
114
+ //# sourceMappingURL=chunk-WKEUU2FU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/cron-job-card/cron-job-card.tsx"],"names":[],"mappings":";;;;;AA+BA,IAAM,aAAA,GAAyE;AAAA,EAC7E,IAAA,EAAM,EAAE,KAAA,EAAO,WAAA,EAAa,OAAO,8CAAA,EAA+C;AAAA,EAClF,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,iBAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU,EAAE,KAAA,EAAO,UAAA,EAAY,OAAO,iDAAA;AACxC,CAAA;AAMA,IAAM,WAAA,GAAc,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,GAAA,EAAK,QAAA,EAAU,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACnE,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,IAAI,MAAA,KAAW,UAAA;AAC/B,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,0CAAA;AAAA,UACA,GAAA,CAAI,WAAW,UAAA,IAAc,YAAA;AAAA,UAC7B;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,SAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,GAAA,CAAI,IAAA,EAAK,CAAA;AAAA,8BACpE,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oFAAA,EACX,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAE,GAAA,CAAI;AAAA,eAAA,EACvD;AAAA,aAAA,EACF,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAW,EAAA;AAAA,kBACT,4DAAA;AAAA,kBACA,+CAAA;AAAA,kBACA,GAAA,CAAI;AAAA,iBACN;AAAA,gBAEC,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA;AACP,WAAA,EACF,CAAA;AAAA,0BAEA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sFAAA,EACV,cAAI,MAAA,EACP,CAAA;AAAA,0BAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,cAAO,GAAA;AAAA,cAAE,IAAI,OAAA,IAAW;AAAA,aAAA,EAC1E,CAAA;AAAA,iCACC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0BAAA,EAA2B,QAAA,EAAA,OAAA,EAAK,CAAA;AAAA,cAAO,GAAA;AAAA,cAAE,IAAI,OAAA,IAAW;AAAA,aAAA,EAC1E;AAAA,WAAA,EACF,CAAA;AAAA,UAEC,GAAA,CAAI,6BACH,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,oCAAA,EAAsC,QAAA,EAAA,GAAA,CAAI,YAAW,CAAA,GAChE,IAAA;AAAA,0BAEJ,IAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,uCAAA,EACf,QAAA,EAAA;AAAA,YAAA,QAAA,mBACC,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA;AAAA,gBAC9B,SAAA,EAAU,qMAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,QAAA,EAAS,CAAA;AAAA,kBAAE;AAAA;AAAA;AAAA,aAC7B,GACE,IAAA;AAAA,YACH,QAAA,mBACC,IAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAS,MAAM,QAAA,CAAS,GAAA,CAAI,EAAA,EAAI,CAAC,OAAO,CAAA;AAAA,gBACxC,SAAA,EAAU,qMAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,QAAA,EAAS,CAAA;AAAA,kBAAE,GAAA;AAAA,kBAAE,UAAU,OAAA,GAAU;AAAA;AAAA;AAAA,aACrD,GACE,IAAA;AAAA,YACH,QAAA,mBACC,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,QAAA,CAAS,GAAA,CAAI,EAAE,CAAA;AAAA,gBAC9B,YAAA,EAAY,CAAA,OAAA,EAAU,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,gBAC9B,SAAA,EAAU,sJAAA;AAAA,gBAEV,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,aAC/B,GACE;AAAA,WAAA,EACN;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-WKEUU2FU.js","sourcesContent":["import { Clock, Play, Square, Trash2 } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type CronJobStatus = \"idle\" | \"running\" | \"failed\" | \"disabled\";\n\nexport interface CronJob {\n id: string;\n /** Human-readable job name. */\n name: string;\n /** Cron expression — e.g. every 4 hours. */\n schedule: string;\n /** What gets run (prompt or command). */\n prompt: string;\n status: CronJobStatus;\n /** ISO/string timestamp of last run. */\n lastRun?: string;\n /** ISO/string timestamp of next run. */\n nextRun?: string;\n /** Optional last-run result line. */\n lastResult?: ReactNode;\n}\n\ninterface CronJobCardProps extends Omit<HTMLAttributes<HTMLElement>, \"onToggle\"> {\n job: CronJob;\n onRunNow?: (id: string) => void;\n onToggle?: (id: string, enabled: boolean) => void;\n onRemove?: (id: string) => void;\n}\n\nconst STATUS_CONFIG: Record<CronJobStatus, { label: string; class: string }> = {\n idle: { label: \"Scheduled\", class: \"border-success/40 bg-success/10 text-success\" },\n running: {\n label: \"Running\",\n class: \"border-primary/40 bg-primary/10 text-primary animate-pulse\",\n },\n failed: {\n label: \"Last run failed\",\n class: \"border-destructive/40 bg-destructive/10 text-destructive\",\n },\n disabled: { label: \"Disabled\", class: \"border-border/40 bg-muted text-muted-foreground\" },\n};\n\n/**\n * CronJobCard — one scheduled agent job. Shows cron expression, prompt,\n * status, last/next run. Inline actions: run now, pause, delete.\n */\nconst CronJobCard = forwardRef<HTMLElement, CronJobCardProps>(\n ({ className, job, onRunNow, onToggle, onRemove, ...props }, ref) => {\n const cfg = STATUS_CONFIG[job.status];\n const enabled = job.status !== \"disabled\";\n return (\n <article\n ref={ref}\n className={cn(\n \"grid gap-3 rounded-xl border bg-card p-4\",\n job.status === \"disabled\" && \"opacity-70\",\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h4 className=\"font-display text-title-md tracking-tight\">{job.name}</h4>\n <p className=\"mt-0.5 inline-flex items-center gap-2 font-mono text-code-sm text-muted-foreground\">\n <Clock className=\"size-3\" aria-hidden=\"true\" /> {job.schedule}\n </p>\n </div>\n <span\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\",\n cfg.class,\n )}\n >\n {cfg.label}\n </span>\n </header>\n\n <p className=\"line-clamp-2 rounded-md bg-muted/60 px-3 py-2 font-mono text-code-sm text-foreground\">\n {job.prompt}\n </p>\n\n <div className=\"grid grid-cols-2 gap-3 font-mono text-label text-muted-foreground\">\n <span>\n <span className=\"text-muted-foreground/60\">last:</span> {job.lastRun ?? \"never\"}\n </span>\n <span>\n <span className=\"text-muted-foreground/60\">next:</span> {job.nextRun ?? \"—\"}\n </span>\n </div>\n\n {job.lastResult ? (\n <p className=\"text-body-sm text-muted-foreground\">{job.lastResult}</p>\n ) : null}\n\n <footer className=\"flex items-center justify-end gap-1.5\">\n {onRunNow ? (\n <button\n type=\"button\"\n onClick={() => onRunNow(job.id)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Play className=\"size-3\" /> Run now\n </button>\n ) : null}\n {onToggle ? (\n <button\n type=\"button\"\n onClick={() => onToggle(job.id, !enabled)}\n className=\"inline-flex items-center gap-1.5 rounded-md border border-border/60 bg-card px-2.5 py-1 font-mono text-label hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Square className=\"size-3\" /> {enabled ? \"Pause\" : \"Enable\"}\n </button>\n ) : null}\n {onRemove ? (\n <button\n type=\"button\"\n onClick={() => onRemove(job.id)}\n aria-label={`Remove ${job.name}`}\n className=\"rounded-md p-1.5 text-muted-foreground hover:bg-muted hover:text-destructive focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Trash2 className=\"size-3.5\" />\n </button>\n ) : null}\n </footer>\n </article>\n );\n },\n);\nCronJobCard.displayName = \"CronJobCard\";\n\nexport { CronJobCard };\n"]}
@@ -0,0 +1,28 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { BookOpen } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var ContextCard = forwardRef(
7
+ ({ className, title, description, illustration, icon, ...props }, ref) => {
8
+ const Icon = icon ?? BookOpen;
9
+ return /* @__PURE__ */ jsxs(
10
+ "section",
11
+ {
12
+ ref,
13
+ className: cn("grid gap-3 rounded-xl border border-border/40 bg-muted/30 p-4", className),
14
+ ...props,
15
+ children: [
16
+ illustration ? /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: illustration }) : /* @__PURE__ */ jsx(Icon, { className: "size-5 text-primary", "aria-hidden": "true" }),
17
+ title ? /* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: title }) : null,
18
+ description ? /* @__PURE__ */ jsx("p", { className: "text-body-sm text-muted-foreground", children: description }) : null
19
+ ]
20
+ }
21
+ );
22
+ }
23
+ );
24
+ ContextCard.displayName = "ContextCard";
25
+
26
+ export { ContextCard };
27
+ //# sourceMappingURL=chunk-WKLW7RC6.js.map
28
+ //# sourceMappingURL=chunk-WKLW7RC6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/context-card/context-card.tsx"],"names":[],"mappings":";;;;;AAqBA,IAAM,WAAA,GAAc,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,cAAc,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACxE,IAAA,MAAM,OAAO,IAAA,IAAQ,QAAA;AACrB,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,+DAAA,EAAiE,SAAS,CAAA;AAAA,QACvF,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,YAAA,mBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,YAAA,EAAa,CAAA,mBAEnD,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAE1D,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2CAAA,EAA6C,iBAAM,CAAA,GAAQ,IAAA;AAAA,UACjF,8BAAc,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,uBAAY,CAAA,GAAO;AAAA;AAAA;AAAA,KACvF;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA","file":"chunk-WKLW7RC6.js","sourcesContent":["import { BookOpen } 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\";\n\ninterface ContextCardProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title?: ReactNode;\n description?: ReactNode;\n /** Optional illustration slot (rendered above title). */\n illustration?: ReactNode;\n /** Icon for the title row — used when illustration is omitted. */\n icon?: IconComponent;\n}\n\n/**\n * ContextCard — generic \"informational\" card for the right inspector.\n *\n * Used as the \"Contexto\" card on Files screens: illustration / icon, title,\n * short description. Inert by design — no actions.\n */\nconst ContextCard = forwardRef<HTMLElement, ContextCardProps>(\n ({ className, title, description, illustration, icon, ...props }, ref) => {\n const Icon = icon ?? BookOpen;\n return (\n <section\n ref={ref}\n className={cn(\"grid gap-3 rounded-xl border border-border/40 bg-muted/30 p-4\", className)}\n {...props}\n >\n {illustration ? (\n <div className=\"flex justify-center\">{illustration}</div>\n ) : (\n <Icon className=\"size-5 text-primary\" aria-hidden=\"true\" />\n )}\n {title ? <h3 className=\"font-display text-title-md tracking-tight\">{title}</h3> : null}\n {description ? <p className=\"text-body-sm text-muted-foreground\">{description}</p> : null}\n </section>\n );\n },\n);\nContextCard.displayName = \"ContextCard\";\n\nexport { ContextCard };\n"]}
@@ -0,0 +1,111 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
3
+ import { ChevronDown, Sparkles, Check } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var TONE_CLASS = {
8
+ primary: "bg-primary text-primary-foreground",
9
+ accent: "bg-accent text-accent-foreground",
10
+ success: "bg-success text-success-foreground",
11
+ warning: "bg-warning text-warning-foreground",
12
+ info: "bg-info text-info-foreground",
13
+ muted: "bg-muted text-foreground"
14
+ };
15
+ var AgentProfile = forwardRef(
16
+ ({ className, agents, activeId, onChange, ...props }, ref) => {
17
+ const active = agents.find((a) => a.id === activeId) ?? agents[0];
18
+ if (!active) return null;
19
+ const initials = active.initials ?? active.name.slice(0, 2).toUpperCase();
20
+ return /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
21
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
22
+ "button",
23
+ {
24
+ ref,
25
+ type: "button",
26
+ className: cn(
27
+ "inline-flex h-9 items-center gap-2 rounded-full border border-border/60 bg-card pr-3 pl-1",
28
+ "transition-colors 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
+ className
31
+ ),
32
+ ...props,
33
+ children: [
34
+ /* @__PURE__ */ jsx(
35
+ "span",
36
+ {
37
+ className: cn(
38
+ "grid size-7 place-items-center rounded-full font-bold font-mono text-label",
39
+ TONE_CLASS[active.tone ?? "primary"]
40
+ ),
41
+ "aria-hidden": "true",
42
+ children: initials
43
+ }
44
+ ),
45
+ /* @__PURE__ */ jsx("span", { className: "font-medium font-sans text-body-sm text-foreground", children: active.name }),
46
+ /* @__PURE__ */ jsx(ChevronDown, { className: "size-3 text-muted-foreground", "aria-hidden": "true" })
47
+ ]
48
+ }
49
+ ) }),
50
+ /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsxs(
51
+ DropdownMenu.Content,
52
+ {
53
+ align: "start",
54
+ sideOffset: 6,
55
+ className: cn(
56
+ "z-50 min-w-[18rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md",
57
+ "data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
58
+ "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out"
59
+ ),
60
+ children: [
61
+ /* @__PURE__ */ jsx(DropdownMenu.Label, { className: "px-2 py-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: "Switch agent" }),
62
+ agents.map((agent) => {
63
+ const inits = agent.initials ?? agent.name.slice(0, 2).toUpperCase();
64
+ const isActive = agent.id === activeId;
65
+ return /* @__PURE__ */ jsxs(
66
+ DropdownMenu.Item,
67
+ {
68
+ onSelect: () => onChange?.(agent.id),
69
+ className: cn(
70
+ "flex cursor-pointer items-start gap-3 rounded-md px-2 py-2",
71
+ "focus:bg-muted focus:outline-none data-[highlighted]:bg-muted"
72
+ ),
73
+ children: [
74
+ /* @__PURE__ */ jsx(
75
+ "span",
76
+ {
77
+ className: cn(
78
+ "mt-0.5 grid size-8 place-items-center rounded-full font-bold font-mono text-label",
79
+ TONE_CLASS[agent.tone ?? "muted"]
80
+ ),
81
+ "aria-hidden": "true",
82
+ children: inits
83
+ }
84
+ ),
85
+ /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 flex-1 gap-0.5", children: [
86
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
87
+ /* @__PURE__ */ jsx("span", { className: "font-medium text-body-sm", children: agent.name }),
88
+ agent.badge ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 rounded-full bg-accent/15 px-1.5 py-0 font-mono text-accent text-label uppercase", children: [
89
+ /* @__PURE__ */ jsx(Sparkles, { className: "size-2.5", "aria-hidden": "true" }),
90
+ agent.badge
91
+ ] }) : null
92
+ ] }),
93
+ agent.description ? /* @__PURE__ */ jsx("span", { className: "text-body-sm text-muted-foreground", children: agent.description }) : null
94
+ ] }),
95
+ isActive ? /* @__PURE__ */ jsx(Check, { className: "mt-1 size-4 shrink-0 text-primary", "aria-hidden": "true" }) : null
96
+ ]
97
+ },
98
+ agent.id
99
+ );
100
+ })
101
+ ]
102
+ }
103
+ ) })
104
+ ] });
105
+ }
106
+ );
107
+ AgentProfile.displayName = "AgentProfile";
108
+
109
+ export { AgentProfile };
110
+ //# sourceMappingURL=chunk-WSJGZNUH.js.map
111
+ //# sourceMappingURL=chunk-WSJGZNUH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/agent-profile/agent-profile.tsx"],"names":[],"mappings":"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","file":"chunk-WSJGZNUH.js","sourcesContent":["import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronDown, Sparkles } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport interface AgentProfileDescriptor {\n id: string;\n /** Display name, e.g. \"Coder\", \"Planner\", \"Reviewer\". */\n name: string;\n /** Avatar initials (2 chars max). Falls back to first 2 letters of name. */\n initials?: string;\n /** Optional short description for tooltips and the dropdown. */\n description?: ReactNode;\n /**\n * Identity tone — colors the avatar so users tell agents apart at a glance.\n */\n tone?: \"primary\" | \"accent\" | \"success\" | \"warning\" | \"info\" | \"muted\";\n /** Optional badge text (e.g. \"experimental\"). */\n badge?: ReactNode;\n}\n\nconst TONE_CLASS: Record<NonNullable<AgentProfileDescriptor[\"tone\"]>, string> = {\n primary: \"bg-primary text-primary-foreground\",\n accent: \"bg-accent text-accent-foreground\",\n success: \"bg-success text-success-foreground\",\n warning: \"bg-warning text-warning-foreground\",\n info: \"bg-info text-info-foreground\",\n muted: \"bg-muted text-foreground\",\n};\n\ninterface AgentProfileProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\"> {\n agents: AgentProfileDescriptor[];\n activeId: string;\n onChange?: (id: string) => void;\n}\n\n/**\n * AgentProfile — switcher between multiple agent profiles (coder, planner,\n * reviewer, etc.). Each profile gets its own tone so the user can spot at a\n * glance which \"persona\" is currently driving the session.\n */\nconst AgentProfile = forwardRef<HTMLButtonElement, AgentProfileProps>(\n ({ className, agents, activeId, onChange, ...props }, ref) => {\n const active = agents.find((a) => a.id === activeId) ?? agents[0];\n if (!active) return null;\n const initials = active.initials ?? active.name.slice(0, 2).toUpperCase();\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"inline-flex h-9 items-center gap-2 rounded-full border border-border/60 bg-card pr-3 pl-1\",\n \"transition-colors 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 className,\n )}\n {...props}\n >\n <span\n className={cn(\n \"grid size-7 place-items-center rounded-full font-bold font-mono text-label\",\n TONE_CLASS[active.tone ?? \"primary\"],\n )}\n aria-hidden=\"true\"\n >\n {initials}\n </span>\n <span className=\"font-medium font-sans text-body-sm text-foreground\">\n {active.name}\n </span>\n <ChevronDown className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={6}\n className={cn(\n \"z-50 min-w-[18rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md\",\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 )}\n >\n <DropdownMenu.Label className=\"px-2 py-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n Switch agent\n </DropdownMenu.Label>\n {agents.map((agent) => {\n const inits = agent.initials ?? agent.name.slice(0, 2).toUpperCase();\n const isActive = agent.id === activeId;\n return (\n <DropdownMenu.Item\n key={agent.id}\n onSelect={() => onChange?.(agent.id)}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-md px-2 py-2\",\n \"focus:bg-muted focus:outline-none data-[highlighted]:bg-muted\",\n )}\n >\n <span\n className={cn(\n \"mt-0.5 grid size-8 place-items-center rounded-full font-bold font-mono text-label\",\n TONE_CLASS[agent.tone ?? \"muted\"],\n )}\n aria-hidden=\"true\"\n >\n {inits}\n </span>\n <div className=\"grid min-w-0 flex-1 gap-0.5\">\n <span className=\"flex items-center gap-2\">\n <span className=\"font-medium text-body-sm\">{agent.name}</span>\n {agent.badge ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-accent/15 px-1.5 py-0 font-mono text-accent text-label uppercase\">\n <Sparkles className=\"size-2.5\" aria-hidden=\"true\" />\n {agent.badge}\n </span>\n ) : null}\n </span>\n {agent.description ? (\n <span className=\"text-body-sm text-muted-foreground\">\n {agent.description}\n </span>\n ) : null}\n </div>\n {isActive ? (\n <Check className=\"mt-1 size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n ) : null}\n </DropdownMenu.Item>\n );\n })}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n },\n);\nAgentProfile.displayName = \"AgentProfile\";\n\nexport { AgentProfile };\n"]}
@@ -0,0 +1,144 @@
1
+ import { Input } from './chunk-H3VJMFJQ.js';
2
+ import { Button } from './chunk-57NXT3OX.js';
3
+ import { BadgeWithDot } from './chunk-O23LKHUR.js';
4
+ import { cn } from './chunk-ZSRJCIWF.js';
5
+ import { Plus, Lock, EyeOff, Eye, Copy, Trash2 } from 'lucide-react';
6
+ import { forwardRef, useState } from 'react';
7
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
+
9
+ var DEFAULT_SCOPES = ["production", "staging", "preview", "all"];
10
+ var EnvVarEditor = forwardRef(
11
+ ({ className, vars, onAdd, onRemove, scopeOptions = DEFAULT_SCOPES, ...props }, ref) => {
12
+ const [newKey, setNewKey] = useState("");
13
+ const [newValue, setNewValue] = useState("");
14
+ const [newScope, setNewScope] = useState(scopeOptions[0] ?? "production");
15
+ const submit = () => {
16
+ const trimmedKey = newKey.trim();
17
+ if (!trimmedKey) return;
18
+ onAdd?.({ key: trimmedKey, value: newValue, scope: newScope, masked: true });
19
+ setNewKey("");
20
+ setNewValue("");
21
+ };
22
+ return /* @__PURE__ */ jsxs(
23
+ "div",
24
+ {
25
+ ref,
26
+ className: cn("rounded-xl border bg-card p-5 shadow-sm", className),
27
+ ...props,
28
+ children: [
29
+ /* @__PURE__ */ jsx("header", { className: "mb-4 flex items-baseline justify-between gap-3", children: /* @__PURE__ */ jsxs("div", { children: [
30
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: "Environment variables" }),
31
+ /* @__PURE__ */ jsxs("p", { className: "text-body-sm text-muted-foreground", children: [
32
+ vars.length,
33
+ " ",
34
+ vars.length === 1 ? "variable" : "variables"
35
+ ] })
36
+ ] }) }),
37
+ onAdd ? /* @__PURE__ */ jsxs(
38
+ "form",
39
+ {
40
+ className: "mb-4 grid grid-cols-[2fr_3fr_auto_auto] gap-2",
41
+ onSubmit: (e) => {
42
+ e.preventDefault();
43
+ submit();
44
+ },
45
+ children: [
46
+ /* @__PURE__ */ jsx(
47
+ Input,
48
+ {
49
+ placeholder: "DATABASE_URL",
50
+ value: newKey,
51
+ onChange: (e) => setNewKey(e.target.value),
52
+ className: "font-mono",
53
+ "aria-label": "Variable name"
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsx(
57
+ Input,
58
+ {
59
+ placeholder: "postgresql://\u2026",
60
+ value: newValue,
61
+ onChange: (e) => setNewValue(e.target.value),
62
+ className: "font-mono",
63
+ "aria-label": "Variable value"
64
+ }
65
+ ),
66
+ /* @__PURE__ */ jsx(
67
+ "select",
68
+ {
69
+ value: newScope,
70
+ onChange: (e) => setNewScope(e.target.value),
71
+ "aria-label": "Variable scope",
72
+ className: cn(
73
+ "h-10 rounded-md border border-input bg-card px-3",
74
+ "font-sans text-body-sm",
75
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card"
76
+ ),
77
+ children: scopeOptions.map((s) => /* @__PURE__ */ jsx("option", { value: s, children: s }, s))
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsxs(Button, { type: "submit", children: [
81
+ /* @__PURE__ */ jsx(Plus, {}),
82
+ " Add"
83
+ ] })
84
+ ]
85
+ }
86
+ ) : null,
87
+ /* @__PURE__ */ jsxs("ul", { className: "divide-y divide-border/30", children: [
88
+ vars.map((v) => /* @__PURE__ */ jsx(Row, { entry: v, ...onRemove ? { onRemove } : {} }, v.id)),
89
+ vars.length === 0 ? /* @__PURE__ */ jsx("li", { className: "py-8 text-center text-body-sm text-muted-foreground", children: "No environment variables yet." }) : null
90
+ ] })
91
+ ]
92
+ }
93
+ );
94
+ }
95
+ );
96
+ EnvVarEditor.displayName = "EnvVarEditor";
97
+ function Row({ entry, onRemove }) {
98
+ const [revealed, setRevealed] = useState(!entry.masked);
99
+ const value = revealed ? entry.value : "\u2022".repeat(Math.min(entry.value.length, 12) || 8);
100
+ const copy = () => {
101
+ if (typeof navigator !== "undefined" && navigator.clipboard) {
102
+ navigator.clipboard.writeText(entry.value).catch((err) => {
103
+ if (typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
104
+ console.warn("[@usetheo/ui] EnvVarEditor clipboard write failed:", err);
105
+ }
106
+ });
107
+ }
108
+ };
109
+ return /* @__PURE__ */ jsxs("li", { className: "grid grid-cols-[2fr_3fr_auto_auto] items-center gap-3 py-3", children: [
110
+ /* @__PURE__ */ jsx("span", { className: "truncate font-mono text-code-sm text-foreground", children: entry.key }),
111
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2 truncate font-mono text-code-sm text-muted-foreground", children: [
112
+ entry.readonly ? /* @__PURE__ */ jsx(Lock, { className: "size-3", "aria-hidden": "true" }) : null,
113
+ value
114
+ ] }),
115
+ /* @__PURE__ */ jsx(BadgeWithDot, { variant: entry.scope === "production" ? "primary" : "default", children: entry.scope ?? "all" }),
116
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-0.5", children: [
117
+ entry.masked ? /* @__PURE__ */ jsx(
118
+ Button,
119
+ {
120
+ size: "icon",
121
+ variant: "ghost",
122
+ onClick: () => setRevealed((r) => !r),
123
+ "aria-label": revealed ? "Hide value" : "Reveal value",
124
+ children: revealed ? /* @__PURE__ */ jsx(EyeOff, {}) : /* @__PURE__ */ jsx(Eye, {})
125
+ }
126
+ ) : null,
127
+ /* @__PURE__ */ jsx(Button, { size: "icon", variant: "ghost", onClick: copy, "aria-label": "Copy value", children: /* @__PURE__ */ jsx(Copy, {}) }),
128
+ onRemove && !entry.readonly ? /* @__PURE__ */ jsx(
129
+ Button,
130
+ {
131
+ size: "icon",
132
+ variant: "ghost",
133
+ onClick: () => onRemove(entry.id),
134
+ "aria-label": `Remove ${entry.key}`,
135
+ children: /* @__PURE__ */ jsx(Trash2, {})
136
+ }
137
+ ) : null
138
+ ] })
139
+ ] });
140
+ }
141
+
142
+ export { EnvVarEditor };
143
+ //# sourceMappingURL=chunk-WVPDQMC2.js.map
144
+ //# sourceMappingURL=chunk-WVPDQMC2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/composites/env-var-editor/env-var-editor.tsx"],"names":[],"mappings":"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","file":"chunk-WVPDQMC2.js","sourcesContent":["import { Copy, Eye, EyeOff, Lock, Plus, Trash2 } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Badge } from \"../../primitives/badge/index.js\";\nimport { Button } from \"../../primitives/button/index.js\";\nimport { Input } from \"../../primitives/input/index.js\";\n\nexport type EnvScope = \"production\" | \"staging\" | \"preview\" | \"all\" | string;\n\nexport interface EnvVar {\n id: string;\n key: string;\n /**\n * Secret value. If `masked` is true, value is hidden by default.\n */\n value: string;\n masked?: boolean;\n scope?: EnvScope;\n /**\n * Read-only marker (e.g. system-managed vars like THEO_DEPLOY_ID).\n */\n readonly?: boolean;\n}\n\ninterface EnvVarEditorProps extends HTMLAttributes<HTMLDivElement> {\n vars: EnvVar[];\n onAdd?: (entry: Omit<EnvVar, \"id\">) => void;\n onRemove?: (id: string) => void;\n /**\n * Available scope options for the add form. Defaults to a sensible PaaS set.\n */\n scopeOptions?: EnvScope[];\n}\n\nconst DEFAULT_SCOPES: EnvScope[] = [\"production\", \"staging\", \"preview\", \"all\"];\n\n/**\n * EnvVarEditor — table-like editor for environment variables.\n *\n * Mono font on keys/values, mask toggle on secret values, scope badge,\n * remove + copy actions. Add form sits above the list.\n *\n * Stateless: caller controls the list and reacts to onAdd / onRemove.\n */\nconst EnvVarEditor = forwardRef<HTMLDivElement, EnvVarEditorProps>(\n ({ className, vars, onAdd, onRemove, scopeOptions = DEFAULT_SCOPES, ...props }, ref) => {\n const [newKey, setNewKey] = useState(\"\");\n const [newValue, setNewValue] = useState(\"\");\n const [newScope, setNewScope] = useState<EnvScope>(scopeOptions[0] ?? \"production\");\n\n const submit = () => {\n const trimmedKey = newKey.trim();\n if (!trimmedKey) return;\n onAdd?.({ key: trimmedKey, value: newValue, scope: newScope, masked: true });\n setNewKey(\"\");\n setNewValue(\"\");\n };\n\n return (\n <div\n ref={ref}\n className={cn(\"rounded-xl border bg-card p-5 shadow-sm\", className)}\n {...props}\n >\n <header className=\"mb-4 flex items-baseline justify-between gap-3\">\n <div>\n <h3 className=\"font-display text-title-md tracking-tight\">Environment variables</h3>\n <p className=\"text-body-sm text-muted-foreground\">\n {vars.length} {vars.length === 1 ? \"variable\" : \"variables\"}\n </p>\n </div>\n </header>\n\n {onAdd ? (\n <form\n className=\"mb-4 grid grid-cols-[2fr_3fr_auto_auto] gap-2\"\n onSubmit={(e) => {\n e.preventDefault();\n submit();\n }}\n >\n <Input\n placeholder=\"DATABASE_URL\"\n value={newKey}\n onChange={(e) => setNewKey(e.target.value)}\n className=\"font-mono\"\n aria-label=\"Variable name\"\n />\n <Input\n placeholder=\"postgresql://…\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n className=\"font-mono\"\n aria-label=\"Variable value\"\n />\n <select\n value={newScope}\n onChange={(e) => setNewScope(e.target.value)}\n aria-label=\"Variable scope\"\n className={cn(\n \"h-10 rounded-md border border-input bg-card px-3\",\n \"font-sans text-body-sm\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n )}\n >\n {scopeOptions.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n <Button type=\"submit\">\n <Plus /> Add\n </Button>\n </form>\n ) : null}\n\n <ul className=\"divide-y divide-border/30\">\n {vars.map((v) => (\n <Row key={v.id} entry={v} {...(onRemove ? { onRemove } : {})} />\n ))}\n {vars.length === 0 ? (\n <li className=\"py-8 text-center text-body-sm text-muted-foreground\">\n No environment variables yet.\n </li>\n ) : null}\n </ul>\n </div>\n );\n },\n);\nEnvVarEditor.displayName = \"EnvVarEditor\";\n\ninterface RowProps {\n entry: EnvVar;\n onRemove?: (id: string) => void;\n}\n\nfunction Row({ entry, onRemove }: RowProps) {\n const [revealed, setRevealed] = useState(!entry.masked);\n\n const value = revealed ? entry.value : \"•\".repeat(Math.min(entry.value.length, 12) || 8);\n\n const copy = () => {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(entry.value).catch((err: unknown) => {\n // T7.6: dev-only warning so engineers see something when clipboard\n // fails (Safari/Firefox iframe sandbox, document not focused,\n // Permissions-Policy block). Production stays silent — behavior is\n // fail-safe (user can still copy manually).\n if (typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\") {\n // biome-ignore lint/suspicious/noConsole: dev-only clipboard diagnostic (T7.6)\n console.warn(\"[@usetheo/ui] EnvVarEditor clipboard write failed:\", err);\n }\n });\n }\n };\n\n return (\n <li className=\"grid grid-cols-[2fr_3fr_auto_auto] items-center gap-3 py-3\">\n <span className=\"truncate font-mono text-code-sm text-foreground\">{entry.key}</span>\n <span className=\"flex items-center gap-2 truncate font-mono text-code-sm text-muted-foreground\">\n {entry.readonly ? <Lock className=\"size-3\" aria-hidden=\"true\" /> : null}\n {value}\n </span>\n <Badge variant={entry.scope === \"production\" ? \"primary\" : \"default\"}>\n {entry.scope ?? \"all\"}\n </Badge>\n <div className=\"flex items-center gap-0.5\">\n {entry.masked ? (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => setRevealed((r) => !r)}\n aria-label={revealed ? \"Hide value\" : \"Reveal value\"}\n >\n {revealed ? <EyeOff /> : <Eye />}\n </Button>\n ) : null}\n <Button size=\"icon\" variant=\"ghost\" onClick={copy} aria-label=\"Copy value\">\n <Copy />\n </Button>\n {onRemove && !entry.readonly ? (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onRemove(entry.id)}\n aria-label={`Remove ${entry.key}`}\n >\n <Trash2 />\n </Button>\n ) : null}\n </div>\n </li>\n );\n}\n\nexport { EnvVarEditor };\n"]}
@@ -0,0 +1,43 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { cva } from 'class-variance-authority';
3
+ import { forwardRef } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var textareaVariants = cva(
7
+ [
8
+ "flex w-full resize-y rounded-md border border-input bg-card",
9
+ "text-foreground placeholder:text-muted-foreground",
10
+ "transition-[box-shadow,border-color] 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
+ "focus-visible:border-primary",
13
+ "disabled:cursor-not-allowed disabled:opacity-50"
14
+ ],
15
+ {
16
+ variants: {
17
+ size: {
18
+ sm: "min-h-[64px] px-2.5 py-1.5 text-body-sm",
19
+ // md: text scale + padding tighten to body-sm per FAANG density.
20
+ // min-h stays 96px because multiline has its own height rationale.
21
+ md: "min-h-[6rem] px-[var(--theo-control-px,0.875rem)] py-1.5 text-body-sm",
22
+ lg: "min-h-[128px] px-4 py-2.5 text-body-md"
23
+ }
24
+ },
25
+ defaultVariants: { size: "md" }
26
+ }
27
+ );
28
+ var Textarea = forwardRef(
29
+ ({ className, rows = 3, size, ...props }, ref) => /* @__PURE__ */ jsx(
30
+ "textarea",
31
+ {
32
+ ref,
33
+ rows,
34
+ className: cn(textareaVariants({ size }), className),
35
+ ...props
36
+ }
37
+ )
38
+ );
39
+ Textarea.displayName = "Textarea";
40
+
41
+ export { Textarea };
42
+ //# sourceMappingURL=chunk-WWNH5ENT.js.map
43
+ //# sourceMappingURL=chunk-WWNH5ENT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/textarea/textarea.tsx"],"names":[],"mappings":";;;;;AAgBA,IAAM,gBAAA,GAAmB,GAAA;AAAA,EACvB;AAAA,IACE,6DAAA;AAAA,IACA,mDAAA;AAAA,IACA,kEAAA;AAAA,IACA,0IAAA;AAAA,IACA,8BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,yCAAA;AAAA;AAAA;AAAA,QAGJ,EAAA,EAAI,uEAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAAK;AAElC,CAAA;AAMA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,GAAG,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxC,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAW,EAAA,CAAG,gBAAA,CAAiB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-WWNH5ENT.js","sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Textarea — multi-line input mirror of Input.\n *\n * Matches Input visuals (violet focus ring, --input border, --card bg).\n * The `size` prop accepts `\"sm\" | \"md\" | \"lg\"`. Default `md` preserves the\n * 80px (5rem) min-height + body-md text from before this prop existed.\n *\n * Note: `TextareaHTMLAttributes<HTMLTextAreaElement>` does NOT declare a\n * native `size` attribute (textareas use `rows` / `cols`), so no Omit is\n * needed — contrast with `<Input>` which had EC-1 collision.\n */\nconst textareaVariants = cva(\n [\n \"flex w-full resize-y rounded-md border border-input bg-card\",\n \"text-foreground placeholder:text-muted-foreground\",\n \"transition-[box-shadow,border-color] 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 \"focus-visible:border-primary\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"min-h-[64px] px-2.5 py-1.5 text-body-sm\",\n // md: text scale + padding tighten to body-sm per FAANG density.\n // min-h stays 96px because multiline has its own height rationale.\n md: \"min-h-[6rem] px-[var(--theo-control-px,0.875rem)] py-1.5 text-body-sm\",\n lg: \"min-h-[128px] px-4 py-2.5 text-body-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement>,\n VariantProps<typeof textareaVariants> {}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, rows = 3, size, ...props }, ref) => (\n <textarea\n ref={ref}\n rows={rows}\n className={cn(textareaVariants({ size }), className)}\n {...props}\n />\n ),\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea, textareaVariants };\n"]}