@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,13 +1,14 @@
1
1
  import { C as useActiveOwner, E as withOwner, S as unwrap, _ as peek, d as createSuspenseBoundary, f as effect, h as memo, l as createRoot, n as SuspenseContext, o as createNode, v as provideContext, x as untrack, y as signal } from "./reactive-f7NpAi69.mjs";
2
- import { t as defaultTheme } from "./registry-D-suU3g0.mjs";
3
- import { c as stripAnsiBg, i as applyDefaultColors, t as RESET } from "./ansi-DZlXaItJ.mjs";
4
- import { n as openStyle, t as styleBuilder } from "./builder-1z5ewEWK.mjs";
5
- import { n as box } from "./box-BkP4MF82.mjs";
6
- import { t as createCtx } from "./ctx-B7BmPUCD.mjs";
7
- import { t as RenderContext } from "./render-DEIUNLkh.mjs";
8
- import { t as TuiReporter } from "./logger-DSQb0sLP.mjs";
2
+ import { i as systemTheme, t as defaultTheme } from "./registry-DUWpSPoo.mjs";
3
+ import { c as stripAnsiBg, i as applyDefaultColors, t as RESET } from "./ansi-CMv71xVr.mjs";
4
+ import { t as openStyle } from "./style-DslRHzI4.mjs";
5
+ import { t as styleBuilder } from "./builder-Chwtk0nQ.mjs";
6
+ import { n as box } from "./box-C_N_7ChP.mjs";
7
+ import { t as createCtx } from "./ctx-BaQ2hP5u.mjs";
8
+ import { t as RenderContext } from "./render-B7LfNM5K.mjs";
9
+ import { t as TuiReporter } from "./logger-CvJCITzP.mjs";
9
10
  import { o as bumpPlacements } from "./kitty-JbCJC0iQ.mjs";
10
- import { i as canonical, t as TerminalQueries } from "./queries-B_lOwEiE.mjs";
11
+ import { a as canonical, t as TerminalQueries } from "./queries-BUkBxkuM.mjs";
11
12
  import { Emitter } from "@zaly/shared";
12
13
  import { sliceAnsi, stringWidth, stripAnsi } from "@zaly/shared/ansi";
13
14
  import { inspect, isDeepStrictEqual } from "node:util";
@@ -225,6 +226,74 @@ var Actions = class extends Emitter {
225
226
  }
226
227
  };
227
228
  //#endregion
