@navios/commander-tui 1.3.0 → 1.4.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 (240) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/{src/__tests__/mocks/scm-mock.ts → dist/base/src/__tests__/mocks/scm-mock.d.ts} +3 -1
  3. package/dist/base/src/__tests__/mocks/scm-mock.d.ts.map +1 -0
  4. package/dist/base/src/__tests__/setup.d.ts +2 -0
  5. package/dist/base/src/__tests__/setup.d.ts.map +1 -0
  6. package/dist/base/src/__tests__/utils/factories.d.ts +67 -0
  7. package/dist/base/src/__tests__/utils/factories.d.ts.map +1 -0
  8. package/dist/base/src/__tests__/utils/render-utils.d.ts +21 -0
  9. package/dist/base/src/__tests__/utils/render-utils.d.ts.map +1 -0
  10. package/dist/base/src/__tests__/utils/test-container.d.ts +20 -0
  11. package/dist/base/src/__tests__/utils/test-container.d.ts.map +1 -0
  12. package/dist/base/src/adapters/interface.d.ts +9 -2
  13. package/dist/base/src/adapters/interface.d.ts.map +1 -1
  14. package/dist/base/src/overrides/missing-adapter.override.d.ts +10 -0
  15. package/dist/base/src/overrides/missing-adapter.override.d.ts.map +1 -1
  16. package/dist/base/src/schemas/logger-options.d.ts +1 -1
  17. package/dist/base/src/services/index.d.ts +1 -0
  18. package/dist/base/src/services/index.d.ts.map +1 -1
  19. package/dist/base/src/services/logger.d.ts.map +1 -1
  20. package/dist/base/src/services/readline_prompt.d.ts +27 -0
  21. package/dist/base/src/services/readline_prompt.d.ts.map +1 -0
  22. package/dist/base/src/services/screen.d.ts +14 -8
  23. package/dist/base/src/services/screen.d.ts.map +1 -1
  24. package/dist/base/src/services/screen_manager.d.ts +62 -12
  25. package/dist/base/src/services/screen_manager.d.ts.map +1 -1
  26. package/dist/base/src/types/events.types.d.ts +40 -0
  27. package/dist/base/src/types/events.types.d.ts.map +1 -0
  28. package/dist/base/src/types/index.d.ts +1 -0
  29. package/dist/base/src/types/index.d.ts.map +1 -1
  30. package/dist/base/src/types/screen.types.d.ts +28 -0
  31. package/dist/base/src/types/screen.types.d.ts.map +1 -1
  32. package/dist/base/src/utils/colors/helpers.d.ts +0 -16
  33. package/dist/base/src/utils/colors/helpers.d.ts.map +1 -1
  34. package/dist/base/src/utils/index.d.ts +2 -0
  35. package/dist/base/src/utils/index.d.ts.map +1 -1
  36. package/dist/base/src/utils/prompt.d.ts +7 -0
  37. package/dist/base/src/utils/prompt.d.ts.map +1 -0
  38. package/dist/base/src/utils/runtime.d.ts +10 -0
  39. package/dist/base/src/utils/runtime.d.ts.map +1 -0
  40. package/dist/base/src/utils/stdout-printer.d.ts +5 -0
  41. package/dist/base/src/utils/stdout-printer.d.ts.map +1 -1
  42. package/dist/base/tsconfig.base.tsbuildinfo +1 -1
  43. package/dist/base/tsconfig.tsbuildinfo +1 -0
  44. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts +28 -0
  45. package/dist/ink/src/adapters/ink/components/file/file_log.d.ts.map +1 -0
  46. package/dist/ink/src/adapters/ink/components/file/index.d.ts +2 -0
  47. package/dist/ink/src/adapters/ink/components/file/index.d.ts.map +1 -0
  48. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts +7 -0
  49. package/dist/ink/src/adapters/ink/components/filter/filter_bar.d.ts.map +1 -0
  50. package/dist/ink/src/adapters/ink/components/filter/index.d.ts +2 -0
  51. package/dist/ink/src/adapters/ink/components/filter/index.d.ts.map +1 -0
  52. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts +6 -0
  53. package/dist/ink/src/adapters/ink/components/help/help_overlay.d.ts.map +1 -0
  54. package/dist/ink/src/adapters/ink/components/help/index.d.ts +2 -0
  55. package/dist/ink/src/adapters/ink/components/help/index.d.ts.map +1 -0
  56. package/dist/ink/src/adapters/ink/components/index.d.ts +9 -0
  57. package/dist/ink/src/adapters/ink/components/index.d.ts.map +1 -0
  58. package/dist/ink/src/adapters/ink/components/log/index.d.ts +2 -0
  59. package/dist/ink/src/adapters/ink/components/log/index.d.ts.map +1 -0
  60. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts +15 -0
  61. package/dist/ink/src/adapters/ink/components/log/log_message.d.ts.map +1 -0
  62. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts +2 -0
  63. package/dist/ink/src/adapters/ink/components/prompt/index.d.ts.map +1 -0
  64. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts +6 -0
  65. package/dist/ink/src/adapters/ink/components/prompt/prompt_renderer.d.ts.map +1 -0
  66. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts +14 -0
  67. package/dist/ink/src/adapters/ink/components/screen/group_renderer.d.ts.map +1 -0
  68. package/dist/ink/src/adapters/ink/components/screen/index.d.ts +7 -0
  69. package/dist/ink/src/adapters/ink/components/screen/index.d.ts.map +1 -0
  70. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts +6 -0
  71. package/dist/ink/src/adapters/ink/components/screen/loading_message.d.ts.map +1 -0
  72. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts +6 -0
  73. package/dist/ink/src/adapters/ink/components/screen/message_renderer.d.ts.map +1 -0
  74. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts +6 -0
  75. package/dist/ink/src/adapters/ink/components/screen/progress_message.d.ts.map +1 -0
  76. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts +14 -0
  77. package/dist/ink/src/adapters/ink/components/screen/screen_bridge.d.ts.map +1 -0
  78. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts +6 -0
  79. package/dist/ink/src/adapters/ink/components/screen/table_message.d.ts.map +1 -0
  80. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts +8 -0
  81. package/dist/ink/src/adapters/ink/components/screen_manager_bridge.d.ts.map +1 -0
  82. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts +4 -0
  83. package/dist/ink/src/adapters/ink/components/sidebar/index.d.ts.map +1 -0
  84. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts +11 -0
  85. package/dist/ink/src/adapters/ink/components/sidebar/sidebar.d.ts.map +1 -0
  86. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts +9 -0
  87. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_item.d.ts.map +1 -0
  88. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts +2 -0
  89. package/dist/ink/src/adapters/ink/components/sidebar/sidebar_separator.d.ts.map +1 -0
  90. package/dist/ink/src/adapters/ink/context/index.d.ts +2 -0
  91. package/dist/ink/src/adapters/ink/context/index.d.ts.map +1 -0
  92. package/dist/ink/src/adapters/ink/context/logger_context.d.ts +33 -0
  93. package/dist/ink/src/adapters/ink/context/logger_context.d.ts.map +1 -0
  94. package/dist/ink/src/adapters/ink/hooks/index.d.ts +2 -0
  95. package/dist/ink/src/adapters/ink/hooks/index.d.ts.map +1 -0
  96. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts +7 -0
  97. package/dist/ink/src/adapters/ink/hooks/use_theme.d.ts.map +1 -0
  98. package/dist/ink/src/adapters/ink/index.d.ts +18 -0
  99. package/dist/ink/src/adapters/ink/index.d.ts.map +1 -0
  100. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts +4 -0
  101. package/dist/ink/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  102. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  103. package/dist/ink/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  104. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  105. package/dist/ink/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  106. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  107. package/dist/ink/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  108. package/dist/ink/src/adapters/react-shared/index.d.ts +2 -0
  109. package/dist/ink/src/adapters/react-shared/index.d.ts.map +1 -0
  110. package/dist/ink/tsconfig.ink.tsbuildinfo +1 -0
  111. package/dist/react/src/adapters/react-shared/hooks/index.d.ts +4 -0
  112. package/dist/react/src/adapters/react-shared/hooks/index.d.ts.map +1 -0
  113. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts +18 -0
  114. package/dist/react/src/adapters/react-shared/hooks/use_filter_state.d.ts.map +1 -0
  115. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts +26 -0
  116. package/dist/react/src/adapters/react-shared/hooks/use_keyboard_manager.d.ts.map +1 -0
  117. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts +7 -0
  118. package/dist/react/src/adapters/react-shared/hooks/use_manager_subscription.d.ts.map +1 -0
  119. package/dist/react/src/adapters/react-shared/index.d.ts +2 -0
  120. package/dist/react/src/adapters/react-shared/index.d.ts.map +1 -0
  121. package/dist/react/tsconfig.react.tsbuildinfo +1 -1
  122. package/dist/solid/tsconfig.solid.tsbuildinfo +1 -1
  123. package/lib/index.cjs +2177 -178
  124. package/lib/index.cjs.map +1 -1
  125. package/lib/index.d.cts +942 -78
  126. package/lib/index.d.cts.map +1 -0
  127. package/lib/index.d.mts +902 -38
  128. package/lib/index.d.mts.map +1 -0
  129. package/lib/index.mjs +2098 -135
  130. package/lib/index.mjs.map +1 -1
  131. package/package.json +1 -31
  132. package/src/__tests__/services/logger.spec.ts +32 -0
  133. package/src/__tests__/services/screen.spec.ts +106 -95
  134. package/src/__tests__/utils/factories.ts +2 -0
  135. package/src/adapters/interface.ts +10 -2
  136. package/src/overrides/missing-adapter.override.ts +16 -6
  137. package/src/services/index.ts +1 -0
  138. package/src/services/logger.ts +7 -1
  139. package/src/services/readline_prompt.ts +194 -0
  140. package/src/services/screen.ts +106 -54
  141. package/src/services/screen_manager.ts +282 -74
  142. package/src/types/events.types.ts +84 -0
  143. package/src/types/index.ts +3 -0
  144. package/src/types/screen.types.ts +34 -0
  145. package/src/utils/colors/helpers.ts +0 -25
  146. package/src/utils/index.ts +6 -0
  147. package/src/utils/prompt.ts +18 -0
  148. package/src/utils/runtime.ts +14 -0
  149. package/src/utils/stdout-printer.ts +16 -5
  150. package/tsconfig.base.json +1 -17
  151. package/tsconfig.json +1 -6
  152. package/tsdown.config.mts +13 -70
  153. package/lib/adapters/react/index.cjs +0 -1768
  154. package/lib/adapters/react/index.cjs.map +0 -1
  155. package/lib/adapters/react/index.d.cts +0 -80
  156. package/lib/adapters/react/index.d.mts +0 -80
  157. package/lib/adapters/react/index.mjs +0 -1760
  158. package/lib/adapters/react/index.mjs.map +0 -1
  159. package/lib/adapters/solid/index.cjs +0 -3855
  160. package/lib/adapters/solid/index.cjs.map +0 -1
  161. package/lib/adapters/solid/index.d.cts +0 -74
  162. package/lib/adapters/solid/index.d.mts +0 -74
  163. package/lib/adapters/solid/index.mjs +0 -3847
  164. package/lib/adapters/solid/index.mjs.map +0 -1
  165. package/lib/filter_engine-DXqu9Vaq.cjs +0 -1836
  166. package/lib/filter_engine-DXqu9Vaq.cjs.map +0 -1
  167. package/lib/filter_engine-DmqhEhpA.mjs +0 -1609
  168. package/lib/filter_engine-DmqhEhpA.mjs.map +0 -1
  169. package/lib/interface-CTHQ08aY.d.mts +0 -699
  170. package/lib/interface-DQEIz9Mb.d.cts +0 -699
  171. package/src/__tests__/components/__snapshots__/filter_bar.spec.tsx.snap +0 -2293
  172. package/src/__tests__/components/__snapshots__/loading_message.spec.tsx.snap +0 -1414
  173. package/src/__tests__/components/__snapshots__/log_message.spec.tsx.snap +0 -3245
  174. package/src/__tests__/components/__snapshots__/progress_message.spec.tsx.snap +0 -1783
  175. package/src/__tests__/components/__snapshots__/prompt_renderer.spec.tsx.snap +0 -3203
  176. package/src/__tests__/components/__snapshots__/sidebar.spec.tsx.snap +0 -2857
  177. package/src/__tests__/components/filter_bar.spec.tsx +0 -190
  178. package/src/__tests__/components/loading_message.spec.tsx +0 -110
  179. package/src/__tests__/components/log_message.spec.tsx +0 -166
  180. package/src/__tests__/components/progress_message.spec.tsx +0 -147
  181. package/src/__tests__/components/prompt_renderer.spec.tsx +0 -274
  182. package/src/__tests__/components/sidebar.spec.tsx +0 -322
  183. package/src/__tests__/utils/render-utils.tsx +0 -39
  184. package/src/adapters/react/components/file/file_log.tsx +0 -241
  185. package/src/adapters/react/components/file/index.ts +0 -1
  186. package/src/adapters/react/components/filter/filter_bar.tsx +0 -79
  187. package/src/adapters/react/components/filter/index.ts +0 -1
  188. package/src/adapters/react/components/help/help_overlay.tsx +0 -100
  189. package/src/adapters/react/components/help/index.ts +0 -1
  190. package/src/adapters/react/components/log/index.ts +0 -1
  191. package/src/adapters/react/components/log/log_message.tsx +0 -102
  192. package/src/adapters/react/components/prompt/index.ts +0 -2
  193. package/src/adapters/react/components/prompt/prompt_renderer.tsx +0 -346
  194. package/src/adapters/react/components/screen/group_renderer.tsx +0 -64
  195. package/src/adapters/react/components/screen/index.ts +0 -6
  196. package/src/adapters/react/components/screen/loading_message.tsx +0 -43
  197. package/src/adapters/react/components/screen/message_renderer.tsx +0 -108
  198. package/src/adapters/react/components/screen/progress_message.tsx +0 -60
  199. package/src/adapters/react/components/screen/screen_bridge.tsx +0 -149
  200. package/src/adapters/react/components/screen/table_message.tsx +0 -57
  201. package/src/adapters/react/components/screen_manager_bridge.tsx +0 -245
  202. package/src/adapters/react/components/sidebar/index.ts +0 -3
  203. package/src/adapters/react/components/sidebar/sidebar.tsx +0 -102
  204. package/src/adapters/react/components/sidebar/sidebar_item.tsx +0 -50
  205. package/src/adapters/react/components/sidebar/sidebar_separator.tsx +0 -13
  206. package/src/adapters/react/context/index.ts +0 -1
  207. package/src/adapters/react/context/logger_context.tsx +0 -109
  208. package/src/adapters/react/hooks/index.ts +0 -1
  209. package/src/adapters/react/hooks/use_theme.ts +0 -12
  210. package/src/adapters/react/index.ts +0 -39
  211. package/src/adapters/solid/components/file/file_log.tsx +0 -221
  212. package/src/adapters/solid/components/file/index.ts +0 -1
  213. package/src/adapters/solid/components/filter/filter_bar.tsx +0 -84
  214. package/src/adapters/solid/components/filter/index.ts +0 -1
  215. package/src/adapters/solid/components/help/help_overlay.tsx +0 -106
  216. package/src/adapters/solid/components/help/index.ts +0 -1
  217. package/src/adapters/solid/components/log/index.ts +0 -1
  218. package/src/adapters/solid/components/log/log_message.tsx +0 -92
  219. package/src/adapters/solid/components/prompt/index.ts +0 -2
  220. package/src/adapters/solid/components/prompt/prompt_renderer.tsx +0 -350
  221. package/src/adapters/solid/components/screen/group_renderer.tsx +0 -61
  222. package/src/adapters/solid/components/screen/index.ts +0 -6
  223. package/src/adapters/solid/components/screen/loading_message.tsx +0 -39
  224. package/src/adapters/solid/components/screen/message_renderer.tsx +0 -122
  225. package/src/adapters/solid/components/screen/progress_message.tsx +0 -61
  226. package/src/adapters/solid/components/screen/screen_bridge.tsx +0 -155
  227. package/src/adapters/solid/components/screen/table_message.tsx +0 -58
  228. package/src/adapters/solid/components/screen_manager_bridge.tsx +0 -243
  229. package/src/adapters/solid/components/sidebar/index.ts +0 -3
  230. package/src/adapters/solid/components/sidebar/sidebar.tsx +0 -108
  231. package/src/adapters/solid/components/sidebar/sidebar_item.tsx +0 -55
  232. package/src/adapters/solid/components/sidebar/sidebar_separator.tsx +0 -13
  233. package/src/adapters/solid/context/index.ts +0 -2
  234. package/src/adapters/solid/context/logger_context.tsx +0 -95
  235. package/src/adapters/solid/hooks/index.ts +0 -1
  236. package/src/adapters/solid/hooks/use_theme.ts +0 -12
  237. package/src/adapters/solid/index.tsx +0 -43
  238. package/src/adapters/solid/jsx.d.ts +0 -98
  239. package/tsconfig.react.json +0 -16
  240. package/tsconfig.solid.json +0 -16
