@dungle-scrubs/tallow 0.9.4 → 0.9.6

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 (195) hide show
  1. package/dist/cli.js +7 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/config.d.ts +1 -1
  4. package/dist/config.js +1 -1
  5. package/dist/interactive-mode-patch.d.ts +24 -12
  6. package/dist/interactive-mode-patch.d.ts.map +1 -1
  7. package/dist/interactive-mode-patch.js +229 -146
  8. package/dist/interactive-mode-patch.js.map +1 -1
  9. package/dist/interactive-reset.d.ts +49 -0
  10. package/dist/interactive-reset.d.ts.map +1 -0
  11. package/dist/interactive-reset.js +40 -0
  12. package/dist/interactive-reset.js.map +1 -0
  13. package/dist/pi-tui-editor-patch.d.ts +10 -0
  14. package/dist/pi-tui-editor-patch.d.ts.map +1 -0
  15. package/dist/pi-tui-editor-patch.js +159 -0
  16. package/dist/pi-tui-editor-patch.js.map +1 -0
  17. package/dist/pi-tui-patch.d.ts +2 -0
  18. package/dist/pi-tui-patch.d.ts.map +1 -0
  19. package/dist/pi-tui-patch.js +563 -0
  20. package/dist/pi-tui-patch.js.map +1 -0
  21. package/dist/pi-tui-settings-list-patch.d.ts +11 -0
  22. package/dist/pi-tui-settings-list-patch.d.ts.map +1 -0
  23. package/dist/pi-tui-settings-list-patch.js +38 -0
  24. package/dist/pi-tui-settings-list-patch.js.map +1 -0
  25. package/dist/reset-diagnostics.d.ts +69 -0
  26. package/dist/reset-diagnostics.d.ts.map +1 -0
  27. package/dist/reset-diagnostics.js +41 -0
  28. package/dist/reset-diagnostics.js.map +1 -0
  29. package/dist/sdk.d.ts +5 -21
  30. package/dist/sdk.d.ts.map +1 -1
  31. package/dist/sdk.js +180 -149
  32. package/dist/sdk.js.map +1 -1
  33. package/dist/workspace-transition-interactive.d.ts +1 -0
  34. package/dist/workspace-transition-interactive.d.ts.map +1 -1
  35. package/dist/workspace-transition-interactive.js +7 -17
  36. package/dist/workspace-transition-interactive.js.map +1 -1
  37. package/extensions/__integration__/audit-findings.test.ts +4 -5
  38. package/extensions/_icons/index.ts +2 -4
  39. package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
  40. package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
  41. package/extensions/_shared/image-metadata.ts +99 -0
  42. package/extensions/_shared/inline-preview.ts +1 -1
  43. package/extensions/_shared/terminal-links.ts +22 -0
  44. package/extensions/ask-user-question-tool/index.ts +0 -3
  45. package/extensions/clear/__tests__/clear.test.ts +269 -2
  46. package/extensions/command-expansion/index.ts +1 -1
  47. package/extensions/context-files/index.ts +5 -1
  48. package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
  49. package/extensions/context-fork/extension.json +1 -1
  50. package/extensions/context-fork/index.ts +32 -0
  51. package/extensions/edit-tool-enhanced/index.ts +2 -1
  52. package/extensions/hooks/index.ts +33 -11
  53. package/extensions/loop/index.ts +14 -1
  54. package/extensions/lsp/index.ts +64 -13
  55. package/extensions/lsp/package.json +2 -2
  56. package/extensions/random-spinner/index.ts +7 -642
  57. package/extensions/read-tool-enhanced/index.ts +6 -8
  58. package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +2 -3
  59. package/extensions/render-stabilizer/index.ts +6 -6
  60. package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
  61. package/extensions/slash-command-bridge/index.ts +14 -2
  62. package/extensions/subagent-tool/model-resolver.ts +274 -7
  63. package/extensions/tasks/commands/register-tasks-extension.ts +9 -9
  64. package/extensions/teams-tool/tools/register-extension.ts +1 -3
  65. package/extensions/web-search-tool/index.ts +2 -1
  66. package/extensions/write-tool-enhanced/index.ts +2 -1
  67. package/node_modules/@mariozechner/pi-tui/README.md +56 -34
  68. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
  69. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
  70. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
  71. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
  72. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
  73. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  74. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
  75. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
  76. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
  77. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
  78. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
  79. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
  80. package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
  81. package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
  82. package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
  83. package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
  84. package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
  85. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
  86. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
  87. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
  88. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
  89. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
  90. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
  91. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
  92. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
  93. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
  94. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
  95. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
  96. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +1 -25
  97. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  98. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +13 -50
  99. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
  100. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
  101. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
  102. package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
  103. package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
  104. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
  105. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
  106. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
  107. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
  108. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
  109. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
  110. package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
  111. package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
  112. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
  113. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
  114. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
  115. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
  116. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
  117. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
  118. package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
  119. package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
  120. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
  121. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
  122. package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
  123. package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
  124. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
  125. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
  126. package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
  127. package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
  128. package/node_modules/@mariozechner/pi-tui/package.json +6 -6
  129. package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
  130. package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
  131. package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
  132. package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
  133. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
  134. package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
  135. package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
  136. package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
  137. package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
  138. package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
  139. package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
  140. package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
  141. package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
  142. package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
  143. package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +12 -51
  144. package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
  145. package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
  146. package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
  147. package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
  148. package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
  149. package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
  150. package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
  151. package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
  152. package/package.json +13 -13
  153. package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
  154. package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
  155. package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
  156. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
  157. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
  158. package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
  159. package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
  160. package/packages/tallow-tui/node_modules/marked/README.md +5 -4
  161. package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
  162. package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
  163. package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
  164. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
  165. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
  166. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
  167. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
  168. package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
  169. package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
  170. package/packages/tallow-tui/node_modules/marked/package.json +26 -34
  171. package/skills/tallow-expert/SKILL.md +1 -3
  172. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
  173. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
  174. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
  175. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
  176. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
  177. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
  178. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
  179. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
  180. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
  181. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
  182. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
  183. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
  184. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
  185. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
  186. package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
  187. package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -81
  188. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
  189. package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
  190. package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
  191. package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
  192. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
  193. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
  194. package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
  195. package/packages/tallow-tui/node_modules/marked/marked.min.js +0 -69