229
+ //#region src/input/colors.ts
230
+ /** One renderer run: coalesce updates, discard stale snapshots, and own cleanup. */
231
+ var ColorsWatcher = class {
232
+ queries;
233
+ input;
234
+ write;
235
+ update;
236
+ #ac = new AbortController();
237
+ #appearance;
238
+ #revision = 0;
239
+ #pending = false;
240
+ #running = false;
241
+ #previous = "";
242
+ constructor(queries, input, write, update) {
243
+ this.queries = queries;
244
+ this.input = input;
245
+ this.write = write;
246
+ this.update = update;
247
+ input.on("term-response", ({ event }) => {
248
+ if (event.kind !== "csi" || event.final !== "n" || !/^\?997(?:;[012])?$/.test(event.params)) return;
249
+ if (event.params === "?997") this.#queryAppearance();
250
+ if (event.params === "?997;1") this.#appearance = "dark";
251
+ if (event.params === "?997;2") this.#appearance = "light";
252
+ this.refresh();
253
+ }, { signal: this.#ac.signal });
254
+ input.on("terminal-focus", ({ gained }) => {
255
+ if (!gained) return;
256
+ this.#queryAppearance();
257
+ this.refresh();
258
+ }, { signal: this.#ac.signal });
259
+ write("\x1B[?2031h");
260
+ this.#queryAppearance();
261
+ this.refresh();
262
+ }
263
+ #queryAppearance() {
264
+ this.queries.colorScheme({ signal: this.#ac.signal });
265
+ }
266
+ refresh() {
267
+ if (this.#ac.signal.aborted) return;
268
+ this.#revision++;
269
+ this.#pending = true;
270
+ if (!this.#running) this.#refresh();
271
+ }
272
+ async #refresh() {
273
+ this.#running = true;
274
+ try {
275
+ while (this.#pending && !this.#ac.signal.aborted) {
276
+ this.#pending = false;
277
+ const revision = this.#revision;
278
+ const snapshot = await this.queries.palette({ signal: this.#ac.signal });
279
+ if (revision !== this.#revision) continue;
280
+ const key = JSON.stringify([snapshot, this.#appearance]);
281
+ if (key === this.#previous) continue;
282
+ this.#previous = key;
283
+ this.update(snapshot, this.#appearance);
284
+ }
285
+ } finally {
286
+ this.#running = false;
287
+ }
288
+ }
289
+ stop() {
290
+ if (this.#ac.signal.aborted) return;
291
+ this.#revision++;
292
+ this.#ac.abort();
293
+ this.write("\x1B[?2031l");
294
+ }
295
+ };
296
+ //#endregion
228
297
  //#region src/input/decoder.ts
229
298
  var Decoder = class {
230
299
  #pending = "";
@@ -394,7 +463,7 @@ const SS3_NAMES = {
394
463
  S: "f4"
395
464
  };
396
465
  function isTerminalCsiResponse(params, final) {
397
- return final === "c" && (params.startsWith("?") || params.startsWith(">"));
466
+ return final === "c" && (params.startsWith("?") || params.startsWith(">")) || final === "n" && /^\?997(?:;[012])?$/.test(params);
398
467
  }
399
468
  function handleCsi(params, final, out) {
400
469
  if ((final === "M" || final === "m") && params.startsWith("<")) {
@@ -2064,7 +2133,7 @@ var Terminal = class {
2064
2133
  this.deleteImages();
2065
2134
  this.setProgress();
2066
2135
  if (this.#reserveBottom > 0) this.clearScrollRegion();
2067
- this.write(`${CSI}?1007l${CSI}?1006l${CSI}?1002l${CSI}?1000l${CSI}?1004l${CSI}?2004l${CSI}?7h${CSI}?25h`);
2136
+ this.write(`${CSI}?1007l${CSI}?1006l${CSI}?1002l${CSI}?1000l${CSI}?1004l${CSI}?2004l${CSI}?2031l${CSI}?7h${CSI}?25h`);
2068
2137
  if (this.#altScreen) this.write(`${CSI}?1049l`);
2069
2138
  } finally {
2070
2139
  this.#started = false;
@@ -2353,6 +2422,8 @@ var Renderer = class extends Emitter {
2353
2422
  #decoder = new Decoder();
2354
2423
  #stdin;
2355
2424
  #theme = signal(void 0);
2425
+ #shiki;
2426
+ #systemTheme;
2356
2427
  #transparent = signal(false);
2357
2428
  /** Root Owner — every surface's function-shape `add` / `append` runs
2358
2429
  * its child under this Owner via `withOwner(#rootOwner, …)`, so
@@ -2360,6 +2431,8 @@ var Renderer = class extends Emitter {
2360
2431
  * scopes) are visible to every widget body in the tree. */
2361
2432
  #rootOwner;
2362
2433
  #running = false;
2434
+ #colorsWatcher;
2435
+ #canQueryColors;
2363
2436
  #escTimer;
2364
2437
  #rendering;
2365
2438
  #dirty = false;
@@ -2385,6 +2458,7 @@ var Renderer = class extends Emitter {
2385
2458
  } } };
2386
2459
  constructor(opts = {}) {
2387
2460
  super();
2461
+ this.#canQueryColors = !!((opts.stdout ?? process.stdout).isTTY && (opts.stdin ?? process.stdin).isTTY);
2388
2462
  this.terminal = new Terminal({
2389
2463
  altScreen: opts.altScreen,
2390
2464
  hookSignals: opts.hookSignals,
@@ -2393,7 +2467,8 @@ var Renderer = class extends Emitter {
2393
2467
  stdout: opts.stdout
2394
2468
  });
2395
2469
  this.frame = new Frame(this.terminal);
2396
- if (opts.theme) this.#theme.set(opts.theme);
2470
+ this.#shiki = opts.shiki ?? "auto";
2471
+ if (opts.theme || this.#shiki !== "auto") this.#theme.set(this.#withShiki(opts.theme ?? defaultTheme));
2397
2472
  this.#transparent.set(() => opts.transparent ?? false);
2398
2473
  this.ui = new UI(this);
2399
2474
  this.stream = new Stream(this, { fixedFooterHeight: opts.fixedFooterHeight });
@@ -2496,7 +2571,8 @@ var Renderer = class extends Emitter {
2496
2571
  * Nodes that compare cache against `ctx.version` need the version
2497
2572
  * bump that already happens elsewhere on theme-driven invalidation. */
2498
2573
  set theme(theme) {
2499
- this.#theme.set(theme);
2574
+ this.#theme.set(this.#withShiki(theme.id === "system" ? this.#systemTheme ?? theme : theme));
2575
+ this.#syncSystemTheme();
2500
2576
  this.#ctxVersion++;
2501
2577
  this.stream.invalidate();
2502
2578
  this.ui.invalidate();
@@ -2507,13 +2583,31 @@ var Renderer = class extends Emitter {
2507
2583
  get theme() {
2508
2584
  return this.#theme.get() ?? defaultTheme;
2509
2585
  }
2586
+ #withShiki(theme) {
2587
+ return this.#shiki === "auto" ? theme : {
2588
+ ...theme,
2589
+ shiki: this.#shiki
2590
+ };
2591
+ }
2592
+ #syncSystemTheme() {
2593
+ if (!this.#running || !this.#canQueryColors) {
2594
+ this.#colorsWatcher?.stop();
2595
+ this.#colorsWatcher = void 0;
2596
+ return;
2597
+ }
2598
+ if (peek(this.#theme.get)?.id !== "system") return;
2599
+ this.#colorsWatcher ??= new ColorsWatcher(this.queries, this.input, (sequence) => this.terminal.write(sequence), (snapshot, appearance) => {
2600
+ this.#systemTheme = systemTheme(snapshot, appearance);
2601
+ if (peek(this.#theme.get)?.id === "system") this.theme = this.#systemTheme;
2602
+ });
2603
+ }
2510
2604
  /** Inherit the terminal background instead of painting the base background. */
2511
2605
  set transparent(transparent) {
2512
2606
  this.#transparent.set(transparent);
2513
2607
  }
2514
2608
  /** Current transparency setting. (tracked) */
2515
2609
  get transparent() {
2516
- return unwrap(this.#transparent.get());
2610
+ return unwrap(this.#transparent.get()) || this.theme.id === "system";
2517
2611
  }
2518
2612
  start() {
2519
2613
  if (this.#running) return;
@@ -2522,6 +2616,7 @@ var Renderer = class extends Emitter {
2522
2616
  this.#stdin.setEncoding?.("utf8");
2523
2617
  this.#stdin.on("data", this.#onData);
2524
2618
  this.#stdin.resume?.();
2619
+ this.#syncSystemTheme();
2525
2620
  this.emit("start");
2526
2621
  if (this.#dirty) this.#schedule();
2527
2622
  process.on("unhandledRejection", (reason) => this.logger.child("unhandledRejection").error("Unhandled Rejection:", reason));
@@ -2530,6 +2625,7 @@ var Renderer = class extends Emitter {
2530
2625
  if (!this.#running) return;
2531
2626
  this.emit("stop");
2532
2627
  this.#running = false;
2628
+ this.#syncSystemTheme();
2533
2629
  this.#stdin.off("data", this.#onData);
2534
2630
  this.#stdin.pause?.();
2535
2631
  if (this.#escTimer !== void 0) {
@@ -2693,4 +2789,4 @@ var Renderer = class extends Emitter {
2693
2789
  //#endregion
2694
2790
  export { Renderer };
2695
2791
 
2696
- //# sourceMappingURL=renderer-zDNlAovy.mjs.map
2792
+ //# sourceMappingURL=renderer-BLsd-wrG.mjs.map