@zaly/tui 0.0.11 → 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 (260) 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 +227 -732
  4. package/assets/themes/andromeeda.json +97 -0
  5. package/assets/themes/ayu-dark.json +31 -44
  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 +44 -60
  9. package/assets/themes/catppuccin-latte.json +44 -60
  10. package/assets/themes/catppuccin-macchiato.json +44 -60
  11. package/assets/themes/catppuccin-mocha.json +44 -60
  12. package/assets/themes/dark-plus.json +99 -0
  13. package/assets/themes/dracula.json +47 -66
  14. package/assets/themes/everforest-dark.json +28 -45
  15. package/assets/themes/everforest-light.json +28 -45
  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 -48
  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 -68
  36. package/assets/themes/kanagawa-lotus.json +105 -0
  37. package/assets/themes/kanagawa-wave.json +55 -68
  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 -64
  41. package/assets/themes/material-theme.json +102 -0
  42. package/assets/themes/min-dark.json +67 -28
  43. package/assets/themes/min-light.json +67 -32
  44. package/assets/themes/monokai.json +55 -67
  45. package/assets/themes/night-owl-light.json +105 -0
  46. package/assets/themes/night-owl.json +57 -68
  47. package/assets/themes/nord.json +53 -55
  48. package/assets/themes/one-dark-pro.json +46 -57
  49. package/assets/themes/one-light.json +52 -59
  50. package/assets/themes/poimandres.json +51 -68
  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 +51 -50
  54. package/assets/themes/solarized-dark.json +39 -51
  55. package/assets/themes/solarized-light.json +40 -52
  56. package/assets/themes/synthwave-84.json +48 -50
  57. package/assets/themes/tokyonight-day.json +6 -7
  58. package/assets/themes/tokyonight-moon.json +6 -6
  59. package/assets/themes/tokyonight-night.json +6 -6
  60. package/assets/themes/tokyonight-storm.json +6 -6
  61. package/assets/themes/vesper.json +51 -58
  62. package/assets/themes/vitesse-black.json +103 -0
  63. package/assets/themes/vitesse-dark.json +26 -49
  64. package/assets/themes/vitesse-light.json +26 -49
  65. package/dist/{actions-DFboj3g5.d.mts → actions--ODlgCQ5.d.mts} +4 -4
  66. package/dist/{actions-DFboj3g5.d.mts.map → actions--ODlgCQ5.d.mts.map} +1 -1
  67. package/dist/{ansi-Clq0ozyA.mjs → ansi-CMv71xVr.mjs} +38 -31
  68. package/dist/ansi-CMv71xVr.mjs.map +1 -0
  69. package/dist/ansi.d.mts +3 -1
  70. package/dist/ansi.d.mts.map +1 -1
  71. package/dist/ansi.mjs +1 -1
  72. package/dist/{autocomplete-CxzetPOo.d.mts → autocomplete-CD30kSe_.d.mts} +4 -4
  73. package/dist/{autocomplete-CxzetPOo.d.mts.map → autocomplete-CD30kSe_.d.mts.map} +1 -1
  74. package/dist/{box-DLEcEvDH.mjs → box-C_N_7ChP.mjs} +2 -2
  75. package/dist/box-C_N_7ChP.mjs.map +1 -0
  76. package/dist/builder-Chwtk0nQ.mjs +196 -0
  77. package/dist/builder-Chwtk0nQ.mjs.map +1 -0
  78. package/dist/{callbacks-D132G8dy.mjs → callbacks-DLecWn7G.mjs} +4 -4
  79. package/dist/{callbacks-D132G8dy.mjs.map → callbacks-DLecWn7G.mjs.map} +1 -1
  80. package/dist/client-CNGt-dOt.mjs +1 -0
  81. package/dist/{client-C2GXKfJ1.mjs → client-D7qz4TZt.mjs} +7 -3
  82. package/dist/client-D7qz4TZt.mjs.map +1 -0
  83. package/dist/color-DBMQLv4Y.mjs +37 -0
  84. package/dist/color-DBMQLv4Y.mjs.map +1 -0
  85. package/dist/{ctx-8Nuf5BrN.mjs → ctx-BaQ2hP5u.mjs} +3 -3
  86. package/dist/{ctx-8Nuf5BrN.mjs.map → ctx-BaQ2hP5u.mjs.map} +1 -1
  87. package/dist/ctx-CndlTp1T.mjs +1 -0
  88. package/dist/{divider-l0-JPEIm.mjs → divider-BlNNN2OS.mjs} +2 -2
  89. package/dist/divider-BlNNN2OS.mjs.map +1 -0
  90. package/dist/{files-BUsa-RVl.d.mts → files-B_5HDBPp.d.mts} +3 -3
  91. package/dist/{files-BUsa-RVl.d.mts.map → files-B_5HDBPp.d.mts.map} +1 -1
  92. package/dist/github-Cy2hfWJ7.mjs.map +1 -1
  93. package/dist/{github-D89A3F9U.d.mts → github-CyRwUQ3y.d.mts} +3 -3
  94. package/dist/{github-D89A3F9U.d.mts.map → github-CyRwUQ3y.d.mts.map} +1 -1
  95. package/dist/{image-34bU73bW.d.mts → image-BLls2F4t.d.mts} +2 -2
  96. package/dist/{image-34bU73bW.d.mts.map → image-BLls2F4t.d.mts.map} +1 -1
  97. package/dist/image-Cqtj3yRA.mjs +178 -0
  98. package/dist/image-Cqtj3yRA.mjs.map +1 -0
  99. package/dist/image.d.mts +1 -1
  100. package/dist/index.d.mts +13 -4
  101. package/dist/index.d.mts.map +1 -1
  102. package/dist/index.mjs +8 -7
  103. package/dist/index.mjs.map +1 -1
  104. package/dist/{input-D7fQEUdt.mjs → input-ET2YEMcl.mjs} +16 -11
  105. package/dist/input-ET2YEMcl.mjs.map +1 -0
  106. package/dist/{input-Dylds_sI.d.mts → input-NuD8TH8N.d.mts} +3 -3
  107. package/dist/{input-Dylds_sI.d.mts.map → input-NuD8TH8N.d.mts.map} +1 -1
  108. package/dist/{inspect-DPLRum7L.d.mts → inspect-B1uXxdKC.d.mts} +11 -15
  109. package/dist/inspect-B1uXxdKC.d.mts.map +1 -0
  110. package/dist/{inspect-CcgiZ_F9.mjs → inspect-Cxzs-W0g.mjs} +2 -2
  111. package/dist/{inspect-CcgiZ_F9.mjs.map → inspect-Cxzs-W0g.mjs.map} +1 -1
  112. package/dist/kitty-DKQYsQfH.mjs +1 -0
  113. package/dist/{log-Dy_QnPZF.mjs → log-B4djzy2m.mjs} +5 -5
  114. package/dist/log-B4djzy2m.mjs.map +1 -0
  115. package/dist/{logger-DvuX9DPS.mjs → logger-CvJCITzP.mjs} +3 -3
  116. package/dist/{logger-DvuX9DPS.mjs.map → logger-CvJCITzP.mjs.map} +1 -1
  117. package/dist/{markdown-BGPa7UzD.mjs → markdown-D3ZtRn6C.mjs} +9 -8
  118. package/dist/markdown-D3ZtRn6C.mjs.map +1 -0
  119. package/dist/markdown.d.mts +1 -1
  120. package/dist/markdown.d.mts.map +1 -1
  121. package/dist/markdown.mjs +1 -1
  122. package/dist/math-CU0wmC9N.mjs +1 -0
  123. package/dist/math-Dd7a1irv.mjs +206 -0
  124. package/dist/math-Dd7a1irv.mjs.map +1 -0
  125. package/dist/oklch-Bsh5swbC.mjs +99 -0
  126. package/dist/oklch-Bsh5swbC.mjs.map +1 -0
  127. package/dist/{overlay-9WXYiGgW.mjs → overlay-LvOjG7kn.mjs} +2 -2
  128. package/dist/{overlay-9WXYiGgW.mjs.map → overlay-LvOjG7kn.mjs.map} +1 -1
  129. package/dist/{picker-JL8lZfRH.d.mts → picker-B-OxKKnD.d.mts} +5 -5
  130. package/dist/{picker-JL8lZfRH.d.mts.map → picker-B-OxKKnD.d.mts.map} +1 -1
  131. package/dist/{picker-BqHINl_a.mjs → picker-f6xjgACX.mjs} +2 -2
  132. package/dist/{picker-BqHINl_a.mjs.map → picker-f6xjgACX.mjs.map} +1 -1
  133. package/dist/{queries-B_lOwEiE.mjs → queries-BUkBxkuM.mjs} +66 -3
  134. package/dist/queries-BUkBxkuM.mjs.map +1 -0
  135. package/dist/{queries-Cvalgu6P.d.mts → queries-C75-wG1B.d.mts} +42 -11
  136. package/dist/queries-C75-wG1B.d.mts.map +1 -0
  137. package/dist/{registry-3hLzS4ks.mjs → registry-DUWpSPoo.mjs} +208 -68
  138. package/dist/registry-DUWpSPoo.mjs.map +1 -0
  139. package/dist/{render-f7M2856V.mjs → render-B7LfNM5K.mjs} +2 -2
  140. package/dist/{render-f7M2856V.mjs.map → render-B7LfNM5K.mjs.map} +1 -1
  141. package/dist/{renderer-V6AGjbyf.mjs → renderer-BLsd-wrG.mjs} +167 -20
  142. package/dist/renderer-BLsd-wrG.mjs.map +1 -0
  143. package/dist/renderer-YHbR7JZ4.mjs +1 -0
  144. package/dist/{renderer-DesbRwjQ.mjs → renderer-aAtkFgll.mjs} +8 -7
  145. package/dist/renderer-aAtkFgll.mjs.map +1 -0
  146. package/dist/{select-zGd5pbiB.d.mts → select-BKE5LzdN.d.mts} +3 -3
  147. package/dist/{select-zGd5pbiB.d.mts.map → select-BKE5LzdN.d.mts.map} +1 -1
  148. package/dist/services/logger.d.mts +1 -1
  149. package/dist/services/logger.mjs +1 -1
  150. package/dist/services/notifier.d.mts +1 -1
  151. package/dist/services/notifier.mjs +2 -2
  152. package/dist/services/picker.d.mts +5 -5
  153. package/dist/services/picker.mjs +6 -6
  154. package/dist/services/prompt.d.mts +4 -4
  155. package/dist/services/prompt.mjs +5 -5
  156. package/dist/shiki/server.mjs +37 -14
  157. package/dist/shiki/server.mjs.map +1 -1
  158. package/dist/shiki-B4U0s8jT.mjs +635 -0
  159. package/dist/shiki-B4U0s8jT.mjs.map +1 -0
  160. package/dist/shiki-CJauRusM.mjs +20 -0
  161. package/dist/shiki-CJauRusM.mjs.map +1 -0
  162. package/dist/style-DslRHzI4.mjs +109 -0
  163. package/dist/style-DslRHzI4.mjs.map +1 -0
  164. package/dist/style.d.mts +4 -3
  165. package/dist/style.d.mts.map +1 -1
  166. package/dist/style.mjs +4 -4
  167. package/dist/{text-CRZD9KTN.mjs → text-BoJdKXLU.mjs} +2 -2
  168. package/dist/{text-CRZD9KTN.mjs.map → text-BoJdKXLU.mjs.map} +1 -1
  169. package/dist/{text-BefiXAFW.d.mts → text-CmxbA8lk.d.mts} +3 -3
  170. package/dist/{text-BefiXAFW.d.mts.map → text-CmxbA8lk.d.mts.map} +1 -1
  171. package/dist/{text-BLz1tRoC.mjs → text-DPrhma4x.mjs} +2 -2
  172. package/dist/text-DPrhma4x.mjs.map +1 -0
  173. package/dist/text.d.mts +1 -1
  174. package/dist/text.mjs +1 -1
  175. package/dist/theme-C8LkcoaK.mjs +61 -0
  176. package/dist/theme-C8LkcoaK.mjs.map +1 -0
  177. package/dist/theme-DVX8dvGG.mjs +1794 -0
  178. package/dist/theme-DVX8dvGG.mjs.map +1 -0
  179. package/dist/themes.d.mts +213 -73
  180. package/dist/themes.d.mts.map +1 -1
  181. package/dist/themes.mjs +1 -1
  182. package/dist/{tree-CArtDRec.d.mts → tree-CTvSpF9b.d.mts} +3 -3
  183. package/dist/{tree-CArtDRec.d.mts.map → tree-CTvSpF9b.d.mts.map} +1 -1
  184. package/dist/{types-C0EOLZDc.d.mts → types-C9ceMsbJ.d.mts} +137 -137
  185. package/dist/types-C9ceMsbJ.d.mts.map +1 -0
  186. package/dist/{widget-DtJU2-BJ.d.mts → widget-DlF32PRp.d.mts} +2 -2
  187. package/dist/{widget-DtJU2-BJ.d.mts.map → widget-DlF32PRp.d.mts.map} +1 -1
  188. package/dist/widgets/autocomplete.d.mts +1 -1
  189. package/dist/widgets/autocomplete.mjs +2 -2
  190. package/dist/widgets/box.d.mts +1 -1
  191. package/dist/widgets/box.mjs +1 -1
  192. package/dist/widgets/code.d.mts +4 -2
  193. package/dist/widgets/code.d.mts.map +1 -1
  194. package/dist/widgets/code.mjs +8 -7
  195. package/dist/widgets/code.mjs.map +1 -1
  196. package/dist/widgets/completions/actions.d.mts +1 -1
  197. package/dist/widgets/completions/files.d.mts +1 -1
  198. package/dist/widgets/completions/github.d.mts +1 -1
  199. package/dist/widgets/completions/index.d.mts +3 -3
  200. package/dist/widgets/diff.d.mts +2 -2
  201. package/dist/widgets/diff.d.mts.map +1 -1
  202. package/dist/widgets/diff.mjs +35 -12
  203. package/dist/widgets/diff.mjs.map +1 -1
  204. package/dist/widgets/divider.d.mts +3 -3
  205. package/dist/widgets/divider.mjs +1 -1
  206. package/dist/widgets/image.d.mts +1 -1
  207. package/dist/widgets/image.mjs +4 -4
  208. package/dist/widgets/image.mjs.map +1 -1
  209. package/dist/widgets/input.d.mts +1 -1
  210. package/dist/widgets/input.mjs +1 -1
  211. package/dist/widgets/log.d.mts +1 -1
  212. package/dist/widgets/log.mjs +1 -1
  213. package/dist/widgets/markdown.d.mts +4 -4
  214. package/dist/widgets/markdown.d.mts.map +1 -1
  215. package/dist/widgets/markdown.mjs +1 -1
  216. package/dist/widgets/overlay.d.mts +1 -1
  217. package/dist/widgets/overlay.mjs +1 -1
  218. package/dist/widgets/picker.d.mts +1 -1
  219. package/dist/widgets/picker.mjs +1 -1
  220. package/dist/widgets/progress.d.mts +4 -4
  221. package/dist/widgets/progress.mjs.map +1 -1
  222. package/dist/widgets/select.d.mts +1 -1
  223. package/dist/widgets/show.d.mts +1 -1
  224. package/dist/widgets/spinner.d.mts +2 -2
  225. package/dist/widgets/text.d.mts +1 -1
  226. package/dist/widgets/text.mjs +1 -1
  227. package/dist/widgets/tree.d.mts +1 -1
  228. package/dist/widgets/widget.d.mts +1 -1
  229. package/package.json +5 -7
  230. package/assets/themes/dracula-soft.json +0 -119
  231. package/assets/themes/github-dark.json +0 -123
  232. package/assets/themes/github-light.json +0 -123
  233. package/dist/ansi-Clq0ozyA.mjs.map +0 -1
  234. package/dist/box-DLEcEvDH.mjs.map +0 -1
  235. package/dist/builder-DC9byAmK.mjs +0 -386
  236. package/dist/builder-DC9byAmK.mjs.map +0 -1
  237. package/dist/client-C2GXKfJ1.mjs.map +0 -1
  238. package/dist/client-bzdHIDL2.mjs +0 -1
  239. package/dist/ctx-k0wTqeql.mjs +0 -1
  240. package/dist/divider-l0-JPEIm.mjs.map +0 -1
  241. package/dist/image-Cm5T-uw-.mjs +0 -108
  242. package/dist/image-Cm5T-uw-.mjs.map +0 -1
  243. package/dist/input-D7fQEUdt.mjs.map +0 -1
  244. package/dist/inspect-DPLRum7L.d.mts.map +0 -1
  245. package/dist/log-Dy_QnPZF.mjs.map +0 -1
  246. package/dist/markdown-BGPa7UzD.mjs.map +0 -1
  247. package/dist/queries-B_lOwEiE.mjs.map +0 -1
  248. package/dist/queries-Cvalgu6P.d.mts.map +0 -1
  249. package/dist/registry-3hLzS4ks.mjs.map +0 -1
  250. package/dist/renderer-BSMOuiLM.mjs +0 -1
  251. package/dist/renderer-DesbRwjQ.mjs.map +0 -1
  252. package/dist/renderer-V6AGjbyf.mjs.map +0 -1
  253. package/dist/shiki--ASSYv4_.mjs +0 -12
  254. package/dist/shiki--ASSYv4_.mjs.map +0 -1
  255. package/dist/shiki-D7l5--zz.mjs +0 -432
  256. package/dist/shiki-D7l5--zz.mjs.map +0 -1
  257. package/dist/text-BLz1tRoC.mjs.map +0 -1
  258. package/dist/theme.config-BKXX_noZ.mjs +0 -863
  259. package/dist/theme.config-BKXX_noZ.mjs.map +0 -1
  260. package/dist/types-C0EOLZDc.d.mts.map +0 -1