@@ -0,0 +1,563 @@
1
+ import * as fs from "node:fs";
2
+ import * as os from "node:os";
3
+ import * as path from "node:path";
4
+ import { truncateToWidth as piTruncateToWidth, visibleWidth as piVisibleWidth, } from "@mariozechner/pi-tui";
5
+ import { patchEditorPrototype } from "./pi-tui-editor-patch.js";
6
+ import { patchSettingsListPrototype } from "./pi-tui-settings-list-patch.js";
7
+ const APPLY_FLAG = "__tallow_pi_tui_patch_applied__";
8
+ const STARTUP_GRACE_MS = 3000;
9
+ const KITTY_PREFIX = "\x1b_G";
10
+ const ITERM2_PREFIX = "\x1b]1337;File=";
11
+ function isImageLineLocal(line) {
12
+ return (line.startsWith(KITTY_PREFIX) ||
13
+ line.startsWith(ITERM2_PREFIX) ||
14
+ line.includes(KITTY_PREFIX) ||
15
+ line.includes(ITERM2_PREFIX));
16
+ }
17
+ const tuiStartedAtMs = new WeakMap();
18
+ const tuiPendingScrollbackClear = new WeakMap();
19
+ const tuiRenderBatchDepth = new WeakMap();
20
+ const tuiRenderDeferredDuringBatch = new WeakMap();
21
+ const tuiRenderForceDeferredDuringBatch = new WeakMap();
22
+ const tuiRollingShrinkPeak = new WeakMap();
23
+ function getTuiRenderBatchDepth(tui) {
24
+ return tuiRenderBatchDepth.get(tui) ?? 0;
25
+ }
26
+ function getTuiPendingScrollbackClear(tui) {
27
+ return tuiPendingScrollbackClear.get(tui) ?? false;
28
+ }
29
+ function setTuiPendingScrollbackClear(tui, value) {
30
+ tuiPendingScrollbackClear.set(tui, value);
31
+ }
32
+ function getTuiRollingShrinkPeak(tui) {
33
+ return tuiRollingShrinkPeak.get(tui) ?? 0;
34
+ }
35
+ function setTuiRollingShrinkPeak(tui, value) {
36
+ tuiRollingShrinkPeak.set(tui, value);
37
+ }
38
+ /**
39
+ * Build the current render snapshot from the patched TUI.
40
+ *
41
+ * @param tui - Patched TUI instance
42
+ * @returns Snapshot used by render helpers
43
+ */
44
+ function createRenderSnapshot(tui) {
45
+ const width = tui.terminal.columns;
46
+ const height = tui.terminal.rows;
47
+ let newLines = tui.render(width);
48
+ if (tui.overlayStack.length > 0) {
49
+ newLines = tui.compositeOverlays(newLines, width, height);
50
+ }
51
+ const cursorPos = tui.extractCursorPosition(newLines, height);
52
+ newLines = tui.applyLineResets(newLines);
53
+ const startedAt = tuiStartedAtMs.get(tui) ?? 0;
54
+ return {
55
+ cursorPos,
56
+ height,
57
+ inStartupGrace: startedAt > 0 && Date.now() - startedAt < STARTUP_GRACE_MS,
58
+ newLines,
59
+ width,
60
+ widthChanged: tui.previousWidth !== 0 && tui.previousWidth !== width,
61
+ };
62
+ }
63
+ /**
64
+ * Create a redraw logger when debug logging is enabled.
65
+ *
66
+ * @param tui - Patched TUI instance
67
+ * @param snapshot - Current render snapshot
68
+ * @returns Logger callback
69
+ */
70
+ function createRedrawLogger(tui, snapshot) {
71
+ const debugRedraw = process.env.PI_DEBUG_REDRAW === "1";
72
+ return (reason) => {
73
+ if (!debugRedraw)
74
+ return;
75
+ const logPath = path.join(os.homedir(), ".pi", "agent", "pi-debug.log");
76
+ const msg = `[${new Date().toISOString()}] fullRender: ${reason} (prev=${tui.previousLines.length}, new=${snapshot.newLines.length}, height=${snapshot.height})\n`;
77
+ fs.appendFileSync(logPath, msg);
78
+ };
79
+ }
80
+ /**
81
+ * Persist render bookkeeping shared by all render strategies.
82
+ *
83
+ * @param tui - Patched TUI instance
84
+ * @param snapshot - Current render snapshot
85
+ * @param viewportTopForRender - Top line rendered into the viewport
86
+ * @param preserveMaxLines - Whether maxLinesRendered should grow instead of reset
87
+ * @returns Nothing
88
+ */
89
+ function finalizeRenderedState(tui, snapshot, viewportTopForRender, preserveMaxLines) {
90
+ tui.cursorRow = Math.max(0, snapshot.newLines.length - 1);
91
+ tui.hardwareCursorRow = tui.cursorRow;
92
+ tui.maxLinesRendered = preserveMaxLines
93
+ ? Math.max(tui.maxLinesRendered, snapshot.newLines.length)
94
+ : snapshot.newLines.length;
95
+ tui.previousViewportTop = viewportTopForRender;
96
+ setTuiRollingShrinkPeak(tui, snapshot.newLines.length);
97
+ tui.positionHardwareCursor(snapshot.cursorPos, snapshot.newLines.length);
98
+ tui.previousLines = snapshot.newLines;
99
+ tui.previousWidth = snapshot.width;
100
+ }
101
+ /**
102
+ * Write a full redraw of the visible tail.
103
+ *
104
+ * @param tui - Patched TUI instance
105
+ * @param snapshot - Current render snapshot
106
+ * @param clear - Whether to clear the screen before rendering
107
+ * @returns Nothing
108
+ */
109
+ function writeFullRender(tui, snapshot, clear) {
110
+ tui.fullRedrawCount += 1;
111
+ const viewportTopForRender = Math.max(0, snapshot.newLines.length - snapshot.height);
112
+ const visibleLines = snapshot.newLines.slice(viewportTopForRender);
113
+ let buffer = "\x1b[?2026h";
114
+ if (clear && getTuiPendingScrollbackClear(tui)) {
115
+ buffer += "\x1b[3J\x1b[2J\x1b[H";
116
+ setTuiPendingScrollbackClear(tui, false);
117
+ }
118
+ else if (clear) {
119
+ buffer += "\x1b[2J\x1b[H";
120
+ }
121
+ for (let index = 0; index < visibleLines.length; index += 1) {
122
+ if (index > 0)
123
+ buffer += "\r\n";
124
+ buffer += visibleLines[index];
125
+ }
126
+ buffer += "\x1b[?2026l";
127
+ tui.terminal.write(buffer);
128
+ finalizeRenderedState(tui, snapshot, viewportTopForRender, !clear);
129
+ }
130
+ /**
131
+ * Write a startup-safe redraw that clears only stale visible rows.
132
+ *
133
+ * @param tui - Patched TUI instance
134
+ * @param snapshot - Current render snapshot
135
+ * @returns Nothing
136
+ */
137
+ function writeGentleFullRender(tui, snapshot) {
138
+ tui.fullRedrawCount += 1;
139
+ const viewportTopForRender = Math.max(0, snapshot.newLines.length - snapshot.height);
140
+ const visibleLines = snapshot.newLines.slice(viewportTopForRender);
141
+ let buffer = "\x1b[?2026h\x1b[H";
142
+ for (let index = 0; index < visibleLines.length; index += 1) {
143
+ buffer += "\x1b[2K";
144
+ buffer += visibleLines[index];
145
+ if (index < visibleLines.length - 1)
146
+ buffer += "\r\n";
147
+ }
148
+ const staleLines = Math.max(0, Math.min(tui.maxLinesRendered, snapshot.height) - visibleLines.length);
149
+ for (let index = 0; index < staleLines; index += 1) {
150
+ buffer += "\r\n\x1b[2K";
151
+ }
152
+ buffer += "\x1b[?2026l";
153
+ tui.terminal.write(buffer);
154
+ finalizeRenderedState(tui, snapshot, viewportTopForRender, false);
155
+ }
156
+ /**
157
+ * Apply render rules that require a full redraw and report whether rendering is done.
158
+ *
159
+ * @param tui - Patched TUI instance
160
+ * @param snapshot - Current render snapshot
161
+ * @param logRedraw - Debug logger
162
+ * @returns True when rendering was handled
163
+ */
164
+ function handleEarlyFullRender(tui, snapshot, logRedraw) {
165
+ if (tui.previousLines.length === 0 && !snapshot.widthChanged) {
166
+ logRedraw("first render");
167
+ writeFullRender(tui, snapshot, false);
168
+ return true;
169
+ }
170
+ if (snapshot.widthChanged) {
171
+ logRedraw(`width changed (${tui.previousWidth} -> ${snapshot.width})`);
172
+ writeFullRender(tui, snapshot, true);
173
+ return true;
174
+ }
175
+ if (tui.clearOnShrink &&
176
+ snapshot.newLines.length < tui.maxLinesRendered &&
177
+ tui.overlayStack.length === 0) {
178
+ logRedraw(`clearOnShrink (maxLinesRendered=${tui.maxLinesRendered})`);
179
+ if (snapshot.inStartupGrace) {
180
+ writeGentleFullRender(tui, snapshot);
181
+ }
182
+ else {
183
+ writeFullRender(tui, snapshot, true);
184
+ }
185
+ return true;
186
+ }
187
+ const shrinkDelta = tui.previousLines.length - snapshot.newLines.length;
188
+ if (shrinkDelta > 5 && tui.overlayStack.length === 0) {
189
+ logRedraw(`large shrink (${shrinkDelta} lines)`);
190
+ if (snapshot.inStartupGrace) {
191
+ writeGentleFullRender(tui, snapshot);
192
+ }
193
+ else {
194
+ writeFullRender(tui, snapshot, true);
195
+ }
196
+ return true;
197
+ }
198
+ const rollingPeak = getTuiRollingShrinkPeak(tui);
199
+ if (snapshot.newLines.length >= rollingPeak) {
200
+ setTuiRollingShrinkPeak(tui, snapshot.newLines.length);
201
+ return false;
202
+ }
203
+ if (tui.overlayStack.length > 0 || rollingPeak - snapshot.newLines.length <= 5) {
204
+ return false;
205
+ }
206
+ logRedraw(`rolling shrink (peak=${rollingPeak}, now=${snapshot.newLines.length}, delta=${rollingPeak - snapshot.newLines.length})`);
207
+ if (snapshot.inStartupGrace) {
208
+ writeGentleFullRender(tui, snapshot);
209
+ }
210
+ else {
211
+ writeFullRender(tui, snapshot, true);
212
+ }
213
+ return true;
214
+ }
215
+ /**
216
+ * Normalize viewport state when previous viewport math drifted after a shrink.
217
+ *
218
+ * @param tui - Patched TUI instance
219
+ * @param snapshot - Current render snapshot
220
+ * @param viewportState - Mutable viewport state
221
+ * @returns Nothing
222
+ */
223
+ function normalizeViewportBasisDrift(tui, snapshot, viewportState) {
224
+ const previousContentViewportTop = Math.max(0, tui.previousLines.length - snapshot.height);
225
+ const hasViewportBasisDrift = tui.overlayStack.length === 0 &&
226
+ tui.previousLines.length > 0 &&
227
+ tui.maxLinesRendered > snapshot.newLines.length &&
228
+ viewportState.prevViewportTop !== previousContentViewportTop;
229
+ if (!hasViewportBasisDrift)
230
+ return;
231
+ tui.maxLinesRendered = snapshot.newLines.length;
232
+ viewportState.viewportTop = Math.max(0, tui.maxLinesRendered - snapshot.height);
233
+ viewportState.prevViewportTop = viewportState.viewportTop;
234
+ tui.previousViewportTop = viewportState.viewportTop;
235
+ }
236
+ /**
237
+ * Find the changed window between the previous and current frames.
238
+ *
239
+ * @param previousLines - Previously rendered lines
240
+ * @param newLines - Newly rendered lines
241
+ * @returns Changed window metadata
242
+ */
243
+ function findChangedWindow(previousLines, newLines) {
244
+ let firstChanged = -1;
245
+ let lastChanged = -1;
246
+ const maxLines = Math.max(newLines.length, previousLines.length);
247
+ for (let index = 0; index < maxLines; index += 1) {
248
+ const oldLine = index < previousLines.length ? previousLines[index] : "";
249
+ const newLine = index < newLines.length ? newLines[index] : "";
250
+ if (oldLine !== newLine) {
251
+ if (firstChanged === -1)
252
+ firstChanged = index;
253
+ lastChanged = index;
254
+ }
255
+ }
256
+ const appendedLines = newLines.length > previousLines.length;
257
+ if (appendedLines) {
258
+ if (firstChanged === -1)
259
+ firstChanged = previousLines.length;
260
+ lastChanged = newLines.length - 1;
261
+ }
262
+ return {
263
+ appendStart: appendedLines && firstChanged === previousLines.length && firstChanged > 0,
264
+ firstChanged,
265
+ lastChanged,
266
+ };
267
+ }
268
+ /**
269
+ * Move the diff renderer to the target row, scrolling if needed.
270
+ *
271
+ * @param buffer - Escape-sequence buffer
272
+ * @param viewportState - Mutable viewport state
273
+ * @param moveTargetRow - Target row in the content
274
+ * @param height - Terminal height
275
+ * @returns Updated buffer
276
+ */
277
+ function moveBufferToTargetRow(buffer, viewportState, moveTargetRow, height) {
278
+ const prevViewportBottom = viewportState.prevViewportTop + height - 1;
279
+ if (moveTargetRow <= prevViewportBottom)
280
+ return buffer;
281
+ const currentScreenRow = Math.max(0, Math.min(height - 1, viewportState.hardwareCursorRow - viewportState.prevViewportTop));
282
+ const moveToBottom = height - 1 - currentScreenRow;
283
+ if (moveToBottom > 0)
284
+ buffer += `\x1b[${moveToBottom}B`;
285
+ const scroll = moveTargetRow - prevViewportBottom;
286
+ buffer += "\r\n".repeat(scroll);
287
+ viewportState.prevViewportTop += scroll;
288
+ viewportState.viewportTop += scroll;
289
+ viewportState.hardwareCursorRow = moveTargetRow;
290
+ return buffer;
291
+ }
292
+ /**
293
+ * Compute the relative line movement needed for cursor positioning.
294
+ *
295
+ * @param viewportState - Mutable viewport state
296
+ * @param targetRow - Target content row
297
+ * @returns Relative line movement
298
+ */
299
+ function computeLineDiff(viewportState, targetRow) {
300
+ const currentScreenRow = viewportState.hardwareCursorRow - viewportState.prevViewportTop;
301
+ const targetScreenRow = targetRow - viewportState.viewportTop;
302
+ return targetScreenRow - currentScreenRow;
303
+ }
304
+ /**
305
+ * Ensure a rendered line never exceeds terminal width.
306
+ *
307
+ * @param tui - Patched TUI instance
308
+ * @param snapshot - Current render snapshot
309
+ * @param line - Rendered line
310
+ * @param lineIndex - Line index in the frame
311
+ * @returns Safe line content
312
+ */
313
+ function normalizeRenderedLine(tui, snapshot, line, lineIndex) {
314
+ if (isImageLineLocal(line) || piVisibleWidth(line) <= snapshot.width) {
315
+ return line;
316
+ }
317
+ const crashLogPath = path.join(os.homedir(), ".pi", "agent", "pi-crash.log");
318
+ const crashData = [
319
+ `Crash at ${new Date().toISOString()}`,
320
+ `Terminal width: ${snapshot.width}`,
321
+ `Line ${lineIndex} visible width: ${piVisibleWidth(line)}`,
322
+ "",
323
+ "=== All rendered lines ===",
324
+ ...snapshot.newLines.map((renderedLine, index) => `[${index}] (w=${piVisibleWidth(renderedLine)}) ${renderedLine}`),
325
+ "",
326
+ ].join("\n");
327
+ fs.mkdirSync(path.dirname(crashLogPath), { recursive: true });
328
+ fs.writeFileSync(crashLogPath, crashData);
329
+ if (process.env.TALLOW_DEBUG || process.env.PI_DEBUG) {
330
+ tui.stop?.();
331
+ throw new Error(`Rendered line ${lineIndex} exceeds terminal width (${piVisibleWidth(line)} > ${snapshot.width}).`);
332
+ }
333
+ return piTruncateToWidth(line, snapshot.width, "");
334
+ }
335
+ /**
336
+ * Handle frames where only trailing lines were removed.
337
+ *
338
+ * @param tui - Patched TUI instance
339
+ * @param snapshot - Current render snapshot
340
+ * @param viewportState - Mutable viewport state
341
+ * @param changedWindow - Changed window metadata
342
+ * @param logRedraw - Debug logger
343
+ * @returns True when rendering was handled
344
+ */
345
+ function handleTailRemovalOnly(tui, snapshot, viewportState, changedWindow, logRedraw) {
346
+ if (changedWindow.firstChanged < snapshot.newLines.length)
347
+ return false;
348
+ if (tui.previousLines.length <= snapshot.newLines.length) {
349
+ tui.positionHardwareCursor(snapshot.cursorPos, snapshot.newLines.length);
350
+ tui.previousLines = snapshot.newLines;
351
+ tui.previousWidth = snapshot.width;
352
+ tui.previousViewportTop = Math.max(0, tui.maxLinesRendered - snapshot.height);
353
+ return true;
354
+ }
355
+ let buffer = "\x1b[?2026h";
356
+ const targetRow = Math.max(0, snapshot.newLines.length - 1);
357
+ const lineDiff = computeLineDiff(viewportState, targetRow);
358
+ if (lineDiff > 0)
359
+ buffer += `\x1b[${lineDiff}B`;
360
+ else if (lineDiff < 0)
361
+ buffer += `\x1b[${-lineDiff}A`;
362
+ buffer += "\r";
363
+ const extraLines = tui.previousLines.length - snapshot.newLines.length;
364
+ if (extraLines > snapshot.height) {
365
+ logRedraw(`extraLines > height (${extraLines} > ${snapshot.height})`);
366
+ if (snapshot.inStartupGrace) {
367
+ writeGentleFullRender(tui, snapshot);
368
+ }
369
+ else {
370
+ writeFullRender(tui, snapshot, true);
371
+ }
372
+ return true;
373
+ }
374
+ if (extraLines > 0)
375
+ buffer += "\x1b[1B";
376
+ for (let index = 0; index < extraLines; index += 1) {
377
+ buffer += "\r\x1b[2K";
378
+ if (index < extraLines - 1)
379
+ buffer += "\x1b[1B";
380
+ }
381
+ if (extraLines > 0)
382
+ buffer += `\x1b[${extraLines}A`;
383
+ buffer += "\x1b[?2026l";
384
+ tui.terminal.write(buffer);
385
+ tui.cursorRow = targetRow;
386
+ tui.hardwareCursorRow = targetRow;
387
+ tui.positionHardwareCursor(snapshot.cursorPos, snapshot.newLines.length);
388
+ tui.previousLines = snapshot.newLines;
389
+ tui.previousWidth = snapshot.width;
390
+ tui.previousViewportTop = Math.max(0, tui.maxLinesRendered - snapshot.height);
391
+ return true;
392
+ }
393
+ /**
394
+ * Render the changed diff window into the current viewport.
395
+ *
396
+ * @param tui - Patched TUI instance
397
+ * @param snapshot - Current render snapshot
398
+ * @param viewportState - Mutable viewport state
399
+ * @param changedWindow - Changed window metadata
400
+ * @param logRedraw - Debug logger
401
+ * @returns Nothing
402
+ */
403
+ function renderDiffWindow(tui, snapshot, viewportState, changedWindow, logRedraw) {
404
+ if (changedWindow.firstChanged < viewportState.prevViewportTop) {
405
+ logRedraw(`firstChanged < viewportTop (${changedWindow.firstChanged} < ${viewportState.prevViewportTop})`);
406
+ if (snapshot.inStartupGrace) {
407
+ writeGentleFullRender(tui, snapshot);
408
+ }
409
+ else {
410
+ writeFullRender(tui, snapshot, true);
411
+ }
412
+ return;
413
+ }
414
+ let buffer = "\x1b[?2026h";
415
+ const moveTargetRow = changedWindow.appendStart
416
+ ? changedWindow.firstChanged - 1
417
+ : changedWindow.firstChanged;
418
+ buffer = moveBufferToTargetRow(buffer, viewportState, moveTargetRow, snapshot.height);
419
+ const lineDiff = computeLineDiff(viewportState, moveTargetRow);
420
+ if (lineDiff > 0)
421
+ buffer += `\x1b[${lineDiff}B`;
422
+ else if (lineDiff < 0)
423
+ buffer += `\x1b[${-lineDiff}A`;
424
+ buffer += changedWindow.appendStart ? "\r\n" : "\r";
425
+ const renderEnd = Math.min(changedWindow.lastChanged, snapshot.newLines.length - 1);
426
+ for (let index = changedWindow.firstChanged; index <= renderEnd; index += 1) {
427
+ if (index > changedWindow.firstChanged)
428
+ buffer += "\r\n";
429
+ buffer += "\x1b[2K";
430
+ const normalizedLine = normalizeRenderedLine(tui, snapshot, snapshot.newLines[index], index);
431
+ snapshot.newLines[index] = normalizedLine;
432
+ buffer += normalizedLine;
433
+ }
434
+ let finalCursorRow = renderEnd;
435
+ if (tui.previousLines.length > snapshot.newLines.length) {
436
+ const extraLines = tui.previousLines.length - snapshot.newLines.length;
437
+ if (extraLines > snapshot.height) {
438
+ logRedraw(`extraLines > height in diff path (${extraLines} > ${snapshot.height})`);
439
+ writeFullRender(tui, snapshot, true);
440
+ return;
441
+ }
442
+ if (renderEnd < snapshot.newLines.length - 1) {
443
+ const moveDown = snapshot.newLines.length - 1 - renderEnd;
444
+ buffer += `\x1b[${moveDown}B`;
445
+ finalCursorRow = snapshot.newLines.length - 1;
446
+ }
447
+ for (let index = snapshot.newLines.length; index < tui.previousLines.length; index += 1) {
448
+ buffer += "\r\n\x1b[2K";
449
+ }
450
+ buffer += `\x1b[${extraLines}A`;
451
+ }
452
+ buffer += "\x1b[?2026l";
453
+ tui.terminal.write(buffer);
454
+ tui.cursorRow = Math.max(0, snapshot.newLines.length - 1);
455
+ tui.hardwareCursorRow = finalCursorRow;
456
+ tui.maxLinesRendered =
457
+ tui.overlayStack.length === 0
458
+ ? snapshot.newLines.length
459
+ : Math.max(tui.maxLinesRendered, snapshot.newLines.length);
460
+ tui.previousViewportTop = Math.max(0, tui.maxLinesRendered - snapshot.height);
461
+ setTuiRollingShrinkPeak(tui, Math.max(getTuiRollingShrinkPeak(tui), snapshot.newLines.length));
462
+ tui.positionHardwareCursor(snapshot.cursorPos, snapshot.newLines.length);
463
+ tui.previousLines = snapshot.newLines;
464
+ tui.previousWidth = snapshot.width;
465
+ }
466
+ function patchTuiPrototype(prototype) {
467
+ if (prototype[APPLY_FLAG])
468
+ return;
469
+ prototype[APPLY_FLAG] = true;
470
+ prototype.resetRenderGrace = function () {
471
+ tuiStartedAtMs.set(this, Date.now());
472
+ };
473
+ prototype.requestScrollbackClear = function () {
474
+ setTuiPendingScrollbackClear(this, true);
475
+ };
476
+ prototype.beginRenderBatch = function () {
477
+ tuiRenderBatchDepth.set(this, getTuiRenderBatchDepth(this) + 1);
478
+ };
479
+ prototype.endRenderBatch = function () {
480
+ const depth = getTuiRenderBatchDepth(this);
481
+ if (depth <= 0)
482
+ return;
483
+ tuiRenderBatchDepth.set(this, depth - 1);
484
+ if (depth === 1 && (tuiRenderDeferredDuringBatch.get(this) ?? false)) {
485
+ const wasForce = tuiRenderForceDeferredDuringBatch.get(this) ?? false;
486
+ tuiRenderDeferredDuringBatch.set(this, false);
487
+ tuiRenderForceDeferredDuringBatch.set(this, false);
488
+ this.requestRender(wasForce);
489
+ }
490
+ };
491
+ const originalStart = prototype.start;
492
+ if (typeof originalStart === "function") {
493
+ prototype.start = function () {
494
+ tuiStartedAtMs.set(this, Date.now());
495
+ originalStart.call(this);
496
+ };
497
+ }
498
+ const originalQueryCellSize = prototype.queryCellSize;
499
+ if (typeof originalQueryCellSize === "function") {
500
+ prototype.queryCellSize = function () {
501
+ if (process.env.TMUX) {
502
+ return;
503
+ }
504
+ originalQueryCellSize.call(this);
505
+ };
506
+ }
507
+ const originalRequestRender = prototype.requestRender;
508
+ if (typeof originalRequestRender === "function") {
509
+ prototype.requestRender = function (force = false) {
510
+ if (force) {
511
+ setTuiRollingShrinkPeak(this, 0);
512
+ }
513
+ if (getTuiRenderBatchDepth(this) > 0) {
514
+ tuiRenderDeferredDuringBatch.set(this, true);
515
+ if (force)
516
+ tuiRenderForceDeferredDuringBatch.set(this, true);
517
+ return;
518
+ }
519
+ originalRequestRender.call(this, force);
520
+ };
521
+ }
522
+ prototype.doRender = function () {
523
+ if (this.stopped)
524
+ return;
525
+ const snapshot = createRenderSnapshot(this);
526
+ const logRedraw = createRedrawLogger(this, snapshot);
527
+ if (handleEarlyFullRender(this, snapshot, logRedraw)) {
528
+ return;
529
+ }
530
+ const viewportState = {
531
+ hardwareCursorRow: this.hardwareCursorRow,
532
+ prevViewportTop: this.previousViewportTop,
533
+ viewportTop: Math.max(0, this.maxLinesRendered - snapshot.height),
534
+ };
535
+ normalizeViewportBasisDrift(this, snapshot, viewportState);
536
+ const changedWindow = findChangedWindow(this.previousLines, snapshot.newLines);
537
+ if (changedWindow.firstChanged === -1) {
538
+ this.positionHardwareCursor(snapshot.cursorPos, snapshot.newLines.length);
539
+ this.previousViewportTop = Math.max(0, this.maxLinesRendered - snapshot.height);
540
+ return;
541
+ }
542
+ if (handleTailRemovalOnly(this, snapshot, viewportState, changedWindow, logRedraw)) {
543
+ return;
544
+ }
545
+ renderDiffWindow(this, snapshot, viewportState, changedWindow, logRedraw);
546
+ };
547
+ }
548
+ export async function applyPiTuiPatches() {
549
+ const mod = (await import("@mariozechner/pi-tui"));
550
+ const editorPrototype = mod.Editor?.prototype;
551
+ if (editorPrototype) {
552
+ patchEditorPrototype(editorPrototype);
553
+ }
554
+ const settingsListPrototype = mod.SettingsList?.prototype;
555
+ if (settingsListPrototype) {
556
+ patchSettingsListPrototype(settingsListPrototype);
557
+ }
558
+ const tuiPrototype = mod.TUI?.prototype;
559
+ if (tuiPrototype) {
560
+ patchTuiPrototype(tuiPrototype);
561
+ }
562
+ }
563
+ //# sourceMappingURL=pi-tui-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-tui-patch.js","sourceRoot":"","sources":["../src/pi-tui-patch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACN,eAAe,IAAI,iBAAiB,EACpC,YAAY,IAAI,cAAc,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E,MAAM,UAAU,GAAG,iCAAiC,CAAC;AACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,SAAS,gBAAgB,CAAC,IAAY;IACrC,OAAO,CACN,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC5B,CAAC;AACH,CAAC;AA2CD,MAAM,cAAc,GAAG,IAAI,OAAO,EAAkB,CAAC;AACrD,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAAmB,CAAC;AACjE,MAAM,mBAAmB,GAAG,IAAI,OAAO,EAAkB,CAAC;AAC1D,MAAM,4BAA4B,GAAG,IAAI,OAAO,EAAmB,CAAC;AACpE,MAAM,iCAAiC,GAAG,IAAI,OAAO,EAAmB,CAAC;AACzE,MAAM,oBAAoB,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE3D,SAAS,sBAAsB,CAAC,GAAW;IAC1C,OAAO,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAW;IAChD,OAAO,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;AACpD,CAAC;AAED,SAAS,4BAA4B,CAAC,GAAW,EAAE,KAAc;IAChE,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC3C,OAAO,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW,EAAE,KAAa;IAC1D,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAyBD;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,GAA4B;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;IACnC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO;QACN,SAAS;QACT,MAAM;QACN,cAAc,EAAE,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,gBAAgB;QAC1E,QAAQ;QACR,KAAK;QACL,YAAY,EAAE,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,GAAG,CAAC,aAAa,KAAK,KAAK;KACpE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAC1B,GAAmB,EACnB,QAAwB;IAExB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAC;IACxD,OAAO,CAAC,MAAc,EAAQ,EAAE;QAC/B,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,iBAAiB,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,MAAM,SAAS,QAAQ,CAAC,QAAQ,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,KAAK,CAAC;QACnK,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAC7B,GAAmB,EACnB,QAAwB,EACxB,oBAA4B,EAC5B,gBAAyB;IAEzB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;IACtC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB;QACtC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1D,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC5B,GAAG,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;IAC/C,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvD,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACtC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACvB,GAA4B,EAC5B,QAAwB,EACxB,KAAc;IAEd,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;IACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnE,IAAI,MAAM,GAAG,aAAa,CAAC;IAC3B,IAAI,KAAK,IAAI,4BAA4B,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,sBAAsB,CAAC;QACjC,4BAA4B,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,eAAe,CAAC;IAC3B,CAAC;IACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,MAAM,CAAC;QAChC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,aAAa,CAAC;IACxB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,GAAmB,EAAE,QAAwB;IAC3E,GAAG,CAAC,eAAe,IAAI,CAAC,CAAC;IACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACnE,IAAI,MAAM,GAAG,mBAAmB,CAAC;IACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,SAAS,CAAC;QACpB,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,MAAM,CAAC;IACvD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CACrE,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CAAC;IACzB,CAAC;IACD,MAAM,IAAI,aAAa,CAAC;IACxB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAC7B,GAA4B,EAC5B,QAAwB,EACxB,SAAmC;IAEnC,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC9D,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1B,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,SAAS,CAAC,kBAAkB,GAAG,CAAC,aAAa,OAAO,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACvE,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IACC,GAAG,CAAC,aAAa;QACjB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,gBAAgB;QAC/C,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAC5B,CAAC;QACF,SAAS,CAAC,mCAAmC,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxE,IAAI,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,iBAAiB,WAAW,SAAS,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,WAAW,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QAC7C,uBAAuB,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAChF,OAAO,KAAK,CAAC;IACd,CAAC;IACD,SAAS,CACR,wBAAwB,WAAW,SAAS,QAAQ,CAAC,QAAQ,CAAC,MAAM,WAAW,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CACxH,CAAC;IACF,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC7B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,2BAA2B,CACnC,GAAmB,EACnB,QAAwB,EACxB,aAA4B;IAE5B,MAAM,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,qBAAqB,GAC1B,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;QAC7B,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAC5B,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;QAC/C,aAAa,CAAC,eAAe,KAAK,0BAA0B,CAAC;IAC9D,IAAI,CAAC,qBAAqB;QAAE,OAAO;IACnC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IAChD,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChF,aAAa,CAAC,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;IAC1D,GAAG,CAAC,mBAAmB,GAAG,aAAa,CAAC,WAAW,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,aAAuB,EAAE,QAAkB;IACrE,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACzB,IAAI,YAAY,KAAK,CAAC,CAAC;gBAAE,YAAY,GAAG,KAAK,CAAC;YAC9C,WAAW,GAAG,KAAK,CAAC;QACrB,CAAC;IACF,CAAC;IACD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAC7D,IAAI,aAAa,EAAE,CAAC;QACnB,IAAI,YAAY,KAAK,CAAC,CAAC;YAAE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;QAC7D,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,OAAO;QACN,WAAW,EAAE,aAAa,IAAI,YAAY,KAAK,aAAa,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC;QACvF,YAAY;QACZ,WAAW;KACX,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAC7B,MAAc,EACd,aAA4B,EAC5B,aAAqB,EACrB,MAAc;IAEd,MAAM,kBAAkB,GAAG,aAAa,CAAC,eAAe,GAAG,MAAM,GAAG,CAAC,CAAC;IACtE,IAAI,aAAa,IAAI,kBAAkB;QAAE,OAAO,MAAM,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAChC,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,eAAe,CAAC,CACrF,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC;IACnD,IAAI,YAAY,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,YAAY,GAAG,CAAC;IACxD,MAAM,MAAM,GAAG,aAAa,GAAG,kBAAkB,CAAC;IAClD,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,aAAa,CAAC,eAAe,IAAI,MAAM,CAAC;IACxC,aAAa,CAAC,WAAW,IAAI,MAAM,CAAC;IACpC,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC;IAChD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,aAA4B,EAAE,SAAiB;IACvE,MAAM,gBAAgB,GAAG,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,eAAe,CAAC;IACzF,MAAM,eAAe,GAAG,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC;IAC9D,OAAO,eAAe,GAAG,gBAAgB,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAC7B,GAAmB,EACnB,QAAwB,EACxB,IAAY,EACZ,SAAiB;IAEjB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG;QACjB,YAAY,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QACtC,mBAAmB,QAAQ,CAAC,KAAK,EAAE;QACnC,QAAQ,SAAS,mBAAmB,cAAc,CAAC,IAAI,CAAC,EAAE;QAC1D,EAAE;QACF,4BAA4B;QAC5B,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CACvB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,QAAQ,cAAc,CAAC,YAAY,CAAC,KAAK,YAAY,EAAE,CACzF;QACD,EAAE;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtD,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACd,iBAAiB,SAAS,4BAA4B,cAAc,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,IAAI,CAClG,CAAC;IACH,CAAC;IACD,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAC7B,GAAmB,EACnB,QAAwB,EACxB,aAA4B,EAC5B,aAA4B,EAC5B,SAAmC;IAEnC,IAAI,aAAa,CAAC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxE,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC1D,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzE,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACtC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;QACnC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,MAAM,GAAG,aAAa,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3D,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,QAAQ,GAAG,CAAC;SAC3C,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC;IACtD,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvE,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClC,SAAS,CAAC,wBAAwB,UAAU,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtE,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,WAAW,CAAC;QACtB,IAAI,KAAK,GAAG,UAAU,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC;IACjD,CAAC;IACD,IAAI,UAAU,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,UAAU,GAAG,CAAC;IACpD,MAAM,IAAI,aAAa,CAAC;IACxB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAClC,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACtC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9E,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,gBAAgB,CACxB,GAA4B,EAC5B,QAAwB,EACxB,aAA4B,EAC5B,aAA4B,EAC5B,SAAmC;IAEnC,IAAI,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,eAAe,EAAE,CAAC;QAChE,SAAS,CACR,+BAA+B,aAAa,CAAC,YAAY,MAAM,aAAa,CAAC,eAAe,GAAG,CAC/F,CAAC;QACF,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC7B,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO;IACR,CAAC;IACD,IAAI,MAAM,GAAG,aAAa,CAAC;IAC3B,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW;QAC9C,CAAC,CAAC,aAAa,CAAC,YAAY,GAAG,CAAC;QAChC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC;IAC9B,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,eAAe,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,QAAQ,GAAG,CAAC;SAC3C,IAAI,QAAQ,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC;IACtD,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpF,KAAK,IAAI,KAAK,GAAG,aAAa,CAAC,YAAY,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7E,IAAI,KAAK,GAAG,aAAa,CAAC,YAAY;YAAE,MAAM,IAAI,MAAM,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC;QACpB,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7F,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,cAAc,CAAC;QAC1C,MAAM,IAAI,cAAc,CAAC;IAC1B,CAAC;IACD,IAAI,cAAc,GAAG,SAAS,CAAC;IAC/B,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvE,IAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClC,SAAS,CAAC,qCAAqC,UAAU,MAAM,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACnF,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACrC,OAAO;QACR,CAAC;QACD,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;YAC1D,MAAM,IAAI,QAAQ,QAAQ,GAAG,CAAC;YAC9B,cAAc,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACzF,MAAM,IAAI,aAAa,CAAC;QACzB,CAAC;QACD,MAAM,IAAI,QAAQ,UAAU,GAAG,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,aAAa,CAAC;IACxB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,iBAAiB,GAAG,cAAc,CAAC;IACvC,GAAG,CAAC,gBAAgB;QACnB,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;YAC5B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;YAC1B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9E,uBAAuB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,GAAG,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACtC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;AACpC,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA2B;IACrD,IAAI,SAAS,CAAC,UAAU,CAAC;QAAE,OAAO;IAClC,SAAS,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAE7B,SAAS,CAAC,gBAAgB,GAAG;QAC5B,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,SAAS,CAAC,sBAAsB,GAAG;QAClC,4BAA4B,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,SAAS,CAAC,gBAAgB,GAAG;QAC5B,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,SAAS,CAAC,cAAc,GAAG;QAC1B,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO;QACvB,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,iCAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;YACtE,4BAA4B,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,iCAAiC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC;IACtC,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACzC,SAAS,CAAC,KAAK,GAAG;YACjB,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG,SAAS,CAAC,aAAa,CAAC;IACtD,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACjD,SAAS,CAAC,aAAa,GAAG;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACtB,OAAO;YACR,CAAC;YACD,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC;IACH,CAAC;IAED,MAAM,qBAAqB,GAAG,SAAS,CAAC,aAAa,CAAC;IACtD,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE,CAAC;QACjD,SAAS,CAAC,aAAa,GAAG,UAAyC,KAAK,GAAG,KAAK;YAC/E,IAAI,KAAK,EAAE,CAAC;gBACX,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtC,4BAA4B,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7C,IAAI,KAAK;oBAAE,iCAAiC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7D,OAAO;YACR,CAAC;YACD,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,QAAQ,GAAG;QACpB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;YACtD,OAAO;QACR,CAAC;QACD,MAAM,aAAa,GAAkB;YACpC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,eAAe,EAAE,IAAI,CAAC,mBAAmB;YACzC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;SACjE,CAAC;QACF,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,aAAa,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChF,OAAO;QACR,CAAC;QACD,IAAI,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC;YACpF,OAAO;QACR,CAAC;QACD,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAIhD,CAAC;IACF,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAC9C,IAAI,eAAe,EAAE,CAAC;QACrB,oBAAoB,CAAC,eAA6D,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,qBAAqB,GAAG,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC;IAC1D,IAAI,qBAAqB,EAAE,CAAC;QAC3B,0BAA0B,CACzB,qBAAyE,CACzE,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;IACxC,IAAI,YAAY,EAAE,CAAC;QAClB,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ declare const SETTINGS_LIST_PATCH_FLAG = "__tallow_pi_tui_settings_list_patch_applied__";
2
+ type SettingsListPrototypeLike = {
3
+ activateItem?: () => void;
4
+ closeSubmenu?: () => void;
5
+ [SETTINGS_LIST_PATCH_FLAG]?: boolean;
6
+ render?: (width: number) => string[];
7
+ setLayoutTransitionCallback?: (callback?: () => void) => void;
8
+ };
9
+ export declare function patchSettingsListPrototype(prototype: SettingsListPrototypeLike): void;
10
+ export {};
11
+ //# sourceMappingURL=pi-tui-settings-list-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-tui-settings-list-patch.d.ts","sourceRoot":"","sources":["../src/pi-tui-settings-list-patch.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,wBAAwB,kDAAkD,CAAC;AAQjF,KAAK,yBAAyB,GAAG;IAChC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,CAAC,wBAAwB,CAAC,CAAC,EAAE,OAAO,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,2BAA2B,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC9D,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,yBAAyB,GAAG,IAAI,CA0CrF"}
@@ -0,0 +1,38 @@
1
+ const SETTINGS_LIST_PATCH_FLAG = "__tallow_pi_tui_settings_list_patch_applied__";
2
+ export function patchSettingsListPrototype(prototype) {
3
+ if (prototype[SETTINGS_LIST_PATCH_FLAG])
4
+ return;
5
+ prototype[SETTINGS_LIST_PATCH_FLAG] = true;
6
+ prototype.setLayoutTransitionCallback = function (callback) {
7
+ this.__tallow_layoutTransitionCallback = callback;
8
+ };
9
+ const originalRender = prototype.render;
10
+ if (typeof originalRender === "function") {
11
+ prototype.render = function (width) {
12
+ const lines = originalRender.call(this, width);
13
+ const minLineCount = this.__tallow_nextMinLineCount ?? 0;
14
+ const paddedLines = minLineCount > lines.length
15
+ ? [...lines, ...Array.from({ length: minLineCount - lines.length }, () => "")]
16
+ : lines;
17
+ this.__tallow_nextMinLineCount = 0;
18
+ this.__tallow_lastRenderLineCount = paddedLines.length;
19
+ return paddedLines;
20
+ };
21
+ }
22
+ const originalActivateItem = prototype.activateItem;
23
+ if (typeof originalActivateItem === "function") {
24
+ prototype.activateItem = function () {
25
+ this.__tallow_layoutTransitionCallback?.();
26
+ originalActivateItem.call(this);
27
+ };
28
+ }
29
+ const originalCloseSubmenu = prototype.closeSubmenu;
30
+ if (typeof originalCloseSubmenu === "function") {
31
+ prototype.closeSubmenu = function () {
32
+ this.__tallow_layoutTransitionCallback?.();
33
+ this.__tallow_nextMinLineCount = this.__tallow_lastRenderLineCount ?? 0;
34
+ originalCloseSubmenu.call(this);
35
+ };
36
+ }
37
+ }
38
+ //# sourceMappingURL=pi-tui-settings-list-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi-tui-settings-list-patch.js","sourceRoot":"","sources":["../src/pi-tui-settings-list-patch.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,+CAA+C,CAAC;AAgBjF,MAAM,UAAU,0BAA0B,CAAC,SAAoC;IAC9E,IAAI,SAAS,CAAC,wBAAwB,CAAC;QAAE,OAAO;IAChD,SAAS,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC;IAE3C,SAAS,CAAC,2BAA2B,GAAG,UAEvC,QAAqB;QAErB,IAAI,CAAC,iCAAiC,GAAG,QAAQ,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;IACxC,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QAC1C,SAAS,CAAC,MAAM,GAAG,UAAyC,KAAa;YACxE,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,IAAI,CAAC,CAAC;YACzD,MAAM,WAAW,GAChB,YAAY,GAAG,KAAK,CAAC,MAAM;gBAC1B,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9E,CAAC,CAAC,KAAK,CAAC;YACV,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,4BAA4B,GAAG,WAAW,CAAC,MAAM,CAAC;YACvD,OAAO,WAAW,CAAC;QACpB,CAAC,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,SAAS,CAAC,YAAY,CAAC;IACpD,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE,CAAC;QAChD,SAAS,CAAC,YAAY,GAAG;YACxB,IAAI,CAAC,iCAAiC,EAAE,EAAE,CAAC;YAC3C,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,SAAS,CAAC,YAAY,CAAC;IACpD,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE,CAAC;QAChD,SAAS,CAAC,YAAY,GAAG;YACxB,IAAI,CAAC,iCAAiC,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,4BAA4B,IAAI,CAAC,CAAC;YACxE,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC;IACH,CAAC;AACF,CAAC"}