@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
package/CHANGELOG.md CHANGED
@@ -7,6 +7,146 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.10.0-next.0] - 2026-05-25
11
+
12
+ Minor (additive, zero breaking change) — fixes a publishing-pipeline
13
+ defect surfaced by the TheoCloud dashboard bundle audit
14
+ (`MEET-ASYNC-AMENDMENT-2026-05-24-002`). Since 0.7.0, the ~100 subpath
15
+ exports declared in `package.json#exports` (`./alert`, `./button`,
16
+ `./table`, …) were **cosmetic** — each pointed at the same
17
+ `./dist/index.js` (the 417 KB barrel). `import { Alert } from
18
+ "@usetheo/ui/alert"` resolved byte-identical to
19
+ `import { Alert } from "@usetheo/ui"`, and barrel tree-shaking
20
+ failed in consumers because of `forwardRef` side-effect bailouts,
21
+ `Object.assign` compound components, and `sideEffects: ["**/*.css"]`
22
+ conservatism. TheoCloud measured **0 KB dropped** from the 240 KB
23
+ minified barrel regardless of how few exports were used.
24
+
25
+ This release extends the per-component dist pattern that already
26
+ worked for `whiteboard` / `slide` / `slide-deck` to every primitive
27
+ and composite. The barrel `import { X } from "@usetheo/ui"` is
28
+ preserved unchanged (additive migration shape, same as `@mui/material`).
29
+
30
+ Plan: `.claude/knowledge-base/plans/subpath-tree-shaking-plan.md`
31
+ ADR: `.claude/knowledge-base/decisions/subpath-exports-per-component.md`
32
+ Brief: `theo/docs/handoff/2026-05-24-theo-ui-subpath-tree-shaking-brief-4.md`
33
+
34
+ ### Changed
35
+
36
+ - **`tsup.config.ts`** auto-globs primitive + composite entries from
37
+ `src/components/{primitives,composites}/<name>/index.ts` at
38
+ config-load time. 87 primitives + 26 composites — 3 excluded
39
+ (`whiteboard`, `slide`, `slide-deck` retain their existing manual
40
+ isolated entries). New components ship subpath-shaped automatically
41
+ without `package.json#exports` hand-maintenance.
42
+ - **`splitting: true`** in tsup now dedupes shared utilities (`cn`,
43
+ forwardRef wrappers, theme helpers, lucide icon imports) into
44
+ `dist/chunk-<hash>.js` instead of inlining into every per-component
45
+ bundle. ~119 shared chunks emitted; barrel + per-component dist
46
+ files re-export from them.
47
+ - **`dts: { entry: ... }`** restricted to the barrel + isolated
48
+ engines only (D5 escalation). Generating per-component `.d.ts` for
49
+ all 114 entries OOMs the rollup-plugin-dts worker thread even with
50
+ `NODE_OPTIONS=--max-old-space-size=8192` (the flag does not
51
+ propagate to workers). Per-component subpaths resolve their `types`
52
+ field at the barrel `dist/index.d.ts` — TypeScript still finds
53
+ `Alert`/`AlertProps` from `import { Alert } from "@usetheo/ui/alert"`.
54
+ Trade-off: consumers' typecheck pulls the full type graph regardless
55
+ of subpath, but the JS dist (where tree-shaking matters) is
56
+ per-component and small.
57
+
58
+ ### Added
59
+
60
+ - **`scripts/regen-subpath-exports.ts`** — runs after `tsup` and
61
+ rewrites `package.json#exports` so per-component subpaths point at
62
+ their own dist file. Refuses to write if any non-root entry still
63
+ points at `./dist/index.js` (permanent guard against the cosmetic-
64
+ subpath defect coming back). Verifies that every source-tree
65
+ component has a matching dist entry (EC-2 guard against silent
66
+ partial builds). Wired into `package.json#scripts.build` so
67
+ `pnpm build` produces a consistent `dist/` + `exports` map every
68
+ time.
69
+ - **`scripts/sync-exports.ts`** updated to resolve each component's
70
+ layer (primitives vs composites) via filesystem and emit the
71
+ correct per-component dist path. Stays the source-of-truth for
72
+ the structure gate; `regen-subpath-exports.ts` is the same logic
73
+ applied post-build against the actual dist tree.
74
+
75
+ ### Bundle deltas
76
+
77
+ | File | Before (0.9.0-next.0) | After (0.10.0-next.0) | Δ |
78
+ |---|---|---|---|
79
+ | `dist/index.js` | 417,113 B | 49,018 B | **−88.2%** |
80
+ | `dist/slide/index.js` | 23,825 B | 400 B | −98.3% |
81
+ | `dist/slide-deck/index.js` | 58,413 B | 35,795 B | −38.7% |
82
+ | `dist/components.css` | 89,654 B | 93,069 B | +3.8% (within ±5%) |
83
+ | `dist/styles.css` | 4,720 B | 4,720 B | 0% |
84
+ | **Build time** | 17.72 s | 15.98 s | −10% |
85
+ | **Tarball (`pnpm pack`)** | 1.1 MB | 1.2 MB | +9% |
86
+ | **New per-component dist files** | 0 | 113 | + |
87
+ | **Shared chunks (`dist/chunk-*.js`)** | 0 | 119 | + |
88
+
89
+ The barrel shrank because all component code now lives in shared
90
+ chunks. Consumer-side bundle delta against TheoCloud dashboard:
91
+ **TBD — see Phase 8 evidence file** at
92
+ `.claude/knowledge-base/baselines/2026-05-25-post-subpath/theocloud-bundle-delta.txt`
93
+ once measured.
94
+
95
+ ### Migration (consumer-side, opt-in)
96
+
97
+ ```diff
98
+ - import { Card, Button, Alert } from "@usetheo/ui";
99
+ + import { Card } from "@usetheo/ui/card";
100
+ + import { Button } from "@usetheo/ui/button";
101
+ + import { Alert } from "@usetheo/ui/alert";
102
+ ```
103
+
104
+ The barrel import keeps working — migration is gradual, file by
105
+ file. CSS, themes, and isolated engines stay barrel-imported:
106
+ `import { ThemeProvider, violetForge } from "@usetheo/ui"`,
107
+ `import "@usetheo/ui/styles.css"`.
108
+
109
+ ## [0.9.0-next.0] - 2026-05-23
110
+
111
+ Minor — adds the two deferred primitives revealed by the Brief #3
112
+ review (`Alert` + `Pagination`). Both are additive; zero breaking
113
+ change. The release closes the lower-priority follow-ups left over
114
+ from Briefs #1/#2 — `Alert` replaces the consumer's 27-LOC
115
+ `<VerificationBanner>` composition; `Pagination` is forward-positioned
116
+ for when `<Table>` (0.8) starts paginating Billing / Audit / Team
117
+ data at scale.
118
+
119
+ Plan: filed as Brief #3 in
120
+ `theo/docs/handoff/2026-05-23-theo-ui-cloud-dashboard-gaps-brief-3.md`.
121
+
122
+ ### Added
123
+
124
+ - **`<Alert>` primitive (NEW)** — persistent inline notice. Four
125
+ intents: `info` (Info icon, primary token), `success`
126
+ (CheckCircle2, success), `warning` (TriangleAlert, warning),
127
+ `destructive` (AlertCircle, destructive). Optional `title`,
128
+ `description`, right-aligned `action` slot (consumer-provided
129
+ ReactNode), and `onDismiss` handler (renders an `X` button).
130
+ `destructive` intent renders `role="alert"` (assertive
131
+ announcement); other intents render `role="status"` (polite) —
132
+ matches WAI-ARIA conventions for status messaging. Distinct
133
+ from `Toast` (transient + corner) and `EmptyState` (centered
134
+ card). 13 unit tests + 5 Ladle stories. Brief #3 consumer:
135
+ TheoCloud `<VerificationBanner>` → 3-line `<Alert>`.
136
+ - **`<Pagination>` primitive (NEW)** — accessible page-number
137
+ navigation. Renders `<nav aria-label="Pagination">` with
138
+ first / prev / numbers / next / last buttons + visual ellipses
139
+ when `totalPages` exceeds the visible range. Active page carries
140
+ `aria-current="page"`. Keyboard nav (`ArrowLeft` / `ArrowRight` /
141
+ `Home` / `End`) on the nav element. Configurable `siblingCount`
142
+ (default 1) + optional `showJumpButtons` (default true) +
143
+ `size` (`sm | md`). Returns `null` when `totalPages <= 1`. Also
144
+ exports a pure `computePageRange(currentPage, totalPages,
145
+ siblingCount)` helper for unit-testing the range logic in
146
+ isolation — most pagination bugs live in that function. 21 unit
147
+ tests (6 on `computePageRange` alone) + 6 Ladle stories.
148
+ Forward-positioned for `<Table>` v2 consumers.
149
+
10
150
  ## [0.8.0-next.0] - 2026-05-23
