@appkit/llamacpp-cli 1.14.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/README.md +276 -280
  2. package/dist/cli.js +133 -23
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/admin/config.d.ts +1 -1
  5. package/dist/commands/admin/config.js +5 -5
  6. package/dist/commands/admin/config.js.map +1 -1
  7. package/dist/commands/admin/log-config.d.ts +11 -0
  8. package/dist/commands/admin/log-config.d.ts.map +1 -0
  9. package/dist/commands/admin/log-config.js +159 -0
  10. package/dist/commands/admin/log-config.js.map +1 -0
  11. package/dist/commands/admin/logs.d.ts +2 -3
  12. package/dist/commands/admin/logs.d.ts.map +1 -1
  13. package/dist/commands/admin/logs.js +6 -48
  14. package/dist/commands/admin/logs.js.map +1 -1
  15. package/dist/commands/admin/status.d.ts.map +1 -1
  16. package/dist/commands/admin/status.js +1 -0
  17. package/dist/commands/admin/status.js.map +1 -1
  18. package/dist/commands/config.d.ts +1 -0
  19. package/dist/commands/config.d.ts.map +1 -1
  20. package/dist/commands/config.js +63 -196
  21. package/dist/commands/config.js.map +1 -1
  22. package/dist/commands/create.d.ts +3 -2
  23. package/dist/commands/create.d.ts.map +1 -1
  24. package/dist/commands/create.js +24 -97
  25. package/dist/commands/create.js.map +1 -1
  26. package/dist/commands/delete.d.ts.map +1 -1
  27. package/dist/commands/delete.js +7 -24
  28. package/dist/commands/delete.js.map +1 -1
  29. package/dist/commands/internal/server-wrapper.d.ts +15 -0
  30. package/dist/commands/internal/server-wrapper.d.ts.map +1 -0
  31. package/dist/commands/internal/server-wrapper.js +126 -0
  32. package/dist/commands/internal/server-wrapper.js.map +1 -0
  33. package/dist/commands/logs-all.d.ts +0 -2
  34. package/dist/commands/logs-all.d.ts.map +1 -1
  35. package/dist/commands/logs-all.js +1 -61
  36. package/dist/commands/logs-all.js.map +1 -1
  37. package/dist/commands/logs.d.ts +2 -5
  38. package/dist/commands/logs.d.ts.map +1 -1
  39. package/dist/commands/logs.js +104 -120
  40. package/dist/commands/logs.js.map +1 -1
  41. package/dist/commands/migrate-labels.d.ts +12 -0
  42. package/dist/commands/migrate-labels.d.ts.map +1 -0
  43. package/dist/commands/migrate-labels.js +160 -0
  44. package/dist/commands/migrate-labels.js.map +1 -0
  45. package/dist/commands/ps.d.ts.map +1 -1
  46. package/dist/commands/ps.js +2 -1
  47. package/dist/commands/ps.js.map +1 -1
  48. package/dist/commands/rm.d.ts.map +1 -1
  49. package/dist/commands/rm.js +22 -48
  50. package/dist/commands/rm.js.map +1 -1
  51. package/dist/commands/router/config.d.ts +1 -1
  52. package/dist/commands/router/config.js +6 -6
  53. package/dist/commands/router/config.js.map +1 -1
  54. package/dist/commands/router/logs.d.ts +2 -4
  55. package/dist/commands/router/logs.d.ts.map +1 -1
  56. package/dist/commands/router/logs.js +34 -189
  57. package/dist/commands/router/logs.js.map +1 -1
  58. package/dist/commands/router/status.d.ts.map +1 -1
  59. package/dist/commands/router/status.js +1 -0
  60. package/dist/commands/router/status.js.map +1 -1
  61. package/dist/commands/server-show.d.ts.map +1 -1
  62. package/dist/commands/server-show.js +3 -0
  63. package/dist/commands/server-show.js.map +1 -1
  64. package/dist/commands/start.d.ts.map +1 -1
  65. package/dist/commands/start.js +21 -72
  66. package/dist/commands/start.js.map +1 -1
  67. package/dist/commands/stop.d.ts.map +1 -1
  68. package/dist/commands/stop.js +10 -26
  69. package/dist/commands/stop.js.map +1 -1
  70. package/dist/launchers/llamacpp-admin +8 -0
  71. package/dist/launchers/llamacpp-router +8 -0
  72. package/dist/launchers/llamacpp-server +8 -0
  73. package/dist/lib/admin-manager.d.ts +4 -0
  74. package/dist/lib/admin-manager.d.ts.map +1 -1
  75. package/dist/lib/admin-manager.js +42 -18
  76. package/dist/lib/admin-manager.js.map +1 -1
  77. package/dist/lib/admin-server.d.ts +48 -1
  78. package/dist/lib/admin-server.d.ts.map +1 -1
  79. package/dist/lib/admin-server.js +632 -238
  80. package/dist/lib/admin-server.js.map +1 -1
  81. package/dist/lib/config-generator.d.ts +1 -0
  82. package/dist/lib/config-generator.d.ts.map +1 -1
  83. package/dist/lib/config-generator.js +12 -5
  84. package/dist/lib/config-generator.js.map +1 -1
  85. package/dist/lib/keyboard-manager.d.ts +162 -0
  86. package/dist/lib/keyboard-manager.d.ts.map +1 -0
  87. package/dist/lib/keyboard-manager.js +247 -0
  88. package/dist/lib/keyboard-manager.js.map +1 -0
  89. package/dist/lib/label-migration.d.ts +65 -0
  90. package/dist/lib/label-migration.d.ts.map +1 -0
  91. package/dist/lib/label-migration.js +458 -0
  92. package/dist/lib/label-migration.js.map +1 -0
  93. package/dist/lib/launchctl-manager.d.ts +9 -0
  94. package/dist/lib/launchctl-manager.d.ts.map +1 -1
  95. package/dist/lib/launchctl-manager.js +65 -19
  96. package/dist/lib/launchctl-manager.js.map +1 -1
  97. package/dist/lib/log-management-service.d.ts +51 -0
  98. package/dist/lib/log-management-service.d.ts.map +1 -0
  99. package/dist/lib/log-management-service.js +124 -0
  100. package/dist/lib/log-management-service.js.map +1 -0
  101. package/dist/lib/log-workers.d.ts +70 -0
  102. package/dist/lib/log-workers.d.ts.map +1 -0
  103. package/dist/lib/log-workers.js +217 -0
  104. package/dist/lib/log-workers.js.map +1 -0
  105. package/dist/lib/model-downloader.d.ts +9 -1
  106. package/dist/lib/model-downloader.d.ts.map +1 -1
  107. package/dist/lib/model-downloader.js +98 -1
  108. package/dist/lib/model-downloader.js.map +1 -1
  109. package/dist/lib/model-management-service.d.ts +60 -0
  110. package/dist/lib/model-management-service.d.ts.map +1 -0
  111. package/dist/lib/model-management-service.js +246 -0
  112. package/dist/lib/model-management-service.js.map +1 -0
  113. package/dist/lib/model-management-service.test.d.ts +2 -0
  114. package/dist/lib/model-management-service.test.d.ts.map +1 -0
  115. package/dist/lib/model-management-service.test.js.map +1 -0
  116. package/dist/lib/model-scanner.d.ts +15 -3
  117. package/dist/lib/model-scanner.d.ts.map +1 -1
  118. package/dist/lib/model-scanner.js +174 -17
  119. package/dist/lib/model-scanner.js.map +1 -1
  120. package/dist/lib/openapi-spec.d.ts +1335 -0
  121. package/dist/lib/openapi-spec.d.ts.map +1 -0
  122. package/dist/lib/openapi-spec.js +1017 -0
  123. package/dist/lib/openapi-spec.js.map +1 -0
  124. package/dist/lib/router-logger.d.ts +1 -1
  125. package/dist/lib/router-logger.d.ts.map +1 -1
  126. package/dist/lib/router-logger.js +13 -11
  127. package/dist/lib/router-logger.js.map +1 -1
  128. package/dist/lib/router-manager.d.ts +4 -0
  129. package/dist/lib/router-manager.d.ts.map +1 -1
  130. package/dist/lib/router-manager.js +30 -18
  131. package/dist/lib/router-manager.js.map +1 -1
  132. package/dist/lib/router-server.d.ts +4 -7
  133. package/dist/lib/router-server.d.ts.map +1 -1
  134. package/dist/lib/router-server.js +71 -182
  135. package/dist/lib/router-server.js.map +1 -1
  136. package/dist/lib/server-config-service.d.ts +51 -0
  137. package/dist/lib/server-config-service.d.ts.map +1 -0
  138. package/dist/lib/server-config-service.js +310 -0
  139. package/dist/lib/server-config-service.js.map +1 -0
  140. package/dist/lib/server-config-service.test.d.ts +2 -0
  141. package/dist/lib/server-config-service.test.d.ts.map +1 -0
  142. package/dist/lib/server-config-service.test.js.map +1 -0
  143. package/dist/lib/server-lifecycle-service.d.ts +172 -0
  144. package/dist/lib/server-lifecycle-service.d.ts.map +1 -0
  145. package/dist/lib/server-lifecycle-service.js +619 -0
  146. package/dist/lib/server-lifecycle-service.js.map +1 -0
  147. package/dist/lib/state-manager.d.ts +18 -1
  148. package/dist/lib/state-manager.d.ts.map +1 -1
  149. package/dist/lib/state-manager.js +51 -2
  150. package/dist/lib/state-manager.js.map +1 -1
  151. package/dist/lib/status-checker.d.ts +11 -4
  152. package/dist/lib/status-checker.d.ts.map +1 -1
  153. package/dist/lib/status-checker.js +34 -1
  154. package/dist/lib/status-checker.js.map +1 -1
  155. package/dist/lib/validation-service.d.ts +43 -0
  156. package/dist/lib/validation-service.d.ts.map +1 -0
  157. package/dist/lib/validation-service.js +112 -0
  158. package/dist/lib/validation-service.js.map +1 -0
  159. package/dist/lib/validation-service.test.d.ts +2 -0
  160. package/dist/lib/validation-service.test.d.ts.map +1 -0
  161. package/dist/lib/validation-service.test.js.map +1 -0
  162. package/dist/scripts/http-log-filter.sh +8 -0
  163. package/dist/tui/ConfigApp.d.ts.map +1 -1
  164. package/dist/tui/ConfigApp.js +222 -184
  165. package/dist/tui/ConfigApp.js.map +1 -1
  166. package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -1
  167. package/dist/tui/HistoricalMonitorApp.js +12 -0
  168. package/dist/tui/HistoricalMonitorApp.js.map +1 -1
  169. package/dist/tui/ModelsApp.d.ts.map +1 -1
  170. package/dist/tui/ModelsApp.js +93 -17
  171. package/dist/tui/ModelsApp.js.map +1 -1
  172. package/dist/tui/MonitorApp.d.ts.map +1 -1
  173. package/dist/tui/MonitorApp.js +1 -3
  174. package/dist/tui/MonitorApp.js.map +1 -1
  175. package/dist/tui/MultiServerMonitorApp.d.ts +3 -3
  176. package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
  177. package/dist/tui/MultiServerMonitorApp.js +724 -508
  178. package/dist/tui/MultiServerMonitorApp.js.map +1 -1
  179. package/dist/tui/RootNavigator.d.ts.map +1 -1
  180. package/dist/tui/RootNavigator.js +17 -1
  181. package/dist/tui/RootNavigator.js.map +1 -1
  182. package/dist/tui/RouterApp.d.ts +6 -0
  183. package/dist/tui/RouterApp.d.ts.map +1 -0
  184. package/dist/tui/RouterApp.js +928 -0
  185. package/dist/tui/RouterApp.js.map +1 -0
  186. package/dist/tui/SearchApp.d.ts.map +1 -1
  187. package/dist/tui/SearchApp.js +27 -6
  188. package/dist/tui/SearchApp.js.map +1 -1
  189. package/dist/tui/shared/modal-controller.d.ts +65 -0
  190. package/dist/tui/shared/modal-controller.d.ts.map +1 -0
  191. package/dist/tui/shared/modal-controller.js +625 -0
  192. package/dist/tui/shared/modal-controller.js.map +1 -0
  193. package/dist/tui/shared/overlay-utils.d.ts +7 -0
  194. package/dist/tui/shared/overlay-utils.d.ts.map +1 -0
  195. package/dist/tui/shared/overlay-utils.js +54 -0
  196. package/dist/tui/shared/overlay-utils.js.map +1 -0
  197. package/dist/types/admin-config.d.ts +15 -2
  198. package/dist/types/admin-config.d.ts.map +1 -1
  199. package/dist/types/model-info.d.ts +5 -0
  200. package/dist/types/model-info.d.ts.map +1 -1
  201. package/dist/types/router-config.d.ts +2 -2
  202. package/dist/types/router-config.d.ts.map +1 -1
  203. package/dist/types/server-config.d.ts +8 -0
  204. package/dist/types/server-config.d.ts.map +1 -1
  205. package/dist/types/server-config.js +25 -0
  206. package/dist/types/server-config.js.map +1 -1
  207. package/dist/utils/http-log-filter.d.ts +10 -0
  208. package/dist/utils/http-log-filter.d.ts.map +1 -0
  209. package/dist/utils/http-log-filter.js +84 -0
  210. package/dist/utils/http-log-filter.js.map +1 -0
  211. package/dist/utils/log-parser.d.ts.map +1 -1
  212. package/dist/utils/log-parser.js +7 -4
  213. package/dist/utils/log-parser.js.map +1 -1
  214. package/dist/utils/log-utils.d.ts +59 -4
  215. package/dist/utils/log-utils.d.ts.map +1 -1
  216. package/dist/utils/log-utils.js +150 -11
  217. package/dist/utils/log-utils.js.map +1 -1
  218. package/dist/utils/shard-utils.d.ts +72 -0
  219. package/dist/utils/shard-utils.d.ts.map +1 -0
  220. package/dist/utils/shard-utils.js +168 -0
  221. package/dist/utils/shard-utils.js.map +1 -0
  222. package/package.json +18 -4
  223. package/src/launchers/llamacpp-admin +8 -0
  224. package/src/launchers/llamacpp-router +8 -0
  225. package/src/launchers/llamacpp-server +8 -0
  226. package/web/dist/assets/index-Byhoy86V.css +1 -0
  227. package/web/dist/assets/index-HSrgvray.js +50 -0
  228. package/web/dist/index.html +2 -2
  229. package/web/dist/assets/index-Bin89Lwr.css +0 -1
  230. package/web/dist/assets/index-CVmonw3T.js +0 -17
