@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,51 @@
1
+ import { useInLiveRegion } from './chunk-UGKI466V.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { AlertOctagon, Network, KeyRound, ShieldOff, Database } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var ICON_FOR_KIND = {
8
+ "rate-limit": Database,
9
+ "context-overflow": ShieldOff,
10
+ auth: KeyRound,
11
+ "tool-failure": AlertOctagon,
12
+ network: Network,
13
+ generic: AlertOctagon
14
+ };
15
+ var AgentErrorCard = forwardRef(
16
+ ({ className, kind = "generic", title, detail, actions, timestamp, ...props }, ref) => {
17
+ const Icon = ICON_FOR_KIND[kind];
18
+ const inLiveRegion = useInLiveRegion();
19
+ return /* @__PURE__ */ jsxs(
20
+ "section",
21
+ {
22
+ ref,
23
+ role: "alert",
24
+ "aria-live": inLiveRegion ? void 0 : "assertive",
25
+ className: cn(
26
+ "grid w-full gap-3 rounded-xl border border-destructive/40 bg-destructive/5 p-4",
27
+ className
28
+ ),
29
+ ...props,
30
+ children: [
31
+ /* @__PURE__ */ jsxs("header", { className: "flex items-start gap-3", children: [
32
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 inline-flex shrink-0 text-destructive", "aria-hidden": "true", children: /* @__PURE__ */ jsx(Icon, { className: "size-4" }) }),
33
+ /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 flex-1 gap-1", children: [
34
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
35
+ /* @__PURE__ */ jsx("h4", { className: "font-display text-foreground text-title-md tracking-tight", children: title }),
36
+ timestamp ? /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-label text-muted-foreground tabular-nums", children: timestamp }) : null
37
+ ] }),
38
+ detail ? /* @__PURE__ */ jsx("p", { className: "break-words font-mono text-code-sm text-muted-foreground", children: detail }) : null
39
+ ] })
40
+ ] }),
41
+ actions ? /* @__PURE__ */ jsx("footer", { className: "flex flex-wrap items-center justify-end gap-2", children: actions }) : null
42
+ ]
43
+ }
44
+ );
45
+ }
46
+ );
47
+ AgentErrorCard.displayName = "AgentErrorCard";
48
+
49
+ export { AgentErrorCard };
50
+ //# sourceMappingURL=chunk-HGPBGLNP.js.map
51
+ //# sourceMappingURL=chunk-HGPBGLNP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/agent-error-card/agent-error-card.tsx"],"names":[],"mappings":";;;;;;AA8BA,IAAM,aAAA,GAAoD;AAAA,EACxD,YAAA,EAAc,QAAA;AAAA,EACd,kBAAA,EAAoB,SAAA;AAAA,EACpB,IAAA,EAAM,QAAA;AAAA,EACN,cAAA,EAAgB,YAAA;AAAA,EAChB,OAAA,EAAS,OAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA;AAWA,IAAM,cAAA,GAAiB,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AACrF,IAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAK/B,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,uBACE,IAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAW,eAAe,MAAA,GAAY,WAAA;AAAA,QACtC,SAAA,EAAW,EAAA;AAAA,UACT,gFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,QAAA,EAAA,EAAO,WAAU,wBAAA,EAChB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8CAAA,EAA+C,aAAA,EAAY,QACzE,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,EAC3B,CAAA;AAAA,4BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,8BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2CAAA,EACb,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2DAAA,EAA6D,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,gBAChF,4BACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kEAAA,EACb,qBACH,CAAA,GACE;AAAA,eAAA,EACN,CAAA;AAAA,cACC,yBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0DAAA,EAA4D,kBAAO,CAAA,GAC9E;AAAA,aAAA,EACN;AAAA,WAAA,EACF,CAAA;AAAA,UACC,0BACC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,+CAAA,EAAiD,mBAAQ,CAAA,GACzE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"chunk-HGPBGLNP.js","sourcesContent":["import {\n AlertOctagon,\n Database,\n KeyRound,\n type LucideIcon,\n Network,\n ShieldOff,\n} from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { useInLiveRegion } from \"../../../lib/live-region-context.js\";\n\n/**\n * AgentErrorCard — inline error / blocked-state card for an agent stream.\n *\n * Renders when the agent run hits a wall it can't recover from on its own:\n * rate limit, context overflow, auth lost, tool failure, network error.\n * Severity is always destructive; the `kind` drives the icon and helps the\n * consumer wire recovery actions in the footer slot.\n */\n\nexport type AgentErrorKind =\n | \"rate-limit\"\n | \"context-overflow\"\n | \"auth\"\n | \"tool-failure\"\n | \"network\"\n | \"generic\";\n\nconst ICON_FOR_KIND: Record<AgentErrorKind, LucideIcon> = {\n \"rate-limit\": Database,\n \"context-overflow\": ShieldOff,\n auth: KeyRound,\n \"tool-failure\": AlertOctagon,\n network: Network,\n generic: AlertOctagon,\n};\n\ninterface AgentErrorCardProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n kind?: AgentErrorKind;\n title: ReactNode;\n detail?: ReactNode;\n /** Recovery action slot (Retry, Reset, Re-auth, etc.). */\n actions?: ReactNode;\n timestamp?: ReactNode;\n}\n\nconst AgentErrorCard = forwardRef<HTMLElement, AgentErrorCardProps>(\n ({ className, kind = \"generic\", title, detail, actions, timestamp, ...props }, ref) => {\n const Icon = ICON_FOR_KIND[kind];\n // T4.1 (MF-4): omit own aria-live when nested in a container live region.\n // role=\"alert\" stays — alerts should announce even via outer region —\n // but we drop the explicit aria-live=\"assertive\" attribute so AT doesn't\n // see two competing live region declarations.\n const inLiveRegion = useInLiveRegion();\n return (\n <section\n ref={ref}\n role=\"alert\"\n aria-live={inLiveRegion ? undefined : \"assertive\"}\n className={cn(\n \"grid w-full gap-3 rounded-xl border border-destructive/40 bg-destructive/5 p-4\",\n className,\n )}\n {...props}\n >\n <header className=\"flex items-start gap-3\">\n <span className=\"mt-0.5 inline-flex shrink-0 text-destructive\" aria-hidden=\"true\">\n <Icon className=\"size-4\" />\n </span>\n <div className=\"grid min-w-0 flex-1 gap-1\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <h4 className=\"font-display text-foreground text-title-md tracking-tight\">{title}</h4>\n {timestamp ? (\n <span className=\"shrink-0 font-mono text-label text-muted-foreground tabular-nums\">\n {timestamp}\n </span>\n ) : null}\n </div>\n {detail ? (\n <p className=\"break-words font-mono text-code-sm text-muted-foreground\">{detail}</p>\n ) : null}\n </div>\n </header>\n {actions ? (\n <footer className=\"flex flex-wrap items-center justify-end gap-2\">{actions}</footer>\n ) : null}\n </section>\n );\n },\n);\nAgentErrorCard.displayName = \"AgentErrorCard\";\n\nexport { AgentErrorCard };\n"]}
@@ -0,0 +1,141 @@
1
+ import { Button } from './chunk-57NXT3OX.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { Paperclip, Mic, Square, Send } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var defaultPlaceholder = {
8
+ chat: "How can I help you today?",
9
+ code: "Type / for commands",
10
+ infra: "Ask about deploys, metrics, env, or rollback\u2026"
11
+ };
12
+ var defaultTextareaLabel = {
13
+ chat: "Chat message",
14
+ code: "Code prompt",
15
+ infra: "Infra command"
16
+ };
17
+ var ChatComposer = forwardRef(
18
+ ({
19
+ className,
20
+ mode = "chat",
21
+ value,
22
+ onValueChange,
23
+ onSubmit,
24
+ running = false,
25
+ onStop,
26
+ contextSlot,
27
+ attachmentsSlot,
28
+ leadingActions,
29
+ trailingActions,
30
+ onAttach,
31
+ onVoiceInput,
32
+ textareaLabel,
33
+ placeholder,
34
+ textareaProps,
35
+ ...props
36
+ }, ref) => {
37
+ const handleSubmit = (e) => {
38
+ e.preventDefault();
39
+ if (running) return;
40
+ if (!value.trim()) return;
41
+ onSubmit?.(value);
42
+ };
43
+ const onKeyDown = (e) => {
44
+ if (e.key === "Enter" && !e.shiftKey) {
45
+ e.preventDefault();
46
+ if (running) return;
47
+ if (!value.trim()) return;
48
+ onSubmit?.(value);
49
+ }
50
+ };
51
+ const isCode = mode === "code";
52
+ return /* @__PURE__ */ jsxs(
53
+ "form",
54
+ {
55
+ ref,
56
+ onSubmit: handleSubmit,
57
+ className: cn(
58
+ "rounded-2xl border bg-card text-card-foreground transition-shadow",
59
+ "focus-within:border-primary/60 focus-within:shadow-glow",
60
+ isCode && "rounded-xl shadow-sm",
61
+ className
62
+ ),
63
+ ...props,
64
+ children: [
65
+ contextSlot ? /* @__PURE__ */ jsx("div", { className: "border-border/40 border-b px-3 pt-3", children: contextSlot }) : null,
66
+ attachmentsSlot ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 px-4 pt-3", children: attachmentsSlot }) : null,
67
+ /* @__PURE__ */ jsx(
68
+ "textarea",
69
+ {
70
+ value,
71
+ onChange: (e) => onValueChange(e.target.value),
72
+ onKeyDown,
73
+ placeholder: placeholder ?? defaultPlaceholder[mode],
74
+ "aria-label": textareaLabel ?? defaultTextareaLabel[mode],
75
+ rows: isCode ? 1 : 2,
76
+ ...textareaProps,
77
+ className: cn(
78
+ "w-full resize-none bg-transparent px-4 py-3",
79
+ "placeholder:text-muted-foreground",
80
+ "focus:outline-none",
81
+ isCode ? "font-mono text-code-md" : "min-h-[3.5rem] font-sans text-body-md",
82
+ textareaProps?.className
83
+ )
84
+ }
85
+ ),
86
+ /* @__PURE__ */ jsxs(
87
+ "div",
88
+ {
89
+ className: cn(
90
+ "flex items-center justify-between gap-2 border-border/40 border-t px-3 py-2"
91
+ ),
92
+ children: [
93
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", children: leadingActions !== void 0 ? leadingActions : onAttach ? /* @__PURE__ */ jsx(
94
+ Button,
95
+ {
96
+ size: "icon",
97
+ variant: "ghost",
98
+ type: "button",
99
+ onClick: onAttach,
100
+ "aria-label": "Attach file",
101
+ children: /* @__PURE__ */ jsx(Paperclip, {})
102
+ }
103
+ ) : null }),
104
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
105
+ trailingActions,
106
+ onVoiceInput ? /* @__PURE__ */ jsx(
107
+ Button,
108
+ {
109
+ size: "icon",
110
+ variant: "ghost",
111
+ type: "button",
112
+ onClick: onVoiceInput,
113
+ "aria-label": "Voice input",
114
+ children: /* @__PURE__ */ jsx(Mic, {})
115
+ }
116
+ ) : null,
117
+ running ? /* @__PURE__ */ jsx(
118
+ Button,
119
+ {
120
+ type: "button",
121
+ onClick: onStop,
122
+ size: "icon",
123
+ variant: "destructive",
124
+ "aria-label": "Stop generation",
125
+ children: /* @__PURE__ */ jsx(Square, {})
126
+ }
127
+ ) : /* @__PURE__ */ jsx(Button, { type: "submit", size: "icon", disabled: !value.trim(), "aria-label": "Send message", children: /* @__PURE__ */ jsx(Send, {}) })
128
+ ] })
129
+ ]
130
+ }
131
+ )
132
+ ]
133
+ }
134
+ );
135
+ }
136
+ );
137
+ ChatComposer.displayName = "ChatComposer";
138
+
139
+ export { ChatComposer };
140
+ //# sourceMappingURL=chunk-HQFTW7SF.js.map
141
+ //# sourceMappingURL=chunk-HQFTW7SF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/composites/chat-composer/chat-composer.tsx"],"names":[],"mappings":"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","file":"chunk-HQFTW7SF.js","sourcesContent":["import { Mic, Paperclip, Send, Square } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type {\n FormEvent,\n HTMLAttributes,\n KeyboardEvent,\n ReactNode,\n TextareaHTMLAttributes,\n} from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Button } from \"../../primitives/button/index.js\";\n\nexport type ComposerMode = \"chat\" | \"code\" | \"infra\";\n\ninterface ChatComposerProps extends Omit<HTMLAttributes<HTMLFormElement>, \"onSubmit\"> {\n mode?: ComposerMode;\n value: string;\n onValueChange: (next: string) => void;\n onSubmit?: (value: string) => void;\n /**\n * If true, the composer is in \"agent running\" state — Send becomes a Stop button.\n */\n running?: boolean;\n onStop?: () => void;\n /**\n * Slot above the textarea — used for the folder selector in Infra mode.\n */\n contextSlot?: ReactNode;\n /**\n * Slot above the textarea for attachments / chips.\n */\n attachmentsSlot?: ReactNode;\n /**\n * Slot on the bottom-left of the action row (e.g. custom toggles).\n * Overrides the default attach button entirely when provided.\n */\n leadingActions?: ReactNode;\n /**\n * Slot on the bottom-right (e.g. model selector). Send/stop is appended after this.\n */\n trailingActions?: ReactNode;\n /**\n * Optional attach-file callback. If omitted (and `leadingActions` is also\n * omitted), no attach button is rendered. This avoids fake affordances per\n * Quality Gate §7.\n */\n onAttach?: () => void;\n /**\n * Optional voice-input callback. If omitted, no mic button is rendered.\n * Same rationale as `onAttach`.\n */\n onVoiceInput?: () => void;\n /**\n * Accessible label for the textarea. Falls back to a mode-aware default.\n */\n textareaLabel?: string;\n /**\n * Textarea placeholder. Defaults change by mode.\n */\n placeholder?: string;\n /**\n * Extra textarea props (rows, maxLength…).\n */\n textareaProps?: Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, \"value\" | \"onChange\">;\n}\n\nconst defaultPlaceholder: Record<ComposerMode, string> = {\n chat: \"How can I help you today?\",\n code: \"Type / for commands\",\n infra: \"Ask about deploys, metrics, env, or rollback…\",\n};\n\nconst defaultTextareaLabel: Record<ComposerMode, string> = {\n chat: \"Chat message\",\n code: \"Code prompt\",\n infra: \"Infra command\",\n};\n\n/**\n * ChatComposer — message input area, shared by Chat / Code / Infra modes.\n *\n * Visual:\n * - chat / infra → soft card with violet ring on focus, generous padding\n * - code → compact dense form with mono font, slash prefix hint\n *\n * Stateless: caller controls `value` + handles `onSubmit`. Submit fires on Enter\n * (without Shift). Shift+Enter inserts a newline.\n *\n * Optional affordances (mic, attach) are opt-in via `onVoiceInput` / `onAttach`\n * — Quality Gate §7 forbids rendering fake controls without behavior.\n */\nconst ChatComposer = forwardRef<HTMLFormElement, ChatComposerProps>(\n (\n {\n className,\n mode = \"chat\",\n value,\n onValueChange,\n onSubmit,\n running = false,\n onStop,\n contextSlot,\n attachmentsSlot,\n leadingActions,\n trailingActions,\n onAttach,\n onVoiceInput,\n textareaLabel,\n placeholder,\n textareaProps,\n ...props\n },\n ref,\n ) => {\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n if (running) return;\n if (!value.trim()) return;\n onSubmit?.(value);\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (running) return;\n if (!value.trim()) return;\n onSubmit?.(value);\n }\n };\n\n const isCode = mode === \"code\";\n\n return (\n <form\n ref={ref}\n onSubmit={handleSubmit}\n className={cn(\n \"rounded-2xl border bg-card text-card-foreground transition-shadow\",\n \"focus-within:border-primary/60 focus-within:shadow-glow\",\n isCode && \"rounded-xl shadow-sm\",\n className,\n )}\n {...props}\n >\n {contextSlot ? (\n <div className=\"border-border/40 border-b px-3 pt-3\">{contextSlot}</div>\n ) : null}\n\n {attachmentsSlot ? (\n <div className=\"flex flex-wrap gap-2 px-4 pt-3\">{attachmentsSlot}</div>\n ) : null}\n\n <textarea\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder ?? defaultPlaceholder[mode]}\n aria-label={textareaLabel ?? defaultTextareaLabel[mode]}\n rows={isCode ? 1 : 2}\n {...textareaProps}\n className={cn(\n \"w-full resize-none bg-transparent px-4 py-3\",\n \"placeholder:text-muted-foreground\",\n \"focus:outline-none\",\n isCode ? \"font-mono text-code-md\" : \"min-h-[3.5rem] font-sans text-body-md\",\n textareaProps?.className,\n )}\n />\n\n <div\n className={cn(\n \"flex items-center justify-between gap-2 border-border/40 border-t px-3 py-2\",\n )}\n >\n <div className=\"flex items-center gap-1\">\n {leadingActions !== undefined ? (\n leadingActions\n ) : onAttach ? (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n type=\"button\"\n onClick={onAttach}\n aria-label=\"Attach file\"\n >\n <Paperclip />\n </Button>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2\">\n {trailingActions}\n {onVoiceInput ? (\n <Button\n size=\"icon\"\n variant=\"ghost\"\n type=\"button\"\n onClick={onVoiceInput}\n aria-label=\"Voice input\"\n >\n <Mic />\n </Button>\n ) : null}\n {running ? (\n <Button\n type=\"button\"\n onClick={onStop}\n size=\"icon\"\n variant=\"destructive\"\n aria-label=\"Stop generation\"\n >\n <Square />\n </Button>\n ) : (\n <Button type=\"submit\" size=\"icon\" disabled={!value.trim()} aria-label=\"Send message\">\n <Send />\n </Button>\n )}\n </div>\n </div>\n </form>\n );\n },\n);\nChatComposer.displayName = \"ChatComposer\";\n\nexport { ChatComposer };\n"]}
@@ -0,0 +1,170 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as ToastPrimitive from '@radix-ui/react-toast';
3
+ import { cva } from 'class-variance-authority';
4
+ import { X, AlertCircle, TriangleAlert, CheckCircle2, Info } from 'lucide-react';
5
+ import { forwardRef, createContext, useState, useCallback, useMemo, useContext } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var toastVariants = cva(
9
+ [
10
+ "group pointer-events-auto relative flex w-full items-start gap-3 overflow-hidden rounded-lg border pr-10 shadow-md",
11
+ "data-[state=open]:slide-in-from-top-full data-[state=open]:fade-in-0 data-[state=open]:animate-in",
12
+ "data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=closed]:animate-out",
13
+ "data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)]",
14
+ "data-[swipe=end]:animate-out data-[swipe=cancel]:transition-[transform_var(--duration-base)] data-[swipe=move]:transition-none"
15
+ ],
16
+ {
17
+ variants: {
18
+ variant: {
19
+ default: "border-border/40 bg-popover text-popover-foreground",
20
+ info: "border-primary/40 bg-popover text-popover-foreground",
21
+ success: "border-success/40 bg-popover text-popover-foreground",
22
+ warning: "border-warning/40 bg-popover text-popover-foreground",
23
+ destructive: "border-destructive/50 bg-popover text-popover-foreground"
24
+ },
25
+ size: {
26
+ sm: "p-3 text-body-sm",
27
+ md: "p-4 text-body-md",
28
+ lg: "p-5 text-body-lg"
29
+ }
30
+ },
31
+ defaultVariants: { variant: "default", size: "md" }
32
+ }
33
+ );
34
+ var iconForVariant = {
35
+ default: /* @__PURE__ */ jsx(Info, { className: "size-4 shrink-0 text-muted-foreground", "aria-hidden": "true" }),
36
+ info: /* @__PURE__ */ jsx(Info, { className: "size-4 shrink-0 text-primary", "aria-hidden": "true" }),
37
+ success: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4 shrink-0 text-success", "aria-hidden": "true" }),
38
+ warning: /* @__PURE__ */ jsx(TriangleAlert, { className: "size-4 shrink-0 text-warning", "aria-hidden": "true" }),
39
+ destructive: /* @__PURE__ */ jsx(AlertCircle, { className: "size-4 shrink-0 text-destructive", "aria-hidden": "true" })
40
+ };
41
+ var ToastRoot = forwardRef(
42
+ ({ className, variant = "default", size, children, ...props }, ref) => /* @__PURE__ */ jsxs(
43
+ ToastPrimitive.Root,
44
+ {
45
+ ref,
46
+ className: cn(toastVariants({ variant, size }), className),
47
+ ...props,
48
+ children: [
49
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: iconForVariant[variant] }),
50
+ /* @__PURE__ */ jsx("div", { className: "min-w-0 flex-1", children })
51
+ ]
52
+ }
53
+ )
54
+ );
55
+ ToastRoot.displayName = "Toast";
56
+ var ToastTitle = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
57
+ ToastPrimitive.Title,
58
+ {
59
+ ref,
60
+ className: cn("font-medium text-body-sm text-foreground", className),
61
+ ...props
62
+ }
63
+ ));
64
+ ToastTitle.displayName = "Toast.Title";
65
+ var ToastDescription = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
66
+ ToastPrimitive.Description,
67
+ {
68
+ ref,
69
+ className: cn("mt-0.5 text-body-sm text-muted-foreground", className),
70
+ ...props
71
+ }
72
+ ));
73
+ ToastDescription.displayName = "Toast.Description";
74
+ var ToastClose = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
75
+ ToastPrimitive.Close,
76
+ {
77
+ ref,
78
+ className: cn(
79
+ "absolute top-2 right-2 rounded-md p-1 text-muted-foreground opacity-70 transition-opacity hover:opacity-100",
80
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
81
+ className
82
+ ),
83
+ "toast-close": "",
84
+ ...props,
85
+ children: [
86
+ /* @__PURE__ */ jsx(X, { className: "size-3.5" }),
87
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
88
+ ]
89
+ }
90
+ ));
91
+ ToastClose.displayName = "Toast.Close";
92
+ var ToastAction = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
93
+ ToastPrimitive.Action,
94
+ {
95
+ ref,
96
+ className: cn(
97
+ "mt-2 inline-flex h-7 items-center rounded-md border border-border/60 bg-card px-2 font-sans text-foreground text-label",
98
+ "transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
99
+ className
100
+ ),
101
+ ...props
102
+ }
103
+ ));
104
+ ToastAction.displayName = "Toast.Action";
105
+ var Toast = /* @__PURE__ */ Object.assign(ToastRoot, {
106
+ Title: ToastTitle,
107
+ Description: ToastDescription,
108
+ Close: ToastClose,
109
+ Action: ToastAction,
110
+ Provider: ToastPrimitive.Provider,
111
+ Viewport: ToastPrimitive.Viewport
112
+ });
113
+ var ToastContext = createContext(void 0);
114
+ var POSITION_CLASS = {
115
+ "top-right": "top-4 right-4",
116
+ "top-left": "top-4 left-4",
117
+ "bottom-right": "bottom-4 right-4",
118
+ "bottom-left": "bottom-4 left-4"
119
+ };
120
+ function Toaster({ children, position = "bottom-right", className }) {
121
+ const [toasts, setToasts] = useState([]);
122
+ const dismiss = useCallback((id) => {
123
+ setToasts((cur) => cur.filter((t) => t.id !== id));
124
+ }, []);
125
+ const toast = useCallback((descriptor) => {
126
+ const id = `t-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
127
+ setToasts((cur) => [...cur, { id, ...descriptor }]);
128
+ return id;
129
+ }, []);
130
+ const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);
131
+ return /* @__PURE__ */ jsx(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs(Toast.Provider, { swipeDirection: "right", duration: 5e3, children: [
132
+ children,
133
+ toasts.map((t) => /* @__PURE__ */ jsxs(
134
+ Toast,
135
+ {
136
+ variant: t.variant ?? "default",
137
+ duration: t.duration === null ? Number.POSITIVE_INFINITY : t.duration ?? 5e3,
138
+ onOpenChange: (open) => {
139
+ if (!open) dismiss(t.id);
140
+ },
141
+ children: [
142
+ t.title ? /* @__PURE__ */ jsx(Toast.Title, { children: t.title }) : null,
143
+ t.description ? /* @__PURE__ */ jsx(Toast.Description, { children: t.description }) : null,
144
+ t.action ? /* @__PURE__ */ jsx(Toast.Action, { altText: String(t.action.label), onClick: t.action.onClick, children: t.action.label }) : null,
145
+ /* @__PURE__ */ jsx(Toast.Close, {})
146
+ ]
147
+ },
148
+ t.id
149
+ )),
150
+ /* @__PURE__ */ jsx(
151
+ Toast.Viewport,
152
+ {
153
+ className: cn(
154
+ "fixed z-50 flex max-h-screen w-full max-w-sm flex-col gap-2 outline-none",
155
+ POSITION_CLASS[position],
156
+ className
157
+ )
158
+ }
159
+ )
160
+ ] }) });
161
+ }
162
+ function useToast() {
163
+ const ctx = useContext(ToastContext);
164
+ if (!ctx) throw new Error("useToast must be used inside <Toaster>.");
165
+ return ctx;
166
+ }
167
+
168
+ export { Toast, Toaster, useToast };
169
+ //# sourceMappingURL=chunk-I7WYM63C.js.map
170
+ //# sourceMappingURL=chunk-I7WYM63C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/toast/toast.tsx","../src/components/primitives/toast/toaster.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-I7WYM63C.js","sourcesContent":["import * as ToastPrimitive from \"@radix-ui/react-toast\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { AlertCircle, CheckCircle2, Info, TriangleAlert, X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Toast — transient notification built on Radix Toast.\n *\n * Composition: app mounts <Toaster /> once. Components call `toast(...)` via\n * the `useToast()` hook (see toaster.tsx). The look is theme-aware: status\n * icon coloured by --primary/--success/--warning/--destructive; the body\n * card uses --popover surface.\n *\n * Variants:\n * - default (neutral)\n * - info (primary tint)\n * - success (deploy ok, action completed)\n * - warning (queued, permission requested)\n * - destructive (failed, fatal)\n */\n\nconst toastVariants = cva(\n [\n \"group pointer-events-auto relative flex w-full items-start gap-3 overflow-hidden rounded-lg border pr-10 shadow-md\",\n \"data-[state=open]:slide-in-from-top-full data-[state=open]:fade-in-0 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=closed]:animate-out\",\n \"data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)]\",\n \"data-[swipe=end]:animate-out data-[swipe=cancel]:transition-[transform_var(--duration-base)] data-[swipe=move]:transition-none\",\n ],\n {\n variants: {\n variant: {\n default: \"border-border/40 bg-popover text-popover-foreground\",\n info: \"border-primary/40 bg-popover text-popover-foreground\",\n success: \"border-success/40 bg-popover text-popover-foreground\",\n warning: \"border-warning/40 bg-popover text-popover-foreground\",\n destructive: \"border-destructive/50 bg-popover text-popover-foreground\",\n },\n size: {\n sm: \"p-3 text-body-sm\",\n md: \"p-4 text-body-md\",\n lg: \"p-5 text-body-lg\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"md\" },\n },\n);\n\nconst iconForVariant: Record<NonNullable<ToastVariant>, ReactNode> = {\n default: <Info className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />,\n info: <Info className=\"size-4 shrink-0 text-primary\" aria-hidden=\"true\" />,\n success: <CheckCircle2 className=\"size-4 shrink-0 text-success\" aria-hidden=\"true\" />,\n warning: <TriangleAlert className=\"size-4 shrink-0 text-warning\" aria-hidden=\"true\" />,\n destructive: <AlertCircle className=\"size-4 shrink-0 text-destructive\" aria-hidden=\"true\" />,\n};\n\ntype ToastVariant = NonNullable<VariantProps<typeof toastVariants>[\"variant\"]>;\n\ninterface ToastProps\n extends ComponentPropsWithoutRef<typeof ToastPrimitive.Root>,\n VariantProps<typeof toastVariants> {}\n\nconst ToastRoot = forwardRef<ElementRef<typeof ToastPrimitive.Root>, ToastProps>(\n ({ className, variant = \"default\", size, children, ...props }, ref) => (\n <ToastPrimitive.Root\n ref={ref}\n className={cn(toastVariants({ variant, size }), className)}\n {...props}\n >\n <span aria-hidden=\"true\">{iconForVariant[variant as ToastVariant]}</span>\n <div className=\"min-w-0 flex-1\">{children}</div>\n </ToastPrimitive.Root>\n ),\n);\nToastRoot.displayName = \"Toast\";\n\nconst ToastTitle = forwardRef<\n ElementRef<typeof ToastPrimitive.Title>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Title\n ref={ref}\n className={cn(\"font-medium text-body-sm text-foreground\", className)}\n {...props}\n />\n));\nToastTitle.displayName = \"Toast.Title\";\n\nconst ToastDescription = forwardRef<\n ElementRef<typeof ToastPrimitive.Description>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Description\n ref={ref}\n className={cn(\"mt-0.5 text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nToastDescription.displayName = \"Toast.Description\";\n\nconst ToastClose = forwardRef<\n ElementRef<typeof ToastPrimitive.Close>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Close>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Close\n ref={ref}\n className={cn(\n \"absolute top-2 right-2 rounded-md p-1 text-muted-foreground opacity-70 transition-opacity hover:opacity-100\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-3.5\" />\n <span className=\"sr-only\">Close</span>\n </ToastPrimitive.Close>\n));\nToastClose.displayName = \"Toast.Close\";\n\nconst ToastAction = forwardRef<\n ElementRef<typeof ToastPrimitive.Action>,\n ComponentPropsWithoutRef<typeof ToastPrimitive.Action>\n>(({ className, ...props }, ref) => (\n <ToastPrimitive.Action\n ref={ref}\n className={cn(\n \"mt-2 inline-flex h-7 items-center rounded-md border border-border/60 bg-card px-2 font-sans text-foreground text-label\",\n \"transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n className,\n )}\n {...props}\n />\n));\nToastAction.displayName = \"Toast.Action\";\n\nconst Toast = /*#__PURE__*/ Object.assign(ToastRoot, {\n Title: ToastTitle,\n Description: ToastDescription,\n Close: ToastClose,\n Action: ToastAction,\n Provider: ToastPrimitive.Provider,\n Viewport: ToastPrimitive.Viewport,\n});\n\nexport { Toast, toastVariants, type ToastVariant };\n","import { createContext, useCallback, useContext, useMemo, useState } from \"react\";\nimport type { JSX, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { Toast, type ToastVariant } from \"./toast.js\";\n\ninterface ToastDescriptor {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n variant?: ToastVariant;\n /** Auto-dismiss in ms. Default 5000. Pass `null` for sticky. */\n duration?: number | null;\n action?: { label: ReactNode; onClick: () => void };\n}\n\ninterface ToastContextValue {\n toast: (descriptor: Omit<ToastDescriptor, \"id\">) => string;\n dismiss: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | undefined>(undefined);\n\ninterface ToasterProps {\n children: ReactNode;\n /** Toast viewport position. Default bottom-right. */\n position?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\";\n className?: string;\n}\n\nconst POSITION_CLASS: Record<NonNullable<ToasterProps[\"position\"]>, string> = {\n \"top-right\": \"top-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n};\n\n/**\n * Toaster — mount once at the app root. Wraps children in a Radix Toast\n * Provider + Viewport and exposes the `useToast()` hook for descendants.\n */\nfunction Toaster({ children, position = \"bottom-right\", className }: ToasterProps): JSX.Element {\n const [toasts, setToasts] = useState<ToastDescriptor[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setToasts((cur) => cur.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback((descriptor: Omit<ToastDescriptor, \"id\">) => {\n const id = `t-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n setToasts((cur) => [...cur, { id, ...descriptor }]);\n return id;\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n <Toast.Provider swipeDirection=\"right\" duration={5000}>\n {children}\n {toasts.map((t) => (\n <Toast\n key={t.id}\n variant={t.variant ?? \"default\"}\n duration={t.duration === null ? Number.POSITIVE_INFINITY : (t.duration ?? 5000)}\n onOpenChange={(open) => {\n if (!open) dismiss(t.id);\n }}\n >\n {t.title ? <Toast.Title>{t.title}</Toast.Title> : null}\n {t.description ? <Toast.Description>{t.description}</Toast.Description> : null}\n {t.action ? (\n <Toast.Action altText={String(t.action.label)} onClick={t.action.onClick}>\n {t.action.label}\n </Toast.Action>\n ) : null}\n <Toast.Close />\n </Toast>\n ))}\n <Toast.Viewport\n className={cn(\n \"fixed z-50 flex max-h-screen w-full max-w-sm flex-col gap-2 outline-none\",\n POSITION_CLASS[position],\n className,\n )}\n />\n </Toast.Provider>\n </ToastContext.Provider>\n );\n}\n\n/**\n * useToast — fire toasts from anywhere inside <Toaster>.\n *\n * Example:\n * const { toast } = useToast();\n * toast({ title: \"Deployed\", variant: \"success\" });\n */\nfunction useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used inside <Toaster>.\");\n return ctx;\n}\n\nexport { Toaster, useToast };\n"]}
@@ -0,0 +1,74 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Settings2, Eye, Lock } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var ENABLEMENT_LABEL = {
7
+ enabled: "Allowed",
8
+ ask: "Ask before use",
9
+ denied: "Denied"
10
+ };
11
+ var ENABLEMENT_CLASS = {
12
+ enabled: "bg-success/15 text-success border-success/40",
13
+ ask: "bg-warning/15 text-warning border-warning/40",
14
+ denied: "bg-destructive/15 text-destructive border-destructive/40"
15
+ };
16
+ var cycle = (cur) => cur === "enabled" ? "ask" : cur === "ask" ? "denied" : "enabled";
17
+ var ToolsList = forwardRef(
18
+ ({ className, tools, title = "Tools", onEnablementChange, ...props }, ref) => /* @__PURE__ */ jsxs("section", { ref, className: cn("rounded-xl border bg-card", className), ...props, children: [
19
+ title ? /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between border-border/40 border-b px-4 py-3", children: [
20
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-title-md tracking-tight", children: title }),
21
+ /* @__PURE__ */ jsxs("span", { className: "font-mono text-label text-muted-foreground", children: [
22
+ tools.length,
23
+ " ",
24
+ tools.length === 1 ? "tool" : "tools"
25
+ ] })
26
+ ] }) : null,
27
+ /* @__PURE__ */ jsx("ul", { className: "divide-y divide-border/30", children: tools.map((tool) => {
28
+ const Icon = tool.icon ?? Settings2;
29
+ const state = tool.enablement ?? "enabled";
30
+ return /* @__PURE__ */ jsxs(
31
+ "li",
32
+ {
33
+ className: "grid grid-cols-[auto_1fr_auto] items-start gap-3 px-4 py-3",
34
+ children: [
35
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 grid size-8 place-items-center rounded-md bg-muted text-muted-foreground", children: /* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }) }),
36
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
38
+ /* @__PURE__ */ jsx("span", { className: "font-medium font-mono text-body-sm text-foreground", children: tool.name }),
39
+ tool.source ? /* @__PURE__ */ jsx("span", { className: "font-mono text-label text-muted-foreground uppercase tracking-wider", children: tool.source }) : null,
40
+ tool.badge ? /* @__PURE__ */ jsx("span", { className: "inline-flex items-center gap-1 rounded-full bg-accent/15 px-2 py-0.5 font-mono text-accent text-label uppercase", children: tool.badge }) : null
41
+ ] }),
42
+ tool.description ? /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-body-sm text-muted-foreground", children: tool.description }) : null
43
+ ] }),
44
+ /* @__PURE__ */ jsxs(
45
+ "button",
46
+ {
47
+ type: "button",
48
+ onClick: () => onEnablementChange?.(tool.id, cycle(state)),
49
+ className: cn(
50
+ "inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1",
51
+ "font-mono text-label uppercase tracking-wider transition-colors",
52
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
53
+ ENABLEMENT_CLASS[state],
54
+ !onEnablementChange && "pointer-events-none"
55
+ ),
56
+ "aria-label": `Cycle enablement for ${tool.name}`,
57
+ children: [
58
+ state === "enabled" ? /* @__PURE__ */ jsx(Eye, { className: "size-3", "aria-hidden": "true" }) : state === "ask" ? /* @__PURE__ */ jsx(Settings2, { className: "size-3", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Lock, { className: "size-3", "aria-hidden": "true" }),
59
+ ENABLEMENT_LABEL[state]
60
+ ]
61
+ }
62
+ )
63
+ ]
64
+ },
65
+ tool.id
66
+ );
67
+ }) })
68
+ ] })
69
+ );
70
+ ToolsList.displayName = "ToolsList";
71
+
72
+ export { ToolsList };
73
+ //# sourceMappingURL=chunk-JQXLPVWP.js.map
74
+ //# sourceMappingURL=chunk-JQXLPVWP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/tools-list/tools-list.tsx"],"names":[],"mappings":"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","file":"chunk-JQXLPVWP.js","sourcesContent":["import { Eye, Lock, Settings2 } 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\nexport type ToolEnablement = \"enabled\" | \"ask\" | \"denied\";\n\nexport interface ToolEntry {\n id: string;\n name: string;\n description?: ReactNode;\n icon?: IconComponent;\n enablement?: ToolEnablement;\n /**\n * Source of the tool: built-in, plugin/skill, or MCP server name.\n */\n source?: string;\n /** Optional badge text (e.g. \"destructive\", \"experimental\"). */\n badge?: ReactNode;\n}\n\ninterface ToolsListProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\" | \"onChange\"> {\n tools: ToolEntry[];\n /** Title above the list. */\n title?: ReactNode;\n /**\n * Fires when the consumer toggles a tool's enablement state.\n * Cycle: enabled → ask → denied → enabled.\n */\n onEnablementChange?: (id: string, next: ToolEnablement) => void;\n}\n\nconst ENABLEMENT_LABEL: Record<ToolEnablement, string> = {\n enabled: \"Allowed\",\n ask: \"Ask before use\",\n denied: \"Denied\",\n};\n\nconst ENABLEMENT_CLASS: Record<ToolEnablement, string> = {\n enabled: \"bg-success/15 text-success border-success/40\",\n ask: \"bg-warning/15 text-warning border-warning/40\",\n denied: \"bg-destructive/15 text-destructive border-destructive/40\",\n};\n\nconst cycle = (cur: ToolEnablement): ToolEnablement =>\n cur === \"enabled\" ? \"ask\" : cur === \"ask\" ? \"denied\" : \"enabled\";\n\n/**\n * ToolsList — surface every tool the agent could call, with its enablement\n * state. Click the chip to cycle: Allowed → Ask → Denied.\n */\nconst ToolsList = forwardRef<HTMLDivElement, ToolsListProps>(\n ({ className, tools, title = \"Tools\", onEnablementChange, ...props }, ref) => (\n <section ref={ref} className={cn(\"rounded-xl border bg-card\", className)} {...props}>\n {title ? (\n <header className=\"flex items-center justify-between border-border/40 border-b px-4 py-3\">\n <h3 className=\"font-display text-title-md tracking-tight\">{title}</h3>\n <span className=\"font-mono text-label text-muted-foreground\">\n {tools.length} {tools.length === 1 ? \"tool\" : \"tools\"}\n </span>\n </header>\n ) : null}\n <ul className=\"divide-y divide-border/30\">\n {tools.map((tool) => {\n const Icon = tool.icon ?? Settings2;\n const state = tool.enablement ?? \"enabled\";\n return (\n <li\n key={tool.id}\n className=\"grid grid-cols-[auto_1fr_auto] items-start gap-3 px-4 py-3\"\n >\n <span className=\"mt-0.5 grid size-8 place-items-center rounded-md bg-muted text-muted-foreground\">\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n </span>\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"font-medium font-mono text-body-sm text-foreground\">\n {tool.name}\n </span>\n {tool.source ? (\n <span className=\"font-mono text-label text-muted-foreground uppercase tracking-wider\">\n {tool.source}\n </span>\n ) : null}\n {tool.badge ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-accent/15 px-2 py-0.5 font-mono text-accent text-label uppercase\">\n {tool.badge}\n </span>\n ) : null}\n </div>\n {tool.description ? (\n <p className=\"mt-0.5 text-body-sm text-muted-foreground\">{tool.description}</p>\n ) : null}\n </div>\n <button\n type=\"button\"\n onClick={() => onEnablementChange?.(tool.id, cycle(state))}\n className={cn(\n \"inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1\",\n \"font-mono text-label uppercase tracking-wider transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n ENABLEMENT_CLASS[state],\n !onEnablementChange && \"pointer-events-none\",\n )}\n aria-label={`Cycle enablement for ${tool.name}`}\n >\n {state === \"enabled\" ? (\n <Eye className=\"size-3\" aria-hidden=\"true\" />\n ) : state === \"ask\" ? (\n <Settings2 className=\"size-3\" aria-hidden=\"true\" />\n ) : (\n <Lock className=\"size-3\" aria-hidden=\"true\" />\n )}\n {ENABLEMENT_LABEL[state]}\n </button>\n </li>\n );\n })}\n </ul>\n </section>\n ),\n);\nToolsList.displayName = \"ToolsList\";\n\nexport { ToolsList };\n"]}
@@ -0,0 +1,26 @@
1
+ import { useInLiveRegion } from './chunk-UGKI466V.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { forwardRef } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var Skeleton = forwardRef(
7
+ ({ className, ...props }, ref) => {
8
+ const inLiveRegion = useInLiveRegion();
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ ref,
13
+ role: inLiveRegion ? void 0 : "status",
14
+ "aria-live": inLiveRegion ? void 0 : "polite",
15
+ "aria-label": inLiveRegion ? void 0 : "Loading",
16
+ className: cn("animate-pulse rounded-md bg-muted", className),
17
+ ...props
18
+ }
19
+ );
20
+ }
21
+ );
22
+ Skeleton.displayName = "Skeleton";
23
+
24
+ export { Skeleton };
25
+ //# sourceMappingURL=chunk-K5ARID4S.js.map
26
+ //# sourceMappingURL=chunk-K5ARID4S.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/skeleton/skeleton.tsx"],"names":[],"mappings":";;;;;AAuBA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,KAAQ;AAIhC,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAY,QAAA;AAAA,QACjC,WAAA,EAAW,eAAe,MAAA,GAAY,QAAA;AAAA,QACtC,YAAA,EAAY,eAAe,MAAA,GAAY,SAAA;AAAA,QACvC,SAAA,EAAW,EAAA,CAAG,mCAAA,EAAqC,SAAS,CAAA;AAAA,QAC3D,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-K5ARID4S.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { useInLiveRegion } from \"../../../lib/live-region-context.js\";\n\n/**\n * Skeleton — placeholder block shown while content is loading.\n *\n * Uses --muted as base + a subtle shimmer that respects the violet theme.\n * Compose multiple Skeletons to mirror your component layout while loading.\n *\n * Accessibility (LOW-004): the default `role=\"status\"` + `aria-live=\"polite\"`\n * announces \"Loading\" to screen readers. In loops or grids where many\n * Skeletons mount simultaneously, this can be noisy. Override per-instance\n * with `aria-live=\"off\"` and/or `aria-hidden` when only one container-level\n * loading announcement is desired:\n *\n * <div role=\"status\" aria-live=\"polite\" aria-label=\"Loading deployments\">\n * {placeholders.map(id => (\n * <Skeleton key={id} aria-live=\"off\" aria-hidden=\"true\" className=\"h-8\" />\n * ))}\n * </div>\n */\nconst Skeleton = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n // T4.1 (MF-4): when nested inside a container live region (BuildLogStream,\n // ChatThread, etc.), omit role/aria-live so AT doesn't announce every\n // placeholder mount as a separate \"loading\" event.\n const inLiveRegion = useInLiveRegion();\n return (\n <div\n ref={ref}\n role={inLiveRegion ? undefined : \"status\"}\n aria-live={inLiveRegion ? undefined : \"polite\"}\n aria-label={inLiveRegion ? undefined : \"Loading\"}\n className={cn(\"animate-pulse rounded-md bg-muted\", className)}\n {...props}\n />\n );\n },\n);\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton };\n"]}
@@ -0,0 +1,41 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var QuickActionChips = forwardRef(
6
+ ({ className, actions, onSelect, ...props }, ref) => /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ ref,
10
+ className: cn("flex flex-wrap items-center justify-center gap-2", className),
11
+ ...props,
12
+ children: actions.map((a) => {
13
+ const Icon = a.icon;
14
+ return /* @__PURE__ */ jsxs(
15
+ "button",
16
+ {
17
+ type: "button",
18
+ onClick: () => onSelect?.(a.id),
19
+ className: cn(
20
+ "inline-flex h-9 items-center gap-2 rounded-full border px-4",
21
+ "font-medium font-sans text-body-sm",
22
+ "transition-[box-shadow,background-color,border-color,color] duration-base ease-out-soft",
23
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
24
+ a.primary ? "border-transparent bg-primary text-primary-foreground hover:shadow-glow" : "border-border/60 bg-card text-foreground hover:border-primary/40 hover:bg-muted"
25
+ ),
26
+ children: [
27
+ Icon ? /* @__PURE__ */ jsx(Icon, { className: "size-4" }) : null,
28
+ a.label
29
+ ]
30
+ },
31
+ a.id
32
+ );
33
+ })
34
+ }
35
+ )
36
+ );
37
+ QuickActionChips.displayName = "QuickActionChips";
38
+
39
+ export { QuickActionChips };
40
+ //# sourceMappingURL=chunk-K6RTLPIJ.js.map
41
+ //# sourceMappingURL=chunk-K6RTLPIJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/quick-action-chips/quick-action-chips.tsx"],"names":[],"mappings":";;;;AAyBA,IAAM,gBAAA,GAAmB,UAAA;AAAA,EACvB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,UAAU,GAAG,KAAA,IAAS,GAAA,qBAC3C,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA;AAAA,MAC1E,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClB,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,6DAAA;AAAA,cACA,oCAAA;AAAA,cACA,yFAAA;AAAA,cACA,0IAAA;AAAA,cACA,CAAA,CAAE,UACE,yEAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,IAAA,mBAAO,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,CAAA,GAAK,IAAA;AAAA,cACrC,CAAA,CAAE;AAAA;AAAA,WAAA;AAAA,UAdE,CAAA,CAAE;AAAA,SAeT;AAAA,MAEJ,CAAC;AAAA;AAAA;AAGP;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"chunk-K6RTLPIJ.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 QuickAction {\n id: string;\n label: ReactNode;\n /** Icon component (e.g. from lucide-react). */\n icon?: IconComponent;\n /** When true, the chip is highlighted as the suggested next action. */\n primary?: boolean;\n}\n\ninterface QuickActionChipsProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n actions: QuickAction[];\n onSelect?: (id: string) => void;\n}\n\n/**\n * QuickActionChips — row of intent chips below a hero composer.\n *\n * Used in Chat Home (\"Escrever / Aprender / Código / Assuntos pessoais\")\n * and the Files panel.\n */\nconst QuickActionChips = forwardRef<HTMLDivElement, QuickActionChipsProps>(\n ({ className, actions, onSelect, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-wrap items-center justify-center gap-2\", className)}\n {...props}\n >\n {actions.map((a) => {\n const Icon = a.icon;\n return (\n <button\n key={a.id}\n type=\"button\"\n onClick={() => onSelect?.(a.id)}\n className={cn(\n \"inline-flex h-9 items-center gap-2 rounded-full border px-4\",\n \"font-medium font-sans text-body-sm\",\n \"transition-[box-shadow,background-color,border-color,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 a.primary\n ? \"border-transparent bg-primary text-primary-foreground hover:shadow-glow\"\n : \"border-border/60 bg-card text-foreground hover:border-primary/40 hover:bg-muted\",\n )}\n >\n {Icon ? <Icon className=\"size-4\" /> : null}\n {a.label}\n </button>\n );\n })}\n </div>\n ),\n);\nQuickActionChips.displayName = \"QuickActionChips\";\n\nexport { QuickActionChips };\n"]}