11
151
 
12
152
  Minor — adds eight cross-cutting primitives revealed by the systematic
package/README.md CHANGED
@@ -13,8 +13,8 @@ A React component library built for AI agent surfaces and cloud dashboards. **10
13
13
  <!-- BEGIN:counts -->
14
14
  [![license](https://img.shields.io/badge/license-Apache--2.0-7C3AED?style=flat-square)](./LICENSE)
15
15
  [![react](https://img.shields.io/badge/react-18+-7C3AED?style=flat-square&logo=react&logoColor=white)](https://react.dev)
16
- [![tests](https://img.shields.io/badge/tests-1250%20passing-success?style=flat-square)](#quality-gates)
17
- [![components](https://img.shields.io/badge/components-132-7C3AED?style=flat-square)](#component-catalog)
16
+ [![tests](https://img.shields.io/badge/tests-1281%20passing-success?style=flat-square)](#quality-gates)
17
+ [![components](https://img.shields.io/badge/components-134-7C3AED?style=flat-square)](#component-catalog)
18
18
  [![shadcn](https://img.shields.io/badge/shadcn-compatible-000?style=flat-square)](https://ui.shadcn.com/docs/registry)
19
19
  <!-- END:counts -->
20
20
 
@@ -133,32 +133,32 @@ import { ThemeProvider, ThemeScript } from "@usetheo/ui";
133
133
  ## Component catalog
134
134
 
135
135
  <!-- BEGIN:component-catalog-intro -->
136
- **132 components**, organized by mechanical rule: a *primitive* imports no other `@usetheo/ui` component; a *composite* does.
136
+ **134 components**, organized by mechanical rule: a *primitive* imports no other `@usetheo/ui` component; a *composite* does.
137
137
  <!-- END:component-catalog-intro -->
138
138
 
139
139
  <details>
140
140
  <summary>
141
141
  <!-- BEGIN:primitives-count -->
142
- **Primitives** (87) — building blocks
142
+ **Primitives** (89) — building blocks
143
143
  <!-- END:primitives-count -->
144
144
  </summary>
145
145
 
146
146
  <!-- BEGIN:primitives -->
147
147
  `AgentErrorCard` · `AgentEvent` · `AgentHandoff` · `AgentProfile` · `AgentStartingState` · `AgentStreaming`
148
- `ArtifactPreview` · `AttachmentChip` · `AuditLogEntry` · `AutoCompactNotice` · `Avatar` · `Badge`
149
- `BrowserControls` · `BuildLogStream` · `Button` · `CapabilityIndicator` · `Card` · `ChatThread`
150
- `Checkbox` · `ContextCard` · `ContextWindowBar` · `CopyButton` · `CostMeter` · `CreatedFilesCard`
151
- `CronJobCard` · `DangerZone` · `Dialog` · `DiffViewer` · `EmptyState` · `FolderContextCard`
152
- `FolderSelector` · `FormField` · `HookConfig` · `HookEventLog` · `Input` · `IntentSelector`
153
- `Label` · `LaneBoard` · `LoginSplit` · `MCPServerCard` · `MemoryEditor` · `MentionMenu`
154
- `MetricsPanel` · `ModelCard` · `ModelSelector` · `PermissionMatrix` · `PlanBadge` · `Progress`
155
- `ProgressChecklist` · `ProjectSwitcher` · `QuickActionChips` · `RadioGroup` · `RecentFoldersList` · `RuleCard`
156
- `RunStats` · `RunningTasksPanel` · `ScrollArea` · `Select` · `SessionListItem` · `SessionTimeline`
157
- `Sheet` · `Sidebar` · `Skeleton` · `SkillCard` · `SocialAuthRow` · `StatTile`
158
- `StatusDot` · `StepsRail` · `SubAgentDispatch` · `Switch` · `SystemPromptEditor` · `Table`
159
- `Tabs` · `TaskNode` · `TaskPlan` · `TerminalPanel` · `Textarea` · `Timestamp`
160
- `Toast` · `Toaster` · `TokenUsageChart` · `ToolCall` · `ToolCallCard` · `ToolResult`
161
- `ToolsList` · `Tooltip` · `TopNav`
148
+ `Alert` · `ArtifactPreview` · `AttachmentChip` · `AuditLogEntry` · `AutoCompactNotice` · `Avatar`
149
+ `Badge` · `BrowserControls` · `BuildLogStream` · `Button` · `CapabilityIndicator` · `Card`
150
+ `ChatThread` · `Checkbox` · `ContextCard` · `ContextWindowBar` · `CopyButton` · `CostMeter`
151
+ `CreatedFilesCard` · `CronJobCard` · `DangerZone` · `Dialog` · `DiffViewer` · `EmptyState`
152
+ `FolderContextCard` · `FolderSelector` · `FormField` · `HookConfig` · `HookEventLog` · `Input`
153
+ `IntentSelector` · `Label` · `LaneBoard` · `LoginSplit` · `MCPServerCard` · `MemoryEditor`
154
+ `MentionMenu` · `MetricsPanel` · `ModelCard` · `ModelSelector` · `Pagination` · `PermissionMatrix`
155
+ `PlanBadge` · `Progress` · `ProgressChecklist` · `ProjectSwitcher` · `QuickActionChips` · `RadioGroup`
156
+ `RecentFoldersList` · `RuleCard` · `RunStats` · `RunningTasksPanel` · `ScrollArea` · `Select`
157
+ `SessionListItem` · `SessionTimeline` · `Sheet` · `Sidebar` · `Skeleton` · `SkillCard`
158
+ `SocialAuthRow` · `StatTile` · `StatusDot` · `StepsRail` · `SubAgentDispatch` · `Switch`
159
+ `SystemPromptEditor` · `Table` · `Tabs` · `TaskNode` · `TaskPlan` · `TerminalPanel`
160
+ `Textarea` · `Timestamp` · `Toast` · `Toaster` · `TokenUsageChart` · `ToolCall`
161
+ `ToolCallCard` · `ToolResult` · `ToolsList` · `Tooltip` · `TopNav`
162
162
  <!-- END:primitives -->
163
163
 
164
164
  </details>
@@ -0,0 +1,106 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import { X } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
6
+
7
+ var Overlay2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8
+ DialogPrimitive.Overlay,
9
+ {
10
+ ref,
11
+ className: cn(
12
+ "fixed inset-0 z-50 bg-background/80",
13
+ "data-[state=open]:fade-in-0 data-[state=open]:animate-in",
14
+ "data-[state=closed]:fade-out-0 data-[state=closed]:animate-out",
15
+ className
16
+ ),
17
+ ...props
18
+ }
19
+ ));
20
+ Overlay2.displayName = "Dialog.Overlay";
21
+ var Content2 = forwardRef(
22
+ ({ className, children, hideCloseButton, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
23
+ /* @__PURE__ */ jsx(Overlay2, {}),
24
+ /* @__PURE__ */ jsxs(
25
+ DialogPrimitive.Content,
26
+ {
27
+ ref,
28
+ className: cn(
29
+ "-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg",
30
+ "rounded-2xl border bg-card text-card-foreground shadow-lg",
31
+ "data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
32
+ "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out",
33
+ "duration-base",
34
+ className
35
+ ),
36
+ ...props,
37
+ children: [
38
+ children,
39
+ !hideCloseButton ? /* @__PURE__ */ jsxs(
40
+ DialogPrimitive.Close,
41
+ {
42
+ className: cn(
43
+ "absolute top-4 right-4 rounded-md p-1 opacity-70",
44
+ "transition-opacity hover:opacity-100",
45
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
46
+ "disabled:pointer-events-none"
47
+ ),
48
+ children: [
49
+ /* @__PURE__ */ jsx(X, { className: "size-4" }),
50
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
51
+ ]
52
+ }
53
+ ) : null
54
+ ]
55
+ }
56
+ )
57
+ ] })
58
+ );
59
+ Content2.displayName = "Dialog.Content";
60
+ var Header = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-1.5 p-6 pb-3 text-left", className), ...props });
61
+ Header.displayName = "Dialog.Header";
62
+ var Body = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("px-6 pb-6 text-body-md text-muted-foreground", className), ...props });
63
+ Body.displayName = "Dialog.Body";
64
+ var Footer = ({ className, ...props }) => /* @__PURE__ */ jsx(
65
+ "div",
66
+ {
67
+ className: cn("flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end", className),
68
+ ...props
69
+ }
70
+ );
71
+ Footer.displayName = "Dialog.Footer";
72
+ var Title2 = forwardRef(
73
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
74
+ DialogPrimitive.Title,
75
+ {
76
+ ref,
77
+ className: cn("font-display text-foreground text-title-lg tracking-tight", className),
78
+ ...props
79
+ }
80
+ )
81
+ );
82
+ Title2.displayName = "Dialog.Title";
83
+ var Description2 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
84
+ DialogPrimitive.Description,
85
+ {
86
+ ref,
87
+ className: cn("text-body-sm text-muted-foreground", className),
88
+ ...props
89
+ }
90
+ ));
91
+ Description2.displayName = "Dialog.Description";
92
+ var Dialog = /* @__PURE__ */ Object.assign(DialogPrimitive.Root, {
93
+ Trigger: DialogPrimitive.Trigger,
94
+ Close: DialogPrimitive.Close,
95
+ Content: Content2,
96
+ Overlay: Overlay2,
97
+ Header,
98
+ Body,
99
+ Footer,
100
+ Title: Title2,
101
+ Description: Description2
102
+ });
103
+
104
+ export { Dialog };
105
+ //# sourceMappingURL=chunk-2UJROWAG.js.map
106
+ //# sourceMappingURL=chunk-2UJROWAG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/dialog/dialog.tsx"],"names":["Overlay","Content","Title","Description"],"mappings":";;;;;;AA2BA,IAAMA,QAAAA,GAAU,WAGd,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,OAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qCAAA;AAAA,MACA,0DAAA;AAAA,MACA,gEAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CACD,CAAA;AACDA,QAAAA,CAAQ,WAAA,GAAc,gBAAA;AAMtB,IAAMC,QAAAA,GAAU,UAAA;AAAA,EACd,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,eAAA,EAAiB,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnD,IAAA,CAAiB,eAAA,CAAA,MAAA,EAAhB,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAACD,UAAA,EAAQ,CAAA;AAAA,oBACT,IAAA;AAAA,MAAiB,eAAA,CAAA,OAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,+EAAA;AAAA,UACA,2DAAA;AAAA,UACA,uFAAA;AAAA,UACA,gGAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA,CAAC,eAAA,mBACA,IAAA;AAAA,YAAiB,eAAA,CAAA,KAAA;AAAA,YAAhB;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,kDAAA;AAAA,gBACA,sCAAA;AAAA,gBACA,oIAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,QAAA,EAAS,CAAA;AAAA,gCACtB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK;AAAA;AAAA;AAAA,WACjC,GACE;AAAA;AAAA;AAAA;AACN,GAAA,EACF;AAEJ,CAAA;AACAC,QAAAA,CAAQ,WAAA,GAAc,gBAAA;AAEtB,IAAM,MAAA,GAAS,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBACpC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAExF,MAAA,CAAO,WAAA,GAAc,eAAA;AAErB,IAAM,IAAA,GAAO,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBAClC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,8CAAA,EAAgD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAE5F,IAAA,CAAK,WAAA,GAAc,aAAA;AAEnB,IAAM,SAAS,CAAC,EAAE,SAAA,EAAW,GAAG,OAAM,qBACpC,GAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,EAAA,CAAG,iEAAA,EAAmE,SAAS,CAAA;AAAA,IACzF,GAAG;AAAA;AACN,CAAA;AAEF,MAAA,CAAO,WAAA,GAAc,eAAA;AAIrB,IAAMC,MAAAA,GAAQ,UAAA;AAAA,EACZ,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,IAAS,GAAA,qBACxB,GAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,2DAAA,EAA6D,SAAS,CAAA;AAAA,MACnF,GAAG;AAAA;AAAA;AAGV,CAAA;AACAA,MAAAA,CAAM,WAAA,GAAc,cAAA;AAEpB,IAAMC,YAAAA,GAAc,WAGlB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAAiB,eAAA,CAAA,WAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,IAC5D,GAAG;AAAA;AACN,CACD,CAAA;AACDA,YAAAA,CAAY,WAAA,GAAc,oBAAA;AAE1B,IAAM,MAAA,mBAAuB,MAAA,CAAO,MAAA,CAAuB,eAAA,CAAA,IAAA,EAAM;AAAA,EAC/D,OAAA,EAAyB,eAAA,CAAA,OAAA;AAAA,EACzB,KAAA,EAAuB,eAAA,CAAA,KAAA;AAAA,EACvB,OAAA,EAAAF,QAAAA;AAAA,EACA,OAAA,EAAAD,QAAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,EAAAE,MAAAA;AAAA,EACA,WAAA,EAAAC;AACF,CAAC","file":"chunk-2UJROWAG.js","sourcesContent":["import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Dialog — modal overlay built on Radix Dialog.\n *\n * Composition:\n * <Dialog>\n * <Dialog.Trigger>Open</Dialog.Trigger>\n * <Dialog.Content>\n * <Dialog.Header>\n * <Dialog.Title>…</Dialog.Title>\n * <Dialog.Description>…</Dialog.Description>\n * </Dialog.Header>\n * <Dialog.Body>…</Dialog.Body>\n * <Dialog.Footer>…</Dialog.Footer>\n * </Dialog.Content>\n * </Dialog>\n *\n * Overlay is a theme-neutral backdrop (`bg-background/80`) with no glass blur\n * (anti-glass guideline). Content uses card surface, rounded-2xl, shadow-lg\n * + slight glow on enter.\n */\n\nconst Overlay = forwardRef<\n ElementRef<typeof DialogPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-background/80\",\n \"data-[state=open]:fade-in-0 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:animate-out\",\n className,\n )}\n {...props}\n />\n));\nOverlay.displayName = \"Dialog.Overlay\";\n\ninterface ContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n hideCloseButton?: boolean;\n}\n\nconst Content = forwardRef<ElementRef<typeof DialogPrimitive.Content>, ContentProps>(\n ({ className, children, hideCloseButton, ...props }, ref) => (\n <DialogPrimitive.Portal>\n <Overlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"-translate-x-1/2 -translate-y-1/2 fixed top-1/2 left-1/2 z-50 w-full max-w-lg\",\n \"rounded-2xl border bg-card text-card-foreground shadow-lg\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n \"duration-base\",\n className,\n )}\n {...props}\n >\n {children}\n {!hideCloseButton ? (\n <DialogPrimitive.Close\n className={cn(\n \"absolute top-4 right-4 rounded-md p-1 opacity-70\",\n \"transition-opacity hover:opacity-100\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n \"disabled:pointer-events-none\",\n )}\n >\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n ) : null}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n ),\n);\nContent.displayName = \"Dialog.Content\";\n\nconst Header = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"flex flex-col gap-1.5 p-6 pb-3 text-left\", className)} {...props} />\n);\nHeader.displayName = \"Dialog.Header\";\n\nconst Body = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div className={cn(\"px-6 pb-6 text-body-md text-muted-foreground\", className)} {...props} />\n);\nBody.displayName = \"Dialog.Body\";\n\nconst Footer = ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\"flex flex-col-reverse gap-2 p-6 pt-3 sm:flex-row sm:justify-end\", className)}\n {...props}\n />\n);\nFooter.displayName = \"Dialog.Footer\";\n\ntype TitleProps = ComponentPropsWithoutRef<typeof DialogPrimitive.Title>;\n\nconst Title = forwardRef<ElementRef<typeof DialogPrimitive.Title>, TitleProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\"font-display text-foreground text-title-lg tracking-tight\", className)}\n {...props}\n />\n ),\n);\nTitle.displayName = \"Dialog.Title\";\n\nconst Description = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-body-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nDescription.displayName = \"Dialog.Description\";\n\nconst Dialog = /*#__PURE__*/ Object.assign(DialogPrimitive.Root, {\n Trigger: DialogPrimitive.Trigger,\n Close: DialogPrimitive.Close,\n Content,\n Overlay,\n Header,\n Body,\n Footer,\n Title,\n Description,\n});\n\nexport { Dialog };\n"]}
@@ -0,0 +1,68 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ var INTENT_FILL = {
6
+ default: "bg-primary",
7
+ success: "bg-success",
8
+ warning: "bg-warning",
9
+ destructive: "bg-destructive"
10
+ };
11
+ var Progress = forwardRef(
12
+ ({
13
+ className,
14
+ value = 0,
15
+ max = 100,
16
+ intent = "default",
17
+ height = "h-1",
18
+ indeterminate = false,
19
+ ...props
20
+ }, ref) => {
21
+ const clampedMax = Math.max(0, max);
22
+ const clampedValue = Math.min(clampedMax, Math.max(0, value));
23
+ const percent = clampedMax > 0 ? clampedValue / clampedMax * 100 : 0;
24
+ const fillClass = INTENT_FILL[intent];
25
+ return (
26
+ // biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.
27
+ /* @__PURE__ */ jsx(
28
+ "div",
29
+ {
30
+ ref,
31
+ role: "progressbar",
32
+ "aria-valuemin": 0,
33
+ "aria-valuemax": clampedMax,
34
+ "aria-valuenow": indeterminate ? void 0 : clampedValue,
35
+ "aria-busy": indeterminate ? true : void 0,
36
+ className: cn("relative w-full overflow-hidden rounded-full bg-muted", height, className),
37
+ ...props,
38
+ children: indeterminate ? /* @__PURE__ */ jsx(
39
+ "div",
40
+ {
41
+ className: cn(
42
+ "absolute inset-y-0 left-0 w-1/3 rounded-full",
43
+ "animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none",
44
+ "motion-reduce:w-full motion-reduce:opacity-50",
45
+ fillClass
46
+ )
47
+ }
48
+ ) : /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ className: cn(
52
+ "h-full rounded-full transition-[width] duration-base ease-out-soft",
53
+ "motion-reduce:transition-none",
54
+ fillClass
55
+ ),
56
+ style: { width: `${percent}%` }
57
+ }
58
+ )
59
+ }
60
+ )
61
+ );
62
+ }
63
+ );
64
+ Progress.displayName = "Progress";
65
+
66
+ export { Progress };
67
+ //# sourceMappingURL=chunk-2XPWOUEH.js.map
68
+ //# sourceMappingURL=chunk-2XPWOUEH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/progress/progress.tsx"],"names":[],"mappings":";;;;AA+CA,IAAM,WAAA,GAAoE;AAAA,EACxE,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,OAAA,EAAS,YAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAA;AAEA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CACE;AAAA,IACE,SAAA;AAAA,IACA,KAAA,GAAQ,CAAA;AAAA,IACR,GAAA,GAAM,GAAA;AAAA,IACN,MAAA,GAAS,SAAA;AAAA,IACT,MAAA,GAAS,KAAA;AAAA,IACT,aAAA,GAAgB,KAAA;AAAA,IAChB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA;AAClC,IAAA,MAAM,YAAA,GAAe,KAAK,GAAA,CAAI,UAAA,EAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,UAAA,GAAa,CAAA,GAAK,YAAA,GAAe,aAAc,GAAA,GAAM,CAAA;AACrE,IAAA,MAAM,SAAA,GAAY,YAAY,MAAM,CAAA;AAEpC,IAAA;AAAA;AAAA,sBAEE,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,aAAA;AAAA,UACL,eAAA,EAAe,CAAA;AAAA,UACf,eAAA,EAAe,UAAA;AAAA,UACf,eAAA,EAAe,gBAAgB,MAAA,GAAY,YAAA;AAAA,UAC3C,WAAA,EAAW,gBAAgB,IAAA,GAAO,MAAA;AAAA,UAClC,SAAA,EAAW,EAAA,CAAG,uDAAA,EAAyD,MAAA,EAAQ,SAAS,CAAA;AAAA,UACvF,GAAG,KAAA;AAAA,UAEH,QAAA,EAAA,aAAA,mBACC,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,8CAAA;AAAA,gBACA,uFAAA;AAAA,gBACA,+CAAA;AAAA,gBACA;AAAA;AACF;AAAA,WACF,mBAEA,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,EAAA;AAAA,gBACT,oEAAA;AAAA,gBACA,+BAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACA,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAAI;AAAA;AAChC;AAAA;AAEJ;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-2XPWOUEH.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Progress — accessible progress bar primitive.\n *\n * Built on `<div role=\"progressbar\">` (NOT native `<progress>`) so Tailwind\n * classes can style the track + fill cross-browser (Chrome/Safari/Firefox\n * shadow-DOM hooks for `<progress>` diverge). Matches Radix / shadcn /\n * Mantine convention.\n *\n * Variants:\n * - intent: `default` | `success` | `warning` | `destructive` — controls fill color\n * - height: `h-1` (4px, default) | `h-1.5` | `h-2` | `h-3`\n * - indeterminate: animated bar, no value (e.g. \"uploading…\", \"building…\")\n *\n * Composition:\n * <Progress value={42} max={100} intent=\"success\" aria-label=\"Upload\" />\n * <Progress indeterminate aria-label=\"Building\" />\n *\n * A11y:\n * - role=\"progressbar\"\n * - aria-valuenow / aria-valuemin / aria-valuemax (determinate)\n * - aria-busy=\"true\" when indeterminate\n * - Respects `prefers-reduced-motion` (no animation when set)\n *\n * Used by `<UsageMeter>` to render each metric's fill bar, but ships as a\n * standalone primitive for direct consumer use (deploy phase, file upload,\n * build progress, quota fill).\n */\n\nexport interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, \"role\"> {\n /** Current value (0..max). Values outside the range are clamped. */\n value?: number;\n /** Maximum value. Defaults to 100. */\n max?: number;\n /** Visual intent — controls fill color. */\n intent?: \"default\" | \"success\" | \"warning\" | \"destructive\";\n /** Bar height in tailwind units. Defaults to `\"h-1\"` (4px). */\n height?: \"h-1\" | \"h-1.5\" | \"h-2\" | \"h-3\";\n /** When true, animated bar with no value. Omits `aria-valuenow`, adds `aria-busy`. */\n indeterminate?: boolean;\n /** Accessible label. Required if not preceded by an `aria-labelledby` element. */\n \"aria-label\"?: string;\n}\n\nconst INTENT_FILL: Record<NonNullable<ProgressProps[\"intent\"]>, string> = {\n default: \"bg-primary\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n destructive: \"bg-destructive\",\n};\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n className,\n value = 0,\n max = 100,\n intent = \"default\",\n height = \"h-1\",\n indeterminate = false,\n ...props\n },\n ref,\n ) => {\n const clampedMax = Math.max(0, max);\n const clampedValue = Math.min(clampedMax, Math.max(0, value));\n const percent = clampedMax > 0 ? (clampedValue / clampedMax) * 100 : 0;\n const fillClass = INTENT_FILL[intent];\n\n return (\n // biome-ignore lint/a11y/useFocusableInteractive: WAI-ARIA `progressbar` is a status role (https://www.w3.org/TR/wai-aria-1.2/#progressbar) — NOT supposed to be focusable; screen readers announce updates without keyboard navigation.\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={clampedMax}\n aria-valuenow={indeterminate ? undefined : clampedValue}\n aria-busy={indeterminate ? true : undefined}\n className={cn(\"relative w-full overflow-hidden rounded-full bg-muted\", height, className)}\n {...props}\n >\n {indeterminate ? (\n <div\n className={cn(\n \"absolute inset-y-0 left-0 w-1/3 rounded-full\",\n \"animate-[progress-indeterminate_1.4s_ease-in-out_infinite] motion-reduce:animate-none\",\n \"motion-reduce:w-full motion-reduce:opacity-50\",\n fillClass,\n )}\n />\n ) : (\n <div\n className={cn(\n \"h-full rounded-full transition-[width] duration-base ease-out-soft\",\n \"motion-reduce:transition-none\",\n fillClass,\n )}\n style={{ width: `${percent}%` }}\n />\n )}\n </div>\n );\n },\n);\nProgress.displayName = \"Progress\";\n\nexport { Progress };\n"]}
@@ -0,0 +1,42 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Clock, Coins, FileEdit } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var RunStats = forwardRef(
7
+ ({ className, duration, tokens, filesChanged, ...props }, ref) => /* @__PURE__ */ jsxs(
8
+ "div",
9
+ {
10
+ ref,
11
+ className: cn(
12
+ "flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground",
13
+ className
14
+ ),
15
+ ...props,
16
+ children: [
17
+ duration ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
18
+ /* @__PURE__ */ jsx(Clock, { className: "size-3", "aria-hidden": "true" }),
19
+ " ",
20
+ duration
21
+ ] }) : null,
22
+ tokens ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
23
+ /* @__PURE__ */ jsx(Coins, { className: "size-3", "aria-hidden": "true" }),
24
+ " ",
25
+ tokens,
26
+ " tokens"
27
+ ] }) : null,
28
+ filesChanged !== void 0 ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
29
+ /* @__PURE__ */ jsx(FileEdit, { className: "size-3", "aria-hidden": "true" }),
30
+ " ",
31
+ filesChanged,
32
+ " files"
33
+ ] }) : null
34
+ ]
35
+ }
36
+ )
37
+ );
38
+ RunStats.displayName = "RunStats";
39
+
40
+ export { RunStats };
41
+ //# sourceMappingURL=chunk-3GHLNCM3.js.map
42
+ //# sourceMappingURL=chunk-3GHLNCM3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/run-stats/run-stats.tsx"],"names":[],"mappings":";;;;;AAmBA,IAAM,QAAA,GAAW,UAAA;AAAA,EACf,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,QAAQ,YAAA,EAAc,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxD,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,gFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE;AAAA,SAAA,EACnD,CAAA,GACE,IAAA;AAAA,QACH,MAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,MAAA;AAAA,UAAO;AAAA,SAAA,EAC1D,CAAA,GACE,IAAA;AAAA,QACH,YAAA,KAAiB,MAAA,mBAChB,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EACd,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,UAAE,GAAA;AAAA,UAAE,YAAA;AAAA,UAAa;AAAA,SAAA,EACnE,CAAA,GACE;AAAA;AAAA;AAAA;AAGV;AACA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-3GHLNCM3.js","sourcesContent":["import { Clock, Coins, FileEdit } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface RunStatsProps extends HTMLAttributes<HTMLDivElement> {\n duration?: string;\n /** Formatted token count, e.g. \"35.7k\". */\n tokens?: string;\n /** Number of files changed in the run. */\n filesChanged?: number;\n}\n\n/**\n * RunStats — inline metric row shown after an agent run.\n *\n * Visual: muted bullet-separated row with clock + tokens + files-changed icons.\n * All optional — the component skips entries that aren't provided.\n */\nconst RunStats = forwardRef<HTMLDivElement, RunStatsProps>(\n ({ className, duration, tokens, filesChanged, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-wrap items-center gap-3 font-mono text-code-sm text-muted-foreground\",\n className,\n )}\n {...props}\n >\n {duration ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Clock className=\"size-3\" aria-hidden=\"true\" /> {duration}\n </span>\n ) : null}\n {tokens ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <Coins className=\"size-3\" aria-hidden=\"true\" /> {tokens} tokens\n </span>\n ) : null}\n {filesChanged !== undefined ? (\n <span className=\"inline-flex items-center gap-1.5\">\n <FileEdit className=\"size-3\" aria-hidden=\"true\" /> {filesChanged} files\n </span>\n ) : null}\n </div>\n ),\n);\nRunStats.displayName = \"RunStats\";\n\nexport { RunStats };\n"]}
@@ -0,0 +1,48 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as SwitchPrimitive from '@radix-ui/react-switch';
3
+ import { cva } from 'class-variance-authority';
4
+ import { forwardRef } from 'react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var switchVariants = cva(
8
+ [
9
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent",
10
+ "transition-[background-color,box-shadow] duration-base ease-out-soft",
11
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
12
+ "data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]",
13
+ "data-[state=unchecked]:bg-muted",
14
+ "disabled:cursor-not-allowed disabled:opacity-50"
15
+ ],
16
+ {
17
+ variants: {
18
+ size: {
19
+ sm: "h-4 w-7",
20
+ md: "h-5 w-9",
21
+ lg: "h-6 w-11"
22
+ }
23
+ },
24
+ defaultVariants: { size: "md" }
25
+ }
26
+ );
27
+ var thumbClassBySize = {
28
+ sm: "size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5",
29
+ md: "size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5",
30
+ lg: "size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5"
31
+ };
32
+ var Switch = forwardRef(
33
+ ({ className, size, ...props }, ref) => /* @__PURE__ */ jsx(SwitchPrimitive.Root, { ref, className: cn(switchVariants({ size }), className), ...props, children: /* @__PURE__ */ jsx(
34
+ SwitchPrimitive.Thumb,
35
+ {
36
+ className: cn(
37
+ "pointer-events-none block rounded-full bg-card shadow-sm",
38
+ "transition-transform duration-base ease-out-soft",
39
+ thumbClassBySize[size ?? "md"]
40
+ )
41
+ }
42
+ ) })
43
+ );
44
+ Switch.displayName = "Switch";
45
+
46
+ export { Switch };
47
+ //# sourceMappingURL=chunk-3HOXC25T.js.map
48
+ //# sourceMappingURL=chunk-3HOXC25T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/switch/switch.tsx"],"names":[],"mappings":";;;;;;AAgBA,IAAM,cAAA,GAAiB,GAAA;AAAA,EACrB;AAAA,IACE,8FAAA;AAAA,IACA,sEAAA;AAAA,IACA,0IAAA;AAAA,IACA,gGAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,IAAA,EAAM;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI,SAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB,EAAE,IAAA,EAAM,IAAA;AAAK;AAElC,CAAA;AAEA,IAAM,gBAAA,GAA6F;AAAA,EACjG,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI,kFAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAMA,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,IAAA,EAAM,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC9B,GAAA,CAAiB,eAAA,CAAA,IAAA,EAAhB,EAAqB,KAAU,SAAA,EAAW,EAAA,CAAG,eAAe,EAAE,IAAA,EAAM,CAAA,EAAG,SAAS,CAAA,EAAI,GAAG,KAAA,EACtF,QAAA,kBAAA,GAAA;AAAA,IAAiB,eAAA,CAAA,KAAA;AAAA,IAAhB;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,0DAAA;AAAA,QACA,kDAAA;AAAA,QACA,gBAAA,CAAiB,QAAQ,IAAI;AAAA;AAC/B;AAAA,GACF,EACF;AAEJ;AACA,MAAA,CAAO,WAAA,GAAc,QAAA","file":"chunk-3HOXC25T.js","sourcesContent":["import * as SwitchPrimitive from \"@radix-ui/react-switch\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Switch — built on Radix Switch. Used for binary toggles (autoaccept,\n * dark mode preview, feature flags).\n *\n * Off-state uses --muted, on-state uses --primary with a subtle glow shadow\n * to mark \"this is active\" in the violet brand language.\n *\n * The `size` prop accepts `\"sm\" | \"md\" | \"lg\"`. Default `md` preserves the\n * 20×36 track from before this prop existed.\n */\nconst switchVariants = cva(\n [\n \"peer inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent\",\n \"transition-[background-color,box-shadow] duration-base ease-out-soft\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_0_8px_hsl(var(--primary)/0.35)]\",\n \"data-[state=unchecked]:bg-muted\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n ],\n {\n variants: {\n size: {\n sm: \"h-4 w-7\",\n md: \"h-5 w-9\",\n lg: \"h-6 w-11\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\nconst thumbClassBySize: Record<NonNullable<VariantProps<typeof switchVariants>[\"size\"]>, string> = {\n sm: \"size-3 data-[state=checked]:translate-x-3 data-[state=unchecked]:translate-x-0.5\",\n md: \"size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5\",\n lg: \"size-5 data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0.5\",\n};\n\ninterface SwitchProps\n extends ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>,\n VariantProps<typeof switchVariants> {}\n\nconst Switch = forwardRef<ElementRef<typeof SwitchPrimitive.Root>, SwitchProps>(\n ({ className, size, ...props }, ref) => (\n <SwitchPrimitive.Root ref={ref} className={cn(switchVariants({ size }), className)} {...props}>\n <SwitchPrimitive.Thumb\n className={cn(\n \"pointer-events-none block rounded-full bg-card shadow-sm\",\n \"transition-transform duration-base ease-out-soft\",\n thumbClassBySize[size ?? \"md\"],\n )}\n />\n </SwitchPrimitive.Root>\n ),\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch, switchVariants };\n"]}
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ var SocialAuthRow = forwardRef(
6
+ ({ className, providers, onSelect, vertical, ...props }, ref) => /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ ref,
10
+ className: cn(
11
+ "grid gap-2",
12
+ vertical ? "grid-cols-1" : `grid-cols-${Math.min(providers.length, 4)}`,
13
+ className
14
+ ),
15
+ style: !vertical ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` } : void 0,
16
+ ...props,
17
+ children: providers.map((p) => {
18
+ const Icon = p.icon;
19
+ return /* @__PURE__ */ jsxs(
20
+ "button",
21
+ {
22
+ type: "button",
23
+ onClick: () => onSelect?.(p.id),
24
+ className: cn(
25
+ "inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card",
26
+ "px-4 font-medium font-sans text-body-sm text-foreground",
27
+ "transition-colors duration-base ease-out-soft",
28
+ "hover:bg-muted",
29
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
30
+ ),
31
+ children: [
32
+ /* @__PURE__ */ jsx(Icon, { className: "size-4", "aria-hidden": "true" }),
33
+ p.label
34
+ ]
35
+ },
36
+ p.id
37
+ );
38
+ })
39
+ }
40
+ )
41
+ );
42
+ SocialAuthRow.displayName = "SocialAuthRow";
43
+
44
+ export { SocialAuthRow };
45
+ //# sourceMappingURL=chunk-3QGO5SB3.js.map
46
+ //# sourceMappingURL=chunk-3QGO5SB3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/social-auth-row/social-auth-row.tsx"],"names":[],"mappings":";;;;AA2BA,IAAM,aAAA,GAAgB,UAAA;AAAA,EACpB,CAAC,EAAE,SAAA,EAAW,SAAA,EAAW,UAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACvD,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,YAAA;AAAA,QACA,QAAA,GAAW,gBAAgB,CAAA,UAAA,EAAa,IAAA,CAAK,IAAI,SAAA,CAAU,MAAA,EAAQ,CAAC,CAAC,CAAA,CAAA;AAAA,QACrE;AAAA,OACF;AAAA,MACA,KAAA,EACE,CAAC,QAAA,GACG,EAAE,qBAAqB,CAAA,OAAA,EAAU,SAAA,CAAU,MAAM,CAAA,iBAAA,CAAA,EAAoB,GACrE,MAAA;AAAA,MAEL,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM;AACpB,QAAA,MAAM,OAAO,CAAA,CAAE,IAAA;AACf,QAAA,uBACE,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,QAAA,GAAW,CAAA,CAAE,EAAE,CAAA;AAAA,YAC9B,SAAA,EAAW,EAAA;AAAA,cACT,4FAAA;AAAA,cACA,yDAAA;AAAA,cACA,+CAAA;AAAA,cACA,gBAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,cAC3C,CAAA,CAAE;AAAA;AAAA,WAAA;AAAA,UAZE,CAAA,CAAE;AAAA,SAaT;AAAA,MAEJ,CAAC;AAAA;AAAA;AAGP;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"chunk-3QGO5SB3.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\n\nexport interface SocialProvider {\n id: string;\n label: ReactNode;\n /** Icon component (e.g. brand-specific SVG). */\n icon: IconComponent;\n}\n\ninterface SocialAuthRowProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n providers: SocialProvider[];\n onSelect?: (id: string) => void;\n /**\n * Stack vertically instead of horizontally (single-column flow).\n */\n vertical?: boolean;\n}\n\n/**\n * SocialAuthRow — row of OAuth provider buttons.\n *\n * Stateless; caller wires the redirect on `onSelect`. Buttons share Theo button\n * styling but with provider icon prominently on the left.\n */\nconst SocialAuthRow = forwardRef<HTMLDivElement, SocialAuthRowProps>(\n ({ className, providers, onSelect, vertical, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"grid gap-2\",\n vertical ? \"grid-cols-1\" : `grid-cols-${Math.min(providers.length, 4)}`,\n className,\n )}\n style={\n !vertical\n ? { gridTemplateColumns: `repeat(${providers.length}, minmax(0, 1fr))` }\n : undefined\n }\n {...props}\n >\n {providers.map((p) => {\n const Icon = p.icon;\n return (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => onSelect?.(p.id)}\n className={cn(\n \"inline-flex h-10 items-center justify-center gap-2 rounded-lg border border-border bg-card\",\n \"px-4 font-medium font-sans text-body-sm text-foreground\",\n \"transition-colors duration-base ease-out-soft\",\n \"hover:bg-muted\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n )}\n >\n <Icon className=\"size-4\" aria-hidden=\"true\" />\n {p.label}\n </button>\n );\n })}\n </div>\n ),\n);\nSocialAuthRow.displayName = \"SocialAuthRow\";\n\nexport { SocialAuthRow };\n"]}