@@ -1,3847 +0,0 @@
1
- import { E as TABLE_COLORS, F as VARIANT_COLORS, I as ALL_LOG_LEVELS, L as createDefaultFilterState, P as ERROR_HIGHLIGHT_COLORS, R as hasActiveFilter, a as formatKeyBinding, b as resolveFiletype, i as KeyboardManager, k as HEADER_COLORS, m as Adapter, n as createDefaultBindings, p as darkTheme, r as handlePrintableInput, t as FilterEngine, u as resolveTheme } from "../../filter_engine-DmqhEhpA.mjs";
2
- import { ASCIIFontRenderable, BaseRenderable, BoxRenderable, CliRenderer, CodeRenderable, DiffRenderable, InputRenderable, InputRenderableEvents, LineNumberRenderable, Renderable, RootTextNodeRenderable, ScrollBoxRenderable, SelectRenderable, SelectRenderableEvents, SyntaxStyle, TabSelectRenderable, TabSelectRenderableEvents, TextAttributes, TextNodeRenderable, TextRenderable, TextareaRenderable, Yoga, createCliRenderer, createTextAttributes, engine, isTextNodeRenderable, parseColor } from "@opentui/core";
3
- import { Injectable } from "@navios/core";
4
- import "@opentui/core/testing";
5
-
6
- //#region ../../node_modules/solid-js/dist/solid.js
7
- const sharedConfig = {
8
- context: void 0,
9
- registry: void 0,
10
- effects: void 0,
11
- done: false,
12
- getContextId() {
13
- return getContextId(this.context.count);
14
- },
15
- getNextContextId() {
16
- return getContextId(this.context.count++);
17
- }
18
- };
19
- function getContextId(count) {
20
- const num = String(count), len = num.length - 1;
21
- return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : "") + num;
22
- }
23
- function setHydrateContext(context) {
24
- sharedConfig.context = context;
25
- }
26
- function nextHydrateContext() {
27
- return {
28
- ...sharedConfig.context,
29
- id: sharedConfig.getNextContextId(),
30
- count: 0
31
- };
32
- }
33
- const equalFn = (a, b) => a === b;
34
- const $PROXY = Symbol("solid-proxy");
35
- const SUPPORTS_PROXY = typeof Proxy === "function";
36
- const $TRACK = Symbol("solid-track");
37
- const signalOptions = { equals: equalFn };
38
- let ERROR = null;
39
- let runEffects = runQueue;
40
- const STALE = 1;
41
- const PENDING = 2;
42
- const UNOWNED = {
43
- owned: null,
44
- cleanups: null,
45
- context: null,
46
- owner: null
47
- };
48
- var Owner = null;
49
- let Transition = null;
50
- let Scheduler = null;
51
- let ExternalSourceConfig = null;
52
- let Listener = null;
53
- let Updates = null;
54
- let Effects = null;
55
- let ExecCount = 0;
56
- function createRoot(fn, detachedOwner) {
57
- const listener = Listener, owner = Owner, unowned = fn.length === 0, current = detachedOwner === void 0 ? owner : detachedOwner, root = unowned ? UNOWNED : {
58
- owned: null,
59
- cleanups: null,
60
- context: current ? current.context : null,
61
- owner: current
62
- }, updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));
63
- Owner = root;
64
- Listener = null;
65
- try {
66
- return runUpdates(updateFn, true);
67
- } finally {
68
- Listener = listener;
69
- Owner = owner;
70
- }
71
- }
72
- function createSignal(value, options) {
73
- options = options ? Object.assign({}, signalOptions, options) : signalOptions;
74
- const s = {
75
- value,
76
- observers: null,
77
- observerSlots: null,
78
- comparator: options.equals || void 0
79
- };
80
- const setter = (value$1) => {
81
- if (typeof value$1 === "function") if (Transition && Transition.running && Transition.sources.has(s)) value$1 = value$1(s.tValue);
82
- else value$1 = value$1(s.value);
83
- return writeSignal(s, value$1);
84
- };
85
- return [readSignal.bind(s), setter];
86
- }
87
- function createRenderEffect(fn, value, options) {
88
- const c = createComputation(fn, value, false, STALE);
89
- if (Scheduler && Transition && Transition.running) Updates.push(c);
90
- else updateComputation(c);
91
- }
92
- function createEffect(fn, value, options) {
93
- runEffects = runUserEffects;
94
- const c = createComputation(fn, value, false, STALE), s = SuspenseContext && useContext(SuspenseContext);
95
- if (s) c.suspense = s;
96
- if (!options || !options.render) c.user = true;
97
- Effects ? Effects.push(c) : updateComputation(c);
98
- }
99
- function createMemo(fn, value, options) {
100
- options = options ? Object.assign({}, signalOptions, options) : signalOptions;
101
- const c = createComputation(fn, value, true, 0);
102
- c.observers = null;
103
- c.observerSlots = null;
104
- c.comparator = options.equals || void 0;
105
- if (Scheduler && Transition && Transition.running) {
106
- c.tState = STALE;
107
- Updates.push(c);
108
- } else updateComputation(c);
109
- return readSignal.bind(c);
110
- }
111
- function untrack(fn) {
112
- if (!ExternalSourceConfig && Listener === null) return fn();
113
- const listener = Listener;
114
- Listener = null;
115
- try {
116
- if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);
117
- return fn();
118
- } finally {
119
- Listener = listener;
120
- }
121
- }
122
- function onMount(fn) {
123
- createEffect(() => untrack(fn));
124
- }
125
- function onCleanup(fn) {
126
- if (Owner === null);
127
- else if (Owner.cleanups === null) Owner.cleanups = [fn];
128
- else Owner.cleanups.push(fn);
129
- return fn;
130
- }
131
- function startTransition(fn) {
132
- if (Transition && Transition.running) {
133
- fn();
134
- return Transition.done;
135
- }
136
- const l = Listener;
137
- const o = Owner;
138
- return Promise.resolve().then(() => {
139
- Listener = l;
140
- Owner = o;
141
- let t;
142
- if (Scheduler || SuspenseContext) {
143
- t = Transition || (Transition = {
144
- sources: /* @__PURE__ */ new Set(),
145
- effects: [],
146
- promises: /* @__PURE__ */ new Set(),
147
- disposed: /* @__PURE__ */ new Set(),
148
- queue: /* @__PURE__ */ new Set(),
149
- running: true
150
- });
151
- t.done || (t.done = new Promise((res) => t.resolve = res));
152
- t.running = true;
153
- }
154
- runUpdates(fn, false);
155
- Listener = Owner = null;
156
- return t ? t.done : void 0;
157
- });
158
- }
159
- const [transPending, setTransPending] = /* @__PURE__ */ createSignal(false);
160
- function createContext(defaultValue, options) {
161
- const id = Symbol("context");
162
- return {
163
- id,
164
- Provider: createProvider(id),
165
- defaultValue
166
- };
167
- }
168
- function useContext(context) {
169
- let value;
170
- return Owner && Owner.context && (value = Owner.context[context.id]) !== void 0 ? value : context.defaultValue;
171
- }
172
- function children(fn) {
173
- const children$1 = createMemo(fn);
174
- const memo$1 = createMemo(() => resolveChildren(children$1()));
175
- memo$1.toArray = () => {
176
- const c = memo$1();
177
- return Array.isArray(c) ? c : c != null ? [c] : [];
178
- };
179
- return memo$1;
180
- }
181
- let SuspenseContext;
182
- function readSignal() {
183
- const runningTransition = Transition && Transition.running;
184
- if (this.sources && (runningTransition ? this.tState : this.state)) if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);
185
- else {
186
- const updates = Updates;
187
- Updates = null;
188
- runUpdates(() => lookUpstream(this), false);
189
- Updates = updates;
190
- }
191
- if (Listener) {
192
- const sSlot = this.observers ? this.observers.length : 0;
193
- if (!Listener.sources) {
194
- Listener.sources = [this];
195
- Listener.sourceSlots = [sSlot];
196
- } else {
197
- Listener.sources.push(this);
198
- Listener.sourceSlots.push(sSlot);
199
- }
200
- if (!this.observers) {
201
- this.observers = [Listener];
202
- this.observerSlots = [Listener.sources.length - 1];
203
- } else {
204
- this.observers.push(Listener);
205
- this.observerSlots.push(Listener.sources.length - 1);
206
- }
207
- }
208
- if (runningTransition && Transition.sources.has(this)) return this.tValue;
209
- return this.value;
210
- }
211
- function writeSignal(node, value, isComp) {
212
- let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;
213
- if (!node.comparator || !node.comparator(current, value)) {
214
- if (Transition) {
215
- const TransitionRunning = Transition.running;
216
- if (TransitionRunning || !isComp && Transition.sources.has(node)) {
217
- Transition.sources.add(node);
218
- node.tValue = value;
219
- }
220
- if (!TransitionRunning) node.value = value;
221
- } else node.value = value;
222
- if (node.observers && node.observers.length) runUpdates(() => {
223
- for (let i = 0; i < node.observers.length; i += 1) {
224
- const o = node.observers[i];
225
- const TransitionRunning = Transition && Transition.running;
226
- if (TransitionRunning && Transition.disposed.has(o)) continue;
227
- if (TransitionRunning ? !o.tState : !o.state) {
228
- if (o.pure) Updates.push(o);
229
- else Effects.push(o);
230
- if (o.observers) markDownstream(o);
231
- }
232
- if (!TransitionRunning) o.state = STALE;
233
- else o.tState = STALE;
234
- }
235
- if (Updates.length > 1e6) {
236
- Updates = [];
237
- throw new Error();
238
- }
239
- }, false);
240
- }
241
- return value;
242
- }
243
- function updateComputation(node) {
244
- if (!node.fn) return;
245
- cleanNode(node);
246
- const time = ExecCount;
247
- runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);
248
- if (Transition && !Transition.running && Transition.sources.has(node)) queueMicrotask(() => {
249
- runUpdates(() => {
250
- Transition && (Transition.running = true);
251
- Listener = Owner = node;
252
- runComputation(node, node.tValue, time);
253
- Listener = Owner = null;
254
- }, false);
255
- });
256
- }
257
- function runComputation(node, value, time) {
258
- let nextValue;
259
- const owner = Owner, listener = Listener;
260
- Listener = Owner = node;
261
- try {
262
- nextValue = node.fn(value);
263
- } catch (err) {
264
- if (node.pure) if (Transition && Transition.running) {
265
- node.tState = STALE;
266
- node.tOwned && node.tOwned.forEach(cleanNode);
267
- node.tOwned = void 0;
268
- } else {
269
- node.state = STALE;
270
- node.owned && node.owned.forEach(cleanNode);
271
- node.owned = null;
272
- }
273
- node.updatedAt = time + 1;
274
- return handleError(err);
275
- } finally {
276
- Listener = listener;
277
- Owner = owner;
278
- }
279
- if (!node.updatedAt || node.updatedAt <= time) {
280
- if (node.updatedAt != null && "observers" in node) writeSignal(node, nextValue, true);
281
- else if (Transition && Transition.running && node.pure) {
282
- Transition.sources.add(node);
283
- node.tValue = nextValue;
284
- } else node.value = nextValue;
285
- node.updatedAt = time;
286
- }
287
- }
288
- function createComputation(fn, init, pure, state = STALE, options) {
289
- const c = {
290
- fn,
291
- state,
292
- updatedAt: null,
293
- owned: null,
294
- sources: null,
295
- sourceSlots: null,
296
- cleanups: null,
297
- value: init,
298
- owner: Owner,
299
- context: Owner ? Owner.context : null,
300
- pure
301
- };
302
- if (Transition && Transition.running) {
303
- c.state = 0;
304
- c.tState = state;
305
- }
306
- if (Owner === null);
307
- else if (Owner !== UNOWNED) if (Transition && Transition.running && Owner.pure) if (!Owner.tOwned) Owner.tOwned = [c];
308
- else Owner.tOwned.push(c);
309
- else if (!Owner.owned) Owner.owned = [c];
310
- else Owner.owned.push(c);
311
- if (ExternalSourceConfig && c.fn) {
312
- const [track, trigger] = createSignal(void 0, { equals: false });
313
- const ordinary = ExternalSourceConfig.factory(c.fn, trigger);
314
- onCleanup(() => ordinary.dispose());
315
- const triggerInTransition = () => startTransition(trigger).then(() => inTransition.dispose());
316
- const inTransition = ExternalSourceConfig.factory(c.fn, triggerInTransition);
317
- c.fn = (x) => {
318
- track();
319
- return Transition && Transition.running ? inTransition.track(x) : ordinary.track(x);
320
- };
321
- }
322
- return c;
323
- }
324
- function runTop(node) {
325
- const runningTransition = Transition && Transition.running;
326
- if ((runningTransition ? node.tState : node.state) === 0) return;
327
- if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);
328
- if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);
329
- const ancestors = [node];
330
- while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
331
- if (runningTransition && Transition.disposed.has(node)) return;
332
- if (runningTransition ? node.tState : node.state) ancestors.push(node);
333
- }
334
- for (let i = ancestors.length - 1; i >= 0; i--) {
335
- node = ancestors[i];
336
- if (runningTransition) {
337
- let top = node, prev = ancestors[i + 1];
338
- while ((top = top.owner) && top !== prev) if (Transition.disposed.has(top)) return;
339
- }
340
- if ((runningTransition ? node.tState : node.state) === STALE) updateComputation(node);
341
- else if ((runningTransition ? node.tState : node.state) === PENDING) {
342
- const updates = Updates;
343
- Updates = null;
344
- runUpdates(() => lookUpstream(node, ancestors[0]), false);
345
- Updates = updates;
346
- }
347
- }
348
- }
349
- function runUpdates(fn, init) {
350
- if (Updates) return fn();
351
- let wait = false;
352
- if (!init) Updates = [];
353
- if (Effects) wait = true;
354
- else Effects = [];
355
- ExecCount++;
356
- try {
357
- const res = fn();
358
- completeUpdates(wait);
359
- return res;
360
- } catch (err) {
361
- if (!wait) Effects = null;
362
- Updates = null;
363
- handleError(err);
364
- }
365
- }
366
- function completeUpdates(wait) {
367
- if (Updates) {
368
- if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);
369
- else runQueue(Updates);
370
- Updates = null;
371
- }
372
- if (wait) return;
373
- let res;
374
- if (Transition) {
375
- if (!Transition.promises.size && !Transition.queue.size) {
376
- const sources = Transition.sources;
377
- const disposed = Transition.disposed;
378
- Effects.push.apply(Effects, Transition.effects);
379
- res = Transition.resolve;
380
- for (const e$1 of Effects) {
381
- "tState" in e$1 && (e$1.state = e$1.tState);
382
- delete e$1.tState;
383
- }
384
- Transition = null;
385
- runUpdates(() => {
386
- for (const d of disposed) cleanNode(d);
387
- for (const v of sources) {
388
- v.value = v.tValue;
389
- if (v.owned) for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);
390
- if (v.tOwned) v.owned = v.tOwned;
391
- delete v.tValue;
392
- delete v.tOwned;
393
- v.tState = 0;
394
- }
395
- setTransPending(false);
396
- }, false);
397
- } else if (Transition.running) {
398
- Transition.running = false;
399
- Transition.effects.push.apply(Transition.effects, Effects);
400
- Effects = null;
401
- setTransPending(true);
402
- return;
403
- }
404
- }
405
- const e = Effects;
406
- Effects = null;
407
- if (e.length) runUpdates(() => runEffects(e), false);
408
- if (res) res();
409
- }
410
- function runQueue(queue) {
411
- for (let i = 0; i < queue.length; i++) runTop(queue[i]);
412
- }
413
- function scheduleQueue(queue) {
414
- for (let i = 0; i < queue.length; i++) {
415
- const item = queue[i];
416
- const tasks = Transition.queue;
417
- if (!tasks.has(item)) {
418
- tasks.add(item);
419
- Scheduler(() => {
420
- tasks.delete(item);
421
- runUpdates(() => {
422
- Transition.running = true;
423
- runTop(item);
424
- }, false);
425
- Transition && (Transition.running = false);
426
- });
427
- }
428
- }
429
- }
430
- function runUserEffects(queue) {
431
- let i, userLength = 0;
432
- for (i = 0; i < queue.length; i++) {
433
- const e = queue[i];
434
- if (!e.user) runTop(e);
435
- else queue[userLength++] = e;
436
- }
437
- if (sharedConfig.context) {
438
- if (sharedConfig.count) {
439
- sharedConfig.effects || (sharedConfig.effects = []);
440
- sharedConfig.effects.push(...queue.slice(0, userLength));
441
- return;
442
- }
443
- setHydrateContext();
444
- }
445
- if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {
446
- queue = [...sharedConfig.effects, ...queue];
447
- userLength += sharedConfig.effects.length;
448
- delete sharedConfig.effects;
449
- }
450
- for (i = 0; i < userLength; i++) runTop(queue[i]);
451
- }
452
- function lookUpstream(node, ignore) {
453
- const runningTransition = Transition && Transition.running;
454
- if (runningTransition) node.tState = 0;
455
- else node.state = 0;
456
- for (let i = 0; i < node.sources.length; i += 1) {
457
- const source = node.sources[i];
458
- if (source.sources) {
459
- const state = runningTransition ? source.tState : source.state;
460
- if (state === STALE) {
461
- if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);
462
- } else if (state === PENDING) lookUpstream(source, ignore);
463
- }
464
- }
465
- }
466
- function markDownstream(node) {
467
- const runningTransition = Transition && Transition.running;
468
- for (let i = 0; i < node.observers.length; i += 1) {
469
- const o = node.observers[i];
470
- if (runningTransition ? !o.tState : !o.state) {
471
- if (runningTransition) o.tState = PENDING;
472
- else o.state = PENDING;
473
- if (o.pure) Updates.push(o);
474
- else Effects.push(o);
475
- o.observers && markDownstream(o);
476
- }
477
- }
478
- }
479
- function cleanNode(node) {
480
- let i;
481
- if (node.sources) while (node.sources.length) {
482
- const source = node.sources.pop(), index = node.sourceSlots.pop(), obs = source.observers;
483
- if (obs && obs.length) {
484
- const n = obs.pop(), s = source.observerSlots.pop();
485
- if (index < obs.length) {
486
- n.sourceSlots[s] = index;
487
- obs[index] = n;
488
- source.observerSlots[index] = s;
489
- }
490
- }
491
- }
492
- if (node.tOwned) {
493
- for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);
494
- delete node.tOwned;
495
- }
496
- if (Transition && Transition.running && node.pure) reset(node, true);
497
- else if (node.owned) {
498
- for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);
499
- node.owned = null;
500
- }
501
- if (node.cleanups) {
502
- for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();
503
- node.cleanups = null;
504
- }
505
- if (Transition && Transition.running) node.tState = 0;
506
- else node.state = 0;
507
- }
508
- function reset(node, top) {
509
- if (!top) {
510
- node.tState = 0;
511
- Transition.disposed.add(node);
512
- }
513
- if (node.owned) for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);
514
- }
515
- function castError(err) {
516
- if (err instanceof Error) return err;
517
- return new Error(typeof err === "string" ? err : "Unknown error", { cause: err });
518
- }
519
- function runErrors(err, fns, owner) {
520
- try {
521
- for (const f of fns) f(err);
522
- } catch (e) {
523
- handleError(e, owner && owner.owner || null);
524
- }
525
- }
526
- function handleError(err, owner = Owner) {
527
- const fns = ERROR && owner && owner.context && owner.context[ERROR];
528
- const error = castError(err);
529
- if (!fns) throw error;
530
- if (Effects) Effects.push({
531
- fn() {
532
- runErrors(error, fns, owner);
533
- },
534
- state: STALE
535
- });
536
- else runErrors(error, fns, owner);
537
- }
538
- function resolveChildren(children$1) {
539
- if (typeof children$1 === "function" && !children$1.length) return resolveChildren(children$1());
540
- if (Array.isArray(children$1)) {
541
- const results = [];
542
- for (let i = 0; i < children$1.length; i++) {
543
- const result = resolveChildren(children$1[i]);
544
- Array.isArray(result) ? results.push.apply(results, result) : results.push(result);
545
- }
546
- return results;
547
- }
548
- return children$1;
549
- }
550
- function createProvider(id, options) {
551
- return function provider(props) {
552
- let res;
553
- createRenderEffect(() => res = untrack(() => {
554
- Owner.context = {
555
- ...Owner.context,
556
- [id]: props.value
557
- };
558
- return children(() => props.children);
559
- }), void 0);
560
- return res;
561
- };
562
- }
563
- const FALLBACK = Symbol("fallback");
564
- function dispose(d) {
565
- for (let i = 0; i < d.length; i++) d[i]();
566
- }
567
- function mapArray(list, mapFn, options = {}) {
568
- let items = [], mapped = [], disposers = [], len = 0, indexes = mapFn.length > 1 ? [] : null;
569
- onCleanup(() => dispose(disposers));
570
- return () => {
571
- let newItems = list() || [], newLen = newItems.length, i, j;
572
- newItems[$TRACK];
573
- return untrack(() => {
574
- let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;
575
- if (newLen === 0) {
576
- if (len !== 0) {
577
- dispose(disposers);
578
- disposers = [];
579
- items = [];
580
- mapped = [];
581
- len = 0;
582
- indexes && (indexes = []);
583
- }
584
- if (options.fallback) {
585
- items = [FALLBACK];
586
- mapped[0] = createRoot((disposer) => {
587
- disposers[0] = disposer;
588
- return options.fallback();
589
- });
590
- len = 1;
591
- }
592
- } else if (len === 0) {
593
- mapped = new Array(newLen);
594
- for (j = 0; j < newLen; j++) {
595
- items[j] = newItems[j];
596
- mapped[j] = createRoot(mapper);
597
- }
598
- len = newLen;
599
- } else {
600
- temp = new Array(newLen);
601
- tempdisposers = new Array(newLen);
602
- indexes && (tempIndexes = new Array(newLen));
603
- for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);
604
- for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {
605
- temp[newEnd] = mapped[end];
606
- tempdisposers[newEnd] = disposers[end];
607
- indexes && (tempIndexes[newEnd] = indexes[end]);
608
- }
609
- newIndices = /* @__PURE__ */ new Map();
610
- newIndicesNext = new Array(newEnd + 1);
611
- for (j = newEnd; j >= start; j--) {
612
- item = newItems[j];
613
- i = newIndices.get(item);
614
- newIndicesNext[j] = i === void 0 ? -1 : i;
615
- newIndices.set(item, j);
616
- }
617
- for (i = start; i <= end; i++) {
618
- item = items[i];
619
- j = newIndices.get(item);
620
- if (j !== void 0 && j !== -1) {
621
- temp[j] = mapped[i];
622
- tempdisposers[j] = disposers[i];
623
- indexes && (tempIndexes[j] = indexes[i]);
624
- j = newIndicesNext[j];
625
- newIndices.set(item, j);
626
- } else disposers[i]();
627
- }
628
- for (j = start; j < newLen; j++) if (j in temp) {
629
- mapped[j] = temp[j];
630
- disposers[j] = tempdisposers[j];
631
- if (indexes) {
632
- indexes[j] = tempIndexes[j];
633
- indexes[j](j);
634
- }
635
- } else mapped[j] = createRoot(mapper);
636
- mapped = mapped.slice(0, len = newLen);
637
- items = newItems.slice(0);
638
- }
639
- return mapped;
640
- });
641
- function mapper(disposer) {
642
- disposers[j] = disposer;
643
- if (indexes) {
644
- const [s, set] = createSignal(j);
645
- indexes[j] = set;
646
- return mapFn(newItems[j], s);
647
- }
648
- return mapFn(newItems[j]);
649
- }
650
- };
651
- }
652
- let hydrationEnabled = false;
653
- function createComponent(Comp, props) {
654
- if (hydrationEnabled) {
655
- if (sharedConfig.context) {
656
- const c = sharedConfig.context;
657
- setHydrateContext(nextHydrateContext());
658
- const r = untrack(() => Comp(props || {}));
659
- setHydrateContext(c);
660
- return r;
661
- }
662
- }
663
- return untrack(() => Comp(props || {}));
664
- }
665
- function trueFn() {
666
- return true;
667
- }
668
- const propTraps = {
669
- get(_, property, receiver) {
670
- if (property === $PROXY) return receiver;
671
- return _.get(property);
672
- },
673
- has(_, property) {
674
- if (property === $PROXY) return true;
675
- return _.has(property);
676
- },
677
- set: trueFn,
678
- deleteProperty: trueFn,
679
- getOwnPropertyDescriptor(_, property) {
680
- return {
681
- configurable: true,
682
- enumerable: true,
683
- get() {
684
- return _.get(property);
685
- },
686
- set: trueFn,
687
- deleteProperty: trueFn
688
- };
689
- },
690
- ownKeys(_) {
691
- return _.keys();
692
- }
693
- };
694
- function resolveSource(s) {
695
- return !(s = typeof s === "function" ? s() : s) ? {} : s;
696
- }
697
- function resolveSources() {
698
- for (let i = 0, length = this.length; i < length; ++i) {
699
- const v = this[i]();
700
- if (v !== void 0) return v;
701
- }
702
- }
703
- function mergeProps(...sources) {
704
- let proxy = false;
705
- for (let i = 0; i < sources.length; i++) {
706
- const s = sources[i];
707
- proxy = proxy || !!s && $PROXY in s;
708
- sources[i] = typeof s === "function" ? (proxy = true, createMemo(s)) : s;
709
- }
710
- if (SUPPORTS_PROXY && proxy) return new Proxy({
711
- get(property) {
712
- for (let i = sources.length - 1; i >= 0; i--) {
713
- const v = resolveSource(sources[i])[property];
714
- if (v !== void 0) return v;
715
- }
716
- },
717
- has(property) {
718
- for (let i = sources.length - 1; i >= 0; i--) if (property in resolveSource(sources[i])) return true;
719
- return false;
720
- },
721
- keys() {
722
- const keys = [];
723
- for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));
724
- return [...new Set(keys)];
725
- }
726
- }, propTraps);
727
- const sourcesMap = {};
728
- const defined = Object.create(null);
729
- for (let i = sources.length - 1; i >= 0; i--) {
730
- const source = sources[i];
731
- if (!source) continue;
732
- const sourceKeys = Object.getOwnPropertyNames(source);
733
- for (let i$1 = sourceKeys.length - 1; i$1 >= 0; i$1--) {
734
- const key = sourceKeys[i$1];
735
- if (key === "__proto__" || key === "constructor") continue;
736
- const desc = Object.getOwnPropertyDescriptor(source, key);
737
- if (!defined[key]) defined[key] = desc.get ? {
738
- enumerable: true,
739
- configurable: true,
740
- get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])
741
- } : desc.value !== void 0 ? desc : void 0;
742
- else {
743
- const sources$1 = sourcesMap[key];
744
- if (sources$1) {
745
- if (desc.get) sources$1.push(desc.get.bind(source));
746
- else if (desc.value !== void 0) sources$1.push(() => desc.value);
747
- }
748
- }
749
- }
750
- }
751
- const target = {};
752
- const definedKeys = Object.keys(defined);
753
- for (let i = definedKeys.length - 1; i >= 0; i--) {
754
- const key = definedKeys[i], desc = defined[key];
755
- if (desc && desc.get) Object.defineProperty(target, key, desc);
756
- else target[key] = desc ? desc.value : void 0;
757
- }
758
- return target;
759
- }
760
- const narrowedError = (name) => `Stale read from <${name}>.`;
761
- function For(props) {
762
- const fallback = "fallback" in props && { fallback: () => props.fallback };
763
- return createMemo(mapArray(() => props.each, props.children, fallback || void 0));
764
- }
765
- function Show(props) {
766
- const keyed = props.keyed;
767
- const conditionValue = createMemo(() => props.when, void 0, void 0);
768
- const condition = keyed ? conditionValue : createMemo(conditionValue, void 0, { equals: (a, b) => !a === !b });
769
- return createMemo(() => {
770
- const c = condition();
771
- if (c) {
772
- const child = props.children;
773
- return typeof child === "function" && child.length > 0 ? untrack(() => child(keyed ? c : () => {
774
- if (!untrack(condition)) throw narrowedError("Show");
775
- return conditionValue();
776
- })) : child;
777
- }
778
- return props.fallback;
779
- }, void 0, void 0);
780
- }
781
- function Switch(props) {
782
- const chs = children(() => props.children);
783
- const switchFunc = createMemo(() => {
784
- const ch = chs();
785
- const mps = Array.isArray(ch) ? ch : [ch];
786
- let func = () => void 0;
787
- for (let i = 0; i < mps.length; i++) {
788
- const index = i;
789
- const mp = mps[i];
790
- const prevFunc = func;
791
- const conditionValue = createMemo(() => prevFunc() ? void 0 : mp.when, void 0, void 0);
792
- const condition = mp.keyed ? conditionValue : createMemo(conditionValue, void 0, { equals: (a, b) => !a === !b });
793
- func = () => prevFunc() || (condition() ? [
794
- index,
795
- conditionValue,
796
- mp
797
- ] : void 0);
798
- }
799
- return func;
800
- });
801
- return createMemo(() => {
802
- const sel = switchFunc()();
803
- if (!sel) return props.fallback;
804
- const [index, conditionValue, mp] = sel;
805
- const child = mp.children;
806
- return typeof child === "function" && child.length > 0 ? untrack(() => child(mp.keyed ? conditionValue() : () => {
807
- if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match");
808
- return conditionValue();
809
- })) : child;
810
- }, void 0, void 0);
811
- }
812
- function Match(props) {
813
- return props;
814
- }
815
-
816
- //#endregion
817
- //#region ../../node_modules/@opentui/solid/index.js
818
- var RendererContext = createContext();
819
- var useRenderer = () => {
820
- const renderer = useContext(RendererContext);
821
- if (!renderer) throw new Error("No renderer found");
822
- return renderer;
823
- };
824
- var useKeyboard = (callback, options) => {
825
- const keyHandler = useRenderer().keyInput;
826
- onMount(() => {
827
- keyHandler.on("keypress", callback);
828
- if (options?.release) keyHandler.on("keyrelease", callback);
829
- });
830
- onCleanup(() => {
831
- keyHandler.off("keypress", callback);
832
- if (options?.release) keyHandler.off("keyrelease", callback);
833
- });
834
- };
835
- var memo = (fn) => createMemo(() => fn());
836
- function createRenderer({ createElement: createElement$1, createTextNode: createTextNode$1, createSlotNode: createSlotNode$1, isTextNode, replaceText, insertNode: insertNode$1, removeNode, setProperty, getParentNode, getFirstChild, getNextSibling }) {
837
- function insert$1(parent, accessor, marker, initial) {
838
- if (marker !== void 0 && !initial) initial = [];
839
- if (typeof accessor !== "function") return insertExpression(parent, accessor, initial, marker);
840
- createRenderEffect((current) => insertExpression(parent, accessor(), current, marker), initial);
841
- }
842
- function insertExpression(parent, value, current, marker, unwrapArray) {
843
- while (typeof current === "function") current = current();
844
- if (value === current) return current;
845
- const t = typeof value, multi = marker !== void 0;
846
- if (t === "string" || t === "number") {
847
- if (t === "number") value = value.toString();
848
- if (multi) {
849
- let node = current[0];
850
- if (node && isTextNode(node)) replaceText(node, value);
851
- else node = createTextNode$1(value);
852
- current = cleanChildren(parent, current, marker, node);
853
- } else if (current !== "" && typeof current === "string") replaceText(getFirstChild(parent), current = value);
854
- else {
855
- cleanChildren(parent, current, marker, createTextNode$1(value));
856
- current = value;
857
- }
858
- } else if (value == null || t === "boolean") current = cleanChildren(parent, current, marker);
859
- else if (t === "function") {
860
- createRenderEffect(() => {
861
- let v = value();
862
- while (typeof v === "function") v = v();
863
- current = insertExpression(parent, v, current, marker);
864
- });
865
- return () => current;
866
- } else if (Array.isArray(value)) {
867
- const array = [];
868
- if (normalizeIncomingArray(array, value, unwrapArray)) {
869
- createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));
870
- return () => current;
871
- }
872
- if (array.length === 0) {
873
- const replacement = cleanChildren(parent, current, marker);
874
- if (multi) return current = replacement;
875
- } else if (Array.isArray(current)) if (current.length === 0) appendNodes(parent, array, marker);
876
- else reconcileArrays(parent, current, array);
877
- else if (current == null || current === "") appendNodes(parent, array);
878
- else reconcileArrays(parent, multi && current || [getFirstChild(parent)], array);
879
- current = array;
880
- } else {
881
- if (Array.isArray(current)) {
882
- if (multi) return current = cleanChildren(parent, current, marker, value);
883
- cleanChildren(parent, current, null, value);
884
- } else if (current == null || current === "" || !getFirstChild(parent)) insertNode$1(parent, value);
885
- else replaceNode(parent, value, getFirstChild(parent));
886
- current = value;
887
- }
888
- return current;
889
- }
890
- function normalizeIncomingArray(normalized, array, unwrap) {
891
- let dynamic = false;
892
- for (let i = 0, len = array.length; i < len; i++) {
893
- let item = array[i], t;
894
- if (item == null || item === true || item === false);
895
- else if (Array.isArray(item)) dynamic = normalizeIncomingArray(normalized, item) || dynamic;
896
- else if ((t = typeof item) === "string" || t === "number") normalized.push(createTextNode$1(item));
897
- else if (t === "function") if (unwrap) {
898
- while (typeof item === "function") item = item();
899
- dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item]) || dynamic;
900
- } else {
901
- normalized.push(item);
902
- dynamic = true;
903
- }
904
- else normalized.push(item);
905
- }
906
- return dynamic;
907
- }
908
- function reconcileArrays(parentNode, a, b) {
909
- let bLength = b.length, aEnd = a.length, bEnd = bLength, aStart = 0, bStart = 0, after = getNextSibling(a[aEnd - 1]), map = null;
910
- while (aStart < aEnd || bStart < bEnd) {
911
- if (a[aStart] === b[bStart]) {
912
- aStart++;
913
- bStart++;
914
- continue;
915
- }
916
- while (a[aEnd - 1] === b[bEnd - 1]) {
917
- aEnd--;
918
- bEnd--;
919
- }
920
- if (aEnd === aStart) {
921
- const node = bEnd < bLength ? bStart ? getNextSibling(b[bStart - 1]) : b[bEnd - bStart] : after;
922
- while (bStart < bEnd) insertNode$1(parentNode, b[bStart++], node);
923
- } else if (bEnd === bStart) while (aStart < aEnd) {
924
- if (!map || !map.has(a[aStart])) removeNode(parentNode, a[aStart]);
925
- aStart++;
926
- }
927
- else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
928
- const node = getNextSibling(a[--aEnd]);
929
- insertNode$1(parentNode, b[bStart++], getNextSibling(a[aStart++]));
930
- insertNode$1(parentNode, b[--bEnd], node);
931
- a[aEnd] = b[bEnd];
932
- } else {
933
- if (!map) {
934
- map = /* @__PURE__ */ new Map();
935
- let i = bStart;
936
- while (i < bEnd) map.set(b[i], i++);
937
- }
938
- const index = map.get(a[aStart]);
939
- if (index != null) if (bStart < index && index < bEnd) {
940
- let i = aStart, sequence = 1, t;
941
- while (++i < aEnd && i < bEnd) {
942
- if ((t = map.get(a[i])) == null || t !== index + sequence) break;
943
- sequence++;
944
- }
945
- if (sequence > index - bStart) {
946
- const node = a[aStart];
947
- while (bStart < index) insertNode$1(parentNode, b[bStart++], node);
948
- } else replaceNode(parentNode, b[bStart++], a[aStart++]);
949
- } else aStart++;
950
- else removeNode(parentNode, a[aStart++]);
951
- }
952
- }
953
- }
954
- function cleanChildren(parent, current, marker, replacement) {
955
- if (marker === void 0) {
956
- let removed;
957
- while (removed = getFirstChild(parent)) removeNode(parent, removed);
958
- replacement && insertNode$1(parent, replacement);
959
- return replacement;
960
- }
961
- const node = replacement || createSlotNode$1();
962
- if (current.length) {
963
- let inserted = false;
964
- for (let i = current.length - 1; i >= 0; i--) {
965
- const el = current[i];
966
- if (node !== el) {
967
- const isParent = getParentNode(el) === parent;
968
- if (!inserted && !i) isParent ? replaceNode(parent, node, el) : insertNode$1(parent, node, marker);
969
- else isParent && removeNode(parent, el);
970
- } else inserted = true;
971
- }
972
- } else insertNode$1(parent, node, marker);
973
- return [node];
974
- }
975
- function appendNodes(parent, array, marker) {
976
- for (let i = 0, len = array.length; i < len; i++) insertNode$1(parent, array[i], marker);
977
- }
978
- function replaceNode(parent, newNode, oldNode) {
979
- insertNode$1(parent, newNode, oldNode);
980
- removeNode(parent, oldNode);
981
- }
982
- function spreadExpression(node, props, prevProps = {}, skipChildren) {
983
- props || (props = {});
984
- if (!skipChildren) createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));
985
- createRenderEffect(() => props.ref && props.ref(node));
986
- createRenderEffect(() => {
987
- for (const prop in props) {
988
- if (prop === "children" || prop === "ref") continue;
989
- const value = props[prop];
990
- if (value === prevProps[prop]) continue;
991
- setProperty(node, prop, value, prevProps[prop]);
992
- prevProps[prop] = value;
993
- }
994
- });
995
- return prevProps;
996
- }
997
- return {
998
- render(code, element) {
999
- let disposer;
1000
- createRoot((dispose$1) => {
1001
- disposer = dispose$1;
1002
- insert$1(element, code());
1003
- });
1004
- return disposer;
1005
- },
1006
- insert: insert$1,
1007
- spread(node, accessor, skipChildren) {
1008
- if (typeof accessor === "function") createRenderEffect((current) => spreadExpression(node, accessor(), current, skipChildren));
1009
- else spreadExpression(node, accessor, void 0, skipChildren);
1010
- },
1011
- createElement: createElement$1,
1012
- createTextNode: createTextNode$1,
1013
- insertNode: insertNode$1,
1014
- setProp(node, name, value, prev) {
1015
- setProperty(node, name, value, prev);
1016
- return value;
1017
- },
1018
- mergeProps,
1019
- effect: createRenderEffect,
1020
- memo,
1021
- createComponent,
1022
- use(fn, element, arg) {
1023
- return untrack(() => fn(element, arg));
1024
- }
1025
- };
1026
- }
1027
- function createRenderer2(options) {
1028
- const renderer = createRenderer(options);
1029
- renderer.mergeProps = mergeProps;
1030
- return renderer;
1031
- }
1032
- var idCounter = /* @__PURE__ */ new Map();
1033
- function getNextId(elementType) {
1034
- if (!idCounter.has(elementType)) idCounter.set(elementType, 0);
1035
- const value = idCounter.get(elementType) + 1;
1036
- idCounter.set(elementType, value);
1037
- return `${elementType}-${value}`;
1038
- }
1039
- var log = (...args) => {
1040
- if (process.env.DEBUG) console.log("[Reconciler]", ...args);
1041
- };
1042
- var TextNode = class TextNode extends TextNodeRenderable {
1043
- static fromString(text, options = {}) {
1044
- const node = new TextNode(options);
1045
- node.add(text);
1046
- return node;
1047
- }
1048
- };
1049
- var logId = (node) => {
1050
- if (!node) return;
1051
- return node.id;
1052
- };
1053
- var getNodeChildren = (node) => {
1054
- let children$1;
1055
- if (node instanceof TextRenderable) children$1 = node.getTextChildren();
1056
- else children$1 = node.getChildren();
1057
- return children$1;
1058
- };
1059
- function _insertNode(parent, node, anchor) {
1060
- log("Inserting node:", logId(node), "into parent:", logId(parent), "with anchor:", logId(anchor), node instanceof TextNode);
1061
- if (node instanceof SlotRenderable) {
1062
- node.parent = parent;
1063
- node = node.getSlotChild(parent);
1064
- }
1065
- if (anchor && anchor instanceof SlotRenderable) anchor = anchor.getSlotChild(parent);
1066
- if (isTextNodeRenderable(node)) {
1067
- if (!(parent instanceof TextRenderable) && !isTextNodeRenderable(parent)) throw new Error(`Orphan text error: "${node.toChunks().map((c) => c.text).join("")}" must have a <text> as a parent: ${parent.id} above ${node.id}`);
1068
- }
1069
- if (!(parent instanceof BaseRenderable)) {
1070
- console.error("[INSERT]", "Tried to mount a non base renderable");
1071
- throw new Error("Tried to mount a non base renderable");
1072
- }
1073
- if (!anchor) {
1074
- parent.add(node);
1075
- return;
1076
- }
1077
- const children$1 = getNodeChildren(parent);
1078
- const anchorIndex = children$1.findIndex((el) => el.id === anchor.id);
1079
- if (anchorIndex === -1) log("[INSERT]", "Could not find anchor", logId(parent), logId(anchor), "[children]", ...children$1.map((c) => c.id));
1080
- parent.add(node, anchorIndex);
1081
- }
1082
- function _removeNode(parent, node) {
1083
- log("Removing node:", logId(node), "from parent:", logId(parent));
1084
- if (node instanceof SlotRenderable) {
1085
- node.parent = null;
1086
- node = node.getSlotChild(parent);
1087
- }
1088
- parent.remove(node.id);
1089
- process.nextTick(() => {
1090
- if (node instanceof BaseRenderable && !node.parent) {
1091
- node.destroyRecursively();
1092
- return;
1093
- }
1094
- });
1095
- }
1096
- function _createTextNode(value) {
1097
- log("Creating text node:", value);
1098
- const id = getNextId("text-node");
1099
- if (typeof value === "number") value = value.toString();
1100
- return TextNode.fromString(value, { id });
1101
- }
1102
- function createSlotNode() {
1103
- const id = getNextId("slot-node");
1104
- log("Creating slot node", id);
1105
- return new SlotRenderable(id);
1106
- }
1107
- function _getParentNode(childNode) {
1108
- log("Getting parent of node:", logId(childNode));
1109
- let parent = childNode.parent ?? void 0;
1110
- if (parent instanceof RootTextNodeRenderable) parent = parent.textParent ?? void 0;
1111
- return parent;
1112
- }
1113
- var { render: _render, effect, memo: memo2, createComponent: createComponent2, createElement, createTextNode, insertNode, insert, spread, setProp, mergeProps: mergeProps3, use } = createRenderer2({
1114
- createElement(tagName) {
1115
- log("Creating element:", tagName);
1116
- const id = getNextId(tagName);
1117
- const solidRenderer = useContext(RendererContext);
1118
- if (!solidRenderer) throw new Error("No renderer found");
1119
- const elements = getComponentCatalogue();
1120
- if (!elements[tagName]) throw new Error(`[Reconciler] Unknown component type: ${tagName}`);
1121
- const element = new elements[tagName](solidRenderer, { id });
1122
- log("Element created with id:", id);
1123
- return element;
1124
- },
1125
- createTextNode: _createTextNode,
1126
- createSlotNode,
1127
- replaceText(textNode, value) {
1128
- log("Replacing text:", value, "in node:", logId(textNode));
1129
- if (!(textNode instanceof TextNode)) return;
1130
- textNode.replace(value, 0);
1131
- },
1132
- setProperty(node, name, value, prev) {
1133
- if (name.startsWith("on:")) {
1134
- const eventName = name.slice(3);
1135
- if (value) node.on(eventName, value);
1136
- if (prev) node.off(eventName, prev);
1137
- return;
1138
- }
1139
- if (isTextNodeRenderable(node)) {
1140
- if (name === "href") {
1141
- node.link = { url: value };
1142
- return;
1143
- }
1144
- if (name === "style") {
1145
- node.attributes |= createTextAttributes(value);
1146
- node.fg = value.fg ? parseColor(value.fg) : node.fg;
1147
- node.bg = value.bg ? parseColor(value.bg) : node.bg;
1148
- return;
1149
- }
1150
- return;
1151
- }
1152
- switch (name) {
1153
- case "id":
1154
- log("Id mapped", node.id, "=", value);
1155
- node[name] = value;
1156
- break;
1157
- case "focused":
1158
- if (!(node instanceof Renderable)) return;
1159
- if (value) node.focus();
1160
- else node.blur();
1161
- break;
1162
- case "onChange":
1163
- let event = void 0;
1164
- if (node instanceof SelectRenderable) event = SelectRenderableEvents.SELECTION_CHANGED;
1165
- else if (node instanceof TabSelectRenderable) event = TabSelectRenderableEvents.SELECTION_CHANGED;
1166
- else if (node instanceof InputRenderable) event = InputRenderableEvents.CHANGE;
1167
- if (!event) break;
1168
- if (value) node.on(event, value);
1169
- if (prev) node.off(event, prev);
1170
- break;
1171
- case "onInput":
1172
- if (node instanceof InputRenderable) {
1173
- if (value) node.on(InputRenderableEvents.INPUT, value);
1174
- if (prev) node.off(InputRenderableEvents.INPUT, prev);
1175
- }
1176
- break;
1177
- case "onSubmit":
1178
- if (node instanceof InputRenderable) {
1179
- if (value) node.on(InputRenderableEvents.ENTER, value);
1180
- if (prev) node.off(InputRenderableEvents.ENTER, prev);
1181
- } else node[name] = value;
1182
- break;
1183
- case "onSelect":
1184
- if (node instanceof SelectRenderable) {
1185
- if (value) node.on(SelectRenderableEvents.ITEM_SELECTED, value);
1186
- if (prev) node.off(SelectRenderableEvents.ITEM_SELECTED, prev);
1187
- } else if (node instanceof TabSelectRenderable) {
1188
- if (value) node.on(TabSelectRenderableEvents.ITEM_SELECTED, value);
1189
- if (prev) node.off(TabSelectRenderableEvents.ITEM_SELECTED, prev);
1190
- }
1191
- break;
1192
- case "style":
1193
- for (const prop in value) {
1194
- const propVal = value[prop];
1195
- if (prev !== void 0 && propVal === prev[prop]) continue;
1196
- node[prop] = propVal;
1197
- }
1198
- break;
1199
- case "text":
1200
- case "content":
1201
- node[name] = typeof value === "string" ? value : Array.isArray(value) ? value.join("") : `${value}`;
1202
- break;
1203
- default: node[name] = value;
1204
- }
1205
- },
1206
- isTextNode(node) {
1207
- return node instanceof TextNode;
1208
- },
1209
- insertNode: _insertNode,
1210
- removeNode: _removeNode,
1211
- getParentNode: _getParentNode,
1212
- getFirstChild(node) {
1213
- log("Getting first child of node:", logId(node));
1214
- const firstChild = getNodeChildren(node)[0];
1215
- if (!firstChild) {
1216
- log("No first child found for node:", logId(node));
1217
- return;
1218
- }
1219
- log("First child found:", logId(firstChild), "for node:", logId(node));
1220
- return firstChild;
1221
- },
1222
- getNextSibling(node) {
1223
- log("Getting next sibling of node:", logId(node));
1224
- const parent = _getParentNode(node);
1225
- if (!parent) {
1226
- log("No parent found for node:", logId(node));
1227
- return;
1228
- }
1229
- const siblings = getNodeChildren(parent);
1230
- const index = siblings.indexOf(node);
1231
- if (index === -1 || index === siblings.length - 1) {
1232
- log("No next sibling found for node:", logId(node));
1233
- return;
1234
- }
1235
- const nextSibling = siblings[index + 1];
1236
- if (!nextSibling) {
1237
- log("Next sibling is null for node:", logId(node));
1238
- return;
1239
- }
1240
- log("Next sibling found:", logId(nextSibling), "for node:", logId(node));
1241
- return nextSibling;
1242
- }
1243
- });
1244
- var SlotBaseRenderable = class extends BaseRenderable {
1245
- constructor(id) {
1246
- super({ id });
1247
- }
1248
- add(obj, index) {
1249
- throw new Error("Can't add children on an Slot renderable");
1250
- }
1251
- getChildren() {
1252
- return [];
1253
- }
1254
- remove(id) {}
1255
- insertBefore(obj, anchor) {
1256
- throw new Error("Can't add children on an Slot renderable");
1257
- }
1258
- getRenderable(id) {}
1259
- getChildrenCount() {
1260
- return 0;
1261
- }
1262
- requestRender() {}
1263
- findDescendantById(id) {}
1264
- };
1265
- var TextSlotRenderable = class extends TextNodeRenderable {
1266
- slotParent;
1267
- destroyed = false;
1268
- constructor(id, parent) {
1269
- super({ id });
1270
- this._visible = false;
1271
- this.slotParent = parent;
1272
- }
1273
- destroy() {
1274
- if (this.destroyed) return;
1275
- this.destroyed = true;
1276
- this.slotParent?.destroy();
1277
- super.destroy();
1278
- }
1279
- };
1280
- var LayoutSlotRenderable = class extends SlotBaseRenderable {
1281
- yogaNode;
1282
- slotParent;
1283
- destroyed = false;
1284
- constructor(id, parent) {
1285
- super(id);
1286
- this._visible = false;
1287
- this.slotParent = parent;
1288
- this.yogaNode = Yoga.default.Node.create();
1289
- this.yogaNode.setDisplay(Yoga.Display.None);
1290
- }
1291
- getLayoutNode() {
1292
- return this.yogaNode;
1293
- }
1294
- updateFromLayout() {}
1295
- updateLayout() {}
1296
- onRemove() {}
1297
- destroy() {
1298
- if (this.destroyed) return;
1299
- this.destroyed = true;
1300
- super.destroy();
1301
- this.slotParent?.destroy();
1302
- }
1303
- };
1304
- var SlotRenderable = class extends SlotBaseRenderable {
1305
- layoutNode;
1306
- textNode;
1307
- destroyed = false;
1308
- constructor(id) {
1309
- super(id);
1310
- this._visible = false;
1311
- }
1312
- getSlotChild(parent) {
1313
- if (isTextNodeRenderable(parent) || parent instanceof TextRenderable) {
1314
- if (!this.textNode) this.textNode = new TextSlotRenderable(`slot-text-${this.id}`, this);
1315
- return this.textNode;
1316
- }
1317
- if (!this.layoutNode) this.layoutNode = new LayoutSlotRenderable(`slot-layout-${this.id}`, this);
1318
- return this.layoutNode;
1319
- }
1320
- destroy() {
1321
- if (this.destroyed) return;
1322
- this.destroyed = true;
1323
- if (this.layoutNode) this.layoutNode.destroy();
1324
- if (this.textNode) this.textNode.destroy();
1325
- }
1326
- };
1327
- var SpanRenderable = class extends TextNodeRenderable {
1328
- _ctx;
1329
- constructor(_ctx, options) {
1330
- super(options);
1331
- this._ctx = _ctx;
1332
- }
1333
- };
1334
- var TextModifierRenderable = class extends SpanRenderable {
1335
- constructor(options, modifier) {
1336
- super(null, options);
1337
- if (modifier === "b" || modifier === "strong") this.attributes = (this.attributes || 0) | TextAttributes.BOLD;
1338
- else if (modifier === "i" || modifier === "em") this.attributes = (this.attributes || 0) | TextAttributes.ITALIC;
1339
- else if (modifier === "u") this.attributes = (this.attributes || 0) | TextAttributes.UNDERLINE;
1340
- }
1341
- };
1342
- var BoldSpanRenderable = class extends TextModifierRenderable {
1343
- constructor(options) {
1344
- super(options, "b");
1345
- }
1346
- };
1347
- var ItalicSpanRenderable = class extends TextModifierRenderable {
1348
- constructor(options) {
1349
- super(options, "i");
1350
- }
1351
- };
1352
- var UnderlineSpanRenderable = class extends TextModifierRenderable {
1353
- constructor(options) {
1354
- super(options, "u");
1355
- }
1356
- };
1357
- var LineBreakRenderable = class extends SpanRenderable {
1358
- constructor(_ctx, options) {
1359
- super(null, options);
1360
- this.add();
1361
- }
1362
- add() {
1363
- return super.add(`
1364
- `);
1365
- }
1366
- };
1367
- var LinkRenderable = class extends SpanRenderable {
1368
- constructor(_ctx, options) {
1369
- const linkOptions = {
1370
- ...options,
1371
- link: { url: options.href }
1372
- };
1373
- super(null, linkOptions);
1374
- }
1375
- };
1376
- var baseComponents = {
1377
- box: BoxRenderable,
1378
- text: TextRenderable,
1379
- input: InputRenderable,
1380
- select: SelectRenderable,
1381
- textarea: TextareaRenderable,
1382
- ascii_font: ASCIIFontRenderable,
1383
- tab_select: TabSelectRenderable,
1384
- scrollbox: ScrollBoxRenderable,
1385
- code: CodeRenderable,
1386
- diff: DiffRenderable,
1387
- line_number: LineNumberRenderable,
1388
- span: SpanRenderable,
1389
- strong: BoldSpanRenderable,
1390
- b: BoldSpanRenderable,
1391
- em: ItalicSpanRenderable,
1392
- i: ItalicSpanRenderable,
1393
- u: UnderlineSpanRenderable,
1394
- br: LineBreakRenderable,
1395
- a: LinkRenderable
1396
- };
1397
- var componentCatalogue = { ...baseComponents };
1398
- function getComponentCatalogue() {
1399
- return componentCatalogue;
1400
- }
1401
- var render = async (node, rendererOrConfig = {}) => {
1402
- let isDisposed = false;
1403
- let dispose$1;
1404
- const renderer = rendererOrConfig instanceof CliRenderer ? rendererOrConfig : await createCliRenderer({
1405
- ...rendererOrConfig,
1406
- onDestroy: () => {
1407
- if (!isDisposed) {
1408
- isDisposed = true;
1409
- dispose$1();
1410
- }
1411
- rendererOrConfig.onDestroy?.();
1412
- }
1413
- });
1414
- if (rendererOrConfig instanceof CliRenderer) renderer.on("destroy", () => {
1415
- if (!isDisposed) {
1416
- isDisposed = true;
1417
- dispose$1();
1418
- }
1419
- });
1420
- engine.attach(renderer);
1421
- dispose$1 = _render(() => createComponent2(RendererContext.Provider, {
1422
- get value() {
1423
- return renderer;
1424
- },
1425
- get children() {
1426
- return createComponent2(node, {});
1427
- }
1428
- }), renderer.root);
1429
- };
1430
-
1431
- //#endregion
1432
- //#region src/adapters/solid/context/logger_context.tsx
1433
- const LoggerContext = createContext();
1434
- /**
1435
- * LoggerProvider - Provides shared context for logger components.
1436
- *
1437
- * This context provides:
1438
- * - Shared SyntaxStyle instance for consistent code highlighting
1439
- * - Optional TreeSitterClient for advanced parsing
1440
- * - Theme configuration for consistent styling
1441
- * - Log level color configuration (for backwards compatibility)
1442
- *
1443
- * @example
1444
- * // Using a preset theme
1445
- * <LoggerProvider theme="dark">
1446
- * <ScreenManager screens={screens} activeScreenId={activeId}>
1447
- * <Screen name="Logs">
1448
- * <LogMessage level="info">Hello</LogMessage>
1449
- * </Screen>
1450
- * </ScreenManager>
1451
- * </LoggerProvider>
1452
- *
1453
- * @example
1454
- * // Using a custom theme
1455
- * <LoggerProvider theme={myCustomTheme}>
1456
- * ...
1457
- * </LoggerProvider>
1458
- */ function LoggerProvider(props) {
1459
- const syntaxStyle = createMemo(() => props.syntaxStyle ?? SyntaxStyle.create());
1460
- const theme = createMemo(() => resolveTheme(props.theme ?? "dark"));
1461
- const levelColors = createMemo(() => ({
1462
- ...theme().logLevels,
1463
- ...props.levelColors
1464
- }));
1465
- const value = createMemo(() => ({
1466
- syntaxStyle: syntaxStyle(),
1467
- treeSitterClient: props.treeSitterClient,
1468
- levelColors: levelColors(),
1469
- theme: theme()
1470
- }));
1471
- return createComponent2(LoggerContext.Provider, {
1472
- get value() {
1473
- return value();
1474
- },
1475
- get children() {
1476
- return props.children;
1477
- }
1478
- });
1479
- }
1480
- /**
1481
- * Hook to access logger context.
1482
- * Returns default values if used outside LoggerProvider.
1483
- */ function useLoggerContext() {
1484
- const context = useContext(LoggerContext);
1485
- if (!context) return {
1486
- syntaxStyle: void 0,
1487
- treeSitterClient: void 0,
1488
- levelColors: darkTheme.logLevels,
1489
- theme: darkTheme
1490
- };
1491
- return context;
1492
- }
1493
-
1494
- //#endregion
1495
- //#region src/adapters/solid/hooks/use_theme.ts
1496
- /**
1497
- * Hook to access the current theme.
1498
- * Returns the theme from LoggerContext.
1499
- */ function useTheme() {
1500
- const { theme } = useLoggerContext();
1501
- return theme;
1502
- }
1503
-
1504
- //#endregion
1505
- //#region src/adapters/solid/components/filter/filter_bar.tsx
1506
- const LEVEL_LABELS = {
1507
- verbose: "V",
1508
- debug: "D",
1509
- log: "L",
1510
- warn: "W",
1511
- error: "E",
1512
- fatal: "F"
1513
- };
1514
- function FilterBar(props) {
1515
- const theme = useTheme();
1516
- const isSearchFocused = () => props.filter.focusedField === "search";
1517
- return (() => {
1518
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$8 = createElement("box"), _el$9 = createElement("text"), _el$1 = createElement("box"), _el$10 = createElement("text");
1519
- insertNode(_el$, _el$2);
1520
- insertNode(_el$, _el$8);
1521
- insertNode(_el$, _el$1);
1522
- setProp(_el$, "flexDirection", "column");
1523
- setProp(_el$, "border", ["bottom"]);
1524
- setProp(_el$, "paddingLeft", 1);
1525
- setProp(_el$, "paddingRight", 1);
1526
- insertNode(_el$2, _el$3);
1527
- insertNode(_el$2, _el$5);
1528
- setProp(_el$2, "flexDirection", "row");
1529
- setProp(_el$2, "gap", 1);
1530
- insertNode(_el$3, createTextNode(`/`));
1531
- insert(_el$5, () => props.filter.searchQuery || "Search logs...");
1532
- insert(_el$2, createComponent2(Show, {
1533
- get when() {
1534
- return isSearchFocused();
1535
- },
1536
- get children() {
1537
- var _el$6 = createElement("text");
1538
- insertNode(_el$6, createTextNode(`_`));
1539
- effect((_p$) => {
1540
- var _v$ = theme.filter.cursor, _v$2 = TextAttributes.BLINK;
1541
- _v$ !== _p$.e && (_p$.e = setProp(_el$6, "fg", _v$, _p$.e));
1542
- _v$2 !== _p$.t && (_p$.t = setProp(_el$6, "attributes", _v$2, _p$.t));
1543
- return _p$;
1544
- }, {
1545
- e: void 0,
1546
- t: void 0
1547
- });
1548
- return _el$6;
1549
- }
1550
- }), null);
1551
- insertNode(_el$8, _el$9);
1552
- setProp(_el$8, "flexDirection", "row");
1553
- setProp(_el$8, "gap", 1);
1554
- insertNode(_el$9, createTextNode(`Levels:`));
1555
- insert(_el$8, createComponent2(For, {
1556
- each: ALL_LOG_LEVELS,
1557
- children: (level, index) => {
1558
- const isEnabled = () => props.filter.enabledLevels.has(level);
1559
- const count = () => props.levelCounts[level];
1560
- const levelColor = () => theme.logLevels[level].border;
1561
- const isLevelsFocused = () => props.filter.focusedField === "levels";
1562
- return (() => {
1563
- var _el$12 = createElement("box"), _el$13 = createElement("text"), _el$14 = createTextNode(`:`);
1564
- insertNode(_el$12, _el$13);
1565
- setProp(_el$12, "flexDirection", "row");
1566
- insertNode(_el$13, _el$14);
1567
- insert(_el$13, () => index() + 1, _el$14);
1568
- insert(_el$13, () => LEVEL_LABELS[level], null);
1569
- insert(_el$12, createComponent2(Show, {
1570
- get when() {
1571
- return count() > 0;
1572
- },
1573
- get children() {
1574
- var _el$15 = createElement("text"), _el$16 = createTextNode(`(`), _el$17 = createTextNode(`)`);
1575
- insertNode(_el$15, _el$16);
1576
- insertNode(_el$15, _el$17);
1577
- insert(_el$15, (() => {
1578
- var _c$ = memo2(() => count() > 99);
1579
- return () => _c$() ? "99+" : count();
1580
- })(), _el$17);
1581
- effect((_$p) => setProp(_el$15, "fg", theme.filter.textDim, _$p));
1582
- return _el$15;
1583
- }
1584
- }), null);
1585
- effect((_p$) => {
1586
- var _v$9 = isEnabled() ? levelColor() : theme.filter.inactiveLevel, _v$0 = isLevelsFocused() ? TextAttributes.BOLD : void 0;
1587
- _v$9 !== _p$.e && (_p$.e = setProp(_el$13, "fg", _v$9, _p$.e));
1588
- _v$0 !== _p$.t && (_p$.t = setProp(_el$13, "attributes", _v$0, _p$.t));
1589
- return _p$;
1590
- }, {
1591
- e: void 0,
1592
- t: void 0
1593
- });
1594
- return _el$12;
1595
- })();
1596
- }
1597
- }), null);
1598
- insertNode(_el$1, _el$10);
1599
- setProp(_el$1, "flexDirection", "row");
1600
- insertNode(_el$10, createTextNode(`Tab: switch fields | 1-7: toggle levels | Esc: close`));
1601
- effect((_p$) => {
1602
- var _v$3 = theme.filter.background, _v$4 = theme.filter.border, _v$5 = isSearchFocused() ? theme.colors.primary : theme.filter.textDim, _v$6 = props.filter.searchQuery ? theme.filter.inputText : theme.filter.inputPlaceholder, _v$7 = theme.filter.textDim, _v$8 = theme.filter.textDim;
1603
- _v$3 !== _p$.e && (_p$.e = setProp(_el$, "backgroundColor", _v$3, _p$.e));
1604
- _v$4 !== _p$.t && (_p$.t = setProp(_el$, "borderColor", _v$4, _p$.t));
1605
- _v$5 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$5, _p$.a));
1606
- _v$6 !== _p$.o && (_p$.o = setProp(_el$5, "fg", _v$6, _p$.o));
1607
- _v$7 !== _p$.i && (_p$.i = setProp(_el$9, "fg", _v$7, _p$.i));
1608
- _v$8 !== _p$.n && (_p$.n = setProp(_el$10, "fg", _v$8, _p$.n));
1609
- return _p$;
1610
- }, {
1611
- e: void 0,
1612
- t: void 0,
1613
- a: void 0,
1614
- o: void 0,
1615
- i: void 0,
1616
- n: void 0
1617
- });
1618
- return _el$;
1619
- })();
1620
- }
1621
-
1622
- //#endregion
1623
- //#region src/adapters/solid/components/help/help_overlay.tsx
1624
- const CATEGORY_ORDER = [
1625
- "general",
1626
- "navigation",
1627
- "screen",
1628
- "filter",
1629
- "prompt"
1630
- ];
1631
- const CATEGORY_LABELS = {
1632
- general: "General",
1633
- navigation: "Navigation",
1634
- screen: "Screen",
1635
- filter: "Filter",
1636
- prompt: "Prompts"
1637
- };
1638
- function groupByCategory(bindings) {
1639
- const grouped = {
1640
- general: [],
1641
- navigation: [],
1642
- screen: [],
1643
- filter: [],
1644
- prompt: []
1645
- };
1646
- for (const binding of bindings) if (binding.description) grouped[binding.category].push(binding);
1647
- return grouped;
1648
- }
1649
- function HelpOverlay(props) {
1650
- const theme = useTheme();
1651
- const grouped = createMemo(() => groupByCategory(props.bindings));
1652
- return (() => {
1653
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("scrollbox"), _el$6 = createElement("box"), _el$7 = createElement("box"), _el$8 = createElement("text");
1654
- insertNode(_el$, _el$2);
1655
- insertNode(_el$, _el$5);
1656
- insertNode(_el$, _el$7);
1657
- setProp(_el$, "position", "absolute");
1658
- setProp(_el$, "top", 1);
1659
- setProp(_el$, "left", 2);
1660
- setProp(_el$, "right", 2);
1661
- setProp(_el$, "bottom", 1);
1662
- setProp(_el$, "border", [
1663
- "top",
1664
- "bottom",
1665
- "left",
1666
- "right"
1667
- ]);
1668
- setProp(_el$, "flexDirection", "column");
1669
- setProp(_el$, "paddingLeft", 2);
1670
- setProp(_el$, "paddingRight", 2);
1671
- setProp(_el$, "paddingTop", 1);
1672
- setProp(_el$, "paddingBottom", 1);
1673
- insertNode(_el$2, _el$3);
1674
- setProp(_el$2, "marginBottom", 1);
1675
- insertNode(_el$3, createTextNode(`Keyboard Shortcuts`));
1676
- insertNode(_el$5, _el$6);
1677
- setProp(_el$5, "scrollY", true);
1678
- setProp(_el$5, "flexGrow", 1);
1679
- setProp(_el$6, "flexDirection", "column");
1680
- setProp(_el$6, "gap", 1);
1681
- insert(_el$6, createComponent2(For, {
1682
- each: CATEGORY_ORDER,
1683
- children: (category) => {
1684
- const categoryBindings = () => grouped()[category];
1685
- return createComponent2(Show, {
1686
- get when() {
1687
- return categoryBindings().length > 0;
1688
- },
1689
- get children() {
1690
- var _el$0 = createElement("box"), _el$1 = createElement("text");
1691
- insertNode(_el$0, _el$1);
1692
- setProp(_el$0, "flexDirection", "column");
1693
- insert(_el$1, () => CATEGORY_LABELS[category]);
1694
- insert(_el$0, createComponent2(For, {
1695
- get each() {
1696
- return categoryBindings();
1697
- },
1698
- children: (binding) => (() => {
1699
- var _el$10 = createElement("box"), _el$11 = createElement("text"), _el$12 = createElement("text");
1700
- insertNode(_el$10, _el$11);
1701
- insertNode(_el$10, _el$12);
1702
- setProp(_el$10, "flexDirection", "row");
1703
- setProp(_el$10, "paddingLeft", 2);
1704
- setProp(_el$11, "width", 14);
1705
- insert(_el$11, () => formatKeyBinding(binding));
1706
- insert(_el$12, () => binding.description);
1707
- effect((_p$) => {
1708
- var _v$9 = theme.help.key, _v$0 = theme.help.description;
1709
- _v$9 !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$9, _p$.e));
1710
- _v$0 !== _p$.t && (_p$.t = setProp(_el$12, "fg", _v$0, _p$.t));
1711
- return _p$;
1712
- }, {
1713
- e: void 0,
1714
- t: void 0
1715
- });
1716
- return _el$10;
1717
- })()
1718
- }), null);
1719
- effect((_p$) => {
1720
- var _v$7 = theme.help.category, _v$8 = TextAttributes.BOLD;
1721
- _v$7 !== _p$.e && (_p$.e = setProp(_el$1, "fg", _v$7, _p$.e));
1722
- _v$8 !== _p$.t && (_p$.t = setProp(_el$1, "attributes", _v$8, _p$.t));
1723
- return _p$;
1724
- }, {
1725
- e: void 0,
1726
- t: void 0
1727
- });
1728
- return _el$0;
1729
- }
1730
- });
1731
- }
1732
- }));
1733
- insertNode(_el$7, _el$8);
1734
- setProp(_el$7, "marginTop", 1);
1735
- setProp(_el$7, "border", ["top"]);
1736
- setProp(_el$7, "paddingTop", 1);
1737
- insertNode(_el$8, createTextNode(`Press ? or Esc to close`));
1738
- effect((_p$) => {
1739
- var _v$ = theme.help.background, _v$2 = theme.help.border, _v$3 = theme.help.title, _v$4 = TextAttributes.BOLD, _v$5 = theme.separator.line, _v$6 = theme.help.hint;
1740
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "backgroundColor", _v$, _p$.e));
1741
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "borderColor", _v$2, _p$.t));
1742
- _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
1743
- _v$4 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$4, _p$.o));
1744
- _v$5 !== _p$.i && (_p$.i = setProp(_el$7, "borderColor", _v$5, _p$.i));
1745
- _v$6 !== _p$.n && (_p$.n = setProp(_el$8, "fg", _v$6, _p$.n));
1746
- return _p$;
1747
- }, {
1748
- e: void 0,
1749
- t: void 0,
1750
- a: void 0,
1751
- o: void 0,
1752
- i: void 0,
1753
- n: void 0
1754
- });
1755
- return _el$;
1756
- })();
1757
- }
1758
-
1759
- //#endregion
1760
- //#region src/adapters/solid/components/prompt/prompt_renderer.tsx
1761
- function PromptRenderer(props) {
1762
- const theme = useTheme();
1763
- const timeoutRemaining = () => getTimeoutRemaining(props.prompt);
1764
- return createComponent2(Switch, {
1765
- fallback: null,
1766
- get children() {
1767
- return [
1768
- createComponent2(Match, {
1769
- get when() {
1770
- return props.prompt.type === "choice";
1771
- },
1772
- get children() {
1773
- return createComponent2(ChoicePromptRenderer, {
1774
- get prompt() {
1775
- return props.prompt;
1776
- },
1777
- get timeoutRemaining() {
1778
- return timeoutRemaining();
1779
- },
1780
- get colors() {
1781
- return theme.prompt;
1782
- }
1783
- });
1784
- }
1785
- }),
1786
- createComponent2(Match, {
1787
- get when() {
1788
- return props.prompt.type === "confirm";
1789
- },
1790
- get children() {
1791
- return createComponent2(ConfirmPromptRenderer, {
1792
- get prompt() {
1793
- return props.prompt;
1794
- },
1795
- get timeoutRemaining() {
1796
- return timeoutRemaining();
1797
- },
1798
- get colors() {
1799
- return theme.prompt;
1800
- }
1801
- });
1802
- }
1803
- }),
1804
- createComponent2(Match, {
1805
- get when() {
1806
- return props.prompt.type === "input";
1807
- },
1808
- get children() {
1809
- return createComponent2(InputPromptRenderer, {
1810
- get prompt() {
1811
- return props.prompt;
1812
- },
1813
- get timeoutRemaining() {
1814
- return timeoutRemaining();
1815
- },
1816
- get colors() {
1817
- return theme.prompt;
1818
- }
1819
- });
1820
- }
1821
- }),
1822
- createComponent2(Match, {
1823
- get when() {
1824
- return props.prompt.type === "multiChoice";
1825
- },
1826
- get children() {
1827
- return createComponent2(MultiChoicePromptRenderer, {
1828
- get prompt() {
1829
- return props.prompt;
1830
- },
1831
- get timeoutRemaining() {
1832
- return timeoutRemaining();
1833
- },
1834
- get colors() {
1835
- return theme.prompt;
1836
- }
1837
- });
1838
- }
1839
- })
1840
- ];
1841
- }
1842
- });
1843
- }
1844
- function getTimeoutRemaining(prompt) {
1845
- if (!prompt.timeout || !prompt.timeoutStarted) return null;
1846
- const elapsed = Date.now() - prompt.timeoutStarted;
1847
- const remaining = Math.max(0, prompt.timeout - elapsed);
1848
- return Math.ceil(remaining / 1e3);
1849
- }
1850
- function TimeoutIndicator(props) {
1851
- return createComponent2(Show, {
1852
- get when() {
1853
- return props.seconds !== null;
1854
- },
1855
- get children() {
1856
- var _el$ = createElement("text"), _el$2 = createTextNode(` (auto-select in `), _el$4 = createTextNode(`s)`);
1857
- insertNode(_el$, _el$2);
1858
- insertNode(_el$, _el$4);
1859
- insert(_el$, () => props.seconds, _el$4);
1860
- effect((_p$) => {
1861
- var _v$ = props.colors.optionTextDim, _v$2 = TextAttributes.DIM;
1862
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "fg", _v$, _p$.e));
1863
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "attributes", _v$2, _p$.t));
1864
- return _p$;
1865
- }, {
1866
- e: void 0,
1867
- t: void 0
1868
- });
1869
- return _el$;
1870
- }
1871
- });
1872
- }
1873
- function ChoicePromptRenderer(props) {
1874
- return (() => {
1875
- var _el$5 = createElement("box"), _el$6 = createElement("box"), _el$7 = createElement("text"), _el$8 = createTextNode(`? `), _el$9 = createElement("box");
1876
- insertNode(_el$5, _el$6);
1877
- insertNode(_el$5, _el$9);
1878
- setProp(_el$5, "flexDirection", "column");
1879
- setProp(_el$5, "border", ["left"]);
1880
- setProp(_el$5, "paddingLeft", 1);
1881
- setProp(_el$5, "paddingRight", 1);
1882
- setProp(_el$5, "gap", 1);
1883
- insertNode(_el$6, _el$7);
1884
- setProp(_el$6, "flexDirection", "row");
1885
- insertNode(_el$7, _el$8);
1886
- insert(_el$7, () => props.prompt.question, null);
1887
- insert(_el$6, createComponent2(TimeoutIndicator, {
1888
- get seconds() {
1889
- return props.timeoutRemaining;
1890
- },
1891
- get colors() {
1892
- return props.colors;
1893
- }
1894
- }), null);
1895
- setProp(_el$9, "flexDirection", "column");
1896
- insert(_el$9, createComponent2(For, {
1897
- get each() {
1898
- return props.prompt.choices;
1899
- },
1900
- children: (choice, index) => {
1901
- const isSelected = () => index() === props.prompt.selectedIndex;
1902
- const showInput = () => isSelected() && choice.input && props.prompt.inputMode;
1903
- return (() => {
1904
- var _el$10 = createElement("box"), _el$11 = createElement("text"), _el$12 = createTextNode(`> `), _el$14 = createElement("text");
1905
- insertNode(_el$10, _el$11);
1906
- insertNode(_el$10, _el$14);
1907
- setProp(_el$10, "flexDirection", "row");
1908
- insertNode(_el$11, _el$12);
1909
- insert(_el$14, () => choice.label);
1910
- insert(_el$10, createComponent2(Show, {
1911
- get when() {
1912
- return showInput();
1913
- },
1914
- get children() {
1915
- var _el$15 = createElement("box"), _el$16 = createElement("text"), _el$18 = createElement("text"), _el$19 = createElement("text");
1916
- insertNode(_el$15, _el$16);
1917
- insertNode(_el$15, _el$18);
1918
- insertNode(_el$15, _el$19);
1919
- setProp(_el$15, "flexDirection", "row");
1920
- setProp(_el$15, "marginLeft", 1);
1921
- insertNode(_el$16, createTextNode(`: `));
1922
- insert(_el$18, () => props.prompt.inputValue);
1923
- insertNode(_el$19, createTextNode(`_`));
1924
- effect((_p$) => {
1925
- var _v$8 = props.colors.inputText, _v$9 = props.colors.inputText, _v$0 = props.colors.inputCursor, _v$1 = TextAttributes.BLINK;
1926
- _v$8 !== _p$.e && (_p$.e = setProp(_el$16, "fg", _v$8, _p$.e));
1927
- _v$9 !== _p$.t && (_p$.t = setProp(_el$18, "fg", _v$9, _p$.t));
1928
- _v$0 !== _p$.a && (_p$.a = setProp(_el$19, "fg", _v$0, _p$.a));
1929
- _v$1 !== _p$.o && (_p$.o = setProp(_el$19, "attributes", _v$1, _p$.o));
1930
- return _p$;
1931
- }, {
1932
- e: void 0,
1933
- t: void 0,
1934
- a: void 0,
1935
- o: void 0
1936
- });
1937
- return _el$15;
1938
- }
1939
- }), null);
1940
- insert(_el$10, createComponent2(Show, {
1941
- get when() {
1942
- return memo2(() => !!(isSelected() && choice.input))() && !props.prompt.inputMode;
1943
- },
1944
- get children() {
1945
- var _el$21 = createElement("text");
1946
- insertNode(_el$21, createTextNode(` (press Enter to type)`));
1947
- effect((_$p) => setProp(_el$21, "fg", props.colors.optionTextDim, _$p));
1948
- return _el$21;
1949
- }
1950
- }), null);
1951
- effect((_p$) => {
1952
- var _v$10 = isSelected() ? props.colors.optionSelected : "transparent", _v$11 = isSelected() ? props.colors.optionText : props.colors.optionTextDim, _v$12 = isSelected() ? TextAttributes.BOLD : void 0;
1953
- _v$10 !== _p$.e && (_p$.e = setProp(_el$11, "fg", _v$10, _p$.e));
1954
- _v$11 !== _p$.t && (_p$.t = setProp(_el$14, "fg", _v$11, _p$.t));
1955
- _v$12 !== _p$.a && (_p$.a = setProp(_el$14, "attributes", _v$12, _p$.a));
1956
- return _p$;
1957
- }, {
1958
- e: void 0,
1959
- t: void 0,
1960
- a: void 0
1961
- });
1962
- return _el$10;
1963
- })();
1964
- }
1965
- }));
1966
- insert(_el$5, createComponent2(Show, {
1967
- get when() {
1968
- return props.prompt.inputMode;
1969
- },
1970
- get fallback() {
1971
- return (() => {
1972
- var _el$23 = createElement("text");
1973
- insertNode(_el$23, createTextNode(`↑/↓ to navigate, Enter to select`));
1974
- effect((_p$) => {
1975
- var _v$13 = props.colors.optionTextDim, _v$14 = TextAttributes.DIM;
1976
- _v$13 !== _p$.e && (_p$.e = setProp(_el$23, "fg", _v$13, _p$.e));
1977
- _v$14 !== _p$.t && (_p$.t = setProp(_el$23, "attributes", _v$14, _p$.t));
1978
- return _p$;
1979
- }, {
1980
- e: void 0,
1981
- t: void 0
1982
- });
1983
- return _el$23;
1984
- })();
1985
- },
1986
- get children() {
1987
- var _el$0 = createElement("text");
1988
- insertNode(_el$0, createTextNode(`Type your answer, Enter to submit, Esc to cancel`));
1989
- effect((_p$) => {
1990
- var _v$3 = props.colors.optionTextDim, _v$4 = TextAttributes.DIM;
1991
- _v$3 !== _p$.e && (_p$.e = setProp(_el$0, "fg", _v$3, _p$.e));
1992
- _v$4 !== _p$.t && (_p$.t = setProp(_el$0, "attributes", _v$4, _p$.t));
1993
- return _p$;
1994
- }, {
1995
- e: void 0,
1996
- t: void 0
1997
- });
1998
- return _el$0;
1999
- }
2000
- }), null);
2001
- effect((_p$) => {
2002
- var _v$5 = props.colors.focusBorder, _v$6 = props.colors.question, _v$7 = TextAttributes.BOLD;
2003
- _v$5 !== _p$.e && (_p$.e = setProp(_el$5, "borderColor", _v$5, _p$.e));
2004
- _v$6 !== _p$.t && (_p$.t = setProp(_el$7, "fg", _v$6, _p$.t));
2005
- _v$7 !== _p$.a && (_p$.a = setProp(_el$7, "attributes", _v$7, _p$.a));
2006
- return _p$;
2007
- }, {
2008
- e: void 0,
2009
- t: void 0,
2010
- a: void 0
2011
- });
2012
- return _el$5;
2013
- })();
2014
- }
2015
- function ConfirmPromptRenderer(props) {
2016
- const confirmSelected = () => props.prompt.selectedValue === true;
2017
- const cancelSelected = () => props.prompt.selectedValue === false;
2018
- return (() => {
2019
- var _el$25 = createElement("box"), _el$26 = createElement("box"), _el$27 = createElement("text"), _el$28 = createTextNode(`? `), _el$29 = createElement("box"), _el$30 = createElement("box"), _el$31 = createElement("text"), _el$32 = createTextNode(` `), _el$33 = createElement("box"), _el$34 = createElement("text"), _el$35 = createTextNode(` `), _el$36 = createElement("text");
2020
- insertNode(_el$25, _el$26);
2021
- insertNode(_el$25, _el$29);
2022
- insertNode(_el$25, _el$36);
2023
- setProp(_el$25, "flexDirection", "column");
2024
- setProp(_el$25, "border", ["left"]);
2025
- setProp(_el$25, "paddingLeft", 1);
2026
- setProp(_el$25, "paddingRight", 1);
2027
- setProp(_el$25, "gap", 1);
2028
- insertNode(_el$26, _el$27);
2029
- setProp(_el$26, "flexDirection", "row");
2030
- insertNode(_el$27, _el$28);
2031
- insert(_el$27, () => props.prompt.question, null);
2032
- insert(_el$26, createComponent2(TimeoutIndicator, {
2033
- get seconds() {
2034
- return props.timeoutRemaining;
2035
- },
2036
- get colors() {
2037
- return props.colors;
2038
- }
2039
- }), null);
2040
- insertNode(_el$29, _el$30);
2041
- insertNode(_el$29, _el$33);
2042
- setProp(_el$29, "flexDirection", "row");
2043
- setProp(_el$29, "gap", 2);
2044
- insertNode(_el$30, _el$31);
2045
- setProp(_el$30, "paddingLeft", 1);
2046
- setProp(_el$30, "paddingRight", 1);
2047
- insertNode(_el$31, _el$32);
2048
- insert(_el$31, () => confirmSelected() ? ">" : " ", _el$32);
2049
- insert(_el$31, () => props.prompt.confirmText, null);
2050
- insertNode(_el$33, _el$34);
2051
- setProp(_el$33, "paddingLeft", 1);
2052
- setProp(_el$33, "paddingRight", 1);
2053
- insertNode(_el$34, _el$35);
2054
- insert(_el$34, () => cancelSelected() ? ">" : " ", _el$35);
2055
- insert(_el$34, () => props.prompt.cancelText, null);
2056
- insertNode(_el$36, createTextNode(`←/→ to select, Enter to confirm`));
2057
- effect((_p$) => {
2058
- var _v$15 = props.colors.focusBorder, _v$16 = props.colors.question, _v$17 = TextAttributes.BOLD, _v$18 = confirmSelected() ? props.colors.buttonSelectedBackground : void 0, _v$19 = confirmSelected() ? props.colors.confirmButton : props.colors.optionTextDim, _v$20 = confirmSelected() ? TextAttributes.BOLD : void 0, _v$21 = cancelSelected() ? props.colors.buttonSelectedBackground : void 0, _v$22 = cancelSelected() ? props.colors.cancelButton : props.colors.optionTextDim, _v$23 = cancelSelected() ? TextAttributes.BOLD : void 0, _v$24 = props.colors.optionTextDim, _v$25 = TextAttributes.DIM;
2059
- _v$15 !== _p$.e && (_p$.e = setProp(_el$25, "borderColor", _v$15, _p$.e));
2060
- _v$16 !== _p$.t && (_p$.t = setProp(_el$27, "fg", _v$16, _p$.t));
2061
- _v$17 !== _p$.a && (_p$.a = setProp(_el$27, "attributes", _v$17, _p$.a));
2062
- _v$18 !== _p$.o && (_p$.o = setProp(_el$30, "backgroundColor", _v$18, _p$.o));
2063
- _v$19 !== _p$.i && (_p$.i = setProp(_el$31, "fg", _v$19, _p$.i));
2064
- _v$20 !== _p$.n && (_p$.n = setProp(_el$31, "attributes", _v$20, _p$.n));
2065
- _v$21 !== _p$.s && (_p$.s = setProp(_el$33, "backgroundColor", _v$21, _p$.s));
2066
- _v$22 !== _p$.h && (_p$.h = setProp(_el$34, "fg", _v$22, _p$.h));
2067
- _v$23 !== _p$.r && (_p$.r = setProp(_el$34, "attributes", _v$23, _p$.r));
2068
- _v$24 !== _p$.d && (_p$.d = setProp(_el$36, "fg", _v$24, _p$.d));
2069
- _v$25 !== _p$.l && (_p$.l = setProp(_el$36, "attributes", _v$25, _p$.l));
2070
- return _p$;
2071
- }, {
2072
- e: void 0,
2073
- t: void 0,
2074
- a: void 0,
2075
- o: void 0,
2076
- i: void 0,
2077
- n: void 0,
2078
- s: void 0,
2079
- h: void 0,
2080
- r: void 0,
2081
- d: void 0,
2082
- l: void 0
2083
- });
2084
- return _el$25;
2085
- })();
2086
- }
2087
- function InputPromptRenderer(props) {
2088
- const hasValue = () => props.prompt.value.length > 0;
2089
- return (() => {
2090
- var _el$38 = createElement("box"), _el$39 = createElement("box"), _el$40 = createElement("text"), _el$41 = createTextNode(`? `), _el$42 = createElement("box"), _el$43 = createElement("text"), _el$44 = createElement("text"), _el$46 = createElement("text");
2091
- insertNode(_el$38, _el$39);
2092
- insertNode(_el$38, _el$42);
2093
- insertNode(_el$38, _el$46);
2094
- setProp(_el$38, "flexDirection", "column");
2095
- setProp(_el$38, "border", ["left"]);
2096
- setProp(_el$38, "paddingLeft", 1);
2097
- setProp(_el$38, "paddingRight", 1);
2098
- setProp(_el$38, "gap", 1);
2099
- insertNode(_el$39, _el$40);
2100
- setProp(_el$39, "flexDirection", "row");
2101
- insertNode(_el$40, _el$41);
2102
- insert(_el$40, () => props.prompt.question, null);
2103
- insert(_el$39, createComponent2(TimeoutIndicator, {
2104
- get seconds() {
2105
- return props.timeoutRemaining;
2106
- },
2107
- get colors() {
2108
- return props.colors;
2109
- }
2110
- }), null);
2111
- insertNode(_el$42, _el$43);
2112
- insertNode(_el$42, _el$44);
2113
- setProp(_el$42, "flexDirection", "row");
2114
- setProp(_el$42, "border", ["left"]);
2115
- setProp(_el$42, "paddingLeft", 1);
2116
- insert(_el$43, (() => {
2117
- var _c$ = memo2(() => !!hasValue());
2118
- return () => _c$() ? props.prompt.value : props.prompt.placeholder;
2119
- })());
2120
- insertNode(_el$44, createTextNode(`_`));
2121
- insertNode(_el$46, createTextNode(`Type your answer, Enter to submit`));
2122
- effect((_p$) => {
2123
- var _v$26 = props.colors.focusBorder, _v$27 = props.colors.question, _v$28 = TextAttributes.BOLD, _v$29 = props.colors.inputBorder, _v$30 = hasValue() ? props.colors.inputText : props.colors.inputPlaceholder, _v$31 = props.colors.inputCursor, _v$32 = TextAttributes.BLINK, _v$33 = props.colors.optionTextDim, _v$34 = TextAttributes.DIM;
2124
- _v$26 !== _p$.e && (_p$.e = setProp(_el$38, "borderColor", _v$26, _p$.e));
2125
- _v$27 !== _p$.t && (_p$.t = setProp(_el$40, "fg", _v$27, _p$.t));
2126
- _v$28 !== _p$.a && (_p$.a = setProp(_el$40, "attributes", _v$28, _p$.a));
2127
- _v$29 !== _p$.o && (_p$.o = setProp(_el$42, "borderColor", _v$29, _p$.o));
2128
- _v$30 !== _p$.i && (_p$.i = setProp(_el$43, "fg", _v$30, _p$.i));
2129
- _v$31 !== _p$.n && (_p$.n = setProp(_el$44, "fg", _v$31, _p$.n));
2130
- _v$32 !== _p$.s && (_p$.s = setProp(_el$44, "attributes", _v$32, _p$.s));
2131
- _v$33 !== _p$.h && (_p$.h = setProp(_el$46, "fg", _v$33, _p$.h));
2132
- _v$34 !== _p$.r && (_p$.r = setProp(_el$46, "attributes", _v$34, _p$.r));
2133
- return _p$;
2134
- }, {
2135
- e: void 0,
2136
- t: void 0,
2137
- a: void 0,
2138
- o: void 0,
2139
- i: void 0,
2140
- n: void 0,
2141
- s: void 0,
2142
- h: void 0,
2143
- r: void 0
2144
- });
2145
- return _el$38;
2146
- })();
2147
- }
2148
- function MultiChoicePromptRenderer(props) {
2149
- const selectedCount = () => props.prompt.selectedIndices.size;
2150
- const canSubmit = () => selectedCount() >= props.prompt.minSelect;
2151
- return (() => {
2152
- var _el$48 = createElement("box"), _el$49 = createElement("box"), _el$50 = createElement("text"), _el$51 = createTextNode(`? `), _el$52 = createElement("text"), _el$53 = createTextNode(` (`), _el$55 = createTextNode(`/`), _el$56 = createTextNode(` selected)`), _el$57 = createElement("box"), _el$58 = createElement("box"), _el$59 = createElement("text");
2153
- insertNode(_el$48, _el$49);
2154
- insertNode(_el$48, _el$57);
2155
- insertNode(_el$48, _el$58);
2156
- setProp(_el$48, "flexDirection", "column");
2157
- setProp(_el$48, "border", ["left"]);
2158
- setProp(_el$48, "paddingLeft", 1);
2159
- setProp(_el$48, "paddingRight", 1);
2160
- setProp(_el$48, "gap", 1);
2161
- insertNode(_el$49, _el$50);
2162
- insertNode(_el$49, _el$52);
2163
- setProp(_el$49, "flexDirection", "row");
2164
- insertNode(_el$50, _el$51);
2165
- insert(_el$50, () => props.prompt.question, null);
2166
- insertNode(_el$52, _el$53);
2167
- insertNode(_el$52, _el$55);
2168
- insertNode(_el$52, _el$56);
2169
- insert(_el$52, selectedCount, _el$55);
2170
- insert(_el$52, () => props.prompt.maxSelect, _el$56);
2171
- insert(_el$49, createComponent2(TimeoutIndicator, {
2172
- get seconds() {
2173
- return props.timeoutRemaining;
2174
- },
2175
- get colors() {
2176
- return props.colors;
2177
- }
2178
- }), null);
2179
- setProp(_el$57, "flexDirection", "column");
2180
- insert(_el$57, createComponent2(For, {
2181
- get each() {
2182
- return props.prompt.choices;
2183
- },
2184
- children: (choice, index) => {
2185
- const isFocused = () => index() === props.prompt.focusedIndex;
2186
- const isChecked = () => props.prompt.selectedIndices.has(index());
2187
- return (() => {
2188
- var _el$63 = createElement("box"), _el$64 = createElement("text"), _el$65 = createTextNode(`> `), _el$67 = createElement("text"), _el$68 = createTextNode(` `), _el$69 = createElement("text");
2189
- insertNode(_el$63, _el$64);
2190
- insertNode(_el$63, _el$67);
2191
- insertNode(_el$63, _el$69);
2192
- setProp(_el$63, "flexDirection", "row");
2193
- insertNode(_el$64, _el$65);
2194
- insertNode(_el$67, _el$68);
2195
- insert(_el$67, () => isChecked() ? "[✓]" : "[ ]", _el$68);
2196
- insert(_el$69, () => choice.label);
2197
- effect((_p$) => {
2198
- var _v$43 = isFocused() ? props.colors.optionSelected : "transparent", _v$44 = isChecked() ? props.colors.optionSelected : props.colors.optionTextDim, _v$45 = isFocused() ? props.colors.optionText : props.colors.optionTextDim, _v$46 = isFocused() ? TextAttributes.BOLD : void 0;
2199
- _v$43 !== _p$.e && (_p$.e = setProp(_el$64, "fg", _v$43, _p$.e));
2200
- _v$44 !== _p$.t && (_p$.t = setProp(_el$67, "fg", _v$44, _p$.t));
2201
- _v$45 !== _p$.a && (_p$.a = setProp(_el$69, "fg", _v$45, _p$.a));
2202
- _v$46 !== _p$.o && (_p$.o = setProp(_el$69, "attributes", _v$46, _p$.o));
2203
- return _p$;
2204
- }, {
2205
- e: void 0,
2206
- t: void 0,
2207
- a: void 0,
2208
- o: void 0
2209
- });
2210
- return _el$63;
2211
- })();
2212
- }
2213
- }));
2214
- insertNode(_el$58, _el$59);
2215
- setProp(_el$58, "flexDirection", "column");
2216
- insertNode(_el$59, createTextNode(`↑/↓ to navigate, Space to toggle`));
2217
- insert(_el$58, createComponent2(Show, {
2218
- get when() {
2219
- return canSubmit();
2220
- },
2221
- get fallback() {
2222
- return (() => {
2223
- var _el$70 = createElement("text"), _el$71 = createTextNode(`Select at least `), _el$72 = createTextNode(` option`);
2224
- insertNode(_el$70, _el$71);
2225
- insertNode(_el$70, _el$72);
2226
- insert(_el$70, () => props.prompt.minSelect, _el$72);
2227
- insert(_el$70, () => props.prompt.minSelect > 1 ? "s" : "", null);
2228
- effect((_p$) => {
2229
- var _v$47 = props.colors.cancelButton, _v$48 = TextAttributes.DIM;
2230
- _v$47 !== _p$.e && (_p$.e = setProp(_el$70, "fg", _v$47, _p$.e));
2231
- _v$48 !== _p$.t && (_p$.t = setProp(_el$70, "attributes", _v$48, _p$.t));
2232
- return _p$;
2233
- }, {
2234
- e: void 0,
2235
- t: void 0
2236
- });
2237
- return _el$70;
2238
- })();
2239
- },
2240
- get children() {
2241
- var _el$61 = createElement("text");
2242
- insertNode(_el$61, createTextNode(`Enter to confirm`));
2243
- effect((_p$) => {
2244
- var _v$35 = props.colors.optionTextDim, _v$36 = TextAttributes.DIM;
2245
- _v$35 !== _p$.e && (_p$.e = setProp(_el$61, "fg", _v$35, _p$.e));
2246
- _v$36 !== _p$.t && (_p$.t = setProp(_el$61, "attributes", _v$36, _p$.t));
2247
- return _p$;
2248
- }, {
2249
- e: void 0,
2250
- t: void 0
2251
- });
2252
- return _el$61;
2253
- }
2254
- }), null);
2255
- effect((_p$) => {
2256
- var _v$37 = props.colors.focusBorder, _v$38 = props.colors.question, _v$39 = TextAttributes.BOLD, _v$40 = props.colors.optionTextDim, _v$41 = props.colors.optionTextDim, _v$42 = TextAttributes.DIM;
2257
- _v$37 !== _p$.e && (_p$.e = setProp(_el$48, "borderColor", _v$37, _p$.e));
2258
- _v$38 !== _p$.t && (_p$.t = setProp(_el$50, "fg", _v$38, _p$.t));
2259
- _v$39 !== _p$.a && (_p$.a = setProp(_el$50, "attributes", _v$39, _p$.a));
2260
- _v$40 !== _p$.o && (_p$.o = setProp(_el$52, "fg", _v$40, _p$.o));
2261
- _v$41 !== _p$.i && (_p$.i = setProp(_el$59, "fg", _v$41, _p$.i));
2262
- _v$42 !== _p$.n && (_p$.n = setProp(_el$59, "attributes", _v$42, _p$.n));
2263
- return _p$;
2264
- }, {
2265
- e: void 0,
2266
- t: void 0,
2267
- a: void 0,
2268
- o: void 0,
2269
- i: void 0,
2270
- n: void 0
2271
- });
2272
- return _el$48;
2273
- })();
2274
- }
2275
-
2276
- //#endregion
2277
- //#region src/adapters/solid/components/file/file_log.tsx
2278
- /**
2279
- * FileLog - Displays file content, diffs, or partial files with error highlighting.
2280
- *
2281
- * Three modes:
2282
- * 1. "full" - Display complete file with syntax highlighting
2283
- * 2. "diff" - Display unified diff using <diff> component
2284
- * 3. "partial" - Display file excerpt with optional error line highlighting
2285
- *
2286
- * @example Full file
2287
- * <FileLog
2288
- * mode="full"
2289
- * filePath="src/index.ts"
2290
- * content={fileContent}
2291
- * />
2292
- *
2293
- * @example Diff
2294
- * <FileLog
2295
- * mode="diff"
2296
- * filePath="src/api.ts"
2297
- * diff={unifiedDiff}
2298
- * view="unified"
2299
- * />
2300
- *
2301
- * @example Partial with error
2302
- * <FileLog
2303
- * mode="partial"
2304
- * filePath="src/utils.ts"
2305
- * content={excerpt}
2306
- * startLine={42}
2307
- * errorLines={[45, 46]}
2308
- * />
2309
- */ function FileLog(props) {
2310
- const { syntaxStyle, treeSitterClient } = useLoggerContext();
2311
- const filetype = () => props.filetype ?? resolveFiletype(props.filePath);
2312
- const showHeader = () => props.showHeader ?? true;
2313
- const showLineNumbers = () => props.showLineNumbers ?? true;
2314
- return (() => {
2315
- var _el$ = createElement("box");
2316
- setProp(_el$, "flexDirection", "column");
2317
- setProp(_el$, "marginBottom", 1);
2318
- insert(_el$, createComponent2(Show, {
2319
- get when() {
2320
- return showHeader();
2321
- },
2322
- get children() {
2323
- var _el$2 = createElement("box"), _el$3 = createElement("text");
2324
- insertNode(_el$2, _el$3);
2325
- setProp(_el$2, "paddingLeft", 1);
2326
- setProp(_el$2, "paddingRight", 1);
2327
- setProp(_el$2, "border", ["bottom"]);
2328
- insert(_el$3, () => props.filePath);
2329
- effect((_p$) => {
2330
- var _v$ = props.headerBackgroundColor ?? HEADER_COLORS.background, _v$2 = HEADER_COLORS.border, _v$3 = HEADER_COLORS.text;
2331
- _v$ !== _p$.e && (_p$.e = setProp(_el$2, "backgroundColor", _v$, _p$.e));
2332
- _v$2 !== _p$.t && (_p$.t = setProp(_el$2, "borderColor", _v$2, _p$.t));
2333
- _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
2334
- return _p$;
2335
- }, {
2336
- e: void 0,
2337
- t: void 0,
2338
- a: void 0
2339
- });
2340
- return _el$2;
2341
- }
2342
- }), null);
2343
- insert(_el$, createComponent2(Show, {
2344
- get when() {
2345
- return props.mode === "full";
2346
- },
2347
- get children() {
2348
- return createComponent2(FileLogFull, mergeProps3(props, {
2349
- get filetype() {
2350
- return filetype();
2351
- },
2352
- syntaxStyle,
2353
- treeSitterClient,
2354
- get showLineNumbers() {
2355
- return showLineNumbers();
2356
- }
2357
- }));
2358
- }
2359
- }), null);
2360
- insert(_el$, createComponent2(Show, {
2361
- get when() {
2362
- return props.mode === "diff";
2363
- },
2364
- get children() {
2365
- return createComponent2(FileLogDiff, mergeProps3(props, {
2366
- get filetype() {
2367
- return filetype();
2368
- },
2369
- syntaxStyle,
2370
- treeSitterClient
2371
- }));
2372
- }
2373
- }), null);
2374
- insert(_el$, createComponent2(Show, {
2375
- get when() {
2376
- return props.mode === "partial";
2377
- },
2378
- get children() {
2379
- return createComponent2(FileLogPartial, mergeProps3(props, {
2380
- get filetype() {
2381
- return filetype();
2382
- },
2383
- syntaxStyle,
2384
- treeSitterClient,
2385
- get showLineNumbers() {
2386
- return showLineNumbers();
2387
- }
2388
- }));
2389
- }
2390
- }), null);
2391
- return _el$;
2392
- })();
2393
- }
2394
- /**
2395
- * Full file display with syntax highlighting.
2396
- */ function FileLogFull(props) {
2397
- return createComponent2(Show, {
2398
- get when() {
2399
- return props.syntaxStyle;
2400
- },
2401
- get fallback() {
2402
- return (() => {
2403
- var _el$5 = createElement("box"), _el$6 = createElement("text");
2404
- insertNode(_el$5, _el$6);
2405
- setProp(_el$5, "paddingLeft", 1);
2406
- setProp(_el$5, "paddingRight", 1);
2407
- insert(_el$6, () => props.content);
2408
- return _el$5;
2409
- })();
2410
- },
2411
- get children() {
2412
- var _el$4 = createElement("code");
2413
- effect((_p$) => {
2414
- var _v$4 = props.content, _v$5 = props.filetype, _v$6 = props.syntaxStyle, _v$7 = props.treeSitterClient;
2415
- _v$4 !== _p$.e && (_p$.e = setProp(_el$4, "content", _v$4, _p$.e));
2416
- _v$5 !== _p$.t && (_p$.t = setProp(_el$4, "filetype", _v$5, _p$.t));
2417
- _v$6 !== _p$.a && (_p$.a = setProp(_el$4, "syntaxStyle", _v$6, _p$.a));
2418
- _v$7 !== _p$.o && (_p$.o = setProp(_el$4, "treeSitterClient", _v$7, _p$.o));
2419
- return _p$;
2420
- }, {
2421
- e: void 0,
2422
- t: void 0,
2423
- a: void 0,
2424
- o: void 0
2425
- });
2426
- return _el$4;
2427
- }
2428
- });
2429
- }
2430
- /**
2431
- * Diff display using the built-in <diff> component.
2432
- */ function FileLogDiff(props) {
2433
- const view = () => props.view ?? "unified";
2434
- return createComponent2(Show, {
2435
- get when() {
2436
- return props.syntaxStyle;
2437
- },
2438
- get fallback() {
2439
- return (() => {
2440
- var _el$8 = createElement("box"), _el$9 = createElement("text");
2441
- insertNode(_el$8, _el$9);
2442
- setProp(_el$8, "paddingLeft", 1);
2443
- setProp(_el$8, "paddingRight", 1);
2444
- insert(_el$9, () => props.diff);
2445
- return _el$8;
2446
- })();
2447
- },
2448
- get children() {
2449
- var _el$7 = createElement("diff");
2450
- effect((_p$) => {
2451
- var _v$8 = props.diff, _v$9 = view(), _v$0 = props.filetype, _v$1 = props.syntaxStyle, _v$10 = props.treeSitterClient;
2452
- _v$8 !== _p$.e && (_p$.e = setProp(_el$7, "diff", _v$8, _p$.e));
2453
- _v$9 !== _p$.t && (_p$.t = setProp(_el$7, "view", _v$9, _p$.t));
2454
- _v$0 !== _p$.a && (_p$.a = setProp(_el$7, "filetype", _v$0, _p$.a));
2455
- _v$1 !== _p$.o && (_p$.o = setProp(_el$7, "syntaxStyle", _v$1, _p$.o));
2456
- _v$10 !== _p$.i && (_p$.i = setProp(_el$7, "treeSitterClient", _v$10, _p$.i));
2457
- return _p$;
2458
- }, {
2459
- e: void 0,
2460
- t: void 0,
2461
- a: void 0,
2462
- o: void 0,
2463
- i: void 0
2464
- });
2465
- return _el$7;
2466
- }
2467
- });
2468
- }
2469
- /**
2470
- * Partial file display with error line highlighting.
2471
- *
2472
- * This component renders a file excerpt and highlights specific lines
2473
- * as errors using box overlays with colored backgrounds.
2474
- */ function FileLogPartial(props) {
2475
- const lines = createMemo(() => props.content.split("\n"));
2476
- const errorLineSet = createMemo(() => new Set(props.errorLines ?? []));
2477
- const errorBg = () => props.errorLineBackground ?? ERROR_HIGHLIGHT_COLORS.background;
2478
- const errorBorder = () => props.errorLineBorderColor ?? ERROR_HIGHLIGHT_COLORS.border;
2479
- const maxLineNum = () => props.startLine + lines().length - 1;
2480
- const lineNumWidth = () => Math.max(4, String(maxLineNum()).length + 1);
2481
- return (() => {
2482
- var _el$0 = createElement("box");
2483
- setProp(_el$0, "flexDirection", "column");
2484
- insert(_el$0, createComponent2(For, {
2485
- get each() {
2486
- return lines();
2487
- },
2488
- children: (line, index) => {
2489
- const lineNumber = () => props.startLine + index();
2490
- const isError = () => errorLineSet().has(lineNumber());
2491
- return (() => {
2492
- var _el$1 = createElement("box"), _el$12 = createElement("box");
2493
- insertNode(_el$1, _el$12);
2494
- setProp(_el$1, "flexDirection", "row");
2495
- insert(_el$1, createComponent2(Show, {
2496
- get when() {
2497
- return props.showLineNumbers;
2498
- },
2499
- get children() {
2500
- var _el$10 = createElement("box"), _el$11 = createElement("text");
2501
- insertNode(_el$10, _el$11);
2502
- setProp(_el$10, "paddingRight", 1);
2503
- setProp(_el$11, "fg", "#6B7280");
2504
- insert(_el$11, () => String(lineNumber()).padStart(lineNumWidth() - 1));
2505
- effect((_p$) => {
2506
- var _v$11 = lineNumWidth(), _v$12 = isError() ? ERROR_HIGHLIGHT_COLORS.gutterBackground : HEADER_COLORS.background;
2507
- _v$11 !== _p$.e && (_p$.e = setProp(_el$10, "width", _v$11, _p$.e));
2508
- _v$12 !== _p$.t && (_p$.t = setProp(_el$10, "backgroundColor", _v$12, _p$.t));
2509
- return _p$;
2510
- }, {
2511
- e: void 0,
2512
- t: void 0
2513
- });
2514
- return _el$10;
2515
- }
2516
- }), _el$12);
2517
- setProp(_el$12, "flexGrow", 1);
2518
- setProp(_el$12, "paddingLeft", 1);
2519
- insert(_el$12, createComponent2(Show, {
2520
- get when() {
2521
- return props.syntaxStyle;
2522
- },
2523
- get fallback() {
2524
- return (() => {
2525
- var _el$14 = createElement("text");
2526
- insert(_el$14, line);
2527
- return _el$14;
2528
- })();
2529
- },
2530
- get children() {
2531
- var _el$13 = createElement("code");
2532
- setProp(_el$13, "content", line);
2533
- effect((_p$) => {
2534
- var _v$13 = props.filetype, _v$14 = props.syntaxStyle, _v$15 = props.treeSitterClient;
2535
- _v$13 !== _p$.e && (_p$.e = setProp(_el$13, "filetype", _v$13, _p$.e));
2536
- _v$14 !== _p$.t && (_p$.t = setProp(_el$13, "syntaxStyle", _v$14, _p$.t));
2537
- _v$15 !== _p$.a && (_p$.a = setProp(_el$13, "treeSitterClient", _v$15, _p$.a));
2538
- return _p$;
2539
- }, {
2540
- e: void 0,
2541
- t: void 0,
2542
- a: void 0
2543
- });
2544
- return _el$13;
2545
- }
2546
- }));
2547
- effect((_p$) => {
2548
- var _v$16 = isError() ? errorBg() : void 0, _v$17 = isError() ? ["left"] : void 0, _v$18 = isError() ? errorBorder() : void 0;
2549
- _v$16 !== _p$.e && (_p$.e = setProp(_el$1, "backgroundColor", _v$16, _p$.e));
2550
- _v$17 !== _p$.t && (_p$.t = setProp(_el$1, "border", _v$17, _p$.t));
2551
- _v$18 !== _p$.a && (_p$.a = setProp(_el$1, "borderColor", _v$18, _p$.a));
2552
- return _p$;
2553
- }, {
2554
- e: void 0,
2555
- t: void 0,
2556
- a: void 0
2557
- });
2558
- return _el$1;
2559
- })();
2560
- }
2561
- }));
2562
- return _el$0;
2563
- })();
2564
- }
2565
-
2566
- //#endregion
2567
- //#region src/adapters/solid/components/log/log_message.tsx
2568
- /**
2569
- * LogMessage - A chat-like styled log message with level-based coloring.
2570
- *
2571
- * Features:
2572
- * - Left border with prominent color based on log level
2573
- * - Subtle tinted background matching the log level
2574
- * - Optional timestamp and label display
2575
- * - Supports both simple text and complex children
2576
- * - Optional variant for semantic styling (e.g., 'success', 'trace')
2577
- *
2578
- * @example
2579
- * <LogMessage level="error">
2580
- * Connection failed: timeout after 30s
2581
- * </LogMessage>
2582
- *
2583
- * @example
2584
- * <LogMessage level="log" timestamp={new Date()} label="API">
2585
- * Request completed successfully
2586
- * </LogMessage>
2587
- *
2588
- * @example
2589
- * <LogMessage level="log" variant="success">
2590
- * Operation completed successfully
2591
- * </LogMessage>
2592
- */ function LogMessage(props) {
2593
- const theme = useTheme();
2594
- const levelColors = () => props.variant ? VARIANT_COLORS[props.variant] : theme.logLevels[props.level];
2595
- const borderColor = () => props.borderColor ?? levelColors().border;
2596
- const backgroundColor = () => props.backgroundColor ?? levelColors().background;
2597
- const textColor = () => levelColors().text ?? theme.colors.foreground;
2598
- const borderSides = () => props.borderStyle === "thin" || props.borderStyle === void 0 ? ["left"] : [
2599
- "left",
2600
- "top",
2601
- "bottom"
2602
- ];
2603
- const formattedTimestamp = () => {
2604
- if (!props.timestamp) return null;
2605
- return props.timestamp instanceof Date ? props.timestamp.toLocaleTimeString() : props.timestamp;
2606
- };
2607
- return (() => {
2608
- var _el$ = createElement("box"), _el$7 = createElement("text");
2609
- insertNode(_el$, _el$7);
2610
- setProp(_el$, "flexDirection", "column");
2611
- insert(_el$, createComponent2(Show, {
2612
- get when() {
2613
- return formattedTimestamp() || props.label;
2614
- },
2615
- get children() {
2616
- var _el$2 = createElement("box");
2617
- setProp(_el$2, "flexDirection", "row");
2618
- setProp(_el$2, "gap", 1);
2619
- insert(_el$2, createComponent2(Show, {
2620
- get when() {
2621
- return formattedTimestamp();
2622
- },
2623
- get children() {
2624
- var _el$3 = createElement("text");
2625
- insert(_el$3, formattedTimestamp);
2626
- effect((_$p) => setProp(_el$3, "fg", theme.colors.muted, _$p));
2627
- return _el$3;
2628
- }
2629
- }), null);
2630
- insert(_el$2, createComponent2(Show, {
2631
- get when() {
2632
- return props.label;
2633
- },
2634
- get children() {
2635
- var _el$4 = createElement("text"), _el$5 = createTextNode(`[`), _el$6 = createTextNode(`]`);
2636
- insertNode(_el$4, _el$5);
2637
- insertNode(_el$4, _el$6);
2638
- insert(_el$4, () => props.label, _el$6);
2639
- effect((_p$) => {
2640
- var _v$ = levelColors().border, _v$2 = TextAttributes.BOLD;
2641
- _v$ !== _p$.e && (_p$.e = setProp(_el$4, "fg", _v$, _p$.e));
2642
- _v$2 !== _p$.t && (_p$.t = setProp(_el$4, "attributes", _v$2, _p$.t));
2643
- return _p$;
2644
- }, {
2645
- e: void 0,
2646
- t: void 0
2647
- });
2648
- return _el$4;
2649
- }
2650
- }), null);
2651
- return _el$2;
2652
- }
2653
- }), _el$7);
2654
- insert(_el$7, () => props.children);
2655
- insert(_el$, createComponent2(Show, {
2656
- get when() {
2657
- return props.trace;
2658
- },
2659
- get children() {
2660
- var _el$8 = createElement("box"), _el$9 = createElement("text");
2661
- insertNode(_el$8, _el$9);
2662
- setProp(_el$8, "marginTop", 1);
2663
- insert(_el$9, () => props.trace);
2664
- effect((_$p) => setProp(_el$9, "fg", theme.colors.muted, _$p));
2665
- return _el$8;
2666
- }
2667
- }), null);
2668
- effect((_p$) => {
2669
- var _v$3 = borderSides(), _v$4 = borderColor(), _v$5 = backgroundColor(), _v$6 = props.padding ?? 1, _v$7 = props.padding ?? 1, _v$8 = props.margin ?? 0, _v$9 = textColor();
2670
- _v$3 !== _p$.e && (_p$.e = setProp(_el$, "border", _v$3, _p$.e));
2671
- _v$4 !== _p$.t && (_p$.t = setProp(_el$, "borderColor", _v$4, _p$.t));
2672
- _v$5 !== _p$.a && (_p$.a = setProp(_el$, "backgroundColor", _v$5, _p$.a));
2673
- _v$6 !== _p$.o && (_p$.o = setProp(_el$, "paddingLeft", _v$6, _p$.o));
2674
- _v$7 !== _p$.i && (_p$.i = setProp(_el$, "paddingRight", _v$7, _p$.i));
2675
- _v$8 !== _p$.n && (_p$.n = setProp(_el$, "marginBottom", _v$8, _p$.n));
2676
- _v$9 !== _p$.s && (_p$.s = setProp(_el$7, "fg", _v$9, _p$.s));
2677
- return _p$;
2678
- }, {
2679
- e: void 0,
2680
- t: void 0,
2681
- a: void 0,
2682
- o: void 0,
2683
- i: void 0,
2684
- n: void 0,
2685
- s: void 0
2686
- });
2687
- return _el$;
2688
- })();
2689
- }
2690
-
2691
- //#endregion
2692
- //#region src/adapters/solid/components/screen/loading_message.tsx
2693
- const SPINNER_FRAMES = [
2694
- "⠋",
2695
- "⠙",
2696
- "⠹",
2697
- "⠸",
2698
- "⠼",
2699
- "⠴",
2700
- "⠦",
2701
- "⠧",
2702
- "⠇",
2703
- "⠏"
2704
- ];
2705
- function LoadingMessage(props) {
2706
- const [frameIndex, setFrameIndex] = createSignal(0);
2707
- createEffect(() => {
2708
- if (props.message.status === "loading") {
2709
- const interval = setInterval(() => {
2710
- setFrameIndex((prev) => (prev + 1) % SPINNER_FRAMES.length);
2711
- }, 80);
2712
- onCleanup(() => clearInterval(interval));
2713
- }
2714
- });
2715
- const level = () => props.message.status === "fail" ? "error" : "log";
2716
- const variant = () => props.message.status === "success" ? "success" : void 0;
2717
- const displayContent = () => props.message.resolvedContent ?? props.message.content;
2718
- const spinner = () => props.message.status === "loading" ? SPINNER_FRAMES[frameIndex()] + " " : "";
2719
- return createComponent2(LogMessage, {
2720
- get level() {
2721
- return level();
2722
- },
2723
- get variant() {
2724
- return variant();
2725
- },
2726
- get timestamp() {
2727
- return props.message.timestamp;
2728
- },
2729
- get children() {
2730
- return spinner() + displayContent();
2731
- }
2732
- });
2733
- }
2734
-
2735
- //#endregion
2736
- //#region src/adapters/solid/components/screen/progress_message.tsx
2737
- function ProgressMessage(props) {
2738
- const theme = useTheme();
2739
- const percent = () => Math.round(props.message.current / props.message.total * 100);
2740
- const barWidth = 20;
2741
- const filled = () => Math.round(percent() / 100 * barWidth);
2742
- const empty = () => barWidth - filled();
2743
- const barFilled = () => "█".repeat(filled());
2744
- const barEmpty = () => "░".repeat(empty());
2745
- const borderColor = () => props.message.status === "complete" ? theme.progress.complete : props.message.status === "failed" ? theme.progress.failed : theme.progress.border;
2746
- const backgroundColor = () => props.message.status === "complete" ? theme.progress.completeBackground : props.message.status === "failed" ? theme.progress.failedBackground : theme.progress.background;
2747
- const barColor = () => props.message.status === "complete" ? theme.progress.complete : props.message.status === "failed" ? theme.progress.failed : theme.progress.barFilled;
2748
- const displayLabel = () => props.message.resolvedContent ?? props.message.label;
2749
- return (() => {
2750
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createTextNode(`[`), _el$5 = createElement("text"), _el$6 = createTextNode(`]`), _el$7 = createElement("text"), _el$8 = createTextNode(`%`), _el$9 = createElement("text");
2751
- insertNode(_el$, _el$2);
2752
- setProp(_el$, "flexDirection", "column");
2753
- setProp(_el$, "border", ["left"]);
2754
- setProp(_el$, "paddingLeft", 1);
2755
- setProp(_el$, "paddingRight", 1);
2756
- insertNode(_el$2, _el$3);
2757
- insertNode(_el$2, _el$5);
2758
- insertNode(_el$2, _el$7);
2759
- insertNode(_el$2, _el$9);
2760
- setProp(_el$2, "flexDirection", "row");
2761
- setProp(_el$2, "gap", 1);
2762
- insertNode(_el$3, _el$4);
2763
- insert(_el$3, barFilled, null);
2764
- insertNode(_el$5, _el$6);
2765
- insert(_el$5, barEmpty, _el$6);
2766
- insertNode(_el$7, _el$8);
2767
- insert(_el$7, percent, _el$8);
2768
- insert(_el$9, displayLabel);
2769
- effect((_p$) => {
2770
- var _v$ = borderColor(), _v$2 = backgroundColor(), _v$3 = barColor(), _v$4 = theme.progress.barEmpty, _v$5 = theme.progress.textDim, _v$6 = theme.progress.text;
2771
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$, _p$.e));
2772
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$2, _p$.t));
2773
- _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
2774
- _v$4 !== _p$.o && (_p$.o = setProp(_el$5, "fg", _v$4, _p$.o));
2775
- _v$5 !== _p$.i && (_p$.i = setProp(_el$7, "fg", _v$5, _p$.i));
2776
- _v$6 !== _p$.n && (_p$.n = setProp(_el$9, "fg", _v$6, _p$.n));
2777
- return _p$;
2778
- }, {
2779
- e: void 0,
2780
- t: void 0,
2781
- a: void 0,
2782
- o: void 0,
2783
- i: void 0,
2784
- n: void 0
2785
- });
2786
- return _el$;
2787
- })();
2788
- }
2789
-
2790
- //#endregion
2791
- //#region src/adapters/solid/components/screen/table_message.tsx
2792
- function TableMessage(props) {
2793
- const colWidths = createMemo(() => props.message.headers.map((h, i) => {
2794
- const headerLen = h.length;
2795
- const maxRowLen = props.message.rows.length > 0 ? Math.max(...props.message.rows.map((r) => (r[i] ?? "").length)) : 0;
2796
- return Math.max(headerLen, maxRowLen);
2797
- }));
2798
- const pad = (str, width) => str.padEnd(width);
2799
- const headerRow = createMemo(() => props.message.headers.map((h, i) => pad(h, colWidths()[i] ?? 0)).join(" │ "));
2800
- const separator = createMemo(() => colWidths().map((w) => "─".repeat(w)).join("─┼─"));
2801
- const dataRows = createMemo(() => props.message.rows.map((row) => row.map((cell, i) => pad(cell, colWidths()[i] ?? 0)).join(" │ ")));
2802
- return (() => {
2803
- var _el$ = createElement("box"), _el$3 = createElement("text"), _el$4 = createElement("text");
2804
- insertNode(_el$, _el$3);
2805
- insertNode(_el$, _el$4);
2806
- setProp(_el$, "flexDirection", "column");
2807
- setProp(_el$, "border", ["left"]);
2808
- setProp(_el$, "paddingLeft", 1);
2809
- setProp(_el$, "paddingRight", 1);
2810
- insert(_el$, createComponent2(Show, {
2811
- get when() {
2812
- return props.message.title;
2813
- },
2814
- get children() {
2815
- var _el$2 = createElement("text");
2816
- insert(_el$2, () => props.message.title);
2817
- effect((_p$) => {
2818
- var _v$ = TABLE_COLORS.title, _v$2 = TextAttributes.BOLD;
2819
- _v$ !== _p$.e && (_p$.e = setProp(_el$2, "fg", _v$, _p$.e));
2820
- _v$2 !== _p$.t && (_p$.t = setProp(_el$2, "attributes", _v$2, _p$.t));
2821
- return _p$;
2822
- }, {
2823
- e: void 0,
2824
- t: void 0
2825
- });
2826
- return _el$2;
2827
- }
2828
- }), _el$3);
2829
- insert(_el$3, headerRow);
2830
- insert(_el$4, separator);
2831
- insert(_el$, createComponent2(For, {
2832
- get each() {
2833
- return dataRows();
2834
- },
2835
- children: (row) => (() => {
2836
- var _el$5 = createElement("text");
2837
- insert(_el$5, row);
2838
- effect((_$p) => setProp(_el$5, "fg", TABLE_COLORS.cellText, _$p));
2839
- return _el$5;
2840
- })()
2841
- }), null);
2842
- effect((_p$) => {
2843
- var _v$3 = TABLE_COLORS.border, _v$4 = TABLE_COLORS.background, _v$5 = TABLE_COLORS.headerText, _v$6 = TextAttributes.BOLD, _v$7 = TABLE_COLORS.separator;
2844
- _v$3 !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$3, _p$.e));
2845
- _v$4 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$4, _p$.t));
2846
- _v$5 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$5, _p$.a));
2847
- _v$6 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$6, _p$.o));
2848
- _v$7 !== _p$.i && (_p$.i = setProp(_el$4, "fg", _v$7, _p$.i));
2849
- return _p$;
2850
- }, {
2851
- e: void 0,
2852
- t: void 0,
2853
- a: void 0,
2854
- o: void 0,
2855
- i: void 0
2856
- });
2857
- return _el$;
2858
- })();
2859
- }
2860
-
2861
- //#endregion
2862
- //#region src/adapters/solid/components/screen/message_renderer.tsx
2863
- function MessageRenderer(props) {
2864
- const theme = useTheme();
2865
- const msg = () => props.message;
2866
- return createComponent2(Switch, {
2867
- fallback: null,
2868
- get children() {
2869
- return [
2870
- createComponent2(Match, {
2871
- get when() {
2872
- return memo2(() => msg().type === "log")() && msg();
2873
- },
2874
- children: (logMsg) => createComponent2(LogMessage, {
2875
- get level() {
2876
- return logMsg().level;
2877
- },
2878
- get timestamp() {
2879
- return logMsg().timestamp;
2880
- },
2881
- get variant() {
2882
- return logMsg().variant;
2883
- },
2884
- get label() {
2885
- return logMsg().label;
2886
- },
2887
- get trace() {
2888
- return logMsg().trace;
2889
- },
2890
- get children() {
2891
- return logMsg().content;
2892
- }
2893
- })
2894
- }),
2895
- createComponent2(Match, {
2896
- get when() {
2897
- return memo2(() => msg().type === "file")() && msg();
2898
- },
2899
- children: (fileMsg) => (() => {
2900
- var _el$ = createElement("box");
2901
- setProp(_el$, "flexDirection", "column");
2902
- setProp(_el$, "border", ["left"]);
2903
- insert(_el$, createComponent2(FileLog, {
2904
- mode: "full",
2905
- get filePath() {
2906
- return fileMsg().filePath;
2907
- },
2908
- get content() {
2909
- return fileMsg().content;
2910
- },
2911
- get headerBackgroundColor() {
2912
- return theme.file.headerBackground;
2913
- }
2914
- }));
2915
- effect((_p$) => {
2916
- var _v$ = theme.file.border, _v$2 = theme.file.background;
2917
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$, _p$.e));
2918
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$2, _p$.t));
2919
- return _p$;
2920
- }, {
2921
- e: void 0,
2922
- t: void 0
2923
- });
2924
- return _el$;
2925
- })()
2926
- }),
2927
- createComponent2(Match, {
2928
- get when() {
2929
- return memo2(() => msg().type === "diff")() && msg();
2930
- },
2931
- children: (diffMsg) => (() => {
2932
- var _el$2 = createElement("box");
2933
- setProp(_el$2, "flexDirection", "column");
2934
- setProp(_el$2, "border", ["left"]);
2935
- insert(_el$2, createComponent2(FileLog, {
2936
- mode: "diff",
2937
- get filePath() {
2938
- return diffMsg().filePath;
2939
- },
2940
- get diff() {
2941
- return diffMsg().diff;
2942
- },
2943
- get view() {
2944
- return diffMsg().view;
2945
- },
2946
- get headerBackgroundColor() {
2947
- return theme.file.headerBackground;
2948
- }
2949
- }));
2950
- effect((_p$) => {
2951
- var _v$3 = theme.file.border, _v$4 = theme.file.background;
2952
- _v$3 !== _p$.e && (_p$.e = setProp(_el$2, "borderColor", _v$3, _p$.e));
2953
- _v$4 !== _p$.t && (_p$.t = setProp(_el$2, "backgroundColor", _v$4, _p$.t));
2954
- return _p$;
2955
- }, {
2956
- e: void 0,
2957
- t: void 0
2958
- });
2959
- return _el$2;
2960
- })()
2961
- }),
2962
- createComponent2(Match, {
2963
- get when() {
2964
- return memo2(() => msg().type === "fileError")() && msg();
2965
- },
2966
- children: (errorMsg) => (() => {
2967
- var _el$3 = createElement("box");
2968
- setProp(_el$3, "flexDirection", "column");
2969
- setProp(_el$3, "border", ["left"]);
2970
- insert(_el$3, createComponent2(FileLog, {
2971
- mode: "partial",
2972
- get filePath() {
2973
- return errorMsg().filePath;
2974
- },
2975
- get content() {
2976
- return errorMsg().content;
2977
- },
2978
- get startLine() {
2979
- return errorMsg().startLine;
2980
- },
2981
- get errorLines() {
2982
- return errorMsg().errorLines;
2983
- },
2984
- get headerBackgroundColor() {
2985
- return theme.file.headerBackground;
2986
- }
2987
- }));
2988
- effect((_p$) => {
2989
- var _v$5 = theme.file.border, _v$6 = theme.file.background;
2990
- _v$5 !== _p$.e && (_p$.e = setProp(_el$3, "borderColor", _v$5, _p$.e));
2991
- _v$6 !== _p$.t && (_p$.t = setProp(_el$3, "backgroundColor", _v$6, _p$.t));
2992
- return _p$;
2993
- }, {
2994
- e: void 0,
2995
- t: void 0
2996
- });
2997
- return _el$3;
2998
- })()
2999
- }),
3000
- createComponent2(Match, {
3001
- get when() {
3002
- return memo2(() => msg().type === "loading")() && msg();
3003
- },
3004
- children: (loadingMsg) => createComponent2(LoadingMessage, { get message() {
3005
- return loadingMsg();
3006
- } })
3007
- }),
3008
- createComponent2(Match, {
3009
- get when() {
3010
- return memo2(() => msg().type === "progress")() && msg();
3011
- },
3012
- children: (progressMsg) => createComponent2(ProgressMessage, { get message() {
3013
- return progressMsg();
3014
- } })
3015
- }),
3016
- createComponent2(Match, {
3017
- get when() {
3018
- return memo2(() => msg().type === "group")() && msg();
3019
- },
3020
- children: (groupMsg) => createComponent2(GroupMessageRenderer, { get message() {
3021
- return groupMsg();
3022
- } })
3023
- }),
3024
- createComponent2(Match, {
3025
- get when() {
3026
- return memo2(() => msg().type === "table")() && msg();
3027
- },
3028
- children: (tableMsg) => createComponent2(TableMessage, { get message() {
3029
- return tableMsg();
3030
- } })
3031
- })
3032
- ];
3033
- }
3034
- });
3035
- }
3036
-
3037
- //#endregion
3038
- //#region src/adapters/solid/components/screen/group_renderer.tsx
3039
- function GroupRenderer(props) {
3040
- const theme = useTheme();
3041
- return (() => {
3042
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("text"), _el$6 = createElement("box");
3043
- insertNode(_el$, _el$2);
3044
- insertNode(_el$, _el$6);
3045
- setProp(_el$, "flexDirection", "column");
3046
- setProp(_el$, "border", ["left"]);
3047
- setProp(_el$, "paddingLeft", 1);
3048
- insertNode(_el$2, _el$3);
3049
- insertNode(_el$2, _el$5);
3050
- setProp(_el$2, "flexDirection", "row");
3051
- setProp(_el$2, "marginBottom", 1);
3052
- insertNode(_el$3, createTextNode(`▼ `));
3053
- insert(_el$5, () => props.label);
3054
- setProp(_el$6, "flexDirection", "column");
3055
- setProp(_el$6, "gap", 1);
3056
- insert(_el$6, createComponent2(For, {
3057
- get each() {
3058
- return props.messages;
3059
- },
3060
- children: (msg) => createComponent2(MessageRenderer, { message: msg })
3061
- }));
3062
- effect((_p$) => {
3063
- var _v$ = theme.group.border, _v$2 = theme.group.background, _v$3 = theme.group.icon, _v$4 = theme.group.headerText, _v$5 = TextAttributes.BOLD;
3064
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "borderColor", _v$, _p$.e));
3065
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "backgroundColor", _v$2, _p$.t));
3066
- _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
3067
- _v$4 !== _p$.o && (_p$.o = setProp(_el$5, "fg", _v$4, _p$.o));
3068
- _v$5 !== _p$.i && (_p$.i = setProp(_el$5, "attributes", _v$5, _p$.i));
3069
- return _p$;
3070
- }, {
3071
- e: void 0,
3072
- t: void 0,
3073
- a: void 0,
3074
- o: void 0,
3075
- i: void 0
3076
- });
3077
- return _el$;
3078
- })();
3079
- }
3080
- /**
3081
- * Fallback renderer for group markers (when not processed at higher level)
3082
- */ function GroupMessageRenderer(props) {
3083
- const theme = useTheme();
3084
- return createComponent2(Show, {
3085
- get when() {
3086
- return !props.message.isEnd;
3087
- },
3088
- get children() {
3089
- var _el$7 = createElement("box"), _el$8 = createElement("text"), _el$9 = createTextNode(`▼ `);
3090
- insertNode(_el$7, _el$8);
3091
- setProp(_el$7, "flexDirection", "row");
3092
- setProp(_el$7, "border", ["left"]);
3093
- setProp(_el$7, "paddingLeft", 1);
3094
- insertNode(_el$8, _el$9);
3095
- insert(_el$8, () => props.message.label, null);
3096
- effect((_p$) => {
3097
- var _v$6 = theme.group.border, _v$7 = theme.group.headerText, _v$8 = TextAttributes.BOLD;
3098
- _v$6 !== _p$.e && (_p$.e = setProp(_el$7, "borderColor", _v$6, _p$.e));
3099
- _v$7 !== _p$.t && (_p$.t = setProp(_el$8, "fg", _v$7, _p$.t));
3100
- _v$8 !== _p$.a && (_p$.a = setProp(_el$8, "attributes", _v$8, _p$.a));
3101
- return _p$;
3102
- }, {
3103
- e: void 0,
3104
- t: void 0,
3105
- a: void 0
3106
- });
3107
- return _el$7;
3108
- }
3109
- });
3110
- }
3111
-
3112
- //#endregion
3113
- //#region src/adapters/solid/components/screen/screen_bridge.tsx
3114
- function processMessagesIntoGroups(messages) {
3115
- const result = [];
3116
- let i = 0;
3117
- while (i < messages.length) {
3118
- const msg = messages[i];
3119
- if (msg.type === "group" && !msg.isEnd) {
3120
- const groupLabel = msg.label;
3121
- const groupMessages = [];
3122
- i++;
3123
- while (i < messages.length) {
3124
- const innerMsg = messages[i];
3125
- if (innerMsg.type === "group" && innerMsg.isEnd) {
3126
- i++;
3127
- break;
3128
- }
3129
- groupMessages.push(innerMsg);
3130
- i++;
3131
- }
3132
- result.push({
3133
- type: "group",
3134
- label: groupLabel,
3135
- messages: groupMessages
3136
- });
3137
- } else if (msg.type === "group" && msg.isEnd) i++;
3138
- else {
3139
- result.push({
3140
- type: "single",
3141
- message: msg
3142
- });
3143
- i++;
3144
- }
3145
- }
3146
- return result;
3147
- }
3148
- function ScreenBridge(props) {
3149
- const theme = useTheme();
3150
- const [version, setVersion] = createSignal(0);
3151
- createEffect(() => {
3152
- const unsub = props.screen.onChange(() => setVersion((v) => v + 1));
3153
- onCleanup(() => unsub());
3154
- });
3155
- const messages = createMemo(() => {
3156
- version();
3157
- return props.filteredMessages ?? props.screen.getMessages();
3158
- });
3159
- const activePrompt = createMemo(() => {
3160
- version();
3161
- return props.screen.getActivePrompt();
3162
- });
3163
- const processedMessages = createMemo(() => processMessagesIntoGroups(messages()));
3164
- const filteredCount = () => messages().length;
3165
- const total = () => props.totalMessages ?? messages().length;
3166
- const showFilterStatus = () => props.isFiltering && filteredCount() !== total();
3167
- return (() => {
3168
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$7 = createElement("scrollbox");
3169
- insertNode(_el$, _el$2);
3170
- insertNode(_el$, _el$7);
3171
- setProp(_el$, "flexDirection", "column");
3172
- setProp(_el$, "flexGrow", 1);
3173
- insertNode(_el$2, _el$3);
3174
- setProp(_el$2, "border", ["bottom"]);
3175
- setProp(_el$2, "paddingLeft", 1);
3176
- setProp(_el$2, "paddingRight", 1);
3177
- setProp(_el$2, "flexDirection", "row");
3178
- setProp(_el$2, "justifyContent", "space-between");
3179
- insert(_el$3, () => props.screen.getName());
3180
- insert(_el$2, createComponent2(Show, {
3181
- get when() {
3182
- return showFilterStatus();
3183
- },
3184
- get children() {
3185
- var _el$4 = createElement("text"), _el$5 = createTextNode(`/`), _el$6 = createTextNode(` messages`);
3186
- insertNode(_el$4, _el$5);
3187
- insertNode(_el$4, _el$6);
3188
- insert(_el$4, filteredCount, _el$5);
3189
- insert(_el$4, total, _el$6);
3190
- effect((_$p) => setProp(_el$4, "fg", theme.sidebar.textDim, _$p));
3191
- return _el$4;
3192
- }
3193
- }), null);
3194
- setProp(_el$7, "flexGrow", 1);
3195
- setProp(_el$7, "scrollY", true);
3196
- setProp(_el$7, "stickyScroll", true);
3197
- setProp(_el$7, "stickyStart", "bottom");
3198
- setProp(_el$7, "contentOptions", {
3199
- paddingLeft: 1,
3200
- paddingRight: 1,
3201
- paddingTop: 1,
3202
- paddingBottom: 1,
3203
- gap: 1
3204
- });
3205
- insert(_el$7, createComponent2(For, {
3206
- get each() {
3207
- return processedMessages();
3208
- },
3209
- children: (item) => createComponent2(Show, {
3210
- get when() {
3211
- return item.type === "group";
3212
- },
3213
- get fallback() {
3214
- return createComponent2(MessageRenderer, { get message() {
3215
- return item.message;
3216
- } });
3217
- },
3218
- get children() {
3219
- return createComponent2(GroupRenderer, {
3220
- get label() {
3221
- return item.label;
3222
- },
3223
- get messages() {
3224
- return item.messages;
3225
- }
3226
- });
3227
- }
3228
- })
3229
- }), null);
3230
- insert(_el$7, createComponent2(Show, {
3231
- get when() {
3232
- return activePrompt();
3233
- },
3234
- get children() {
3235
- return createComponent2(PromptRenderer, { get prompt() {
3236
- return activePrompt();
3237
- } });
3238
- }
3239
- }), null);
3240
- effect((_p$) => {
3241
- var _v$ = theme.header.background, _v$2 = props.focused ? theme.sidebar.focusBorder : theme.header.border, _v$3 = theme.header.text, _v$4 = TextAttributes.BOLD;
3242
- _v$ !== _p$.e && (_p$.e = setProp(_el$2, "backgroundColor", _v$, _p$.e));
3243
- _v$2 !== _p$.t && (_p$.t = setProp(_el$2, "borderColor", _v$2, _p$.t));
3244
- _v$3 !== _p$.a && (_p$.a = setProp(_el$3, "fg", _v$3, _p$.a));
3245
- _v$4 !== _p$.o && (_p$.o = setProp(_el$3, "attributes", _v$4, _p$.o));
3246
- return _p$;
3247
- }, {
3248
- e: void 0,
3249
- t: void 0,
3250
- a: void 0,
3251
- o: void 0
3252
- });
3253
- return _el$;
3254
- })();
3255
- }
3256
-
3257
- //#endregion
3258
- //#region src/adapters/solid/components/sidebar/sidebar_item.tsx
3259
- function SidebarItem(props) {
3260
- const theme = useTheme();
3261
- const status = () => props.screen.getStatus();
3262
- const statusIndicator = () => theme.statusIndicators[status()];
3263
- const backgroundColor = () => {
3264
- if (props.isSelected && props.focused) return theme.sidebar.selectedBackground;
3265
- else if (props.isActive) return theme.sidebar.selectedBackground + "80";
3266
- };
3267
- return (() => {
3268
- var _el$ = createElement("box"), _el$2 = createElement("text"), _el$3 = createTextNode(`> `), _el$5 = createElement("text"), _el$6 = createTextNode(` `), _el$7 = createElement("text");
3269
- insertNode(_el$, _el$2);
3270
- insertNode(_el$, _el$5);
3271
- insertNode(_el$, _el$7);
3272
- setProp(_el$, "flexDirection", "row");
3273
- setProp(_el$, "paddingLeft", 1);
3274
- setProp(_el$, "paddingRight", 1);
3275
- insertNode(_el$2, _el$3);
3276
- insertNode(_el$5, _el$6);
3277
- insert(_el$5, () => statusIndicator().icon, _el$6);
3278
- setProp(_el$7, "flexGrow", 1);
3279
- insert(_el$7, () => props.screen.getName());
3280
- insert(_el$, createComponent2(Show, {
3281
- get when() {
3282
- return props.screen.getBadgeCount() > 0;
3283
- },
3284
- get children() {
3285
- var _el$8 = createElement("box"), _el$9 = createElement("text");
3286
- insertNode(_el$8, _el$9);
3287
- setProp(_el$8, "paddingLeft", 1);
3288
- setProp(_el$8, "paddingRight", 1);
3289
- insert(_el$9, (() => {
3290
- var _c$ = memo2(() => props.screen.getBadgeCount() > 99);
3291
- return () => _c$() ? "99+" : props.screen.getBadgeCount();
3292
- })());
3293
- effect((_p$) => {
3294
- var _v$ = theme.sidebar.badge, _v$2 = theme.colors.foreground, _v$3 = TextAttributes.BOLD;
3295
- _v$ !== _p$.e && (_p$.e = setProp(_el$8, "backgroundColor", _v$, _p$.e));
3296
- _v$2 !== _p$.t && (_p$.t = setProp(_el$9, "fg", _v$2, _p$.t));
3297
- _v$3 !== _p$.a && (_p$.a = setProp(_el$9, "attributes", _v$3, _p$.a));
3298
- return _p$;
3299
- }, {
3300
- e: void 0,
3301
- t: void 0,
3302
- a: void 0
3303
- });
3304
- return _el$8;
3305
- }
3306
- }), null);
3307
- effect((_p$) => {
3308
- var _v$4 = backgroundColor(), _v$5 = props.isSelected && props.focused ? theme.sidebar.focusBorder : "transparent", _v$6 = statusIndicator().color, _v$7 = props.isActive ? theme.sidebar.text : theme.sidebar.textDim;
3309
- _v$4 !== _p$.e && (_p$.e = setProp(_el$, "backgroundColor", _v$4, _p$.e));
3310
- _v$5 !== _p$.t && (_p$.t = setProp(_el$2, "fg", _v$5, _p$.t));
3311
- _v$6 !== _p$.a && (_p$.a = setProp(_el$5, "fg", _v$6, _p$.a));
3312
- _v$7 !== _p$.o && (_p$.o = setProp(_el$7, "fg", _v$7, _p$.o));
3313
- return _p$;
3314
- }, {
3315
- e: void 0,
3316
- t: void 0,
3317
- a: void 0,
3318
- o: void 0
3319
- });
3320
- return _el$;
3321
- })();
3322
- }
3323
-
3324
- //#endregion
3325
- //#region src/adapters/solid/components/sidebar/sidebar_separator.tsx
3326
- function SidebarSeparator() {
3327
- const theme = useTheme();
3328
- return (() => {
3329
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$5 = createElement("box");
3330
- insertNode(_el$, _el$2);
3331
- insertNode(_el$, _el$3);
3332
- insertNode(_el$, _el$5);
3333
- setProp(_el$, "flexDirection", "row");
3334
- setProp(_el$, "paddingTop", 1);
3335
- setProp(_el$2, "flexGrow", 1);
3336
- insertNode(_el$3, createTextNode(`· · ·`));
3337
- setProp(_el$5, "flexGrow", 1);
3338
- effect((_$p) => setProp(_el$3, "fg", theme.separator.line, _$p));
3339
- return _el$;
3340
- })();
3341
- }
3342
-
3343
- //#endregion
3344
- //#region src/adapters/solid/components/sidebar/sidebar.tsx
3345
- function Sidebar(props) {
3346
- const theme = useTheme();
3347
- const pendingScreens = createMemo(() => {
3348
- const result = [];
3349
- props.screens.forEach((screen, index) => {
3350
- if (screen.getStatus() === "pending") result.push({
3351
- screen,
3352
- originalIndex: index
3353
- });
3354
- });
3355
- return result;
3356
- });
3357
- const otherScreens = createMemo(() => {
3358
- const result = [];
3359
- props.screens.forEach((screen, index) => {
3360
- if (screen.getStatus() !== "pending") result.push({
3361
- screen,
3362
- originalIndex: index
3363
- });
3364
- });
3365
- return result;
3366
- });
3367
- const hasPending = () => pendingScreens().length > 0;
3368
- const hasOther = () => otherScreens().length > 0;
3369
- const showSeparator = () => hasPending() && hasOther();
3370
- return (() => {
3371
- var _el$ = createElement("box"), _el$2 = createElement("box"), _el$3 = createElement("text"), _el$4 = createElement("scrollbox"), _el$5 = createElement("box"), _el$6 = createElement("box"), _el$7 = createElement("text");
3372
- insertNode(_el$, _el$2);
3373
- insertNode(_el$, _el$4);
3374
- insertNode(_el$, _el$6);
3375
- setProp(_el$, "flexDirection", "column");
3376
- setProp(_el$, "border", ["right"]);
3377
- insertNode(_el$2, _el$3);
3378
- setProp(_el$2, "paddingLeft", 1);
3379
- setProp(_el$2, "paddingRight", 1);
3380
- setProp(_el$2, "border", ["bottom"]);
3381
- insert(_el$3, () => props.title);
3382
- insertNode(_el$4, _el$5);
3383
- setProp(_el$4, "scrollY", true);
3384
- setProp(_el$4, "stickyScroll", false);
3385
- setProp(_el$4, "flexGrow", 1);
3386
- setProp(_el$4, "contentOptions", { flexGrow: 1 });
3387
- setProp(_el$5, "flexDirection", "column");
3388
- insert(_el$5, createComponent2(For, {
3389
- get each() {
3390
- return pendingScreens();
3391
- },
3392
- children: ({ screen, originalIndex }) => createComponent2(SidebarItem, {
3393
- screen,
3394
- get isSelected() {
3395
- return originalIndex === props.selectedIndex;
3396
- },
3397
- get isActive() {
3398
- return screen.getId() === props.activeScreenId;
3399
- },
3400
- get focused() {
3401
- return props.focused;
3402
- }
3403
- })
3404
- }), null);
3405
- insert(_el$5, createComponent2(Show, {
3406
- get when() {
3407
- return showSeparator();
3408
- },
3409
- get children() {
3410
- return createComponent2(SidebarSeparator, {});
3411
- }
3412
- }), null);
3413
- insert(_el$5, createComponent2(For, {
3414
- get each() {
3415
- return otherScreens();
3416
- },
3417
- children: ({ screen, originalIndex }) => createComponent2(SidebarItem, {
3418
- screen,
3419
- get isSelected() {
3420
- return originalIndex === props.selectedIndex;
3421
- },
3422
- get isActive() {
3423
- return screen.getId() === props.activeScreenId;
3424
- },
3425
- get focused() {
3426
- return props.focused;
3427
- }
3428
- })
3429
- }), null);
3430
- insertNode(_el$6, _el$7);
3431
- setProp(_el$6, "paddingLeft", 1);
3432
- setProp(_el$6, "paddingRight", 1);
3433
- setProp(_el$6, "border", ["top"]);
3434
- insertNode(_el$7, createTextNode(`q: exit | Tab: focus | ?: help`));
3435
- effect((_p$) => {
3436
- var _v$ = props.width, _v$2 = props.focused ? theme.sidebar.focusBorder : theme.sidebar.border, _v$3 = theme.header.background, _v$4 = theme.header.border, _v$5 = theme.header.text, _v$6 = TextAttributes.BOLD, _v$7 = theme.sidebar.border, _v$8 = theme.sidebar.text;
3437
- _v$ !== _p$.e && (_p$.e = setProp(_el$, "width", _v$, _p$.e));
3438
- _v$2 !== _p$.t && (_p$.t = setProp(_el$, "borderColor", _v$2, _p$.t));
3439
- _v$3 !== _p$.a && (_p$.a = setProp(_el$2, "backgroundColor", _v$3, _p$.a));
3440
- _v$4 !== _p$.o && (_p$.o = setProp(_el$2, "borderColor", _v$4, _p$.o));
3441
- _v$5 !== _p$.i && (_p$.i = setProp(_el$3, "fg", _v$5, _p$.i));
3442
- _v$6 !== _p$.n && (_p$.n = setProp(_el$3, "attributes", _v$6, _p$.n));
3443
- _v$7 !== _p$.s && (_p$.s = setProp(_el$6, "borderColor", _v$7, _p$.s));
3444
- _v$8 !== _p$.h && (_p$.h = setProp(_el$7, "fg", _v$8, _p$.h));
3445
- return _p$;
3446
- }, {
3447
- e: void 0,
3448
- t: void 0,
3449
- a: void 0,
3450
- o: void 0,
3451
- i: void 0,
3452
- n: void 0,
3453
- s: void 0,
3454
- h: void 0
3455
- });
3456
- return _el$;
3457
- })();
3458
- }
3459
-
3460
- //#endregion
3461
- //#region src/adapters/solid/components/screen_manager_bridge.tsx
3462
- function ScreenManagerBridge(props) {
3463
- const [version, setVersion] = createSignal(0);
3464
- const [showHelp, setShowHelp] = createSignal(false);
3465
- const [filter, setFilter] = createSignal(createDefaultFilterState());
3466
- createEffect(() => {
3467
- const unsub = props.manager.onChange(() => setVersion((v) => v + 1));
3468
- onCleanup(() => unsub());
3469
- });
3470
- const getActiveScreen = () => props.manager.getActiveScreen();
3471
- const toggleHelp = () => {
3472
- setShowHelp((prev) => !prev);
3473
- };
3474
- const toggleFilter = () => {
3475
- setFilter((prev) => ({
3476
- ...prev,
3477
- isVisible: !prev.isVisible,
3478
- focusedField: "search"
3479
- }));
3480
- };
3481
- const closeFilter = () => {
3482
- setFilter((prev) => ({
3483
- ...prev,
3484
- isVisible: false
3485
- }));
3486
- };
3487
- const filterAppendChar = (char) => {
3488
- setFilter((prev) => ({
3489
- ...prev,
3490
- searchQuery: prev.searchQuery + char
3491
- }));
3492
- };
3493
- const filterDeleteChar = () => {
3494
- setFilter((prev) => ({
3495
- ...prev,
3496
- searchQuery: prev.searchQuery.slice(0, -1)
3497
- }));
3498
- };
3499
- const filterToggleLevel = (index) => {
3500
- setFilter((prev) => {
3501
- const level = ALL_LOG_LEVELS[index];
3502
- if (!level) return prev;
3503
- const newLevels = new Set(prev.enabledLevels);
3504
- if (newLevels.has(level)) newLevels.delete(level);
3505
- else newLevels.add(level);
3506
- return {
3507
- ...prev,
3508
- enabledLevels: newLevels
3509
- };
3510
- });
3511
- };
3512
- const filterCycleField = () => {
3513
- setFilter((prev) => ({
3514
- ...prev,
3515
- focusedField: prev.focusedField === "search" ? "levels" : "search"
3516
- }));
3517
- };
3518
- const keyboardManager = createMemo(() => {
3519
- const km = new KeyboardManager();
3520
- const bindings = createDefaultBindings({
3521
- manager: props.manager,
3522
- getActiveScreen,
3523
- toggleHelp,
3524
- toggleFilter,
3525
- closeFilter,
3526
- filterAppendChar,
3527
- filterDeleteChar,
3528
- filterToggleLevel,
3529
- filterCycleField
3530
- });
3531
- km.addBindings(bindings);
3532
- return km;
3533
- });
3534
- const handleKeyboard = (key) => {
3535
- const screens$1 = props.manager.getScreens();
3536
- const activeScreen$1 = props.manager.getActiveScreen();
3537
- const context = {
3538
- hasSidebar: screens$1.length > 1,
3539
- focusArea: props.manager.focusArea,
3540
- hasPrompt: activeScreen$1?.hasActivePrompt() ?? false,
3541
- inInputMode: activeScreen$1?.isPromptInInputMode() ?? false,
3542
- isFilterActive: filter().isVisible,
3543
- isHelpVisible: showHelp()
3544
- };
3545
- if (keyboardManager().handleKey(key, context)) return;
3546
- handlePrintableInput(key, context, {
3547
- manager: props.manager,
3548
- getActiveScreen,
3549
- toggleHelp,
3550
- toggleFilter,
3551
- closeFilter,
3552
- filterAppendChar,
3553
- filterDeleteChar,
3554
- filterToggleLevel,
3555
- filterCycleField
3556
- });
3557
- };
3558
- useKeyboard(handleKeyboard);
3559
- const screens = () => {
3560
- version();
3561
- return props.manager.getScreens();
3562
- };
3563
- const activeScreen = () => {
3564
- version();
3565
- return props.manager.getActiveScreen();
3566
- };
3567
- const activeScreenId = () => activeScreen()?.getId() ?? screens()[0]?.getId() ?? "";
3568
- const bindOptions = () => props.manager.getBindOptions();
3569
- const hasSidebar = () => screens().length > 1;
3570
- const [activeScreenVersion, setActiveScreenVersion] = createSignal(0);
3571
- createEffect(() => {
3572
- const screen = activeScreen();
3573
- if (screen) {
3574
- const unsub = screen.onChange(() => setActiveScreenVersion((v) => v + 1));
3575
- onCleanup(() => unsub());
3576
- }
3577
- });
3578
- const levelCounts = createMemo(() => {
3579
- activeScreenVersion();
3580
- const screen = activeScreen();
3581
- if (!screen) return {
3582
- verbose: 0,
3583
- debug: 0,
3584
- log: 0,
3585
- warn: 0,
3586
- error: 0,
3587
- fatal: 0
3588
- };
3589
- return FilterEngine.countByLevel(screen.getMessages());
3590
- });
3591
- const filteredMessages = createMemo(() => {
3592
- activeScreenVersion();
3593
- const screen = activeScreen();
3594
- if (!screen) return [];
3595
- return FilterEngine.filterMessages(screen.getMessages(), filter());
3596
- });
3597
- const isFiltering = createMemo(() => hasActiveFilter(filter()));
3598
- return createComponent2(LoggerProvider, {
3599
- get theme() {
3600
- return props.theme;
3601
- },
3602
- get children() {
3603
- var _el$ = createElement("box"), _el$2 = createElement("box");
3604
- insertNode(_el$, _el$2);
3605
- setProp(_el$, "flexDirection", "row");
3606
- setProp(_el$, "flexGrow", 1);
3607
- insert(_el$, createComponent2(Show, {
3608
- get when() {
3609
- return hasSidebar();
3610
- },
3611
- get children() {
3612
- return createComponent2(Sidebar, {
3613
- get screens() {
3614
- return screens();
3615
- },
3616
- get selectedIndex() {
3617
- return props.manager.selectedIndex;
3618
- },
3619
- get activeScreenId() {
3620
- return activeScreenId();
3621
- },
3622
- get focused() {
3623
- return props.manager.focusArea === "sidebar";
3624
- },
3625
- get width() {
3626
- return bindOptions().sidebarWidth ?? 25;
3627
- },
3628
- get title() {
3629
- return bindOptions().sidebarTitle ?? "Screens";
3630
- }
3631
- });
3632
- }
3633
- }), _el$2);
3634
- setProp(_el$2, "flexDirection", "column");
3635
- setProp(_el$2, "flexGrow", 1);
3636
- insert(_el$2, createComponent2(Show, {
3637
- get when() {
3638
- return filter().isVisible;
3639
- },
3640
- get children() {
3641
- return createComponent2(FilterBar, {
3642
- get filter() {
3643
- return filter();
3644
- },
3645
- get levelCounts() {
3646
- return levelCounts();
3647
- }
3648
- });
3649
- }
3650
- }), null);
3651
- insert(_el$2, createComponent2(Show, {
3652
- get when() {
3653
- return activeScreen();
3654
- },
3655
- get children() {
3656
- return createComponent2(ScreenBridge, {
3657
- get screen() {
3658
- return activeScreen();
3659
- },
3660
- get focused() {
3661
- return props.manager.focusArea === "content";
3662
- },
3663
- get filteredMessages() {
3664
- return filteredMessages();
3665
- },
3666
- get isFiltering() {
3667
- return isFiltering();
3668
- },
3669
- get totalMessages() {
3670
- return activeScreen().getMessages().length;
3671
- }
3672
- });
3673
- }
3674
- }), null);
3675
- insert(_el$, createComponent2(Show, {
3676
- get when() {
3677
- return showHelp();
3678
- },
3679
- get children() {
3680
- return createComponent2(HelpOverlay, { get bindings() {
3681
- return keyboardManager().getBindingsForHelp();
3682
- } });
3683
- }
3684
- }), null);
3685
- return _el$;
3686
- }
3687
- });
3688
- }
3689
-
3690
- //#endregion
3691
- //#region src/adapters/solid/index.tsx
3692
- let _initClass;
3693
- function _applyDecs(e, t, n, r, o, i) {
3694
- var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for("Symbol.metadata"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length;
3695
- function g(t$1, n$1, r$1) {
3696
- return function(o$1, i$1) {
3697
- n$1 && (i$1 = o$1, o$1 = e);
3698
- for (var a$1 = 0; a$1 < t$1.length; a$1++) i$1 = t$1[a$1].apply(o$1, r$1 ? [i$1] : []);
3699
- return r$1 ? i$1 : o$1;
3700
- };
3701
- }
3702
- function b(e$1, t$1, n$1, r$1) {
3703
- if ("function" != typeof e$1 && (r$1 || void 0 !== e$1)) throw new TypeError(t$1 + " must " + (n$1 || "be") + " a function" + (r$1 ? "" : " or undefined"));
3704
- return e$1;
3705
- }
3706
- function applyDec(e$1, t$1, n$1, r$1, o$1, i$1, u$1, s$1, f$1, l$1, p$1) {
3707
- function d$1(e$2) {
3708
- if (!p$1(e$2)) throw new TypeError("Attempted to access private element on non-instance");
3709
- }
3710
- var h$1 = [].concat(t$1[0]), v$1 = t$1[3], w$1 = !u$1, D = 1 === o$1, S = 3 === o$1, j = 4 === o$1, E = 2 === o$1;
3711
- function I(t$2, n$2, r$2) {
3712
- return function(o$2, i$2) {
3713
- return n$2 && (i$2 = o$2, o$2 = e$1), r$2 && r$2(o$2), P[t$2].call(o$2, i$2);
3714
- };
3715
- }
3716
- if (!w$1) {
3717
- var P = {}, k = [], F = S ? "get" : j || D ? "set" : "value";
3718
- if (f$1 ? (l$1 || D ? P = {
3719
- get: _setFunctionName(function() {
3720
- return v$1(this);
3721
- }, r$1, "get"),
3722
- set: function(e$2) {
3723
- t$1[4](this, e$2);
3724
- }
3725
- } : P[F] = v$1, l$1 || _setFunctionName(P[F], r$1, E ? "" : F)) : l$1 || (P = Object.getOwnPropertyDescriptor(e$1, r$1)), !l$1 && !f$1) {
3726
- if ((c = y[+s$1][r$1]) && 7 !== (c ^ o$1)) throw Error("Decorating two elements with the same name (" + P[F].name + ") is not supported yet");
3727
- y[+s$1][r$1] = o$1 < 3 ? 1 : o$1;
3728
- }
3729
- }
3730
- for (var N = e$1, O = h$1.length - 1; O >= 0; O -= n$1 ? 2 : 1) {
3731
- var T = b(h$1[O], "A decorator", "be", !0), z = n$1 ? h$1[O - 1] : void 0, A = {}, H = {
3732
- kind: [
3733
- "field",
3734
- "accessor",
3735
- "method",
3736
- "getter",
3737
- "setter",
3738
- "class"
3739
- ][o$1],
3740
- name: r$1,
3741
- metadata: a,
3742
- addInitializer: (function(e$2, t$2) {
3743
- if (e$2.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
3744
- b(t$2, "An initializer", "be", !0), i$1.push(t$2);
3745
- }).bind(null, A)
3746
- };
3747
- if (w$1) c = T.call(z, N, H), A.v = 1, b(c, "class decorators", "return") && (N = c);
3748
- else if (H.static = s$1, H.private = f$1, c = H.access = { has: f$1 ? p$1.bind() : function(e$2) {
3749
- return r$1 in e$2;
3750
- } }, j || (c.get = f$1 ? E ? function(e$2) {
3751
- return d$1(e$2), P.value;
3752
- } : I("get", 0, d$1) : function(e$2) {
3753
- return e$2[r$1];
3754
- }), E || S || (c.set = f$1 ? I("set", 0, d$1) : function(e$2, t$2) {
3755
- e$2[r$1] = t$2;
3756
- }), N = T.call(z, D ? {
3757
- get: P.get,
3758
- set: P.set
3759
- } : P[F], H), A.v = 1, D) {
3760
- if ("object" == typeof N && N) (c = b(N.get, "accessor.get")) && (P.get = c), (c = b(N.set, "accessor.set")) && (P.set = c), (c = b(N.init, "accessor.init")) && k.unshift(c);
3761
- else if (void 0 !== N) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
3762
- } else b(N, (l$1 ? "field" : "method") + " decorators", "return") && (l$1 ? k.unshift(N) : P[F] = N);
3763
- }
3764
- return o$1 < 2 && u$1.push(g(k, s$1, 1), g(i$1, s$1, 0)), l$1 || w$1 || (f$1 ? D ? u$1.splice(-1, 0, I("get", s$1), I("set", s$1)) : u$1.push(E ? P[F] : b.call.bind(P[F])) : m(e$1, r$1, P)), N;
3765
- }
3766
- function w(e$1) {
3767
- return m(e$1, d, {
3768
- configurable: !0,
3769
- enumerable: !0,
3770
- value: a
3771
- });
3772
- }
3773
- return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function(e$1) {
3774
- e$1 && f.push(g(e$1));
3775
- }, p = function(t$1, r$1) {
3776
- for (var i$1 = 0; i$1 < n.length; i$1++) {
3777
- var a$1 = n[i$1], c$1 = a$1[1], l$1 = 7 & c$1;
3778
- if ((8 & c$1) == t$1 && !l$1 == r$1) {
3779
- var p$1 = a$1[2], d$1 = !!a$1[3], m$1 = 16 & c$1;
3780
- applyDec(t$1 ? e : e.prototype, a$1, m$1, d$1 ? "#" + p$1 : _toPropertyKey(p$1), l$1, l$1 < 2 ? [] : t$1 ? s = s || [] : u = u || [], f, !!t$1, d$1, r$1, t$1 && d$1 ? function(t$2) {
3781
- return _checkInRHS(t$2) === e;
3782
- } : o);
3783
- }
3784
- }
3785
- }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), {
3786
- e: c,
3787
- get c() {
3788
- var n1 = [];
3789
- return v && [w(e = applyDec(e, [t], r, e.name, 5, n1)), g(n1, 1)];
3790
- }
3791
- };
3792
- }
3793
- function _toPropertyKey(t) {
3794
- var i = _toPrimitive(t, "string");
3795
- return "symbol" == typeof i ? i : i + "";
3796
- }
3797
- function _toPrimitive(t, r) {
3798
- if ("object" != typeof t || !t) return t;
3799
- var e = t[Symbol.toPrimitive];
3800
- if (void 0 !== e) {
3801
- var i = e.call(t, r || "default");
3802
- if ("object" != typeof i) return i;
3803
- throw new TypeError("@@toPrimitive must return a primitive value.");
3804
- }
3805
- return ("string" === r ? String : Number)(t);
3806
- }
3807
- function _setFunctionName(e, t, n) {
3808
- "symbol" == typeof t && (t = (t = t.description) ? "[" + t + "]" : "");
3809
- try {
3810
- Object.defineProperty(e, "name", {
3811
- configurable: !0,
3812
- value: n ? n + " " + t : t
3813
- });
3814
- } catch (e$1) {}
3815
- return e;
3816
- }
3817
- function _checkInRHS(e) {
3818
- if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? typeof e : "null"));
3819
- return e;
3820
- }
3821
- /**
3822
- * Solid adapter for TUI rendering.
3823
- * Automatically registers to DI when this module is imported.
3824
- */ let _SolidAdapter;
3825
- var SolidAdapter = class {
3826
- static {
3827
- [_SolidAdapter, _initClass] = _applyDecs(this, [Injectable({ token: Adapter })], []).c;
3828
- }
3829
- createRoot(renderer) {
3830
- return {
3831
- render(element) {
3832
- render(element, renderer);
3833
- },
3834
- unmount() {}
3835
- };
3836
- }
3837
- renderToRoot(root, props) {
3838
- root.render(() => createComponent2(ScreenManagerBridge, props));
3839
- }
3840
- static {
3841
- _initClass();
3842
- }
3843
- };
3844
-
3845
- //#endregion
3846
- export { LoggerProvider, _SolidAdapter as SolidAdapter, useLoggerContext, useTheme };
3847
- //# sourceMappingURL=index.mjs.map