@zaly/tui 0.0.12 → 0.1.1

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 (330) hide show
  1. package/assets/schemas/shiki-language.schema.json +352 -0
  2. package/assets/schemas/shiki-theme.schema.json +71 -0
  3. package/assets/schemas/theme.schema.json +226 -1046
  4. package/assets/themes/andromeeda.json +97 -0
  5. package/assets/themes/ayu-dark.json +31 -25
  6. package/assets/themes/ayu-light.json +106 -0
  7. package/assets/themes/ayu-mirage.json +106 -0
  8. package/assets/themes/catppuccin-frappe.json +43 -40
  9. package/assets/themes/catppuccin-latte.json +43 -40
  10. package/assets/themes/catppuccin-macchiato.json +43 -40
  11. package/assets/themes/catppuccin-mocha.json +43 -40
  12. package/assets/themes/dark-plus.json +99 -0
  13. package/assets/themes/dracula.json +47 -47
  14. package/assets/themes/everforest-dark.json +28 -26
  15. package/assets/themes/everforest-light.json +28 -26
  16. package/assets/themes/github-dark-default.json +107 -0
  17. package/assets/themes/github-dark-dimmed.json +107 -0
  18. package/assets/themes/github-light-default.json +107 -0
  19. package/assets/themes/gruvbox-dark-hard.json +98 -0
  20. package/assets/themes/gruvbox-dark-medium.json +34 -29
  21. package/assets/themes/gruvbox-light-medium.json +98 -0
  22. package/assets/themes/horizon-bright.json +101 -0
  23. package/assets/themes/horizon.json +101 -0
  24. package/assets/themes/iterm2/LICENSE +25 -0
  25. package/assets/themes/iterm2/README.md +28 -0
  26. package/assets/themes/iterm2/catppuccin-latte.json +140 -0
  27. package/assets/themes/iterm2/catppuccin-mocha.json +140 -0
  28. package/assets/themes/iterm2/github-dark.json +140 -0
  29. package/assets/themes/iterm2/github.json +140 -0
  30. package/assets/themes/iterm2/gruvbox-dark.json +140 -0
  31. package/assets/themes/iterm2/gruvbox-light.json +140 -0
  32. package/assets/themes/iterm2/nord.json +140 -0
  33. package/assets/themes/iterm2/tokyonight-day.json +140 -0
  34. package/assets/themes/iterm2/tokyonight-moon.json +140 -0
  35. package/assets/themes/kanagawa-dragon.json +55 -49
  36. package/assets/themes/kanagawa-lotus.json +105 -0
  37. package/assets/themes/kanagawa-wave.json +56 -50
  38. package/assets/themes/light-plus.json +99 -0
  39. package/assets/themes/material-theme-lighter.json +102 -0
  40. package/assets/themes/material-theme-palenight.json +52 -45
  41. package/assets/themes/material-theme.json +102 -0
  42. package/assets/themes/min-dark.json +69 -14
  43. package/assets/themes/min-light.json +68 -17
  44. package/assets/themes/monokai.json +54 -47
  45. package/assets/themes/night-owl-light.json +105 -0
  46. package/assets/themes/night-owl.json +57 -49
  47. package/assets/themes/nord.json +53 -39
  48. package/assets/themes/one-dark-pro.json +46 -38
  49. package/assets/themes/one-light.json +52 -41
  50. package/assets/themes/poimandres.json +51 -49
  51. package/assets/themes/rose-pine-dawn.json +99 -0
  52. package/assets/themes/rose-pine-moon.json +99 -0
  53. package/assets/themes/rose-pine.json +50 -33
  54. package/assets/themes/solarized-dark.json +38 -31
  55. package/assets/themes/solarized-light.json +40 -33
  56. package/assets/themes/synthwave-84.json +47 -30
  57. package/assets/themes/tokyonight-day.json +3 -3
  58. package/assets/themes/tokyonight-moon.json +3 -2
  59. package/assets/themes/tokyonight-night.json +3 -2
  60. package/assets/themes/tokyonight-storm.json +3 -2
  61. package/assets/themes/vesper.json +50 -42
  62. package/assets/themes/vitesse-black.json +103 -0
  63. package/assets/themes/vitesse-dark.json +26 -30
  64. package/assets/themes/vitesse-light.json +26 -30
  65. package/dist/{actions-DEIKF2ts.mjs → actions-AY6avfEV.mjs} +2 -3
  66. package/dist/{actions-DEIKF2ts.mjs.map → actions-AY6avfEV.mjs.map} +1 -1
  67. package/dist/{actions-Dc4D4uSf.d.mts → actions-B0yyZ-Ww.d.mts} +4 -6
  68. package/dist/actions-B0yyZ-Ww.d.mts.map +1 -0
  69. package/dist/{ansi-DZlXaItJ.mjs → ansi-CxgRPLA2.mjs} +4 -33
  70. package/dist/ansi-CxgRPLA2.mjs.map +1 -0
  71. package/dist/ansi.d.mts +1 -3
  72. package/dist/ansi.d.mts.map +1 -1
  73. package/dist/ansi.mjs +1 -1
  74. package/dist/{autocomplete-StW1QJZJ.d.mts → autocomplete-wgceuhLr.d.mts} +5 -7
  75. package/dist/autocomplete-wgceuhLr.d.mts.map +1 -0
  76. package/dist/{box-BkP4MF82.mjs → box-DToDoXlU.mjs} +8 -10
  77. package/dist/{box-BkP4MF82.mjs.map → box-DToDoXlU.mjs.map} +1 -1
  78. package/dist/builder-BdYlK1Ew.mjs +195 -0
  79. package/dist/builder-BdYlK1Ew.mjs.map +1 -0
  80. package/dist/{callbacks-BwWTCqPJ.mjs → callbacks-DW8XKYKy.mjs} +9 -13
  81. package/dist/{callbacks-BwWTCqPJ.mjs.map → callbacks-DW8XKYKy.mjs.map} +1 -1
  82. package/dist/{client-C2GXKfJ1.mjs → client-BWm6dNZF.mjs} +9 -6
  83. package/dist/client-BWm6dNZF.mjs.map +1 -0
  84. package/dist/client-C69qWhMG.mjs +1 -0
  85. package/dist/{clipboard-CNPBTX7j.mjs → clipboard-UEoX9sup.mjs} +2 -3
  86. package/dist/{clipboard-CNPBTX7j.mjs.map → clipboard-UEoX9sup.mjs.map} +1 -1
  87. package/dist/clipboard.d.mts +0 -2
  88. package/dist/clipboard.d.mts.map +1 -1
  89. package/dist/clipboard.mjs +1 -1
  90. package/dist/color-Cr1VoL49.mjs +36 -0
  91. package/dist/color-Cr1VoL49.mjs.map +1 -0
  92. package/dist/ctx-CYEzzH-7.mjs +1 -0
  93. package/dist/{ctx-B7BmPUCD.mjs → ctx-DBeFcZt6.mjs} +4 -5
  94. package/dist/{ctx-B7BmPUCD.mjs.map → ctx-DBeFcZt6.mjs.map} +1 -1
  95. package/dist/{divider-TSx9NhI_.mjs → divider-qEj5prKE.mjs} +3 -4
  96. package/dist/{divider-TSx9NhI_.mjs.map → divider-qEj5prKE.mjs.map} +1 -1
  97. package/dist/{files-BvThQpOf.mjs → files-C3ZnFpvq.mjs} +3 -4
  98. package/dist/{files-BvThQpOf.mjs.map → files-C3ZnFpvq.mjs.map} +1 -1
  99. package/dist/{files-7DUYSeNc.d.mts → files-CdiDnwA_.d.mts} +3 -5
  100. package/dist/files-CdiDnwA_.d.mts.map +1 -0
  101. package/dist/{flex-Bguo-fUe.mjs → flex-CYp4etqn.mjs} +3 -4
  102. package/dist/{flex-Bguo-fUe.mjs.map → flex-CYp4etqn.mjs.map} +1 -1
  103. package/dist/{github-Cy2hfWJ7.mjs → github-CLveT9mq.mjs} +2 -3
  104. package/dist/{github-Cy2hfWJ7.mjs.map → github-CLveT9mq.mjs.map} +1 -1
  105. package/dist/{github-C1KfXk98.d.mts → github-DC0XemKa.d.mts} +3 -5
  106. package/dist/github-DC0XemKa.d.mts.map +1 -0
  107. package/dist/{image-VaT7AN-S.d.mts → image-DdRDv7q6.d.mts} +2 -4
  108. package/dist/image-DdRDv7q6.d.mts.map +1 -0
  109. package/dist/image-M--Bw4bs.mjs +177 -0
  110. package/dist/image-M--Bw4bs.mjs.map +1 -0
  111. package/dist/image.d.mts +1 -3
  112. package/dist/image.d.mts.map +1 -1
  113. package/dist/image.mjs +1 -1
  114. package/dist/index.d.mts +11 -14
  115. package/dist/index.d.mts.map +1 -1
  116. package/dist/index.mjs +12 -14
  117. package/dist/index.mjs.map +1 -1
  118. package/dist/{input-BGTTujDN.mjs → input-BkE4EpBw.mjs} +6 -7
  119. package/dist/{input-BGTTujDN.mjs.map → input-BkE4EpBw.mjs.map} +1 -1
  120. package/dist/{input-BAYux7qo.d.mts → input-C3kfYoEJ.d.mts} +3 -5
  121. package/dist/input-C3kfYoEJ.d.mts.map +1 -0
  122. package/dist/{inspect-jG_W4njH.mjs → inspect-Cli1beu8.mjs} +3 -4
  123. package/dist/{inspect-jG_W4njH.mjs.map → inspect-Cli1beu8.mjs.map} +1 -1
  124. package/dist/{inspect-CfNydMgO.d.mts → inspect-hSl3U2BD.d.mts} +2 -6
  125. package/dist/inspect-hSl3U2BD.d.mts.map +1 -0
  126. package/dist/kitty-0sJ8axU_.mjs +1 -0
  127. package/dist/{kitty-JbCJC0iQ.mjs → kitty-BH_eK6lz.mjs} +2 -3
  128. package/dist/{kitty-JbCJC0iQ.mjs.map → kitty-BH_eK6lz.mjs.map} +1 -1
  129. package/dist/{log-ByKlM4iI.mjs → log-96b1_J6G.mjs} +6 -7
  130. package/dist/{log-ByKlM4iI.mjs.map → log-96b1_J6G.mjs.map} +1 -1
  131. package/dist/{logger-DSQb0sLP.mjs → logger-DwfXp8LF.mjs} +5 -6
  132. package/dist/{logger-DSQb0sLP.mjs.map → logger-DwfXp8LF.mjs.map} +1 -1
  133. package/dist/{markdown-CwRmWuU6.mjs → markdown-CgRZBhIX.mjs} +12 -12
  134. package/dist/markdown-CgRZBhIX.mjs.map +1 -0
  135. package/dist/markdown.d.mts +2 -4
  136. package/dist/markdown.d.mts.map +1 -1
  137. package/dist/markdown.mjs +1 -1
  138. package/dist/math-Dk8hxbmz.mjs +1 -0
  139. package/dist/math-VPuwFCid.mjs +205 -0
  140. package/dist/math-VPuwFCid.mjs.map +1 -0
  141. package/dist/md.bun.d.mts +1 -3
  142. package/dist/md.bun.d.mts.map +1 -1
  143. package/dist/md.bun.mjs +2 -3
  144. package/dist/md.node.d.mts +1 -3
  145. package/dist/md.node.d.mts.map +1 -1
  146. package/dist/md.node.mjs +2 -3
  147. package/dist/{node-BZ7f6HzU.mjs → node-CXNobGaP.mjs} +3 -4
  148. package/dist/{node-BZ7f6HzU.mjs.map → node-CXNobGaP.mjs.map} +1 -1
  149. package/dist/oklch-Boh4YHEc.mjs +98 -0
  150. package/dist/oklch-Boh4YHEc.mjs.map +1 -0
  151. package/dist/{overlay-BnvOKtGT.mjs → overlay-CevDWgSF.mjs} +3 -4
  152. package/dist/{overlay-BnvOKtGT.mjs.map → overlay-CevDWgSF.mjs.map} +1 -1
  153. package/dist/{picker-Dh5IUrTk.mjs → picker-D9WrE3zF.mjs} +11 -16
  154. package/dist/{picker-Dh5IUrTk.mjs.map → picker-D9WrE3zF.mjs.map} +1 -1
  155. package/dist/{picker-DQs_IW77.d.mts → picker-DsB6--GN.d.mts} +6 -8
  156. package/dist/picker-DsB6--GN.d.mts.map +1 -0
  157. package/dist/{queries-B_lOwEiE.mjs → queries-BIniKnLL.mjs} +68 -7
  158. package/dist/queries-BIniKnLL.mjs.map +1 -0
  159. package/dist/{queries-BDX8mcl5.d.mts → queries-Dmd3IjSd.d.mts} +19 -52
  160. package/dist/queries-Dmd3IjSd.d.mts.map +1 -0
  161. package/dist/{reactive-f7NpAi69.mjs → reactive-DkP75TPk.mjs} +2 -3
  162. package/dist/{reactive-f7NpAi69.mjs.map → reactive-DkP75TPk.mjs.map} +1 -1
  163. package/dist/{registry-D-suU3g0.mjs → registry-CQU0VwpM.mjs} +205 -65
  164. package/dist/registry-CQU0VwpM.mjs.map +1 -0
  165. package/dist/{render-DEIUNLkh.mjs → render-Bp2N2i6J.mjs} +4 -5
  166. package/dist/{render-DEIUNLkh.mjs.map → render-Bp2N2i6J.mjs.map} +1 -1
  167. package/dist/{renderer-zDNlAovy.mjs → renderer-B9sAMA10.mjs} +123 -40
  168. package/dist/renderer-B9sAMA10.mjs.map +1 -0
  169. package/dist/{renderer-MQue4Da5.mjs → renderer-BYl2pbdx.mjs} +9 -9
  170. package/dist/renderer-BYl2pbdx.mjs.map +1 -0
  171. package/dist/renderer-Ctz0hv5o.mjs +1 -0
  172. package/dist/{search-FvGnswRl.d.mts → search-DsHzamic.d.mts} +1 -9
  173. package/dist/search-DsHzamic.d.mts.map +1 -0
  174. package/dist/{select-J2KtwxyK.d.mts → select-BZCFXdjp.d.mts} +3 -5
  175. package/dist/select-BZCFXdjp.d.mts.map +1 -0
  176. package/dist/{select-m7NE6Rwa.mjs → select-CUmAFKJh.mjs} +5 -6
  177. package/dist/{select-m7NE6Rwa.mjs.map → select-CUmAFKJh.mjs.map} +1 -1
  178. package/dist/services/logger.d.mts +1 -1
  179. package/dist/services/logger.mjs +1 -1
  180. package/dist/services/notifier.d.mts +1 -3
  181. package/dist/services/notifier.d.mts.map +1 -1
  182. package/dist/services/notifier.mjs +3 -4
  183. package/dist/services/picker.d.mts +5 -7
  184. package/dist/services/picker.d.mts.map +1 -1
  185. package/dist/services/picker.mjs +8 -9
  186. package/dist/services/prompt.d.mts +4 -6
  187. package/dist/services/prompt.d.mts.map +1 -1
  188. package/dist/services/prompt.mjs +7 -8
  189. package/dist/shiki/server.mjs +40 -19
  190. package/dist/shiki/server.mjs.map +1 -1
  191. package/dist/shiki-BAf9PdIc.mjs +19 -0
  192. package/dist/shiki-BAf9PdIc.mjs.map +1 -0
  193. package/dist/shiki-DUUAIE6f.mjs +632 -0
  194. package/dist/shiki-DUUAIE6f.mjs.map +1 -0
  195. package/dist/{show-DR2x1YFc.mjs → show-D5XNXgZf.mjs} +4 -5
  196. package/dist/{show-DR2x1YFc.mjs.map → show-D5XNXgZf.mjs.map} +1 -1
  197. package/dist/{size-D8JogYLy.mjs → size-BHRJuRk9.mjs} +2 -3
  198. package/dist/{size-D8JogYLy.mjs.map → size-BHRJuRk9.mjs.map} +1 -1
  199. package/dist/style-Cw_EuszU.mjs +108 -0
  200. package/dist/style-Cw_EuszU.mjs.map +1 -0
  201. package/dist/style.d.mts +4 -5
  202. package/dist/style.d.mts.map +1 -1
  203. package/dist/style.mjs +4 -4
  204. package/dist/{text-CkQ7Irmt.mjs → text-4arC3odI.mjs} +3 -4
  205. package/dist/{text-CkQ7Irmt.mjs.map → text-4arC3odI.mjs.map} +1 -1
  206. package/dist/{text-XvPfweeg.mjs → text-BArwVVkg.mjs} +5 -6
  207. package/dist/{text-XvPfweeg.mjs.map → text-BArwVVkg.mjs.map} +1 -1
  208. package/dist/{text-CCYs9RB2.d.mts → text-DdkJXgoC.d.mts} +3 -5
  209. package/dist/text-DdkJXgoC.d.mts.map +1 -0
  210. package/dist/text.d.mts +1 -1
  211. package/dist/text.mjs +1 -1
  212. package/dist/theme-B8hb1lPU.mjs +60 -0
  213. package/dist/theme-B8hb1lPU.mjs.map +1 -0
  214. package/dist/theme-BeSaXGNY.mjs +1792 -0
  215. package/dist/theme-BeSaXGNY.mjs.map +1 -0
  216. package/dist/themes.d.mts +211 -77
  217. package/dist/themes.d.mts.map +1 -1
  218. package/dist/themes.mjs +1 -1
  219. package/dist/{tree-DJl5W_B7.d.mts → tree-Berzv8Rz.d.mts} +3 -5
  220. package/dist/tree-Berzv8Rz.d.mts.map +1 -0
  221. package/dist/{tree-Bo1afYhe.mjs → tree-D6NvMQx8.mjs} +5 -6
  222. package/dist/{tree-Bo1afYhe.mjs.map → tree-D6NvMQx8.mjs.map} +1 -1
  223. package/dist/{types-D2EYlzmK.d.mts → types-ByMHEdCF.d.mts} +133 -131
  224. package/dist/types-ByMHEdCF.d.mts.map +1 -0
  225. package/dist/{types-D3jk1rtk.d.mts → types-CUVUJPz6.d.mts} +1 -3
  226. package/dist/types-CUVUJPz6.d.mts.map +1 -0
  227. package/dist/{utils-3M4D_AXZ.mjs → utils-DHXAegVW.mjs} +1 -2
  228. package/dist/{utils-3M4D_AXZ.mjs.map → utils-DHXAegVW.mjs.map} +1 -1
  229. package/dist/{widget-BkMwhY2p.mjs → widget-sFveyrZE.mjs} +3 -4
  230. package/dist/{widget-BkMwhY2p.mjs.map → widget-sFveyrZE.mjs.map} +1 -1
  231. package/dist/{widget-DPqBbB57.d.mts → widget-sPJaKVU2.d.mts} +2 -4
  232. package/dist/widget-sPJaKVU2.d.mts.map +1 -0
  233. package/dist/widgets/autocomplete.d.mts +1 -1
  234. package/dist/widgets/autocomplete.mjs +5 -6
  235. package/dist/widgets/box.d.mts +1 -1
  236. package/dist/widgets/box.mjs +1 -1
  237. package/dist/widgets/code.d.mts +4 -4
  238. package/dist/widgets/code.d.mts.map +1 -1
  239. package/dist/widgets/code.mjs +12 -12
  240. package/dist/widgets/code.mjs.map +1 -1
  241. package/dist/widgets/completions/actions.d.mts +1 -1
  242. package/dist/widgets/completions/actions.mjs +1 -1
  243. package/dist/widgets/completions/files.d.mts +1 -1
  244. package/dist/widgets/completions/files.mjs +1 -1
  245. package/dist/widgets/completions/github.d.mts +1 -1
  246. package/dist/widgets/completions/github.mjs +1 -1
  247. package/dist/widgets/completions/index.d.mts +3 -3
  248. package/dist/widgets/completions/index.mjs +3 -3
  249. package/dist/widgets/diff.d.mts +2 -4
  250. package/dist/widgets/diff.d.mts.map +1 -1
  251. package/dist/widgets/diff.mjs +38 -16
  252. package/dist/widgets/diff.mjs.map +1 -1
  253. package/dist/widgets/divider.d.mts +2 -4
  254. package/dist/widgets/divider.d.mts.map +1 -1
  255. package/dist/widgets/divider.mjs +1 -1
  256. package/dist/widgets/image.d.mts +1 -1
  257. package/dist/widgets/image.mjs +8 -9
  258. package/dist/widgets/image.mjs.map +1 -1
  259. package/dist/widgets/input.d.mts +1 -1
  260. package/dist/widgets/input.mjs +1 -1
  261. package/dist/widgets/log.d.mts +1 -1
  262. package/dist/widgets/log.mjs +1 -1
  263. package/dist/widgets/markdown.d.mts +5 -7
  264. package/dist/widgets/markdown.d.mts.map +1 -1
  265. package/dist/widgets/markdown.mjs +1 -1
  266. package/dist/widgets/overlay.d.mts +1 -1
  267. package/dist/widgets/overlay.mjs +1 -1
  268. package/dist/widgets/picker.d.mts +1 -1
  269. package/dist/widgets/picker.mjs +1 -1
  270. package/dist/widgets/progress.d.mts +2 -4
  271. package/dist/widgets/progress.d.mts.map +1 -1
  272. package/dist/widgets/progress.mjs +4 -5
  273. package/dist/widgets/select.d.mts +1 -1
  274. package/dist/widgets/select.mjs +1 -1
  275. package/dist/widgets/show.d.mts +1 -3
  276. package/dist/widgets/show.d.mts.map +1 -1
  277. package/dist/widgets/show.mjs +1 -1
  278. package/dist/widgets/spinner.d.mts +2 -4
  279. package/dist/widgets/spinner.d.mts.map +1 -1
  280. package/dist/widgets/spinner.mjs +3 -4
  281. package/dist/widgets/text.d.mts +1 -1
  282. package/dist/widgets/text.mjs +1 -1
  283. package/dist/widgets/tree.d.mts +1 -1
  284. package/dist/widgets/tree.mjs +1 -1
  285. package/dist/widgets/widget.d.mts +1 -1
  286. package/dist/widgets/widget.mjs +1 -1
  287. package/dist/{worker-T6SdPzUH.mjs → worker-CtEowucz.mjs} +2 -3
  288. package/dist/{worker-T6SdPzUH.mjs.map → worker-CtEowucz.mjs.map} +1 -1
  289. package/dist/worker-Mqi380Et.mjs +1 -0
  290. package/package.json +5 -7
  291. package/assets/themes/dracula-soft.json +0 -100
  292. package/assets/themes/github-dark.json +0 -104
  293. package/assets/themes/github-light.json +0 -104
  294. package/dist/actions-Dc4D4uSf.d.mts.map +0 -1
  295. package/dist/ansi-DZlXaItJ.mjs.map +0 -1
  296. package/dist/autocomplete-StW1QJZJ.d.mts.map +0 -1
  297. package/dist/builder-1z5ewEWK.mjs +0 -386
  298. package/dist/builder-1z5ewEWK.mjs.map +0 -1
  299. package/dist/client-C2GXKfJ1.mjs.map +0 -1
  300. package/dist/client-bzdHIDL2.mjs +0 -1
  301. package/dist/ctx-D_JgJ8Eo.mjs +0 -1
  302. package/dist/files-7DUYSeNc.d.mts.map +0 -1
  303. package/dist/github-C1KfXk98.d.mts.map +0 -1
  304. package/dist/image-Cm5T-uw-.mjs +0 -108
  305. package/dist/image-Cm5T-uw-.mjs.map +0 -1
  306. package/dist/image-VaT7AN-S.d.mts.map +0 -1
  307. package/dist/input-BAYux7qo.d.mts.map +0 -1
  308. package/dist/inspect-CfNydMgO.d.mts.map +0 -1
  309. package/dist/markdown-CwRmWuU6.mjs.map +0 -1
  310. package/dist/picker-DQs_IW77.d.mts.map +0 -1
  311. package/dist/queries-BDX8mcl5.d.mts.map +0 -1
  312. package/dist/queries-B_lOwEiE.mjs.map +0 -1
  313. package/dist/registry-D-suU3g0.mjs.map +0 -1
  314. package/dist/renderer-DhqbEVVR.mjs +0 -1
  315. package/dist/renderer-MQue4Da5.mjs.map +0 -1
  316. package/dist/renderer-zDNlAovy.mjs.map +0 -1
  317. package/dist/search-FvGnswRl.d.mts.map +0 -1
  318. package/dist/select-J2KtwxyK.d.mts.map +0 -1
  319. package/dist/shiki--ASSYv4_.mjs +0 -12
  320. package/dist/shiki--ASSYv4_.mjs.map +0 -1
  321. package/dist/shiki-D7l5--zz.mjs +0 -432
  322. package/dist/shiki-D7l5--zz.mjs.map +0 -1
  323. package/dist/text-CCYs9RB2.d.mts.map +0 -1
  324. package/dist/theme.config-B3Yx--C2.mjs +0 -855
  325. package/dist/theme.config-B3Yx--C2.mjs.map +0 -1
  326. package/dist/tree-DJl5W_B7.d.mts.map +0 -1
  327. package/dist/types-D2EYlzmK.d.mts.map +0 -1
  328. package/dist/types-D3jk1rtk.d.mts.map +0 -1
  329. package/dist/widget-DPqBbB57.d.mts.map +0 -1
  330. package/dist/worker-C01jK2Ip.mjs +0 -1
