@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,116 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+
5
+ var Root = forwardRef(
6
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7
+ "aside",
8
+ {
9
+ ref,
10
+ className: cn(
11
+ "flex h-full w-64 flex-col border-border/40 border-r bg-card text-card-foreground",
12
+ className
13
+ ),
14
+ ...props
15
+ }
16
+ )
17
+ );
18
+ Root.displayName = "Sidebar";
19
+ var Header = forwardRef(
20
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
21
+ "div",
22
+ {
23
+ ref,
24
+ className: cn("flex h-16 items-center gap-3 border-border/40 border-b px-5", className),
25
+ ...props
26
+ }
27
+ )
28
+ );
29
+ Header.displayName = "Sidebar.Header";
30
+ var Section = forwardRef(
31
+ ({ className, title, children, ...props }, ref) => /* @__PURE__ */ jsxs("div", { ref, className: cn("flex flex-col gap-1 px-3 py-4", className), ...props, children: [
32
+ title ? /* @__PURE__ */ jsx("p", { className: "px-2 pb-1 font-sans text-label-caps text-muted-foreground uppercase", children: title }) : null,
33
+ children
34
+ ] })
35
+ );
36
+ Section.displayName = "Sidebar.Section";
37
+ var Item = forwardRef(
38
+ ({ className, icon: Icon, active, count, as = "button", href, children, ...props }, ref) => {
39
+ const classes = cn(
40
+ "group flex w-full items-center gap-3 rounded-lg px-2 py-2",
41
+ "font-medium font-sans text-body-sm",
42
+ "transition-colors duration-base ease-out-soft",
43
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
44
+ active ? "bg-primary/10 text-primary" : "text-muted-foreground hover:bg-muted hover:text-foreground",
45
+ className
46
+ );
47
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
48
+ Icon ? /* @__PURE__ */ jsx(
49
+ Icon,
50
+ {
51
+ className: cn(
52
+ "size-4 shrink-0",
53
+ active ? "text-primary" : "text-muted-foreground group-hover:text-foreground"
54
+ )
55
+ }
56
+ ) : null,
57
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children }),
58
+ count !== void 0 ? /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ className: cn(
62
+ "ml-auto rounded-full px-1.5 py-0.5 font-mono text-label",
63
+ active ? "bg-primary text-primary-foreground" : "bg-muted-foreground/15"
64
+ ),
65
+ children: count
66
+ }
67
+ ) : null
68
+ ] });
69
+ if (as === "a") {
70
+ return /* @__PURE__ */ jsx(
71
+ "a",
72
+ {
73
+ ref,
74
+ href,
75
+ className: classes,
76
+ "aria-current": active ? "page" : void 0,
77
+ ...props,
78
+ children: content
79
+ }
80
+ );
81
+ }
82
+ return /* @__PURE__ */ jsx(
83
+ "button",
84
+ {
85
+ ref,
86
+ type: "button",
87
+ className: classes,
88
+ "aria-pressed": active ? "true" : void 0,
89
+ ...props,
90
+ children: content
91
+ }
92
+ );
93
+ }
94
+ );
95
+ Item.displayName = "Sidebar.Item";
96
+ var Footer = forwardRef(
97
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
98
+ "div",
99
+ {
100
+ ref,
101
+ className: cn("mt-auto border-border/40 border-t px-5 py-4", className),
102
+ ...props
103
+ }
104
+ )
105
+ );
106
+ Footer.displayName = "Sidebar.Footer";
107
+ var Sidebar = /* @__PURE__ */ Object.assign(Root, {
108
+ Header,
109
+ Section,
110
+ Item,
111
+ Footer
112
+ });
113
+
114
+ export { Sidebar };
115
+ //# sourceMappingURL=chunk-RVOBP7PO.js.map
116
+ //# sourceMappingURL=chunk-RVOBP7PO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/sidebar/sidebar.tsx"],"names":[],"mappings":"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","file":"chunk-RVOBP7PO.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type {\n AnchorHTMLAttributes,\n ButtonHTMLAttributes,\n ElementType,\n HTMLAttributes,\n ReactNode,\n Ref,\n} from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Sidebar — vertical navigation shell.\n *\n * Composition:\n * <Sidebar>\n * <Sidebar.Header>…brand…</Sidebar.Header>\n * <Sidebar.Section title=\"Workspace\">\n * <Sidebar.Item icon={Home} active>Overview</Sidebar.Item>\n * <Sidebar.Item icon={Rocket} count={3}>Deployments</Sidebar.Item>\n * </Sidebar.Section>\n * <Sidebar.Footer>…user…</Sidebar.Footer>\n * </Sidebar>\n *\n * Width is 260px by default (matches the wiremocks). Pass `className` to override.\n * Sidebar root is `<aside>` with a hairline right border.\n */\n\nconst Root = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n ({ className, ...props }, ref) => (\n <aside\n ref={ref}\n className={cn(\n \"flex h-full w-64 flex-col border-border/40 border-r bg-card text-card-foreground\",\n className,\n )}\n {...props}\n />\n ),\n);\nRoot.displayName = \"Sidebar\";\n\nconst Header = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex h-16 items-center gap-3 border-border/40 border-b px-5\", className)}\n {...props}\n />\n ),\n);\nHeader.displayName = \"Sidebar.Header\";\n\ninterface SectionProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: ReactNode;\n}\n\nconst Section = forwardRef<HTMLDivElement, SectionProps>(\n ({ className, title, children, ...props }, ref) => (\n <div ref={ref} className={cn(\"flex flex-col gap-1 px-3 py-4\", className)} {...props}>\n {title ? (\n <p className=\"px-2 pb-1 font-sans text-label-caps text-muted-foreground uppercase\">\n {title}\n </p>\n ) : null}\n {children}\n </div>\n ),\n);\nSection.displayName = \"Sidebar.Section\";\n\ninterface ItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\"> {\n icon?: ElementType;\n active?: boolean;\n count?: number | string;\n as?: \"button\" | \"a\";\n href?: string;\n}\n\n/**\n * Sidebar.Item — single nav row. Renders as <button> by default; pass `as=\"a\"` + `href`\n * to render an anchor for routing.\n */\nconst Item = forwardRef<HTMLElement, ItemProps>(\n ({ className, icon: Icon, active, count, as = \"button\", href, children, ...props }, ref) => {\n const classes = cn(\n \"group flex w-full items-center gap-3 rounded-lg px-2 py-2\",\n \"font-medium font-sans text-body-sm\",\n \"transition-colors 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-card\",\n active\n ? \"bg-primary/10 text-primary\"\n : \"text-muted-foreground hover:bg-muted hover:text-foreground\",\n className,\n );\n\n const content = (\n <>\n {Icon ? (\n <Icon\n className={cn(\n \"size-4 shrink-0\",\n active ? \"text-primary\" : \"text-muted-foreground group-hover:text-foreground\",\n )}\n />\n ) : null}\n <span className=\"flex-1 truncate text-left\">{children}</span>\n {count !== undefined ? (\n <span\n className={cn(\n \"ml-auto rounded-full px-1.5 py-0.5 font-mono text-label\",\n active ? \"bg-primary text-primary-foreground\" : \"bg-muted-foreground/15\",\n )}\n >\n {count}\n </span>\n ) : null}\n </>\n );\n\n if (as === \"a\") {\n return (\n <a\n ref={ref as Ref<HTMLAnchorElement>}\n href={href}\n className={classes}\n aria-current={active ? \"page\" : undefined}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n ref={ref as Ref<HTMLButtonElement>}\n type=\"button\"\n className={classes}\n aria-pressed={active ? \"true\" : undefined}\n {...props}\n >\n {content}\n </button>\n );\n },\n);\nItem.displayName = \"Sidebar.Item\";\n\nconst Footer = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"mt-auto border-border/40 border-t px-5 py-4\", className)}\n {...props}\n />\n ),\n);\nFooter.displayName = \"Sidebar.Footer\";\n\nconst Sidebar = /*#__PURE__*/ Object.assign(Root, {\n Header,\n Section,\n Item,\n Footer,\n});\n\nexport { Sidebar };\n"]}
@@ -0,0 +1,97 @@
1
+ import { Button } from './chunk-57NXT3OX.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { cva } from 'class-variance-authority';
4
+ import { Lock, AlertTriangle, ShieldCheck } from 'lucide-react';
5
+ import { forwardRef } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var cardVariants = cva(
9
+ "grid w-full gap-3 rounded-xl border p-4 transition-colors duration-base ease-out-soft",
10
+ {
11
+ variants: {
12
+ severity: {
13
+ info: "border-info/40 bg-info/5",
14
+ warning: "border-warning/40 bg-warning/5",
15
+ destructive: "border-destructive/40 bg-destructive/5"
16
+ }
17
+ },
18
+ defaultVariants: { severity: "warning" }
19
+ }
20
+ );
21
+ var ICON_FOR_SEVERITY = {
22
+ info: ShieldCheck,
23
+ warning: AlertTriangle,
24
+ destructive: Lock
25
+ };
26
+ var ICON_TONE = {
27
+ info: "text-info",
28
+ warning: "text-warning",
29
+ destructive: "text-destructive"
30
+ };
31
+ var ApprovalCard = forwardRef(
32
+ ({
33
+ className,
34
+ severity = "warning",
35
+ title,
36
+ request,
37
+ description,
38
+ details,
39
+ onApprove,
40
+ onDeny,
41
+ onAlways,
42
+ icon,
43
+ ...props
44
+ }, ref) => {
45
+ const resolvedSeverity = severity ?? "warning";
46
+ const Icon = icon ?? ICON_FOR_SEVERITY[resolvedSeverity];
47
+ return /* @__PURE__ */ jsxs(
48
+ "section",
49
+ {
50
+ ref,
51
+ role: "alertdialog",
52
+ "aria-label": typeof title === "string" ? title : "Approval required",
53
+ className: cn(cardVariants({ severity: resolvedSeverity }), className),
54
+ ...props,
55
+ children: [
56
+ /* @__PURE__ */ jsxs("header", { className: "flex items-start gap-3", children: [
57
+ /* @__PURE__ */ jsx(
58
+ "span",
59
+ {
60
+ className: cn("mt-0.5 inline-flex shrink-0", ICON_TONE[resolvedSeverity]),
61
+ "aria-hidden": "true",
62
+ children: /* @__PURE__ */ jsx(Icon, { className: "size-4" })
63
+ }
64
+ ),
65
+ /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 flex-1 gap-1", children: [
66
+ /* @__PURE__ */ jsx("h4", { className: "font-display text-foreground text-title-md tracking-tight", children: title }),
67
+ /* @__PURE__ */ jsx("code", { className: "overflow-hidden break-words font-mono text-code-md text-muted-foreground", children: request }),
68
+ description ? /* @__PURE__ */ jsx("p", { className: "text-body-sm text-muted-foreground", children: description }) : null
69
+ ] })
70
+ ] }),
71
+ details ? /* @__PURE__ */ jsxs("details", { className: "rounded-md border border-border/40 bg-background/40 px-3 py-2 text-body-sm", children: [
72
+ /* @__PURE__ */ jsx("summary", { className: "cursor-pointer select-none font-mono text-label text-muted-foreground", children: "Show details" }),
73
+ /* @__PURE__ */ jsx("div", { className: "mt-2 break-words", children: details })
74
+ ] }) : null,
75
+ /* @__PURE__ */ jsxs("footer", { className: "flex flex-wrap items-center justify-end gap-2", children: [
76
+ onAlways ? /* @__PURE__ */ jsx(Button, { size: "sm", variant: "ghost", onClick: onAlways, children: "Always allow" }) : null,
77
+ onDeny ? /* @__PURE__ */ jsx(Button, { size: "sm", variant: "secondary", onClick: onDeny, children: "Deny" }) : null,
78
+ onApprove ? /* @__PURE__ */ jsx(
79
+ Button,
80
+ {
81
+ size: "sm",
82
+ variant: resolvedSeverity === "destructive" ? "destructive" : "primary",
83
+ onClick: onApprove,
84
+ children: "Approve"
85
+ }
86
+ ) : null
87
+ ] })
88
+ ]
89
+ }
90
+ );
91
+ }
92
+ );
93
+ ApprovalCard.displayName = "ApprovalCard";
94
+
95
+ export { ApprovalCard };
96
+ //# sourceMappingURL=chunk-SF6R5VMQ.js.map
97
+ //# sourceMappingURL=chunk-SF6R5VMQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/composites/approval-card/approval-card.tsx"],"names":[],"mappings":"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","file":"chunk-SF6R5VMQ.js","sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { AlertTriangle, Lock, ShieldCheck } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\nimport { Button } from \"../../primitives/button/index.js\";\n\n/**\n * ApprovalCard — inline pause-and-ask card for an agent stream.\n *\n * Used when the agent wants to perform an action that requires the user's\n * consent (run a destructive command, use a new tool, edit outside the\n * sandbox, etc.). Renders as a bordered card inside the conversation stream,\n * pauses the visual flow, and exposes Deny / Approve / Always-allow actions.\n */\n\nconst cardVariants = cva(\n \"grid w-full gap-3 rounded-xl border p-4 transition-colors duration-base ease-out-soft\",\n {\n variants: {\n severity: {\n info: \"border-info/40 bg-info/5\",\n warning: \"border-warning/40 bg-warning/5\",\n destructive: \"border-destructive/40 bg-destructive/5\",\n },\n },\n defaultVariants: { severity: \"warning\" },\n },\n);\n\nconst ICON_FOR_SEVERITY: Record<NonNullable<ApprovalSeverity>, IconComponent> = {\n info: ShieldCheck,\n warning: AlertTriangle,\n destructive: Lock,\n};\n\nconst ICON_TONE: Record<NonNullable<ApprovalSeverity>, string> = {\n info: \"text-info\",\n warning: \"text-warning\",\n destructive: \"text-destructive\",\n};\n\ntype ApprovalSeverity = NonNullable<VariantProps<typeof cardVariants>[\"severity\"]>;\n\ninterface ApprovalCardProps\n extends Omit<HTMLAttributes<HTMLElement>, \"title\">,\n VariantProps<typeof cardVariants> {\n /** Short headline (\"Run destructive command?\"). */\n title: ReactNode;\n /** What is being requested (command, file path, tool name…). Renders monospace. */\n request: ReactNode;\n /** Optional explanation line under the request. */\n description?: ReactNode;\n /** Optional expandable details (e.g. full command, file diff). */\n details?: ReactNode;\n /** Pressing the primary \"Approve\" button. */\n onApprove?: () => void;\n /** Pressing \"Deny\". */\n onDeny?: () => void;\n /** Pressing \"Always allow\" — optional tertiary action. */\n onAlways?: () => void;\n /** Customise the icon shown in the corner. */\n icon?: IconComponent;\n}\n\nconst ApprovalCard = forwardRef<HTMLElement, ApprovalCardProps>(\n (\n {\n className,\n severity = \"warning\",\n title,\n request,\n description,\n details,\n onApprove,\n onDeny,\n onAlways,\n icon,\n ...props\n },\n ref,\n ) => {\n const resolvedSeverity: ApprovalSeverity = severity ?? \"warning\";\n const Icon = icon ?? ICON_FOR_SEVERITY[resolvedSeverity];\n return (\n <section\n ref={ref}\n role=\"alertdialog\"\n aria-label={typeof title === \"string\" ? title : \"Approval required\"}\n className={cn(cardVariants({ severity: resolvedSeverity }), className)}\n {...props}\n >\n <header className=\"flex items-start gap-3\">\n <span\n className={cn(\"mt-0.5 inline-flex shrink-0\", ICON_TONE[resolvedSeverity])}\n aria-hidden=\"true\"\n >\n <Icon className=\"size-4\" />\n </span>\n <div className=\"grid min-w-0 flex-1 gap-1\">\n <h4 className=\"font-display text-foreground text-title-md tracking-tight\">{title}</h4>\n <code className=\"overflow-hidden break-words font-mono text-code-md text-muted-foreground\">\n {request}\n </code>\n {description ? (\n <p className=\"text-body-sm text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n </header>\n {details ? (\n <details className=\"rounded-md border border-border/40 bg-background/40 px-3 py-2 text-body-sm\">\n <summary className=\"cursor-pointer select-none font-mono text-label text-muted-foreground\">\n Show details\n </summary>\n <div className=\"mt-2 break-words\">{details}</div>\n </details>\n ) : null}\n <footer className=\"flex flex-wrap items-center justify-end gap-2\">\n {onAlways ? (\n <Button size=\"sm\" variant=\"ghost\" onClick={onAlways}>\n Always allow\n </Button>\n ) : null}\n {onDeny ? (\n <Button size=\"sm\" variant=\"secondary\" onClick={onDeny}>\n Deny\n </Button>\n ) : null}\n {onApprove ? (\n <Button\n size=\"sm\"\n variant={resolvedSeverity === \"destructive\" ? \"destructive\" : \"primary\"}\n onClick={onApprove}\n >\n Approve\n </Button>\n ) : null}\n </footer>\n </section>\n );\n },\n);\nApprovalCard.displayName = \"ApprovalCard\";\n\nexport { ApprovalCard, type ApprovalSeverity };\n"]}
@@ -0,0 +1,57 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Wrench, ChevronRight } from 'lucide-react';
3
+ import { forwardRef, useState } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var ToolCall = forwardRef(
7
+ ({ className, name, summary, detail, defaultOpen, hideIcon, ...props }, ref) => {
8
+ const [open, setOpen] = useState(defaultOpen ?? false);
9
+ const expandable = detail !== void 0;
10
+ return /* @__PURE__ */ jsxs(
11
+ "div",
12
+ {
13
+ ref,
14
+ className: cn("rounded-md border border-border/40 bg-muted/30", className),
15
+ ...props,
16
+ children: [
17
+ /* @__PURE__ */ jsxs(
18
+ "button",
19
+ {
20
+ type: "button",
21
+ onClick: () => expandable && setOpen((v) => !v),
22
+ "aria-expanded": expandable ? open : void 0,
23
+ disabled: !expandable,
24
+ className: cn(
25
+ "flex w-full items-center gap-2 px-3 py-2 text-left",
26
+ "font-sans text-body-sm text-foreground",
27
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
28
+ expandable && "cursor-pointer hover:bg-muted/60"
29
+ ),
30
+ children: [
31
+ !hideIcon ? /* @__PURE__ */ jsx(Wrench, { className: "size-3.5 shrink-0 text-primary", "aria-hidden": "true" }) : null,
32
+ name ? /* @__PURE__ */ jsx("span", { className: "font-mono text-code-sm text-muted-foreground", children: name }) : null,
33
+ /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: summary }),
34
+ expandable ? /* @__PURE__ */ jsx(
35
+ ChevronRight,
36
+ {
37
+ className: cn(
38
+ "size-3.5 text-muted-foreground transition-transform",
39
+ open && "rotate-90"
40
+ ),
41
+ "aria-hidden": "true"
42
+ }
43
+ ) : null
44
+ ]
45
+ }
46
+ ),
47
+ expandable && open ? /* @__PURE__ */ jsx("div", { className: "border-border/40 border-t bg-card px-3 py-2", children: detail }) : null
48
+ ]
49
+ }
50
+ );
51
+ }
52
+ );
53
+ ToolCall.displayName = "ToolCall";
54
+
55
+ export { ToolCall };
56
+ //# sourceMappingURL=chunk-SP4CP5HY.js.map
57
+ //# sourceMappingURL=chunk-SP4CP5HY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/tool-call/tool-call.tsx"],"names":[],"mappings":";;;;;AAiCA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,WAAA,EAAa,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC9E,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAA,CAAS,eAAe,KAAK,CAAA;AACrD,IAAA,MAAM,aAAa,MAAA,KAAW,MAAA;AAC9B,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA,CAAG,gDAAA,EAAkD,SAAS,CAAA;AAAA,QACxE,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,IAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAS,MAAM,UAAA,IAAc,QAAQ,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,cAC9C,eAAA,EAAe,aAAa,IAAA,GAAO,MAAA;AAAA,cACnC,UAAU,CAAC,UAAA;AAAA,cACX,SAAA,EAAW,EAAA;AAAA,gBACT,oDAAA;AAAA,gBACA,wCAAA;AAAA,gBACA,0IAAA;AAAA,gBACA,UAAA,IAAc;AAAA,eAChB;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,CAAC,2BACA,GAAA,CAAC,MAAA,EAAA,EAAO,WAAU,gCAAA,EAAiC,aAAA,EAAY,QAAO,CAAA,GACpE,IAAA;AAAA,gBACH,uBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8CAAA,EAAgD,gBAAK,CAAA,GACnE,IAAA;AAAA,gCACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,gBAC1C,UAAA,mBACC,GAAA;AAAA,kBAAC,YAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAW,EAAA;AAAA,sBACT,qDAAA;AAAA,sBACA,IAAA,IAAQ;AAAA,qBACV;AAAA,oBACA,aAAA,EAAY;AAAA;AAAA,iBACd,GACE;AAAA;AAAA;AAAA,WACN;AAAA,UACC,cAAc,IAAA,mBACb,GAAA,CAAC,SAAI,SAAA,EAAU,6CAAA,EAA+C,kBAAO,CAAA,GACnE;AAAA;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-SP4CP5HY.js","sourcesContent":["import { ChevronRight, Wrench } from \"lucide-react\";\nimport { forwardRef, useState } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface ToolCallProps extends HTMLAttributes<HTMLDivElement> {\n /** Tool name e.g. \"bash\", \"read_file\", \"edit_file\". */\n name?: string;\n /**\n * Summary label e.g. \"Ran 2 commands\", \"Read 18 files\".\n */\n summary: ReactNode;\n /**\n * Collapsible payload (e.g. command, stdout, file list).\n */\n detail?: ReactNode;\n defaultOpen?: boolean;\n /**\n * If true, hides the wrench icon (useful when grouping by name elsewhere).\n */\n hideIcon?: boolean;\n}\n\n/**\n * ToolCall — collapsible row representing an agent tool invocation.\n *\n * Visual: subtle muted container, wrench icon, summary in body text,\n * chevron rotates on expand. Pairs with `<ToolResult>` for the rendered output.\n *\n * Typical usage inside a ChatMessage assistant body:\n *\n * <ToolCall summary=\"Read 18 files\" detail={<ToolResult>{output}</ToolResult>} />\n */\nconst ToolCall = forwardRef<HTMLDivElement, ToolCallProps>(\n ({ className, name, summary, detail, defaultOpen, hideIcon, ...props }, ref) => {\n const [open, setOpen] = useState(defaultOpen ?? false);\n const expandable = detail !== undefined;\n return (\n <div\n ref={ref}\n className={cn(\"rounded-md border border-border/40 bg-muted/30\", className)}\n {...props}\n >\n <button\n type=\"button\"\n onClick={() => expandable && setOpen((v) => !v)}\n aria-expanded={expandable ? open : undefined}\n disabled={!expandable}\n className={cn(\n \"flex w-full items-center gap-2 px-3 py-2 text-left\",\n \"font-sans text-body-sm text-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n expandable && \"cursor-pointer hover:bg-muted/60\",\n )}\n >\n {!hideIcon ? (\n <Wrench className=\"size-3.5 shrink-0 text-primary\" aria-hidden=\"true\" />\n ) : null}\n {name ? (\n <span className=\"font-mono text-code-sm text-muted-foreground\">{name}</span>\n ) : null}\n <span className=\"flex-1 truncate\">{summary}</span>\n {expandable ? (\n <ChevronRight\n className={cn(\n \"size-3.5 text-muted-foreground transition-transform\",\n open && \"rotate-90\",\n )}\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n {expandable && open ? (\n <div className=\"border-border/40 border-t bg-card px-3 py-2\">{detail}</div>\n ) : null}\n </div>\n );\n },\n);\nToolCall.displayName = \"ToolCall\";\n\nexport { ToolCall };\n"]}
@@ -0,0 +1,30 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var EmptyState = forwardRef(
6
+ ({ className, icon: Icon, title, description, action, eyebrow, dashed = true, ...props }, ref) => /* @__PURE__ */ jsxs(
7
+ "div",
8
+ {
9
+ ref,
10
+ className: cn(
11
+ "grid place-items-center gap-3 rounded-2xl border bg-card px-6 py-12 text-center",
12
+ dashed ? "border-border/60 border-dashed" : "border-border/40",
13
+ className
14
+ ),
15
+ ...props,
16
+ children: [
17
+ Icon ? /* @__PURE__ */ jsx("span", { className: "grid size-12 place-items-center rounded-2xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx(Icon, { className: "size-6", "aria-hidden": "true" }) }) : null,
18
+ eyebrow ? /* @__PURE__ */ jsx("p", { className: "font-mono text-label-caps text-muted-foreground uppercase", children: eyebrow }) : null,
19
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-foreground text-title-md", children: title }),
20
+ description ? /* @__PURE__ */ jsx("p", { className: "max-w-md text-body-sm text-muted-foreground", children: description }) : null,
21
+ action ? /* @__PURE__ */ jsx("div", { className: "mt-2", children: action }) : null
22
+ ]
23
+ }
24
+ )
25
+ );
26
+ EmptyState.displayName = "EmptyState";
27
+
28
+ export { EmptyState };
29
+ //# sourceMappingURL=chunk-SWJ4EUOI.js.map
30
+ //# sourceMappingURL=chunk-SWJ4EUOI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/empty-state/empty-state.tsx"],"names":[],"mappings":";;;;AAwBA,IAAM,UAAA,GAAa,UAAA;AAAA,EACjB,CACE,EAAE,SAAA,EAAW,IAAA,EAAM,MAAM,KAAA,EAAO,WAAA,EAAa,MAAA,EAAQ,OAAA,EAAS,MAAA,GAAS,IAAA,EAAM,GAAG,KAAA,IAChF,GAAA,qBAEA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,iFAAA;AAAA,QACA,SAAS,gCAAA,GAAmC,kBAAA;AAAA,QAC5C;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,IAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wEAAA,EACd,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA,EAC9C,CAAA,GACE,IAAA;AAAA,QACH,0BACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2DAAA,EAA6D,mBAAQ,CAAA,GAChF,IAAA;AAAA,wBACJ,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,QACjE,8BACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6CAAA,EAA+C,uBAAY,CAAA,GACtE,IAAA;AAAA,QACH,yBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EAAQ,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA;AAGvD;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","file":"chunk-SWJ4EUOI.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\ninterface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n /** Icon shown above the title. */\n icon?: IconComponent;\n title: ReactNode;\n description?: ReactNode;\n /** Optional action slot (typically <Button>). */\n action?: ReactNode;\n /** Hint shown above the title (e.g. uppercase eyebrow). */\n eyebrow?: ReactNode;\n /** Bordered dashed surface (placeholder vibe). Default true. */\n dashed?: boolean;\n}\n\n/**\n * EmptyState — visual placeholder for empty lists / first-run screens.\n *\n * Composition: icon + eyebrow + title + description + action. All slots are\n * optional except title.\n */\nconst EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(\n (\n { className, icon: Icon, title, description, action, eyebrow, dashed = true, ...props },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn(\n \"grid place-items-center gap-3 rounded-2xl border bg-card px-6 py-12 text-center\",\n dashed ? \"border-border/60 border-dashed\" : \"border-border/40\",\n className,\n )}\n {...props}\n >\n {Icon ? (\n <span className=\"grid size-12 place-items-center rounded-2xl bg-primary/10 text-primary\">\n <Icon className=\"size-6\" aria-hidden=\"true\" />\n </span>\n ) : null}\n {eyebrow ? (\n <p className=\"font-mono text-label-caps text-muted-foreground uppercase\">{eyebrow}</p>\n ) : null}\n <h3 className=\"font-display text-foreground text-title-md\">{title}</h3>\n {description ? (\n <p className=\"max-w-md text-body-sm text-muted-foreground\">{description}</p>\n ) : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n ),\n);\nEmptyState.displayName = \"EmptyState\";\n\nexport { EmptyState };\n"]}
@@ -0,0 +1,128 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as LabelPrimitive from '@radix-ui/react-label';
3
+ import { AlertCircle } from 'lucide-react';
4
+ import { createContext, forwardRef, useId, Children, isValidElement, cloneElement, useContext } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var FormFieldContext = createContext(null);
8
+ function useFormField() {
9
+ const ctx = useContext(FormFieldContext);
10
+ if (!ctx) throw new Error("FormField subcomponents must be inside <FormField>.");
11
+ return ctx;
12
+ }
13
+ var rootGapBySize = {
14
+ sm: "gap-1",
15
+ md: "gap-1.5",
16
+ lg: "gap-2"
17
+ };
18
+ var FormFieldRoot = forwardRef(
19
+ ({ className, id: idProp, invalid, size = "md", ...props }, ref) => {
20
+ const auto = useId();
21
+ const fieldId = idProp ?? `field-${auto}`;
22
+ const ctx = {
23
+ fieldId,
24
+ hintId: `${fieldId}-hint`,
25
+ errorId: `${fieldId}-error`,
26
+ hasError: !!invalid,
27
+ size
28
+ };
29
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx("div", { ref, className: cn("grid", rootGapBySize[size], className), ...props }) });
30
+ }
31
+ );
32
+ FormFieldRoot.displayName = "FormField";
33
+ var labelFontBySize = {
34
+ sm: "text-label-caps",
35
+ md: "text-body-sm",
36
+ lg: "text-body-md"
37
+ };
38
+ var hintFontBySize = {
39
+ sm: "text-label-caps",
40
+ md: "text-body-sm",
41
+ lg: "text-body-md"
42
+ };
43
+ var FormFieldLabel = forwardRef(
44
+ ({ className, required, children, ...props }, ref) => {
45
+ const { fieldId, size } = useFormField();
46
+ return /* @__PURE__ */ jsxs(
47
+ LabelPrimitive.Root,
48
+ {
49
+ ref,
50
+ htmlFor: fieldId,
51
+ className: cn(
52
+ "inline-flex items-center gap-1 font-medium font-sans text-foreground",
53
+ labelFontBySize[size],
54
+ "peer-disabled:cursor-not-allowed peer-disabled:opacity-60",
55
+ className
56
+ ),
57
+ ...props,
58
+ children: [
59
+ children,
60
+ required ? /* @__PURE__ */ jsx("span", { className: "text-destructive", "aria-hidden": "true", children: "*" }) : null
61
+ ]
62
+ }
63
+ );
64
+ }
65
+ );
66
+ FormFieldLabel.displayName = "FormField.Label";
67
+ var FormFieldControl = forwardRef(
68
+ ({ children, ...props }, ref) => {
69
+ const { fieldId, hintId, errorId, hasError } = useFormField();
70
+ const described = hasError ? errorId : hintId;
71
+ const only = Children.only(children);
72
+ const cloned = isValidElement(only) ? cloneElement(only, {
73
+ id: fieldId,
74
+ "aria-describedby": described,
75
+ "aria-invalid": hasError || void 0
76
+ }) : only;
77
+ return /* @__PURE__ */ jsx("div", { ref, ...props, children: cloned });
78
+ }
79
+ );
80
+ FormFieldControl.displayName = "FormField.Control";
81
+ var FormFieldHint = forwardRef(
82
+ ({ className, children, ...props }, ref) => {
83
+ const { hintId, hasError, size } = useFormField();
84
+ if (hasError) return null;
85
+ return /* @__PURE__ */ jsx(
86
+ "p",
87
+ {
88
+ ref,
89
+ id: hintId,
90
+ className: cn("text-muted-foreground", hintFontBySize[size], className),
91
+ ...props,
92
+ children
93
+ }
94
+ );
95
+ }
96
+ );
97
+ FormFieldHint.displayName = "FormField.Hint";
98
+ var FormFieldError = forwardRef(
99
+ ({ className, children, ...props }, ref) => {
100
+ const { errorId, hasError, size } = useFormField();
101
+ if (!hasError) return null;
102
+ return /* @__PURE__ */ jsxs(
103
+ "p",
104
+ {
105
+ ref,
106
+ id: errorId,
107
+ role: "alert",
108
+ className: cn("flex items-center gap-1 text-destructive", hintFontBySize[size], className),
109
+ ...props,
110
+ children: [
111
+ /* @__PURE__ */ jsx(AlertCircle, { className: "size-3.5 shrink-0", "aria-hidden": "true" }),
112
+ children
113
+ ]
114
+ }
115
+ );
116
+ }
117
+ );
118
+ FormFieldError.displayName = "FormField.Error";
119
+ var FormField = /* @__PURE__ */ Object.assign(FormFieldRoot, {
120
+ Label: FormFieldLabel,
121
+ Control: FormFieldControl,
122
+ Hint: FormFieldHint,
123
+ Error: FormFieldError
124
+ });
125
+
126
+ export { FormField };
127
+ //# sourceMappingURL=chunk-TK24HQJJ.js.map
128
+ //# sourceMappingURL=chunk-TK24HQJJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/form-field/form-field.tsx"],"names":[],"mappings":"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","file":"chunk-TK24HQJJ.js","sourcesContent":["import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { AlertCircle } from \"lucide-react\";\nimport {\n Children,\n cloneElement,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useId,\n} from \"react\";\nimport type {\n ComponentPropsWithoutRef,\n ElementRef,\n HTMLAttributes,\n ReactElement,\n ReactNode,\n} from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * FormField — composition wrapper for accessible form rows.\n *\n * Provides context with a generated `id`, so children (Label, Input, Hint,\n * Error) wire themselves via `htmlFor` / `id` / `aria-describedby` without\n * the consumer having to thread IDs manually.\n *\n * Composition:\n * <FormField>\n * <FormField.Label required>Email</FormField.Label>\n * <FormField.Control>\n * <Input type=\"email\" placeholder=\"…\" />\n * </FormField.Control>\n * <FormField.Hint>We never share your email.</FormField.Hint>\n * <FormField.Error>{error}</FormField.Error>\n * </FormField>\n *\n * Errors take precedence over hints (only one of them shows at once).\n */\n\ntype FormFieldSize = \"sm\" | \"md\" | \"lg\";\n\ninterface FormFieldContextValue {\n fieldId: string;\n hintId: string;\n errorId: string;\n hasError: boolean;\n size: FormFieldSize;\n}\n\nconst FormFieldContext = createContext<FormFieldContextValue | null>(null);\n\nfunction useFormField(): FormFieldContextValue {\n const ctx = useContext(FormFieldContext);\n if (!ctx) throw new Error(\"FormField subcomponents must be inside <FormField>.\");\n return ctx;\n}\n\ninterface FormFieldProps extends HTMLAttributes<HTMLDivElement> {\n /** Optional explicit id override. */\n id?: string;\n /** Marks the field as invalid; switches Hint → Error and toggles aria. */\n invalid?: boolean;\n /**\n * Size scale propagated to Label / Hint / Error subparts via Context.\n * Default `md` preserves prior behavior. Subparts do NOT accept a `size`\n * prop of their own — use `className` for granular tweaks (EC-8).\n */\n size?: FormFieldSize;\n}\n\nconst rootGapBySize: Record<FormFieldSize, string> = {\n sm: \"gap-1\",\n md: \"gap-1.5\",\n lg: \"gap-2\",\n};\n\nconst FormFieldRoot = forwardRef<HTMLDivElement, FormFieldProps>(\n ({ className, id: idProp, invalid, size = \"md\", ...props }, ref) => {\n const auto = useId();\n const fieldId = idProp ?? `field-${auto}`;\n const ctx: FormFieldContextValue = {\n fieldId,\n hintId: `${fieldId}-hint`,\n errorId: `${fieldId}-error`,\n hasError: !!invalid,\n size,\n };\n return (\n <FormFieldContext.Provider value={ctx}>\n <div ref={ref} className={cn(\"grid\", rootGapBySize[size], className)} {...props} />\n </FormFieldContext.Provider>\n );\n },\n);\nFormFieldRoot.displayName = \"FormField\";\n\nconst labelFontBySize: Record<FormFieldSize, string> = {\n sm: \"text-label-caps\",\n md: \"text-body-sm\",\n lg: \"text-body-md\",\n};\n\nconst hintFontBySize: Record<FormFieldSize, string> = {\n sm: \"text-label-caps\",\n md: \"text-body-sm\",\n lg: \"text-body-md\",\n};\n\ninterface FormFieldLabelProps extends ComponentPropsWithoutRef<typeof LabelPrimitive.Root> {\n required?: boolean;\n}\n\n// Inlined label markup (was importing `<Label>` from sibling primitive).\n// BLOCKER-001 / D2: form-field stays in primitives/ but cannot cross-import.\n// Uses the same Radix LabelPrimitive primitive that the standalone `<Label>`\n// uses, with identical Tailwind tokens — visual parity is preserved.\nconst FormFieldLabel = forwardRef<ElementRef<typeof LabelPrimitive.Root>, FormFieldLabelProps>(\n ({ className, required, children, ...props }, ref) => {\n const { fieldId, size } = useFormField();\n return (\n <LabelPrimitive.Root\n ref={ref}\n htmlFor={fieldId}\n className={cn(\n \"inline-flex items-center gap-1 font-medium font-sans text-foreground\",\n labelFontBySize[size],\n \"peer-disabled:cursor-not-allowed peer-disabled:opacity-60\",\n className,\n )}\n {...props}\n >\n {children}\n {required ? (\n <span className=\"text-destructive\" aria-hidden=\"true\">\n *\n </span>\n ) : null}\n </LabelPrimitive.Root>\n );\n },\n);\nFormFieldLabel.displayName = \"FormField.Label\";\n\nconst FormFieldControl = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ children, ...props }, ref) => {\n const { fieldId, hintId, errorId, hasError } = useFormField();\n const described = hasError ? errorId : hintId;\n // Children.only enforces exactly one child element (the form control) so we\n // can safely clone it with the wiring props (id + aria-describedby + aria-invalid).\n // The previous implementation spread the element object directly which relied\n // on React's internal `$$typeof` invariant and silently dropped `ref` — the\n // cloneElement path preserves both `ref` and `key`.\n const only = Children.only(children) as ReactElement;\n const cloned = isValidElement(only)\n ? cloneElement(only, {\n id: fieldId,\n \"aria-describedby\": described,\n \"aria-invalid\": hasError || undefined,\n } as Partial<typeof only.props>)\n : only;\n return (\n <div ref={ref} {...props}>\n {cloned}\n </div>\n );\n },\n);\nFormFieldControl.displayName = \"FormField.Control\";\n\nconst FormFieldHint = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { hintId, hasError, size } = useFormField();\n if (hasError) return null;\n return (\n <p\n ref={ref}\n id={hintId}\n className={cn(\"text-muted-foreground\", hintFontBySize[size], className)}\n {...props}\n >\n {children}\n </p>\n );\n },\n);\nFormFieldHint.displayName = \"FormField.Hint\";\n\nconst FormFieldError = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, children, ...props }, ref) => {\n const { errorId, hasError, size } = useFormField();\n if (!hasError) return null;\n return (\n <p\n ref={ref}\n id={errorId}\n role=\"alert\"\n className={cn(\"flex items-center gap-1 text-destructive\", hintFontBySize[size], className)}\n {...props}\n >\n <AlertCircle className=\"size-3.5 shrink-0\" aria-hidden=\"true\" />\n {children as ReactNode}\n </p>\n );\n },\n);\nFormFieldError.displayName = \"FormField.Error\";\n\nconst FormField = /*#__PURE__*/ Object.assign(FormFieldRoot, {\n Label: FormFieldLabel,\n Control: FormFieldControl,\n Hint: FormFieldHint,\n Error: FormFieldError,\n});\n\nexport { FormField };\n"]}