@theokit/ui 0.13.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 (715) hide show
  1. package/CHANGELOG.md +1325 -0
  2. package/DESIGN.md +456 -0
  3. package/LICENSE +201 -0
  4. package/NOTICE +38 -0
  5. package/README.md +467 -0
  6. package/dist/chunk-27ENTTY7.js +146 -0
  7. package/dist/chunk-27ENTTY7.js.map +1 -0
  8. package/dist/chunk-2H6TQELG.js +33 -0
  9. package/dist/chunk-2H6TQELG.js.map +1 -0
  10. package/dist/chunk-2L6MRJD4.js +120 -0
  11. package/dist/chunk-2L6MRJD4.js.map +1 -0
  12. package/dist/chunk-2Y5V2PAL.js +80 -0
  13. package/dist/chunk-2Y5V2PAL.js.map +1 -0
  14. package/dist/chunk-34NAFDVL.js +46 -0
  15. package/dist/chunk-34NAFDVL.js.map +1 -0
  16. package/dist/chunk-36KJGXEK.js +112 -0
  17. package/dist/chunk-36KJGXEK.js.map +1 -0
  18. package/dist/chunk-3BMYYNN6.js +124 -0
  19. package/dist/chunk-3BMYYNN6.js.map +1 -0
  20. package/dist/chunk-3OHV7EEI.js +34 -0
  21. package/dist/chunk-3OHV7EEI.js.map +1 -0
  22. package/dist/chunk-3QKTS6F5.js +88 -0
  23. package/dist/chunk-3QKTS6F5.js.map +1 -0
  24. package/dist/chunk-3TBXLYNM.js +42 -0
  25. package/dist/chunk-3TBXLYNM.js.map +1 -0
  26. package/dist/chunk-4AM2HSXU.js +67 -0
  27. package/dist/chunk-4AM2HSXU.js.map +1 -0
  28. package/dist/chunk-4BCGKM65.js +44 -0
  29. package/dist/chunk-4BCGKM65.js.map +1 -0
  30. package/dist/chunk-4D3JILQX.js +145 -0
  31. package/dist/chunk-4D3JILQX.js.map +1 -0
  32. package/dist/chunk-4EJU2GBG.js +48 -0
  33. package/dist/chunk-4EJU2GBG.js.map +1 -0
  34. package/dist/chunk-4WKO3G5C.js +110 -0
  35. package/dist/chunk-4WKO3G5C.js.map +1 -0
  36. package/dist/chunk-53XPKI7Q.js +97 -0
  37. package/dist/chunk-53XPKI7Q.js.map +1 -0
  38. package/dist/chunk-55TDVDPG.js +58 -0
  39. package/dist/chunk-55TDVDPG.js.map +1 -0
  40. package/dist/chunk-56BJLFW7.js +26 -0
  41. package/dist/chunk-56BJLFW7.js.map +1 -0
  42. package/dist/chunk-5HOQLE6Y.js +35 -0
  43. package/dist/chunk-5HOQLE6Y.js.map +1 -0
  44. package/dist/chunk-5TY3NYF5.js +144 -0
  45. package/dist/chunk-5TY3NYF5.js.map +1 -0
  46. package/dist/chunk-5VOSCJKQ.js +92 -0
  47. package/dist/chunk-5VOSCJKQ.js.map +1 -0
  48. package/dist/chunk-65NVO6TK.js +171 -0
  49. package/dist/chunk-65NVO6TK.js.map +1 -0
  50. package/dist/chunk-6A5TPCKP.js +64 -0
  51. package/dist/chunk-6A5TPCKP.js.map +1 -0
  52. package/dist/chunk-6CO4LEXZ.js +41 -0
  53. package/dist/chunk-6CO4LEXZ.js.map +1 -0
  54. package/dist/chunk-6FVUPNPG.js +56 -0
  55. package/dist/chunk-6FVUPNPG.js.map +1 -0
  56. package/dist/chunk-76YWTIWK.js +106 -0
  57. package/dist/chunk-76YWTIWK.js.map +1 -0
  58. package/dist/chunk-7EI7424P.js +78 -0
  59. package/dist/chunk-7EI7424P.js.map +1 -0
  60. package/dist/chunk-AHTVYOPQ.js +26 -0
  61. package/dist/chunk-AHTVYOPQ.js.map +1 -0
  62. package/dist/chunk-AJTJNHKK.js +85 -0
  63. package/dist/chunk-AJTJNHKK.js.map +1 -0
  64. package/dist/chunk-AMT3CPMC.js +155 -0
  65. package/dist/chunk-AMT3CPMC.js.map +1 -0
  66. package/dist/chunk-AX5EH73R.js +59 -0
  67. package/dist/chunk-AX5EH73R.js.map +1 -0
  68. package/dist/chunk-B3VAJSZ2.js +35 -0
  69. package/dist/chunk-B3VAJSZ2.js.map +1 -0
  70. package/dist/chunk-B4CQMQ64.js +25 -0
  71. package/dist/chunk-B4CQMQ64.js.map +1 -0
  72. package/dist/chunk-BMRZXT5T.js +115 -0
  73. package/dist/chunk-BMRZXT5T.js.map +1 -0
  74. package/dist/chunk-BYZ6OFH4.js +73 -0
  75. package/dist/chunk-BYZ6OFH4.js.map +1 -0
  76. package/dist/chunk-C55VUQ7N.js +156 -0
  77. package/dist/chunk-C55VUQ7N.js.map +1 -0
  78. package/dist/chunk-D4GEAV4C.js +91 -0
  79. package/dist/chunk-D4GEAV4C.js.map +1 -0
  80. package/dist/chunk-DC43CHAM.js +152 -0
  81. package/dist/chunk-DC43CHAM.js.map +1 -0
  82. package/dist/chunk-DKCRLN35.js +92 -0
  83. package/dist/chunk-DKCRLN35.js.map +1 -0
  84. package/dist/chunk-DN5BUDBI.js +86 -0
  85. package/dist/chunk-DN5BUDBI.js.map +1 -0
  86. package/dist/chunk-DOLKDYMS.js +88 -0
  87. package/dist/chunk-DOLKDYMS.js.map +1 -0
  88. package/dist/chunk-DW34WXCG.js +28 -0
  89. package/dist/chunk-DW34WXCG.js.map +1 -0
  90. package/dist/chunk-DZAAKHGZ.js +135 -0
  91. package/dist/chunk-DZAAKHGZ.js.map +1 -0
  92. package/dist/chunk-E4IRSSHO.js +116 -0
  93. package/dist/chunk-E4IRSSHO.js.map +1 -0
  94. package/dist/chunk-E67WQXBV.js +104 -0
  95. package/dist/chunk-E67WQXBV.js.map +1 -0
  96. package/dist/chunk-EG6IHP3H.js +128 -0
  97. package/dist/chunk-EG6IHP3H.js.map +1 -0
  98. package/dist/chunk-EO7LOXG2.js +82 -0
  99. package/dist/chunk-EO7LOXG2.js.map +1 -0
  100. package/dist/chunk-EWDN56AS.js +24 -0
  101. package/dist/chunk-EWDN56AS.js.map +1 -0
  102. package/dist/chunk-F5P5P2SC.js +141 -0
  103. package/dist/chunk-F5P5P2SC.js.map +1 -0
  104. package/dist/chunk-FAWPRZTM.js +79 -0
  105. package/dist/chunk-FAWPRZTM.js.map +1 -0
  106. package/dist/chunk-FGYJ2WPX.js +36 -0
  107. package/dist/chunk-FGYJ2WPX.js.map +1 -0
  108. package/dist/chunk-GBG3I5I5.js +46 -0
  109. package/dist/chunk-GBG3I5I5.js.map +1 -0
  110. package/dist/chunk-GDMCDW66.js +19 -0
  111. package/dist/chunk-GDMCDW66.js.map +1 -0
  112. package/dist/chunk-H6HSQCOW.js +80 -0
  113. package/dist/chunk-H6HSQCOW.js.map +1 -0
  114. package/dist/chunk-HDM4RCIF.js +111 -0
  115. package/dist/chunk-HDM4RCIF.js.map +1 -0
  116. package/dist/chunk-HNTOGGVD.js +77 -0
  117. package/dist/chunk-HNTOGGVD.js.map +1 -0
  118. package/dist/chunk-HQW2ABO4.js +28 -0
  119. package/dist/chunk-HQW2ABO4.js.map +1 -0
  120. package/dist/chunk-HRDRGZ2Y.js +76 -0
  121. package/dist/chunk-HRDRGZ2Y.js.map +1 -0
  122. package/dist/chunk-HUOVA7SF.js +83 -0
  123. package/dist/chunk-HUOVA7SF.js.map +1 -0
  124. package/dist/chunk-ITA3SNOR.js +133 -0
  125. package/dist/chunk-ITA3SNOR.js.map +1 -0
  126. package/dist/chunk-IYNUPG2G.js +61 -0
  127. package/dist/chunk-IYNUPG2G.js.map +1 -0
  128. package/dist/chunk-JJ65ZI4P.js +199 -0
  129. package/dist/chunk-JJ65ZI4P.js.map +1 -0
  130. package/dist/chunk-JRBGZ6NI.js +106 -0
  131. package/dist/chunk-JRBGZ6NI.js.map +1 -0
  132. package/dist/chunk-K45OO62F.js +108 -0
  133. package/dist/chunk-K45OO62F.js.map +1 -0
  134. package/dist/chunk-KDTKA667.js +67 -0
  135. package/dist/chunk-KDTKA667.js.map +1 -0
  136. package/dist/chunk-KI7KZBSN.js +142 -0
  137. package/dist/chunk-KI7KZBSN.js.map +1 -0
  138. package/dist/chunk-KOJ7XOPZ.js +87 -0
  139. package/dist/chunk-KOJ7XOPZ.js.map +1 -0
  140. package/dist/chunk-KQTHJ22B.js +82 -0
  141. package/dist/chunk-KQTHJ22B.js.map +1 -0
  142. package/dist/chunk-KRC43RZR.js +77 -0
  143. package/dist/chunk-KRC43RZR.js.map +1 -0
  144. package/dist/chunk-LJQOEGQ2.js +116 -0
  145. package/dist/chunk-LJQOEGQ2.js.map +1 -0
  146. package/dist/chunk-LKRNUSKZ.js +149 -0
  147. package/dist/chunk-LKRNUSKZ.js.map +1 -0
  148. package/dist/chunk-LLL7QQ52.js +76 -0
  149. package/dist/chunk-LLL7QQ52.js.map +1 -0
  150. package/dist/chunk-LQ4B5X4Y.js +56 -0
  151. package/dist/chunk-LQ4B5X4Y.js.map +1 -0
  152. package/dist/chunk-M3FSLEHQ.js +76 -0
  153. package/dist/chunk-M3FSLEHQ.js.map +1 -0
  154. package/dist/chunk-M5G3O6H6.js +57 -0
  155. package/dist/chunk-M5G3O6H6.js.map +1 -0
  156. package/dist/chunk-M6JIC5PU.js +81 -0
  157. package/dist/chunk-M6JIC5PU.js.map +1 -0
  158. package/dist/chunk-N2HJ3SLS.js +186 -0
  159. package/dist/chunk-N2HJ3SLS.js.map +1 -0
  160. package/dist/chunk-NGZWBFTP.js +45 -0
  161. package/dist/chunk-NGZWBFTP.js.map +1 -0
  162. package/dist/chunk-OAKCXT35.js +34 -0
  163. package/dist/chunk-OAKCXT35.js.map +1 -0
  164. package/dist/chunk-OSD3U3HT.js +54 -0
  165. package/dist/chunk-OSD3U3HT.js.map +1 -0
  166. package/dist/chunk-OUXESQ2R.js +42 -0
  167. package/dist/chunk-OUXESQ2R.js.map +1 -0
  168. package/dist/chunk-OY2LJHMJ.js +43 -0
  169. package/dist/chunk-OY2LJHMJ.js.map +1 -0
  170. package/dist/chunk-OYEZR4CN.js +221 -0
  171. package/dist/chunk-OYEZR4CN.js.map +1 -0
  172. package/dist/chunk-P57HUMAE.js +66 -0
  173. package/dist/chunk-P57HUMAE.js.map +1 -0
  174. package/dist/chunk-P6Y2PI6L.js +82 -0
  175. package/dist/chunk-P6Y2PI6L.js.map +1 -0
  176. package/dist/chunk-PA7TDXUQ.js +51 -0
  177. package/dist/chunk-PA7TDXUQ.js.map +1 -0
  178. package/dist/chunk-PPBGGNPV.js +112 -0
  179. package/dist/chunk-PPBGGNPV.js.map +1 -0
  180. package/dist/chunk-PRH4HKND.js +48 -0
  181. package/dist/chunk-PRH4HKND.js.map +1 -0
  182. package/dist/chunk-PSPAZJUQ.js +32 -0
  183. package/dist/chunk-PSPAZJUQ.js.map +1 -0
  184. package/dist/chunk-Q5G5CGZ2.js +170 -0
  185. package/dist/chunk-Q5G5CGZ2.js.map +1 -0
  186. package/dist/chunk-QDAF3LP7.js +89 -0
  187. package/dist/chunk-QDAF3LP7.js.map +1 -0
  188. package/dist/chunk-QGVIGNJ3.js +37 -0
  189. package/dist/chunk-QGVIGNJ3.js.map +1 -0
  190. package/dist/chunk-QNUITYSY.js +68 -0
  191. package/dist/chunk-QNUITYSY.js.map +1 -0
  192. package/dist/chunk-QSWVN3RT.js +116 -0
  193. package/dist/chunk-QSWVN3RT.js.map +1 -0
  194. package/dist/chunk-QTLQZ7OJ.js +110 -0
  195. package/dist/chunk-QTLQZ7OJ.js.map +1 -0
  196. package/dist/chunk-QYAMLIG2.js +84 -0
  197. package/dist/chunk-QYAMLIG2.js.map +1 -0
  198. package/dist/chunk-REILH4XF.js +128 -0
  199. package/dist/chunk-REILH4XF.js.map +1 -0
  200. package/dist/chunk-S6SSK6QX.js +80 -0
  201. package/dist/chunk-S6SSK6QX.js.map +1 -0
  202. package/dist/chunk-SA7ED3PN.js +68 -0
  203. package/dist/chunk-SA7ED3PN.js.map +1 -0
  204. package/dist/chunk-SIJOEM4N.js +55 -0
  205. package/dist/chunk-SIJOEM4N.js.map +1 -0
  206. package/dist/chunk-SLOKAAH2.js +70 -0
  207. package/dist/chunk-SLOKAAH2.js.map +1 -0
  208. package/dist/chunk-TR6NPSMX.js +85 -0
  209. package/dist/chunk-TR6NPSMX.js.map +1 -0
  210. package/dist/chunk-TSZ5DEAT.js +106 -0
  211. package/dist/chunk-TSZ5DEAT.js.map +1 -0
  212. package/dist/chunk-TUNVF45W.js +127 -0
  213. package/dist/chunk-TUNVF45W.js.map +1 -0
  214. package/dist/chunk-TXOBNSQ5.js +63 -0
  215. package/dist/chunk-TXOBNSQ5.js.map +1 -0
  216. package/dist/chunk-U44DRLMM.js +88 -0
  217. package/dist/chunk-U44DRLMM.js.map +1 -0
  218. package/dist/chunk-U4THNRV5.js +114 -0
  219. package/dist/chunk-U4THNRV5.js.map +1 -0
  220. package/dist/chunk-UAZOFC4W.js +72 -0
  221. package/dist/chunk-UAZOFC4W.js.map +1 -0
  222. package/dist/chunk-UGKI466V.js +12 -0
  223. package/dist/chunk-UGKI466V.js.map +1 -0
  224. package/dist/chunk-VM4RMQQN.js +11 -0
  225. package/dist/chunk-VM4RMQQN.js.map +1 -0
  226. package/dist/chunk-VQ37VLAS.js +54 -0
  227. package/dist/chunk-VQ37VLAS.js.map +1 -0
  228. package/dist/chunk-VT7VSYH5.js +73 -0
  229. package/dist/chunk-VT7VSYH5.js.map +1 -0
  230. package/dist/chunk-VTIRUCLZ.js +57 -0
  231. package/dist/chunk-VTIRUCLZ.js.map +1 -0
  232. package/dist/chunk-VVBAEYKI.js +202 -0
  233. package/dist/chunk-VVBAEYKI.js.map +1 -0
  234. package/dist/chunk-WHFIQUCC.js +120 -0
  235. package/dist/chunk-WHFIQUCC.js.map +1 -0
  236. package/dist/chunk-WPSESV5Z.js +74 -0
  237. package/dist/chunk-WPSESV5Z.js.map +1 -0
  238. package/dist/chunk-WXEXCHEN.js +51 -0
  239. package/dist/chunk-WXEXCHEN.js.map +1 -0
  240. package/dist/chunk-X2DDPD3D.js +113 -0
  241. package/dist/chunk-X2DDPD3D.js.map +1 -0
  242. package/dist/chunk-X7VIMKLD.js +127 -0
  243. package/dist/chunk-X7VIMKLD.js.map +1 -0
  244. package/dist/chunk-XJ3EG6XY.js +30 -0
  245. package/dist/chunk-XJ3EG6XY.js.map +1 -0
  246. package/dist/chunk-XOT5HWSF.js +23 -0
  247. package/dist/chunk-XOT5HWSF.js.map +1 -0
  248. package/dist/chunk-Y72IP43U.js +117 -0
  249. package/dist/chunk-Y72IP43U.js.map +1 -0
  250. package/dist/chunk-YD6FLXBV.js +61 -0
  251. package/dist/chunk-YD6FLXBV.js.map +1 -0
  252. package/dist/chunk-YEQQGYYO.js +1022 -0
  253. package/dist/chunk-YEQQGYYO.js.map +1 -0
  254. package/dist/chunk-YYW6AEIT.js +46 -0
  255. package/dist/chunk-YYW6AEIT.js.map +1 -0
  256. package/dist/chunk-ZEVGXKRU.js +104 -0
  257. package/dist/chunk-ZEVGXKRU.js.map +1 -0
  258. package/dist/chunk-ZKSMMLDP.js +74 -0
  259. package/dist/chunk-ZKSMMLDP.js.map +1 -0
  260. package/dist/chunk-ZU6IM6PK.js +101 -0
  261. package/dist/chunk-ZU6IM6PK.js.map +1 -0
  262. package/dist/chunk-ZUS5KZGO.js +714 -0
  263. package/dist/chunk-ZUS5KZGO.js.map +1 -0
  264. package/dist/chunk-ZVS2GOT2.js +58 -0
  265. package/dist/chunk-ZVS2GOT2.js.map +1 -0
  266. package/dist/chunk-ZXPDS6DH.js +3 -0
  267. package/dist/chunk-ZXPDS6DH.js.map +1 -0
  268. package/dist/chunk-ZZQQJX5Z.js +173 -0
  269. package/dist/chunk-ZZQQJX5Z.js.map +1 -0
  270. package/dist/components.css +2 -0
  271. package/dist/composites/account-menu/index.js +6 -0
  272. package/dist/composites/account-menu/index.js.map +1 -0
  273. package/dist/composites/agent-composer/index.js +7 -0
  274. package/dist/composites/agent-composer/index.js.map +1 -0
  275. package/dist/composites/agent-editor/index.js +10 -0
  276. package/dist/composites/agent-editor/index.js.map +1 -0
  277. package/dist/composites/agent-stream/index.js +12 -0
  278. package/dist/composites/agent-stream/index.js.map +1 -0
  279. package/dist/composites/agent-timeline/index.js +5 -0
  280. package/dist/composites/agent-timeline/index.js.map +1 -0
  281. package/dist/composites/approval-card/index.js +5 -0
  282. package/dist/composites/approval-card/index.js.map +1 -0
  283. package/dist/composites/chat-composer/index.js +6 -0
  284. package/dist/composites/chat-composer/index.js.map +1 -0
  285. package/dist/composites/chat-message/index.js +6 -0
  286. package/dist/composites/chat-message/index.js.map +1 -0
  287. package/dist/composites/code-block/index.js +5 -0
  288. package/dist/composites/code-block/index.js.map +1 -0
  289. package/dist/composites/command-palette/index.js +5 -0
  290. package/dist/composites/command-palette/index.js.map +1 -0
  291. package/dist/composites/confirm-dialog/index.js +7 -0
  292. package/dist/composites/confirm-dialog/index.js.map +1 -0
  293. package/dist/composites/cron-jobs-list/index.js +5 -0
  294. package/dist/composites/cron-jobs-list/index.js.map +1 -0
  295. package/dist/composites/data-table/index.js +10 -0
  296. package/dist/composites/data-table/index.js.map +1 -0
  297. package/dist/composites/deployment-row/index.js +5 -0
  298. package/dist/composites/deployment-row/index.js.map +1 -0
  299. package/dist/composites/domain-config/index.js +7 -0
  300. package/dist/composites/domain-config/index.js.map +1 -0
  301. package/dist/composites/env-var-editor/index.js +7 -0
  302. package/dist/composites/env-var-editor/index.js.map +1 -0
  303. package/dist/composites/mcp-server-list/index.js +5 -0
  304. package/dist/composites/mcp-server-list/index.js.map +1 -0
  305. package/dist/composites/page-shell/index.js +7 -0
  306. package/dist/composites/page-shell/index.js.map +1 -0
  307. package/dist/composites/permission-modal/index.js +6 -0
  308. package/dist/composites/permission-modal/index.js.map +1 -0
  309. package/dist/composites/preview-env-card/index.js +6 -0
  310. package/dist/composites/preview-env-card/index.js.map +1 -0
  311. package/dist/composites/preview-panel/index.js +5 -0
  312. package/dist/composites/preview-panel/index.js.map +1 -0
  313. package/dist/composites/project-card/index.js +6 -0
  314. package/dist/composites/project-card/index.js.map +1 -0
  315. package/dist/composites/rollback-ui/index.js +6 -0
  316. package/dist/composites/rollback-ui/index.js.map +1 -0
  317. package/dist/composites/rule-editor/index.js +11 -0
  318. package/dist/composites/rule-editor/index.js.map +1 -0
  319. package/dist/composites/skill-editor/index.js +11 -0
  320. package/dist/composites/skill-editor/index.js.map +1 -0
  321. package/dist/composites/skills-list/index.js +5 -0
  322. package/dist/composites/skills-list/index.js.map +1 -0
  323. package/dist/composites/stability-bundle-viewer/index.js +4 -0
  324. package/dist/composites/stability-bundle-viewer/index.js.map +1 -0
  325. package/dist/composites/task-header/index.js +5 -0
  326. package/dist/composites/task-header/index.js.map +1 -0
  327. package/dist/composites/usage-meter/index.js +5 -0
  328. package/dist/composites/usage-meter/index.js.map +1 -0
  329. package/dist/fonts/LICENSE-GEIST.txt +92 -0
  330. package/dist/fonts/geist-400.woff2 +0 -0
  331. package/dist/fonts/geist-500.woff2 +0 -0
  332. package/dist/fonts/geist-600.woff2 +0 -0
  333. package/dist/fonts/geist-mono-400.woff2 +0 -0
  334. package/dist/fonts/geist-mono-500.woff2 +0 -0
  335. package/dist/fonts/geist-mono-600.woff2 +0 -0
  336. package/dist/fonts-cdn.css +28 -0
  337. package/dist/fonts.css +75 -0
  338. package/dist/index.d.ts +4621 -0
  339. package/dist/index.js +1338 -0
  340. package/dist/index.js.map +1 -0
  341. package/dist/plugin-D5xmXqYb.d.ts +172 -0
  342. package/dist/preset-v3-legacy.d.ts +35 -0
  343. package/dist/preset-v3-legacy.js +159 -0
  344. package/dist/preset-v3-legacy.js.map +1 -0
  345. package/dist/preset.css +27 -0
  346. package/dist/primitives/action-bar/index.js +4 -0
  347. package/dist/primitives/action-bar/index.js.map +1 -0
  348. package/dist/primitives/agent-error-card/index.js +5 -0
  349. package/dist/primitives/agent-error-card/index.js.map +1 -0
  350. package/dist/primitives/agent-event/index.js +4 -0
  351. package/dist/primitives/agent-event/index.js.map +1 -0
  352. package/dist/primitives/agent-handoff/index.js +4 -0
  353. package/dist/primitives/agent-handoff/index.js.map +1 -0
  354. package/dist/primitives/agent-profile/index.js +4 -0
  355. package/dist/primitives/agent-profile/index.js.map +1 -0
  356. package/dist/primitives/agent-starting-state/index.js +5 -0
  357. package/dist/primitives/agent-starting-state/index.js.map +1 -0
  358. package/dist/primitives/agent-streaming/index.js +5 -0
  359. package/dist/primitives/agent-streaming/index.js.map +1 -0
  360. package/dist/primitives/alert/index.js +4 -0
  361. package/dist/primitives/alert/index.js.map +1 -0
  362. package/dist/primitives/artifact-preview/index.js +4 -0
  363. package/dist/primitives/artifact-preview/index.js.map +1 -0
  364. package/dist/primitives/attachment-chip/index.js +4 -0
  365. package/dist/primitives/attachment-chip/index.js.map +1 -0
  366. package/dist/primitives/audit-log-entry/index.js +4 -0
  367. package/dist/primitives/audit-log-entry/index.js.map +1 -0
  368. package/dist/primitives/auto-compact-notice/index.js +5 -0
  369. package/dist/primitives/auto-compact-notice/index.js.map +1 -0
  370. package/dist/primitives/avatar/index.js +4 -0
  371. package/dist/primitives/avatar/index.js.map +1 -0
  372. package/dist/primitives/badge/index.js +4 -0
  373. package/dist/primitives/badge/index.js.map +1 -0
  374. package/dist/primitives/branch-indicator/index.js +4 -0
  375. package/dist/primitives/branch-indicator/index.js.map +1 -0
  376. package/dist/primitives/browser-controls/index.js +4 -0
  377. package/dist/primitives/browser-controls/index.js.map +1 -0
  378. package/dist/primitives/build-log-stream/index.js +5 -0
  379. package/dist/primitives/build-log-stream/index.js.map +1 -0
  380. package/dist/primitives/button/index.js +4 -0
  381. package/dist/primitives/button/index.js.map +1 -0
  382. package/dist/primitives/capability-indicator/index.js +4 -0
  383. package/dist/primitives/capability-indicator/index.js.map +1 -0
  384. package/dist/primitives/card/index.js +4 -0
  385. package/dist/primitives/card/index.js.map +1 -0
  386. package/dist/primitives/channel-card/index.js +4 -0
  387. package/dist/primitives/channel-card/index.js.map +1 -0
  388. package/dist/primitives/chat-thread/index.js +5 -0
  389. package/dist/primitives/chat-thread/index.js.map +1 -0
  390. package/dist/primitives/checkbox/index.js +4 -0
  391. package/dist/primitives/checkbox/index.js.map +1 -0
  392. package/dist/primitives/context-card/index.js +4 -0
  393. package/dist/primitives/context-card/index.js.map +1 -0
  394. package/dist/primitives/context-window-bar/index.js +4 -0
  395. package/dist/primitives/context-window-bar/index.js.map +1 -0
  396. package/dist/primitives/copy-button/index.js +4 -0
  397. package/dist/primitives/copy-button/index.js.map +1 -0
  398. package/dist/primitives/cost-meter/index.js +4 -0
  399. package/dist/primitives/cost-meter/index.js.map +1 -0
  400. package/dist/primitives/created-files-card/index.js +4 -0
  401. package/dist/primitives/created-files-card/index.js.map +1 -0
  402. package/dist/primitives/cron-job-card/index.js +4 -0
  403. package/dist/primitives/cron-job-card/index.js.map +1 -0
  404. package/dist/primitives/danger-zone/index.js +4 -0
  405. package/dist/primitives/danger-zone/index.js.map +1 -0
  406. package/dist/primitives/dialog/index.js +4 -0
  407. package/dist/primitives/dialog/index.js.map +1 -0
  408. package/dist/primitives/diff-viewer/index.js +4 -0
  409. package/dist/primitives/diff-viewer/index.js.map +1 -0
  410. package/dist/primitives/dropdown-menu/index.js +4 -0
  411. package/dist/primitives/dropdown-menu/index.js.map +1 -0
  412. package/dist/primitives/empty-state/index.js +4 -0
  413. package/dist/primitives/empty-state/index.js.map +1 -0
  414. package/dist/primitives/export-chat-dialog/index.js +4 -0
  415. package/dist/primitives/export-chat-dialog/index.js.map +1 -0
  416. package/dist/primitives/folder-context-card/index.js +4 -0
  417. package/dist/primitives/folder-context-card/index.js.map +1 -0
  418. package/dist/primitives/folder-selector/index.js +4 -0
  419. package/dist/primitives/folder-selector/index.js.map +1 -0
  420. package/dist/primitives/form-field/index.js +4 -0
  421. package/dist/primitives/form-field/index.js.map +1 -0
  422. package/dist/primitives/gateway-status-indicator/index.js +4 -0
  423. package/dist/primitives/gateway-status-indicator/index.js.map +1 -0
  424. package/dist/primitives/hook-config/index.js +4 -0
  425. package/dist/primitives/hook-config/index.js.map +1 -0
  426. package/dist/primitives/hook-event-log/index.js +4 -0
  427. package/dist/primitives/hook-event-log/index.js.map +1 -0
  428. package/dist/primitives/input/index.js +4 -0
  429. package/dist/primitives/input/index.js.map +1 -0
  430. package/dist/primitives/intent-selector/index.js +4 -0
  431. package/dist/primitives/intent-selector/index.js.map +1 -0
  432. package/dist/primitives/label/index.js +4 -0
  433. package/dist/primitives/label/index.js.map +1 -0
  434. package/dist/primitives/lane-board/index.js +4 -0
  435. package/dist/primitives/lane-board/index.js.map +1 -0
  436. package/dist/primitives/login-split/index.js +4 -0
  437. package/dist/primitives/login-split/index.js.map +1 -0
  438. package/dist/primitives/mcp-server-card/index.js +4 -0
  439. package/dist/primitives/mcp-server-card/index.js.map +1 -0
  440. package/dist/primitives/memory-editor/index.js +4 -0
  441. package/dist/primitives/memory-editor/index.js.map +1 -0
  442. package/dist/primitives/mention-menu/index.js +4 -0
  443. package/dist/primitives/mention-menu/index.js.map +1 -0
  444. package/dist/primitives/metrics-panel/index.js +4 -0
  445. package/dist/primitives/metrics-panel/index.js.map +1 -0
  446. package/dist/primitives/model-card/index.js +4 -0
  447. package/dist/primitives/model-card/index.js.map +1 -0
  448. package/dist/primitives/model-selector/index.js +4 -0
  449. package/dist/primitives/model-selector/index.js.map +1 -0
  450. package/dist/primitives/pagination/index.js +4 -0
  451. package/dist/primitives/pagination/index.js.map +1 -0
  452. package/dist/primitives/permission-matrix/index.js +4 -0
  453. package/dist/primitives/permission-matrix/index.js.map +1 -0
  454. package/dist/primitives/pin-input/index.js +4 -0
  455. package/dist/primitives/pin-input/index.js.map +1 -0
  456. package/dist/primitives/plan-badge/index.js +4 -0
  457. package/dist/primitives/plan-badge/index.js.map +1 -0
  458. package/dist/primitives/progress/index.js +4 -0
  459. package/dist/primitives/progress/index.js.map +1 -0
  460. package/dist/primitives/progress-checklist/index.js +4 -0
  461. package/dist/primitives/progress-checklist/index.js.map +1 -0
  462. package/dist/primitives/project-switcher/index.js +4 -0
  463. package/dist/primitives/project-switcher/index.js.map +1 -0
  464. package/dist/primitives/quick-action-chips/index.js +4 -0
  465. package/dist/primitives/quick-action-chips/index.js.map +1 -0
  466. package/dist/primitives/radio-group/index.js +4 -0
  467. package/dist/primitives/radio-group/index.js.map +1 -0
  468. package/dist/primitives/recent-folders-list/index.js +4 -0
  469. package/dist/primitives/recent-folders-list/index.js.map +1 -0
  470. package/dist/primitives/rule-card/index.js +4 -0
  471. package/dist/primitives/rule-card/index.js.map +1 -0
  472. package/dist/primitives/run-stats/index.js +4 -0
  473. package/dist/primitives/run-stats/index.js.map +1 -0
  474. package/dist/primitives/run-status-pill/index.js +4 -0
  475. package/dist/primitives/run-status-pill/index.js.map +1 -0
  476. package/dist/primitives/running-tasks-panel/index.js +4 -0
  477. package/dist/primitives/running-tasks-panel/index.js.map +1 -0
  478. package/dist/primitives/scroll-area/index.js +4 -0
  479. package/dist/primitives/scroll-area/index.js.map +1 -0
  480. package/dist/primitives/select/index.js +4 -0
  481. package/dist/primitives/select/index.js.map +1 -0
  482. package/dist/primitives/session-list-item/index.js +4 -0
  483. package/dist/primitives/session-list-item/index.js.map +1 -0
  484. package/dist/primitives/session-timeline/index.js +4 -0
  485. package/dist/primitives/session-timeline/index.js.map +1 -0
  486. package/dist/primitives/sheet/index.js +4 -0
  487. package/dist/primitives/sheet/index.js.map +1 -0
  488. package/dist/primitives/sidebar/index.js +4 -0
  489. package/dist/primitives/sidebar/index.js.map +1 -0
  490. package/dist/primitives/skeleton/index.js +5 -0
  491. package/dist/primitives/skeleton/index.js.map +1 -0
  492. package/dist/primitives/skill-card/index.js +4 -0
  493. package/dist/primitives/skill-card/index.js.map +1 -0
  494. package/dist/primitives/social-auth-row/index.js +4 -0
  495. package/dist/primitives/social-auth-row/index.js.map +1 -0
  496. package/dist/primitives/stat-tile/index.js +4 -0
  497. package/dist/primitives/stat-tile/index.js.map +1 -0
  498. package/dist/primitives/status-dot/index.js +4 -0
  499. package/dist/primitives/status-dot/index.js.map +1 -0
  500. package/dist/primitives/steps-rail/index.js +4 -0
  501. package/dist/primitives/steps-rail/index.js.map +1 -0
  502. package/dist/primitives/sub-agent-dispatch/index.js +4 -0
  503. package/dist/primitives/sub-agent-dispatch/index.js.map +1 -0
  504. package/dist/primitives/switch/index.js +4 -0
  505. package/dist/primitives/switch/index.js.map +1 -0
  506. package/dist/primitives/system-prompt-editor/index.js +4 -0
  507. package/dist/primitives/system-prompt-editor/index.js.map +1 -0
  508. package/dist/primitives/table/index.js +4 -0
  509. package/dist/primitives/table/index.js.map +1 -0
  510. package/dist/primitives/tabs/index.js +4 -0
  511. package/dist/primitives/tabs/index.js.map +1 -0
  512. package/dist/primitives/task-plan/index.js +4 -0
  513. package/dist/primitives/task-plan/index.js.map +1 -0
  514. package/dist/primitives/terminal-panel/index.js +5 -0
  515. package/dist/primitives/terminal-panel/index.js.map +1 -0
  516. package/dist/primitives/textarea/index.js +4 -0
  517. package/dist/primitives/textarea/index.js.map +1 -0
  518. package/dist/primitives/thinking-level-selector/index.js +4 -0
  519. package/dist/primitives/thinking-level-selector/index.js.map +1 -0
  520. package/dist/primitives/timestamp/index.js +4 -0
  521. package/dist/primitives/timestamp/index.js.map +1 -0
  522. package/dist/primitives/toast/index.js +4 -0
  523. package/dist/primitives/toast/index.js.map +1 -0
  524. package/dist/primitives/token-usage-chart/index.js +4 -0
  525. package/dist/primitives/token-usage-chart/index.js.map +1 -0
  526. package/dist/primitives/tool-call/index.js +4 -0
  527. package/dist/primitives/tool-call/index.js.map +1 -0
  528. package/dist/primitives/tool-call-card/index.js +4 -0
  529. package/dist/primitives/tool-call-card/index.js.map +1 -0
  530. package/dist/primitives/tool-result/index.js +4 -0
  531. package/dist/primitives/tool-result/index.js.map +1 -0
  532. package/dist/primitives/tools-list/index.js +4 -0
  533. package/dist/primitives/tools-list/index.js.map +1 -0
  534. package/dist/primitives/tooltip/index.js +4 -0
  535. package/dist/primitives/tooltip/index.js.map +1 -0
  536. package/dist/primitives/topnav/index.js +4 -0
  537. package/dist/primitives/topnav/index.js.map +1 -0
  538. package/dist/primitives/update-banner/index.js +4 -0
  539. package/dist/primitives/update-banner/index.js.map +1 -0
  540. package/dist/slide/index.d.ts +212 -0
  541. package/dist/slide/index.js +3 -0
  542. package/dist/slide/index.js.map +1 -0
  543. package/dist/slide/plugins/emoji/index.d.ts +29 -0
  544. package/dist/slide/plugins/emoji/index.js +157 -0
  545. package/dist/slide/plugins/emoji/index.js.map +1 -0
  546. package/dist/slide/plugins/math/index.d.ts +13 -0
  547. package/dist/slide/plugins/math/index.js +145 -0
  548. package/dist/slide/plugins/math/index.js.map +1 -0
  549. package/dist/slide/plugins/mermaid/index.d.ts +55 -0
  550. package/dist/slide/plugins/mermaid/index.js +218 -0
  551. package/dist/slide/plugins/mermaid/index.js.map +1 -0
  552. package/dist/slide/plugins/shiki/index.d.ts +18 -0
  553. package/dist/slide/plugins/shiki/index.js +87 -0
  554. package/dist/slide/plugins/shiki/index.js.map +1 -0
  555. package/dist/slide/themes/default.css +256 -0
  556. package/dist/slide/themes/layouts.css +143 -0
  557. package/dist/slide/themes/violet-forge.css +256 -0
  558. package/dist/slide-deck/index.css +52 -0
  559. package/dist/slide-deck/index.css.map +1 -0
  560. package/dist/slide-deck/index.d.ts +377 -0
  561. package/dist/slide-deck/index.js +1111 -0
  562. package/dist/slide-deck/index.js.map +1 -0
  563. package/dist/styles-v3-legacy.css +88 -0
  564. package/dist/styles.css +137 -0
  565. package/dist/tokens-v4.css +187 -0
  566. package/dist/tokens.css +230 -0
  567. package/dist/vite-plugin.d.ts +29 -0
  568. package/dist/vite-plugin.js +76 -0
  569. package/dist/vite-plugin.js.map +1 -0
  570. package/dist/whiteboard/index.d.ts +258 -0
  571. package/dist/whiteboard/index.js +738 -0
  572. package/dist/whiteboard/index.js.map +1 -0
  573. package/llms.txt +273 -0
  574. package/package.json +800 -0
  575. package/registry/index.json +856 -0
  576. package/registry/r/account-menu.json +24 -0
  577. package/registry/r/action-bar.json +22 -0
  578. package/registry/r/agent-composer.json +22 -0
  579. package/registry/r/agent-editor.json +27 -0
  580. package/registry/r/agent-error-card.json +22 -0
  581. package/registry/r/agent-event.json +24 -0
  582. package/registry/r/agent-handoff.json +22 -0
  583. package/registry/r/agent-profile.json +23 -0
  584. package/registry/r/agent-starting-state.json +22 -0
  585. package/registry/r/agent-stream.json +27 -0
  586. package/registry/r/agent-streaming.json +22 -0
  587. package/registry/r/agent-timeline.json +22 -0
  588. package/registry/r/agent-types.json +15 -0
  589. package/registry/r/alert.json +22 -0
  590. package/registry/r/approval-card.json +25 -0
  591. package/registry/r/artifact-preview.json +22 -0
  592. package/registry/r/attachment-chip.json +24 -0
  593. package/registry/r/audit-log-entry.json +23 -0
  594. package/registry/r/auto-compact-notice.json +22 -0
  595. package/registry/r/avatar.json +23 -0
  596. package/registry/r/badge.json +22 -0
  597. package/registry/r/browser-controls.json +22 -0
  598. package/registry/r/build-log-stream.json +19 -0
  599. package/registry/r/button.json +23 -0
  600. package/registry/r/capability-indicator.json +23 -0
  601. package/registry/r/card.json +22 -0
  602. package/registry/r/chat-composer.json +23 -0
  603. package/registry/r/chat-message.json +129 -0
  604. package/registry/r/chat-thread.json +20 -0
  605. package/registry/r/chat-types.json +15 -0
  606. package/registry/r/checkbox.json +24 -0
  607. package/registry/r/cn.json +19 -0
  608. package/registry/r/code-block.json +21 -0
  609. package/registry/r/command-palette.json +25 -0
  610. package/registry/r/confirm-dialog.json +25 -0
  611. package/registry/r/context-card.json +23 -0
  612. package/registry/r/context-window-bar.json +20 -0
  613. package/registry/r/copy-button.json +22 -0
  614. package/registry/r/cost-meter.json +22 -0
  615. package/registry/r/created-files-card.json +23 -0
  616. package/registry/r/cron-job-card.json +22 -0
  617. package/registry/r/cron-jobs-list.json +23 -0
  618. package/registry/r/danger-zone.json +20 -0
  619. package/registry/r/data-table.json +27 -0
  620. package/registry/r/deployment-row.json +23 -0
  621. package/registry/r/dialog.json +23 -0
  622. package/registry/r/diff-viewer.json +20 -0
  623. package/registry/r/domain-config.json +25 -0
  624. package/registry/r/dropdown-menu.json +23 -0
  625. package/registry/r/empty-state.json +20 -0
  626. package/registry/r/env-var-editor.json +25 -0
  627. package/registry/r/folder-context-card.json +23 -0
  628. package/registry/r/folder-selector.json +22 -0
  629. package/registry/r/form-field.json +23 -0
  630. package/registry/r/hook-config.json +22 -0
  631. package/registry/r/hook-event-log.json +22 -0
  632. package/registry/r/input.json +22 -0
  633. package/registry/r/intent-selector.json +24 -0
  634. package/registry/r/label.json +22 -0
  635. package/registry/r/lane-board.json +20 -0
  636. package/registry/r/live-region-context.json +16 -0
  637. package/registry/r/login-split.json +20 -0
  638. package/registry/r/mcp-server-card.json +22 -0
  639. package/registry/r/mcp-server-list.json +23 -0
  640. package/registry/r/memory-editor.json +23 -0
  641. package/registry/r/mention-menu.json +23 -0
  642. package/registry/r/metrics-panel.json +22 -0
  643. package/registry/r/mode-types.json +15 -0
  644. package/registry/r/model-card.json +23 -0
  645. package/registry/r/model-selector.json +23 -0
  646. package/registry/r/page-shell.json +25 -0
  647. package/registry/r/pagination.json +22 -0
  648. package/registry/r/permission-matrix.json +22 -0
  649. package/registry/r/permission-modal.json +24 -0
  650. package/registry/r/permission-types.json +15 -0
  651. package/registry/r/pin-input.json +20 -0
  652. package/registry/r/plan-badge.json +20 -0
  653. package/registry/r/preview-env-card.json +25 -0
  654. package/registry/r/preview-panel.json +21 -0
  655. package/registry/r/progress-checklist.json +23 -0
  656. package/registry/r/progress.json +20 -0
  657. package/registry/r/project-card.json +25 -0
  658. package/registry/r/project-switcher.json +22 -0
  659. package/registry/r/quick-action-chips.json +21 -0
  660. package/registry/r/radio-group.json +23 -0
  661. package/registry/r/recent-folders-list.json +22 -0
  662. package/registry/r/rollback-ui.json +24 -0
  663. package/registry/r/rule-card.json +23 -0
  664. package/registry/r/rule-editor.json +28 -0
  665. package/registry/r/rule-types.json +18 -0
  666. package/registry/r/run-stats.json +22 -0
  667. package/registry/r/running-tasks-panel.json +22 -0
  668. package/registry/r/safe-href.json +16 -0
  669. package/registry/r/scroll-area.json +22 -0
  670. package/registry/r/select.json +24 -0
  671. package/registry/r/session-list-item.json +20 -0
  672. package/registry/r/session-timeline.json +22 -0
  673. package/registry/r/sheet.json +24 -0
  674. package/registry/r/sidebar.json +19 -0
  675. package/registry/r/skeleton.json +19 -0
  676. package/registry/r/skill-card.json +24 -0
  677. package/registry/r/skill-editor.json +28 -0
  678. package/registry/r/skills-list.json +23 -0
  679. package/registry/r/slide-deck.json +130 -0
  680. package/registry/r/slide-plugin-emoji.json +28 -0
  681. package/registry/r/slide-plugin-math.json +24 -0
  682. package/registry/r/slide-plugin-mermaid.json +23 -0
  683. package/registry/r/slide-plugin-shiki.json +23 -0
  684. package/registry/r/slide.json +123 -0
  685. package/registry/r/social-auth-row.json +21 -0
  686. package/registry/r/stat-tile.json +22 -0
  687. package/registry/r/status-dot.json +20 -0
  688. package/registry/r/steps-rail.json +20 -0
  689. package/registry/r/sub-agent-dispatch.json +22 -0
  690. package/registry/r/switch.json +23 -0
  691. package/registry/r/system-prompt-editor.json +22 -0
  692. package/registry/r/table.json +22 -0
  693. package/registry/r/tabs.json +22 -0
  694. package/registry/r/tailwind-preset.json +19 -0
  695. package/registry/r/task-header.json +24 -0
  696. package/registry/r/task-plan.json +22 -0
  697. package/registry/r/task-types.json +15 -0
  698. package/registry/r/terminal-panel.json +22 -0
  699. package/registry/r/textarea.json +22 -0
  700. package/registry/r/theme-provider.json +59 -0
  701. package/registry/r/theme-script.json +18 -0
  702. package/registry/r/theo-ui-provider.json +20 -0
  703. package/registry/r/timestamp.json +20 -0
  704. package/registry/r/toast.json +30 -0
  705. package/registry/r/token-usage-chart.json +20 -0
  706. package/registry/r/tokens.json +21 -0
  707. package/registry/r/tool-call-card.json +23 -0
  708. package/registry/r/tool-call.json +22 -0
  709. package/registry/r/tool-result.json +20 -0
  710. package/registry/r/tools-list.json +23 -0
  711. package/registry/r/tooltip.json +22 -0
  712. package/registry/r/topnav.json +22 -0
  713. package/registry/r/types.json +15 -0
  714. package/registry/r/usage-meter.json +21 -0
  715. package/registry/r/whiteboard.json +101 -0
