@dungle-scrubs/tallow 0.9.3 → 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 (207) 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 -10
  6. package/dist/interactive-mode-patch.d.ts.map +1 -1
  7. package/dist/interactive-mode-patch.js +285 -148
  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 +6 -16
  38. package/extensions/__integration__/teams-runtime.test.ts +4 -1
  39. package/extensions/_icons/index.ts +2 -4
  40. package/extensions/_shared/__tests__/image-metadata.test.ts +33 -0
  41. package/extensions/_shared/__tests__/terminal-links.test.ts +18 -0
  42. package/extensions/_shared/image-metadata.ts +99 -0
  43. package/extensions/_shared/inline-preview.ts +1 -1
  44. package/extensions/_shared/pid-registry.ts +0 -1
  45. package/extensions/_shared/terminal-links.ts +22 -0
  46. package/extensions/ask-user-question-tool/index.ts +0 -3
  47. package/extensions/clear/__tests__/clear.test.ts +270 -3
  48. package/extensions/command-expansion/index.ts +1 -1
  49. package/extensions/context-files/index.ts +5 -1
  50. package/extensions/context-fork/__tests__/context-fork.test.ts +94 -1
  51. package/extensions/context-fork/extension.json +1 -1
  52. package/extensions/context-fork/index.ts +32 -0
  53. package/extensions/edit-tool-enhanced/index.ts +2 -1
  54. package/extensions/hooks/index.ts +33 -11
  55. package/extensions/loop/index.ts +14 -1
  56. package/extensions/lsp/index.ts +64 -13
  57. package/extensions/lsp/package.json +2 -2
  58. package/extensions/permissions/__tests__/permissions.test.ts +4 -4
  59. package/extensions/random-spinner/index.ts +7 -642
  60. package/extensions/read-tool-enhanced/index.ts +6 -8
  61. package/extensions/render-stabilizer/__tests__/render-stabilizer.test.ts +4 -5
  62. package/extensions/render-stabilizer/index.ts +6 -6
  63. package/extensions/show-system-prompt/__tests__/show-system-prompt.test.ts +1 -1
  64. package/extensions/slash-command-bridge/__tests__/slash-command-bridge.test.ts +26 -0
  65. package/extensions/slash-command-bridge/index.ts +14 -2
  66. package/extensions/subagent-tool/index.ts +1 -1
  67. package/extensions/subagent-tool/model-resolver.ts +274 -7
  68. package/extensions/tasks/__tests__/state-ui.test.ts +3 -3
  69. package/extensions/tasks/__tests__/widget-subagents.test.ts +2 -2
  70. package/extensions/tasks/commands/register-tasks-extension.ts +10 -10
  71. package/extensions/tasks/state/index.ts +1 -1
  72. package/extensions/tasks/ui/index.ts +2 -7
  73. package/extensions/teams-tool/tools/register-extension.ts +1 -3
  74. package/extensions/web-search-tool/index.ts +2 -1
  75. package/extensions/write-tool-enhanced/__tests__/write-tool-enhanced.test.ts +21 -6
  76. package/extensions/write-tool-enhanced/index.ts +2 -1
  77. package/node_modules/@mariozechner/pi-tui/README.md +56 -34
  78. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts +18 -13
  79. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.d.ts.map +1 -1
  80. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js +182 -113
  81. package/node_modules/@mariozechner/pi-tui/dist/autocomplete.js.map +1 -1
  82. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js +3 -3
  83. package/node_modules/@mariozechner/pi-tui/dist/components/cancellable-loader.js.map +1 -1
  84. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts +45 -36
  85. package/node_modules/@mariozechner/pi-tui/dist/components/editor.d.ts.map +1 -1
  86. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js +489 -325
  87. package/node_modules/@mariozechner/pi-tui/dist/components/editor.js.map +1 -1
  88. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts +1 -99
  89. package/node_modules/@mariozechner/pi-tui/dist/components/image.d.ts.map +1 -1
  90. package/node_modules/@mariozechner/pi-tui/dist/components/image.js +17 -192
  91. package/node_modules/@mariozechner/pi-tui/dist/components/image.js.map +1 -1
  92. package/node_modules/@mariozechner/pi-tui/dist/components/input.d.ts.map +1 -1
  93. package/node_modules/@mariozechner/pi-tui/dist/components/input.js +57 -60
  94. package/node_modules/@mariozechner/pi-tui/dist/components/input.js.map +1 -1
  95. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts +2 -69
  96. package/node_modules/@mariozechner/pi-tui/dist/components/loader.d.ts.map +1 -1
  97. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js +5 -102
  98. package/node_modules/@mariozechner/pi-tui/dist/components/loader.js.map +1 -1
  99. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.d.ts.map +1 -1
  100. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js +111 -53
  101. package/node_modules/@mariozechner/pi-tui/dist/components/markdown.js.map +1 -1
  102. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts +19 -1
  103. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.d.ts.map +1 -1
  104. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js +78 -67
  105. package/node_modules/@mariozechner/pi-tui/dist/components/select-list.js.map +1 -1
  106. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts +0 -2
  107. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.d.ts.map +1 -1
  108. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js +12 -23
  109. package/node_modules/@mariozechner/pi-tui/dist/components/settings-list.js.map +1 -1
  110. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts +8 -10
  111. package/node_modules/@mariozechner/pi-tui/dist/index.d.ts.map +1 -1
  112. package/node_modules/@mariozechner/pi-tui/dist/index.js +6 -9
  113. package/node_modules/@mariozechner/pi-tui/dist/index.js.map +1 -1
  114. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts +108 -238
  115. package/node_modules/@mariozechner/pi-tui/dist/keybindings.d.ts.map +1 -1
  116. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js +108 -365
  117. package/node_modules/@mariozechner/pi-tui/dist/keybindings.js.map +1 -1
  118. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts +33 -48
  119. package/node_modules/@mariozechner/pi-tui/dist/keys.d.ts.map +1 -1
  120. package/node_modules/@mariozechner/pi-tui/dist/keys.js +239 -155
  121. package/node_modules/@mariozechner/pi-tui/dist/keys.js.map +1 -1
  122. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts +14 -94
  123. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.d.ts.map +1 -1
  124. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js +44 -186
  125. package/node_modules/@mariozechner/pi-tui/dist/terminal-image.js.map +1 -1
  126. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts +13 -58
  127. package/node_modules/@mariozechner/pi-tui/dist/terminal.d.ts.map +1 -1
  128. package/node_modules/@mariozechner/pi-tui/dist/terminal.js +78 -111
  129. package/node_modules/@mariozechner/pi-tui/dist/terminal.js.map +1 -1
  130. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts +24 -110
  131. package/node_modules/@mariozechner/pi-tui/dist/tui.d.ts.map +1 -1
  132. package/node_modules/@mariozechner/pi-tui/dist/tui.js +188 -435
  133. package/node_modules/@mariozechner/pi-tui/dist/tui.js.map +1 -1
  134. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts +0 -18
  135. package/node_modules/@mariozechner/pi-tui/dist/utils.d.ts.map +1 -1
  136. package/node_modules/@mariozechner/pi-tui/dist/utils.js +251 -119
  137. package/node_modules/@mariozechner/pi-tui/dist/utils.js.map +1 -1
  138. package/node_modules/@mariozechner/pi-tui/package.json +6 -6
  139. package/node_modules/@mariozechner/pi-tui/src/__tests__/__snapshots__/render.test.ts.snap +3 -40
  140. package/node_modules/@mariozechner/pi-tui/src/__tests__/image-component.test.ts +71 -81
  141. package/node_modules/@mariozechner/pi-tui/src/__tests__/render.test.ts +0 -33
  142. package/node_modules/@mariozechner/pi-tui/src/__tests__/terminal-image.test.ts +93 -334
  143. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-render-scheduling.test.ts +1 -1
  144. package/node_modules/@mariozechner/pi-tui/src/__tests__/utils.test.ts +11 -196
  145. package/node_modules/@mariozechner/pi-tui/src/autocomplete.ts +228 -142
  146. package/node_modules/@mariozechner/pi-tui/src/components/cancellable-loader.ts +3 -3
  147. package/node_modules/@mariozechner/pi-tui/src/components/editor.ts +624 -390
  148. package/node_modules/@mariozechner/pi-tui/src/components/image.ts +17 -227
  149. package/node_modules/@mariozechner/pi-tui/src/components/input.ts +71 -63
  150. package/node_modules/@mariozechner/pi-tui/src/components/loader.ts +5 -137
  151. package/node_modules/@mariozechner/pi-tui/src/components/markdown.ts +143 -52
  152. package/node_modules/@mariozechner/pi-tui/src/components/select-list.ts +136 -70
  153. package/node_modules/@mariozechner/pi-tui/src/components/settings-list.ts +11 -23
  154. package/node_modules/@mariozechner/pi-tui/src/index.ts +17 -36
  155. package/node_modules/@mariozechner/pi-tui/src/keybindings.ts +148 -421
  156. package/node_modules/@mariozechner/pi-tui/src/keys.ts +253 -181
  157. package/node_modules/@mariozechner/pi-tui/src/terminal-image.ts +51 -252
  158. package/node_modules/@mariozechner/pi-tui/src/terminal.ts +78 -133
  159. package/node_modules/@mariozechner/pi-tui/src/tui.ts +202 -478
  160. package/node_modules/@mariozechner/pi-tui/src/utils.ts +289 -125
  161. package/node_modules/@mariozechner/pi-tui/tsconfig.build.json +1 -0
  162. package/package.json +13 -13
  163. package/packages/tallow-tui/node_modules/@types/mime-types/README.md +8 -2
  164. package/packages/tallow-tui/node_modules/@types/mime-types/index.d.ts +6 -0
  165. package/packages/tallow-tui/node_modules/@types/mime-types/package.json +9 -3
  166. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup-data.js +18 -0
  167. package/packages/tallow-tui/node_modules/get-east-asian-width/lookup.js +116 -384
  168. package/packages/tallow-tui/node_modules/get-east-asian-width/package.json +5 -4
  169. package/packages/tallow-tui/node_modules/get-east-asian-width/utilities.js +24 -0
  170. package/packages/tallow-tui/node_modules/marked/README.md +5 -4
  171. package/packages/tallow-tui/node_modules/marked/bin/main.js +10 -8
  172. package/packages/tallow-tui/node_modules/marked/bin/marked.js +2 -1
  173. package/packages/tallow-tui/node_modules/marked/lib/marked.d.ts +156 -125
  174. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js +67 -2179
  175. package/packages/tallow-tui/node_modules/marked/lib/marked.esm.js.map +3 -3
  176. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js +67 -2201
  177. package/packages/tallow-tui/node_modules/marked/lib/marked.umd.js.map +3 -3
  178. package/packages/tallow-tui/node_modules/marked/man/marked.1 +4 -2
  179. package/packages/tallow-tui/node_modules/marked/man/marked.1.md +2 -1
  180. package/packages/tallow-tui/node_modules/marked/package.json +26 -34
  181. package/runtime/model-metadata-overrides.ts +10 -1
  182. package/runtime/pid-schema.ts +26 -6
  183. package/skills/tallow-expert/SKILL.md +1 -3
  184. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts +0 -32
  185. package/node_modules/@mariozechner/pi-tui/dist/border-styles.d.ts.map +0 -1
  186. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js +0 -46
  187. package/node_modules/@mariozechner/pi-tui/dist/border-styles.js.map +0 -1
  188. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts +0 -52
  189. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.d.ts.map +0 -1
  190. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js +0 -89
  191. package/node_modules/@mariozechner/pi-tui/dist/components/bordered-box.js.map +0 -1
  192. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts +0 -14
  193. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.d.ts.map +0 -1
  194. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js +0 -55
  195. package/node_modules/@mariozechner/pi-tui/dist/test-utils/capability-env.js.map +0 -1
  196. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-change-listener.test.ts +0 -121
  197. package/node_modules/@mariozechner/pi-tui/src/__tests__/editor-ghost-text.test.ts +0 -112
  198. package/node_modules/@mariozechner/pi-tui/src/__tests__/mouse-events.test.ts +0 -134
  199. package/node_modules/@mariozechner/pi-tui/src/__tests__/settings-list.test.ts +0 -49
  200. package/node_modules/@mariozechner/pi-tui/src/__tests__/tui-diff-regression.test.ts +0 -555
  201. package/node_modules/@mariozechner/pi-tui/src/border-styles.ts +0 -60
  202. package/node_modules/@mariozechner/pi-tui/src/components/bordered-box.ts +0 -113
  203. package/node_modules/@mariozechner/pi-tui/src/test-utils/capability-env.ts +0 -56
  204. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs +0 -2211
  205. package/packages/tallow-tui/node_modules/marked/lib/marked.cjs.map +0 -7
  206. package/packages/tallow-tui/node_modules/marked/lib/marked.d.cts +0 -728
  207. 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":"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"}
@@ -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"}