@@ -1,13 +1,14 @@
1
- import { C as useActiveOwner, E as withOwner, S as unwrap, _ as peek, d as createSuspenseBoundary, 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-3hLzS4ks.mjs";
3
- import { s as stripAnsiBg } from "./ansi-Clq0ozyA.mjs";
4
- import { t as styleBuilder } from "./builder-DC9byAmK.mjs";
5
- import { n as box } from "./box-DLEcEvDH.mjs";
6
- import { t as createCtx } from "./ctx-8Nuf5BrN.mjs";
7
- import { t as RenderContext } from "./render-f7M2856V.mjs";
8
- import { t as TuiReporter } from "./logger-DvuX9DPS.mjs";
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 { 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("<")) {
@@ -868,6 +937,21 @@ var Frame = class {
868
937
  terminal;
869
938
  #base = [];
870
939
  #current = [];
940
+ #colors = {
941
+ bg: "",
942
+ fg: ""
943
+ };
944
+ get defaultStyle() {
945
+ return this.#colors.fg + this.#colors.bg;
946
+ }
947
+ setDefaultStyle(fg, bg) {
948
+ if (this.#colors.fg === fg && this.#colors.bg === bg) return;
949
+ this.#colors = {
950
+ bg,
951
+ fg
952
+ };
953
+ this.#current.fill(void 0);
954
+ }
871
955
  constructor(terminal) {
872
956
  this.terminal = terminal;
873
957
  }
@@ -878,7 +962,7 @@ var Frame = class {
878
962
  begin() {
879
963
  const rows = this.terminal.rows;
880
964
  if (this.#current.length !== rows || this.#base.length !== rows) this.reset(rows);
881
- return new RenderFrame(this.terminal, this.#current, this.#base);
965
+ return new RenderFrame(this.terminal, this.#current, this.#base, this.#colors);
882
966
  }
883
967
  slice(row, from, to, width = this.terminal.cols) {
884
968
  return sliceLine(this.#current[row - 1] ?? "", from, to, width);
@@ -888,12 +972,17 @@ var RenderFrame = class {
888
972
  terminal;
889
973
  current;
890
974
  base;
975
+ defaults;
891
976
  #ops = [];
892
977
  #next;
893
- constructor(terminal, current, base) {
978
+ constructor(terminal, current, base, defaults = {
979
+ bg: "",
980
+ fg: ""
981
+ }) {
894
982
  this.terminal = terminal;
895
983
  this.current = current;
896
984
  this.base = base;
985
+ this.defaults = defaults;
897
986
  this.#next = base.map((row) => row ?? "");
898
987
  }
899
988
  get(row) {
@@ -936,12 +1025,15 @@ var RenderFrame = class {
936
1025
  for (let i = 0; i < this.#next.length; i++) this.base[i] = this.#next[i];
937
1026
  }
938
1027
  flush() {
1028
+ const defaults = this.defaults.fg + this.defaults.bg;
1029
+ const restore = defaults ? RESET + defaults : "";
939
1030
  for (let i = 0; i < this.#next.length; i++) {
940
1031
  const next = this.#next[i];
941
1032
  if (this.current[i] === next) continue;
942
1033
  const row = i + 1;
1034
+ const content = applyDefaultColors(next.trimEnd(), this.defaults.fg, this.defaults.bg);
943
1035
  this.queue((terminal) => {
944
- terminal.write(terminal.moveTo(row, 1) + terminal.clearLine() + next.trimEnd());
1036
+ terminal.write(terminal.moveTo(row, 1) + terminal.clearLine() + content + restore);
945
1037
  });
946
1038
  this.current[i] = next;
947
1039
  }
@@ -978,8 +1070,18 @@ var RenderFrame = class {
978
1070
  const ops = this.#ops.length;
979
1071
  this.flush();
980
1072
  const rows = this.#ops.length - ops;
981
- for (const op of this.#ops) op(this.terminal);
982
- this.#ops.length = 0;
1073
+ const defaults = this.defaults.fg + this.defaults.bg;
1074
+ if (this.#ops.length === 0) return {
1075
+ ops,
1076
+ rows
1077
+ };
1078
+ if (defaults) this.terminal.write(RESET + defaults);
1079
+ try {
1080
+ for (const op of this.#ops) op(this.terminal);
1081
+ } finally {
1082
+ if (defaults) this.terminal.write(RESET);
1083
+ this.#ops.length = 0;
1084
+ }
983
1085
  return {
984
1086
  ops,
985
1087
  rows
@@ -2031,7 +2133,7 @@ var Terminal = class {
2031
2133
  this.deleteImages();
2032
2134
  this.setProgress();
2033
2135
  if (this.#reserveBottom > 0) this.clearScrollRegion();
2034
- 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`);
2035
2137
  if (this.#altScreen) this.write(`${CSI}?1049l`);
2036
2138
  } finally {
2037
2139
  this.#started = false;
@@ -2320,12 +2422,17 @@ var Renderer = class extends Emitter {
2320
2422
  #decoder = new Decoder();
2321
2423
  #stdin;
2322
2424
  #theme = signal(void 0);
2425
+ #shiki;
2426
+ #systemTheme;
2427
+ #transparent = signal(false);
2323
2428
  /** Root Owner — every surface's function-shape `add` / `append` runs
2324
2429
  * its child under this Owner via `withOwner(#rootOwner, …)`, so
2325
2430
  * context values provided here (`RenderContext`, future global
2326
2431
  * scopes) are visible to every widget body in the tree. */
2327
2432
  #rootOwner;
2328
2433
  #running = false;
2434
+ #colorsWatcher;
2435
+ #canQueryColors;
2329
2436
  #escTimer;
2330
2437
  #rendering;
2331
2438
  #dirty = false;
@@ -2351,6 +2458,7 @@ var Renderer = class extends Emitter {
2351
2458
  } } };
2352
2459
  constructor(opts = {}) {
2353
2460
  super();
2461
+ this.#canQueryColors = !!((opts.stdout ?? process.stdout).isTTY && (opts.stdin ?? process.stdin).isTTY);
2354
2462
  this.terminal = new Terminal({
2355
2463
  altScreen: opts.altScreen,
2356
2464
  hookSignals: opts.hookSignals,
@@ -2359,7 +2467,9 @@ var Renderer = class extends Emitter {
2359
2467
  stdout: opts.stdout
2360
2468
  });
2361
2469
  this.frame = new Frame(this.terminal);
2362
- 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));
2472
+ this.#transparent.set(() => opts.transparent ?? false);
2363
2473
  this.ui = new UI(this);
2364
2474
  this.stream = new Stream(this, { fixedFooterHeight: opts.fixedFooterHeight });
2365
2475
  this.overlay = new OverlaySurface(this);
@@ -2375,6 +2485,13 @@ var Renderer = class extends Emitter {
2375
2485
  style: memo(() => styleBuilder(this.#theme.get())),
2376
2486
  theme: this.#theme.get
2377
2487
  });
2488
+ effect(() => {
2489
+ const theme = this.theme;
2490
+ const transparent = this.transparent;
2491
+ const previous = this.frame.defaultStyle;
2492
+ this.frame.setDefaultStyle(openStyle({ fg: opts.defaultStyle?.fg }, theme), openStyle({ bg: transparent ? void 0 : opts.defaultStyle?.bg }, theme));
2493
+ if (this.frame.defaultStyle !== previous) untrack(() => this.#schedule());
2494
+ });
2378
2495
  return useActiveOwner();
2379
2496
  });
2380
2497
  const reporter = new TuiReporter(opts.reporter);
@@ -2397,7 +2514,8 @@ var Renderer = class extends Emitter {
2397
2514
  this.#ctx = void 0;
2398
2515
  this.terminal.sync(() => {
2399
2516
  this.terminal.clearScrollRegion();
2400
- this.terminal.write(`${this.terminal.moveTo(1, 1)}\x1b[2J`);
2517
+ const defaults = this.frame.defaultStyle;
2518
+ this.terminal.write(`${defaults ? RESET + defaults : ""}${this.terminal.moveTo(1, 1)}\x1b[2J${defaults ? RESET : ""}`);
2401
2519
  if (this.terminal.reserveBottom > 0) this.terminal.setScrollRegion(1, this.terminal.scrollBottom);
2402
2520
  });
2403
2521
  this.frame.reset();
@@ -2453,7 +2571,8 @@ var Renderer = class extends Emitter {
2453
2571
  * Nodes that compare cache against `ctx.version` need the version
2454
2572
  * bump that already happens elsewhere on theme-driven invalidation. */
2455
2573
  set theme(theme) {
2456
- this.#theme.set(theme);
2574
+ this.#theme.set(this.#withShiki(theme.id === "system" ? this.#systemTheme ?? theme : theme));
2575
+ this.#syncSystemTheme();
2457
2576
  this.#ctxVersion++;
2458
2577
  this.stream.invalidate();
2459
2578
  this.ui.invalidate();
@@ -2464,6 +2583,32 @@ var Renderer = class extends Emitter {
2464
2583
  get theme() {
2465
2584
  return this.#theme.get() ?? defaultTheme;
2466
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
+ }
2604
+ /** Inherit the terminal background instead of painting the base background. */
2605
+ set transparent(transparent) {
2606
+ this.#transparent.set(transparent);
2607
+ }
2608
+ /** Current transparency setting. (tracked) */
2609
+ get transparent() {
2610
+ return unwrap(this.#transparent.get()) || this.theme.id === "system";
2611
+ }
2467
2612
  start() {
2468
2613
  if (this.#running) return;
2469
2614
  this.#running = true;
@@ -2471,6 +2616,7 @@ var Renderer = class extends Emitter {
2471
2616
  this.#stdin.setEncoding?.("utf8");
2472
2617
  this.#stdin.on("data", this.#onData);
2473
2618
  this.#stdin.resume?.();
2619
+ this.#syncSystemTheme();
2474
2620
  this.emit("start");
2475
2621
  if (this.#dirty) this.#schedule();
2476
2622
  process.on("unhandledRejection", (reason) => this.logger.child("unhandledRejection").error("Unhandled Rejection:", reason));
@@ -2479,6 +2625,7 @@ var Renderer = class extends Emitter {
2479
2625
  if (!this.#running) return;
2480
2626
  this.emit("stop");
2481
2627
  this.#running = false;
2628
+ this.#syncSystemTheme();
2482
2629
  this.#stdin.off("data", this.#onData);
2483
2630
  this.#stdin.pause?.();
2484
2631
  if (this.#escTimer !== void 0) {
@@ -2642,4 +2789,4 @@ var Renderer = class extends Emitter {
2642
2789
  //#endregion
2643
2790
  export { Renderer };
2644
2791
 
2645
- //# sourceMappingURL=renderer-V6AGjbyf.mjs.map
2792
+ //# sourceMappingURL=renderer-BLsd-wrG.mjs.map