@@ -1,386 +0,0 @@
1
- import { t as defaultTheme } from "./registry-D-suU3g0.mjs";
2
- import { d as parseHex, f as toHex, o as openAnsi, s as reapplyStyle, t as RESET, u as isHexColor } from "./ansi-DZlXaItJ.mjs";
3
- import { clamp } from "@zaly/shared";
4
- //#region src/style/oklch.ts
5
- const cache = /* @__PURE__ */ new Map();
6
- function srgbToLinear(c) {
7
- return c <= .04045 ? c / 12.92 : ((c + .055) / 1.055) ** 2.4;
8
- }
9
- function linearToSrgb(c) {
10
- return c <= .0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - .055;
11
- }
12
- function hexToOklch(hex) {
13
- const [r8, g8, b8] = parseHex(hex);
14
- const r = srgbToLinear(r8 / 255);
15
- const g = srgbToLinear(g8 / 255);
16
- const b = srgbToLinear(b8 / 255);
17
- const l = .4122214708 * r + .5363325363 * g + .0514459929 * b;
18
- const m = .2119034982 * r + .6806995451 * g + .1073969566 * b;
19
- const s = .0883024619 * r + .2817188376 * g + .6299787005 * b;
20
- const lp = Math.cbrt(l);
21
- const mp = Math.cbrt(m);
22
- const sp = Math.cbrt(s);
23
- const L = .2104542553 * lp + .793617785 * mp - .0040720468 * sp;
24
- const a = 1.9779984951 * lp - 2.428592205 * mp + .4505937099 * sp;
25
- const b2 = .0259040371 * lp + .7827717662 * mp - .808675766 * sp;
26
- return {
27
- C: Math.hypot(a, b2),
28
- L,
29
- h: (Math.atan2(b2, a) * 180 / Math.PI + 360) % 360
30
- };
31
- }
32
- /** Convert OKLCH → linear sRGB (unclamped — callers can test for gamut). */
33
- function oklchToLinearRgb({ L, C, h }) {
34
- const hr = h * Math.PI / 180;
35
- const a = C * Math.cos(hr);
36
- const b2 = C * Math.sin(hr);
37
- const lp = L + .3963377774 * a + .2158037573 * b2;
38
- const mp = L - .1055613458 * a - .0638541728 * b2;
39
- const sp = L - .0894841775 * a - 1.291485548 * b2;
40
- const l = lp ** 3;
41
- const m = mp ** 3;
42
- const s = sp ** 3;
43
- return [
44
- 4.0767416621 * l - 3.3077115913 * m + .2309699292 * s,
45
- -1.2684380046 * l + 2.6097574011 * m - .3413193965 * s,
46
- -.0041960863 * l - .7034186147 * m + 1.707614701 * s
47
- ];
48
- }
49
- function inGamut([r, g, b], eps = .001) {
50
- return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps;
51
- }
52
- /**
53
- * Convert OKLCH → hex, reducing chroma via binary search when the
54
- * straightforward conversion falls outside sRGB. The search keeps `L`
55
- * and `h` fixed and shrinks `C` toward the achromatic axis until the
56
- * color fits, which is the CSS Color Level 4-recommended behavior.
57
- */
58
- function oklchToHex(oklch) {
59
- let rgb = oklchToLinearRgb(oklch);
60
- if (!inGamut(rgb)) {
61
- let lo = 0;
62
- let hi = oklch.C;
63
- for (let i = 0; i < 24; i++) {
64
- const mid = (lo + hi) / 2;
65
- if (inGamut(oklchToLinearRgb({
66
- ...oklch,
67
- C: mid
68
- }))) lo = mid;
69
- else hi = mid;
70
- }
71
- rgb = oklchToLinearRgb({
72
- ...oklch,
73
- C: lo
74
- });
75
- }
76
- const [r, g, b] = rgb.map((c) => linearToSrgb(Math.max(0, Math.min(1, c))));
77
- return toHex(r * 255, g * 255, b * 255);
78
- }
79
- function shiftLightness(hex, delta) {
80
- const key = `${hex}:${delta}`;
81
- let ret = cache.get(key);
82
- if (ret) return ret;
83
- const okl = hexToOklch(hex);
84
- const L = clamp(okl.L + delta, 0, 1);
85
- const margin = Math.min(L, 1 - L);
86
- const C = okl.C * Math.min(1, margin / .1);
87
- cache.set(key, ret = oklchToHex({
88
- ...okl,
89
- C,
90
- L
91
- }));
92
- return ret;
93
- }
94
- //#endregion
95
- //#region src/style/style.ts
96
- /**
97
- * Build the opening SGR escape for a style descriptor. Returns '' if nothing
98
- * would be emitted. Unresolvable colors (invalid or 'inherit') are dropped.
99
- *
100
- * When `theme` is provided, `fg`/`bg` values matching a theme color slot
101
- * (e.g. `"primary"`, `"muted"`) are resolved against it first. The output
102
- * ordering is attrs → fg → bg, combined into a single `\x1b[...m` run.
103
- *
104
- * @internal
105
- */
106
- function openStyle(style, theme) {
107
- const resolver = ThemeResolver.from(theme);
108
- const ansiStyle = {
109
- ...style,
110
- bg: style.bg !== void 0 ? resolver.getColor(style.bg, "bg") : void 0,
111
- fg: style.fg !== void 0 ? resolver.getColor(style.fg, "fg") : void 0
112
- };
113
- return openAnsi(ansiStyle);
114
- }
115
- /**
116
- * Resolve a style-slot reference into a `Style` object. A ref is either a
117
- * theme slot name (string), an inline `Style`, or `undefined`:
118
- *
119
- * - Inline `Style` → returned as-is (no slot lookup).
120
- * - String ref pointing at a **Color** slot → wrapped as `{ fg: <color> }`.
121
- * - String ref pointing at a **Style** slot → returned directly.
122
- * - String ref that doesn't match a slot → treated as a fg color
123
- * (`{ fg: <ref> }`) and resolved downstream by `colorParams`.
124
- * - `undefined` → `{}` (emits nothing).
125
- *
126
- * @internal
127
- */
128
- function resolveStyle(ref, theme) {
129
- return ThemeResolver.from(theme).getStyle(ref);
130
- }
131
- function parseColor(c) {
132
- const m = c.match(/^(.+?)([+-]\d{1,3})$/);
133
- if (!m) return { base: c };
134
- let lightness = Number(m[2]);
135
- if (!Number.isFinite(lightness)) throw new TypeError(`Invalid color step in color "${c}": ${m[2]}`);
136
- lightness = Math.abs(lightness) < 1 ? lightness : lightness / 100;
137
- return {
138
- base: m[1],
139
- lightness
140
- };
141
- }
142
- var ThemeResolver = class ThemeResolver {
143
- static #cache = /* @__PURE__ */ new Map();
144
- static #main = new ThemeResolver();
145
- #theme;
146
- #styleCache = /* @__PURE__ */ new Map();
147
- #colorCache = /* @__PURE__ */ new Map();
148
- constructor(theme = {}) {
149
- this.#theme = theme;
150
- }
151
- static from(theme) {
152
- if (theme === void 0) return this.#main;
153
- let resolver = this.#cache.get(theme);
154
- if (!resolver) {
155
- resolver = new ThemeResolver(theme);
156
- this.#cache.set(theme, resolver);
157
- }
158
- return resolver;
159
- }
160
- getStyle(ref, seen) {
161
- if (ref === void 0) return {};
162
- if (typeof ref === "object") return ref.style ? {
163
- ...this.getStyle(ref.style, seen),
164
- ...ref
165
- } : ref;
166
- let ret = this.#styleCache.get(ref);
167
- if (ret) return ret;
168
- seen ??= /* @__PURE__ */ new Set();
169
- if (seen.has(ref)) throw new TypeError(`Circular dependency for theme slot "${ref}".`);
170
- seen.add(ref);
171
- const value = this.#theme[ref];
172
- ret = value === void 0 ? { fg: ref } : this.getStyle(value, seen);
173
- this.#styleCache.set(ref, ret);
174
- return ret;
175
- }
176
- getColor(ref, kind = "fg", seen) {
177
- if (ref === void 0) return "inherit";
178
- const key = `${kind}:${ref}`;
179
- let ret = this.#colorCache.get(key);
180
- if (ret) return ret;
181
- seen ??= /* @__PURE__ */ new Set();
182
- if (seen.has(ref)) throw new TypeError(`Circular dependency for theme slot "${ref}".`);
183
- seen.add(ref);
184
- const { base, lightness } = parseColor(ref);
185
- let value = this.#theme[base] ?? base;
186
- if (typeof value === "object") value = this.getColor(value[kind], kind, seen);
187
- else if (value !== base) value = this.getColor(value, kind, seen);
188
- ret = lightness !== void 0 && isHexColor(value) ? shiftLightness(value, lightness) : value;
189
- this.#colorCache.set(key, ret);
190
- return ret;
191
- }
192
- };
193
- //#endregion
194
- //#region src/style/builder.ts
195
- /**
196
- * Build styled strings via chainable property access.
197
- *
198
- * ```ts
199
- * style().red.bold("err") // → "\x1b[1;31merr\x1b[0m"
200
- * style().primary.bgAccent("x") // theme slots via the default theme
201
- * style(myTheme).primary("x") // override the bound theme
202
- * style().fg("#82aaff")("x") // hex via the escape hatch
203
- * style().primary[300]("x") // tonal variant of the last color
204
- * style().bgDiffAdd[200].fgDiffAdd("x") // per-channel variants on a Style slot
205
- * ```
206
- *
207
- * Each property access returns a fresh builder, so intermediates can be
208
- * reused and extended without mutation:
209
- *
210
- * ```ts
211
- * const err = style().red.bold
212
- * err("oops"); err.underline("fatal")
213
- * ```
214
- *
215
- * Calling an empty builder is a no-op: `styleBuilder()("x")` returns `"x"` unchanged.
216
- */
217
- function styleBuilder(theme = defaultTheme) {
218
- return build({
219
- current: {},
220
- last: void 0,
221
- theme: theme === false ? {
222
- ...defaultTheme,
223
- enabled: false
224
- } : theme
225
- });
226
- }
227
- const ATTRS = /* @__PURE__ */ new Set([
228
- "bold",
229
- "dim",
230
- "italic",
231
- "underline",
232
- "inverse",
233
- "strikethrough"
234
- ]);
235
- function applyStyle(state, text) {
236
- if (!text || state.theme.enabled === false) return text;
237
- const open = openStyle(state.current, state.theme);
238
- return open === "" ? text : open + reapplyStyle(text, open) + RESET;
239
- }
240
- function applyOp(fn, arg) {
241
- if (typeof arg === "string" || typeof arg === "number") {
242
- const key = String(arg);
243
- const hit = fn[key];
244
- if (hit !== void 0) return hit;
245
- const child = fulfill(fn.state, arg);
246
- Reflect.defineProperty(fn, key, {
247
- configurable: false,
248
- value: child,
249
- writable: false
250
- });
251
- return child;
252
- }
253
- return fulfill(fn.state, arg);
254
- }
255
- /** Turn a parked chain + its arg into the real child chain. */
256
- function fulfill(state, arg) {
257
- const { current, last, theme, pending } = state;
258
- switch (pending) {
259
- case "fg": return build({
260
- current: {
261
- ...current,
262
- fg: arg
263
- },
264
- last: "fg",
265
- theme
266
- });
267
- case "bg": return build({
268
- current: {
269
- ...current,
270
- bg: arg
271
- },
272
- last: "bg",
273
- theme
274
- });
275
- case "lighten":
276
- case "darken": {
277
- if (last === void 0) return build({
278
- current,
279
- last,
280
- theme
281
- });
282
- const existing = current[last];
283
- if (typeof existing !== "string" || existing === "inherit") return build({
284
- current,
285
- last,
286
- theme
287
- });
288
- const next = `${existing.replace(/[+-]\d+$/, "")}${pending === "lighten" ? "+" : "-"}${Math.abs(arg)}`;
289
- return build({
290
- current: {
291
- ...current,
292
- [last]: next
293
- },
294
- last,
295
- theme
296
- });
297
- }
298
- default: return build({
299
- current: {
300
- ...current,
301
- ...resolveStyle(arg, theme)
302
- },
303
- last,
304
- theme
305
- });
306
- }
307
- }
308
- /** Resolve a single property access on a chain to its child chain. */
309
- function compileKey(state, key) {
310
- const { current, last, theme } = state;
311
- if (key === "fg" || key === "bg" || key === "lighten" || key === "darken" || key === "add") return build({
312
- current,
313
- last,
314
- pending: key,
315
- theme
316
- });
317
- if (ATTRS.has(key)) return build({
318
- current: {
319
- ...current,
320
- [key]: true
321
- },
322
- last,
323
- theme
324
- });
325
- if (key.startsWith("bg") && key.length > 2 && key[2] === key[2].toUpperCase()) {
326
- const color = key[2].toLowerCase() + key.slice(3);
327
- return build({
328
- current: {
329
- ...current,
330
- bg: color
331
- },
332
- last: "bg",
333
- theme
334
- });
335
- }
336
- if (key.startsWith("fg") && key.length > 2 && key[2] === key[2].toUpperCase()) {
337
- const color = key[2].toLowerCase() + key.slice(3);
338
- return build({
339
- current: {
340
- ...current,
341
- fg: color
342
- },
343
- last: "fg",
344
- theme
345
- });
346
- }
347
- return build({
348
- current: {
349
- ...current,
350
- ...resolveStyle(key, theme)
351
- },
352
- last: "fg",
353
- theme
354
- });
355
- }
356
- /** Shared Proxy handler — one instance, used by every chain. Reads
357
- * state off the target (the `BuilderFn`), so chain construction
358
- * doesn't allocate a fresh handler object per `build()` call. */
359
- const proxyHandler = { get(target, key) {
360
- if (typeof key !== "string") return void 0;
361
- const cached = target[key];
362
- if (cached !== void 0) return cached;
363
- if (target.state.pending !== void 0) return void 0;
364
- const child = compileKey(target.state, key);
365
- if (child === void 0) return void 0;
366
- Reflect.defineProperty(target, key, {
367
- configurable: false,
368
- value: child,
369
- writable: false
370
- });
371
- return child;
372
- } };
373
- function build(state) {
374
- const fn = state.pending === void 0 ? function apply(text) {
375
- return applyStyle(state, text);
376
- } : function applyOpCall(arg) {
377
- return applyOp(fn, arg);
378
- };
379
- fn.state = state;
380
- fn.theme = state.theme;
381
- return new Proxy(fn, proxyHandler);
382
- }
383
- //#endregion
384
- export { openStyle as n, styleBuilder as t };
385
-
386
- //# sourceMappingURL=builder-1z5ewEWK.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder-1z5ewEWK.mjs","names":[],"sources":["../src/style/oklch.ts","../src/style/style.ts","../src/style/builder.ts"],"sourcesContent":["/**\n * OKLCH-based tonal scale generation for theme colors.\n *\n * Given a base hex color, `variant(hex, step)` returns a hex variant at\n * the Tailwind-v4-ish step (50..950). The base color's hue and chroma\n * are preserved; only lightness moves. When the resulting color falls\n * outside sRGB, chroma is reduced via binary search (CSS Color Level 4\n * \"MinDE chroma reduction\") until the color fits — that avoids the\n * saturation blowout you get from naive HSL lightening at the extremes.\n *\n * Matrix constants come from Björn Ottosson's reference OKLab spec:\n * https://bottosson.github.io/posts/oklab/\n */\n\nimport type { HexColor } from \"./types.ts\"\n\nimport { clamp } from \"@zaly/shared\"\nimport { parseHex, toHex } from \"./color.ts\"\n\nexport interface OKLCH {\n L: number\n C: number\n h: number\n}\n\nconst cache = new Map<string, HexColor>()\n\n// ---------- conversions ----------\n\nfunction srgbToLinear(c: number): number {\n return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n}\n\nexport function hexToOklch(hex: string): OKLCH {\n const [r8, g8, b8] = parseHex(hex)\n const r = srgbToLinear(r8 / 255)\n const g = srgbToLinear(g8 / 255)\n const b = srgbToLinear(b8 / 255)\n\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b\n const lp = Math.cbrt(l)\n const mp = Math.cbrt(m)\n const sp = Math.cbrt(s)\n const L = 0.2104542553 * lp + 0.793617785 * mp - 0.0040720468 * sp\n const a = 1.9779984951 * lp - 2.428592205 * mp + 0.4505937099 * sp\n const b2 = 0.0259040371 * lp + 0.7827717662 * mp - 0.808675766 * sp\n const C = Math.hypot(a, b2)\n const h = ((Math.atan2(b2, a) * 180) / Math.PI + 360) % 360\n return { C, L, h }\n}\n\n/** Convert OKLCH → linear sRGB (unclamped — callers can test for gamut). */\nfunction oklchToLinearRgb({ L, C, h }: OKLCH): [number, number, number] {\n const hr = (h * Math.PI) / 180\n const a = C * Math.cos(hr)\n const b2 = C * Math.sin(hr)\n const lp = L + 0.3963377774 * a + 0.2158037573 * b2\n const mp = L - 0.1055613458 * a - 0.0638541728 * b2\n const sp = L - 0.0894841775 * a - 1.291485548 * b2\n const l = lp ** 3\n const m = mp ** 3\n const s = sp ** 3\n const r = 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s\n const g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s\n const b = -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n return [r, g, b]\n}\n\nfunction inGamut([r, g, b]: [number, number, number], eps = 0.001): boolean {\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * Convert OKLCH → hex, reducing chroma via binary search when the\n * straightforward conversion falls outside sRGB. The search keeps `L`\n * and `h` fixed and shrinks `C` toward the achromatic axis until the\n * color fits, which is the CSS Color Level 4-recommended behavior.\n */\nexport function oklchToHex(oklch: OKLCH): HexColor {\n let rgb = oklchToLinearRgb(oklch)\n if (!inGamut(rgb)) {\n // Binary-search on C.\n let lo = 0\n let hi = oklch.C\n for (let i = 0; i < 24; i++) {\n const mid = (lo + hi) / 2\n if (inGamut(oklchToLinearRgb({ ...oklch, C: mid }))) lo = mid\n else hi = mid\n }\n rgb = oklchToLinearRgb({ ...oklch, C: lo })\n }\n const [r, g, b] = rgb.map((c) => linearToSrgb(Math.max(0, Math.min(1, c)))) as [\n number,\n number,\n number,\n ]\n return toHex(r * 255, g * 255, b * 255)\n}\n\nexport function shiftLightness(hex: HexColor, delta: number): HexColor {\n const key = `${hex}:${delta}`\n let ret = cache.get(key)\n if (ret) return ret\n\n const okl = hexToOklch(hex)\n const L = clamp(okl.L + delta, 0, 1)\n // Pull chroma toward 0 as L approaches an extreme. Keeps near-white\n // and near-black from going out of gamut.\n const margin = Math.min(L, 1 - L)\n const C = okl.C * Math.min(1, margin / 0.1)\n cache.set(key, (ret = oklchToHex({ ...okl, C, L })))\n return ret\n}\n","import type { Theme } from \"../themes/types.ts\"\nimport type { AnsiColor, AnsiStyle, Color, Style } from \"./types.ts\"\n\nimport { openAnsi } from \"./ansi.ts\"\nimport { isHexColor } from \"./color.ts\"\nimport { shiftLightness } from \"./oklch.ts\"\n\n/**\n * Build the opening SGR escape for a style descriptor. Returns '' if nothing\n * would be emitted. Unresolvable colors (invalid or 'inherit') are dropped.\n *\n * When `theme` is provided, `fg`/`bg` values matching a theme color slot\n * (e.g. `\"primary\"`, `\"muted\"`) are resolved against it first. The output\n * ordering is attrs → fg → bg, combined into a single `\\x1b[...m` run.\n *\n * @internal\n */\nexport function openStyle(style: Style, theme?: Theme): string {\n const resolver = ThemeResolver.from(theme)\n const ansiStyle: AnsiStyle = {\n ...style,\n bg: style.bg !== undefined ? resolver.getColor(style.bg, \"bg\") : undefined,\n fg: style.fg !== undefined ? resolver.getColor(style.fg, \"fg\") : undefined,\n }\n return openAnsi(ansiStyle)\n}\n\n/**\n * Resolve a style-slot reference into a `Style` object. A ref is either a\n * theme slot name (string), an inline `Style`, or `undefined`:\n *\n * - Inline `Style` → returned as-is (no slot lookup).\n * - String ref pointing at a **Color** slot → wrapped as `{ fg: <color> }`.\n * - String ref pointing at a **Style** slot → returned directly.\n * - String ref that doesn't match a slot → treated as a fg color\n * (`{ fg: <ref> }`) and resolved downstream by `colorParams`.\n * - `undefined` → `{}` (emits nothing).\n *\n * @internal\n */\nexport function resolveStyle(ref: string | Style | undefined, theme?: Theme): Style {\n return ThemeResolver.from(theme).getStyle(ref)\n}\n\nfunction parseColor(c: string): { base: string; lightness?: number } {\n const m = c.match(/^(.+?)([+-]\\d{1,3})$/)\n if (!m) return { base: c }\n let lightness = Number(m[2])\n if (!Number.isFinite(lightness))\n throw new TypeError(`Invalid color step in color \"${c}\": ${m[2]}`)\n lightness = Math.abs(lightness) < 1 ? lightness : lightness / 100\n return { base: m[1], lightness }\n}\n\nclass ThemeResolver {\n static #cache = new Map<Partial<Theme>, ThemeResolver>()\n static #main = new ThemeResolver()\n #theme: Partial<Theme>\n #styleCache = new Map<string, Style>()\n #colorCache = new Map<string, string>()\n\n private constructor(theme: Partial<Theme> = {}) {\n this.#theme = theme\n }\n\n static from(theme?: Theme): ThemeResolver {\n if (theme === undefined) return this.#main\n let resolver = this.#cache.get(theme)\n if (!resolver) {\n resolver = new ThemeResolver(theme)\n this.#cache.set(theme, resolver)\n }\n return resolver\n }\n\n getStyle(ref?: string | Style, seen?: Set<string>): Style {\n if (ref === undefined) return {}\n if (typeof ref === \"object\")\n return ref.style ? { ...this.getStyle(ref.style, seen), ...ref } : ref\n\n let ret = this.#styleCache.get(ref)\n if (ret) return ret\n\n seen ??= new Set<string>()\n if (seen.has(ref)) throw new TypeError(`Circular dependency for theme slot \"${ref}\".`)\n seen.add(ref)\n\n const value = this.#theme[ref as keyof Theme]\n ret = value === undefined ? { fg: ref as Color } : this.getStyle(value, seen)\n this.#styleCache.set(ref, ret)\n return ret\n }\n\n getColor(ref?: string, kind: \"fg\" | \"bg\" = \"fg\", seen?: Set<string>): AnsiColor {\n if (ref === undefined) return \"inherit\"\n\n const key = `${kind}:${ref}`\n let ret = this.#colorCache.get(key)\n if (ret) return ret as AnsiColor\n\n seen ??= new Set<string>()\n if (seen.has(ref)) throw new TypeError(`Circular dependency for theme slot \"${ref}\".`)\n seen.add(ref)\n\n const { base, lightness } = parseColor(ref)\n\n let value = this.#theme[base as keyof Theme] ?? base\n if (typeof value === \"object\") value = this.getColor(value[kind], kind, seen)\n else if (value !== base) value = this.getColor(value, kind, seen)\n ret = lightness !== undefined && isHexColor(value) ? shiftLightness(value, lightness) : value\n this.#colorCache.set(key, ret)\n return ret as AnsiColor\n }\n}\n","import type { Theme } from \"../themes/types.ts\"\nimport type {\n AnsiColorName,\n AnyStyle,\n BrightAnsiColorName,\n Color,\n Style,\n ThemeKey,\n} from \"./types.ts\"\n\nimport { defaultTheme } from \"../themes/registry.ts\"\nimport { reapplyStyle, RESET } from \"./ansi.ts\"\nimport { openStyle, resolveStyle } from \"./style.ts\"\n\ntype AttrName = \"bold\" | \"dim\" | \"italic\" | \"underline\" | \"inverse\" | \"strikethrough\"\n\n// Theme color slots that can chain as fg/bg. `fg`/`bg` become setter methods\n// below, so exclude them here to avoid naming collisions. `dim` is an attr on\n// the chain; users wanting theme-slot-dim for fg use `.fg(\"dim\")`.\ntype ChainSlot<Ansi extends boolean = true> =\n | Exclude<ThemeKey, \"fg\" | \"bg\" | AttrName>\n | (Ansi extends true ? AnsiColorName : never)\n | (Ansi extends true ? BrightAnsiColorName : never)\n\nexport type StyleBuilder<Ansi extends boolean = false> = {\n theme: Theme\n (text: string): string\n fg: (color: Color<Ansi>) => StyleBuilder<Ansi>\n bg: (color: Color<Ansi>) => StyleBuilder<Ansi>\n add: (slot?: ThemeKey | AnyStyle) => StyleBuilder<Ansi>\n lighten: (n: number) => StyleBuilder<Ansi>\n darken: (n: number) => StyleBuilder<Ansi>\n // oxlint-disable-next-line typescript/consistent-indexed-object-style -- mapped over a key union, not an open string index\n} & {\n readonly [\n K in\n | AttrName\n | ChainSlot<Ansi>\n | `bg${Capitalize<ChainSlot<Ansi>>}`\n | `fg${Capitalize<ChainSlot<Ansi>>}`\n ]: StyleBuilder<Ansi>\n}\n\n/**\n * Build styled strings via chainable property access.\n *\n * ```ts\n * style().red.bold(\"err\") // → \"\\x1b[1;31merr\\x1b[0m\"\n * style().primary.bgAccent(\"x\") // theme slots via the default theme\n * style(myTheme).primary(\"x\") // override the bound theme\n * style().fg(\"#82aaff\")(\"x\") // hex via the escape hatch\n * style().primary[300](\"x\") // tonal variant of the last color\n * style().bgDiffAdd[200].fgDiffAdd(\"x\") // per-channel variants on a Style slot\n * ```\n *\n * Each property access returns a fresh builder, so intermediates can be\n * reused and extended without mutation:\n *\n * ```ts\n * const err = style().red.bold\n * err(\"oops\"); err.underline(\"fatal\")\n * ```\n *\n * Calling an empty builder is a no-op: `styleBuilder()(\"x\")` returns `\"x\"` unchanged.\n */\nexport function styleBuilder<Ansi extends boolean = false>(\n theme: Theme | false = defaultTheme\n): StyleBuilder<Ansi> {\n return build({\n current: {},\n last: undefined,\n theme: theme === false ? { ...defaultTheme, enabled: false } : theme,\n }) as StyleBuilder<Ansi>\n}\n\nconst ATTRS = new Set<string>([\"bold\", \"dim\", \"italic\", \"underline\", \"inverse\", \"strikethrough\"])\n\n/** Pending \"arg-taking\" op on a chain. Set when the caller accesses\n * `.fg` / `.bg` / `.alpha` / `.add` — the chain is \"parked\" waiting\n * for its argument. Calling the parked chain consumes the arg and\n * produces the real child chain. */\ntype PendingOp = \"fg\" | \"bg\" | \"darken\" | \"add\" | \"lighten\"\n\n/** All the inputs a chain needs to behave correctly, gathered in one\n * object so we can pass it around cheaply instead of closing over\n * four separate vars. `current` is the accumulated Style, `last`\n * tracks which of `fg`/`bg` was most recently touched (for `[step]`\n * and `.alpha()`), `theme` is the resolved theme, `pending` is set\n * on parked arg-taking chains. */\ninterface BuilderState {\n current: Style\n last: \"fg\" | \"bg\" | undefined\n theme: Theme & { enabled?: boolean }\n pending?: PendingOp\n}\n\n/** The function wrapped by every chain's Proxy. Carries its own state\n * so module-level handlers can read it without closure gymnastics. */\ntype BuilderFn = {\n state: BuilderState\n theme: Theme\n} & (((text: string) => string) | ((arg: Color | number | Style | undefined) => StyleBuilder))\n\n// --- module-level handlers (shared across every chain) -----------------\n\nfunction applyStyle(state: BuilderState, text: string): string {\n if (!text || state.theme.enabled === false) return text\n const open = openStyle(state.current, state.theme)\n return open === \"\" ? text : open + reapplyStyle(text, open) + RESET\n}\n\nfunction applyOp(fn: BuilderFn, arg: Color | number | Style | undefined): StyleBuilder {\n // Cache primitive args on the call target itself via `defineProperty`\n // — repeated `.fg(\"#82aaff\")` hits the same child chain after the\n // first call, no rebuild. Object args (e.g. raw Style for `add`)\n // can't be property keys (`\"[object Object]\"` collision), so those\n // always rebuild.\n if (typeof arg === \"string\" || typeof arg === \"number\") {\n const key = String(arg)\n const hit = (fn as unknown as Record<string, unknown>)[key]\n if (hit !== undefined) return hit as StyleBuilder\n const child = fulfill(fn.state, arg)\n Reflect.defineProperty(fn, key, { configurable: false, value: child, writable: false })\n return child\n }\n return fulfill(fn.state, arg)\n}\n\n/** Turn a parked chain + its arg into the real child chain. */\nfunction fulfill(state: BuilderState, arg: unknown): StyleBuilder {\n const { current, last, theme, pending } = state\n switch (pending) {\n case \"fg\": {\n return build({ current: { ...current, fg: arg as Color }, last: \"fg\", theme })\n }\n case \"bg\": {\n return build({ current: { ...current, bg: arg as Color }, last: \"bg\", theme })\n }\n case \"lighten\":\n case \"darken\": {\n if (last === undefined) return build({ current, last, theme })\n const existing = current[last]\n if (typeof existing !== \"string\" || existing === \"inherit\") {\n return build({ current, last, theme })\n }\n const stripped = existing.replace(/[+-]\\d+$/, \"\")\n const n = Math.abs(arg as number)\n const next = `${stripped}${pending === \"lighten\" ? \"+\" : \"-\"}${n}` as Color\n return build({ current: { ...current, [last]: next }, last, theme })\n }\n default: {\n // \"add\" — no pending pending? defaults to rebuild with undef arg.\n return build({\n current: { ...current, ...resolveStyle(arg as string | Style | undefined, theme) },\n last,\n theme,\n })\n }\n }\n}\n\n/** Resolve a single property access on a chain to its child chain. */\nfunction compileKey(state: BuilderState, key: string): StyleBuilder | undefined {\n const { current, last, theme } = state\n\n // Arg-taking ops come back as chains parked in the `pending` state.\n if (key === \"fg\" || key === \"bg\" || key === \"lighten\" || key === \"darken\" || key === \"add\") {\n return build({ current, last, pending: key, theme })\n }\n\n if (ATTRS.has(key)) return build({ current: { ...current, [key]: true }, last, theme })\n\n // `bgFoo` / `fgFoo` → set the channel to the color at slot `foo`.\n // When the slot is a Style, `colorParams` extracts that channel.\n if (key.startsWith(\"bg\") && key.length > 2 && key[2] === key[2].toUpperCase()) {\n const color = (key[2].toLowerCase() + key.slice(3)) as Color\n return build({ current: { ...current, bg: color }, last: \"bg\", theme })\n }\n if (key.startsWith(\"fg\") && key.length > 2 && key[2] === key[2].toUpperCase()) {\n const color = (key[2].toLowerCase() + key.slice(3)) as Color\n return build({ current: { ...current, fg: color }, last: \"fg\", theme })\n }\n\n // Style-valued theme slot → merge its fields into the chain.\n // Anything else (ANSI color names, hex, unresolved slot refs) is\n // treated as a fg color by `colorParams` downstream.\n return build({ current: { ...current, ...resolveStyle(key, theme) }, last: \"fg\", theme })\n}\n\n/** Shared Proxy handler — one instance, used by every chain. Reads\n * state off the target (the `BuilderFn`), so chain construction\n * doesn't allocate a fresh handler object per `build()` call. */\nconst proxyHandler: ProxyHandler<BuilderFn> = {\n get(target, key) {\n if (typeof key !== \"string\") return undefined\n const cached = (target as unknown as Record<string, unknown>)[key]\n if (cached !== undefined) return cached\n // Parked chains can't be chained further — they're waiting for a call.\n if (target.state.pending !== undefined) return undefined\n const child = compileKey(target.state, key)\n if (child === undefined) return undefined\n Reflect.defineProperty(target, key, { configurable: false, value: child, writable: false })\n return child\n },\n}\n\nfunction build(state: BuilderState): StyleBuilder {\n // Two dedicated function shapes so V8 sees a stable signature on\n // each hot path — styling text vs. consuming an op arg are both\n // monomorphic after the build-time ternary.\n const fn = (\n state.pending === undefined\n ? function apply(text: string): string {\n return applyStyle(state, text)\n }\n : function applyOpCall(arg: Color | number | Style | undefined): StyleBuilder {\n return applyOp(fn, arg)\n }\n ) as BuilderFn\n fn.state = state\n fn.theme = state.theme\n return new Proxy(fn, proxyHandler) as unknown as StyleBuilder\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-C2GXKfJ1.mjs","names":[],"sources":["../src/shiki/client.ts"],"sourcesContent":["import type {\n ShikiJob,\n ShikiOpts,\n ShikiRequest,\n ShikiResult,\n ShikiWorkerMessage,\n ShikiWorkerRequest,\n} from \"./types.ts\"\nimport type { WorkerInstance } from \"./worker.ts\"\n\nimport { hash, toError } from \"@zaly/shared\"\nimport { hasColors } from \"@zaly/shared/env\"\nimport { isShikiLang } from \"../schemas/gen/shiki.ts\"\n\nfunction isJob(s: ShikiJob | ShikiResult): s is ShikiJob {\n return \"key\" in s && \"lang\" in s\n}\n\nconst MAX_CACHE_SIZE = 100\n// Max jobs posted to the worker. Worker still processes serially.\nconst MAX_RUNNING = 2\nconst REQUEST_TIMEOUT = 30_000\n\nexport class ShikiWorkerClient {\n #id = 0\n #cache = new Map<string, ShikiJob>()\n #queue = new Map<number, ShikiJob>()\n #running = new Map<number, ShikiJob>()\n #results: ShikiResult[] = []\n #timeouts = new Map<number, ReturnType<typeof setTimeout>>()\n #worker?: WorkerInstance<ShikiWorkerRequest, ShikiWorkerMessage>\n #workerPromise?: Promise<WorkerInstance<ShikiWorkerRequest, ShikiWorkerMessage>>\n #timeout: number\n #updateScheduled: Promise<void> | undefined = undefined\n #updatePending = false\n\n constructor(opts: { timeout?: number } = {}) {\n this.#timeout = opts.timeout ?? REQUEST_TIMEOUT\n }\n\n key(req: ShikiRequest): string {\n return req.key ?? hash(`${req.lang}:${req.code}:${req.theme ?? \"default\"}`)\n }\n\n toJob(req: ShikiRequest): ShikiJob | ShikiResult {\n const id = ++this.#id\n const key = this.key(req)\n if (!hasColors) return { error: \"terminal does not support colors\", id, key, value: req.code }\n if (!isShikiLang(req.lang))\n return { error: `unsupported language: ${req.lang}`, id, key, value: req.code }\n const cached = this.#cache.get(key)\n if (cached) {\n this.#cache.delete(key)\n this.#cache.set(key, cached) // bump to end of LRU\n return cached\n }\n while (this.#cache.size > MAX_CACHE_SIZE) this.#cache.delete(this.#cache.keys().next().value!)\n const ret: ShikiJob = { ...req, id, key, lang: req.lang, ...Promise.withResolvers() }\n this.#cache.set(key, ret)\n return ret\n }\n\n highlight(code: string, lang: string, opts: ShikiOpts = {}): Promise<ShikiResult> {\n const req: ShikiRequest = { code, lang, signal: opts.signal, theme: opts.theme }\n const job = this.toJob(req)\n if (!isJob(job)) return Promise.resolve(job)\n if (!job.scheduled) {\n this.#queue.set(job.id, job)\n job.signal?.addEventListener(\"abort\", () => this.update(), { once: true })\n this.update()\n }\n return job.promise\n }\n\n dispose(): void {\n const error = new Error(\"Shiki worker disposed\")\n this.#rejectAll(error)\n }\n\n async #request(job: ShikiJob): Promise<void> {\n job.scheduled = true\n this.#running.set(job.id, job)\n const worker = await this.#createWorker()\n const { signal: _s, promise: _prom, resolve: _res, reject: _rej, ...msg } = job\n const timeout = setTimeout(\n () =>\n this.#fail(\n new Error(`Shiki worker timed out after ${this.#timeout}ms (${job.lang}, ${job.key})`)\n ),\n this.#timeout\n )\n timeout.unref()\n this.#timeouts.set(job.id, timeout)\n // oxlint-disable-next-line unicorn/require-post-message-target-origin\n worker.postMessage(msg)\n }\n\n async #createWorker(): Promise<WorkerInstance<ShikiWorkerRequest, ShikiWorkerMessage>> {\n if (this.#worker) return this.#worker\n this.#workerPromise ??= (async () => {\n const { createWorker } = await import(\"./worker.ts\")\n const worker = await createWorker<ShikiWorkerRequest, ShikiWorkerMessage>()\n const ready = Promise.withResolvers<void>()\n let started = false\n const timeout = setTimeout(\n () => ready.reject(new Error(`Shiki worker did not start within ${this.#timeout}ms`)),\n this.#timeout\n )\n timeout.unref()\n worker.on(\"message\", (event) => {\n if (event.type === \"ready\") {\n started = true\n ready.resolve()\n return\n }\n this.#clearTimeout(event.id)\n this.#running.delete(event.id)\n this.#results.push(event)\n this.update()\n })\n worker.on(\"error\", (error) => {\n if (started) this.#fail(error)\n else ready.reject(error)\n })\n try {\n await ready.promise\n return worker\n } catch (error) {\n worker.terminate()\n throw error\n } finally {\n clearTimeout(timeout)\n }\n })()\n return (this.#worker = await this.#workerPromise)\n }\n\n update() {\n this.#updatePending = true\n if (this.#updateScheduled) return\n this.#updateScheduled = (async () => {\n while (this.#updatePending) {\n this.#updatePending = false\n // oxlint-disable-next-line no-await-in-loop\n await this.#update()\n }\n })()\n .catch((error) => this.#fail(error))\n .finally(() => {\n this.#updateScheduled = undefined\n if (this.#updatePending) this.update()\n })\n }\n\n async #update() {\n // Resolve pending results\n while (this.#results.length) {\n const result = this.#results.shift()!\n const job = this.#queue.get(result.id)\n if (job) {\n if (result.error) {\n const error = new Error(result.error)\n // oxlint-disable-next-line no-console\n console.error(\"Shiki highlighting failed:\", error)\n job.reject(error)\n } else job.resolve(result)\n\n // oxlint-disable-next-line no-await-in-loop\n await new Promise((resolve) => setImmediate(resolve)) // yield to event loop between batches\n this.#queue.delete(job.id)\n }\n }\n\n // Clean up aborted jobs\n for (const job of this.#queue.values()) {\n if (job.signal?.aborted && !job.scheduled) {\n job.reject(new Error(\"Job aborted\"))\n this.#queue.delete(job.id)\n this.#cache.delete(job.key)\n }\n }\n\n if (this.#running.size >= MAX_RUNNING || this.#queue.size === 0) return\n\n // Schedule new jobs up to concurrency limit, prioritizing the most recently requested ones (LIFO)\n const todo = [...this.#queue.values()]\n .filter((j) => !j.scheduled)\n .slice(-(MAX_RUNNING - this.#running.size))\n await Promise.all(todo.map((j) => this.#request(j)))\n }\n\n #clearTimeout(id: number): void {\n const timeout = this.#timeouts.get(id)\n if (timeout) clearTimeout(timeout)\n this.#timeouts.delete(id)\n }\n\n #fail(error: unknown): void {\n error = toError(error)\n // oxlint-disable-next-line no-console\n console.error(\"Shiki worker failed:\", error)\n this.#rejectAll(error)\n }\n\n #rejectAll(error: unknown): void {\n for (const { reject } of this.#queue.values()) reject(error)\n this.#cache.clear()\n this.#queue.clear()\n this.#running.clear()\n this.#results = []\n for (const timeout of this.#timeouts.values()) clearTimeout(timeout)\n this.#timeouts.clear()\n this.#updatePending = false\n this.#worker?.terminate()\n this.#worker = undefined\n this.#workerPromise = undefined\n }\n}\n\nexport const shikiWorker = new ShikiWorkerClient()\n"],"mappings":";;;;AAcA,SAAS,MAAM,GAA0C;CACvD,OAAO,SAAS,KAAK,UAAU;AACjC;AAEA,MAAM,iBAAiB;AAEvB,MAAM,cAAc;AACpB,MAAM,kBAAkB;AAExB,IAAa,oBAAb,MAA+B;CAC7B,MAAM;CACN,yBAAS,IAAI,IAAsB;CACnC,yBAAS,IAAI,IAAsB;CACnC,2BAAW,IAAI,IAAsB;CACrC,WAA0B,CAAC;CAC3B,4BAAY,IAAI,IAA2C;CAC3D;CACA;CACA;CACA,mBAA8C,KAAA;CAC9C,iBAAiB;CAEjB,YAAY,OAA6B,CAAC,GAAG;EAC3C,KAAK,WAAW,KAAK,WAAW;CAClC;CAEA,IAAI,KAA2B;EAC7B,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,SAAS,WAAW;CAC5E;CAEA,MAAM,KAA2C;EAC/C,MAAM,KAAK,EAAE,KAAK;EAClB,MAAM,MAAM,KAAK,IAAI,GAAG;EACxB,IAAI,CAAC,WAAW,OAAO;GAAE,OAAO;GAAoC;GAAI;GAAK,OAAO,IAAI;EAAK;EAC7F,IAAI,CAAC,YAAY,IAAI,IAAI,GACvB,OAAO;GAAE,OAAO,yBAAyB,IAAI;GAAQ;GAAI;GAAK,OAAO,IAAI;EAAK;EAChF,MAAM,SAAS,KAAK,OAAO,IAAI,GAAG;EAClC,IAAI,QAAQ;GACV,KAAK,OAAO,OAAO,GAAG;GACtB,KAAK,OAAO,IAAI,KAAK,MAAM;GAC3B,OAAO;EACT;EACA,OAAO,KAAK,OAAO,OAAO,gBAAgB,KAAK,OAAO,OAAO,KAAK,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAM;EAC7F,MAAM,MAAgB;GAAE,GAAG;GAAK;GAAI;GAAK,MAAM,IAAI;GAAM,GAAG,QAAQ,cAAc;EAAE;EACpF,KAAK,OAAO,IAAI,KAAK,GAAG;EACxB,OAAO;CACT;CAEA,UAAU,MAAc,MAAc,OAAkB,CAAC,GAAyB;EAChF,MAAM,MAAoB;GAAE;GAAM;GAAM,QAAQ,KAAK;GAAQ,OAAO,KAAK;EAAM;EAC/E,MAAM,MAAM,KAAK,MAAM,GAAG;EAC1B,IAAI,CAAC,MAAM,GAAG,GAAG,OAAO,QAAQ,QAAQ,GAAG;EAC3C,IAAI,CAAC,IAAI,WAAW;GAClB,KAAK,OAAO,IAAI,IAAI,IAAI,GAAG;GAC3B,IAAI,QAAQ,iBAAiB,eAAe,KAAK,OAAO,GAAG,EAAE,MAAM,KAAK,CAAC;GACzE,KAAK,OAAO;EACd;EACA,OAAO,IAAI;CACb;CAEA,UAAgB;EACd,MAAM,wBAAQ,IAAI,MAAM,uBAAuB;EAC/C,KAAK,WAAW,KAAK;CACvB;CAEA,MAAM,SAAS,KAA8B;EAC3C,IAAI,YAAY;EAChB,KAAK,SAAS,IAAI,IAAI,IAAI,GAAG;EAC7B,MAAM,SAAS,MAAM,KAAK,cAAc;EACxC,MAAM,EAAE,QAAQ,IAAI,SAAS,OAAO,SAAS,MAAM,QAAQ,MAAM,GAAG,QAAQ;EAC5E,MAAM,UAAU,iBAEZ,KAAK,sBACH,IAAI,MAAM,gCAAgC,KAAK,SAAS,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE,CACvF,GACF,KAAK,QACP;EACA,QAAQ,MAAM;EACd,KAAK,UAAU,IAAI,IAAI,IAAI,OAAO;EAElC,OAAO,YAAY,GAAG;CACxB;CAEA,MAAM,gBAAiF;EACrF,IAAI,KAAK,SAAS,OAAO,KAAK;EAC9B,KAAK,oBAAoB,YAAY;GACnC,MAAM,EAAE,iBAAiB,MAAM,OAAO;GACtC,MAAM,SAAS,MAAM,aAAqD;GAC1E,MAAM,QAAQ,QAAQ,cAAoB;GAC1C,IAAI,UAAU;GACd,MAAM,UAAU,iBACR,MAAM,uBAAO,IAAI,MAAM,qCAAqC,KAAK,SAAS,GAAG,CAAC,GACpF,KAAK,QACP;GACA,QAAQ,MAAM;GACd,OAAO,GAAG,YAAY,UAAU;IAC9B,IAAI,MAAM,SAAS,SAAS;KAC1B,UAAU;KACV,MAAM,QAAQ;KACd;IACF;IACA,KAAK,cAAc,MAAM,EAAE;IAC3B,KAAK,SAAS,OAAO,MAAM,EAAE;IAC7B,KAAK,SAAS,KAAK,KAAK;IACxB,KAAK,OAAO;GACd,CAAC;GACD,OAAO,GAAG,UAAU,UAAU;IAC5B,IAAI,SAAS,KAAK,MAAM,KAAK;SACxB,MAAM,OAAO,KAAK;GACzB,CAAC;GACD,IAAI;IACF,MAAM,MAAM;IACZ,OAAO;GACT,SAAS,OAAO;IACd,OAAO,UAAU;IACjB,MAAM;GACR,UAAU;IACR,aAAa,OAAO;GACtB;EACF,EAAA,CAAG;EACH,OAAQ,KAAK,UAAU,MAAM,KAAK;CACpC;CAEA,SAAS;EACP,KAAK,iBAAiB;EACtB,IAAI,KAAK,kBAAkB;EAC3B,KAAK,oBAAoB,YAAY;GACnC,OAAO,KAAK,gBAAgB;IAC1B,KAAK,iBAAiB;IAEtB,MAAM,KAAK,QAAQ;GACrB;EACF,EAAA,CAAG,CAAC,CACD,OAAO,UAAU,KAAK,MAAM,KAAK,CAAC,CAAC,CACnC,cAAc;GACb,KAAK,mBAAmB,KAAA;GACxB,IAAI,KAAK,gBAAgB,KAAK,OAAO;EACvC,CAAC;CACL;CAEA,MAAM,UAAU;EAEd,OAAO,KAAK,SAAS,QAAQ;GAC3B,MAAM,SAAS,KAAK,SAAS,MAAM;GACnC,MAAM,MAAM,KAAK,OAAO,IAAI,OAAO,EAAE;GACrC,IAAI,KAAK;IACP,IAAI,OAAO,OAAO;KAChB,MAAM,QAAQ,IAAI,MAAM,OAAO,KAAK;KAEpC,QAAQ,MAAM,8BAA8B,KAAK;KACjD,IAAI,OAAO,KAAK;IAClB,OAAO,IAAI,QAAQ,MAAM;IAGzB,MAAM,IAAI,SAAS,YAAY,aAAa,OAAO,CAAC;IACpD,KAAK,OAAO,OAAO,IAAI,EAAE;GAC3B;EACF;EAGA,KAAK,MAAM,OAAO,KAAK,OAAO,OAAO,GACnC,IAAI,IAAI,QAAQ,WAAW,CAAC,IAAI,WAAW;GACzC,IAAI,uBAAO,IAAI,MAAM,aAAa,CAAC;GACnC,KAAK,OAAO,OAAO,IAAI,EAAE;GACzB,KAAK,OAAO,OAAO,IAAI,GAAG;EAC5B;EAGF,IAAI,KAAK,SAAS,QAAQ,eAAe,KAAK,OAAO,SAAS,GAAG;EAGjE,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC,CAAC,CACnC,QAAQ,MAAM,CAAC,EAAE,SAAS,CAAC,CAC3B,MAAM,EAAE,cAAc,KAAK,SAAS,KAAK;EAC5C,MAAM,QAAQ,IAAI,KAAK,KAAK,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC;CACrD;CAEA,cAAc,IAAkB;EAC9B,MAAM,UAAU,KAAK,UAAU,IAAI,EAAE;EACrC,IAAI,SAAS,aAAa,OAAO;EACjC,KAAK,UAAU,OAAO,EAAE;CAC1B;CAEA,MAAM,OAAsB;EAC1B,QAAQ,QAAQ,KAAK;EAErB,QAAQ,MAAM,wBAAwB,KAAK;EAC3C,KAAK,WAAW,KAAK;CACvB;CAEA,WAAW,OAAsB;EAC/B,KAAK,MAAM,EAAE,YAAY,KAAK,OAAO,OAAO,GAAG,OAAO,KAAK;EAC3D,KAAK,OAAO,MAAM;EAClB,KAAK,OAAO,MAAM;EAClB,KAAK,SAAS,MAAM;EACpB,KAAK,WAAW,CAAC;EACjB,KAAK,MAAM,WAAW,KAAK,UAAU,OAAO,GAAG,aAAa,OAAO;EACnE,KAAK,UAAU,MAAM;EACrB,KAAK,iBAAiB;EACtB,KAAK,SAAS,UAAU;EACxB,KAAK,UAAU,KAAA;EACf,KAAK,iBAAiB,KAAA;CACxB;AACF;AAEA,MAAa,cAAc,IAAI,kBAAkB"}
@@ -1 +0,0 @@
1
- export { n as shikiWorker } from "./client-C2GXKfJ1.mjs";
@@ -1 +0,0 @@
1
- export { t as createCtx } from "./ctx-B7BmPUCD.mjs";
@@ -1 +0,0 @@
1
- {"version":3,"file":"files-7DUYSeNc.d.mts","names":[],"sources":["../src/widgets/completions/files.ts"],"mappings":";;;;UAQiB,2BAA2B;;;EAG1C;;;;EAIA,UAAU;;;;;;EAMV;EACA;;KAGG,OAAO;EAAe;;;;iBAIX,YAAY,OAAM,qBAA0B,iBAAiB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-C1KfXk98.d.mts","names":[],"sources":["../src/widgets/completions/github.ts"],"mappings":";;;;;;KAWY,aAAa;EACvB;EACA;;;EAGA;EACA;EACA;EACA;IAAW;;;KAGD;KAEA,iBAAiB,aAAa,OAAO,gBAAgB,QAAQ;UAExD;;;EAGf;;;EAGA,UAAU;;;EAGV;;EAEA,QAAQ;;EAER;;;;EAIA,UAAU;;;;;;;;;;;;;;;;;;;;;;;iBAwBI,aAAa,OAAM,sBAA2B,iBAAiB"}
@@ -1,108 +0,0 @@
1
- import { stripAnsi } from "@zaly/shared/ansi";
2
- import { basename } from "pathe";
3
- //#region src/markdown/image.ts
4
- /**
5
- * Image callback + post-processor for the markdown pipeline.
6
- *
7
- * The markdown renderer is synchronous (callbacks return strings), but
8
- * image preparation is async (sharp metadata, KGP transmit, format
9
- * conversion). We reconcile with a two-pass approach:
10
- *
11
- * 1. During rendering, the `image` callback pushes `{ src, alt }` into
12
- * the entries array and emits a compact `<img id=N>` marker where
13
- * `N` is the entry's index. The marker is plain text so any
14
- * renderer (marked or `Bun.markdown.render`) emits it verbatim.
15
- * 2. After rendering, `resolve(ctx, rendered)` renders every unique
16
- * src concurrently via cached `Image` nodes, then replaces each
17
- * marker with either the rendered rows (for *block* images — ones
18
- * that end up on their own line) or the markdown alt text (for
19
- * inline images, which would otherwise break text flow).
20
- *
21
- * The caller passes in a persistent `cache: Map<src, Image>` owned by
22
- * the Markdown instance so re-renders reuse the same Image node (and
23
- * therefore the same KGP placement id, which the spec guarantees is a
24
- * flicker-free move/resize).
25
- */
26
- function createImageCallback(host) {
27
- const entries = [];
28
- const cache = host.images;
29
- return {
30
- cb(alt, meta) {
31
- const id = entries.length;
32
- entries.push({
33
- alt,
34
- src: meta.src
35
- });
36
- return `<img id=${id}>`;
37
- },
38
- async resolve(ctx, rendered) {
39
- if (entries.length === 0) return rendered;
40
- const { Image } = await import("./widgets/image.mjs");
41
- const ordinals = /* @__PURE__ */ new Map();
42
- const rowsByEntry = [];
43
- const used = /* @__PURE__ */ new Set();
44
- await Promise.all(entries.map(async (entry, idx) => {
45
- const ord = ordinals.get(entry.src) ?? 0;
46
- ordinals.set(entry.src, ord + 1);
47
- const key = `${entry.src}\u0000${ord}`;
48
- used.add(key);
49
- let img = cache.get(key);
50
- if (img === void 0) {
51
- img = new Image({
52
- alt: entry.alt,
53
- src: entry.src
54
- });
55
- host.add(img);
56
- cache.set(key, img);
57
- }
58
- rowsByEntry[idx] = await img.render(ctx);
59
- }));
60
- for (const [key] of cache) if (!used.has(key)) {
61
- const img = cache.get(key);
62
- if (img) {
63
- host.remove(img);
64
- cache.delete(key);
65
- }
66
- }
67
- const out = [];
68
- for (const line of rendered.split("\n")) {
69
- const matched = [];
70
- for (const m of line.matchAll(MARKER_RE)) {
71
- const idx = Number(m[1]);
72
- matched.push({
73
- entry: entries[idx],
74
- rows: rowsByEntry[idx] ?? []
75
- });
76
- }
77
- if (matched.length === 0) {
78
- out.push(line);
79
- continue;
80
- }
81
- if (matched.length === 1 && stripAnsi(line.replace(MARKER_RE, "")).trim() === "" && matched[0].rows.length > 0) {
82
- out.push(...matched[0].rows);
83
- continue;
84
- }
85
- out.push(line.replaceAll(MARKER_RE, (_, idxStr) => labelOf(entries[Number(idxStr)])));
86
- for (const { rows } of matched) if (rows.some(isRealGraphics)) out.push(...rows);
87
- }
88
- return out.join("\n");
89
- }
90
- };
91
- }
92
- /** Friendly inline placeholder for an image that can't render at this
93
- * position. Prefers the markdown alt text; falls back to the basename
94
- * of the source path (so `[clip.png]` instead of `[/tmp/long/path/clip.png]`),
95
- * and "image" for anything weirder. */
96
- function labelOf(entry) {
97
- return `[${entry.alt !== "" ? entry.alt : basename(entry.src) || "image"}]`;
98
- }
99
- const MARKER_RE = /<img id=(\d+)>/g;
100
- /** True when a row contains a Kitty Graphics Protocol escape (transmit
101
- * or place) — i.e. real image data, not the text alt fallback. */
102
- function isRealGraphics(row) {
103
- return row.includes("\x1B_G");
104
- }
105
- //#endregion
106
- export { createImageCallback };
107
-
108
- //# sourceMappingURL=image-Cm5T-uw-.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-Cm5T-uw-.mjs","names":[],"sources":["../src/markdown/image.ts"],"sourcesContent":["import type { RenderCtx } from \"../core/ctx.ts\"\nimport type { Node } from \"../core/node.ts\"\nimport type { Image } from \"../widgets/image.ts\"\nimport type { MdCallbacks, MdImageMeta } from \"./types.ts\"\n\nimport { stripAnsi } from \"@zaly/shared/ansi\"\nimport { basename } from \"pathe\"\n\n/** Minimal host shape the image callback needs. Any Node-like parent\n * with a per-src `Image` cache satisfies it — the `Markdown` widget is\n * the primary caller but the interface keeps this file decoupled from\n * widget internals (and breaks the widgets↔markdown import loop). */\nexport interface ImageHost {\n /** Per-src cache so re-renders reuse the same `Image` — same KGP\n * placement id, which the spec guarantees is a flicker-free\n * move/resize. */\n images: Map<string, Image>\n /** Attach a freshly-created `Image` as a child so mount/unmount\n * propagate. */\n add: (child: Node) => unknown\n remove: (child: Node) => unknown\n}\n\n/** Per-occurrence image metadata collected during markdown rendering. */\ninterface ImageEntry {\n src: string\n alt: string\n}\n\n/**\n * Image callback + post-processor for the markdown pipeline.\n *\n * The markdown renderer is synchronous (callbacks return strings), but\n * image preparation is async (sharp metadata, KGP transmit, format\n * conversion). We reconcile with a two-pass approach:\n *\n * 1. During rendering, the `image` callback pushes `{ src, alt }` into\n * the entries array and emits a compact `<img id=N>` marker where\n * `N` is the entry's index. The marker is plain text so any\n * renderer (marked or `Bun.markdown.render`) emits it verbatim.\n * 2. After rendering, `resolve(ctx, rendered)` renders every unique\n * src concurrently via cached `Image` nodes, then replaces each\n * marker with either the rendered rows (for *block* images — ones\n * that end up on their own line) or the markdown alt text (for\n * inline images, which would otherwise break text flow).\n *\n * The caller passes in a persistent `cache: Map<src, Image>` owned by\n * the Markdown instance so re-renders reuse the same Image node (and\n * therefore the same KGP placement id, which the spec guarantees is a\n * flicker-free move/resize).\n */\nexport function createImageCallback(host: ImageHost): {\n cb: MdCallbacks[\"image\"]\n resolve: (ctx: RenderCtx, rendered: string) => Promise<string>\n} {\n const entries: ImageEntry[] = []\n const cache = host.images\n\n return {\n cb(alt: string, meta: MdImageMeta): string {\n const id = entries.length\n entries.push({ alt, src: meta.src })\n return `<img id=${id}>`\n },\n\n async resolve(ctx: RenderCtx, rendered: string): Promise<string> {\n if (entries.length === 0) return rendered\n\n // `Image` is heavy (pulls image-meta, sharp lazy loaders, KGP\n // encoder) and 99% of markdown has no images. Load it only when\n // we have something to place.\n const { Image } = await import(\"../widgets/image.ts\")\n\n // One Image (and therefore one KGP `placementId`) per occurrence\n // so multiple references to the same `src` show up as distinct\n // placements on screen. Cache key is `${src}\\0${ordinal-within-src}`\n // — the ordinal makes each repeated reference stable across\n // re-renders (slot 0 is always slot 0, so the placementId stays\n // pinned and KGP gives a flicker-free move/resize). Image bytes\n // are de-duped at a different layer (`transmitOnce` in kitty.ts),\n // so multiple occurrences cost N placements but only one transmit.\n const ordinals = new Map<string, number>()\n const rowsByEntry: string[][] = []\n const used = new Set<string>()\n await Promise.all(\n entries.map(async (entry, idx) => {\n const ord = ordinals.get(entry.src) ?? 0\n ordinals.set(entry.src, ord + 1)\n const key = `${entry.src}\\u0000${ord}`\n used.add(key)\n let img = cache.get(key)\n if (img === undefined) {\n img = new Image({ alt: entry.alt, src: entry.src })\n host.add(img)\n cache.set(key, img)\n }\n rowsByEntry[idx] = await img.render(ctx)\n })\n )\n\n for (const [key] of cache) {\n if (!used.has(key)) {\n const img = cache.get(key)\n if (img) {\n host.remove(img)\n cache.delete(key)\n }\n }\n }\n\n // Walk the rendered output line by line:\n // - Marker alone on its line (whitespace + ANSI tolerated) →\n // replace the line with the full image rows.\n // - Marker mid-line → inline ref placeholder, then splice the\n // image rows on the next line(s) so the picture still\n // appears below the surrounding text.\n // Multiple markers on one mid-line all get inline refs; their\n // image rows stack underneath in document order.\n const out: string[] = []\n for (const line of rendered.split(\"\\n\")) {\n const matched: { entry: ImageEntry; rows: string[] }[] = []\n for (const m of line.matchAll(MARKER_RE)) {\n const idx = Number(m[1])\n matched.push({ entry: entries[idx], rows: rowsByEntry[idx] ?? [] })\n }\n\n if (matched.length === 0) {\n out.push(line)\n continue\n }\n\n const lineHasOnlyMarker =\n matched.length === 1 && stripAnsi(line.replace(MARKER_RE, \"\")).trim() === \"\"\n\n if (lineHasOnlyMarker && matched[0].rows.length > 0) {\n out.push(...matched[0].rows)\n continue\n }\n\n // Mid-line: replace each marker with a nice inline ref, then\n // append every image's rows below the line in order. Skip rows\n // that don't contain real graphics (KGP escapes) — when the\n // terminal can't render images, `Image.render` falls back to a\n // single-row alt-text representation, which would just\n // duplicate the inline label we already emitted.\n out.push(\n line.replaceAll(MARKER_RE, (_, idxStr: string) => labelOf(entries[Number(idxStr)]))\n )\n for (const { rows } of matched) {\n if (rows.some(isRealGraphics)) out.push(...rows)\n }\n }\n return out.join(\"\\n\")\n },\n }\n}\n\n/** Friendly inline placeholder for an image that can't render at this\n * position. Prefers the markdown alt text; falls back to the basename\n * of the source path (so `[clip.png]` instead of `[/tmp/long/path/clip.png]`),\n * and \"image\" for anything weirder. */\nfunction labelOf(entry: ImageEntry): string {\n const label = entry.alt !== \"\" ? entry.alt : basename(entry.src) || \"image\"\n return `[${label}]`\n}\n\nconst MARKER_RE = /<img id=(\\d+)>/g\n\n/** True when a row contains a Kitty Graphics Protocol escape (transmit\n * or place) — i.e. real image data, not the text alt fallback. */\nfunction isRealGraphics(row: string): boolean {\n return row.includes(\"\\x1b_G\")\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmDA,SAAgB,oBAAoB,MAGlC;CACA,MAAM,UAAwB,CAAC;CAC/B,MAAM,QAAQ,KAAK;CAEnB,OAAO;EACL,GAAG,KAAa,MAA2B;GACzC,MAAM,KAAK,QAAQ;GACnB,QAAQ,KAAK;IAAE;IAAK,KAAK,KAAK;GAAI,CAAC;GACnC,OAAO,WAAW,GAAG;EACvB;EAEA,MAAM,QAAQ,KAAgB,UAAmC;GAC/D,IAAI,QAAQ,WAAW,GAAG,OAAO;GAKjC,MAAM,EAAE,UAAU,MAAM,OAAO;GAU/B,MAAM,2BAAW,IAAI,IAAoB;GACzC,MAAM,cAA0B,CAAC;GACjC,MAAM,uBAAO,IAAI,IAAY;GAC7B,MAAM,QAAQ,IACZ,QAAQ,IAAI,OAAO,OAAO,QAAQ;IAChC,MAAM,MAAM,SAAS,IAAI,MAAM,GAAG,KAAK;IACvC,SAAS,IAAI,MAAM,KAAK,MAAM,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,QAAQ;IACjC,KAAK,IAAI,GAAG;IACZ,IAAI,MAAM,MAAM,IAAI,GAAG;IACvB,IAAI,QAAQ,KAAA,GAAW;KACrB,MAAM,IAAI,MAAM;MAAE,KAAK,MAAM;MAAK,KAAK,MAAM;KAAI,CAAC;KAClD,KAAK,IAAI,GAAG;KACZ,MAAM,IAAI,KAAK,GAAG;IACpB;IACA,YAAY,OAAO,MAAM,IAAI,OAAO,GAAG;GACzC,CAAC,CACH;GAEA,KAAK,MAAM,CAAC,QAAQ,OAClB,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG;IAClB,MAAM,MAAM,MAAM,IAAI,GAAG;IACzB,IAAI,KAAK;KACP,KAAK,OAAO,GAAG;KACf,MAAM,OAAO,GAAG;IAClB;GACF;GAWF,MAAM,MAAgB,CAAC;GACvB,KAAK,MAAM,QAAQ,SAAS,MAAM,IAAI,GAAG;IACvC,MAAM,UAAmD,CAAC;IAC1D,KAAK,MAAM,KAAK,KAAK,SAAS,SAAS,GAAG;KACxC,MAAM,MAAM,OAAO,EAAE,EAAE;KACvB,QAAQ,KAAK;MAAE,OAAO,QAAQ;MAAM,MAAM,YAAY,QAAQ,CAAC;KAAE,CAAC;IACpE;IAEA,IAAI,QAAQ,WAAW,GAAG;KACxB,IAAI,KAAK,IAAI;KACb;IACF;IAKA,IAFE,QAAQ,WAAW,KAAK,UAAU,KAAK,QAAQ,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,MAEnD,QAAQ,EAAE,CAAC,KAAK,SAAS,GAAG;KACnD,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC,IAAI;KAC3B;IACF;IAQA,IAAI,KACF,KAAK,WAAW,YAAY,GAAG,WAAmB,QAAQ,QAAQ,OAAO,MAAM,EAAE,CAAC,CACpF;IACA,KAAK,MAAM,EAAE,UAAU,SACrB,IAAI,KAAK,KAAK,cAAc,GAAG,IAAI,KAAK,GAAG,IAAI;GAEnD;GACA,OAAO,IAAI,KAAK,IAAI;EACtB;CACF;AACF;;;;;AAMA,SAAS,QAAQ,OAA2B;CAE1C,OAAO,IADO,MAAM,QAAQ,KAAK,MAAM,MAAM,SAAS,MAAM,GAAG,KAAK,QACnD;AACnB;AAEA,MAAM,YAAY;;;AAIlB,SAAS,eAAe,KAAsB;CAC5C,OAAO,IAAI,SAAS,QAAQ;AAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-VaT7AN-S.d.mts","names":[],"sources":["../src/widgets/image.ts"],"mappings":";;UAWiB;;;;;;;EAOf;;EAEA;;;;;EAKA;;EAEA;;;;;EAKA;;cAGW,cAAc,KAAK;;EAI9B,YAAY,OAAO;MAOf;EAIK,UAAU;YAIH,QAAQ,KAAK,YAAY;;iBAuC3B,MAAM,aAAa,QAAQ,KAAK,qBAAqB;iBACrD,MAAM,OAAO,aAAa"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-BAYux7qo.d.mts","names":[],"sources":["../src/widgets/input.ts"],"mappings":";;;;;UAoBiB,mBAAmB;;EAElC;;EAEA,cAAc;;EAEd;;EAEA,QAAQ;;EAER;;EAEA;EACA;EACA,aAAa,MAAM;EACnB,UAAU,eAAe;IAAO,OAAO;QAAmB;EAC1D,YAAY;;KAGF;EAAe;EAAe,aAAa;;;KAOlD;EAAU;EAAe;;;KAGlB,kBAAkB;EAAiB;;KAEnC,cAAc;;EAExB;IAAW;IAAmB;;;EAE9B;IAAU;IAAe,aAAa;;;;;;;;;;EAStC;IAAU,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BX,cAAc,KAAK,YAAY;;;kBAE1B;WAEE;;;;;;;EAgBT;IACiB;IAUA;IAKG;IAKE;IAMJ;IAMH;IAUM;IAUG;IAUH;IAWD;IAsBJ;IAqBJ;IA2BC;;EAStB,YAAY,UAAS;MA2BjB;MAIA,QAAQ;EAKZ,OAAO,KAAK,kBAAkB;EAqB9B,MAAM;EASN,OAAO;EAWP,QAAQ;;;;EAQR,WAAW;EA2BX,WAAW;YAqHK,QAAQ,KAAK,YAAY;;;;;;;;;;;;iBAyD3B,MAAM,QAAO,aAAkB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspect-CfNydMgO.d.mts","names":[],"sources":["../src/style/builder.ts","../src/style/inspect.ts"],"mappings":";;KAcK;KAKA,UAAU,+BACX,QAAQ,wBAAwB,aAC/B,oBAAoB,0BACpB,oBAAoB;KAEb,aAAa;EACvB,OAAO;GACN;EACD,KAAK,OAAO,MAAM,UAAU,aAAa;EACzC,KAAK,OAAO,MAAM,UAAU,aAAa;EACzC,MAAM,OAAO,WAAW,aAAa,aAAa;EAClD,UAAU,cAAc,aAAa;EACrC,SAAS,cAAc,aAAa;gBAIlC,KACI,WACA,UAAU,aACL,WAAW,UAAU,gBACrB,WAAW,UAAU,WAC7B,aAAa;;;;;;;;;;;;;;;;;;;;;;;iBAyBF,aAAa,8BAC3B,QAAO,gBACN,aAAa;;;UC5DC;EACf,QAAQ;EACR;EACA;EACA;;;EAGA;EACA;;;;;iBAac,WAAW;;;;;;;iBAaX,cAAc,gBAAgB,OAAM;iBA8BpC,QAAQ,gBAAgB,OAAM"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-CwRmWuU6.mjs","names":[],"sources":["../src/widgets/markdown.ts"],"sourcesContent":["import type { RenderCtx } from \"../core/ctx.ts\"\nimport type { Accessor } from \"../core/reactive.ts\"\nimport type { State } from \"../core/state.ts\"\nimport type { WrapMode } from \"../layout/text.ts\"\nimport type { MarkdownRenderer } from \"../markdown/renderer.ts\"\nimport type { MdOptions } from \"../markdown/types.ts\"\nimport type { ShikiTheme } from \"../shiki/types.ts\"\nimport type { AnyStyle } from \"../style/types.ts\"\nimport type { Image } from \"./image.ts\"\nimport type { TextContent } from \"./text.ts\"\n\nimport { hasColors } from \"@zaly/shared/env\"\nimport { Node } from \"../core/node.ts\"\nimport { createAsync, signal, unwrap, useContext } from \"../core/reactive.ts\"\nimport { RenderContext } from \"../core/render.ts\"\nimport { calcLayout, expandTabs, formatText } from \"../layout/text.ts\"\nimport { shikiWorker } from \"../shiki/client.ts\"\nimport { codeToAnsi } from \"../shiki/shiki.ts\"\nimport { textContent } from \"./text.ts\"\n\nexport interface MarkdownState {\n /** Markdown source. Accepts a plain string or a reactive accessor —\n * pass `signal()` / `memo()` for streaming content that re-parses on\n * each render and subscribes the node to the signal. */\n content: TextContent\n /** Options forwarded to `renderMarkdown`. */\n options?: MdOptions\n /**\n * Enable shiki-backed syntax highlighting for fenced code blocks. Defaults\n * to `true` — code blocks get per-token colors from the shiki theme, with\n * `mdCodeBlock`'s bg applied as a backdrop. Unknown languages fall through\n * as plain text.\n */\n syntax?: boolean\n wrap?: WrapMode\n style?: AnyStyle\n}\n\ntype ShikiCode = {\n key: string\n code: string\n lang: string\n theme?: ShikiTheme\n inflight?: Promise<string>\n ac?: AbortController\n result?: string\n gen: number\n}\n\nexport class Markdown extends Node<MarkdownState> {\n // Image nodes cached per-src per-Markdown-instance. Re-rendering the\n // same markdown (streaming updates) reuses the same `Image` — same\n // `placementId`, which the KGP spec guarantees is a flicker-free\n // move/resize of the existing placement.\n readonly images = new Map<string, Image>()\n\n #renderer?: MarkdownRenderer\n #code = new Map<string, ShikiCode>()\n #update = signal(0)\n #gen = 0\n #worker: Accessor<number>\n #images?: Accessor<boolean>\n\n constructor(state: State<MarkdownState>) {\n super(state)\n\n const context = useContext(RenderContext)\n this.#images = context?.images\n\n this.#worker = createAsync(\n async () => {\n const update = this.#update.get() // track\n const todo = [...this.#code.values()].filter((c) => c.gen === this.#gen && !c.result)\n if (!todo.length) return update // nothing to do, skip\n await Promise.all(\n todo.map(async (req) => {\n req.ac ??= new AbortController()\n req.inflight ??= codeToAnsi(req.code, req.lang, {\n signal: req.ac.signal,\n theme: req.theme,\n })\n try {\n req.result = await req.inflight\n } catch (error) {\n if (req.ac.signal.aborted) {\n if (this.#code.get(req.key) === req) this.#code.delete(req.key)\n } else throw error\n }\n })\n )\n return update + 1\n },\n { initialValue: 0 }\n )\n }\n\n /** Find a highlighted result for a prefix of `code` in the cache. This\n * handles streaming updates where the full code block isn't available yet\n * and prevents flashing un-highlighted text on each update. */\n #streamingHighlight(code: string, lang: string, theme?: ShikiTheme) {\n let ret: ShikiCode | undefined\n for (const c of this.#code.values()) {\n if (!c.result || c.lang !== lang || c.theme !== theme) continue\n if (code.startsWith(c.code) && c.code.length > (ret?.code.length ?? 0)) ret = c\n }\n if (ret) ret.gen = this.#gen // bump gen to keep it alive in cache\n return ret?.result ? ret.result + code.slice(ret.code.length) : code\n }\n\n #highlight(code: string, lang?: string, theme?: ShikiTheme): string {\n if (!lang) return code\n const key = shikiWorker.key({ code, lang, theme })\n const ret = this.#code.get(key)\n if (ret) ret.gen = this.#gen // bump gen to keep it alive in cache\n if (ret?.result) return ret.result\n else if (!ret) this.#code.set(key, { code, gen: this.#gen, key, lang, theme })\n return this.#streamingHighlight(code, lang, theme)\n }\n\n protected async _render(ctx: RenderCtx): Promise<string[]> {\n if (!this.#renderer) {\n const { MarkdownRenderer } = await import(\"../markdown/renderer.ts\")\n this.#renderer = new MarkdownRenderer({ ...this.state.options, parent: this })\n }\n let source = await textContent(this.state.content, ctx)\n source = expandTabs(source)\n let formatted: string\n\n if (!hasColors) formatted = this.#renderer.normalizeEol(source, source)\n else {\n this.#gen++ // bump generation to track what is still used\n\n formatted = await this.#renderer.render(source, {\n ...ctx,\n highlight: (code, lang) => this.#highlight(code, lang, ctx.style.theme.shiki),\n images: unwrap(this.#images) ?? true,\n })\n\n // prune old entries\n for (const [k, c] of this.#code.entries())\n if (c.gen !== this.#gen) {\n c.ac?.abort()\n if (c.result !== undefined) this.#code.delete(k)\n }\n\n // Trigger the worker if needed\n if (this.#code.values().some((c) => !c.inflight)) {\n this.#update.set(this.#gen) // trigger worker\n this.#worker() // tracked\n }\n }\n\n return formatText(formatted, {\n indent: true,\n style: this.state.style ? ctx.style.add(this.state.style) : undefined,\n width: ctx.width,\n wrap: this.state.wrap,\n wrapBg: true,\n })\n }\n\n override async layout(ctx: RenderCtx) {\n return calcLayout(await textContent(this.state.content, ctx))\n }\n}\n\n/**\n * Render a markdown string as a TUI node. Produces ANSI-styled text that\n * resolves per-element styling through theme slots (`mdHeading1`, `mdCode`,\n * `mdLink`, …). Links become clickable in terminals that support OSC 8.\n *\n * ```ts\n * markdown(\"# Hello\\n\\nThis is **bold** and *italic*.\")\n * markdown({ content, wrap: \"word\", fg: \"fg\" })\n * ```\n */\nexport function markdown(\n content: TextContent,\n style?: Omit<State<MarkdownState>, \"content\">\n): Markdown\nexport function markdown(state: State<MarkdownState>): Markdown\nexport function markdown(\n first: TextContent | MarkdownState,\n style?: Omit<State<MarkdownState>, \"content\">\n): Markdown {\n // Plain strings and accessor functions go through the content path;\n // a non-function object is the full state form.\n if (typeof first === \"string\" || typeof first === \"function\") {\n return new Markdown({ content: first, ...style })\n }\n return new Markdown(first)\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"picker-DQs_IW77.d.mts","names":[],"sources":["../src/widgets/picker.ts"],"mappings":";;;;;;KAgBY,aAAa,SAAS;KACtB,sBAAsB,kBAAkB;KAE/C,gBAAgB,UAAU,aAAa,cAAc,cAAc;;;;;;;EAOtE,QAAQ,QAAQ,IAAI;EACpB,UAAU;EACV;EACA,UAAU,cAAc,OAAO;;KAGrB,kBAAkB,UAAU,aAAa,cAAc,gBAAgB,KACjF,KAAK,YAAY;EACf,OAAO,SAAS,YAAY;EAC5B;;KAGQ,gBAAgB,UAAU,WAAW,YAAY,gBAAgB,KAC3E,UAAU;EACR;;cASS,SACV,UAAU,aAAU,YAAA,OAAsB,MAAM,kBAAkB,KAAK,gBAAgB,QAAG,OAAA"}