@@ -0,0 +1,625 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ModalController = void 0;
37
+ const blessed = __importStar(require("blessed"));
38
+ const overlay_utils_js_1 = require("./overlay-utils.js");
39
+ /**
40
+ * Modal controller that properly isolates keyboard handling using KeyboardManager.
41
+ *
42
+ * Key features:
43
+ * - Uses KeyboardManager context stack to prevent event propagation
44
+ * - Pushes blocking context when modal opens
45
+ * - Pops context when modal closes
46
+ * - Prevents screen handlers from executing while modal is active
47
+ * - Manages modal lifecycle with proper cleanup
48
+ * - Provides consistent API for all modal types
49
+ */
50
+ class ModalController {
51
+ constructor(screen, keyboardManager) {
52
+ this.modalStack = [];
53
+ this.screen = screen;
54
+ this.keyboardManager = keyboardManager;
55
+ }
56
+ /**
57
+ * Check if any modal is currently open
58
+ */
59
+ isModalOpen() {
60
+ return this.modalStack.length > 0;
61
+ }
62
+ /**
63
+ * Create modal element with standard styling
64
+ */
65
+ createModalElement(options) {
66
+ return blessed.box({
67
+ parent: this.screen,
68
+ top: 'center',
69
+ left: 'center',
70
+ width: options.width || '60%',
71
+ height: options.height || 'shrink',
72
+ border: { type: 'line' },
73
+ style: {
74
+ border: { fg: options.borderColor || 'cyan' },
75
+ fg: 'white',
76
+ },
77
+ tags: true,
78
+ label: ` ${options.title} `,
79
+ });
80
+ }
81
+ /**
82
+ * Show a simple error message modal
83
+ */
84
+ async showError(message, onClose) {
85
+ return new Promise((resolve) => {
86
+ const modal = this.createModalElement({
87
+ title: 'Error',
88
+ height: 8,
89
+ borderColor: 'red',
90
+ onClose,
91
+ });
92
+ modal.setContent(`\n {red-fg}❌ ${message}{/red-fg}\n\n {gray-fg}[Enter] Close{/gray-fg}`);
93
+ const closeModal = () => {
94
+ this.screen.remove(modal);
95
+ this.screen.remove(context.overlay);
96
+ modal.destroy();
97
+ context.overlay.destroy();
98
+ this.modalStack.pop();
99
+ this.keyboardManager.popContext(); // Pop keyboard context AFTER modal is destroyed
100
+ this.screen.render();
101
+ // Re-register handlers synchronously to prevent keyboard input loss
102
+ if (this.modalStack.length === 0) {
103
+ onClose();
104
+ }
105
+ // Resolve after handlers are registered
106
+ resolve();
107
+ };
108
+ // Push keyboard context BEFORE showing modal (blocking=true prevents screen handlers)
109
+ this.keyboardManager.pushContext('error-modal', {
110
+ 'enter': closeModal,
111
+ 'escape': closeModal,
112
+ }, true);
113
+ const context = {
114
+ element: modal,
115
+ handlers: new Map(),
116
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
117
+ };
118
+ this.modalStack.push(context);
119
+ // Note: No need for modal.key() - KeyboardManager handles all keys
120
+ this.screen.append(context.overlay);
121
+ this.screen.append(modal);
122
+ modal.focus();
123
+ this.screen.render();
124
+ });
125
+ }
126
+ /**
127
+ * Show a simple success message modal
128
+ */
129
+ async showSuccess(message, onClose) {
130
+ return new Promise((resolve) => {
131
+ const modal = this.createModalElement({
132
+ title: 'Success',
133
+ height: 8,
134
+ borderColor: 'green',
135
+ onClose,
136
+ });
137
+ modal.setContent(`\n {green-fg}✓ ${message}{/green-fg}\n\n {gray-fg}[Enter] Close{/gray-fg}`);
138
+ const closeModal = () => {
139
+ this.screen.remove(modal);
140
+ this.screen.remove(context.overlay);
141
+ modal.destroy();
142
+ context.overlay.destroy();
143
+ this.modalStack.pop();
144
+ this.keyboardManager.popContext();
145
+ this.screen.render();
146
+ // Re-register handlers synchronously to prevent keyboard input loss
147
+ if (this.modalStack.length === 0) {
148
+ onClose();
149
+ }
150
+ // Resolve after handlers are registered
151
+ resolve();
152
+ };
153
+ // Push keyboard context BEFORE showing modal
154
+ this.keyboardManager.pushContext('success-modal', {
155
+ 'enter': closeModal,
156
+ 'escape': closeModal,
157
+ }, true);
158
+ const context = {
159
+ element: modal,
160
+ handlers: new Map(),
161
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
162
+ };
163
+ this.modalStack.push(context);
164
+ this.screen.append(context.overlay);
165
+ this.screen.append(modal);
166
+ modal.focus();
167
+ this.screen.render();
168
+ });
169
+ }
170
+ /**
171
+ * Show an unsaved changes dialog
172
+ */
173
+ async showUnsavedDialog(onClose) {
174
+ return new Promise((resolve) => {
175
+ const modal = this.createModalElement({
176
+ title: 'Unsaved Changes',
177
+ height: 10,
178
+ onClose,
179
+ });
180
+ let selectedOption = 0;
181
+ const options = [
182
+ { key: 'save', label: '[S]ave and exit' },
183
+ { key: 'discard', label: '[D]iscard changes' },
184
+ { key: 'continue', label: '[C]ontinue editing' },
185
+ ];
186
+ const renderDialog = () => {
187
+ let content = '\n';
188
+ for (let i = 0; i < options.length; i++) {
189
+ const isSelected = i === selectedOption;
190
+ if (isSelected) {
191
+ content += ` {cyan-fg}► ${options[i].label}{/cyan-fg}\n`;
192
+ }
193
+ else {
194
+ content += ` ${options[i].label}\n`;
195
+ }
196
+ }
197
+ modal.setContent(content);
198
+ this.screen.render();
199
+ };
200
+ const closeWithResult = (result) => {
201
+ this.screen.remove(modal);
202
+ this.screen.remove(context.overlay);
203
+ modal.destroy();
204
+ context.overlay.destroy();
205
+ this.modalStack.pop();
206
+ this.keyboardManager.popContext();
207
+ this.screen.render();
208
+ // Re-register handlers synchronously to prevent keyboard input loss
209
+ if (this.modalStack.length === 0) {
210
+ onClose();
211
+ }
212
+ // Resolve after handlers are registered
213
+ resolve(result);
214
+ };
215
+ // Push keyboard context with all handlers
216
+ this.keyboardManager.pushContext('unsaved-dialog', {
217
+ 'up': () => {
218
+ selectedOption = Math.max(0, selectedOption - 1);
219
+ renderDialog();
220
+ },
221
+ 'k': () => {
222
+ selectedOption = Math.max(0, selectedOption - 1);
223
+ renderDialog();
224
+ },
225
+ 'down': () => {
226
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
227
+ renderDialog();
228
+ },
229
+ 'j': () => {
230
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
231
+ renderDialog();
232
+ },
233
+ 'enter': () => closeWithResult(options[selectedOption].key),
234
+ 's': () => closeWithResult('save'),
235
+ 'S': () => closeWithResult('save'),
236
+ 'd': () => closeWithResult('discard'),
237
+ 'D': () => closeWithResult('discard'),
238
+ 'c': () => closeWithResult('continue'),
239
+ 'C': () => closeWithResult('continue'),
240
+ 'escape': () => closeWithResult('continue'),
241
+ }, true);
242
+ const context = {
243
+ element: modal,
244
+ handlers: new Map(),
245
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
246
+ };
247
+ this.modalStack.push(context);
248
+ this.screen.append(context.overlay);
249
+ this.screen.append(modal);
250
+ modal.focus();
251
+ renderDialog();
252
+ });
253
+ }
254
+ /**
255
+ * Show a restart confirmation dialog
256
+ */
257
+ async showRestartDialog(serviceName, onClose) {
258
+ return new Promise((resolve) => {
259
+ const modal = this.createModalElement({
260
+ title: `${serviceName} is Running`,
261
+ height: 10,
262
+ onClose,
263
+ });
264
+ let selectedOption = 0;
265
+ const options = [
266
+ { key: true, label: '[Y]es - Restart now' },
267
+ { key: false, label: '[N]o - Apply later' },
268
+ ];
269
+ const renderDialog = () => {
270
+ let content = '\n Restart to apply changes?\n\n';
271
+ for (let i = 0; i < options.length; i++) {
272
+ const isSelected = i === selectedOption;
273
+ if (isSelected) {
274
+ content += ` {cyan-fg}► ${options[i].label}{/cyan-fg}\n`;
275
+ }
276
+ else {
277
+ content += ` ${options[i].label}\n`;
278
+ }
279
+ }
280
+ modal.setContent(content);
281
+ this.screen.render();
282
+ };
283
+ const closeWithResult = (result) => {
284
+ this.screen.remove(modal);
285
+ this.screen.remove(context.overlay);
286
+ modal.destroy();
287
+ context.overlay.destroy();
288
+ this.modalStack.pop();
289
+ this.keyboardManager.popContext();
290
+ this.screen.render();
291
+ // Re-register handlers synchronously to prevent keyboard input loss
292
+ if (this.modalStack.length === 0) {
293
+ onClose();
294
+ }
295
+ // Resolve after handlers are registered
296
+ resolve(result);
297
+ };
298
+ // Push keyboard context with all handlers
299
+ this.keyboardManager.pushContext('restart-dialog', {
300
+ 'up': () => {
301
+ selectedOption = Math.max(0, selectedOption - 1);
302
+ renderDialog();
303
+ },
304
+ 'k': () => {
305
+ selectedOption = Math.max(0, selectedOption - 1);
306
+ renderDialog();
307
+ },
308
+ 'down': () => {
309
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
310
+ renderDialog();
311
+ },
312
+ 'j': () => {
313
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
314
+ renderDialog();
315
+ },
316
+ 'enter': () => closeWithResult(options[selectedOption].key),
317
+ 'y': () => closeWithResult(true),
318
+ 'Y': () => closeWithResult(true),
319
+ 'n': () => closeWithResult(false),
320
+ 'N': () => closeWithResult(false),
321
+ 'escape': () => closeWithResult(false),
322
+ }, true);
323
+ const context = {
324
+ element: modal,
325
+ handlers: new Map(),
326
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
327
+ };
328
+ this.modalStack.push(context);
329
+ this.screen.append(context.overlay);
330
+ this.screen.append(modal);
331
+ modal.focus();
332
+ renderDialog();
333
+ });
334
+ }
335
+ /**
336
+ * Show a number input modal
337
+ */
338
+ async showNumberInput(title, currentValue, validation, onClose) {
339
+ return new Promise((resolve) => {
340
+ const modal = this.createModalElement({
341
+ title: `Edit ${title}`,
342
+ height: 10,
343
+ onClose,
344
+ });
345
+ const infoText = blessed.text({
346
+ parent: modal,
347
+ top: 1,
348
+ left: 2,
349
+ content: `Current: ${currentValue}`,
350
+ tags: true,
351
+ });
352
+ const inputBox = blessed.textbox({
353
+ parent: modal,
354
+ top: 3,
355
+ left: 2,
356
+ right: 2,
357
+ height: 3,
358
+ inputOnFocus: true,
359
+ border: { type: 'line' },
360
+ style: {
361
+ border: { fg: 'white' },
362
+ focus: { border: { fg: 'green' } },
363
+ },
364
+ });
365
+ blessed.text({
366
+ parent: modal,
367
+ bottom: 1,
368
+ left: 2,
369
+ content: '{gray-fg}[Enter] Confirm [ESC] Cancel{/gray-fg}',
370
+ tags: true,
371
+ });
372
+ const closeWithResult = (result) => {
373
+ this.screen.remove(modal);
374
+ this.screen.remove(context.overlay);
375
+ modal.destroy();
376
+ context.overlay.destroy();
377
+ this.modalStack.pop();
378
+ this.keyboardManager.popContext();
379
+ this.screen.render();
380
+ // Re-register handlers synchronously to prevent keyboard input loss
381
+ if (this.modalStack.length === 0) {
382
+ onClose();
383
+ }
384
+ // Resolve after handlers are registered
385
+ resolve(result);
386
+ };
387
+ // Push blocking context to prevent screen handlers from firing
388
+ // Note: textbox handles its own keys internally, but this prevents ESC from reaching screen
389
+ this.keyboardManager.pushContext('number-input-modal', {}, true);
390
+ const context = {
391
+ element: modal,
392
+ handlers: new Map(),
393
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
394
+ };
395
+ this.modalStack.push(context);
396
+ inputBox.setValue(String(currentValue));
397
+ this.screen.append(context.overlay);
398
+ this.screen.append(modal);
399
+ this.screen.render();
400
+ inputBox.focus();
401
+ inputBox.on('submit', (value) => {
402
+ const numValue = parseInt(value, 10);
403
+ if (!isNaN(numValue)) {
404
+ if (validation) {
405
+ const error = validation(numValue);
406
+ if (error) {
407
+ infoText.setContent(`{red-fg}Error: ${error}{/red-fg}`);
408
+ this.screen.render();
409
+ inputBox.focus();
410
+ return;
411
+ }
412
+ }
413
+ closeWithResult(numValue);
414
+ }
415
+ else {
416
+ closeWithResult(null);
417
+ }
418
+ });
419
+ inputBox.on('cancel', () => {
420
+ closeWithResult(null);
421
+ });
422
+ });
423
+ }
424
+ /**
425
+ * Show a text input modal
426
+ */
427
+ async showTextInput(title, currentValue, validation, onClose) {
428
+ return new Promise((resolve) => {
429
+ const modal = this.createModalElement({
430
+ title: `Edit ${title}`,
431
+ height: 10,
432
+ onClose,
433
+ });
434
+ const infoText = blessed.text({
435
+ parent: modal,
436
+ top: 1,
437
+ left: 2,
438
+ content: `Current: ${currentValue}`,
439
+ tags: true,
440
+ });
441
+ const inputBox = blessed.textbox({
442
+ parent: modal,
443
+ top: 3,
444
+ left: 2,
445
+ right: 2,
446
+ height: 3,
447
+ inputOnFocus: true,
448
+ border: { type: 'line' },
449
+ style: {
450
+ border: { fg: 'white' },
451
+ focus: { border: { fg: 'green' } },
452
+ },
453
+ });
454
+ blessed.text({
455
+ parent: modal,
456
+ bottom: 1,
457
+ left: 2,
458
+ content: '{gray-fg}[Enter] Confirm [ESC] Cancel{/gray-fg}',
459
+ tags: true,
460
+ });
461
+ const closeWithResult = (result) => {
462
+ this.screen.remove(modal);
463
+ this.screen.remove(context.overlay);
464
+ modal.destroy();
465
+ context.overlay.destroy();
466
+ this.modalStack.pop();
467
+ this.keyboardManager.popContext();
468
+ this.screen.render();
469
+ // Re-register handlers synchronously to prevent keyboard input loss
470
+ if (this.modalStack.length === 0) {
471
+ onClose();
472
+ }
473
+ // Resolve after handlers are registered
474
+ resolve(result);
475
+ };
476
+ // Push blocking context to prevent screen handlers from firing
477
+ this.keyboardManager.pushContext('text-input-modal', {}, true);
478
+ const context = {
479
+ element: modal,
480
+ handlers: new Map(),
481
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
482
+ };
483
+ this.modalStack.push(context);
484
+ inputBox.setValue(currentValue);
485
+ this.screen.append(context.overlay);
486
+ this.screen.append(modal);
487
+ this.screen.render();
488
+ inputBox.focus();
489
+ inputBox.on('submit', async (value) => {
490
+ if (validation) {
491
+ const error = await validation(value);
492
+ if (error) {
493
+ infoText.setContent(`{red-fg}Error: ${error}{/red-fg}`);
494
+ this.screen.render();
495
+ inputBox.focus();
496
+ return;
497
+ }
498
+ }
499
+ closeWithResult(value);
500
+ });
501
+ inputBox.on('cancel', () => {
502
+ closeWithResult(null);
503
+ });
504
+ });
505
+ }
506
+ /**
507
+ * Show a select/toggle modal
508
+ */
509
+ async showSelect(title, options, currentValue, isToggle, onClose, additionalInfo) {
510
+ return new Promise((resolve) => {
511
+ let selectedOption = isToggle
512
+ ? (currentValue ? 1 : 0)
513
+ : options.indexOf(String(currentValue));
514
+ if (selectedOption < 0)
515
+ selectedOption = 0;
516
+ const modal = this.createModalElement({
517
+ title,
518
+ height: options.length + 6,
519
+ onClose,
520
+ });
521
+ const renderOptions = () => {
522
+ let content = '\n';
523
+ for (let i = 0; i < options.length; i++) {
524
+ const isSelected = i === selectedOption;
525
+ const indicator = isSelected ? '●' : '○';
526
+ if (isSelected) {
527
+ content += ` {cyan-fg}${indicator} ${options[i]}{/cyan-fg}\n`;
528
+ }
529
+ else {
530
+ content += ` {gray-fg}${indicator} ${options[i]}{/gray-fg}\n`;
531
+ }
532
+ }
533
+ if (additionalInfo) {
534
+ const info = additionalInfo(options[selectedOption]);
535
+ if (info) {
536
+ content += '\n' + info;
537
+ }
538
+ }
539
+ content += '\n\n{gray-fg} [↑/↓] Select [Enter] Confirm [ESC] Cancel{/gray-fg}';
540
+ modal.setContent(content);
541
+ this.screen.render();
542
+ };
543
+ const closeWithResult = (result) => {
544
+ this.screen.remove(modal);
545
+ this.screen.remove(context.overlay);
546
+ modal.destroy();
547
+ context.overlay.destroy();
548
+ this.modalStack.pop();
549
+ this.keyboardManager.popContext();
550
+ this.screen.render();
551
+ // Re-register handlers synchronously to prevent keyboard input loss
552
+ if (this.modalStack.length === 0) {
553
+ onClose();
554
+ }
555
+ // Resolve after handlers are registered
556
+ resolve(result);
557
+ };
558
+ // Push keyboard context with all handlers
559
+ this.keyboardManager.pushContext('select-modal', {
560
+ 'up': () => {
561
+ selectedOption = Math.max(0, selectedOption - 1);
562
+ renderOptions();
563
+ },
564
+ 'k': () => {
565
+ selectedOption = Math.max(0, selectedOption - 1);
566
+ renderOptions();
567
+ },
568
+ 'down': () => {
569
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
570
+ renderOptions();
571
+ },
572
+ 'j': () => {
573
+ selectedOption = Math.min(options.length - 1, selectedOption + 1);
574
+ renderOptions();
575
+ },
576
+ 'enter': () => {
577
+ if (isToggle) {
578
+ closeWithResult(selectedOption === 1);
579
+ }
580
+ else {
581
+ closeWithResult(options[selectedOption]);
582
+ }
583
+ },
584
+ 'escape': () => {
585
+ closeWithResult(null);
586
+ },
587
+ }, true);
588
+ const context = {
589
+ element: modal,
590
+ handlers: new Map(),
591
+ overlay: (0, overlay_utils_js_1.createOverlay)(this.screen),
592
+ };
593
+ this.modalStack.push(context);
594
+ this.screen.append(context.overlay);
595
+ this.screen.append(modal);
596
+ modal.focus();
597
+ renderOptions();
598
+ });
599
+ }
600
+ /**
601
+ * Show a progress modal (non-interactive)
602
+ * Note: Progress modals don't use overlays since they're temporary
603
+ */
604
+ showProgress(message) {
605
+ const modal = this.createModalElement({
606
+ title: 'Working',
607
+ height: 6,
608
+ onClose: () => { },
609
+ });
610
+ modal.setContent(`\n {cyan-fg}${message}{/cyan-fg}`);
611
+ this.screen.append(modal);
612
+ this.screen.render();
613
+ return modal;
614
+ }
615
+ /**
616
+ * Remove a progress modal
617
+ */
618
+ closeProgress(modal) {
619
+ this.screen.remove(modal);
620
+ modal.destroy();
621
+ this.screen.render();
622
+ }
623
+ }
624
+ exports.ModalController = ModalController;
625
+ //# sourceMappingURL=modal-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-controller.js","sourceRoot":"","sources":["../../../src/tui/shared/modal-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAmC;AACnC,yDAAmD;AAGnD;;;;;;;;;;GAUG;AACH,MAAa,eAAe;IAK1B,YAAY,MAA8B,EAAE,eAAgC;QAHpE,eAAU,GAAmB,EAAE,CAAC;QAItC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,kBAAkB,CAAC,OAA2B;QACpD,OAAO,OAAO,CAAC,GAAG,CAAC;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,QAAQ;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,QAAQ;YAClC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE;gBAC7C,EAAE,EAAE,OAAO;aACZ;YACD,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,GAAG;SAC5B,CAAC,CAAC;IACL,CAAC;IAGD;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,OAAmB;QAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,KAAK;gBAClB,OAAO;aACR,CAAC,CAAC;YAEH,KAAK,CAAC,UAAU,CAAC,iBAAiB,OAAO,iDAAiD,CAAC,CAAC;YAE5F,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,gDAAgD;gBACnF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,sFAAsF;YACtF,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC9C,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,UAAU;aACrB,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,mEAAmE;YACnE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,OAAmB;QACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,OAAO;gBACpB,OAAO;aACR,CAAC,CAAC;YAEH,KAAK,CAAC,UAAU,CAAC,mBAAmB,OAAO,mDAAmD,CAAC,CAAC;YAEhG,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,6CAA6C;YAC7C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,EAAE;gBAChD,OAAO,EAAE,UAAU;gBACnB,QAAQ,EAAE,UAAU;aACrB,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAmB;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,EAAE;gBACV,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG;gBACd,EAAE,GAAG,EAAE,MAAe,EAAE,KAAK,EAAE,iBAAiB,EAAE;gBAClD,EAAE,GAAG,EAAE,SAAkB,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBACvD,EAAE,GAAG,EAAE,UAAmB,EAAE,KAAK,EAAE,oBAAoB,EAAE;aAC1D,CAAC;YAEF,MAAM,YAAY,GAAG,GAAG,EAAE;gBACxB,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,MAAM,UAAU,GAAG,CAAC,KAAK,cAAc,CAAC;oBACxC,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,IAAI,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;oBAC5D,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;oBACzC,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,MAAM,eAAe,GAAG,CAAC,MAAuC,EAAE,EAAE;gBAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,0CAA0C;YAC1C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,gBAAgB,EAAE;gBACjD,IAAI,EAAE,GAAG,EAAE;oBACT,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE;oBACX,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;gBAC3D,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;gBAClC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;gBAClC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;gBACrC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC;gBACrC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;gBACtC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;gBACtC,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC;aAC5C,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,OAAmB;QAC9D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,GAAG,WAAW,aAAa;gBAClC,MAAM,EAAE,EAAE;gBACV,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG;gBACd,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE;gBAC3C,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE;aAC5C,CAAC;YAEF,MAAM,YAAY,GAAG,GAAG,EAAE;gBACxB,IAAI,OAAO,GAAG,mCAAmC,CAAC;gBAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,MAAM,UAAU,GAAG,CAAC,KAAK,cAAc,CAAC;oBACxC,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,IAAI,gBAAgB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;oBAC5D,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;oBACzC,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,MAAM,eAAe,GAAG,CAAC,MAAe,EAAE,EAAE;gBAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,0CAA0C;YAC1C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,gBAAgB,EAAE;gBACjD,IAAI,EAAE,GAAG,EAAE;oBACT,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE;oBACX,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,YAAY,EAAE,CAAC;gBACjB,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;gBAC3D,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;gBAChC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;gBAChC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;gBACjC,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;gBACjC,QAAQ,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;aACvC,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,YAAoB,EACpB,UAA0D,EAC1D,OAAmB;QAEnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,QAAQ,KAAK,EAAE;gBACtB,MAAM,EAAE,EAAE;gBACV,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC5B,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,YAAY,YAAY,EAAE;gBACnC,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC/B,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACxB,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;oBACvB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;iBACnC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,kDAAkD;gBAC3D,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAE,EAAE;gBAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,+DAA+D;YAC/D,4FAA4F;YAC5F,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAEjE,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEjB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrB,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;wBACnC,IAAI,KAAK,EAAE,CAAC;4BACV,QAAQ,CAAC,UAAU,CAAC,kBAAkB,KAAK,WAAW,CAAC,CAAC;4BACxD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;4BACrB,QAAQ,CAAC,KAAK,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;oBACH,CAAC;oBACD,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,eAAe,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACzB,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,YAAoB,EACpB,UAAmE,EACnE,OAAmB;QAEnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK,EAAE,QAAQ,KAAK,EAAE;gBACtB,MAAM,EAAE,EAAE;gBACV,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC5B,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,YAAY,YAAY,EAAE;gBACnC,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC/B,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,CAAC;gBACN,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;gBACxB,KAAK,EAAE;oBACL,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;oBACvB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;iBACnC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,kDAAkD;gBAC3D,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAE,EAAE;gBAChD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,+DAA+D;YAC/D,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAE/D,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACrB,QAAQ,CAAC,KAAK,EAAE,CAAC;YAEjB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBACf,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,KAAK,EAAE,CAAC;wBACV,QAAQ,CAAC,UAAU,CAAC,kBAAkB,KAAK,WAAW,CAAC,CAAC;wBACxD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wBACrB,QAAQ,CAAC,KAAK,EAAE,CAAC;wBACjB,OAAO;oBACT,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACzB,eAAe,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CACd,KAAa,EACb,OAAiB,EACjB,YAA8B,EAC9B,QAAiB,EACjB,OAAmB,EACnB,cAAkD;QAElD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAE7B,IAAI,cAAc,GAAG,QAAQ;gBAC3B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1C,IAAI,cAAc,GAAG,CAAC;gBAAE,cAAc,GAAG,CAAC,CAAC;YAE3C,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACpC,KAAK;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;gBAC1B,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,GAAG,EAAE;gBACzB,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,MAAM,UAAU,GAAG,CAAC,KAAK,cAAc,CAAC;oBACxC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBACzC,IAAI,UAAU,EAAE,CAAC;wBACf,OAAO,IAAI,cAAc,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,OAAO,IAAI,cAAc,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAED,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;oBACrD,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,IAAI,IAAI,GAAG,IAAI,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,OAAO,IAAI,sEAAsE,CAAC;gBAClF,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC,CAAC;YAEF,MAAM,eAAe,GAAG,CAAC,MAA+B,EAAE,EAAE;gBAC1D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACpC,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAErB,oEAAoE;gBACpE,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjC,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,wCAAwC;gBACxC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,0CAA0C;YAC1C,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,cAAc,EAAE;gBAC/C,IAAI,EAAE,GAAG,EAAE;oBACT,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,aAAa,EAAE,CAAC;gBAClB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBACjD,aAAa,EAAE,CAAC;gBAClB,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE;oBACX,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,aAAa,EAAE,CAAC;gBAClB,CAAC;gBACD,GAAG,EAAE,GAAG,EAAE;oBACR,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;oBAClE,aAAa,EAAE,CAAC;gBAClB,CAAC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,QAAQ,EAAE,CAAC;wBACb,eAAe,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC;oBACxC,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACb,eAAe,CAAC,IAAI,CAAC,CAAC;gBACxB,CAAC;aACF,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAiB;gBAC5B,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI,GAAG,EAAE;gBACnB,OAAO,EAAE,IAAA,gCAAa,EAAC,IAAI,CAAC,MAAM,CAAC;aACpC,CAAC;YAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC;YACpC,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SAClB,CAAC,CAAC;QAEH,KAAK,CAAC,UAAU,CAAC,gBAAgB,OAAO,YAAY,CAAC,CAAC;QAEtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAErB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAiC;QAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;CACF;AAtqBD,0CAsqBC"}
@@ -0,0 +1,7 @@
1
+ import * as blessed from "blessed";
2
+ /**
3
+ * Create transparent overlay to block interaction with screen behind modal
4
+ * Note: Caller must append to screen explicitly
5
+ */
6
+ export declare function createOverlay(screen: blessed.Widgets.Screen): blessed.Widgets.BoxElement;
7
+ //# sourceMappingURL=overlay-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-utils.d.ts","sourceRoot":"","sources":["../../../src/tui/shared/overlay-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAC7B,OAAO,CAAC,OAAO,CAAC,UAAU,CAW5B"}