@@ -0,0 +1,212 @@
1
+ import { FC, ReactElement, RefObject } from 'react';
2
+ import { d as SlideValidationError, b as SlidePlugin, S as SlideFrontmatter, M as MergedSanitizeExtensions, a as SlideInput } from '../plugin-D5xmXqYb.js';
3
+ export { P as PluginComposer, c as SlideSanitizeExtension, e as SlideValidationErrorCode, f as composePlugins, s as slideFrontmatter, g as slideInput, h as slideTheme } from '../plugin-D5xmXqYb.js';
4
+ import { Root, Element } from 'hast';
5
+ import { Root as Root$1 } from 'mdast';
6
+ import * as hast_util_sanitize from 'hast-util-sanitize';
7
+ import 'zod';
8
+
9
+ /**
10
+ * Theme registry for the Slide primitive. Built-in themes that ship with the
11
+ * `@theokit/ui/slide` subpath. Custom themes are NOT registered through this
12
+ * module in v0.1 — consumers override CSS variables on `.theo-slide` directly.
13
+ */
14
+ declare const slideThemes: readonly ["default", "violet-forge"];
15
+ type SlideTheme = (typeof slideThemes)[number];
16
+ /** Returns true if `value` is a recognized built-in theme. */
17
+ declare function isSlideTheme(value: unknown): value is SlideTheme;
18
+
19
+ interface SlideAspectRatio {
20
+ width: number;
21
+ height: number;
22
+ }
23
+ interface SlideProps {
24
+ /**
25
+ * Slide markdown. CommonMark + GFM + optional YAML frontmatter delimited
26
+ * by `---`. Top-level horizontal rules (`---` on their own line outside
27
+ * frontmatter) imply a deck split and trigger `MULTIPLE_SLIDES`; only the
28
+ * first slide is rendered.
29
+ *
30
+ * Note: `<figure>`/`<figcaption>` tags are stripped by the default
31
+ * sanitize schema (D8). Use `<img>` directly for captionless images.
32
+ */
33
+ markdown: string;
34
+ /** Theme name. Defaults to `"default"`. */
35
+ theme?: SlideTheme;
36
+ /**
37
+ * Aspect ratio of the logical canvas. Default `"16:9"` → 1280×720.
38
+ * Custom `{ width, height }` accepted; zero/negative/NaN fallback to 16:9.
39
+ */
40
+ aspectRatio?: "16:9" | "4:3" | SlideAspectRatio;
41
+ /** Lower clamp for container-fit scale. Default 0.1. */
42
+ minScale?: number;
43
+ /** Upper clamp for container-fit scale. Default 4. */
44
+ maxScale?: number;
45
+ /** Best-effort callback invoked in useEffect when validation/sanitize emits errors. */
46
+ onValidationError?: (errors: SlideValidationError[]) => void;
47
+ /** Override individual element renderers (passed to hast-util-to-jsx-runtime). */
48
+ components?: Record<string, FC<any>>;
49
+ /**
50
+ * Rich-content plugins (Tier 2). Each plugin transforms the mdast/hast tree
51
+ * or adds React component overrides. Pass MEMOIZED arrays to avoid re-parses
52
+ * on every render (D15).
53
+ *
54
+ * @example
55
+ * const plugins = useMemo(() => [emojiPlugin(), shikiPlugin()], []);
56
+ * <Slide markdown={md} plugins={plugins} />
57
+ */
58
+ plugins?: SlidePlugin[];
59
+ /** Accessible label for the slide. Defaults to `"Slide"`. */
60
+ "aria-label"?: string;
61
+ /** Optional class applied to the outer host element (sizing/positioning hook). */
62
+ className?: string;
63
+ }
64
+ declare const Slide: FC<SlideProps>;
65
+
66
+ interface ParseSlideOptions {
67
+ /** Override individual element renderers (passed to hast-util-to-jsx-runtime). */
68
+ components?: Record<string, unknown>;
69
+ /** Rich-content plugins (Tier 2). Order matters — D13 / RFC 0004. */
70
+ plugins?: SlidePlugin[];
71
+ }
72
+ interface ExtractedBackground {
73
+ /** Sanitized URL (http/https only). */
74
+ url: string;
75
+ /** Optional Marpit modifier: `cover` | `fit` | `left` | `right`. */
76
+ modifier?: "cover" | "fit" | "left" | "right";
77
+ }
78
+ interface ParsedSlide {
79
+ frontmatter: SlideFrontmatter;
80
+ /** React element renderable as the body of a slide. Always defined (may be empty Fragment). */
81
+ tree: ReactElement;
82
+ /** Validation + sanitize errors collected during parsing. Empty on success. */
83
+ errors: SlideValidationError[];
84
+ /** True when the input contained a top-level thematic break and only the first slide was rendered. */
85
+ truncated: boolean;
86
+ /**
87
+ * Background image extracted from Marpit `![bg](url)` syntax (D18 / EC-5).
88
+ * Precedence: `frontmatter.backgroundImage` > `extractedBackground.url`.
89
+ */
90
+ extractedBackground?: ExtractedBackground;
91
+ }
92
+ declare function parseBody(body: string): Promise<Root$1>;
93
+ declare function mdastToHast(tree: Root$1): Promise<Root>;
94
+ declare function sanitizeHast(tree: Root, extensions?: MergedSanitizeExtensions): Promise<{
95
+ tree: Root;
96
+ bannedTags: string[];
97
+ }>;
98
+ declare function hastToReact(tree: Root, components?: Record<string, unknown>): Promise<ReactElement>;
99
+ /**
100
+ * Public entry point. Validates → parses → sanitizes → returns a React tree.
101
+ *
102
+ * Never throws on input. Errors (validation, BANNED_TAG) are collected into
103
+ * `errors[]` so callers can show them via `onValidationError`.
104
+ */
105
+ declare function parseSlide(markdown: string, opts?: ParseSlideOptions): Promise<ParsedSlide>;
106
+
107
+ /**
108
+ * Async validator for slide markdown input.
109
+ *
110
+ * Returns `Promise<ValidationResult>` (ADR D11 — sync impossible because
111
+ * `yaml` and `mdast-util-from-markdown` are lazy-imported peer-deps).
112
+ *
113
+ * Pipeline:
114
+ * 1. Strip BOM + extract frontmatter (`frontmatter.ts`).
115
+ * 2. Reject `FRONTMATTER_TOO_LARGE` early if raw > 10 KB (ADR D14).
116
+ * 3. Parse YAML in safe mode → validate against `slideFrontmatter` (Zod).
117
+ * 4. Validate body length → emit `CONTENT_TOO_LARGE` if > 50 KB.
118
+ * 5. Detect multi-slide via mdast `thematicBreak` walk (ADR D12) — not
119
+ * a regex, so `---` inside fenced code blocks does not false-positive.
120
+ * 6. Return `{ ok, input, errors[] }`.
121
+ *
122
+ * Errors are structured so an LLM can self-correct from the callback.
123
+ */
124
+
125
+ type ValidationResult = {
126
+ ok: true;
127
+ input: SlideInput;
128
+ errors: SlideValidationError[];
129
+ } | {
130
+ ok: false;
131
+ errors: SlideValidationError[];
132
+ };
133
+ /**
134
+ * Validate the markdown input. Returns errors structured for LLM self-correction.
135
+ *
136
+ * Async because frontmatter YAML parsing and mdast multi-slide detection both
137
+ * use lazy-imported peer-deps (yaml + mdast-util-from-markdown).
138
+ */
139
+ declare function validateSlide(markdown: string): Promise<ValidationResult>;
140
+
141
+ /**
142
+ * Lightweight, dependency-free extractor that separates YAML frontmatter from
143
+ * the markdown body.
144
+ *
145
+ * Strips a leading BOM (``) before matching the regex — common when
146
+ * markdown is pasted from Word/Notion. See plan ADR D14 and edge-case EC-4.
147
+ *
148
+ * Returns `{ rawFrontmatter, body, tooLarge? }`:
149
+ * - `rawFrontmatter`: the YAML string between the two `---` delimiters, or
150
+ * `null` if no frontmatter is present.
151
+ * - `body`: the markdown after the closing `---\n` (or the full input when
152
+ * no frontmatter).
153
+ * - `tooLarge`: `true` if `rawFrontmatter` exceeds `MAX_RAW_FRONTMATTER`
154
+ * bytes — the caller turns this into `FRONTMATTER_TOO_LARGE`.
155
+ */
156
+ /** Maximum size of the raw frontmatter string before YAML parsing. 10 KB cap. */
157
+ declare const MAX_RAW_FRONTMATTER = 10240;
158
+ interface ExtractFrontmatterResult {
159
+ rawFrontmatter: string | null;
160
+ body: string;
161
+ tooLarge?: boolean;
162
+ }
163
+ declare function extractFrontmatter(md: string): ExtractFrontmatterResult;
164
+
165
+ /**
166
+ * Container-fit hook for the Slide primitive.
167
+ *
168
+ * Observes the host element via `ResizeObserver` and computes a CSS scale
169
+ * factor that fits the fixed logical canvas (default 1280×720) inside it,
170
+ * preserving aspect ratio. Clamped to `[minScale, maxScale]`.
171
+ *
172
+ * Algorithm: `scale = clamp(min(W / canvasW, H / canvasH), min, max)`.
173
+ *
174
+ * Adapted from Reveal.js `transformSlides` (see reference doc §4.5 / §14.2).
175
+ *
176
+ * Cleanup: disconnects the observer on unmount or when deps change.
177
+ */
178
+
179
+ interface UseSlideFitOptions {
180
+ /** Lower clamp for scale. Default 0.1. */
181
+ minScale?: number;
182
+ /** Upper clamp for scale. Default 4. */
183
+ maxScale?: number;
184
+ }
185
+ declare function useSlideFit(ref: RefObject<HTMLElement | null>, canvasW: number, canvasH: number, opts?: UseSlideFitOptions): number;
186
+
187
+ /**
188
+ * Lazy accessor for the sanitize schema.
189
+ *
190
+ * Always merges `defaultSchema` with the Tier 1 baseline (aside + className).
191
+ * When `extensions` is provided, plugin-declared tag names + attributes are
192
+ * unioned on top (D17 / EC-3). Plugins NEVER bypass sanitize — they declare
193
+ * what they need via `sanitizeSchemaExtension`.
194
+ *
195
+ * Implementation notes:
196
+ * - The baseline schema (default + Tier 1) is cached.
197
+ * - Plugin-merged schemas are NOT cached (depends on combination).
198
+ */
199
+ declare function getSlideSanitizeSchema(extensions?: MergedSanitizeExtensions): Promise<hast_util_sanitize.Schema>;
200
+ /** Count elements by tagName in a hast tree. Used for BANNED_TAG detection (ADR D13). */
201
+ declare function collectTagCounts(tree: Root | Element): Map<string, number>;
202
+
203
+ interface JsonSchemaProperties {
204
+ [key: string]: Record<string, unknown>;
205
+ }
206
+ interface JsonSchemaWithProperties {
207
+ properties?: JsonSchemaProperties;
208
+ [key: string]: unknown;
209
+ }
210
+ declare const slideFrontmatterJsonSchema: JsonSchemaWithProperties;
211
+
212
+ export { type ExtractFrontmatterResult, MAX_RAW_FRONTMATTER, MergedSanitizeExtensions, type ParseSlideOptions, type ParsedSlide, Slide, type SlideAspectRatio, SlideFrontmatter, SlideInput, SlidePlugin, type SlideProps, type SlideTheme, SlideValidationError, type UseSlideFitOptions, type ValidationResult, collectTagCounts, extractFrontmatter, getSlideSanitizeSchema, hastToReact, isSlideTheme, mdastToHast, parseBody, parseSlide, sanitizeHast, slideFrontmatterJsonSchema, slideThemes, useSlideFit, validateSlide };
@@ -0,0 +1,3 @@
1
+ export { MAX_RAW_FRONTMATTER, Slide, collectTagCounts, composePlugins, extractFrontmatter, getSlideSanitizeSchema, hastToReact, isSlideTheme, mdastToHast, parseBody, parseSlide, sanitizeHast, slideFrontmatter, slideFrontmatterJsonSchema, slideInput, slideTheme, slideThemes, useSlideFit, validateSlide } from '../chunk-ZUS5KZGO.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,29 @@
1
+ import { b as SlidePlugin } from '../../../plugin-D5xmXqYb.js';
2
+ import 'hast';
3
+ import 'mdast';
4
+ import 'react';
5
+ import 'zod';
6
+
7
+ /**
8
+ * 100 emoji shortcodes commonly used in tech presentations.
9
+ *
10
+ * Selection rationale: covers the top ~80% of GitHub markdown usage in code
11
+ * docs, release notes, slides. Unicode-native (no external font dependency)
12
+ * so the appearance follows the OS emoji font (Apple Color Emoji on macOS,
13
+ * Segoe UI Emoji on Windows, Noto Color Emoji on Linux/Android).
14
+ *
15
+ * Adding entries: keep keys lowercase, kebab/underscore allowed, single Unicode
16
+ * scalar value (sequences like 👨‍💻 are also OK).
17
+ *
18
+ * Twemoji variant: out of scope — `slide/plugins/emoji-twemoji` is a v0.5
19
+ * candidate if demand emerges.
20
+ */
21
+ declare const EMOJI_MAP: Record<string, string>;
22
+
23
+ interface EmojiPluginOptions {
24
+ /** Override or extend the default emoji map. Merged on top of the built-in 100. */
25
+ extra?: Record<string, string>;
26
+ }
27
+ declare function emojiPlugin(opts?: EmojiPluginOptions): SlidePlugin;
28
+
29
+ export { EMOJI_MAP, type EmojiPluginOptions, emojiPlugin };
@@ -0,0 +1,157 @@
1
+ // src/components/primitives/slide/plugins/emoji/map.ts
2
+ var EMOJI_MAP = {
3
+ // Faces & reactions
4
+ smile: "\u{1F600}",
5
+ grin: "\u{1F601}",
6
+ joy: "\u{1F602}",
7
+ rofl: "\u{1F923}",
8
+ wink: "\u{1F609}",
9
+ sweat_smile: "\u{1F605}",
10
+ blush: "\u{1F60A}",
11
+ thinking: "\u{1F914}",
12
+ neutral_face: "\u{1F610}",
13
+ expressionless: "\u{1F611}",
14
+ no_mouth: "\u{1F636}",
15
+ heart_eyes: "\u{1F60D}",
16
+ sunglasses: "\u{1F60E}",
17
+ cry: "\u{1F622}",
18
+ sob: "\u{1F62D}",
19
+ scream: "\u{1F631}",
20
+ fearful: "\u{1F628}",
21
+ flushed: "\u{1F633}",
22
+ zzz: "\u{1F4A4}",
23
+ // Hand gestures
24
+ thumbsup: "\u{1F44D}",
25
+ thumbs_up: "\u{1F44D}",
26
+ thumbsdown: "\u{1F44E}",
27
+ thumbs_down: "\u{1F44E}",
28
+ ok_hand: "\u{1F44C}",
29
+ clap: "\u{1F44F}",
30
+ wave: "\u{1F44B}",
31
+ raised_hands: "\u{1F64C}",
32
+ pray: "\u{1F64F}",
33
+ muscle: "\u{1F4AA}",
34
+ point_right: "\u{1F449}",
35
+ point_left: "\u{1F448}",
36
+ point_up: "\u{1F446}",
37
+ point_down: "\u{1F447}",
38
+ // Signals & icons
39
+ check: "\u2705",
40
+ white_check_mark: "\u2705",
41
+ x: "\u274C",
42
+ heavy_check_mark: "\u2714",
43
+ ballot_box_with_check: "\u2611\uFE0F",
44
+ warning: "\u26A0\uFE0F",
45
+ no_entry: "\u26D4",
46
+ no_entry_sign: "\u{1F6AB}",
47
+ question: "\u2753",
48
+ exclamation: "\u2757",
49
+ bangbang: "\u203C\uFE0F",
50
+ information_source: "\u2139\uFE0F",
51
+ zap: "\u26A1",
52
+ bell: "\u{1F514}",
53
+ no_bell: "\u{1F515}",
54
+ // Tech
55
+ rocket: "\u{1F680}",
56
+ computer: "\u{1F4BB}",
57
+ desktop_computer: "\u{1F5A5}\uFE0F",
58
+ keyboard: "\u2328\uFE0F",
59
+ bulb: "\u{1F4A1}",
60
+ hammer: "\u{1F528}",
61
+ wrench: "\u{1F527}",
62
+ gear: "\u2699\uFE0F",
63
+ lock: "\u{1F512}",
64
+ unlock: "\u{1F513}",
65
+ key: "\u{1F511}",
66
+ package: "\u{1F4E6}",
67
+ link: "\u{1F517}",
68
+ paperclip: "\u{1F4CE}",
69
+ scissors: "\u2702\uFE0F",
70
+ hourglass: "\u23F3",
71
+ alarm_clock: "\u23F0",
72
+ stopwatch: "\u23F1\uFE0F",
73
+ hash: "#\uFE0F\u20E3",
74
+ // Files & docs
75
+ page_facing_up: "\u{1F4C4}",
76
+ pencil: "\u270F\uFE0F",
77
+ memo: "\u{1F4DD}",
78
+ book: "\u{1F4D6}",
79
+ books: "\u{1F4DA}",
80
+ bookmark: "\u{1F516}",
81
+ clipboard: "\u{1F4CB}",
82
+ chart_with_upwards_trend: "\u{1F4C8}",
83
+ chart_with_downwards_trend: "\u{1F4C9}",
84
+ bar_chart: "\u{1F4CA}",
85
+ // Status / energy
86
+ fire: "\u{1F525}",
87
+ sparkles: "\u2728",
88
+ star: "\u2B50",
89
+ star2: "\u{1F31F}",
90
+ tada: "\u{1F389}",
91
+ confetti_ball: "\u{1F38A}",
92
+ boom: "\u{1F4A5}",
93
+ rainbow: "\u{1F308}",
94
+ sunny: "\u2600\uFE0F",
95
+ cloud: "\u2601\uFE0F",
96
+ snowflake: "\u2744\uFE0F",
97
+ hot_face: "\u{1F975}",
98
+ cold_face: "\u{1F976}",
99
+ // Affection & symbols
100
+ heart: "\u2764\uFE0F",
101
+ broken_heart: "\u{1F494}",
102
+ hearts: "\u{1F495}",
103
+ fist: "\u270A",
104
+ trophy: "\u{1F3C6}",
105
+ medal: "\u{1F396}\uFE0F",
106
+ hundred: "\u{1F4AF}",
107
+ eye: "\u{1F441}\uFE0F",
108
+ eyes: "\u{1F440}",
109
+ // Coffee & food (slide signature)
110
+ coffee: "\u2615",
111
+ tea: "\u{1F375}",
112
+ beer: "\u{1F37A}",
113
+ pizza: "\u{1F355}",
114
+ // Arrows
115
+ arrow_right: "\u27A1\uFE0F",
116
+ arrow_left: "\u2B05\uFE0F",
117
+ arrow_up: "\u2B06\uFE0F",
118
+ arrow_down: "\u2B07\uFE0F",
119
+ arrow_upper_right: "\u2197\uFE0F",
120
+ arrow_lower_right: "\u2198\uFE0F"
121
+ };
122
+
123
+ // src/components/primitives/slide/plugins/emoji/index.ts
124
+ var SHORTCODE_RE = /:([a-z0-9_+-]+):/g;
125
+ function isInsideCodeOrPre(ancestors) {
126
+ for (let i = ancestors.length - 1; i >= 0; i--) {
127
+ const a = ancestors[i];
128
+ if (!a || a.type !== "element") continue;
129
+ if (a.tagName === "code" || a.tagName === "pre") return true;
130
+ }
131
+ return false;
132
+ }
133
+ function emojiPlugin(opts = {}) {
134
+ const map = { ...EMOJI_MAP, ...opts.extra ?? {} };
135
+ return {
136
+ name: "emoji",
137
+ async hastTransform(tree) {
138
+ const { visitParents } = await import('unist-util-visit-parents');
139
+ visitParents(
140
+ tree,
141
+ "text",
142
+ (node, ancestors) => {
143
+ if (isInsideCodeOrPre(ancestors)) return;
144
+ node.value = node.value.replace(SHORTCODE_RE, (match, code) => {
145
+ const replacement = map[code.toLowerCase()];
146
+ return replacement ?? match;
147
+ });
148
+ }
149
+ );
150
+ return tree;
151
+ }
152
+ };
153
+ }
154
+
155
+ export { EMOJI_MAP, emojiPlugin };
156
+ //# sourceMappingURL=index.js.map
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/primitives/slide/plugins/emoji/map.ts","../../../../src/components/primitives/slide/plugins/emoji/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 100 emoji shortcodes commonly used in tech presentations.\n *\n * Selection rationale: covers the top ~80% of GitHub markdown usage in code\n * docs, release notes, slides. Unicode-native (no external font dependency)\n * so the appearance follows the OS emoji font (Apple Color Emoji on macOS,\n * Segoe UI Emoji on Windows, Noto Color Emoji on Linux/Android).\n *\n * Adding entries: keep keys lowercase, kebab/underscore allowed, single Unicode\n * scalar value (sequences like 👨‍💻 are also OK).\n *\n * Twemoji variant: out of scope — `slide/plugins/emoji-twemoji` is a v0.5\n * candidate if demand emerges.\n */\nexport const EMOJI_MAP: Record<string, string> = {\n // Faces & reactions\n smile: \"\\u{1F600}\",\n grin: \"\\u{1F601}\",\n joy: \"\\u{1F602}\",\n rofl: \"\\u{1F923}\",\n wink: \"\\u{1F609}\",\n sweat_smile: \"\\u{1F605}\",\n blush: \"\\u{1F60A}\",\n thinking: \"\\u{1F914}\",\n neutral_face: \"\\u{1F610}\",\n expressionless: \"\\u{1F611}\",\n no_mouth: \"\\u{1F636}\",\n heart_eyes: \"\\u{1F60D}\",\n sunglasses: \"\\u{1F60E}\",\n cry: \"\\u{1F622}\",\n sob: \"\\u{1F62D}\",\n scream: \"\\u{1F631}\",\n fearful: \"\\u{1F628}\",\n flushed: \"\\u{1F633}\",\n zzz: \"\\u{1F4A4}\",\n\n // Hand gestures\n thumbsup: \"\\u{1F44D}\",\n thumbs_up: \"\\u{1F44D}\",\n thumbsdown: \"\\u{1F44E}\",\n thumbs_down: \"\\u{1F44E}\",\n ok_hand: \"\\u{1F44C}\",\n clap: \"\\u{1F44F}\",\n wave: \"\\u{1F44B}\",\n raised_hands: \"\\u{1F64C}\",\n pray: \"\\u{1F64F}\",\n muscle: \"\\u{1F4AA}\",\n point_right: \"\\u{1F449}\",\n point_left: \"\\u{1F448}\",\n point_up: \"\\u{1F446}\",\n point_down: \"\\u{1F447}\",\n\n // Signals & icons\n check: \"✅\",\n white_check_mark: \"✅\",\n x: \"❌\",\n heavy_check_mark: \"✔\",\n ballot_box_with_check: \"☑️\",\n warning: \"⚠️\",\n no_entry: \"⛔\",\n no_entry_sign: \"\\u{1F6AB}\",\n question: \"❓\",\n exclamation: \"❗\",\n bangbang: \"‼️\",\n information_source: \"ℹ️\",\n zap: \"⚡\",\n bell: \"\\u{1F514}\",\n no_bell: \"\\u{1F515}\",\n\n // Tech\n rocket: \"\\u{1F680}\",\n computer: \"\\u{1F4BB}\",\n desktop_computer: \"\\u{1F5A5}️\",\n keyboard: \"⌨️\",\n bulb: \"\\u{1F4A1}\",\n hammer: \"\\u{1F528}\",\n wrench: \"\\u{1F527}\",\n gear: \"⚙️\",\n lock: \"\\u{1F512}\",\n unlock: \"\\u{1F513}\",\n key: \"\\u{1F511}\",\n package: \"\\u{1F4E6}\",\n link: \"\\u{1F517}\",\n paperclip: \"\\u{1F4CE}\",\n scissors: \"✂️\",\n hourglass: \"⏳\",\n alarm_clock: \"⏰\",\n stopwatch: \"⏱️\",\n hash: \"#️⃣\",\n\n // Files & docs\n page_facing_up: \"\\u{1F4C4}\",\n pencil: \"✏️\",\n memo: \"\\u{1F4DD}\",\n book: \"\\u{1F4D6}\",\n books: \"\\u{1F4DA}\",\n bookmark: \"\\u{1F516}\",\n clipboard: \"\\u{1F4CB}\",\n chart_with_upwards_trend: \"\\u{1F4C8}\",\n chart_with_downwards_trend: \"\\u{1F4C9}\",\n bar_chart: \"\\u{1F4CA}\",\n\n // Status / energy\n fire: \"\\u{1F525}\",\n sparkles: \"✨\",\n star: \"⭐\",\n star2: \"\\u{1F31F}\",\n tada: \"\\u{1F389}\",\n confetti_ball: \"\\u{1F38A}\",\n boom: \"\\u{1F4A5}\",\n rainbow: \"\\u{1F308}\",\n sunny: \"☀️\",\n cloud: \"☁️\",\n snowflake: \"❄️\",\n hot_face: \"\\u{1F975}\",\n cold_face: \"\\u{1F976}\",\n\n // Affection & symbols\n heart: \"❤️\",\n broken_heart: \"\\u{1F494}\",\n hearts: \"\\u{1F495}\",\n fist: \"✊\",\n trophy: \"\\u{1F3C6}\",\n medal: \"\\u{1F396}️\",\n hundred: \"\\u{1F4AF}\",\n eye: \"\\u{1F441}️\",\n eyes: \"\\u{1F440}\",\n\n // Coffee & food (slide signature)\n coffee: \"☕\",\n tea: \"\\u{1F375}\",\n beer: \"\\u{1F37A}\",\n pizza: \"\\u{1F355}\",\n\n // Arrows\n arrow_right: \"➡️\",\n arrow_left: \"⬅️\",\n arrow_up: \"⬆️\",\n arrow_down: \"⬇️\",\n arrow_upper_right: \"↗️\",\n arrow_lower_right: \"↘️\",\n};\n","/**\n * Slide rich-content plugin — Unicode emoji shortcodes.\n *\n * Zero peer-deps for runtime (only unist-util-visit-parents which is part of\n * the existing slide stack tree). Substitutes `:shortcode:` patterns with the\n * matching Unicode emoji from the embedded map.\n *\n * EC-6: uses `visitParents` with an ancestor check so shortcodes inside\n * `<code>` / `<pre>` are NEVER replaced. This prevents corruption of code\n * samples that legitimately use `:colon:syntax` (Python type hints, YAML\n * keys, Ruby symbols, JSX self-closing, etc.).\n *\n * Unknown shortcodes pass through unchanged (`:foo:` stays as text).\n */\nimport type { Root as HastRoot } from \"hast\";\nimport type { SlidePlugin } from \"../../plugin.js\";\nimport { EMOJI_MAP } from \"./map.js\";\n\nconst SHORTCODE_RE = /:([a-z0-9_+-]+):/g;\n\n/**\n * Return true when any ancestor element is `<code>` or `<pre>`. Used to skip\n * emoji replacement inside code samples (EC-6).\n */\nfunction isInsideCodeOrPre(ancestors: ReadonlyArray<{ type: string; tagName?: string }>): boolean {\n for (let i = ancestors.length - 1; i >= 0; i--) {\n const a = ancestors[i];\n if (!a || a.type !== \"element\") continue;\n if (a.tagName === \"code\" || a.tagName === \"pre\") return true;\n }\n return false;\n}\n\nexport interface EmojiPluginOptions {\n /** Override or extend the default emoji map. Merged on top of the built-in 100. */\n extra?: Record<string, string>;\n}\n\nexport function emojiPlugin(opts: EmojiPluginOptions = {}): SlidePlugin {\n const map = { ...EMOJI_MAP, ...(opts.extra ?? {}) };\n return {\n name: \"emoji\",\n async hastTransform(tree: HastRoot): Promise<HastRoot> {\n const { visitParents } = await import(\"unist-util-visit-parents\");\n visitParents(\n tree,\n \"text\",\n (node: { value: string }, ancestors: Array<{ type: string; tagName?: string }>) => {\n if (isInsideCodeOrPre(ancestors)) return;\n node.value = node.value.replace(SHORTCODE_RE, (match, code: string) => {\n const replacement = map[code.toLowerCase()];\n return replacement ?? match;\n });\n },\n );\n return tree;\n },\n };\n}\n\nexport { EMOJI_MAP };\n"]}
@@ -0,0 +1,13 @@
1
+ import { b as SlidePlugin } from '../../../plugin-D5xmXqYb.js';
2
+ import 'hast';
3
+ import 'mdast';
4
+ import 'react';
5
+ import 'zod';
6
+
7
+ interface MathPluginOptions {
8
+ /** KaTeX render options forwarded to `renderToString`. */
9
+ katexOptions?: Record<string, unknown>;
10
+ }
11
+ declare function mathPlugin(opts?: MathPluginOptions): SlidePlugin;
12
+
13
+ export { type MathPluginOptions, mathPlugin };
@@ -0,0 +1,145 @@
1
+ // src/components/primitives/slide/plugins/math/index.ts
2
+ var MATHML_TAG_NAMES = [
3
+ "span",
4
+ "div",
5
+ "math",
6
+ "semantics",
7
+ "annotation",
8
+ "annotation-xml",
9
+ // token elements
10
+ "mtext",
11
+ "mn",
12
+ "mo",
13
+ "mi",
14
+ "ms",
15
+ "mglyph",
16
+ // general layout
17
+ "mrow",
18
+ "mfrac",
19
+ "msqrt",
20
+ "mroot",
21
+ "mstyle",
22
+ "merror",
23
+ "mpadded",
24
+ "mphantom",
25
+ "menclose",
26
+ "mspace",
27
+ // scripts & limits
28
+ "msub",
29
+ "msup",
30
+ "msubsup",
31
+ "munder",
32
+ "mover",
33
+ "munderover",
34
+ "mmultiscripts",
35
+ "mprescripts",
36
+ // tables (matrices)
37
+ "mtable",
38
+ "mtr",
39
+ "mtd",
40
+ "mlabeledtr"
41
+ ];
42
+ var MATHML_ATTRIBUTES = {
43
+ "*": ["style", "className", "ariaHidden", "ariaLabel"],
44
+ span: ["style", "className"],
45
+ math: ["xmlns", "display"],
46
+ annotation: ["encoding"],
47
+ "annotation-xml": ["encoding"],
48
+ mfrac: ["linethickness"],
49
+ mspace: ["width", "height", "depth"],
50
+ mover: ["accent"],
51
+ munder: ["accentunder"],
52
+ mo: ["fence", "form", "lspace", "rspace", "stretchy", "symmetric"]
53
+ };
54
+ var INLINE_RE = /\$([^$\n]+)\$/g;
55
+ var BLOCK_RE = /\$\$([\s\S]+?)\$\$/g;
56
+ function mathPlugin(opts = {}) {
57
+ let peerDepMissing = false;
58
+ return {
59
+ name: "math",
60
+ sanitizeSchemaExtension: {
61
+ tagNames: MATHML_TAG_NAMES,
62
+ attributes: MATHML_ATTRIBUTES
63
+ },
64
+ async hastTransform(tree) {
65
+ if (peerDepMissing) return tree;
66
+ let katex;
67
+ let fromHtml;
68
+ let visit;
69
+ try {
70
+ katex = (await import('katex')).default;
71
+ fromHtml = (await import('hast-util-from-html')).fromHtml;
72
+ visit = (await import('unist-util-visit')).visit;
73
+ } catch (e) {
74
+ peerDepMissing = true;
75
+ throw new Error(
76
+ `[slide/plugins/math] peer-deps missing (katex / hast-util-from-html). Run: pnpm add katex hast-util-from-html. Math formulas remain as plain text. Error: ${e instanceof Error ? e.message : String(e)}`
77
+ );
78
+ }
79
+ visit(
80
+ tree,
81
+ "text",
82
+ (node, idx, parent) => {
83
+ if (!parent || idx === void 0) return;
84
+ if (parent.tagName === "code" || parent.tagName === "pre") return;
85
+ const value = node.value;
86
+ const replacements = [];
87
+ for (const m of value.matchAll(BLOCK_RE)) {
88
+ if (m.index === void 0) continue;
89
+ try {
90
+ replacements.push({
91
+ start: m.index,
92
+ end: m.index + m[0].length,
93
+ html: katex.renderToString(m[1], {
94
+ ...opts.katexOptions ?? {},
95
+ displayMode: true,
96
+ throwOnError: false
97
+ })
98
+ });
99
+ } catch {
100
+ }
101
+ }
102
+ for (const m of value.matchAll(INLINE_RE)) {
103
+ if (m.index === void 0) continue;
104
+ if (replacements.some((r) => (m.index ?? 0) >= r.start && (m.index ?? 0) < r.end))
105
+ continue;
106
+ try {
107
+ replacements.push({
108
+ start: m.index,
109
+ end: m.index + m[0].length,
110
+ html: katex.renderToString(m[1], {
111
+ ...opts.katexOptions ?? {},
112
+ displayMode: false,
113
+ throwOnError: false
114
+ })
115
+ });
116
+ } catch {
117
+ }
118
+ }
119
+ if (replacements.length === 0) return;
120
+ replacements.sort((a, b) => a.start - b.start);
121
+ const newChildren = [];
122
+ let cursor = 0;
123
+ for (const r of replacements) {
124
+ if (r.start > cursor) {
125
+ newChildren.push({ type: "text", value: value.slice(cursor, r.start) });
126
+ }
127
+ const fragment = fromHtml(r.html, { fragment: true });
128
+ newChildren.push(...fragment.children);
129
+ cursor = r.end;
130
+ }
131
+ if (cursor < value.length) {
132
+ newChildren.push({ type: "text", value: value.slice(cursor) });
133
+ }
134
+ parent.children.splice(idx, 1, ...newChildren);
135
+ return idx + newChildren.length;
136
+ }
137
+ );
138
+ return tree;
139
+ }
140
+ };
141
+ }
142
+
143
+ export { mathPlugin };
144
+ //# sourceMappingURL=index.js.map
145
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/primitives/slide/plugins/math/index.ts"],"names":[],"mappings":";AA+BA,IAAM,gBAAA,GAAmB;AAAA,EACvB,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA;AAAA,EAEA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA;AAAA,EAEA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA;AAAA,EAEA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,iBAAA,GAA8C;AAAA,EAClD,GAAA,EAAK,CAAC,OAAA,EAAS,WAAA,EAAa,cAAc,WAAW,CAAA;AAAA,EACrD,IAAA,EAAM,CAAC,OAAA,EAAS,WAAW,CAAA;AAAA,EAC3B,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS,CAAA;AAAA,EACzB,UAAA,EAAY,CAAC,UAAU,CAAA;AAAA,EACvB,gBAAA,EAAkB,CAAC,UAAU,CAAA;AAAA,EAC7B,KAAA,EAAO,CAAC,eAAe,CAAA;AAAA,EACvB,MAAA,EAAQ,CAAC,OAAA,EAAS,QAAA,EAAU,OAAO,CAAA;AAAA,EACnC,KAAA,EAAO,CAAC,QAAQ,CAAA;AAAA,EAChB,MAAA,EAAQ,CAAC,aAAa,CAAA;AAAA,EACtB,IAAI,CAAC,OAAA,EAAS,QAAQ,QAAA,EAAU,QAAA,EAAU,YAAY,WAAW;AACnE,CAAA;AAEA,IAAM,SAAA,GAAY,gBAAA;AAClB,IAAM,QAAA,GAAW,qBAAA;AAEV,SAAS,UAAA,CAAW,IAAA,GAA0B,EAAC,EAAgB;AACpE,EAAA,IAAI,cAAA,GAAiB,KAAA;AAErB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,uBAAA,EAAyB;AAAA,MACvB,QAAA,EAAU,gBAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAM,cAAc,IAAA,EAAmC;AACrD,MAAA,IAAI,gBAAgB,OAAO,IAAA;AAG3B,MAAA,IAAI,KAAA;AAEJ,MAAA,IAAI,QAAA;AAEJ,MAAA,IAAI,KAAA;AACJ,MAAA,IAAI;AACF,QAAA,KAAA,GAAA,CAAS,MAAM,OAAO,OAAO,CAAA,EAAG,OAAA;AAChC,QAAA,QAAA,GAAA,CAAY,MAAM,OAAO,qBAAqB,CAAA,EAAG,QAAA;AACjD,QAAA,KAAA,GAAA,CAAS,MAAM,OAAO,kBAAkB,CAAA,EAAG,KAAA;AAAA,MAC7C,SAAS,CAAA,EAAG;AACV,QAAA,cAAA,GAAiB,IAAA;AACjB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,6JAA6J,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,SACzM;AAAA,MACF;AAGA,MAAA,KAAA;AAAA,QACE,IAAA;AAAA,QACA,MAAA;AAAA,QACA,CACE,IAAA,EACA,GAAA,EACA,MAAA,KACG;AACH,UAAA,IAAI,CAAC,MAAA,IAAU,GAAA,KAAQ,MAAA,EAAW;AAGlC,UAAA,IAAI,MAAA,CAAO,OAAA,KAAY,MAAA,IAAU,MAAA,CAAO,YAAY,KAAA,EAAO;AAC3D,UAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,UAAA,MAAM,eAID,EAAC;AAEN,UAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AACxC,YAAA,IAAI,CAAA,CAAE,UAAU,MAAA,EAAW;AAC3B,YAAA,IAAI;AACF,cAAA,YAAA,CAAa,IAAA,CAAK;AAAA,gBAChB,OAAO,CAAA,CAAE,KAAA;AAAA,gBACT,GAAA,EAAK,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,gBACpB,IAAA,EAAM,KAAA,CAAM,cAAA,CAAe,CAAA,CAAE,CAAC,CAAA,EAAG;AAAA,kBAC/B,GAAI,IAAA,CAAK,YAAA,IAAgB,EAAC;AAAA,kBAC1B,WAAA,EAAa,IAAA;AAAA,kBACb,YAAA,EAAc;AAAA,iBACf;AAAA,eACF,CAAA;AAAA,YACH,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AACA,UAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG;AACzC,YAAA,IAAI,CAAA,CAAE,UAAU,MAAA,EAAW;AAE3B,YAAA,IAAI,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,KAAA,IAAS,CAAA,KAAM,CAAA,CAAE,KAAA,IAAA,CAAU,CAAA,CAAE,KAAA,IAAS,CAAA,IAAK,EAAE,GAAG,CAAA;AAC9E,cAAA;AACF,YAAA,IAAI;AACF,cAAA,YAAA,CAAa,IAAA,CAAK;AAAA,gBAChB,OAAO,CAAA,CAAE,KAAA;AAAA,gBACT,GAAA,EAAK,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;AAAA,gBACpB,IAAA,EAAM,KAAA,CAAM,cAAA,CAAe,CAAA,CAAE,CAAC,CAAA,EAAG;AAAA,kBAC/B,GAAI,IAAA,CAAK,YAAA,IAAgB,EAAC;AAAA,kBAC1B,WAAA,EAAa,KAAA;AAAA,kBACb,YAAA,EAAc;AAAA,iBACf;AAAA,eACF,CAAA;AAAA,YACH,CAAA,CAAA,MAAQ;AAAA,YAER;AAAA,UACF;AACA,UAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC/B,UAAA,YAAA,CAAa,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAC7C,UAAA,MAAM,cAAyB,EAAC;AAChC,UAAA,IAAI,MAAA,GAAS,CAAA;AACb,UAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,YAAA,IAAI,CAAA,CAAE,QAAQ,MAAA,EAAQ;AACpB,cAAA,WAAA,CAAY,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,CAAA,CAAE,KAAK,CAAA,EAAG,CAAA;AAAA,YACxE;AACA,YAAA,MAAM,WAAW,QAAA,CAAS,CAAA,CAAE,MAAM,EAAE,QAAA,EAAU,MAAM,CAAA;AACpD,YAAA,WAAA,CAAY,IAAA,CAAK,GAAG,QAAA,CAAS,QAAQ,CAAA;AACrC,YAAA,MAAA,GAAS,CAAA,CAAE,GAAA;AAAA,UACb;AACA,UAAA,IAAI,MAAA,GAAS,MAAM,MAAA,EAAQ;AACzB,YAAA,WAAA,CAAY,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,EAAG,CAAA;AAAA,UAC/D;AACA,UAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,CAAA,EAAG,GAAG,WAAW,CAAA;AAC7C,UAAA,OAAO,MAAM,WAAA,CAAY,MAAA;AAAA,QAC3B;AAAA,OACF;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF","file":"index.js","sourcesContent":["/**\n * Slide rich-content plugin — KaTeX math rendering.\n *\n * Peer-deps (optional): `katex`, `hast-util-from-html`, `unist-util-visit`.\n * Lazy + opt-in (ADR D10 / D13 of the rich-content plan).\n *\n * Detects `$inline$` and `$$block$$` patterns in hast text nodes and replaces\n * them with KaTeX-rendered HTML. Block math (display mode) is rendered with\n * `displayMode: true` for proper line height + numbering.\n *\n * EC-2: every peer-dep is loaded via dynamic `import()` wrapped in try/catch;\n * a missing peer-dep surfaces via the D16 path (PLUGIN_ERROR) and the math\n * source stays as plain text — slide doesn't break.\n *\n * EC-4: `sanitizeSchemaExtension` lists ~30 MathML tags + KaTeX-specific\n * attributes so the rendered output survives the security barrier (D17).\n *\n * Consumer setup:\n * import \"katex/dist/katex.min.css\";\n * <Slide markdown={md} plugins={[mathPlugin()]} />\n */\nimport type { Root as HastRoot } from \"hast\";\nimport type { SlidePlugin } from \"../../plugin.js\";\n\nexport interface MathPluginOptions {\n /** KaTeX render options forwarded to `renderToString`. */\n katexOptions?: Record<string, unknown>;\n}\n\n// EC-4: complete MathML core tag list — KaTeX emits these for fraction, sqrt,\n// matrix, sub/super, accents, etc. Plus `<span>`/`<div>` for layout chrome.\nconst MATHML_TAG_NAMES = [\n \"span\",\n \"div\",\n \"math\",\n \"semantics\",\n \"annotation\",\n \"annotation-xml\",\n // token elements\n \"mtext\",\n \"mn\",\n \"mo\",\n \"mi\",\n \"ms\",\n \"mglyph\",\n // general layout\n \"mrow\",\n \"mfrac\",\n \"msqrt\",\n \"mroot\",\n \"mstyle\",\n \"merror\",\n \"mpadded\",\n \"mphantom\",\n \"menclose\",\n \"mspace\",\n // scripts & limits\n \"msub\",\n \"msup\",\n \"msubsup\",\n \"munder\",\n \"mover\",\n \"munderover\",\n \"mmultiscripts\",\n \"mprescripts\",\n // tables (matrices)\n \"mtable\",\n \"mtr\",\n \"mtd\",\n \"mlabeledtr\",\n];\n\nconst MATHML_ATTRIBUTES: Record<string, string[]> = {\n \"*\": [\"style\", \"className\", \"ariaHidden\", \"ariaLabel\"],\n span: [\"style\", \"className\"],\n math: [\"xmlns\", \"display\"],\n annotation: [\"encoding\"],\n \"annotation-xml\": [\"encoding\"],\n mfrac: [\"linethickness\"],\n mspace: [\"width\", \"height\", \"depth\"],\n mover: [\"accent\"],\n munder: [\"accentunder\"],\n mo: [\"fence\", \"form\", \"lspace\", \"rspace\", \"stretchy\", \"symmetric\"],\n};\n\nconst INLINE_RE = /\\$([^$\\n]+)\\$/g;\nconst BLOCK_RE = /\\$\\$([\\s\\S]+?)\\$\\$/g;\n\nexport function mathPlugin(opts: MathPluginOptions = {}): SlidePlugin {\n let peerDepMissing = false;\n\n return {\n name: \"math\",\n sanitizeSchemaExtension: {\n tagNames: MATHML_TAG_NAMES,\n attributes: MATHML_ATTRIBUTES,\n },\n async hastTransform(tree: HastRoot): Promise<HastRoot> {\n if (peerDepMissing) return tree;\n // EC-2: peer-dep guard. Throw on missing import — D16 absorbs into errors[].\n // biome-ignore lint/suspicious/noExplicitAny: katex default export untyped here\n let katex: any;\n // biome-ignore lint/suspicious/noExplicitAny: hast-util-from-html fromHtml untyped here\n let fromHtml: any;\n // biome-ignore lint/suspicious/noExplicitAny: unist-util-visit\n let visit: any;\n try {\n katex = (await import(\"katex\")).default;\n fromHtml = (await import(\"hast-util-from-html\")).fromHtml;\n visit = (await import(\"unist-util-visit\")).visit;\n } catch (e) {\n peerDepMissing = true;\n throw new Error(\n `[slide/plugins/math] peer-deps missing (katex / hast-util-from-html). Run: pnpm add katex hast-util-from-html. Math formulas remain as plain text. Error: ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n // Walk text nodes, find $..$ and $$..$$ patterns, replace with rendered HTML.\n visit(\n tree,\n \"text\",\n (\n node: { value: string },\n idx: number | undefined,\n parent: { children: unknown[]; tagName?: string } | undefined,\n ) => {\n if (!parent || idx === undefined) return;\n // Skip if the text is inside a code / pre block — math shouldn't\n // accidentally trigger on `$amount = 100$` inside a code sample.\n if (parent.tagName === \"code\" || parent.tagName === \"pre\") return;\n const value = node.value;\n const replacements: Array<{\n start: number;\n end: number;\n html: string;\n }> = [];\n // Block math first ($$..$$) so we can mask its ranges before inline scan.\n for (const m of value.matchAll(BLOCK_RE)) {\n if (m.index === undefined) continue;\n try {\n replacements.push({\n start: m.index,\n end: m.index + m[0].length,\n html: katex.renderToString(m[1], {\n ...(opts.katexOptions ?? {}),\n displayMode: true,\n throwOnError: false,\n }),\n });\n } catch {\n // Malformed TeX — KaTeX may throw with throwOnError:true. Skip.\n }\n }\n for (const m of value.matchAll(INLINE_RE)) {\n if (m.index === undefined) continue;\n // Avoid re-processing inline matches that fall inside a block range.\n if (replacements.some((r) => (m.index ?? 0) >= r.start && (m.index ?? 0) < r.end))\n continue;\n try {\n replacements.push({\n start: m.index,\n end: m.index + m[0].length,\n html: katex.renderToString(m[1], {\n ...(opts.katexOptions ?? {}),\n displayMode: false,\n throwOnError: false,\n }),\n });\n } catch {\n // skip\n }\n }\n if (replacements.length === 0) return;\n replacements.sort((a, b) => a.start - b.start);\n const newChildren: unknown[] = [];\n let cursor = 0;\n for (const r of replacements) {\n if (r.start > cursor) {\n newChildren.push({ type: \"text\", value: value.slice(cursor, r.start) });\n }\n const fragment = fromHtml(r.html, { fragment: true });\n newChildren.push(...fragment.children);\n cursor = r.end;\n }\n if (cursor < value.length) {\n newChildren.push({ type: \"text\", value: value.slice(cursor) });\n }\n parent.children.splice(idx, 1, ...newChildren);\n return idx + newChildren.length;\n },\n );\n return tree;\n },\n };\n}\n"]}