@zaly/tui 0.0.12 → 0.1.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 (250) 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-Dc4D4uSf.d.mts → actions--ODlgCQ5.d.mts} +4 -4
  66. package/dist/{actions-Dc4D4uSf.d.mts.map → actions--ODlgCQ5.d.mts.map} +1 -1
  67. package/dist/{ansi-DZlXaItJ.mjs → ansi-CMv71xVr.mjs} +3 -31
  68. package/dist/ansi-CMv71xVr.mjs.map +1 -0
  69. package/dist/ansi.d.mts +1 -1
  70. package/dist/ansi.mjs +1 -1
  71. package/dist/{autocomplete-StW1QJZJ.d.mts → autocomplete-CD30kSe_.d.mts} +4 -4
  72. package/dist/{autocomplete-StW1QJZJ.d.mts.map → autocomplete-CD30kSe_.d.mts.map} +1 -1
  73. package/dist/{box-BkP4MF82.mjs → box-C_N_7ChP.mjs} +2 -2
  74. package/dist/{box-BkP4MF82.mjs.map → box-C_N_7ChP.mjs.map} +1 -1
  75. package/dist/builder-Chwtk0nQ.mjs +196 -0
  76. package/dist/builder-Chwtk0nQ.mjs.map +1 -0
  77. package/dist/{callbacks-BwWTCqPJ.mjs → callbacks-DLecWn7G.mjs} +4 -4
  78. package/dist/{callbacks-BwWTCqPJ.mjs.map → callbacks-DLecWn7G.mjs.map} +1 -1
  79. package/dist/client-CNGt-dOt.mjs +1 -0
  80. package/dist/{client-C2GXKfJ1.mjs → client-D7qz4TZt.mjs} +7 -3
  81. package/dist/client-D7qz4TZt.mjs.map +1 -0
  82. package/dist/color-DBMQLv4Y.mjs +37 -0
  83. package/dist/color-DBMQLv4Y.mjs.map +1 -0
  84. package/dist/{ctx-B7BmPUCD.mjs → ctx-BaQ2hP5u.mjs} +3 -3
  85. package/dist/{ctx-B7BmPUCD.mjs.map → ctx-BaQ2hP5u.mjs.map} +1 -1
  86. package/dist/ctx-CndlTp1T.mjs +1 -0
  87. package/dist/{divider-TSx9NhI_.mjs → divider-BlNNN2OS.mjs} +2 -2
  88. package/dist/{divider-TSx9NhI_.mjs.map → divider-BlNNN2OS.mjs.map} +1 -1
  89. package/dist/{files-7DUYSeNc.d.mts → files-B_5HDBPp.d.mts} +3 -3
  90. package/dist/{files-7DUYSeNc.d.mts.map → files-B_5HDBPp.d.mts.map} +1 -1
  91. package/dist/{github-C1KfXk98.d.mts → github-CyRwUQ3y.d.mts} +3 -3
  92. package/dist/{github-C1KfXk98.d.mts.map → github-CyRwUQ3y.d.mts.map} +1 -1
  93. package/dist/{image-VaT7AN-S.d.mts → image-BLls2F4t.d.mts} +2 -2
  94. package/dist/{image-VaT7AN-S.d.mts.map → image-BLls2F4t.d.mts.map} +1 -1
  95. package/dist/image-Cqtj3yRA.mjs +178 -0
  96. package/dist/image-Cqtj3yRA.mjs.map +1 -0
  97. package/dist/image.d.mts +1 -1
  98. package/dist/index.d.mts +13 -4
  99. package/dist/index.d.mts.map +1 -1
  100. package/dist/index.mjs +8 -7
  101. package/dist/index.mjs.map +1 -1
  102. package/dist/{input-BGTTujDN.mjs → input-ET2YEMcl.mjs} +2 -2
  103. package/dist/{input-BGTTujDN.mjs.map → input-ET2YEMcl.mjs.map} +1 -1
  104. package/dist/{input-BAYux7qo.d.mts → input-NuD8TH8N.d.mts} +3 -3
  105. package/dist/{input-BAYux7qo.d.mts.map → input-NuD8TH8N.d.mts.map} +1 -1
  106. package/dist/{inspect-CfNydMgO.d.mts → inspect-B1uXxdKC.d.mts} +2 -2
  107. package/dist/{inspect-CfNydMgO.d.mts.map → inspect-B1uXxdKC.d.mts.map} +1 -1
  108. package/dist/{inspect-jG_W4njH.mjs → inspect-Cxzs-W0g.mjs} +2 -2
  109. package/dist/{inspect-jG_W4njH.mjs.map → inspect-Cxzs-W0g.mjs.map} +1 -1
  110. package/dist/kitty-DKQYsQfH.mjs +1 -0
  111. package/dist/{log-ByKlM4iI.mjs → log-B4djzy2m.mjs} +4 -4
  112. package/dist/{log-ByKlM4iI.mjs.map → log-B4djzy2m.mjs.map} +1 -1
  113. package/dist/{logger-DSQb0sLP.mjs → logger-CvJCITzP.mjs} +3 -3
  114. package/dist/{logger-DSQb0sLP.mjs.map → logger-CvJCITzP.mjs.map} +1 -1
  115. package/dist/{markdown-CwRmWuU6.mjs → markdown-D3ZtRn6C.mjs} +9 -8
  116. package/dist/markdown-D3ZtRn6C.mjs.map +1 -0
  117. package/dist/markdown.d.mts +1 -1
  118. package/dist/markdown.d.mts.map +1 -1
  119. package/dist/markdown.mjs +1 -1
  120. package/dist/math-CU0wmC9N.mjs +1 -0
  121. package/dist/math-Dd7a1irv.mjs +206 -0
  122. package/dist/math-Dd7a1irv.mjs.map +1 -0
  123. package/dist/oklch-Bsh5swbC.mjs +99 -0
  124. package/dist/oklch-Bsh5swbC.mjs.map +1 -0
  125. package/dist/{overlay-BnvOKtGT.mjs → overlay-LvOjG7kn.mjs} +2 -2
  126. package/dist/{overlay-BnvOKtGT.mjs.map → overlay-LvOjG7kn.mjs.map} +1 -1
  127. package/dist/{picker-DQs_IW77.d.mts → picker-B-OxKKnD.d.mts} +5 -5
  128. package/dist/{picker-DQs_IW77.d.mts.map → picker-B-OxKKnD.d.mts.map} +1 -1
  129. package/dist/{picker-Dh5IUrTk.mjs → picker-f6xjgACX.mjs} +2 -2
  130. package/dist/{picker-Dh5IUrTk.mjs.map → picker-f6xjgACX.mjs.map} +1 -1
  131. package/dist/{queries-B_lOwEiE.mjs → queries-BUkBxkuM.mjs} +66 -3
  132. package/dist/queries-BUkBxkuM.mjs.map +1 -0
  133. package/dist/{queries-BDX8mcl5.d.mts → queries-C75-wG1B.d.mts} +19 -4
  134. package/dist/{queries-BDX8mcl5.d.mts.map → queries-C75-wG1B.d.mts.map} +1 -1
  135. package/dist/{registry-D-suU3g0.mjs → registry-DUWpSPoo.mjs} +202 -57
  136. package/dist/registry-DUWpSPoo.mjs.map +1 -0
  137. package/dist/{render-DEIUNLkh.mjs → render-B7LfNM5K.mjs} +2 -2
  138. package/dist/{render-DEIUNLkh.mjs.map → render-B7LfNM5K.mjs.map} +1 -1
  139. package/dist/{renderer-zDNlAovy.mjs → renderer-BLsd-wrG.mjs} +110 -14
  140. package/dist/renderer-BLsd-wrG.mjs.map +1 -0
  141. package/dist/renderer-YHbR7JZ4.mjs +1 -0
  142. package/dist/{renderer-MQue4Da5.mjs → renderer-aAtkFgll.mjs} +8 -7
  143. package/dist/renderer-aAtkFgll.mjs.map +1 -0
  144. package/dist/{select-J2KtwxyK.d.mts → select-BKE5LzdN.d.mts} +3 -3
  145. package/dist/{select-J2KtwxyK.d.mts.map → select-BKE5LzdN.d.mts.map} +1 -1
  146. package/dist/services/logger.d.mts +1 -1
  147. package/dist/services/logger.mjs +1 -1
  148. package/dist/services/notifier.d.mts +1 -1
  149. package/dist/services/notifier.mjs +2 -2
  150. package/dist/services/picker.d.mts +5 -5
  151. package/dist/services/picker.mjs +6 -6
  152. package/dist/services/prompt.d.mts +4 -4
  153. package/dist/services/prompt.mjs +5 -5
  154. package/dist/shiki/server.mjs +37 -14
  155. package/dist/shiki/server.mjs.map +1 -1
  156. package/dist/shiki-B4U0s8jT.mjs +635 -0
  157. package/dist/shiki-B4U0s8jT.mjs.map +1 -0
  158. package/dist/shiki-CJauRusM.mjs +20 -0
  159. package/dist/shiki-CJauRusM.mjs.map +1 -0
  160. package/dist/style-DslRHzI4.mjs +109 -0
  161. package/dist/style-DslRHzI4.mjs.map +1 -0
  162. package/dist/style.d.mts +4 -3
  163. package/dist/style.d.mts.map +1 -1
  164. package/dist/style.mjs +4 -4
  165. package/dist/{text-CkQ7Irmt.mjs → text-BoJdKXLU.mjs} +2 -2
  166. package/dist/{text-CkQ7Irmt.mjs.map → text-BoJdKXLU.mjs.map} +1 -1
  167. package/dist/{text-CCYs9RB2.d.mts → text-CmxbA8lk.d.mts} +3 -3
  168. package/dist/{text-CCYs9RB2.d.mts.map → text-CmxbA8lk.d.mts.map} +1 -1
  169. package/dist/{text-XvPfweeg.mjs → text-DPrhma4x.mjs} +2 -2
  170. package/dist/{text-XvPfweeg.mjs.map → text-DPrhma4x.mjs.map} +1 -1
  171. package/dist/text.d.mts +1 -1
  172. package/dist/text.mjs +1 -1
  173. package/dist/theme-C8LkcoaK.mjs +61 -0
  174. package/dist/theme-C8LkcoaK.mjs.map +1 -0
  175. package/dist/theme-DVX8dvGG.mjs +1794 -0
  176. package/dist/theme-DVX8dvGG.mjs.map +1 -0
  177. package/dist/themes.d.mts +213 -73
  178. package/dist/themes.d.mts.map +1 -1
  179. package/dist/themes.mjs +1 -1
  180. package/dist/{tree-DJl5W_B7.d.mts → tree-CTvSpF9b.d.mts} +3 -3
  181. package/dist/{tree-DJl5W_B7.d.mts.map → tree-CTvSpF9b.d.mts.map} +1 -1
  182. package/dist/{types-D2EYlzmK.d.mts → types-C9ceMsbJ.d.mts} +136 -128
  183. package/dist/types-C9ceMsbJ.d.mts.map +1 -0
  184. package/dist/{widget-DPqBbB57.d.mts → widget-DlF32PRp.d.mts} +2 -2
  185. package/dist/{widget-DPqBbB57.d.mts.map → widget-DlF32PRp.d.mts.map} +1 -1
  186. package/dist/widgets/autocomplete.d.mts +1 -1
  187. package/dist/widgets/autocomplete.mjs +2 -2
  188. package/dist/widgets/box.d.mts +1 -1
  189. package/dist/widgets/box.mjs +1 -1
  190. package/dist/widgets/code.d.mts +4 -2
  191. package/dist/widgets/code.d.mts.map +1 -1
  192. package/dist/widgets/code.mjs +8 -7
  193. package/dist/widgets/code.mjs.map +1 -1
  194. package/dist/widgets/completions/actions.d.mts +1 -1
  195. package/dist/widgets/completions/files.d.mts +1 -1
  196. package/dist/widgets/completions/github.d.mts +1 -1
  197. package/dist/widgets/completions/index.d.mts +3 -3
  198. package/dist/widgets/diff.d.mts +2 -2
  199. package/dist/widgets/diff.d.mts.map +1 -1
  200. package/dist/widgets/diff.mjs +35 -12
  201. package/dist/widgets/diff.mjs.map +1 -1
  202. package/dist/widgets/divider.d.mts +2 -2
  203. package/dist/widgets/divider.mjs +1 -1
  204. package/dist/widgets/image.d.mts +1 -1
  205. package/dist/widgets/image.mjs +4 -4
  206. package/dist/widgets/image.mjs.map +1 -1
  207. package/dist/widgets/input.d.mts +1 -1
  208. package/dist/widgets/input.mjs +1 -1
  209. package/dist/widgets/log.d.mts +1 -1
  210. package/dist/widgets/log.mjs +1 -1
  211. package/dist/widgets/markdown.d.mts +4 -4
  212. package/dist/widgets/markdown.d.mts.map +1 -1
  213. package/dist/widgets/markdown.mjs +1 -1
  214. package/dist/widgets/overlay.d.mts +1 -1
  215. package/dist/widgets/overlay.mjs +1 -1
  216. package/dist/widgets/picker.d.mts +1 -1
  217. package/dist/widgets/picker.mjs +1 -1
  218. package/dist/widgets/progress.d.mts +2 -2
  219. package/dist/widgets/select.d.mts +1 -1
  220. package/dist/widgets/show.d.mts +1 -1
  221. package/dist/widgets/spinner.d.mts +2 -2
  222. package/dist/widgets/text.d.mts +1 -1
  223. package/dist/widgets/text.mjs +1 -1
  224. package/dist/widgets/tree.d.mts +1 -1
  225. package/dist/widgets/widget.d.mts +1 -1
  226. package/package.json +5 -7
  227. package/assets/themes/dracula-soft.json +0 -100
  228. package/assets/themes/github-dark.json +0 -104
  229. package/assets/themes/github-light.json +0 -104
  230. package/dist/ansi-DZlXaItJ.mjs.map +0 -1
  231. package/dist/builder-1z5ewEWK.mjs +0 -386
  232. package/dist/builder-1z5ewEWK.mjs.map +0 -1
  233. package/dist/client-C2GXKfJ1.mjs.map +0 -1
  234. package/dist/client-bzdHIDL2.mjs +0 -1
  235. package/dist/ctx-D_JgJ8Eo.mjs +0 -1
  236. package/dist/image-Cm5T-uw-.mjs +0 -108
  237. package/dist/image-Cm5T-uw-.mjs.map +0 -1
  238. package/dist/markdown-CwRmWuU6.mjs.map +0 -1
  239. package/dist/queries-B_lOwEiE.mjs.map +0 -1
  240. package/dist/registry-D-suU3g0.mjs.map +0 -1
  241. package/dist/renderer-DhqbEVVR.mjs +0 -1
  242. package/dist/renderer-MQue4Da5.mjs.map +0 -1
  243. package/dist/renderer-zDNlAovy.mjs.map +0 -1
  244. package/dist/shiki--ASSYv4_.mjs +0 -12
  245. package/dist/shiki--ASSYv4_.mjs.map +0 -1
  246. package/dist/shiki-D7l5--zz.mjs +0 -432
  247. package/dist/shiki-D7l5--zz.mjs.map +0 -1
  248. package/dist/theme.config-B3Yx--C2.mjs +0 -855
  249. package/dist/theme.config-B3Yx--C2.mjs.map +0 -1
  250. package/dist/types-D2EYlzmK.d.mts.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { y as signal } from "../reactive-f7NpAi69.mjs";
