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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/CHANGELOG.md +140 -0
  2. package/README.md +18 -18
  3. package/dist/chunk-2UJROWAG.js +106 -0
  4. package/dist/chunk-2UJROWAG.js.map +1 -0
  5. package/dist/chunk-2XPWOUEH.js +68 -0
  6. package/dist/chunk-2XPWOUEH.js.map +1 -0
  7. package/dist/chunk-3GHLNCM3.js +42 -0
  8. package/dist/chunk-3GHLNCM3.js.map +1 -0
  9. package/dist/chunk-3HOXC25T.js +48 -0
  10. package/dist/chunk-3HOXC25T.js.map +1 -0
  11. package/dist/chunk-3QGO5SB3.js +46 -0
  12. package/dist/chunk-3QGO5SB3.js.map +1 -0
  13. package/dist/chunk-47QJVWW2.js +85 -0
  14. package/dist/chunk-47QJVWW2.js.map +1 -0
  15. package/dist/chunk-4L63UW3I.js +35 -0
  16. package/dist/chunk-4L63UW3I.js.map +1 -0
  17. package/dist/chunk-4UUSJJFZ.js +25 -0
  18. package/dist/chunk-4UUSJJFZ.js.map +1 -0
  19. package/dist/chunk-4ZBZBRG5.js +127 -0
  20. package/dist/chunk-4ZBZBRG5.js.map +1 -0
  21. package/dist/chunk-57NXT3OX.js +92 -0
  22. package/dist/chunk-57NXT3OX.js.map +1 -0
  23. package/dist/chunk-5FF5EUZP.js +44 -0
  24. package/dist/chunk-5FF5EUZP.js.map +1 -0
  25. package/dist/chunk-5UGQXB2P.js +714 -0
  26. package/dist/chunk-5UGQXB2P.js.map +1 -0
  27. package/dist/chunk-62FT22CI.js +85 -0
  28. package/dist/chunk-62FT22CI.js.map +1 -0
  29. package/dist/chunk-673R3GSK.js +19 -0
  30. package/dist/chunk-673R3GSK.js.map +1 -0
  31. package/dist/chunk-6VINZJBV.js +128 -0
  32. package/dist/chunk-6VINZJBV.js.map +1 -0
  33. package/dist/chunk-74NZ5U3E.js +145 -0
  34. package/dist/chunk-74NZ5U3E.js.map +1 -0
  35. package/dist/chunk-755NWSNW.js +36 -0
  36. package/dist/chunk-755NWSNW.js.map +1 -0
  37. package/dist/chunk-7GLBWWMW.js +70 -0
  38. package/dist/chunk-7GLBWWMW.js.map +1 -0
  39. package/dist/chunk-7RXYW5VM.js +88 -0
  40. package/dist/chunk-7RXYW5VM.js.map +1 -0
  41. package/dist/chunk-AC4MGCXI.js +92 -0
  42. package/dist/chunk-AC4MGCXI.js.map +1 -0
  43. package/dist/chunk-AEVSVDT6.js +67 -0
  44. package/dist/chunk-AEVSVDT6.js.map +1 -0
  45. package/dist/chunk-AODIMN2N.js +68 -0
  46. package/dist/chunk-AODIMN2N.js.map +1 -0
  47. package/dist/chunk-ATHOPBCA.js +61 -0
  48. package/dist/chunk-ATHOPBCA.js.map +1 -0
  49. package/dist/chunk-AXKBNRZW.js +173 -0
  50. package/dist/chunk-AXKBNRZW.js.map +1 -0
  51. package/dist/chunk-B75MEYNR.js +106 -0
  52. package/dist/chunk-B75MEYNR.js.map +1 -0
  53. package/dist/chunk-BGKA6DI6.js +34 -0
  54. package/dist/chunk-BGKA6DI6.js.map +1 -0
  55. package/dist/chunk-BNQAJGEN.js +88 -0
  56. package/dist/chunk-BNQAJGEN.js.map +1 -0
  57. package/dist/chunk-BP2SETUC.js +101 -0
  58. package/dist/chunk-BP2SETUC.js.map +1 -0
  59. package/dist/chunk-BPUQWMBD.js +79 -0
  60. package/dist/chunk-BPUQWMBD.js.map +1 -0
  61. package/dist/chunk-BVDASR3Y.js +74 -0
  62. package/dist/chunk-BVDASR3Y.js.map +1 -0
  63. package/dist/chunk-CDA6RYOX.js +115 -0
  64. package/dist/chunk-CDA6RYOX.js.map +1 -0
  65. package/dist/chunk-CG7O3A42.js +80 -0
  66. package/dist/chunk-CG7O3A42.js.map +1 -0
  67. package/dist/chunk-CIYGNPKT.js +76 -0
  68. package/dist/chunk-CIYGNPKT.js.map +1 -0
  69. package/dist/chunk-CKXY4FTV.js +59 -0
  70. package/dist/chunk-CKXY4FTV.js.map +1 -0
  71. package/dist/chunk-CVOKZITR.js +82 -0
  72. package/dist/chunk-CVOKZITR.js.map +1 -0
  73. package/dist/chunk-CWFMFKDI.js +82 -0
  74. package/dist/chunk-CWFMFKDI.js.map +1 -0
  75. package/dist/chunk-CWVKSV7S.js +124 -0
  76. package/dist/chunk-CWVKSV7S.js.map +1 -0
  77. package/dist/chunk-CYOLRWOX.js +63 -0
  78. package/dist/chunk-CYOLRWOX.js.map +1 -0
  79. package/dist/chunk-D23LRJT6.js +116 -0
  80. package/dist/chunk-D23LRJT6.js.map +1 -0
  81. package/dist/chunk-DAKIL5PC.js +186 -0
  82. package/dist/chunk-DAKIL5PC.js.map +1 -0
  83. package/dist/chunk-DFADMEJK.js +127 -0
  84. package/dist/chunk-DFADMEJK.js.map +1 -0
  85. package/dist/chunk-E5A7HN6H.js +32 -0
  86. package/dist/chunk-E5A7HN6H.js.map +1 -0
  87. package/dist/chunk-EI63GTN7.js +57 -0
  88. package/dist/chunk-EI63GTN7.js.map +1 -0
  89. package/dist/chunk-EP25QJ4N.js +146 -0
  90. package/dist/chunk-EP25QJ4N.js.map +1 -0
  91. package/dist/chunk-ET44426Q.js +80 -0
  92. package/dist/chunk-ET44426Q.js.map +1 -0
  93. package/dist/chunk-ETEIDY34.js +67 -0
  94. package/dist/chunk-ETEIDY34.js.map +1 -0
  95. package/dist/chunk-EU55O4P7.js +76 -0
  96. package/dist/chunk-EU55O4P7.js.map +1 -0
  97. package/dist/chunk-F436537E.js +104 -0
  98. package/dist/chunk-F436537E.js.map +1 -0
  99. package/dist/chunk-FLBTGNQI.js +86 -0
  100. package/dist/chunk-FLBTGNQI.js.map +1 -0
  101. package/dist/chunk-FUT45NFW.js +46 -0
  102. package/dist/chunk-FUT45NFW.js.map +1 -0
  103. package/dist/chunk-G3LWNTVZ.js +51 -0
  104. package/dist/chunk-G3LWNTVZ.js.map +1 -0
  105. package/dist/chunk-GBJB5WLT.js +58 -0
  106. package/dist/chunk-GBJB5WLT.js.map +1 -0
  107. package/dist/chunk-GIEPEFRX.js +110 -0
  108. package/dist/chunk-GIEPEFRX.js.map +1 -0
  109. package/dist/chunk-GSO7MISR.js +58 -0
  110. package/dist/chunk-GSO7MISR.js.map +1 -0
  111. package/dist/chunk-GUQFYUIC.js +61 -0
  112. package/dist/chunk-GUQFYUIC.js.map +1 -0
  113. package/dist/chunk-H3ANHVEL.js +83 -0
  114. package/dist/chunk-H3ANHVEL.js.map +1 -0
  115. package/dist/chunk-H3VJMFJQ.js +35 -0
  116. package/dist/chunk-H3VJMFJQ.js.map +1 -0
  117. package/dist/chunk-HG4WEERE.js +26 -0
  118. package/dist/chunk-HG4WEERE.js.map +1 -0
  119. package/dist/chunk-HGPBGLNP.js +51 -0
  120. package/dist/chunk-HGPBGLNP.js.map +1 -0
  121. package/dist/chunk-HQFTW7SF.js +141 -0
  122. package/dist/chunk-HQFTW7SF.js.map +1 -0
  123. package/dist/chunk-I7WYM63C.js +170 -0
  124. package/dist/chunk-I7WYM63C.js.map +1 -0
  125. package/dist/chunk-JQXLPVWP.js +74 -0
  126. package/dist/chunk-JQXLPVWP.js.map +1 -0
  127. package/dist/chunk-K5ARID4S.js +26 -0
  128. package/dist/chunk-K5ARID4S.js.map +1 -0
  129. package/dist/chunk-K6RTLPIJ.js +41 -0
  130. package/dist/chunk-K6RTLPIJ.js.map +1 -0
  131. package/dist/chunk-KQNKKV2C.js +56 -0
  132. package/dist/chunk-KQNKKV2C.js.map +1 -0
  133. package/dist/chunk-KRN4NE4U.js +155 -0
  134. package/dist/chunk-KRN4NE4U.js.map +1 -0
  135. package/dist/chunk-L2BI762I.js +82 -0
  136. package/dist/chunk-L2BI762I.js.map +1 -0
  137. package/dist/chunk-LEEH63B2.js +56 -0
  138. package/dist/chunk-LEEH63B2.js.map +1 -0
  139. package/dist/chunk-LHRWVM3G.js +42 -0
  140. package/dist/chunk-LHRWVM3G.js.map +1 -0
  141. package/dist/chunk-LIGWMGXM.js +117 -0
  142. package/dist/chunk-LIGWMGXM.js.map +1 -0
  143. package/dist/chunk-LKYSX3QF.js +104 -0
  144. package/dist/chunk-LKYSX3QF.js.map +1 -0
  145. package/dist/chunk-MCIFB6VS.js +54 -0
  146. package/dist/chunk-MCIFB6VS.js.map +1 -0
  147. package/dist/chunk-NQZYY4LR.js +84 -0
  148. package/dist/chunk-NQZYY4LR.js.map +1 -0
  149. package/dist/chunk-O23LKHUR.js +66 -0
  150. package/dist/chunk-O23LKHUR.js.map +1 -0
  151. package/dist/chunk-PASI2U2R.js +23 -0
  152. package/dist/chunk-PASI2U2R.js.map +1 -0
  153. package/dist/chunk-PPH5NTHV.js +34 -0
  154. package/dist/chunk-PPH5NTHV.js.map +1 -0
  155. package/dist/chunk-PR6OZF6D.js +28 -0
  156. package/dist/chunk-PR6OZF6D.js.map +1 -0
  157. package/dist/chunk-PWXOXPFT.js +142 -0
  158. package/dist/chunk-PWXOXPFT.js.map +1 -0
  159. package/dist/chunk-QB6BNHO3.js +112 -0
  160. package/dist/chunk-QB6BNHO3.js.map +1 -0
  161. package/dist/chunk-QSOIJ6J3.js +91 -0
  162. package/dist/chunk-QSOIJ6J3.js.map +1 -0
  163. package/dist/chunk-QU6RLHYH.js +156 -0
  164. package/dist/chunk-QU6RLHYH.js.map +1 -0
  165. package/dist/chunk-R63ZKLQM.js +45 -0
  166. package/dist/chunk-R63ZKLQM.js.map +1 -0
  167. package/dist/chunk-RTYYJPPE.js +77 -0
  168. package/dist/chunk-RTYYJPPE.js.map +1 -0
  169. package/dist/chunk-RVOBP7PO.js +116 -0
  170. package/dist/chunk-RVOBP7PO.js.map +1 -0
  171. package/dist/chunk-SF6R5VMQ.js +97 -0
  172. package/dist/chunk-SF6R5VMQ.js.map +1 -0
  173. package/dist/chunk-SP4CP5HY.js +57 -0
  174. package/dist/chunk-SP4CP5HY.js.map +1 -0
  175. package/dist/chunk-SWJ4EUOI.js +30 -0
  176. package/dist/chunk-SWJ4EUOI.js.map +1 -0
  177. package/dist/chunk-TK24HQJJ.js +128 -0
  178. package/dist/chunk-TK24HQJJ.js.map +1 -0
  179. package/dist/chunk-TO3UAT6O.js +221 -0
  180. package/dist/chunk-TO3UAT6O.js.map +1 -0
  181. package/dist/chunk-UAYOOTRR.js +77 -0
  182. package/dist/chunk-UAYOOTRR.js.map +1 -0
  183. package/dist/chunk-UDTAMHXW.js +55 -0
  184. package/dist/chunk-UDTAMHXW.js.map +1 -0
  185. package/dist/chunk-UGKI466V.js +12 -0
  186. package/dist/chunk-UGKI466V.js.map +1 -0
  187. package/dist/chunk-UOXU7NDY.js +120 -0
  188. package/dist/chunk-UOXU7NDY.js.map +1 -0
  189. package/dist/chunk-V7OOTVK3.js +106 -0
  190. package/dist/chunk-V7OOTVK3.js.map +1 -0
  191. package/dist/chunk-VI5M7KJ2.js +1022 -0
  192. package/dist/chunk-VI5M7KJ2.js.map +1 -0
  193. package/dist/chunk-VM4RMQQN.js +11 -0
  194. package/dist/chunk-VM4RMQQN.js.map +1 -0
  195. package/dist/chunk-VMMATOPE.js +64 -0
  196. package/dist/chunk-VMMATOPE.js.map +1 -0
  197. package/dist/chunk-W2PVSIW3.js +89 -0
  198. package/dist/chunk-W2PVSIW3.js.map +1 -0
  199. package/dist/chunk-W3DUDZDU.js +88 -0
  200. package/dist/chunk-W3DUDZDU.js.map +1 -0
  201. package/dist/chunk-WKEUU2FU.js +114 -0
  202. package/dist/chunk-WKEUU2FU.js.map +1 -0
  203. package/dist/chunk-WKLW7RC6.js +28 -0
  204. package/dist/chunk-WKLW7RC6.js.map +1 -0
  205. package/dist/chunk-WSJGZNUH.js +111 -0
  206. package/dist/chunk-WSJGZNUH.js.map +1 -0
  207. package/dist/chunk-WVPDQMC2.js +144 -0
  208. package/dist/chunk-WVPDQMC2.js.map +1 -0
  209. package/dist/chunk-WWNH5ENT.js +43 -0
  210. package/dist/chunk-WWNH5ENT.js.map +1 -0
  211. package/dist/chunk-X5L62PXY.js +112 -0
  212. package/dist/chunk-X5L62PXY.js.map +1 -0
  213. package/dist/chunk-XGCV5E6W.js +133 -0
  214. package/dist/chunk-XGCV5E6W.js.map +1 -0
  215. package/dist/chunk-XRKIEL5M.js +72 -0
  216. package/dist/chunk-XRKIEL5M.js.map +1 -0
  217. package/dist/chunk-XUJYEADU.js +80 -0
  218. package/dist/chunk-XUJYEADU.js.map +1 -0
  219. package/dist/chunk-XVYNSIQC.js +116 -0
  220. package/dist/chunk-XVYNSIQC.js.map +1 -0
  221. package/dist/chunk-XWTISHXO.js +54 -0
  222. package/dist/chunk-XWTISHXO.js.map +1 -0
  223. package/dist/chunk-YOGHS4UU.js +202 -0
  224. package/dist/chunk-YOGHS4UU.js.map +1 -0
  225. package/dist/chunk-YRSKXEOD.js +135 -0
  226. package/dist/chunk-YRSKXEOD.js.map +1 -0
  227. package/dist/chunk-ZALLCR7X.js +108 -0
  228. package/dist/chunk-ZALLCR7X.js.map +1 -0
  229. package/dist/chunk-ZDAOHMCW.js +46 -0
  230. package/dist/chunk-ZDAOHMCW.js.map +1 -0
  231. package/dist/chunk-ZESICCKK.js +37 -0
  232. package/dist/chunk-ZESICCKK.js.map +1 -0
  233. package/dist/chunk-ZIKFOD6N.js +87 -0
  234. package/dist/chunk-ZIKFOD6N.js.map +1 -0
  235. package/dist/chunk-ZJRWCQEN.js +76 -0
  236. package/dist/chunk-ZJRWCQEN.js.map +1 -0
  237. package/dist/chunk-ZSRJCIWF.js +24 -0
  238. package/dist/chunk-ZSRJCIWF.js.map +1 -0
  239. package/dist/chunk-ZXPDS6DH.js +3 -0
  240. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  241. package/dist/components.css +1 -1
  242. package/dist/composites/account-menu/index.js +6 -0
  243. package/dist/composites/account-menu/index.js.map +1 -0
  244. package/dist/composites/agent-composer/index.js +7 -0
  245. package/dist/composites/agent-composer/index.js.map +1 -0
  246. package/dist/composites/agent-editor/index.js +10 -0
  247. package/dist/composites/agent-editor/index.js.map +1 -0
  248. package/dist/composites/agent-stream/index.js +12 -0
  249. package/dist/composites/agent-stream/index.js.map +1 -0
  250. package/dist/composites/agent-timeline/index.js +5 -0
  251. package/dist/composites/agent-timeline/index.js.map +1 -0
  252. package/dist/composites/approval-card/index.js +5 -0
  253. package/dist/composites/approval-card/index.js.map +1 -0
  254. package/dist/composites/chat-composer/index.js +6 -0
  255. package/dist/composites/chat-composer/index.js.map +1 -0
  256. package/dist/composites/chat-message/index.js +6 -0
  257. package/dist/composites/chat-message/index.js.map +1 -0
  258. package/dist/composites/code-block/index.js +5 -0
  259. package/dist/composites/code-block/index.js.map +1 -0
  260. package/dist/composites/command-palette/index.js +5 -0
  261. package/dist/composites/command-palette/index.js.map +1 -0
  262. package/dist/composites/confirm-dialog/index.js +7 -0
  263. package/dist/composites/confirm-dialog/index.js.map +1 -0
  264. package/dist/composites/cron-jobs-list/index.js +5 -0
  265. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  266. package/dist/composites/deployment-row/index.js +5 -0
  267. package/dist/composites/deployment-row/index.js.map +1 -0
  268. package/dist/composites/domain-config/index.js +7 -0
  269. package/dist/composites/domain-config/index.js.map +1 -0
  270. package/dist/composites/env-var-editor/index.js +7 -0
  271. package/dist/composites/env-var-editor/index.js.map +1 -0
  272. package/dist/composites/mcp-server-list/index.js +5 -0
  273. package/dist/composites/mcp-server-list/index.js.map +1 -0
  274. package/dist/composites/permission-modal/index.js +6 -0
  275. package/dist/composites/permission-modal/index.js.map +1 -0
  276. package/dist/composites/preview-env-card/index.js +6 -0
  277. package/dist/composites/preview-env-card/index.js.map +1 -0
  278. package/dist/composites/preview-panel/index.js +5 -0
  279. package/dist/composites/preview-panel/index.js.map +1 -0
  280. package/dist/composites/project-card/index.js +6 -0
  281. package/dist/composites/project-card/index.js.map +1 -0
  282. package/dist/composites/rollback-ui/index.js +6 -0
  283. package/dist/composites/rollback-ui/index.js.map +1 -0
  284. package/dist/composites/rule-editor/index.js +11 -0
  285. package/dist/composites/rule-editor/index.js.map +1 -0
  286. package/dist/composites/skill-editor/index.js +11 -0
  287. package/dist/composites/skill-editor/index.js.map +1 -0
  288. package/dist/composites/skills-list/index.js +5 -0
  289. package/dist/composites/skills-list/index.js.map +1 -0
  290. package/dist/composites/task-header/index.js +5 -0
  291. package/dist/composites/task-header/index.js.map +1 -0
  292. package/dist/composites/usage-meter/index.js +5 -0
  293. package/dist/composites/usage-meter/index.js.map +1 -0
  294. package/dist/index.d.ts +74 -1
  295. package/dist/index.js +130 -9221
  296. package/dist/index.js.map +1 -1
  297. package/dist/primitives/agent-error-card/index.js +5 -0
  298. package/dist/primitives/agent-error-card/index.js.map +1 -0
  299. package/dist/primitives/agent-event/index.js +4 -0
  300. package/dist/primitives/agent-event/index.js.map +1 -0
  301. package/dist/primitives/agent-handoff/index.js +4 -0
  302. package/dist/primitives/agent-handoff/index.js.map +1 -0
  303. package/dist/primitives/agent-profile/index.js +4 -0
  304. package/dist/primitives/agent-profile/index.js.map +1 -0
  305. package/dist/primitives/agent-starting-state/index.js +5 -0
  306. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  307. package/dist/primitives/agent-streaming/index.js +5 -0
  308. package/dist/primitives/agent-streaming/index.js.map +1 -0
  309. package/dist/primitives/alert/index.js +4 -0
  310. package/dist/primitives/alert/index.js.map +1 -0
  311. package/dist/primitives/artifact-preview/index.js +4 -0
  312. package/dist/primitives/artifact-preview/index.js.map +1 -0
  313. package/dist/primitives/attachment-chip/index.js +4 -0
  314. package/dist/primitives/attachment-chip/index.js.map +1 -0
  315. package/dist/primitives/audit-log-entry/index.js +4 -0
  316. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  317. package/dist/primitives/auto-compact-notice/index.js +5 -0
  318. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  319. package/dist/primitives/avatar/index.js +4 -0
  320. package/dist/primitives/avatar/index.js.map +1 -0
  321. package/dist/primitives/badge/index.js +4 -0
  322. package/dist/primitives/badge/index.js.map +1 -0
  323. package/dist/primitives/browser-controls/index.js +4 -0
  324. package/dist/primitives/browser-controls/index.js.map +1 -0
  325. package/dist/primitives/build-log-stream/index.js +5 -0
  326. package/dist/primitives/build-log-stream/index.js.map +1 -0
  327. package/dist/primitives/button/index.js +4 -0
  328. package/dist/primitives/button/index.js.map +1 -0
  329. package/dist/primitives/capability-indicator/index.js +4 -0
  330. package/dist/primitives/capability-indicator/index.js.map +1 -0
  331. package/dist/primitives/card/index.js +4 -0
  332. package/dist/primitives/card/index.js.map +1 -0
  333. package/dist/primitives/chat-thread/index.js +5 -0
  334. package/dist/primitives/chat-thread/index.js.map +1 -0
  335. package/dist/primitives/checkbox/index.js +4 -0
  336. package/dist/primitives/checkbox/index.js.map +1 -0
  337. package/dist/primitives/context-card/index.js +4 -0
  338. package/dist/primitives/context-card/index.js.map +1 -0
  339. package/dist/primitives/context-window-bar/index.js +4 -0
  340. package/dist/primitives/context-window-bar/index.js.map +1 -0
  341. package/dist/primitives/copy-button/index.js +4 -0
  342. package/dist/primitives/copy-button/index.js.map +1 -0
  343. package/dist/primitives/cost-meter/index.js +4 -0
  344. package/dist/primitives/cost-meter/index.js.map +1 -0
  345. package/dist/primitives/created-files-card/index.js +4 -0
  346. package/dist/primitives/created-files-card/index.js.map +1 -0
  347. package/dist/primitives/cron-job-card/index.js +4 -0
  348. package/dist/primitives/cron-job-card/index.js.map +1 -0
  349. package/dist/primitives/danger-zone/index.js +4 -0
  350. package/dist/primitives/danger-zone/index.js.map +1 -0
  351. package/dist/primitives/dialog/index.js +4 -0
  352. package/dist/primitives/dialog/index.js.map +1 -0
  353. package/dist/primitives/diff-viewer/index.js +4 -0
  354. package/dist/primitives/diff-viewer/index.js.map +1 -0
  355. package/dist/primitives/empty-state/index.js +4 -0
  356. package/dist/primitives/empty-state/index.js.map +1 -0
  357. package/dist/primitives/folder-context-card/index.js +4 -0
  358. package/dist/primitives/folder-context-card/index.js.map +1 -0
  359. package/dist/primitives/folder-selector/index.js +4 -0
  360. package/dist/primitives/folder-selector/index.js.map +1 -0
  361. package/dist/primitives/form-field/index.js +4 -0
  362. package/dist/primitives/form-field/index.js.map +1 -0
  363. package/dist/primitives/hook-config/index.js +4 -0
  364. package/dist/primitives/hook-config/index.js.map +1 -0
  365. package/dist/primitives/hook-event-log/index.js +4 -0
  366. package/dist/primitives/hook-event-log/index.js.map +1 -0
  367. package/dist/primitives/input/index.js +4 -0
  368. package/dist/primitives/input/index.js.map +1 -0
  369. package/dist/primitives/intent-selector/index.js +4 -0
  370. package/dist/primitives/intent-selector/index.js.map +1 -0
  371. package/dist/primitives/label/index.js +4 -0
  372. package/dist/primitives/label/index.js.map +1 -0
  373. package/dist/primitives/lane-board/index.js +4 -0
  374. package/dist/primitives/lane-board/index.js.map +1 -0
  375. package/dist/primitives/login-split/index.js +4 -0
  376. package/dist/primitives/login-split/index.js.map +1 -0
  377. package/dist/primitives/mcp-server-card/index.js +4 -0
  378. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  379. package/dist/primitives/memory-editor/index.js +4 -0
  380. package/dist/primitives/memory-editor/index.js.map +1 -0
  381. package/dist/primitives/mention-menu/index.js +4 -0
  382. package/dist/primitives/mention-menu/index.js.map +1 -0
  383. package/dist/primitives/metrics-panel/index.js +4 -0
  384. package/dist/primitives/metrics-panel/index.js.map +1 -0
  385. package/dist/primitives/model-card/index.js +4 -0
  386. package/dist/primitives/model-card/index.js.map +1 -0
  387. package/dist/primitives/model-selector/index.js +4 -0
  388. package/dist/primitives/model-selector/index.js.map +1 -0
  389. package/dist/primitives/pagination/index.js +4 -0
  390. package/dist/primitives/pagination/index.js.map +1 -0
  391. package/dist/primitives/permission-matrix/index.js +4 -0
  392. package/dist/primitives/permission-matrix/index.js.map +1 -0
  393. package/dist/primitives/plan-badge/index.js +4 -0
  394. package/dist/primitives/plan-badge/index.js.map +1 -0
  395. package/dist/primitives/progress/index.js +4 -0
  396. package/dist/primitives/progress/index.js.map +1 -0
  397. package/dist/primitives/progress-checklist/index.js +4 -0
  398. package/dist/primitives/progress-checklist/index.js.map +1 -0
  399. package/dist/primitives/project-switcher/index.js +4 -0
  400. package/dist/primitives/project-switcher/index.js.map +1 -0
  401. package/dist/primitives/quick-action-chips/index.js +4 -0
  402. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  403. package/dist/primitives/radio-group/index.js +4 -0
  404. package/dist/primitives/radio-group/index.js.map +1 -0
  405. package/dist/primitives/recent-folders-list/index.js +4 -0
  406. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  407. package/dist/primitives/rule-card/index.js +4 -0
  408. package/dist/primitives/rule-card/index.js.map +1 -0
  409. package/dist/primitives/run-stats/index.js +4 -0
  410. package/dist/primitives/run-stats/index.js.map +1 -0
  411. package/dist/primitives/running-tasks-panel/index.js +4 -0
  412. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  413. package/dist/primitives/scroll-area/index.js +4 -0
  414. package/dist/primitives/scroll-area/index.js.map +1 -0
  415. package/dist/primitives/select/index.js +4 -0
  416. package/dist/primitives/select/index.js.map +1 -0
  417. package/dist/primitives/session-list-item/index.js +4 -0
  418. package/dist/primitives/session-list-item/index.js.map +1 -0
  419. package/dist/primitives/session-timeline/index.js +4 -0
  420. package/dist/primitives/session-timeline/index.js.map +1 -0
  421. package/dist/primitives/sheet/index.js +4 -0
  422. package/dist/primitives/sheet/index.js.map +1 -0
  423. package/dist/primitives/sidebar/index.js +4 -0
  424. package/dist/primitives/sidebar/index.js.map +1 -0
  425. package/dist/primitives/skeleton/index.js +5 -0
  426. package/dist/primitives/skeleton/index.js.map +1 -0
  427. package/dist/primitives/skill-card/index.js +4 -0
  428. package/dist/primitives/skill-card/index.js.map +1 -0
  429. package/dist/primitives/social-auth-row/index.js +4 -0
  430. package/dist/primitives/social-auth-row/index.js.map +1 -0
  431. package/dist/primitives/stat-tile/index.js +4 -0
  432. package/dist/primitives/stat-tile/index.js.map +1 -0
  433. package/dist/primitives/status-dot/index.js +4 -0
  434. package/dist/primitives/status-dot/index.js.map +1 -0
  435. package/dist/primitives/steps-rail/index.js +4 -0
  436. package/dist/primitives/steps-rail/index.js.map +1 -0
  437. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  438. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  439. package/dist/primitives/switch/index.js +4 -0
  440. package/dist/primitives/switch/index.js.map +1 -0
  441. package/dist/primitives/system-prompt-editor/index.js +4 -0
  442. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  443. package/dist/primitives/table/index.js +4 -0
  444. package/dist/primitives/table/index.js.map +1 -0
  445. package/dist/primitives/tabs/index.js +4 -0
  446. package/dist/primitives/tabs/index.js.map +1 -0
  447. package/dist/primitives/task-plan/index.js +4 -0
  448. package/dist/primitives/task-plan/index.js.map +1 -0
  449. package/dist/primitives/terminal-panel/index.js +5 -0
  450. package/dist/primitives/terminal-panel/index.js.map +1 -0
  451. package/dist/primitives/textarea/index.js +4 -0
  452. package/dist/primitives/textarea/index.js.map +1 -0
  453. package/dist/primitives/timestamp/index.js +4 -0
  454. package/dist/primitives/timestamp/index.js.map +1 -0
  455. package/dist/primitives/toast/index.js +4 -0
  456. package/dist/primitives/toast/index.js.map +1 -0
  457. package/dist/primitives/token-usage-chart/index.js +4 -0
  458. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  459. package/dist/primitives/tool-call/index.js +4 -0
  460. package/dist/primitives/tool-call/index.js.map +1 -0
  461. package/dist/primitives/tool-call-card/index.js +4 -0
  462. package/dist/primitives/tool-call-card/index.js.map +1 -0
  463. package/dist/primitives/tool-result/index.js +4 -0
  464. package/dist/primitives/tool-result/index.js.map +1 -0
  465. package/dist/primitives/tools-list/index.js +4 -0
  466. package/dist/primitives/tools-list/index.js.map +1 -0
  467. package/dist/primitives/tooltip/index.js +4 -0
  468. package/dist/primitives/tooltip/index.js.map +1 -0
  469. package/dist/primitives/topnav/index.js +4 -0
  470. package/dist/primitives/topnav/index.js.map +1 -0
  471. package/dist/slide/index.js +1 -712
  472. package/dist/slide/index.js.map +1 -1
  473. package/dist/slide-deck/index.js +2 -688
  474. package/dist/slide-deck/index.js.map +1 -1
  475. package/llms.txt +270 -0
  476. package/package.json +123 -114
  477. package/registry/index.json +12 -0
  478. package/registry/r/alert.json +22 -0
  479. package/registry/r/pagination.json +22 -0
