@usetheo/ui 0.9.0-next.0 → 0.10.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (474) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/dist/chunk-2UJROWAG.js +106 -0
  3. package/dist/chunk-2UJROWAG.js.map +1 -0
  4. package/dist/chunk-2XPWOUEH.js +68 -0
  5. package/dist/chunk-2XPWOUEH.js.map +1 -0
  6. package/dist/chunk-3GHLNCM3.js +42 -0
  7. package/dist/chunk-3GHLNCM3.js.map +1 -0
  8. package/dist/chunk-3HOXC25T.js +48 -0
  9. package/dist/chunk-3HOXC25T.js.map +1 -0
  10. package/dist/chunk-3QGO5SB3.js +46 -0
  11. package/dist/chunk-3QGO5SB3.js.map +1 -0
  12. package/dist/chunk-47QJVWW2.js +85 -0
  13. package/dist/chunk-47QJVWW2.js.map +1 -0
  14. package/dist/chunk-4L63UW3I.js +35 -0
  15. package/dist/chunk-4L63UW3I.js.map +1 -0
  16. package/dist/chunk-4UUSJJFZ.js +25 -0
  17. package/dist/chunk-4UUSJJFZ.js.map +1 -0
  18. package/dist/chunk-4ZBZBRG5.js +127 -0
  19. package/dist/chunk-4ZBZBRG5.js.map +1 -0
  20. package/dist/chunk-57NXT3OX.js +92 -0
  21. package/dist/chunk-57NXT3OX.js.map +1 -0
  22. package/dist/chunk-5FF5EUZP.js +44 -0
  23. package/dist/chunk-5FF5EUZP.js.map +1 -0
  24. package/dist/chunk-5UGQXB2P.js +714 -0
  25. package/dist/chunk-5UGQXB2P.js.map +1 -0
  26. package/dist/chunk-62FT22CI.js +85 -0
  27. package/dist/chunk-62FT22CI.js.map +1 -0
  28. package/dist/chunk-673R3GSK.js +19 -0
  29. package/dist/chunk-673R3GSK.js.map +1 -0
  30. package/dist/chunk-6VINZJBV.js +128 -0
  31. package/dist/chunk-6VINZJBV.js.map +1 -0
  32. package/dist/chunk-74NZ5U3E.js +145 -0
  33. package/dist/chunk-74NZ5U3E.js.map +1 -0
  34. package/dist/chunk-755NWSNW.js +36 -0
  35. package/dist/chunk-755NWSNW.js.map +1 -0
  36. package/dist/chunk-7GLBWWMW.js +70 -0
  37. package/dist/chunk-7GLBWWMW.js.map +1 -0
  38. package/dist/chunk-7RXYW5VM.js +88 -0
  39. package/dist/chunk-7RXYW5VM.js.map +1 -0
  40. package/dist/chunk-AC4MGCXI.js +92 -0
  41. package/dist/chunk-AC4MGCXI.js.map +1 -0
  42. package/dist/chunk-AEVSVDT6.js +67 -0
  43. package/dist/chunk-AEVSVDT6.js.map +1 -0
  44. package/dist/chunk-AODIMN2N.js +68 -0
  45. package/dist/chunk-AODIMN2N.js.map +1 -0
  46. package/dist/chunk-ATHOPBCA.js +61 -0
  47. package/dist/chunk-ATHOPBCA.js.map +1 -0
  48. package/dist/chunk-AXKBNRZW.js +173 -0
  49. package/dist/chunk-AXKBNRZW.js.map +1 -0
  50. package/dist/chunk-B75MEYNR.js +106 -0
  51. package/dist/chunk-B75MEYNR.js.map +1 -0
  52. package/dist/chunk-BGKA6DI6.js +34 -0
  53. package/dist/chunk-BGKA6DI6.js.map +1 -0
  54. package/dist/chunk-BNQAJGEN.js +88 -0
  55. package/dist/chunk-BNQAJGEN.js.map +1 -0
  56. package/dist/chunk-BP2SETUC.js +101 -0
  57. package/dist/chunk-BP2SETUC.js.map +1 -0
  58. package/dist/chunk-BPUQWMBD.js +79 -0
  59. package/dist/chunk-BPUQWMBD.js.map +1 -0
  60. package/dist/chunk-BVDASR3Y.js +74 -0
  61. package/dist/chunk-BVDASR3Y.js.map +1 -0
  62. package/dist/chunk-CDA6RYOX.js +115 -0
  63. package/dist/chunk-CDA6RYOX.js.map +1 -0
  64. package/dist/chunk-CG7O3A42.js +80 -0
  65. package/dist/chunk-CG7O3A42.js.map +1 -0
  66. package/dist/chunk-CIYGNPKT.js +76 -0
  67. package/dist/chunk-CIYGNPKT.js.map +1 -0
  68. package/dist/chunk-CKXY4FTV.js +59 -0
  69. package/dist/chunk-CKXY4FTV.js.map +1 -0
  70. package/dist/chunk-CVOKZITR.js +82 -0
  71. package/dist/chunk-CVOKZITR.js.map +1 -0
  72. package/dist/chunk-CWFMFKDI.js +82 -0
  73. package/dist/chunk-CWFMFKDI.js.map +1 -0
  74. package/dist/chunk-CWVKSV7S.js +124 -0
  75. package/dist/chunk-CWVKSV7S.js.map +1 -0
  76. package/dist/chunk-CYOLRWOX.js +63 -0
  77. package/dist/chunk-CYOLRWOX.js.map +1 -0
  78. package/dist/chunk-D23LRJT6.js +116 -0
  79. package/dist/chunk-D23LRJT6.js.map +1 -0
  80. package/dist/chunk-DAKIL5PC.js +186 -0
  81. package/dist/chunk-DAKIL5PC.js.map +1 -0
  82. package/dist/chunk-DFADMEJK.js +127 -0
  83. package/dist/chunk-DFADMEJK.js.map +1 -0
  84. package/dist/chunk-E5A7HN6H.js +32 -0
  85. package/dist/chunk-E5A7HN6H.js.map +1 -0
  86. package/dist/chunk-EI63GTN7.js +57 -0
  87. package/dist/chunk-EI63GTN7.js.map +1 -0
  88. package/dist/chunk-EP25QJ4N.js +146 -0
  89. package/dist/chunk-EP25QJ4N.js.map +1 -0
  90. package/dist/chunk-ET44426Q.js +80 -0
  91. package/dist/chunk-ET44426Q.js.map +1 -0
  92. package/dist/chunk-ETEIDY34.js +67 -0
  93. package/dist/chunk-ETEIDY34.js.map +1 -0
  94. package/dist/chunk-EU55O4P7.js +76 -0
  95. package/dist/chunk-EU55O4P7.js.map +1 -0
  96. package/dist/chunk-F436537E.js +104 -0
  97. package/dist/chunk-F436537E.js.map +1 -0
  98. package/dist/chunk-FLBTGNQI.js +86 -0
  99. package/dist/chunk-FLBTGNQI.js.map +1 -0
  100. package/dist/chunk-FUT45NFW.js +46 -0
  101. package/dist/chunk-FUT45NFW.js.map +1 -0
  102. package/dist/chunk-G3LWNTVZ.js +51 -0
  103. package/dist/chunk-G3LWNTVZ.js.map +1 -0
  104. package/dist/chunk-GBJB5WLT.js +58 -0
  105. package/dist/chunk-GBJB5WLT.js.map +1 -0
  106. package/dist/chunk-GIEPEFRX.js +110 -0
  107. package/dist/chunk-GIEPEFRX.js.map +1 -0
  108. package/dist/chunk-GSO7MISR.js +58 -0
  109. package/dist/chunk-GSO7MISR.js.map +1 -0
  110. package/dist/chunk-GUQFYUIC.js +61 -0
  111. package/dist/chunk-GUQFYUIC.js.map +1 -0
  112. package/dist/chunk-H3ANHVEL.js +83 -0
  113. package/dist/chunk-H3ANHVEL.js.map +1 -0
  114. package/dist/chunk-H3VJMFJQ.js +35 -0
  115. package/dist/chunk-H3VJMFJQ.js.map +1 -0
  116. package/dist/chunk-HG4WEERE.js +26 -0
  117. package/dist/chunk-HG4WEERE.js.map +1 -0
  118. package/dist/chunk-HGPBGLNP.js +51 -0
  119. package/dist/chunk-HGPBGLNP.js.map +1 -0
  120. package/dist/chunk-HQFTW7SF.js +141 -0
  121. package/dist/chunk-HQFTW7SF.js.map +1 -0
  122. package/dist/chunk-I7WYM63C.js +170 -0
  123. package/dist/chunk-I7WYM63C.js.map +1 -0
  124. package/dist/chunk-JQXLPVWP.js +74 -0
  125. package/dist/chunk-JQXLPVWP.js.map +1 -0
  126. package/dist/chunk-K5ARID4S.js +26 -0
  127. package/dist/chunk-K5ARID4S.js.map +1 -0
  128. package/dist/chunk-K6RTLPIJ.js +41 -0
  129. package/dist/chunk-K6RTLPIJ.js.map +1 -0
  130. package/dist/chunk-KQNKKV2C.js +56 -0
  131. package/dist/chunk-KQNKKV2C.js.map +1 -0
  132. package/dist/chunk-KRN4NE4U.js +155 -0
  133. package/dist/chunk-KRN4NE4U.js.map +1 -0
  134. package/dist/chunk-L2BI762I.js +82 -0
  135. package/dist/chunk-L2BI762I.js.map +1 -0
  136. package/dist/chunk-LEEH63B2.js +56 -0
  137. package/dist/chunk-LEEH63B2.js.map +1 -0
  138. package/dist/chunk-LHRWVM3G.js +42 -0
  139. package/dist/chunk-LHRWVM3G.js.map +1 -0
  140. package/dist/chunk-LIGWMGXM.js +117 -0
  141. package/dist/chunk-LIGWMGXM.js.map +1 -0
  142. package/dist/chunk-LKYSX3QF.js +104 -0
  143. package/dist/chunk-LKYSX3QF.js.map +1 -0
  144. package/dist/chunk-MCIFB6VS.js +54 -0
  145. package/dist/chunk-MCIFB6VS.js.map +1 -0
  146. package/dist/chunk-NQZYY4LR.js +84 -0
  147. package/dist/chunk-NQZYY4LR.js.map +1 -0
  148. package/dist/chunk-O23LKHUR.js +66 -0
  149. package/dist/chunk-O23LKHUR.js.map +1 -0
  150. package/dist/chunk-PASI2U2R.js +23 -0
  151. package/dist/chunk-PASI2U2R.js.map +1 -0
  152. package/dist/chunk-PPH5NTHV.js +34 -0
  153. package/dist/chunk-PPH5NTHV.js.map +1 -0
  154. package/dist/chunk-PR6OZF6D.js +28 -0
  155. package/dist/chunk-PR6OZF6D.js.map +1 -0
  156. package/dist/chunk-PWXOXPFT.js +142 -0
  157. package/dist/chunk-PWXOXPFT.js.map +1 -0
  158. package/dist/chunk-QB6BNHO3.js +112 -0
  159. package/dist/chunk-QB6BNHO3.js.map +1 -0
  160. package/dist/chunk-QSOIJ6J3.js +91 -0
  161. package/dist/chunk-QSOIJ6J3.js.map +1 -0
  162. package/dist/chunk-QU6RLHYH.js +156 -0
  163. package/dist/chunk-QU6RLHYH.js.map +1 -0
  164. package/dist/chunk-R63ZKLQM.js +45 -0
  165. package/dist/chunk-R63ZKLQM.js.map +1 -0
  166. package/dist/chunk-RTYYJPPE.js +77 -0
  167. package/dist/chunk-RTYYJPPE.js.map +1 -0
  168. package/dist/chunk-RVOBP7PO.js +116 -0
  169. package/dist/chunk-RVOBP7PO.js.map +1 -0
  170. package/dist/chunk-SF6R5VMQ.js +97 -0
  171. package/dist/chunk-SF6R5VMQ.js.map +1 -0
  172. package/dist/chunk-SP4CP5HY.js +57 -0
  173. package/dist/chunk-SP4CP5HY.js.map +1 -0
  174. package/dist/chunk-SWJ4EUOI.js +30 -0
  175. package/dist/chunk-SWJ4EUOI.js.map +1 -0
  176. package/dist/chunk-TK24HQJJ.js +128 -0
  177. package/dist/chunk-TK24HQJJ.js.map +1 -0
  178. package/dist/chunk-TO3UAT6O.js +221 -0
  179. package/dist/chunk-TO3UAT6O.js.map +1 -0
  180. package/dist/chunk-UAYOOTRR.js +77 -0
  181. package/dist/chunk-UAYOOTRR.js.map +1 -0
  182. package/dist/chunk-UDTAMHXW.js +55 -0
  183. package/dist/chunk-UDTAMHXW.js.map +1 -0
  184. package/dist/chunk-UGKI466V.js +12 -0
  185. package/dist/chunk-UGKI466V.js.map +1 -0
  186. package/dist/chunk-UOXU7NDY.js +120 -0
  187. package/dist/chunk-UOXU7NDY.js.map +1 -0
  188. package/dist/chunk-V7OOTVK3.js +106 -0
  189. package/dist/chunk-V7OOTVK3.js.map +1 -0
  190. package/dist/chunk-VI5M7KJ2.js +1022 -0
  191. package/dist/chunk-VI5M7KJ2.js.map +1 -0
  192. package/dist/chunk-VM4RMQQN.js +11 -0
  193. package/dist/chunk-VM4RMQQN.js.map +1 -0
  194. package/dist/chunk-VMMATOPE.js +64 -0
  195. package/dist/chunk-VMMATOPE.js.map +1 -0
  196. package/dist/chunk-W2PVSIW3.js +89 -0
  197. package/dist/chunk-W2PVSIW3.js.map +1 -0
  198. package/dist/chunk-W3DUDZDU.js +88 -0
  199. package/dist/chunk-W3DUDZDU.js.map +1 -0
  200. package/dist/chunk-WKEUU2FU.js +114 -0
  201. package/dist/chunk-WKEUU2FU.js.map +1 -0
  202. package/dist/chunk-WKLW7RC6.js +28 -0
  203. package/dist/chunk-WKLW7RC6.js.map +1 -0
  204. package/dist/chunk-WSJGZNUH.js +111 -0
  205. package/dist/chunk-WSJGZNUH.js.map +1 -0
  206. package/dist/chunk-WVPDQMC2.js +144 -0
  207. package/dist/chunk-WVPDQMC2.js.map +1 -0
  208. package/dist/chunk-WWNH5ENT.js +43 -0
  209. package/dist/chunk-WWNH5ENT.js.map +1 -0
  210. package/dist/chunk-X5L62PXY.js +112 -0
  211. package/dist/chunk-X5L62PXY.js.map +1 -0
  212. package/dist/chunk-XGCV5E6W.js +133 -0
  213. package/dist/chunk-XGCV5E6W.js.map +1 -0
  214. package/dist/chunk-XRKIEL5M.js +72 -0
  215. package/dist/chunk-XRKIEL5M.js.map +1 -0
  216. package/dist/chunk-XUJYEADU.js +80 -0
  217. package/dist/chunk-XUJYEADU.js.map +1 -0
  218. package/dist/chunk-XVYNSIQC.js +116 -0
  219. package/dist/chunk-XVYNSIQC.js.map +1 -0
  220. package/dist/chunk-XWTISHXO.js +54 -0
  221. package/dist/chunk-XWTISHXO.js.map +1 -0
  222. package/dist/chunk-YOGHS4UU.js +202 -0
  223. package/dist/chunk-YOGHS4UU.js.map +1 -0
  224. package/dist/chunk-YRSKXEOD.js +135 -0
  225. package/dist/chunk-YRSKXEOD.js.map +1 -0
  226. package/dist/chunk-ZALLCR7X.js +108 -0
  227. package/dist/chunk-ZALLCR7X.js.map +1 -0
  228. package/dist/chunk-ZDAOHMCW.js +46 -0
  229. package/dist/chunk-ZDAOHMCW.js.map +1 -0
  230. package/dist/chunk-ZESICCKK.js +37 -0
  231. package/dist/chunk-ZESICCKK.js.map +1 -0
  232. package/dist/chunk-ZIKFOD6N.js +87 -0
  233. package/dist/chunk-ZIKFOD6N.js.map +1 -0
  234. package/dist/chunk-ZJRWCQEN.js +76 -0
  235. package/dist/chunk-ZJRWCQEN.js.map +1 -0
  236. package/dist/chunk-ZSRJCIWF.js +24 -0
  237. package/dist/chunk-ZSRJCIWF.js.map +1 -0
  238. package/dist/chunk-ZXPDS6DH.js +3 -0
  239. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  240. package/dist/components.css +1 -1
  241. package/dist/composites/account-menu/index.js +6 -0
  242. package/dist/composites/account-menu/index.js.map +1 -0
  243. package/dist/composites/agent-composer/index.js +7 -0
  244. package/dist/composites/agent-composer/index.js.map +1 -0
  245. package/dist/composites/agent-editor/index.js +10 -0
  246. package/dist/composites/agent-editor/index.js.map +1 -0
  247. package/dist/composites/agent-stream/index.js +12 -0
  248. package/dist/composites/agent-stream/index.js.map +1 -0
  249. package/dist/composites/agent-timeline/index.js +5 -0
  250. package/dist/composites/agent-timeline/index.js.map +1 -0
  251. package/dist/composites/approval-card/index.js +5 -0
  252. package/dist/composites/approval-card/index.js.map +1 -0
  253. package/dist/composites/chat-composer/index.js +6 -0
  254. package/dist/composites/chat-composer/index.js.map +1 -0
  255. package/dist/composites/chat-message/index.js +6 -0
  256. package/dist/composites/chat-message/index.js.map +1 -0
  257. package/dist/composites/code-block/index.js +5 -0
  258. package/dist/composites/code-block/index.js.map +1 -0
  259. package/dist/composites/command-palette/index.js +5 -0
  260. package/dist/composites/command-palette/index.js.map +1 -0
  261. package/dist/composites/confirm-dialog/index.js +7 -0
  262. package/dist/composites/confirm-dialog/index.js.map +1 -0
  263. package/dist/composites/cron-jobs-list/index.js +5 -0
  264. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  265. package/dist/composites/deployment-row/index.js +5 -0
  266. package/dist/composites/deployment-row/index.js.map +1 -0
  267. package/dist/composites/domain-config/index.js +7 -0
  268. package/dist/composites/domain-config/index.js.map +1 -0
  269. package/dist/composites/env-var-editor/index.js +7 -0
  270. package/dist/composites/env-var-editor/index.js.map +1 -0
  271. package/dist/composites/mcp-server-list/index.js +5 -0
  272. package/dist/composites/mcp-server-list/index.js.map +1 -0
  273. package/dist/composites/permission-modal/index.js +6 -0
  274. package/dist/composites/permission-modal/index.js.map +1 -0
  275. package/dist/composites/preview-env-card/index.js +6 -0
  276. package/dist/composites/preview-env-card/index.js.map +1 -0
  277. package/dist/composites/preview-panel/index.js +5 -0
  278. package/dist/composites/preview-panel/index.js.map +1 -0
  279. package/dist/composites/project-card/index.js +6 -0
  280. package/dist/composites/project-card/index.js.map +1 -0
  281. package/dist/composites/rollback-ui/index.js +6 -0
  282. package/dist/composites/rollback-ui/index.js.map +1 -0
  283. package/dist/composites/rule-editor/index.js +11 -0
  284. package/dist/composites/rule-editor/index.js.map +1 -0
  285. package/dist/composites/skill-editor/index.js +11 -0
  286. package/dist/composites/skill-editor/index.js.map +1 -0
  287. package/dist/composites/skills-list/index.js +5 -0
  288. package/dist/composites/skills-list/index.js.map +1 -0
  289. package/dist/composites/task-header/index.js +5 -0
  290. package/dist/composites/task-header/index.js.map +1 -0
  291. package/dist/composites/usage-meter/index.js +5 -0
  292. package/dist/composites/usage-meter/index.js.map +1 -0
  293. package/dist/index.js +130 -9493
  294. package/dist/index.js.map +1 -1
  295. package/dist/primitives/agent-error-card/index.js +5 -0
  296. package/dist/primitives/agent-error-card/index.js.map +1 -0
  297. package/dist/primitives/agent-event/index.js +4 -0
  298. package/dist/primitives/agent-event/index.js.map +1 -0
  299. package/dist/primitives/agent-handoff/index.js +4 -0
  300. package/dist/primitives/agent-handoff/index.js.map +1 -0
  301. package/dist/primitives/agent-profile/index.js +4 -0
  302. package/dist/primitives/agent-profile/index.js.map +1 -0
  303. package/dist/primitives/agent-starting-state/index.js +5 -0
  304. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  305. package/dist/primitives/agent-streaming/index.js +5 -0
  306. package/dist/primitives/agent-streaming/index.js.map +1 -0
  307. package/dist/primitives/alert/index.js +4 -0
  308. package/dist/primitives/alert/index.js.map +1 -0
  309. package/dist/primitives/artifact-preview/index.js +4 -0
  310. package/dist/primitives/artifact-preview/index.js.map +1 -0
  311. package/dist/primitives/attachment-chip/index.js +4 -0
  312. package/dist/primitives/attachment-chip/index.js.map +1 -0
  313. package/dist/primitives/audit-log-entry/index.js +4 -0
  314. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  315. package/dist/primitives/auto-compact-notice/index.js +5 -0
  316. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  317. package/dist/primitives/avatar/index.js +4 -0
  318. package/dist/primitives/avatar/index.js.map +1 -0
  319. package/dist/primitives/badge/index.js +4 -0
  320. package/dist/primitives/badge/index.js.map +1 -0
  321. package/dist/primitives/browser-controls/index.js +4 -0
  322. package/dist/primitives/browser-controls/index.js.map +1 -0
  323. package/dist/primitives/build-log-stream/index.js +5 -0
  324. package/dist/primitives/build-log-stream/index.js.map +1 -0
  325. package/dist/primitives/button/index.js +4 -0
  326. package/dist/primitives/button/index.js.map +1 -0
  327. package/dist/primitives/capability-indicator/index.js +4 -0
  328. package/dist/primitives/capability-indicator/index.js.map +1 -0
  329. package/dist/primitives/card/index.js +4 -0
  330. package/dist/primitives/card/index.js.map +1 -0
  331. package/dist/primitives/chat-thread/index.js +5 -0
  332. package/dist/primitives/chat-thread/index.js.map +1 -0
  333. package/dist/primitives/checkbox/index.js +4 -0
  334. package/dist/primitives/checkbox/index.js.map +1 -0
  335. package/dist/primitives/context-card/index.js +4 -0
  336. package/dist/primitives/context-card/index.js.map +1 -0
  337. package/dist/primitives/context-window-bar/index.js +4 -0
  338. package/dist/primitives/context-window-bar/index.js.map +1 -0
  339. package/dist/primitives/copy-button/index.js +4 -0
  340. package/dist/primitives/copy-button/index.js.map +1 -0
  341. package/dist/primitives/cost-meter/index.js +4 -0
  342. package/dist/primitives/cost-meter/index.js.map +1 -0
  343. package/dist/primitives/created-files-card/index.js +4 -0
  344. package/dist/primitives/created-files-card/index.js.map +1 -0
  345. package/dist/primitives/cron-job-card/index.js +4 -0
  346. package/dist/primitives/cron-job-card/index.js.map +1 -0
  347. package/dist/primitives/danger-zone/index.js +4 -0
  348. package/dist/primitives/danger-zone/index.js.map +1 -0
  349. package/dist/primitives/dialog/index.js +4 -0
  350. package/dist/primitives/dialog/index.js.map +1 -0
  351. package/dist/primitives/diff-viewer/index.js +4 -0
  352. package/dist/primitives/diff-viewer/index.js.map +1 -0
  353. package/dist/primitives/empty-state/index.js +4 -0
  354. package/dist/primitives/empty-state/index.js.map +1 -0
  355. package/dist/primitives/folder-context-card/index.js +4 -0
  356. package/dist/primitives/folder-context-card/index.js.map +1 -0
  357. package/dist/primitives/folder-selector/index.js +4 -0
  358. package/dist/primitives/folder-selector/index.js.map +1 -0
  359. package/dist/primitives/form-field/index.js +4 -0
  360. package/dist/primitives/form-field/index.js.map +1 -0
  361. package/dist/primitives/hook-config/index.js +4 -0
  362. package/dist/primitives/hook-config/index.js.map +1 -0
  363. package/dist/primitives/hook-event-log/index.js +4 -0
  364. package/dist/primitives/hook-event-log/index.js.map +1 -0
  365. package/dist/primitives/input/index.js +4 -0
  366. package/dist/primitives/input/index.js.map +1 -0
  367. package/dist/primitives/intent-selector/index.js +4 -0
  368. package/dist/primitives/intent-selector/index.js.map +1 -0
  369. package/dist/primitives/label/index.js +4 -0
  370. package/dist/primitives/label/index.js.map +1 -0
  371. package/dist/primitives/lane-board/index.js +4 -0
  372. package/dist/primitives/lane-board/index.js.map +1 -0
  373. package/dist/primitives/login-split/index.js +4 -0
  374. package/dist/primitives/login-split/index.js.map +1 -0
  375. package/dist/primitives/mcp-server-card/index.js +4 -0
  376. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  377. package/dist/primitives/memory-editor/index.js +4 -0
  378. package/dist/primitives/memory-editor/index.js.map +1 -0
  379. package/dist/primitives/mention-menu/index.js +4 -0
  380. package/dist/primitives/mention-menu/index.js.map +1 -0
  381. package/dist/primitives/metrics-panel/index.js +4 -0
  382. package/dist/primitives/metrics-panel/index.js.map +1 -0
  383. package/dist/primitives/model-card/index.js +4 -0
  384. package/dist/primitives/model-card/index.js.map +1 -0
  385. package/dist/primitives/model-selector/index.js +4 -0
  386. package/dist/primitives/model-selector/index.js.map +1 -0
  387. package/dist/primitives/pagination/index.js +4 -0
  388. package/dist/primitives/pagination/index.js.map +1 -0
  389. package/dist/primitives/permission-matrix/index.js +4 -0
  390. package/dist/primitives/permission-matrix/index.js.map +1 -0
  391. package/dist/primitives/plan-badge/index.js +4 -0
  392. package/dist/primitives/plan-badge/index.js.map +1 -0
  393. package/dist/primitives/progress/index.js +4 -0
  394. package/dist/primitives/progress/index.js.map +1 -0
  395. package/dist/primitives/progress-checklist/index.js +4 -0
  396. package/dist/primitives/progress-checklist/index.js.map +1 -0
  397. package/dist/primitives/project-switcher/index.js +4 -0
  398. package/dist/primitives/project-switcher/index.js.map +1 -0
  399. package/dist/primitives/quick-action-chips/index.js +4 -0
  400. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  401. package/dist/primitives/radio-group/index.js +4 -0
  402. package/dist/primitives/radio-group/index.js.map +1 -0
  403. package/dist/primitives/recent-folders-list/index.js +4 -0
  404. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  405. package/dist/primitives/rule-card/index.js +4 -0
  406. package/dist/primitives/rule-card/index.js.map +1 -0
  407. package/dist/primitives/run-stats/index.js +4 -0
  408. package/dist/primitives/run-stats/index.js.map +1 -0
  409. package/dist/primitives/running-tasks-panel/index.js +4 -0
  410. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  411. package/dist/primitives/scroll-area/index.js +4 -0
  412. package/dist/primitives/scroll-area/index.js.map +1 -0
  413. package/dist/primitives/select/index.js +4 -0
  414. package/dist/primitives/select/index.js.map +1 -0
  415. package/dist/primitives/session-list-item/index.js +4 -0
  416. package/dist/primitives/session-list-item/index.js.map +1 -0
  417. package/dist/primitives/session-timeline/index.js +4 -0
  418. package/dist/primitives/session-timeline/index.js.map +1 -0
  419. package/dist/primitives/sheet/index.js +4 -0
  420. package/dist/primitives/sheet/index.js.map +1 -0
  421. package/dist/primitives/sidebar/index.js +4 -0
  422. package/dist/primitives/sidebar/index.js.map +1 -0
  423. package/dist/primitives/skeleton/index.js +5 -0
  424. package/dist/primitives/skeleton/index.js.map +1 -0
  425. package/dist/primitives/skill-card/index.js +4 -0
  426. package/dist/primitives/skill-card/index.js.map +1 -0
  427. package/dist/primitives/social-auth-row/index.js +4 -0
  428. package/dist/primitives/social-auth-row/index.js.map +1 -0
  429. package/dist/primitives/stat-tile/index.js +4 -0
  430. package/dist/primitives/stat-tile/index.js.map +1 -0
  431. package/dist/primitives/status-dot/index.js +4 -0
  432. package/dist/primitives/status-dot/index.js.map +1 -0
  433. package/dist/primitives/steps-rail/index.js +4 -0
  434. package/dist/primitives/steps-rail/index.js.map +1 -0
  435. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  436. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  437. package/dist/primitives/switch/index.js +4 -0
  438. package/dist/primitives/switch/index.js.map +1 -0
  439. package/dist/primitives/system-prompt-editor/index.js +4 -0
  440. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  441. package/dist/primitives/table/index.js +4 -0
  442. package/dist/primitives/table/index.js.map +1 -0
  443. package/dist/primitives/tabs/index.js +4 -0
  444. package/dist/primitives/tabs/index.js.map +1 -0
  445. package/dist/primitives/task-plan/index.js +4 -0
  446. package/dist/primitives/task-plan/index.js.map +1 -0
  447. package/dist/primitives/terminal-panel/index.js +5 -0
  448. package/dist/primitives/terminal-panel/index.js.map +1 -0
  449. package/dist/primitives/textarea/index.js +4 -0
  450. package/dist/primitives/textarea/index.js.map +1 -0
  451. package/dist/primitives/timestamp/index.js +4 -0
  452. package/dist/primitives/timestamp/index.js.map +1 -0
  453. package/dist/primitives/toast/index.js +4 -0
  454. package/dist/primitives/toast/index.js.map +1 -0
  455. package/dist/primitives/token-usage-chart/index.js +4 -0
  456. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  457. package/dist/primitives/tool-call/index.js +4 -0
  458. package/dist/primitives/tool-call/index.js.map +1 -0
  459. package/dist/primitives/tool-call-card/index.js +4 -0
  460. package/dist/primitives/tool-call-card/index.js.map +1 -0
  461. package/dist/primitives/tool-result/index.js +4 -0
  462. package/dist/primitives/tool-result/index.js.map +1 -0
  463. package/dist/primitives/tools-list/index.js +4 -0
  464. package/dist/primitives/tools-list/index.js.map +1 -0
  465. package/dist/primitives/tooltip/index.js +4 -0
  466. package/dist/primitives/tooltip/index.js.map +1 -0
  467. package/dist/primitives/topnav/index.js +4 -0
  468. package/dist/primitives/topnav/index.js.map +1 -0
  469. package/dist/slide/index.js +1 -712
  470. package/dist/slide/index.js.map +1 -1
  471. package/dist/slide-deck/index.js +2 -688
  472. package/dist/slide-deck/index.js.map +1 -1
  473. package/llms.txt +6 -5
  474. package/package.json +115 -115
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/select/select.tsx"],"names":[],"mappings":"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","file":"chunk-EP25QJ4N.js","sourcesContent":["import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Trigger size variant (theming-and-sizes plan T1.9).\n * Items inside Select.Content stay md-equivalent regardless — the floating\n * menu is isolated from the trigger context (documented decision).\n *\n * EC-2 guard: `<Select.Trigger>` is a Radix `<button>` — no SelectHTMLAttributes\n * conflict to Omit. Verified before implementation.\n */\nconst selectTriggerVariants = cva(\n [\n \"flex w-full items-center justify-between gap-2 rounded-md border border-input bg-card\",\n \"text-foreground placeholder:text-muted-foreground\",\n \"transition-[border-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 \"focus-visible:border-primary\",\n \"data-[placeholder]:text-muted-foreground\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"[&>span]:line-clamp-1\",\n ],\n {\n variants: {\n size: {\n sm: \"h-8 px-2.5 py-1 text-body-sm\",\n md: \"h-[var(--theo-control-h,2.25rem)] px-[var(--theo-control-px,0.875rem)] py-1.5 text-body-sm\",\n lg: \"h-11 px-4 py-2.5 text-body-md\",\n },\n },\n defaultVariants: { size: \"md\" },\n },\n);\n\n/**\n * Select — styled wrapper around Radix Select.\n *\n * Composition:\n * <Select value={value} onValueChange={setValue}>\n * <Select.Trigger>\n * <Select.Value placeholder=\"Pick…\" />\n * </Select.Trigger>\n * <Select.Content>\n * <Select.Group>\n * <Select.Label>Group</Select.Label>\n * <Select.Item value=\"a\">A</Select.Item>\n * </Select.Group>\n * </Select.Content>\n * </Select>\n *\n * Trigger matches Input height + violet focus ring. Content uses popover\n * surface with check on the selected item.\n */\n\ninterface SelectTriggerProps\n extends ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>,\n VariantProps<typeof selectTriggerVariants> {}\n\nconst SelectTrigger = forwardRef<ElementRef<typeof SelectPrimitive.Trigger>, SelectTriggerProps>(\n ({ className, children, size, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(selectTriggerVariants({ size }), className)}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n ),\n);\nSelectTrigger.displayName = \"Select.Trigger\";\n\nconst SelectScrollUpButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUp className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = \"Select.ScrollUpButton\";\n\nconst SelectScrollDownButton = forwardRef<\n ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDown className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = \"Select.ScrollDownButton\";\n\nconst SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n className={cn(\n \"relative z-50 min-w-[8rem] overflow-hidden rounded-lg border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n position === \"popper\" && \"data-[side=top]:-translate-y-1 data-[side=bottom]:translate-y-1\",\n className,\n )}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = \"Select.Content\";\n\nconst SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 font-mono text-label-caps text-muted-foreground uppercase tracking-wider\",\n className,\n )}\n {...props}\n />\n));\nSelectLabel.displayName = \"Select.Label\";\n\nconst SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center gap-2 rounded-md py-1.5 pr-2 pl-7\",\n \"text-body-sm outline-none\",\n \"focus:bg-muted focus:text-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-1.5 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-3.5 text-primary\" aria-hidden=\"true\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"Select.Item\";\n\nconst SelectSeparator = forwardRef<\n ElementRef<typeof SelectPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-border/40\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = \"Select.Separator\";\n\nconst Select = SelectPrimitive.Root as typeof SelectPrimitive.Root & {\n Trigger: typeof SelectTrigger;\n Value: typeof SelectPrimitive.Value;\n Content: typeof SelectContent;\n Group: typeof SelectPrimitive.Group;\n Label: typeof SelectLabel;\n Item: typeof SelectItem;\n Separator: typeof SelectSeparator;\n};\nSelect.Trigger = SelectTrigger;\nSelect.Value = SelectPrimitive.Value;\nSelect.Content = SelectContent;\nSelect.Group = SelectPrimitive.Group;\nSelect.Label = SelectLabel;\nSelect.Item = SelectItem;\nSelect.Separator = SelectSeparator;\n\nexport { Select };\n"]}
@@ -0,0 +1,80 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
+
5
+ var lineBg = {
6
+ added: "bg-success/10",
7
+ removed: "bg-destructive/10",
8
+ unchanged: "",
9
+ meta: "bg-muted/60 text-primary"
10
+ };
11
+ var sign = {
12
+ added: "+",
13
+ removed: "-",
14
+ unchanged: " ",
15
+ meta: "@"
16
+ };
17
+ var DiffViewer = forwardRef(
18
+ ({ className, path, stats, hunks, ...props }, ref) => /* @__PURE__ */ jsxs(
19
+ "div",
20
+ {
21
+ ref,
22
+ className: cn("overflow-hidden rounded-xl border bg-card font-mono", className),
23
+ ...props,
24
+ children: [
25
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-3 border-border/40 border-b bg-muted/30 px-3 py-2", children: [
26
+ /* @__PURE__ */ jsx("span", { className: "truncate text-code-sm text-foreground", children: path }),
27
+ stats ? /* @__PURE__ */ jsxs("span", { className: "font-mono text-code-sm", children: [
28
+ /* @__PURE__ */ jsxs("span", { className: "text-success", children: [
29
+ "+",
30
+ stats.added
31
+ ] }),
32
+ " ",
33
+ /* @__PURE__ */ jsxs("span", { className: "text-destructive", children: [
34
+ "-",
35
+ stats.removed
36
+ ] })
37
+ ] }) : null
38
+ ] }),
39
+ /* @__PURE__ */ jsx("ol", { className: "text-code-sm", children: hunks.map((hunk) => /* @__PURE__ */ jsx("li", { children: hunk.collapsed ? /* @__PURE__ */ jsxs("div", { className: "px-3 py-1 text-muted-foreground italic", children: [
40
+ hunk.lines.length,
41
+ " unmodified lines"
42
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
43
+ hunk.header ? /* @__PURE__ */ jsx("div", { className: "bg-muted/60 px-3 py-1 text-primary", children: hunk.header }) : null,
44
+ /* @__PURE__ */ jsx("table", { className: "w-full border-collapse", "aria-label": `Diff hunk for ${path}`, children: /* @__PURE__ */ jsx("tbody", { children: hunk.lines.map((line, idx) => /* @__PURE__ */ jsxs("tr", { className: lineBg[line.kind], children: [
45
+ /* @__PURE__ */ jsx("td", { className: "select-none px-2 text-right text-muted-foreground/60 tabular-nums", children: line.oldNumber ?? "" }),
46
+ /* @__PURE__ */ jsx("td", { className: "select-none px-2 text-right text-muted-foreground/60 tabular-nums", children: line.newNumber ?? "" }),
47
+ /* @__PURE__ */ jsx(
48
+ "td",
49
+ {
50
+ className: cn(
51
+ "select-none pr-1 pl-2",
52
+ line.kind === "added" && "text-success",
53
+ line.kind === "removed" && "text-destructive",
54
+ line.kind === "meta" && "text-primary"
55
+ ),
56
+ children: sign[line.kind]
57
+ }
58
+ ),
59
+ /* @__PURE__ */ jsx(
60
+ "td",
61
+ {
62
+ className: cn(
63
+ "w-full whitespace-pre",
64
+ line.kind === "added" && "text-success",
65
+ line.kind === "removed" && "text-destructive"
66
+ ),
67
+ children: line.content
68
+ }
69
+ )
70
+ ] }, `${hunk.id}-${idx}`)) }) })
71
+ ] }) }, hunk.id)) })
72
+ ]
73
+ }
74
+ )
75
+ );
76
+ DiffViewer.displayName = "DiffViewer";
77
+
78
+ export { DiffViewer };
79
+ //# sourceMappingURL=chunk-ET44426Q.js.map
80
+ //# sourceMappingURL=chunk-ET44426Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/diff-viewer/diff-viewer.tsx"],"names":[],"mappings":"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","file":"chunk-ET44426Q.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\nexport type DiffLineKind = \"added\" | \"removed\" | \"unchanged\" | \"meta\";\n\nexport interface DiffLine {\n kind: DiffLineKind;\n /** Original line number (left side); undefined for added lines. */\n oldNumber?: number;\n /** New line number (right side); undefined for removed lines. */\n newNumber?: number;\n content: string;\n}\n\nexport interface DiffHunk {\n id: string;\n /**\n * Optional header (e.g. \"@@ -42,7 +42,12 @@\"). Caller usually formats this.\n */\n header?: string;\n lines: DiffLine[];\n /**\n * If true, the hunk is rendered as a collapsed \"N unmodified lines\" placeholder.\n */\n collapsed?: boolean;\n}\n\ninterface DiffViewerProps extends HTMLAttributes<HTMLDivElement> {\n /** Path of the file being diffed. */\n path: string;\n /** Diff stats summary. */\n stats?: { added: number; removed: number };\n hunks: DiffHunk[];\n}\n\nconst lineBg: Record<DiffLineKind, string> = {\n added: \"bg-success/10\",\n removed: \"bg-destructive/10\",\n unchanged: \"\",\n meta: \"bg-muted/60 text-primary\",\n};\n\nconst sign: Record<DiffLineKind, string> = {\n added: \"+\",\n removed: \"-\",\n unchanged: \" \",\n meta: \"@\",\n};\n\n/**\n * DiffViewer — unified diff rendering, no external dep.\n *\n * Visual: two gutter columns (old/new line numbers) + sign + monospaced content.\n * Added/removed rows tinted in success/destructive. Collapsed hunks render as\n * a single muted row \"N unmodified lines\".\n *\n * For syntax highlighting, the consumer can render `content` via their own\n * highlighter and pass `unchanged` lines with already-highlighted strings (not\n * common; usually plain text is enough for the brutalist console aesthetic).\n */\nconst DiffViewer = forwardRef<HTMLDivElement, DiffViewerProps>(\n ({ className, path, stats, hunks, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"overflow-hidden rounded-xl border bg-card font-mono\", className)}\n {...props}\n >\n <header className=\"flex items-center justify-between gap-3 border-border/40 border-b bg-muted/30 px-3 py-2\">\n <span className=\"truncate text-code-sm text-foreground\">{path}</span>\n {stats ? (\n <span className=\"font-mono text-code-sm\">\n <span className=\"text-success\">+{stats.added}</span>{\" \"}\n <span className=\"text-destructive\">-{stats.removed}</span>\n </span>\n ) : null}\n </header>\n <ol className=\"text-code-sm\">\n {hunks.map((hunk) => (\n <li key={hunk.id}>\n {hunk.collapsed ? (\n <div className=\"px-3 py-1 text-muted-foreground italic\">\n {hunk.lines.length} unmodified lines\n </div>\n ) : (\n <>\n {hunk.header ? (\n <div className=\"bg-muted/60 px-3 py-1 text-primary\">{hunk.header}</div>\n ) : null}\n <table className=\"w-full border-collapse\" aria-label={`Diff hunk for ${path}`}>\n <tbody>\n {hunk.lines.map((line, idx) => (\n <tr key={`${hunk.id}-${idx}`} className={lineBg[line.kind]}>\n <td className=\"select-none px-2 text-right text-muted-foreground/60 tabular-nums\">\n {line.oldNumber ?? \"\"}\n </td>\n <td className=\"select-none px-2 text-right text-muted-foreground/60 tabular-nums\">\n {line.newNumber ?? \"\"}\n </td>\n <td\n className={cn(\n \"select-none pr-1 pl-2\",\n line.kind === \"added\" && \"text-success\",\n line.kind === \"removed\" && \"text-destructive\",\n line.kind === \"meta\" && \"text-primary\",\n )}\n >\n {sign[line.kind]}\n </td>\n <td\n className={cn(\n \"w-full whitespace-pre\",\n line.kind === \"added\" && \"text-success\",\n line.kind === \"removed\" && \"text-destructive\",\n )}\n >\n {line.content}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </>\n )}\n </li>\n ))}\n </ol>\n </div>\n ),\n);\nDiffViewer.displayName = \"DiffViewer\";\n\nexport { DiffViewer };\n"]}
@@ -0,0 +1,67 @@
1
+ import { useInLiveRegion } from './chunk-UGKI466V.js';
2
+ import { cn } from './chunk-ZSRJCIWF.js';
3
+ import { Sparkles } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var AgentStreaming = forwardRef(
8
+ ({ className, partial, model, ...props }, ref) => {
9
+ const inLiveRegion = useInLiveRegion();
10
+ return /* @__PURE__ */ jsxs(
11
+ "div",
12
+ {
13
+ ref,
14
+ role: inLiveRegion ? void 0 : "status",
15
+ "aria-live": inLiveRegion ? void 0 : "polite",
16
+ "aria-label": "Agent is responding",
17
+ className: cn(
18
+ "flex w-full items-start gap-3 rounded-xl border border-border/40 bg-card/40 px-4 py-3",
19
+ className
20
+ ),
21
+ ...props,
22
+ children: [
23
+ /* @__PURE__ */ jsx(
24
+ "span",
25
+ {
26
+ className: "grid size-7 shrink-0 place-items-center rounded-full bg-primary/15 text-primary",
27
+ "aria-hidden": "true",
28
+ children: /* @__PURE__ */ jsx(Sparkles, { className: "size-3.5" })
29
+ }
30
+ ),
31
+ /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 flex-1 gap-1", children: [
32
+ model ? /* @__PURE__ */ jsx("span", { className: "font-mono text-label-caps text-muted-foreground uppercase tracking-wider", children: model }) : null,
33
+ partial ? /* @__PURE__ */ jsxs("span", { className: "break-words text-body-md text-foreground", children: [
34
+ partial,
35
+ /* @__PURE__ */ jsx(
36
+ "span",
37
+ {
38
+ className: "ml-0.5 inline-block h-4 w-[2px] translate-y-0.5 animate-pulse bg-primary align-middle",
39
+ "aria-hidden": "true"
40
+ }
41
+ )
42
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", "aria-hidden": "true", children: [
43
+ /* @__PURE__ */ jsx(Dot, { delay: 0 }),
44
+ /* @__PURE__ */ jsx(Dot, { delay: 120 }),
45
+ /* @__PURE__ */ jsx(Dot, { delay: 240 }),
46
+ /* @__PURE__ */ jsx("span", { className: "ml-1 text-body-sm text-muted-foreground", children: "thinking\u2026" })
47
+ ] })
48
+ ] })
49
+ ]
50
+ }
51
+ );
52
+ }
53
+ );
54
+ AgentStreaming.displayName = "AgentStreaming";
55
+ function Dot({ delay }) {
56
+ return /* @__PURE__ */ jsx(
57
+ "span",
58
+ {
59
+ className: "size-1.5 animate-pulse rounded-full bg-primary",
60
+ style: { animationDelay: `${delay}ms` }
61
+ }
62
+ );
63
+ }
64
+
65
+ export { AgentStreaming };
66
+ //# sourceMappingURL=chunk-ETEIDY34.js.map
67
+ //# sourceMappingURL=chunk-ETEIDY34.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/agent-streaming/agent-streaming.tsx"],"names":[],"mappings":";;;;;;AAqBA,IAAM,cAAA,GAAiB,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,OAAO,GAAG,KAAA,IAAS,GAAA,KAAQ;AAIhD,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,uBACE,IAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAM,eAAe,MAAA,GAAY,QAAA;AAAA,QACjC,WAAA,EAAW,eAAe,MAAA,GAAY,QAAA;AAAA,QACtC,YAAA,EAAW,qBAAA;AAAA,QACX,SAAA,EAAW,EAAA;AAAA,UACT,uFAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iFAAA;AAAA,cACV,aAAA,EAAY,MAAA;AAAA,cAEZ,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA;AAAA,WACjC;AAAA,0BACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA;AAAA,YAAA,KAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0EAAA,EACb,iBACH,CAAA,GACE,IAAA;AAAA,YACH,OAAA,mBACC,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,cAAA,OAAA;AAAA,8BACD,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,uFAAA;AAAA,kBACV,aAAA,EAAY;AAAA;AAAA;AACd,aAAA,EACF,oBAEA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA4B,eAAY,MAAA,EACtD,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAO,CAAA,EAAG,CAAA;AAAA,8BACf,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,8BACjB,GAAA,CAAC,GAAA,EAAA,EAAI,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,8BACjB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA0C,QAAA,EAAA,gBAAA,EAAS;AAAA,aAAA,EACrE;AAAA,WAAA,EAEJ;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;AAE7B,SAAS,GAAA,CAAI,EAAE,KAAA,EAAM,EAAsB;AACzC,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gDAAA;AAAA,MACV,KAAA,EAAO,EAAE,cAAA,EAAgB,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA;AAAK;AAAA,GACxC;AAEJ","file":"chunk-ETEIDY34.js","sourcesContent":["import { Sparkles } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { useInLiveRegion } from \"../../../lib/live-region-context.js\";\n\n/**\n * AgentStreaming — inline \"agent is thinking / typing\" indicator.\n *\n * Renders inside an agent stream while the model is producing a response.\n * Default visual is 3 violet dots pulsing. If `partial` is provided, renders\n * the streamed-so-far text with a caret. Optional `model` label on the right.\n */\n\ninterface AgentStreamingProps extends HTMLAttributes<HTMLDivElement> {\n /** Streamed-so-far text. When present, replaces the dots animation. */\n partial?: ReactNode;\n /** Optional model name shown as a chip. */\n model?: ReactNode;\n}\n\nconst AgentStreaming = forwardRef<HTMLDivElement, AgentStreamingProps>(\n ({ className, partial, model, ...props }, ref) => {\n // T4.1 (MF-4): when nested inside a live region container (AgentStream,\n // ChatThread, etc.), omit our own aria-live to prevent double-announcement.\n // Standalone usage keeps the live region intact.\n const inLiveRegion = useInLiveRegion();\n return (\n <div\n ref={ref}\n role={inLiveRegion ? undefined : \"status\"}\n aria-live={inLiveRegion ? undefined : \"polite\"}\n aria-label=\"Agent is responding\"\n className={cn(\n \"flex w-full items-start gap-3 rounded-xl border border-border/40 bg-card/40 px-4 py-3\",\n className,\n )}\n {...props}\n >\n <span\n className=\"grid size-7 shrink-0 place-items-center rounded-full bg-primary/15 text-primary\"\n aria-hidden=\"true\"\n >\n <Sparkles className=\"size-3.5\" />\n </span>\n <div className=\"grid min-w-0 flex-1 gap-1\">\n {model ? (\n <span className=\"font-mono text-label-caps text-muted-foreground uppercase tracking-wider\">\n {model}\n </span>\n ) : null}\n {partial ? (\n <span className=\"break-words text-body-md text-foreground\">\n {partial}\n <span\n className=\"ml-0.5 inline-block h-4 w-[2px] translate-y-0.5 animate-pulse bg-primary align-middle\"\n aria-hidden=\"true\"\n />\n </span>\n ) : (\n <span className=\"flex items-center gap-1.5\" aria-hidden=\"true\">\n <Dot delay={0} />\n <Dot delay={120} />\n <Dot delay={240} />\n <span className=\"ml-1 text-body-sm text-muted-foreground\">thinking…</span>\n </span>\n )}\n </div>\n </div>\n );\n },\n);\nAgentStreaming.displayName = \"AgentStreaming\";\n\nfunction Dot({ delay }: { delay: number }) {\n return (\n <span\n className=\"size-1.5 animate-pulse rounded-full bg-primary\"\n style={{ animationDelay: `${delay}ms` }}\n />\n );\n}\n\nexport { AgentStreaming };\n"]}
@@ -0,0 +1,76 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
3
+ import { Pencil, ChevronDown, Check } from 'lucide-react';
4
+ import { forwardRef } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var IntentSelector = forwardRef(
8
+ ({ className, value, options, onChange, ...props }, ref) => {
9
+ const current = options.find((o) => o.id === value) ?? options[0];
10
+ const Icon = current?.icon ?? Pencil;
11
+ return /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
12
+ /* @__PURE__ */ jsx(DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
13
+ "button",
14
+ {
15
+ ref,
16
+ type: "button",
17
+ className: cn(
18
+ "inline-flex h-8 items-center gap-2 rounded-full border border-border/60 bg-card px-3",
19
+ "font-medium font-sans text-body-sm text-foreground",
20
+ "transition-colors duration-base ease-out-soft",
21
+ "hover:bg-muted",
22
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
23
+ className
24
+ ),
25
+ ...props,
26
+ children: [
27
+ /* @__PURE__ */ jsx(Icon, { className: "size-3.5 text-primary", "aria-hidden": "true" }),
28
+ current?.label ?? "Select intent",
29
+ /* @__PURE__ */ jsx(ChevronDown, { className: "size-3 text-muted-foreground", "aria-hidden": "true" })
30
+ ]
31
+ }
32
+ ) }),
33
+ /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(
34
+ DropdownMenu.Content,
35
+ {
36
+ sideOffset: 6,
37
+ align: "start",
38
+ className: cn(
39
+ "z-50 min-w-[16rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md",
40
+ "data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in",
41
+ "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out"
42
+ ),
43
+ children: options.map((opt) => {
44
+ const OptIcon = opt.icon ?? Pencil;
45
+ return /* @__PURE__ */ jsxs(
46
+ DropdownMenu.Item,
47
+ {
48
+ onSelect: () => onChange?.(opt.id),
49
+ className: cn(
50
+ "flex cursor-pointer items-start gap-3 rounded-md px-2 py-2",
51
+ "text-body-sm",
52
+ "focus:bg-muted focus:outline-none",
53
+ "data-[highlighted]:bg-muted"
54
+ ),
55
+ children: [
56
+ /* @__PURE__ */ jsx(OptIcon, { className: "mt-0.5 size-4 shrink-0 text-primary", "aria-hidden": "true" }),
57
+ /* @__PURE__ */ jsxs("span", { className: "flex flex-1 flex-col", children: [
58
+ /* @__PURE__ */ jsx("span", { className: "font-medium", children: opt.label }),
59
+ opt.description ? /* @__PURE__ */ jsx("span", { className: "text-label text-muted-foreground", children: opt.description }) : null
60
+ ] }),
61
+ opt.id === value ? /* @__PURE__ */ jsx(Check, { className: "mt-0.5 size-3.5 shrink-0 text-primary" }) : null
62
+ ]
63
+ },
64
+ opt.id
65
+ );
66
+ })
67
+ }
68
+ ) })
69
+ ] });
70
+ }
71
+ );
72
+ IntentSelector.displayName = "IntentSelector";
73
+
74
+ export { IntentSelector };
75
+ //# sourceMappingURL=chunk-EU55O4P7.js.map
76
+ //# sourceMappingURL=chunk-EU55O4P7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/intent-selector/intent-selector.tsx"],"names":[],"mappings":";;;;;;AA2BA,IAAM,cAAA,GAAiB,UAAA;AAAA,EACrB,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,SAAS,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC1D,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,KAAK,CAAA,IAAK,OAAA,CAAQ,CAAC,CAAA;AAChE,IAAA,MAAM,IAAA,GAAO,SAAS,IAAA,IAAQ,MAAA;AAC9B,IAAA,uBACE,IAAA,CAAc,mBAAb,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAc,YAAA,CAAA,OAAA,EAAb,EAAqB,OAAA,EAAO,IAAA,EAC3B,QAAA,kBAAA,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,QAAA;AAAA,UACL,SAAA,EAAW,EAAA;AAAA,YACT,sFAAA;AAAA,YACA,oDAAA;AAAA,YACA,+CAAA;AAAA,YACA,gBAAA;AAAA,YACA,0IAAA;AAAA,YACA;AAAA,WACF;AAAA,UACC,GAAG,KAAA;AAAA,UAEJ,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,YAC1D,SAAS,KAAA,IAAS,eAAA;AAAA,4BACnB,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EAAO;AAAA;AAAA;AAAA,OAC3E,EACF,CAAA;AAAA,sBACA,GAAA,CAAc,qBAAb,EACC,QAAA,kBAAA,GAAA;AAAA,QAAc,YAAA,CAAA,OAAA;AAAA,QAAb;AAAA,UACC,UAAA,EAAY,CAAA;AAAA,UACZ,KAAA,EAAM,OAAA;AAAA,UACN,SAAA,EAAW,EAAA;AAAA,YACT,uGAAA;AAAA,YACA,uFAAA;AAAA,YACA;AAAA,WACF;AAAA,UAEC,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,YAAA,MAAM,OAAA,GAAU,IAAI,IAAA,IAAQ,MAAA;AAC5B,YAAA,uBACE,IAAA;AAAA,cAAc,YAAA,CAAA,IAAA;AAAA,cAAb;AAAA,gBAEC,QAAA,EAAU,MAAM,QAAA,GAAW,GAAA,CAAI,EAAE,CAAA;AAAA,gBACjC,SAAA,EAAW,EAAA;AAAA,kBACT,4DAAA;AAAA,kBACA,cAAA;AAAA,kBACA,mCAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,qCAAA,EAAsC,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,kCAC5E,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EACd,QAAA,EAAA;AAAA,oCAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM,CAAA;AAAA,oBACxC,GAAA,CAAI,8BACH,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kCAAA,EAAoC,QAAA,EAAA,GAAA,CAAI,aAAY,CAAA,GAClE;AAAA,mBAAA,EACN,CAAA;AAAA,kBACC,IAAI,EAAA,KAAO,KAAA,uBACT,KAAA,EAAA,EAAM,SAAA,EAAU,yCAAwC,CAAA,GACvD;AAAA;AAAA,eAAA;AAAA,cAlBC,GAAA,CAAI;AAAA,aAmBX;AAAA,UAEJ,CAAC;AAAA;AAAA,OACH,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"chunk-EU55O4P7.js","sourcesContent":["import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Check, ChevronDown, Pencil } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport type { IconComponent } from \"../../../lib/types.js\";\n\nexport interface IntentOption {\n id: string;\n label: string;\n /** Optional one-liner shown below the label in the menu. */\n description?: string;\n /** Optional icon — defaults to a pencil for the trigger if none. */\n icon?: IconComponent;\n}\n\ninterface IntentSelectorProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"onChange\"> {\n value: string;\n options: IntentOption[];\n onChange?: (id: string) => void;\n}\n\n/**\n * IntentSelector — chip dropdown for picking the agent's intent for the next\n * turn (e.g. edit / plan / review). Mirrors ModelSelector: pill trigger +\n * Radix DropdownMenu of options with description and a check on the active.\n */\nconst IntentSelector = forwardRef<HTMLButtonElement, IntentSelectorProps>(\n ({ className, value, options, onChange, ...props }, ref) => {\n const current = options.find((o) => o.id === value) ?? options[0];\n const Icon = current?.icon ?? Pencil;\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n \"inline-flex h-8 items-center gap-2 rounded-full border border-border/60 bg-card px-3\",\n \"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 className,\n )}\n {...props}\n >\n <Icon className=\"size-3.5 text-primary\" aria-hidden=\"true\" />\n {current?.label ?? \"Select intent\"}\n <ChevronDown className=\"size-3 text-muted-foreground\" aria-hidden=\"true\" />\n </button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n sideOffset={6}\n align=\"start\"\n className={cn(\n \"z-50 min-w-[16rem] overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-md\",\n \"data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n )}\n >\n {options.map((opt) => {\n const OptIcon = opt.icon ?? Pencil;\n return (\n <DropdownMenu.Item\n key={opt.id}\n onSelect={() => onChange?.(opt.id)}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-md px-2 py-2\",\n \"text-body-sm\",\n \"focus:bg-muted focus:outline-none\",\n \"data-[highlighted]:bg-muted\",\n )}\n >\n <OptIcon className=\"mt-0.5 size-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n <span className=\"flex flex-1 flex-col\">\n <span className=\"font-medium\">{opt.label}</span>\n {opt.description ? (\n <span className=\"text-label text-muted-foreground\">{opt.description}</span>\n ) : null}\n </span>\n {opt.id === value ? (\n <Check className=\"mt-0.5 size-3.5 shrink-0 text-primary\" />\n ) : null}\n </DropdownMenu.Item>\n );\n })}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n },\n);\nIntentSelector.displayName = \"IntentSelector\";\n\nexport { IntentSelector };\n"]}
@@ -0,0 +1,104 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Check, X, Copy } from 'lucide-react';
3
+ import { forwardRef, useState, useRef, useEffect, useCallback } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var VARIANT = {
7
+ ghost: "hover:bg-muted",
8
+ outline: "border border-border/60 rounded-md"
9
+ };
10
+ var SIZE = {
11
+ sm: "px-2 py-1 text-label",
12
+ md: "px-2.5 py-1.5 text-body-sm"
13
+ };
14
+ var CopyButton = forwardRef(
15
+ ({
16
+ className,
17
+ value,
18
+ label,
19
+ variant = "ghost",
20
+ size = "sm",
21
+ onCopied,
22
+ feedbackDuration = 1500,
23
+ ...props
24
+ }, ref) => {
25
+ const [state, setState] = useState("idle");
26
+ const timerRef = useRef(null);
27
+ useEffect(() => {
28
+ return () => {
29
+ if (timerRef.current !== null) {
30
+ clearTimeout(timerRef.current);
31
+ }
32
+ };
33
+ }, []);
34
+ const scheduleRevert = useCallback(() => {
35
+ if (timerRef.current !== null) {
36
+ clearTimeout(timerRef.current);
37
+ }
38
+ timerRef.current = setTimeout(() => {
39
+ setState("idle");
40
+ timerRef.current = null;
41
+ }, feedbackDuration);
42
+ }, [feedbackDuration]);
43
+ const handleClick = useCallback(() => {
44
+ if (state !== "idle") return;
45
+ if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) {
46
+ setState("failed");
47
+ scheduleRevert();
48
+ return;
49
+ }
50
+ navigator.clipboard.writeText(value).then(
51
+ () => {
52
+ setState("copied");
53
+ onCopied?.(value);
54
+ scheduleRevert();
55
+ },
56
+ () => {
57
+ setState("failed");
58
+ scheduleRevert();
59
+ }
60
+ );
61
+ }, [state, value, onCopied, scheduleRevert]);
62
+ const Icon = state === "copied" ? Check : state === "failed" ? X : Copy;
63
+ const liveMessage = state === "copied" ? "Copied to clipboard" : state === "failed" ? "Copy failed" : "";
64
+ const labelText = label !== void 0 ? state === "copied" ? "Copied!" : state === "failed" ? "Failed" : label : null;
65
+ return /* @__PURE__ */ jsxs(
66
+ "button",
67
+ {
68
+ ref,
69
+ type: "button",
70
+ onClick: handleClick,
71
+ "data-state": state,
72
+ className: cn(
73
+ "inline-flex items-center gap-1.5",
74
+ "font-sans transition-colors",
75
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card",
76
+ VARIANT[variant],
77
+ SIZE[size],
78
+ className
79
+ ),
80
+ ...props,
81
+ children: [
82
+ /* @__PURE__ */ jsx(
83
+ Icon,
84
+ {
85
+ "aria-hidden": "true",
86
+ className: cn(
87
+ "size-3.5 shrink-0 transition-opacity duration-200",
88
+ state === "copied" && "text-success",
89
+ state === "failed" && "text-destructive"
90
+ )
91
+ }
92
+ ),
93
+ labelText !== null ? /* @__PURE__ */ jsx("span", { children: labelText }) : null,
94
+ /* @__PURE__ */ jsx("span", { className: "sr-only", "aria-live": "polite", children: liveMessage })
95
+ ]
96
+ }
97
+ );
98
+ }
99
+ );
100
+ CopyButton.displayName = "CopyButton";
101
+
102
+ export { CopyButton };
103
+ //# sourceMappingURL=chunk-F436537E.js.map
104
+ //# sourceMappingURL=chunk-F436537E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/copy-button/copy-button.tsx"],"names":[],"mappings":"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","file":"chunk-F436537E.js","sourcesContent":["import { Check, Copy, X } from \"lucide-react\";\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * CopyButton — click-to-copy primitive for PaaS surfaces.\n *\n * Wraps the Clipboard API behind a button that:\n * - Calls `navigator.clipboard.writeText(value)` on click\n * - Swaps the icon (Copy → Check on success, Copy → X on failure)\n * - Optionally swaps the visible `label` to \"Copied!\" / \"Failed\"\n * - Announces the state change via an `aria-live=\"polite\"` sr-only region\n * - Reverts to idle after `feedbackDuration` ms (default 1500)\n *\n * SSR-safe (guards `navigator?.clipboard?.writeText`). Debounces double-clicks\n * by ignoring clicks while not in the `idle` state. Cleans up the revert timer\n * on unmount so no `setState` happens on unmounted components.\n *\n * @example\n * <CopyButton value={envVar.value} /> // icon-only ghost\n * <CopyButton value={token} label=\"Copy token\" variant=\"outline\" />\n */\ntype CopyState = \"idle\" | \"copied\" | \"failed\";\n\nexport interface CopyButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\" | \"onClick\" | \"children\"> {\n /** String to copy when clicked. */\n value: string;\n /** Optional button label. Default: just the icon. */\n label?: ReactNode;\n /** Visual style. */\n variant?: \"ghost\" | \"outline\";\n /** Size. */\n size?: \"sm\" | \"md\";\n /** Callback after successful copy (e.g. analytics). */\n onCopied?: (value: string) => void;\n /** Duration of the feedback state in ms. Default 1500. */\n feedbackDuration?: number;\n}\n\nconst VARIANT: Record<NonNullable<CopyButtonProps[\"variant\"]>, string> = {\n ghost: \"hover:bg-muted\",\n outline: \"border border-border/60 rounded-md\",\n};\n\nconst SIZE: Record<NonNullable<CopyButtonProps[\"size\"]>, string> = {\n sm: \"px-2 py-1 text-label\",\n md: \"px-2.5 py-1.5 text-body-sm\",\n};\n\nconst CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n className,\n value,\n label,\n variant = \"ghost\",\n size = \"sm\",\n onCopied,\n feedbackDuration = 1500,\n ...props\n },\n ref,\n ) => {\n const [state, setState] = useState<CopyState>(\"idle\");\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n const scheduleRevert = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n }\n timerRef.current = setTimeout(() => {\n setState(\"idle\");\n timerRef.current = null;\n }, feedbackDuration);\n }, [feedbackDuration]);\n\n const handleClick = useCallback(() => {\n if (state !== \"idle\") return;\n\n if (typeof navigator === \"undefined\" || !navigator.clipboard?.writeText) {\n setState(\"failed\");\n scheduleRevert();\n return;\n }\n\n navigator.clipboard.writeText(value).then(\n () => {\n setState(\"copied\");\n onCopied?.(value);\n scheduleRevert();\n },\n () => {\n setState(\"failed\");\n scheduleRevert();\n },\n );\n }, [state, value, onCopied, scheduleRevert]);\n\n const Icon = state === \"copied\" ? Check : state === \"failed\" ? X : Copy;\n const liveMessage =\n state === \"copied\" ? \"Copied to clipboard\" : state === \"failed\" ? \"Copy failed\" : \"\";\n\n const labelText =\n label !== undefined\n ? state === \"copied\"\n ? \"Copied!\"\n : state === \"failed\"\n ? \"Failed\"\n : label\n : null;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={handleClick}\n data-state={state}\n className={cn(\n \"inline-flex items-center gap-1.5\",\n \"font-sans transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card\",\n VARIANT[variant],\n SIZE[size],\n className,\n )}\n {...props}\n >\n <Icon\n aria-hidden=\"true\"\n className={cn(\n \"size-3.5 shrink-0 transition-opacity duration-200\",\n state === \"copied\" && \"text-success\",\n state === \"failed\" && \"text-destructive\",\n )}\n />\n {labelText !== null ? <span>{labelText}</span> : null}\n <span className=\"sr-only\" aria-live=\"polite\">\n {liveMessage}\n </span>\n </button>\n );\n },\n);\nCopyButton.displayName = \"CopyButton\";\n\nexport { CopyButton };\n"]}
@@ -0,0 +1,86 @@
1
+ import { safeHref } from './chunk-673R3GSK.js';
2
+ import { BadgeWithDot } from './chunk-O23LKHUR.js';
3
+ import { cn } from './chunk-ZSRJCIWF.js';
4
+ import { GitBranch, GitCommit, Activity } from 'lucide-react';
5
+ import { forwardRef } from 'react';
6
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
7
+
8
+ var statusToVariant = {
9
+ queued: "warning",
10
+ building: "primary",
11
+ deploying: "primary",
12
+ live: "success",
13
+ failed: "destructive",
14
+ cancelled: "default"
15
+ };
16
+ var statusToDotTone = {
17
+ queued: "warning",
18
+ building: "primary",
19
+ deploying: "primary",
20
+ live: "success",
21
+ failed: "destructive",
22
+ cancelled: "muted"
23
+ };
24
+ var ProjectCard = forwardRef(
25
+ ({ className, project, href, actions, detailed = true, ...props }, ref) => {
26
+ const sanitizedHref = safeHref(href);
27
+ const isLink = sanitizedHref !== void 0;
28
+ const Tag = isLink ? "a" : "div";
29
+ const isAnimated = project.status === "building" || project.status === "deploying" || project.status === "queued";
30
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
31
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-3", children: [
32
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
33
+ /* @__PURE__ */ jsx("h3", { className: "truncate font-display text-title-md tracking-tight", children: project.name }),
34
+ project.framework ? /* @__PURE__ */ jsx("p", { className: "mt-0.5 font-mono text-label-caps text-muted-foreground uppercase", children: project.framework }) : null
35
+ ] }),
36
+ /* @__PURE__ */ jsxs(BadgeWithDot, { variant: statusToVariant[project.status], children: [
37
+ /* @__PURE__ */ jsx(BadgeWithDot.Dot, { tone: statusToDotTone[project.status], pulse: isAnimated }),
38
+ project.status === "live" ? "Live" : project.status === "building" ? "Building" : project.status === "deploying" ? "Deploying" : project.status === "queued" ? "Queued" : project.status === "failed" ? "Failed" : "Cancelled"
39
+ ] })
40
+ ] }),
41
+ detailed && project.description ? /* @__PURE__ */ jsx("p", { className: "line-clamp-2 text-body-sm text-muted-foreground", children: project.description }) : null,
42
+ detailed && project.commitMessage ? /* @__PURE__ */ jsx("p", { className: "line-clamp-1 font-mono text-code-sm text-foreground/80", children: project.commitMessage }) : null,
43
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1 font-mono text-code-sm text-muted-foreground", children: [
44
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
45
+ /* @__PURE__ */ jsx(GitBranch, { className: "size-3" }),
46
+ " ",
47
+ project.branch
48
+ ] }),
49
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
50
+ /* @__PURE__ */ jsx(GitCommit, { className: "size-3" }),
51
+ " ",
52
+ project.commitSha.slice(0, 7)
53
+ ] }),
54
+ project.region ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
55
+ /* @__PURE__ */ jsx(Activity, { className: "size-3" }),
56
+ " ",
57
+ project.region
58
+ ] }) : null,
59
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
60
+ /* @__PURE__ */ jsx("span", { children: project.lastDeployedAt })
61
+ ] }),
62
+ actions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 pt-2", children: actions }) : null
63
+ ] });
64
+ return /* @__PURE__ */ jsx(
65
+ Tag,
66
+ {
67
+ ref,
68
+ href: sanitizedHref,
69
+ className: cn(
70
+ "group relative flex flex-col gap-3 rounded-xl border bg-card p-5 shadow-sm",
71
+ "transition-[box-shadow,transform,border-color] duration-base ease-out-soft",
72
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
73
+ isLink && "hover:-translate-y-px cursor-pointer hover:border-primary/50 hover:shadow-md",
74
+ className
75
+ ),
76
+ ...props,
77
+ children: content
78
+ }
79
+ );
80
+ }
81
+ );
82
+ ProjectCard.displayName = "ProjectCard";
83
+
84
+ export { ProjectCard };
85
+ //# sourceMappingURL=chunk-FLBTGNQI.js.map
86
+ //# sourceMappingURL=chunk-FLBTGNQI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/composites/project-card/project-card.tsx"],"names":[],"mappings":"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","file":"chunk-FLBTGNQI.js","sourcesContent":["import { Activity, GitBranch, GitCommit } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode, Ref } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\nimport { safeHref } from \"../../../lib/safe-href.js\";\nimport { Badge } from \"../../primitives/badge/index.js\";\nimport type { DeploymentStatus } from \"../deployment-row/deployment-row.js\";\n\nconst statusToVariant: Record<\n DeploymentStatus,\n \"default\" | \"primary\" | \"success\" | \"warning\" | \"destructive\"\n> = {\n queued: \"warning\",\n building: \"primary\",\n deploying: \"primary\",\n live: \"success\",\n failed: \"destructive\",\n cancelled: \"default\",\n};\nconst statusToDotTone: Record<\n DeploymentStatus,\n \"primary\" | \"success\" | \"warning\" | \"destructive\" | \"muted\"\n> = {\n queued: \"warning\",\n building: \"primary\",\n deploying: \"primary\",\n live: \"success\",\n failed: \"destructive\",\n cancelled: \"muted\",\n};\n\nexport interface Project {\n id: string;\n name: string;\n description?: string;\n framework?: string;\n branch: string;\n commitSha: string;\n commitMessage?: string;\n status: DeploymentStatus;\n url?: string;\n region?: string;\n lastDeployedAt: string;\n}\n\ninterface ProjectCardProps extends HTMLAttributes<HTMLAnchorElement | HTMLDivElement> {\n project: Project;\n href?: string;\n actions?: ReactNode;\n /**\n * Show the project description and commit message. Default true.\n */\n detailed?: boolean;\n}\n\n/**\n * ProjectCard — surface for a project in a project listing.\n *\n * Light hover lift (no shadow inflation), violet ring on focus,\n * status badge with optional pulse, framework + region in muted footer.\n */\nconst ProjectCard = forwardRef<HTMLElement, ProjectCardProps>(\n ({ className, project, href, actions, detailed = true, ...props }, ref) => {\n // T3.3 (SEC-003): defang javascript:/vbscript:/data:text/html before\n // rendering as <a href>. Consumers passing user-controlled URLs are\n // protected from XSS via dangerous protocols.\n const sanitizedHref = safeHref(href);\n const isLink = sanitizedHref !== undefined;\n const Tag = isLink ? \"a\" : \"div\";\n const isAnimated =\n project.status === \"building\" ||\n project.status === \"deploying\" ||\n project.status === \"queued\";\n\n const content = (\n <>\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h3 className=\"truncate font-display text-title-md tracking-tight\">{project.name}</h3>\n {project.framework ? (\n <p className=\"mt-0.5 font-mono text-label-caps text-muted-foreground uppercase\">\n {project.framework}\n </p>\n ) : null}\n </div>\n <Badge variant={statusToVariant[project.status]}>\n <Badge.Dot tone={statusToDotTone[project.status]} pulse={isAnimated} />\n {project.status === \"live\"\n ? \"Live\"\n : project.status === \"building\"\n ? \"Building\"\n : project.status === \"deploying\"\n ? \"Deploying\"\n : project.status === \"queued\"\n ? \"Queued\"\n : project.status === \"failed\"\n ? \"Failed\"\n : \"Cancelled\"}\n </Badge>\n </div>\n\n {detailed && project.description ? (\n <p className=\"line-clamp-2 text-body-sm text-muted-foreground\">{project.description}</p>\n ) : null}\n\n {detailed && project.commitMessage ? (\n <p className=\"line-clamp-1 font-mono text-code-sm text-foreground/80\">\n {project.commitMessage}\n </p>\n ) : null}\n\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 font-mono text-code-sm text-muted-foreground\">\n <span className=\"inline-flex items-center gap-1\">\n <GitBranch className=\"size-3\" /> {project.branch}\n </span>\n <span className=\"inline-flex items-center gap-1\">\n <GitCommit className=\"size-3\" /> {project.commitSha.slice(0, 7)}\n </span>\n {project.region ? (\n <span className=\"inline-flex items-center gap-1\">\n <Activity className=\"size-3\" /> {project.region}\n </span>\n ) : null}\n <span aria-hidden=\"true\">·</span>\n <span>{project.lastDeployedAt}</span>\n </div>\n\n {actions ? <div className=\"flex items-center gap-2 pt-2\">{actions}</div> : null}\n </>\n );\n\n return (\n <Tag\n ref={ref as Ref<HTMLAnchorElement & HTMLDivElement>}\n href={sanitizedHref}\n className={cn(\n \"group relative flex flex-col gap-3 rounded-xl border bg-card p-5 shadow-sm\",\n \"transition-[box-shadow,transform,border-color] duration-base ease-out-soft\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n isLink && \"hover:-translate-y-px cursor-pointer hover:border-primary/50 hover:shadow-md\",\n className,\n )}\n {...(props as HTMLAttributes<HTMLAnchorElement> & HTMLAttributes<HTMLDivElement>)}\n >\n {content}\n </Tag>\n );\n },\n);\nProjectCard.displayName = \"ProjectCard\";\n\nexport { ProjectCard };\n"]}
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3
+ import { forwardRef } from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var Provider2 = TooltipPrimitive.Provider;
7
+ var Root2 = TooltipPrimitive.Root;
8
+ var Trigger2 = TooltipPrimitive.Trigger;
9
+ var Content2 = forwardRef(({ className, sideOffset = 6, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
10
+ TooltipPrimitive.Content,
11
+ {
12
+ ref,
13
+ sideOffset,
14
+ className: cn(
15
+ "z-50 overflow-hidden rounded-md border border-border/40 bg-foreground px-2.5 py-1.5",
16
+ "text-background text-body-sm shadow-md",
17
+ "data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=delayed-open]:animate-in",
18
+ "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out",
19
+ "data-[side=top]:slide-in-from-bottom-1 data-[side=bottom]:slide-in-from-top-1",
20
+ "data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1",
21
+ className
22
+ ),
23
+ ...props
24
+ }
25
+ ) }));
26
+ Content2.displayName = "Tooltip.Content";
27
+ var Tooltip = ({
28
+ label,
29
+ side = "top",
30
+ align = "center",
31
+ delayDuration = 200,
32
+ children,
33
+ ...rootProps
34
+ }) => /* @__PURE__ */ jsx(Provider2, { delayDuration, children: /* @__PURE__ */ jsxs(Root2, { ...rootProps, children: [
35
+ /* @__PURE__ */ jsx(Trigger2, { asChild: true, children }),
36
+ /* @__PURE__ */ jsx(Content2, { side, align, children: label })
37
+ ] }) });
38
+ var TooltipWithStatics = Tooltip;
39
+ TooltipWithStatics.Provider = Provider2;
40
+ TooltipWithStatics.Root = Root2;
41
+ TooltipWithStatics.Trigger = Trigger2;
42
+ TooltipWithStatics.Content = Content2;
43
+
44
+ export { TooltipWithStatics };
45
+ //# sourceMappingURL=chunk-FUT45NFW.js.map
46
+ //# sourceMappingURL=chunk-FUT45NFW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/tooltip/tooltip.tsx"],"names":["Provider","Root","Trigger","Content"],"mappings":";;;;;AAcA,IAAMA,SAAAA,GAA4B,gBAAA,CAAA,QAAA;AAClC,IAAMC,KAAAA,GAAwB,gBAAA,CAAA,IAAA;AAC9B,IAAMC,QAAAA,GAA2B,gBAAA,CAAA,OAAA;AAEjC,IAAMC,QAAAA,GAAU,UAAA,CAGd,CAAC,EAAE,SAAA,EAAW,UAAA,GAAa,CAAA,EAAG,GAAG,KAAA,EAAM,EAAG,GAAA,qBAC1C,GAAA,CAAkB,yBAAjB,EACC,QAAA,kBAAA,GAAA;AAAA,EAAkB,gBAAA,CAAA,OAAA;AAAA,EAAjB;AAAA,IACC,GAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,EAAA;AAAA,MACT,qFAAA;AAAA,MACA,wCAAA;AAAA,MACA,+GAAA;AAAA,MACA,gGAAA;AAAA,MACA,+EAAA;AAAA,MACA,+EAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG;AAAA;AACN,CAAA,EACF,CACD,CAAA;AACDA,QAAAA,CAAQ,WAAA,GAAc,iBAAA;AActB,IAAM,UAAU,CAAC;AAAA,EACf,KAAA;AAAA,EACA,IAAA,GAAO,KAAA;AAAA,EACP,KAAA,GAAQ,QAAA;AAAA,EACR,aAAA,GAAgB,GAAA;AAAA,EAChB,QAAA;AAAA,EACA,GAAG;AACL,CAAA,qBAEI,GAAA,CAACH,WAAA,EAAS,aAAA,EACR,+BAACC,KAAAA,EAAA,EAAM,GAAG,SAAA,EACR,QAAA,EAAA;AAAA,kBAAA,GAAA,CAACC,QAAAA,EAAA,EAAQ,OAAA,EAAO,IAAA,EAAE,QAAA,EAAS,CAAA;AAAA,kBAC3B,GAAA,CAACC,QAAAA,EAAA,EAAQ,IAAA,EAAY,OAClB,QAAA,EAAA,KAAA,EACH;AAAA,CAAA,EACF,CAAA,EACF,CAAA;AAGJ,IAAM,kBAAA,GAAqB;AAM3B,kBAAA,CAAmB,QAAA,GAAWH,SAAAA;AAC9B,kBAAA,CAAmB,IAAA,GAAOC,KAAAA;AAC1B,kBAAA,CAAmB,OAAA,GAAUC,QAAAA;AAC7B,kBAAA,CAAmB,OAAA,GAAUC,QAAAA","file":"chunk-FUT45NFW.js","sourcesContent":["import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Tooltip — built on Radix Tooltip.\n *\n * Visual: dark surface in light mode (and inverse in dark) with rounded-md,\n * shadow-md, text-body-sm. 8px delay-show default.\n *\n * Wrap your app in <Tooltip.Provider> once (or use the default delayDuration here).\n */\n\nconst Provider = TooltipPrimitive.Provider;\nconst Root = TooltipPrimitive.Root;\nconst Trigger = TooltipPrimitive.Trigger;\n\nconst Content = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-border/40 bg-foreground px-2.5 py-1.5\",\n \"text-background text-body-sm shadow-md\",\n \"data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[state=delayed-open]:animate-in\",\n \"data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out\",\n \"data-[side=top]:slide-in-from-bottom-1 data-[side=bottom]:slide-in-from-top-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nContent.displayName = \"Tooltip.Content\";\n\ninterface TooltipProps extends ComponentPropsWithoutRef<typeof TooltipPrimitive.Root> {\n label: ReactNode;\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n align?: \"start\" | \"center\" | \"end\";\n children: ReactNode;\n}\n\n/**\n * Shorthand: <Tooltip label=\"…\"><Button>…</Button></Tooltip>\n * Wraps Provider + Root + Trigger asChild + Content for the common case.\n * For advanced usage (controlled state, custom content), use Tooltip.Root etc. directly.\n */\nconst Tooltip = ({\n label,\n side = \"top\",\n align = \"center\",\n delayDuration = 200,\n children,\n ...rootProps\n}: TooltipProps) =>\n (\n <Provider delayDuration={delayDuration}>\n <Root {...rootProps}>\n <Trigger asChild>{children}</Trigger>\n <Content side={side} align={align}>\n {label}\n </Content>\n </Root>\n </Provider>\n ) as ReturnType<typeof Provider>;\n\nconst TooltipWithStatics = Tooltip as typeof Tooltip & {\n Provider: typeof Provider;\n Root: typeof Root;\n Trigger: typeof Trigger;\n Content: typeof Content;\n};\nTooltipWithStatics.Provider = Provider;\nTooltipWithStatics.Root = Root;\nTooltipWithStatics.Trigger = Trigger;\nTooltipWithStatics.Content = Content;\n\nexport { TooltipWithStatics as Tooltip };\n"]}