2
- import { r as isMarkdown } from "../inspect-jG_W4njH.mjs";
3
- import { n as text } from "../text-XvPfweeg.mjs";
4
- import { n as markdown } from "../markdown-CwRmWuU6.mjs";
5
- import { t as overlay } from "../overlay-BnvOKtGT.mjs";
6
- import { t as divider } from "../divider-TSx9NhI_.mjs";
2
+ import { r as isMarkdown } from "../inspect-Cxzs-W0g.mjs";
3
+ import { n as text } from "../text-DPrhma4x.mjs";
4
+ import { n as markdown } from "../markdown-D3ZtRn6C.mjs";
5
+ import { t as overlay } from "../overlay-LvOjG7kn.mjs";
6
+ import { t as divider } from "../divider-BlNNN2OS.mjs";
7
7
  //#region src/services/prompt.ts
8
8
  var Prompt = class {
9
9
  #ui;
@@ -1,15 +1,34 @@
1
- import { o as openAnsi, t as RESET } from "../ansi-DZlXaItJ.mjs";
2
- import { n as isShikiTheme, t as isShikiLang } from "../shiki-D7l5--zz.mjs";
1
+ import { o as openAnsi, t as RESET } from "../ansi-CMv71xVr.mjs";
2
+ import { n as isShikiTheme, t as isShikiLang } from "../shiki-B4U0s8jT.mjs";
3
+ import { n as syntaxScopes } from "../theme-C8LkcoaK.mjs";
3
4
  import { n as workerHost } from "../worker-T6SdPzUH.mjs";
4
5
  import { createHighlighterCore } from "shiki/core";
5
6
  import { createOnigurumaEngine } from "shiki/engine/oniguruma";
6
7
  import { bundledLanguages } from "shiki/langs";
7
8
  //#region src/shiki/api.ts
8
9
  const THEME = "tokyo-night";
10
+ const FontStyle = {
11
+ NotSet: -1,
12
+ None: 0,
13
+ Italic: 1,
14
+ Bold: 2,
15
+ Underline: 4,
16
+ Strikethrough: 8
17
+ };
9
18
  const highlighter = await createHighlighterCore({
10
19
  engine: await createOnigurumaEngine(import("shiki/wasm")),
11
20
  langs: [],
12
- themes: [],
21
+ themes: [{
22
+ name: "zaly-syntax",
23
+ settings: [{ settings: {
24
+ background: "#000000",
25
+ foreground: "#000001"
26
+ } }, ...syntaxScopes.map(([, scope], i) => ({
27
+ scope: [...scope],
28
+ settings: { foreground: `#${(i + 2).toString(16).padStart(6, "0")}` }
29
+ }))],
30
+ type: "dark"
31
+ }],
13
32
  warnings: false
14
33
  });
15
34
  var Shiki = class {
@@ -23,9 +42,8 @@ var Shiki = class {
23
42
  wanted: /* @__PURE__ */ new Set()
24
43
  };
25
44
  status(langs, themes) {
26
- themes ??= [];
45
+ themes ??= [THEME];
27
46
  themes = Array.isArray(themes) ? themes : [themes];
28
- themes = themes.length > 0 ? themes : [THEME];
29
47
  langs = Array.isArray(langs) ? langs : [langs];
30
48
  langs = langs.filter(isShikiLang).filter((l) => !this.#langs.loaded.has(l));
31
49
  themes = themes.filter(isShikiTheme).filter((t) => !this.#themes.loaded.has(t));
@@ -57,24 +75,29 @@ var Shiki = class {
57
75
  await this.#loading;
58
76
  }
59
77
  async highlight(code, lang, theme = THEME) {
60
- await this.load(lang, theme);
61
- if (!this.#themes.loaded.has(theme)) throw new Error(`Theme ${theme} not loaded`);
78
+ const generated = typeof theme === "object" ? theme : void 0;
79
+ const name = typeof theme === "string" ? theme : "zaly-syntax";
80
+ await this.load(lang, generated ? [] : [name]);
81
+ if (!generated && !this.#themes.loaded.has(name)) throw new Error(`Theme ${name} not loaded`);
62
82
  if (!this.#langs.loaded.has(lang)) return code;
63
- const t = highlighter.getTheme(theme);
83
+ const t = highlighter.getTheme(name);
64
84
  let output = "";
65
- const lines = highlighter.codeToTokensBase(code, { lang });
85
+ const lines = highlighter.codeToTokensBase(code, {
86
+ lang,
87
+ theme: name
88
+ });
66
89
  for (const line of lines) {
67
90
  for (const token of line) {
68
91
  const text = token.content;
69
- const style = {
92
+ const style = generated ? { ...generated.styles[Number.parseInt((token.color ?? t.fg).slice(1), 16) - 1] } : {
70
93
  bg: token.bgColor,
71
94
  fg: token.color ?? t.fg
72
95
  };
73
96
  if (token.fontStyle) {
74
- if (token.fontStyle & 2) style.bold = true;
75
- if (token.fontStyle & 1) style.italic = true;
76
- if (token.fontStyle & 4) style.underline = true;
77
- if (token.fontStyle & 8) style.strikethrough = true;
97
+ if (token.fontStyle & FontStyle.Bold) style.bold = true;
98
+ if (token.fontStyle & FontStyle.Italic) style.italic = true;
99
+ if (token.fontStyle & FontStyle.Underline) style.underline = true;
100
+ if (token.fontStyle & FontStyle.Strikethrough) style.strikethrough = true;
78
101
  }
79
102
  output += openAnsi(style) + text + RESET;
80
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":["bundled"],"sources":["../../src/shiki/api.ts","../../src/shiki/server.ts"],"sourcesContent":["import type { AnsiStyle, HexColor } from \"../style/types.ts\"\nimport type { ShikiLanguage, ShikiTheme } from \"./types.ts\"\n\nimport { createHighlighterCore } from \"shiki/core\"\nimport { createOnigurumaEngine } from \"shiki/engine/oniguruma\"\nimport { bundledLanguages as bundled } from \"shiki/langs\"\nimport { isShikiLang, isShikiTheme } from \"../schemas/gen/shiki.ts\"\nimport { openAnsi, RESET } from \"../style/ansi.ts\"\n\nexport type AnsiHighlighter = (code: string, lang?: string) => string\n\nexport type ShikiStatus =\n | { loaded: true }\n | { loaded: false; missing: { langs: string[]; themes: string[] } }\n\ntype L = ShikiLanguage\ntype T = ShikiTheme\n\nconst THEME: ShikiTheme = \"tokyo-night\"\n\n// See: https://github.com/shikijs/vscode-textmate/blob/19dc9b889aa47df91027e857cdad518760b5a026/src/theme.ts#L326\nconst enum FontStyle {\n NotSet = -1,\n None = 0,\n Italic = 1,\n Bold = 2,\n Underline = 4,\n Strikethrough = 8,\n}\n\nconst highlighter = await createHighlighterCore({\n engine: await createOnigurumaEngine(import(\"shiki/wasm\")),\n langs: [],\n themes: [],\n warnings: false,\n})\n\nclass Shiki {\n #loading?: Promise<void>\n #langs = { loaded: new Set<L>(), wanted: new Set<L>() }\n #themes = { loaded: new Set<T>(), wanted: new Set<T>() }\n\n status(langs: string | string[], themes?: string | string[]): ShikiStatus {\n themes ??= []\n themes = Array.isArray(themes) ? themes : [themes]\n themes = themes.length > 0 ? themes : [THEME]\n langs = Array.isArray(langs) ? langs : [langs]\n langs = langs.filter(isShikiLang).filter((l) => !this.#langs.loaded.has(l))\n themes = themes.filter(isShikiTheme).filter((t) => !this.#themes.loaded.has(t))\n return { loaded: langs.length === 0 && themes.length === 0, missing: { langs, themes } }\n }\n\n async load(langs: string | string[], themes?: string | string[]) {\n const status = this.status(langs, themes)\n if (status.loaded) return\n\n for (const l of status.missing.langs) this.#langs.wanted.add(l as L)\n for (const t of status.missing.themes) this.#themes.wanted.add(t as T)\n\n if (this.status(langs, themes).loaded) return\n\n const load = async () => {\n const loadLangs = [...this.#langs.wanted]\n .filter((l) => !this.#langs.loaded.has(l))\n .map((l) => bundled[l]())\n\n const loadThemes = [...this.#themes.wanted]\n .filter((t) => !this.#themes.loaded.has(t))\n .map((t) => import(`shiki/themes/${t}.mjs`))\n\n if (loadLangs.length === 0 && loadThemes.length === 0) return\n\n await Promise.all([...loadLangs, ...loadThemes])\n\n if (loadLangs.length > 0) await highlighter.loadLanguage(...loadLangs)\n if (loadThemes.length > 0) await highlighter.loadTheme(...loadThemes)\n\n for (const l of highlighter.getLoadedLanguages()) this.#langs.loaded.add(l as L)\n for (const t of highlighter.getLoadedThemes()) this.#themes.loaded.add(t as T)\n }\n\n this.#loading = (this.#loading ?? Promise.resolve()).then(load, load)\n await this.#loading\n }\n\n async highlight(code: string, lang: string, theme = THEME) {\n await this.load(lang, theme)\n\n if (!this.#themes.loaded.has(theme)) throw new Error(`Theme ${theme} not loaded`)\n if (!this.#langs.loaded.has(lang as L)) return code\n\n const t = highlighter.getTheme(theme)\n let output = \"\"\n const lines = highlighter.codeToTokensBase(code, { lang: lang as L })\n\n for (const line of lines) {\n for (const token of line) {\n const text = token.content\n const style: AnsiStyle = {\n bg: token.bgColor as HexColor | undefined,\n fg: (token.color ?? t.fg) as HexColor | undefined,\n }\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Bold) style.bold = true\n if (token.fontStyle & FontStyle.Italic) style.italic = true\n if (token.fontStyle & FontStyle.Underline) style.underline = true\n if (token.fontStyle & FontStyle.Strikethrough) style.strikethrough = true\n }\n output += openAnsi(style) + text + RESET\n }\n output += \"\\n\"\n }\n return output.replace(/\\n+$/, \"\")\n }\n\n isLang(lang: string): lang is ShikiLanguage {\n return isShikiLang(lang)\n }\n\n isTheme(theme: string): theme is ShikiTheme {\n return isShikiTheme(theme)\n }\n}\n\nexport const shiki = new Shiki()\n","// oxlint-disable no-await-in-loop\nimport type { ShikiResult, ShikiWorkerRequest } from \"./types.ts\"\n\nimport { shiki } from \"./api.ts\"\nimport { workerHost } from \"./worker.ts\"\n\nasync function highlight(job: ShikiWorkerRequest): Promise<ShikiResult> {\n try {\n const value = await shiki.highlight(job.code, job.lang, job.theme)\n return { id: job.id, value }\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n id: job.id,\n value: job.code,\n }\n }\n}\n\nconst queue: ShikiWorkerRequest[] = []\n\nlet running: Promise<void> | undefined = undefined\n\nasync function run(): Promise<void> {\n // Serialize processing to not block the event loop with multiple concurrent highlights.\n while (queue.length) {\n // We do LIFO on purpose so that the visible code blocks are rendered first (last stream nodes)\n const req = queue.pop()!\n // oxlint-disable-next-line unicorn/require-post-message-target-origin\n workerHost.postMessage({ ...(await highlight(req)), type: \"result\" })\n await Promise.resolve() // yield to event loop between requests\n }\n}\n\nasync function handle(job: ShikiWorkerRequest): Promise<void> {\n queue.push(job)\n running ??= run().finally(() => {\n running = undefined\n })\n}\n\nworkerHost.onMessage((message: ShikiWorkerRequest) => handle(message))\n// oxlint-disable-next-line unicorn/require-post-message-target-origin\nworkerHost.postMessage({ type: \"ready\" })\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","names":["bundled"],"sources":["../../src/shiki/api.ts","../../src/shiki/server.ts"],"sourcesContent":["import type { AnsiStyle, HexColor } from \"../style/types.ts\"\nimport type { ShikiLanguage, ShikiTheme, ShikiThemeInput } from \"./types.ts\"\n\nimport { createHighlighterCore } from \"shiki/core\"\nimport { createOnigurumaEngine } from \"shiki/engine/oniguruma\"\nimport { bundledLanguages as bundled } from \"shiki/langs\"\nimport { isShikiLang, isShikiTheme } from \"../schemas/shiki.ts\"\nimport { openAnsi, RESET } from \"../style/ansi.ts\"\nimport { syntaxScopes } from \"./theme.ts\"\n\nexport type AnsiHighlighter = (code: string, lang?: string) => string\n\nexport type ShikiStatus =\n | { loaded: true }\n | { loaded: false; missing: { langs: string[]; themes: string[] } }\n\ntype L = ShikiLanguage\ntype T = ShikiTheme\n\nconst THEME: ShikiTheme = \"tokyo-night\"\n\n// See: https://github.com/shikijs/vscode-textmate/blob/19dc9b889aa47df91027e857cdad518760b5a026/src/theme.ts#L326\n// oxlint-disable-next-line sort-keys\nconst FontStyle = {\n NotSet: -1,\n None: 0,\n Italic: 1,\n Bold: 2,\n Underline: 4,\n Strikethrough: 8,\n} as const\n\nconst highlighter = await createHighlighterCore({\n engine: await createOnigurumaEngine(import(\"shiki/wasm\")),\n langs: [],\n // Marker colors carry semantic style indices, never actual terminal colors.\n themes: [\n {\n name: \"zaly-syntax\",\n settings: [\n { settings: { background: \"#000000\", foreground: \"#000001\" } },\n ...syntaxScopes.map(([, scope], i) => ({\n scope: [...scope],\n settings: { foreground: `#${(i + 2).toString(16).padStart(6, \"0\")}` },\n })),\n ],\n type: \"dark\",\n },\n ],\n warnings: false,\n})\n\nclass Shiki {\n #loading?: Promise<void>\n #langs = { loaded: new Set<L>(), wanted: new Set<L>() }\n #themes = { loaded: new Set<T>(), wanted: new Set<T>() }\n\n status(langs: string | string[], themes?: string | string[]): ShikiStatus {\n themes ??= [THEME]\n themes = Array.isArray(themes) ? themes : [themes]\n langs = Array.isArray(langs) ? langs : [langs]\n langs = langs.filter(isShikiLang).filter((l) => !this.#langs.loaded.has(l))\n themes = themes.filter(isShikiTheme).filter((t) => !this.#themes.loaded.has(t))\n return { loaded: langs.length === 0 && themes.length === 0, missing: { langs, themes } }\n }\n\n async load(langs: string | string[], themes?: string | string[]) {\n const status = this.status(langs, themes)\n if (status.loaded) return\n\n for (const l of status.missing.langs) this.#langs.wanted.add(l as L)\n for (const t of status.missing.themes) this.#themes.wanted.add(t as T)\n\n if (this.status(langs, themes).loaded) return\n\n const load = async () => {\n const loadLangs = [...this.#langs.wanted]\n .filter((l) => !this.#langs.loaded.has(l))\n .map((l) => bundled[l]())\n\n const loadThemes = [...this.#themes.wanted]\n .filter((t) => !this.#themes.loaded.has(t))\n .map((t) => import(`shiki/themes/${t}.mjs`))\n\n if (loadLangs.length === 0 && loadThemes.length === 0) return\n\n await Promise.all([...loadLangs, ...loadThemes])\n\n if (loadLangs.length > 0) await highlighter.loadLanguage(...loadLangs)\n if (loadThemes.length > 0) await highlighter.loadTheme(...loadThemes)\n\n for (const l of highlighter.getLoadedLanguages()) this.#langs.loaded.add(l as L)\n for (const t of highlighter.getLoadedThemes()) this.#themes.loaded.add(t as T)\n }\n\n this.#loading = (this.#loading ?? Promise.resolve()).then(load, load)\n await this.#loading\n }\n\n async highlight(code: string, lang: string, theme: ShikiThemeInput = THEME) {\n const generated = typeof theme === \"object\" ? theme : undefined\n const name = typeof theme === \"string\" ? theme : \"zaly-syntax\"\n await this.load(lang, generated ? [] : [name])\n\n if (!generated && !this.#themes.loaded.has(name as T))\n throw new Error(`Theme ${name} not loaded`)\n if (!this.#langs.loaded.has(lang as L)) return code\n\n const t = highlighter.getTheme(name)\n let output = \"\"\n const lines = highlighter.codeToTokensBase(code, { lang: lang as L, theme: name })\n\n for (const line of lines) {\n for (const token of line) {\n const text = token.content\n const style: AnsiStyle = generated\n ? { ...generated.styles[Number.parseInt((token.color ?? t.fg).slice(1), 16) - 1] }\n : {\n bg: token.bgColor as HexColor | undefined,\n fg: (token.color ?? t.fg) as HexColor | undefined,\n }\n if (token.fontStyle) {\n if (token.fontStyle & FontStyle.Bold) style.bold = true\n if (token.fontStyle & FontStyle.Italic) style.italic = true\n if (token.fontStyle & FontStyle.Underline) style.underline = true\n if (token.fontStyle & FontStyle.Strikethrough) style.strikethrough = true\n }\n output += openAnsi(style) + text + RESET\n }\n output += \"\\n\"\n }\n return output.replace(/\\n+$/, \"\")\n }\n\n isLang(lang: string): lang is ShikiLanguage {\n return isShikiLang(lang)\n }\n\n isTheme(theme: string): theme is ShikiTheme {\n return isShikiTheme(theme)\n }\n}\n\nexport const shiki = new Shiki()\n","// oxlint-disable no-await-in-loop\nimport type { ShikiResult, ShikiWorkerRequest } from \"./types.ts\"\n\nimport { shiki } from \"./api.ts\"\nimport { workerHost } from \"./worker.ts\"\n\nasync function highlight(job: ShikiWorkerRequest): Promise<ShikiResult> {\n try {\n const value = await shiki.highlight(job.code, job.lang, job.theme)\n return { id: job.id, value }\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n id: job.id,\n value: job.code,\n }\n }\n}\n\nconst queue: ShikiWorkerRequest[] = []\n\nlet running: Promise<void> | undefined = undefined\n\nasync function run(): Promise<void> {\n // Serialize processing to not block the event loop with multiple concurrent highlights.\n while (queue.length) {\n // We do LIFO on purpose so that the visible code blocks are rendered first (last stream nodes)\n const req = queue.pop()!\n // oxlint-disable-next-line unicorn/require-post-message-target-origin\n workerHost.postMessage({ ...(await highlight(req)), type: \"result\" })\n await Promise.resolve() // yield to event loop between requests\n }\n}\n\nasync function handle(job: ShikiWorkerRequest): Promise<void> {\n queue.push(job)\n running ??= run().finally(() => {\n running = undefined\n })\n}\n\nworkerHost.onMessage((message: ShikiWorkerRequest) => handle(message))\n// oxlint-disable-next-line unicorn/require-post-message-target-origin\nworkerHost.postMessage({ type: \"ready\" })\n"],"mappings":"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"}