@@ -0,0 +1,54 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { RefreshCw, Maximize2, X } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var ArtifactPreview = forwardRef(
7
+ ({ className, title, source, tabs, toolbar, onMaximize, onRefresh, onClose, children, ...props }, ref) => /* @__PURE__ */ jsxs(
8
+ "section",
9
+ {
10
+ ref,
11
+ className: cn("flex h-full flex-col overflow-hidden rounded-xl border bg-card", className),
12
+ ...props,
13
+ children: [
14
+ /* @__PURE__ */ jsxs("header", { className: "flex items-center gap-3 border-border/40 border-b px-3 py-2", children: [
15
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
16
+ /* @__PURE__ */ jsx("p", { className: "truncate font-medium text-body-sm text-foreground", children: title }),
17
+ source ? /* @__PURE__ */ jsx("p", { className: "truncate font-mono text-label text-muted-foreground", children: source }) : null
18
+ ] }),
19
+ toolbar ?? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
20
+ onRefresh ? /* @__PURE__ */ jsx(ToolbarButton, { onClick: onRefresh, "aria-label": "Refresh", children: /* @__PURE__ */ jsx(RefreshCw, { className: "size-3.5" }) }) : null,
21
+ onMaximize ? /* @__PURE__ */ jsx(ToolbarButton, { onClick: onMaximize, "aria-label": "Maximize", children: /* @__PURE__ */ jsx(Maximize2, { className: "size-3.5" }) }) : null,
22
+ onClose ? /* @__PURE__ */ jsx(ToolbarButton, { onClick: onClose, "aria-label": "Close preview", children: /* @__PURE__ */ jsx(X, { className: "size-3.5" }) }) : null
23
+ ] })
24
+ ] }),
25
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-auto", children }),
26
+ tabs ? /* @__PURE__ */ jsx("footer", { className: "flex items-center gap-1 border-border/40 border-t px-2 py-1", children: tabs }) : null
27
+ ]
28
+ }
29
+ )
30
+ );
31
+ ArtifactPreview.displayName = "ArtifactPreview";
32
+ function ToolbarButton({
33
+ onClick,
34
+ children,
35
+ "aria-label": ariaLabel
36
+ }) {
37
+ return /* @__PURE__ */ jsx(
38
+ "button",
39
+ {
40
+ type: "button",
41
+ onClick,
42
+ "aria-label": ariaLabel,
43
+ className: cn(
44
+ "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
45
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
46
+ ),
47
+ children
48
+ }
49
+ );
50
+ }
51
+
52
+ export { ArtifactPreview };
53
+ //# sourceMappingURL=chunk-XWTISHXO.js.map
54
+ //# sourceMappingURL=chunk-XWTISHXO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/artifact-preview/artifact-preview.tsx"],"names":[],"mappings":";;;;;AA4BA,IAAM,eAAA,GAAkB,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,KAAA,EAAO,QAAQ,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,SAAA,EAAW,OAAA,EAAS,QAAA,EAAU,GAAG,KAAA,IACxF,GAAA,qBAEA,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAG,gEAAA,EAAkE,SAAS,CAAA;AAAA,MACxF,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,QAAA,EAAA,EAAO,WAAU,6DAAA,EAChB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EAAqD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,YACvE,yBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAA,EAAuD,kBAAO,CAAA,GACzE;AAAA,WAAA,EACN,CAAA;AAAA,UACC,OAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,YAAA,SAAA,mBACC,GAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,SAAA,EAAW,YAAA,EAAW,SAAA,EAC5C,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW,CAAA,EAClC,CAAA,GACE,IAAA;AAAA,YACH,UAAA,mBACC,GAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,UAAA,EAAY,YAAA,EAAW,UAAA,EAC7C,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,UAAA,EAAW,CAAA,EAClC,CAAA,GACE,IAAA;AAAA,YACH,OAAA,mBACC,GAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,OAAA,EAAS,YAAA,EAAW,eAAA,EAC1C,QAAA,kBAAA,GAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,UAAA,EAAW,CAAA,EAC1B,CAAA,GACE;AAAA,WAAA,EACN;AAAA,SAAA,EAEJ,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EAAwB,QAAA,EAAS,CAAA;AAAA,QAC/C,uBACC,GAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,6DAAA,EACf,gBACH,CAAA,GACE;AAAA;AAAA;AAAA;AAGV;AACA,eAAA,CAAgB,WAAA,GAAc,iBAAA;AAE9B,SAAS,aAAA,CAAc;AAAA,EACrB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc;AAChB,CAAA,EAIG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,YAAA,EAAY,SAAA;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,QACT,+FAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ","file":"chunk-XWTISHXO.js","sourcesContent":["import { Maximize2, RefreshCw, X } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\ninterface ArtifactPreviewProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n title: ReactNode;\n /** Optional source/destination label (e.g. \"Google Drive\", \"Local · ~/reports\"). */\n source?: ReactNode;\n /**\n * Tabs at the bottom of the artifact (e.g. \"Expense Report | Currency Summary\").\n * Caller controls the active state externally.\n */\n tabs?: ReactNode;\n /** Top toolbar actions. Defaults to refresh + maximize + close. */\n toolbar?: ReactNode;\n onMaximize?: () => void;\n onRefresh?: () => void;\n onClose?: () => void;\n}\n\n/**\n * ArtifactPreview — shell for previewing a generated artifact (XLSX, PDF, image…).\n *\n * Renders a toolbar + content slot + optional bottom tabs. The actual preview\n * (spreadsheet, PDF embed, image) is the caller's `children`, so this stays\n * dependency-free.\n */\nconst ArtifactPreview = forwardRef<HTMLElement, ArtifactPreviewProps>(\n (\n { className, title, source, tabs, toolbar, onMaximize, onRefresh, onClose, children, ...props },\n ref,\n ) => (\n <section\n ref={ref}\n className={cn(\"flex h-full flex-col overflow-hidden rounded-xl border bg-card\", className)}\n {...props}\n >\n <header className=\"flex items-center gap-3 border-border/40 border-b px-3 py-2\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-body-sm text-foreground\">{title}</p>\n {source ? (\n <p className=\"truncate font-mono text-label text-muted-foreground\">{source}</p>\n ) : null}\n </div>\n {toolbar ?? (\n <div className=\"flex items-center gap-1\">\n {onRefresh ? (\n <ToolbarButton onClick={onRefresh} aria-label=\"Refresh\">\n <RefreshCw className=\"size-3.5\" />\n </ToolbarButton>\n ) : null}\n {onMaximize ? (\n <ToolbarButton onClick={onMaximize} aria-label=\"Maximize\">\n <Maximize2 className=\"size-3.5\" />\n </ToolbarButton>\n ) : null}\n {onClose ? (\n <ToolbarButton onClick={onClose} aria-label=\"Close preview\">\n <X className=\"size-3.5\" />\n </ToolbarButton>\n ) : null}\n </div>\n )}\n </header>\n <div className=\"flex-1 overflow-auto\">{children}</div>\n {tabs ? (\n <footer className=\"flex items-center gap-1 border-border/40 border-t px-2 py-1\">\n {tabs}\n </footer>\n ) : null}\n </section>\n ),\n);\nArtifactPreview.displayName = \"ArtifactPreview\";\n\nfunction ToolbarButton({\n onClick,\n children,\n \"aria-label\": ariaLabel,\n}: {\n onClick?: () => void;\n children: ReactNode;\n \"aria-label\": string;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={ariaLabel}\n className={cn(\n \"rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n >\n {children}\n </button>\n );\n}\n\nexport { ArtifactPreview };\n"]}
@@ -0,0 +1,202 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight } from 'lucide-react';
3
+ import { forwardRef } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ function computePageRange(currentPage, totalPages, siblingCount = 1) {
7
+ if (totalPages <= 1) return [];
8
+ const totalNumbers = siblingCount * 2 + 3;
9
+ const totalWithEdges = totalNumbers + 2;
10
+ if (totalPages <= totalWithEdges) {
11
+ return Array.from({ length: totalPages }, (_, i) => i + 1);
12
+ }
13
+ const leftSibling = Math.max(currentPage - siblingCount, 1);
14
+ const rightSibling = Math.min(currentPage + siblingCount, totalPages);
15
+ const showLeftEllipsis = leftSibling > 2;
16
+ const showRightEllipsis = rightSibling < totalPages - 1;
17
+ if (!showLeftEllipsis && showRightEllipsis) {
18
+ const leftRangeEnd = 1 + (siblingCount * 2 + 2);
19
+ const leftRange = Array.from({ length: leftRangeEnd }, (_, i) => i + 1);
20
+ return [...leftRange, "ellipsis-end", totalPages];
21
+ }
22
+ if (showLeftEllipsis && !showRightEllipsis) {
23
+ const rightStart = totalPages - (siblingCount * 2 + 2);
24
+ const rightRange = Array.from(
25
+ { length: totalPages - rightStart + 1 },
26
+ (_, i) => rightStart + i
27
+ );
28
+ return [1, "ellipsis-start", ...rightRange];
29
+ }
30
+ const middleRange = Array.from(
31
+ { length: rightSibling - leftSibling + 1 },
32
+ (_, i) => leftSibling + i
33
+ );
34
+ return [1, "ellipsis-start", ...middleRange, "ellipsis-end", totalPages];
35
+ }
36
+ var SIZE = {
37
+ sm: "size-7 text-label",
38
+ md: "size-8 text-body-sm"
39
+ };
40
+ var ICON_SIZE = {
41
+ sm: "size-3",
42
+ md: "size-3.5"
43
+ };
44
+ var Pagination = forwardRef(
45
+ ({
46
+ className,
47
+ currentPage,
48
+ totalPages,
49
+ onPageChange,
50
+ siblingCount = 1,
51
+ showJumpButtons = true,
52
+ size = "md",
53
+ ...props
54
+ }, ref) => {
55
+ if (totalPages <= 1) {
56
+ return null;
57
+ }
58
+ const range = computePageRange(currentPage, totalPages, siblingCount);
59
+ const prevDisabled = currentPage <= 1;
60
+ const nextDisabled = currentPage >= totalPages;
61
+ const sizeClass = SIZE[size];
62
+ const iconClass = ICON_SIZE[size];
63
+ const buttonBase = cn(
64
+ "inline-flex items-center justify-center rounded-md font-mono tabular-nums",
65
+ "transition-colors",
66
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
67
+ sizeClass
68
+ );
69
+ function go(page) {
70
+ const clamped = Math.max(1, Math.min(totalPages, page));
71
+ if (clamped !== currentPage) onPageChange(clamped);
72
+ }
73
+ function handleKeyDown(e) {
74
+ if (e.key === "ArrowLeft") {
75
+ e.preventDefault();
76
+ go(currentPage - 1);
77
+ } else if (e.key === "ArrowRight") {
78
+ e.preventDefault();
79
+ go(currentPage + 1);
80
+ } else if (e.key === "Home") {
81
+ e.preventDefault();
82
+ go(1);
83
+ } else if (e.key === "End") {
84
+ e.preventDefault();
85
+ go(totalPages);
86
+ }
87
+ }
88
+ return /* @__PURE__ */ jsxs(
89
+ "nav",
90
+ {
91
+ ref,
92
+ "aria-label": "Pagination",
93
+ onKeyDown: handleKeyDown,
94
+ className: cn("flex items-center gap-1", className),
95
+ ...props,
96
+ children: [
97
+ showJumpButtons ? /* @__PURE__ */ jsx(
98
+ "button",
99
+ {
100
+ type: "button",
101
+ onClick: () => go(1),
102
+ disabled: prevDisabled,
103
+ "aria-label": "Go to first page",
104
+ "aria-disabled": prevDisabled || void 0,
105
+ className: cn(
106
+ buttonBase,
107
+ "text-foreground hover:bg-muted",
108
+ prevDisabled && "cursor-not-allowed opacity-40 hover:bg-transparent"
109
+ ),
110
+ children: /* @__PURE__ */ jsx(ChevronsLeft, { "aria-hidden": "true", className: iconClass })
111
+ }
112
+ ) : null,
113
+ /* @__PURE__ */ jsx(
114
+ "button",
115
+ {
116
+ type: "button",
117
+ onClick: () => go(currentPage - 1),
118
+ disabled: prevDisabled,
119
+ "aria-label": "Go to previous page",
120
+ "aria-disabled": prevDisabled || void 0,
121
+ className: cn(
122
+ buttonBase,
123
+ "text-foreground hover:bg-muted",
124
+ prevDisabled && "cursor-not-allowed opacity-40 hover:bg-transparent"
125
+ ),
126
+ children: /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true", className: iconClass })
127
+ }
128
+ ),
129
+ range.map((item) => {
130
+ if (item === "ellipsis-start" || item === "ellipsis-end") {
131
+ return /* @__PURE__ */ jsx(
132
+ "span",
133
+ {
134
+ "aria-hidden": "true",
135
+ className: cn(
136
+ "inline-flex items-center justify-center text-muted-foreground",
137
+ sizeClass
138
+ ),
139
+ children: "\u2026"
140
+ },
141
+ item
142
+ );
143
+ }
144
+ const isActive = item === currentPage;
145
+ return /* @__PURE__ */ jsx(
146
+ "button",
147
+ {
148
+ type: "button",
149
+ onClick: () => go(item),
150
+ "aria-label": `Go to page ${item}`,
151
+ "aria-current": isActive ? "page" : void 0,
152
+ className: cn(
153
+ buttonBase,
154
+ isActive ? "bg-primary text-primary-foreground hover:bg-primary" : "text-foreground hover:bg-muted"
155
+ ),
156
+ children: item
157
+ },
158
+ item
159
+ );
160
+ }),
161
+ /* @__PURE__ */ jsx(
162
+ "button",
163
+ {
164
+ type: "button",
165
+ onClick: () => go(currentPage + 1),
166
+ disabled: nextDisabled,
167
+ "aria-label": "Go to next page",
168
+ "aria-disabled": nextDisabled || void 0,
169
+ className: cn(
170
+ buttonBase,
171
+ "text-foreground hover:bg-muted",
172
+ nextDisabled && "cursor-not-allowed opacity-40 hover:bg-transparent"
173
+ ),
174
+ children: /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true", className: iconClass })
175
+ }
176
+ ),
177
+ showJumpButtons ? /* @__PURE__ */ jsx(
178
+ "button",
179
+ {
180
+ type: "button",
181
+ onClick: () => go(totalPages),
182
+ disabled: nextDisabled,
183
+ "aria-label": "Go to last page",
184
+ "aria-disabled": nextDisabled || void 0,
185
+ className: cn(
186
+ buttonBase,
187
+ "text-foreground hover:bg-muted",
188
+ nextDisabled && "cursor-not-allowed opacity-40 hover:bg-transparent"
189
+ ),
190
+ children: /* @__PURE__ */ jsx(ChevronsRight, { "aria-hidden": "true", className: iconClass })
191
+ }
192
+ ) : null
193
+ ]
194
+ }
195
+ );
196
+ }
197
+ );
198
+ Pagination.displayName = "Pagination";
199
+
200
+ export { Pagination, computePageRange };
201
+ //# sourceMappingURL=chunk-YOGHS4UU.js.map
202
+ //# sourceMappingURL=chunk-YOGHS4UU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/pagination/pagination.tsx"],"names":[],"mappings":"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","file":"chunk-YOGHS4UU.js","sourcesContent":["import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from \"lucide-react\";\nimport { forwardRef } from \"react\";\nimport type { HTMLAttributes, KeyboardEvent } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Pagination — accessible page-number navigation primitive.\n *\n * Renders a `<nav aria-label=\"Pagination\">` containing a button group:\n * `[<<] [<] 1 ... 5 6 [7] 8 9 ... 42 [>] [>>]`. The active page carries\n * `aria-current=\"page\"`. Keyboard navigation (ArrowLeft / ArrowRight /\n * Home / End) is wired on the nav. Ellipses are rendered as\n * non-interactive `<span>` elements with `aria-hidden`.\n *\n * Renders nothing when `totalPages <= 1` (the page is the whole list).\n *\n * `siblingCount` controls how many neighbors of the current page are\n * always visible (default 1 → \"5 6 [7] 8 9\"). `showJumpButtons`\n * toggles the first/last `<<` / `>>` buttons.\n *\n * Consumers control state (`currentPage`) and are responsible for any\n * URL routing — the buttons are `<button>`, not `<a>`.\n *\n * @example\n * <Pagination\n * currentPage={page}\n * totalPages={42}\n * onPageChange={setPage}\n * />\n */\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, \"onChange\"> {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n /** Neighbors of current page that stay visible. Default 1. */\n siblingCount?: number;\n /** Render `<<` / `>>` first/last buttons. Default true. */\n showJumpButtons?: boolean;\n /** Size variant. Default md. */\n size?: \"sm\" | \"md\";\n}\n\n/**\n * Pure helper: compute the visible page-range with ellipses.\n * Exported for unit testing — most pagination bugs live here.\n */\nexport function computePageRange(\n currentPage: number,\n totalPages: number,\n siblingCount = 1,\n): Array<number | \"ellipsis-start\" | \"ellipsis-end\"> {\n if (totalPages <= 1) return [];\n\n // Always keep first + last + siblings around current.\n // Total \"core\" buttons: 1 + (siblingCount * 2 + 1) + 1 = siblingCount * 2 + 3.\n // Plus possibly 2 ellipsis placeholders → max visible = siblingCount * 2 + 5.\n const totalNumbers = siblingCount * 2 + 3;\n const totalWithEdges = totalNumbers + 2;\n\n if (totalPages <= totalWithEdges) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSibling = Math.max(currentPage - siblingCount, 1);\n const rightSibling = Math.min(currentPage + siblingCount, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRangeEnd = 1 + (siblingCount * 2 + 2);\n const leftRange = Array.from({ length: leftRangeEnd }, (_, i) => i + 1);\n return [...leftRange, \"ellipsis-end\", totalPages];\n }\n\n if (showLeftEllipsis && !showRightEllipsis) {\n const rightStart = totalPages - (siblingCount * 2 + 2);\n const rightRange = Array.from(\n { length: totalPages - rightStart + 1 },\n (_, i) => rightStart + i,\n );\n return [1, \"ellipsis-start\", ...rightRange];\n }\n\n // Both sides need ellipsis.\n const middleRange = Array.from(\n { length: rightSibling - leftSibling + 1 },\n (_, i) => leftSibling + i,\n );\n return [1, \"ellipsis-start\", ...middleRange, \"ellipsis-end\", totalPages];\n}\n\nconst SIZE: Record<NonNullable<PaginationProps[\"size\"]>, string> = {\n sm: \"size-7 text-label\",\n md: \"size-8 text-body-sm\",\n};\n\nconst ICON_SIZE: Record<NonNullable<PaginationProps[\"size\"]>, string> = {\n sm: \"size-3\",\n md: \"size-3.5\",\n};\n\nconst Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n {\n className,\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showJumpButtons = true,\n size = \"md\",\n ...props\n },\n ref,\n ) => {\n if (totalPages <= 1) {\n return null;\n }\n\n const range = computePageRange(currentPage, totalPages, siblingCount);\n const prevDisabled = currentPage <= 1;\n const nextDisabled = currentPage >= totalPages;\n const sizeClass = SIZE[size];\n const iconClass = ICON_SIZE[size];\n\n const buttonBase = cn(\n \"inline-flex items-center justify-center rounded-md font-mono tabular-nums\",\n \"transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n sizeClass,\n );\n\n function go(page: number) {\n const clamped = Math.max(1, Math.min(totalPages, page));\n if (clamped !== currentPage) onPageChange(clamped);\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLElement>) {\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n go(currentPage - 1);\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n go(currentPage + 1);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n go(1);\n } else if (e.key === \"End\") {\n e.preventDefault();\n go(totalPages);\n }\n }\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n onKeyDown={handleKeyDown}\n className={cn(\"flex items-center gap-1\", className)}\n {...props}\n >\n {showJumpButtons ? (\n <button\n type=\"button\"\n onClick={() => go(1)}\n disabled={prevDisabled}\n aria-label=\"Go to first page\"\n aria-disabled={prevDisabled || undefined}\n className={cn(\n buttonBase,\n \"text-foreground hover:bg-muted\",\n prevDisabled && \"cursor-not-allowed opacity-40 hover:bg-transparent\",\n )}\n >\n <ChevronsLeft aria-hidden=\"true\" className={iconClass} />\n </button>\n ) : null}\n <button\n type=\"button\"\n onClick={() => go(currentPage - 1)}\n disabled={prevDisabled}\n aria-label=\"Go to previous page\"\n aria-disabled={prevDisabled || undefined}\n className={cn(\n buttonBase,\n \"text-foreground hover:bg-muted\",\n prevDisabled && \"cursor-not-allowed opacity-40 hover:bg-transparent\",\n )}\n >\n <ChevronLeft aria-hidden=\"true\" className={iconClass} />\n </button>\n {range.map((item) => {\n if (item === \"ellipsis-start\" || item === \"ellipsis-end\") {\n return (\n <span\n key={item}\n aria-hidden=\"true\"\n className={cn(\n \"inline-flex items-center justify-center text-muted-foreground\",\n sizeClass,\n )}\n >\n …\n </span>\n );\n }\n const isActive = item === currentPage;\n return (\n <button\n key={item}\n type=\"button\"\n onClick={() => go(item)}\n aria-label={`Go to page ${item}`}\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonBase,\n isActive\n ? \"bg-primary text-primary-foreground hover:bg-primary\"\n : \"text-foreground hover:bg-muted\",\n )}\n >\n {item}\n </button>\n );\n })}\n <button\n type=\"button\"\n onClick={() => go(currentPage + 1)}\n disabled={nextDisabled}\n aria-label=\"Go to next page\"\n aria-disabled={nextDisabled || undefined}\n className={cn(\n buttonBase,\n \"text-foreground hover:bg-muted\",\n nextDisabled && \"cursor-not-allowed opacity-40 hover:bg-transparent\",\n )}\n >\n <ChevronRight aria-hidden=\"true\" className={iconClass} />\n </button>\n {showJumpButtons ? (\n <button\n type=\"button\"\n onClick={() => go(totalPages)}\n disabled={nextDisabled}\n aria-label=\"Go to last page\"\n aria-disabled={nextDisabled || undefined}\n className={cn(\n buttonBase,\n \"text-foreground hover:bg-muted\",\n nextDisabled && \"cursor-not-allowed opacity-40 hover:bg-transparent\",\n )}\n >\n <ChevronsRight aria-hidden=\"true\" className={iconClass} />\n </button>\n ) : null}\n </nav>\n );\n },\n);\nPagination.displayName = \"Pagination\";\n\nexport { Pagination };\n"]}
@@ -0,0 +1,135 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { ChevronUp, ChevronDown } from 'lucide-react';
3
+ import { createContext, forwardRef, useContext } from 'react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var TableDensityContext = createContext("default");
7
+ var alignClass = {
8
+ left: "text-left",
9
+ center: "text-center",
10
+ right: "text-right"
11
+ };
12
+ var Root = forwardRef(
13
+ ({ className, density = "default", children, ...props }, ref) => /* @__PURE__ */ jsx(TableDensityContext.Provider, { value: density, children: /* @__PURE__ */ jsx(
14
+ "table",
15
+ {
16
+ ref,
17
+ className: cn("w-full border-collapse font-sans text-body-sm", className),
18
+ ...props,
19
+ children
20
+ }
21
+ ) })
22
+ );
23
+ Root.displayName = "Table";
24
+ var Header = forwardRef(
25
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
26
+ "thead",
27
+ {
28
+ ref,
29
+ className: cn(
30
+ "border-border/40 border-b text-label-caps text-muted-foreground uppercase tracking-wider",
31
+ className
32
+ ),
33
+ ...props
34
+ }
35
+ )
36
+ );
37
+ Header.displayName = "Table.Header";
38
+ var Body = forwardRef(
39
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("tbody", { ref, className: cn("text-foreground", className), ...props })
40
+ );
41
+ Body.displayName = "Table.Body";
42
+ var Row = forwardRef(
43
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
44
+ "tr",
45
+ {
46
+ ref,
47
+ className: cn(
48
+ "border-border/20 border-b transition-colors last:border-0 hover:bg-muted/40",
49
+ className
50
+ ),
51
+ ...props
52
+ }
53
+ )
54
+ );
55
+ Row.displayName = "Table.Row";
56
+ var Cell = forwardRef(
57
+ ({ className, align = "left", numeric, children, ...props }, ref) => {
58
+ const density = useContext(TableDensityContext);
59
+ return /* @__PURE__ */ jsx(
60
+ "td",
61
+ {
62
+ ref,
63
+ className: cn(
64
+ "px-3",
65
+ density === "compact" ? "py-1.5" : "py-3",
66
+ alignClass[align],
67
+ numeric && "font-mono tabular-nums",
68
+ className
69
+ ),
70
+ ...props,
71
+ children
72
+ }
73
+ );
74
+ }
75
+ );
76
+ Cell.displayName = "Table.Cell";
77
+ var HeaderCell = forwardRef(
78
+ ({ className, align = "left", onSort, sortDirection = "none", children, ...props }, ref) => {
79
+ const sortAffordance = onSort !== void 0 ? /* @__PURE__ */ jsxs("span", { className: "ml-1 inline-flex flex-col", children: [
80
+ /* @__PURE__ */ jsx(
81
+ ChevronUp,
82
+ {
83
+ "aria-hidden": "true",
84
+ className: cn("-mb-1 size-3", sortDirection === "asc" ? "opacity-100" : "opacity-30")
85
+ }
86
+ ),
87
+ /* @__PURE__ */ jsx(
88
+ ChevronDown,
89
+ {
90
+ "aria-hidden": "true",
91
+ className: cn("size-3", sortDirection === "desc" ? "opacity-100" : "opacity-30")
92
+ }
93
+ )
94
+ ] }) : null;
95
+ const ariaSort = onSort === void 0 ? void 0 : sortDirection === "asc" ? "ascending" : sortDirection === "desc" ? "descending" : "none";
96
+ return /* @__PURE__ */ jsx(
97
+ "th",
98
+ {
99
+ ref,
100
+ scope: "col",
101
+ "aria-sort": ariaSort,
102
+ className: cn(
103
+ "px-3 py-2.5 font-medium",
104
+ alignClass[align],
105
+ align === "right" && "[&_button]:justify-end",
106
+ className
107
+ ),
108
+ ...props,
109
+ children: onSort !== void 0 ? /* @__PURE__ */ jsxs(
110
+ "button",
111
+ {
112
+ type: "button",
113
+ onClick: onSort,
114
+ className: cn(
115
+ "inline-flex items-center gap-1",
116
+ "text-label-caps uppercase tracking-wider",
117
+ "transition-colors hover:text-foreground",
118
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
119
+ ),
120
+ children: [
121
+ children,
122
+ sortAffordance
123
+ ]
124
+ }
125
+ ) : children
126
+ }
127
+ );
128
+ }
129
+ );
130
+ HeaderCell.displayName = "Table.HeaderCell";
131
+ var Table = Object.assign(Root, { Header, Body, Row, Cell, HeaderCell });
132
+
133
+ export { Table };
134
+ //# sourceMappingURL=chunk-YRSKXEOD.js.map
135
+ //# sourceMappingURL=chunk-YRSKXEOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/table/table.tsx"],"names":[],"mappings":"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","file":"chunk-YRSKXEOD.js","sourcesContent":["import { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Table — semantic data table primitive with sub-components.\n *\n * Composition:\n * <Table density=\"default\">\n * <Table.Header>\n * <Table.Row>\n * <Table.HeaderCell>Date</Table.HeaderCell>\n * <Table.HeaderCell align=\"right\">Amount</Table.HeaderCell>\n * </Table.Row>\n * </Table.Header>\n * <Table.Body>\n * <Table.Row>\n * <Table.Cell>2026-05-23</Table.Cell>\n * <Table.Cell align=\"right\" numeric>$ 42.00</Table.Cell>\n * </Table.Row>\n * </Table.Body>\n * </Table>\n *\n * density propagates via Context so Cells pick up vertical padding without\n * prop drilling. Sub-components are attached as static properties on the\n * root (`Table.Header`, etc.) — single import surface.\n *\n * Sortable header: pass `onSort` + `sortDirection`. The HeaderCell renders\n * the sort affordance (ChevronUp/ChevronDown) and triggers the consumer\n * callback. `sortDirection` without `onSort` is a no-op (header stays\n * static); `sortDirection=\"none\"` with `onSort` shows a dimmed affordance.\n */\n\ntype TableDensity = \"default\" | \"compact\";\ntype AlignKind = \"left\" | \"center\" | \"right\";\ntype SortDirection = \"asc\" | \"desc\" | \"none\";\n\nconst TableDensityContext = createContext<TableDensity>(\"default\");\n\nconst alignClass: Record<AlignKind, string> = {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n};\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n density?: TableDensity;\n}\n\nconst Root = forwardRef<HTMLTableElement, TableProps>(\n ({ className, density = \"default\", children, ...props }, ref) => (\n <TableDensityContext.Provider value={density}>\n <table\n ref={ref}\n className={cn(\"w-full border-collapse font-sans text-body-sm\", className)}\n {...props}\n >\n {children}\n </table>\n </TableDensityContext.Provider>\n ),\n);\nRoot.displayName = \"Table\";\n\nconst Header = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <thead\n ref={ref}\n className={cn(\n \"border-border/40 border-b text-label-caps text-muted-foreground uppercase tracking-wider\",\n className,\n )}\n {...props}\n />\n ),\n);\nHeader.displayName = \"Table.Header\";\n\nconst Body = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"text-foreground\", className)} {...props} />\n ),\n);\nBody.displayName = \"Table.Body\";\n\nconst Row = forwardRef<HTMLTableRowElement, HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-border/20 border-b transition-colors last:border-0 hover:bg-muted/40\",\n className,\n )}\n {...props}\n />\n ),\n);\nRow.displayName = \"Table.Row\";\n\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n align?: AlignKind;\n numeric?: boolean;\n}\n\nconst Cell = forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, align = \"left\", numeric, children, ...props }, ref) => {\n const density = useContext(TableDensityContext);\n return (\n <td\n ref={ref}\n className={cn(\n \"px-3\",\n density === \"compact\" ? \"py-1.5\" : \"py-3\",\n alignClass[align],\n numeric && \"font-mono tabular-nums\",\n className,\n )}\n {...props}\n >\n {children}\n </td>\n );\n },\n);\nCell.displayName = \"Table.Cell\";\n\nexport interface TableHeaderCellProps extends ThHTMLAttributes<HTMLTableCellElement> {\n align?: AlignKind;\n /** When provided, header becomes a sort trigger. */\n onSort?: () => void;\n /** Current sort state for this column. */\n sortDirection?: SortDirection;\n}\n\nconst HeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n ({ className, align = \"left\", onSort, sortDirection = \"none\", children, ...props }, ref) => {\n const sortAffordance =\n onSort !== undefined ? (\n <span className=\"ml-1 inline-flex flex-col\">\n <ChevronUp\n aria-hidden=\"true\"\n className={cn(\"-mb-1 size-3\", sortDirection === \"asc\" ? \"opacity-100\" : \"opacity-30\")}\n />\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\"size-3\", sortDirection === \"desc\" ? \"opacity-100\" : \"opacity-30\")}\n />\n </span>\n ) : null;\n\n const ariaSort: ThHTMLAttributes<HTMLTableCellElement>[\"aria-sort\"] =\n onSort === undefined\n ? undefined\n : sortDirection === \"asc\"\n ? \"ascending\"\n : sortDirection === \"desc\"\n ? \"descending\"\n : \"none\";\n\n return (\n <th\n ref={ref}\n scope=\"col\"\n aria-sort={ariaSort}\n className={cn(\n \"px-3 py-2.5 font-medium\",\n alignClass[align],\n align === \"right\" && \"[&_button]:justify-end\",\n className,\n )}\n {...props}\n >\n {onSort !== undefined ? (\n <button\n type=\"button\"\n onClick={onSort}\n className={cn(\n \"inline-flex items-center gap-1\",\n \"text-label-caps uppercase tracking-wider\",\n \"transition-colors hover:text-foreground\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n >\n {children}\n {sortAffordance}\n </button>\n ) : (\n children\n )}\n </th>\n );\n },\n);\nHeaderCell.displayName = \"Table.HeaderCell\";\n\ntype TableRoot = typeof Root & {\n Header: typeof Header;\n Body: typeof Body;\n Row: typeof Row;\n Cell: typeof Cell;\n HeaderCell: typeof HeaderCell;\n};\n\nconst Table: TableRoot = Object.assign(Root, { Header, Body, Row, Cell, HeaderCell });\n\nexport { Table };\n"]}
@@ -0,0 +1,108 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { Slot } from '@radix-ui/react-slot';
3
+ import { createContext, forwardRef, useContext } from 'react';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var CardContext = createContext({ size: "md" });
7
+ var useCardSize = () => useContext(CardContext).size;
8
+ var Root = forwardRef(
9
+ ({ className, size = "md", ...props }, ref) => /* @__PURE__ */ jsx(CardContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx(
10
+ "div",
11
+ {
12
+ ref,
13
+ className: cn(
14
+ "rounded-xl border bg-card text-card-foreground shadow-md",
15
+ "transition-shadow duration-base ease-out-soft",
16
+ className
17
+ ),
18
+ ...props
19
+ }
20
+ ) })
21
+ );
22
+ Root.displayName = "Card";
23
+ var headerPadBySize = {
24
+ sm: "gap-1 p-3 pb-1.5",
25
+ md: "gap-1.5 p-5 pb-2.5",
26
+ lg: "gap-2 p-6 pb-3"
27
+ };
28
+ var Header = forwardRef(
29
+ ({ className, ...props }, ref) => {
30
+ const size = useCardSize();
31
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col", headerPadBySize[size], className), ...props });
32
+ }
33
+ );
34
+ Header.displayName = "Card.Header";
35
+ var titleFontBySize = {
36
+ sm: "text-title-md",
37
+ md: "text-title-lg",
38
+ lg: "text-headline"
39
+ };
40
+ var Title = forwardRef(
41
+ ({ className, asChild = false, ...props }, ref) => {
42
+ const Comp = asChild ? Slot : "h3";
43
+ const size = useCardSize();
44
+ return /* @__PURE__ */ jsx(
45
+ Comp,
46
+ {
47
+ ref,
48
+ className: cn(
49
+ "font-display text-foreground tracking-tight",
50
+ titleFontBySize[size],
51
+ className
52
+ ),
53
+ ...props
54
+ }
55
+ );
56
+ }
57
+ );
58
+ Title.displayName = "Card.Title";
59
+ var Description = forwardRef(
60
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", { ref, className: cn("text-body-sm text-muted-foreground", className), ...props })
61
+ );
62
+ Description.displayName = "Card.Description";
63
+ var bodyPadBySize = {
64
+ sm: "p-3 pt-1.5",
65
+ md: "p-5 pt-2.5",
66
+ lg: "p-6 pt-3"
67
+ };
68
+ var Body = forwardRef(
69
+ ({ className, ...props }, ref) => {
70
+ const size = useCardSize();
71
+ return /* @__PURE__ */ jsx("div", { ref, className: cn(bodyPadBySize[size], className), ...props });
72
+ }
73
+ );
74
+ Body.displayName = "Card.Body";
75
+ var footerPadBySize = {
76
+ sm: "gap-2 p-3 pt-2",
77
+ md: "gap-3 p-5 pt-3",
78
+ lg: "gap-4 p-6 pt-4"
79
+ };
80
+ var Footer = forwardRef(
81
+ ({ className, ...props }, ref) => {
82
+ const size = useCardSize();
83
+ return /* @__PURE__ */ jsx(
84
+ "div",
85
+ {
86
+ ref,
87
+ className: cn(
88
+ "flex items-center border-border/40 border-t",
89
+ footerPadBySize[size],
90
+ className
91
+ ),
92
+ ...props
93
+ }
94
+ );
95
+ }
96
+ );
97
+ Footer.displayName = "Card.Footer";
98
+ var Card = /* @__PURE__ */ Object.assign(Root, {
99
+ Header,
100
+ Title,
101
+ Description,
102
+ Body,
103
+ Footer
104
+ });
105
+
106
+ export { Card };
107
+ //# sourceMappingURL=chunk-ZALLCR7X.js.map
108
+ //# sourceMappingURL=chunk-ZALLCR7X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/card/card.tsx"],"names":[],"mappings":"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","file":"chunk-ZALLCR7X.js","sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * Card — surface container for grouping related content.\n *\n * Composition pattern (shadcn-style):\n * <Card>\n * <Card.Header>\n * <Card.Title>…</Card.Title>\n * <Card.Description>…</Card.Description>\n * </Card.Header>\n * <Card.Body>…</Card.Body>\n * <Card.Footer>…</Card.Footer>\n * </Card>\n *\n * The `size` prop on the root propagates to subparts via Context, so a\n * single declaration controls padding + heading scale across the compound.\n * Subparts used in isolation default to `md`. Subparts do NOT accept a `size`\n * prop of their own — use `className` for granular per-subpart tweaks.\n * (EC-8, edge-case review 2026-05-20.)\n */\n\ntype CardSize = \"sm\" | \"md\" | \"lg\";\n\ninterface CardContextValue {\n size: CardSize;\n}\n\nconst CardContext = createContext<CardContextValue>({ size: \"md\" });\n\nconst useCardSize = (): CardSize => useContext(CardContext).size;\n\ninterface CardRootProps extends HTMLAttributes<HTMLDivElement> {\n size?: CardSize;\n}\n\nconst Root = forwardRef<HTMLDivElement, CardRootProps>(\n ({ className, size = \"md\", ...props }, ref) => (\n <CardContext.Provider value={{ size }}>\n <div\n ref={ref}\n className={cn(\n \"rounded-xl border bg-card text-card-foreground shadow-md\",\n \"transition-shadow duration-base ease-out-soft\",\n className,\n )}\n {...props}\n />\n </CardContext.Provider>\n ),\n);\nRoot.displayName = \"Card\";\n\nconst headerPadBySize: Record<CardSize, string> = {\n sm: \"gap-1 p-3 pb-1.5\",\n md: \"gap-1.5 p-5 pb-2.5\",\n lg: \"gap-2 p-6 pb-3\",\n};\n\nconst Header = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const size = useCardSize();\n return (\n <div ref={ref} className={cn(\"flex flex-col\", headerPadBySize[size], className)} {...props} />\n );\n },\n);\nHeader.displayName = \"Card.Header\";\n\nconst titleFontBySize: Record<CardSize, string> = {\n sm: \"text-title-md\",\n md: \"text-title-lg\",\n lg: \"text-headline\",\n};\n\ninterface TitleProps extends HTMLAttributes<HTMLHeadingElement> {\n /**\n * When true, renders the child element with the Card.Title styles applied\n * (Radix Slot pattern). Use to swap the default `<h3>` for `<h1>` / `<h2>`\n * when the heading hierarchy requires it.\n */\n asChild?: boolean;\n}\n\nconst Title = forwardRef<HTMLHeadingElement, TitleProps>(\n ({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"h3\";\n const size = useCardSize();\n return (\n <Comp\n ref={ref}\n className={cn(\n \"font-display text-foreground tracking-tight\",\n titleFontBySize[size],\n className,\n )}\n {...props}\n />\n );\n },\n);\nTitle.displayName = \"Card.Title\";\n\nconst Description = forwardRef<HTMLParagraphElement, HTMLAttributes<HTMLParagraphElement>>(\n ({ className, ...props }, ref) => (\n <p ref={ref} className={cn(\"text-body-sm text-muted-foreground\", className)} {...props} />\n ),\n);\nDescription.displayName = \"Card.Description\";\n\nconst bodyPadBySize: Record<CardSize, string> = {\n sm: \"p-3 pt-1.5\",\n md: \"p-5 pt-2.5\",\n lg: \"p-6 pt-3\",\n};\n\nconst Body = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const size = useCardSize();\n return <div ref={ref} className={cn(bodyPadBySize[size], className)} {...props} />;\n },\n);\nBody.displayName = \"Card.Body\";\n\nconst footerPadBySize: Record<CardSize, string> = {\n sm: \"gap-2 p-3 pt-2\",\n md: \"gap-3 p-5 pt-3\",\n lg: \"gap-4 p-6 pt-4\",\n};\n\nconst Footer = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const size = useCardSize();\n return (\n <div\n ref={ref}\n className={cn(\n \"flex items-center border-border/40 border-t\",\n footerPadBySize[size],\n className,\n )}\n {...props}\n />\n );\n },\n);\nFooter.displayName = \"Card.Footer\";\n\nconst Card = /*#__PURE__*/ Object.assign(Root, {\n Header,\n Title,\n Description,\n Body,\n Footer,\n});\n\nexport { Card };\n"]}
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-ZSRJCIWF.js';
2
+ import { forwardRef } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var Root = forwardRef(
6
+ ({ className, title = "Danger Zone", children, ...props }, ref) => /* @__PURE__ */ jsxs(
7
+ "section",
8
+ {
9
+ ref,
10
+ "aria-label": typeof title === "string" ? title : "Danger Zone",
11
+ className: cn("rounded-xl border border-destructive/30 bg-destructive/[0.02]", className),
12
+ ...props,
13
+ children: [
14
+ /* @__PURE__ */ jsx("div", { className: "border-destructive/20 border-b px-5 py-3 font-sans text-destructive text-label-caps uppercase tracking-wider", children: title }),
15
+ children
16
+ ]
17
+ }
18
+ )
19
+ );
20
+ Root.displayName = "DangerZone";
21
+ var Action = forwardRef(
22
+ ({ className, title, description, action, ...props }, ref) => /* @__PURE__ */ jsxs(
23
+ "div",
24
+ {
25
+ ref,
26
+ className: cn(
27
+ "flex items-center justify-between gap-4 border-destructive/10 border-b px-5 py-4 last:border-b-0",
28
+ className
29
+ ),
30
+ ...props,
31
+ children: [
32
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
33
+ /* @__PURE__ */ jsx("span", { className: "font-medium font-sans text-body-sm text-foreground", children: title }),
34
+ /* @__PURE__ */ jsx("span", { className: "mt-0.5 font-sans text-label text-muted-foreground", children: description })
35
+ ] }),
36
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
37
+ ]
38
+ }
39
+ )
40
+ );
41
+ Action.displayName = "DangerZone.Action";
42
+ var DangerZone = Object.assign(Root, { Action });
43
+
44
+ export { DangerZone };
45
+ //# sourceMappingURL=chunk-ZDAOHMCW.js.map
46
+ //# sourceMappingURL=chunk-ZDAOHMCW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/danger-zone/danger-zone.tsx"],"names":[],"mappings":";;;;AA+BA,IAAM,IAAA,GAAO,UAAA;AAAA,EACX,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,eAAe,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBACzD,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,YAAA,EAAY,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,aAAA;AAAA,MAChD,SAAA,EAAW,EAAA,CAAG,+DAAA,EAAiE,SAAS,CAAA;AAAA,MACvF,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8GAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC;AAAA;AAAA;AAAA;AAGP,CAAA;AACA,IAAA,CAAK,WAAA,GAAc,YAAA;AASnB,IAAM,MAAA,GAAS,UAAA;AAAA,EACb,CAAC,EAAE,SAAA,EAAW,KAAA,EAAO,aAAa,MAAA,EAAQ,GAAG,KAAA,EAAM,EAAG,GAAA,qBACpD,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,QACT,kGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAA,EAAsD,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAC5E,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mDAAA,EAAqD,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EACnF,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAY,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AAGxC,CAAA;AACA,MAAA,CAAO,WAAA,GAAc,mBAAA;AAGrB,IAAM,aAA6B,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,EAAE,QAAQ","file":"chunk-ZDAOHMCW.js","sourcesContent":["import { forwardRef } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { cn } from \"../../../lib/cn.js\";\n\n/**\n * DangerZone — destructive-actions section primitive.\n *\n * Red-bordered container with a title bar and `DangerZone.Action` rows.\n * Each Action is laid out as title + description on the left, with a\n * consumer-provided action slot (typically a destructive Button) on\n * the right. Rows are separated by hairline dividers; the last row\n * has no bottom border via `last:border-b-0`.\n *\n * The consumer supplies the destructive button — this primitive never\n * imports `<Button>`, keeping it free of internal `@usetheo/ui` deps\n * (true primitive).\n *\n * @example\n * <DangerZone>\n * <DangerZone.Action\n * title=\"Delete project\"\n * description=\"Permanently delete this project.\"\n * action={<Button variant=\"destructive\">Delete</Button>}\n * />\n * </DangerZone>\n */\nexport interface DangerZoneProps extends Omit<HTMLAttributes<HTMLElement>, \"title\"> {\n /** Section title. Default \"Danger Zone\". */\n title?: ReactNode;\n}\n\nconst Root = forwardRef<HTMLElement, DangerZoneProps>(\n ({ className, title = \"Danger Zone\", children, ...props }, ref) => (\n <section\n ref={ref}\n aria-label={typeof title === \"string\" ? title : \"Danger Zone\"}\n className={cn(\"rounded-xl border border-destructive/30 bg-destructive/[0.02]\", className)}\n {...props}\n >\n <div className=\"border-destructive/20 border-b px-5 py-3 font-sans text-destructive text-label-caps uppercase tracking-wider\">\n {title}\n </div>\n {children}\n </section>\n ),\n);\nRoot.displayName = \"DangerZone\";\n\nexport interface DangerZoneActionProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description: ReactNode;\n /** Consumer-provided destructive button (or any ReactNode). */\n action: ReactNode;\n}\n\nconst Action = forwardRef<HTMLDivElement, DangerZoneActionProps>(\n ({ className, title, description, action, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center justify-between gap-4 border-destructive/10 border-b px-5 py-4 last:border-b-0\",\n className,\n )}\n {...props}\n >\n <div className=\"flex flex-col\">\n <span className=\"font-medium font-sans text-body-sm text-foreground\">{title}</span>\n <span className=\"mt-0.5 font-sans text-label text-muted-foreground\">{description}</span>\n </div>\n <div className=\"shrink-0\">{action}</div>\n </div>\n ),\n);\nAction.displayName = \"DangerZone.Action\";\n\ntype DangerZoneRoot = typeof Root & { Action: typeof Action };\nconst DangerZone: DangerZoneRoot = Object.assign(Root, { Action });\n\nexport { DangerZone };\n"]}