dmux 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/dist/CleanTextInput.d.ts +9 -0
  2. package/dist/CleanTextInput.d.ts.map +1 -1
  3. package/dist/CleanTextInput.js +127 -47
  4. package/dist/CleanTextInput.js.map +1 -1
  5. package/dist/DmuxApp.d.ts +2 -2
  6. package/dist/DmuxApp.d.ts.map +1 -1
  7. package/dist/DmuxApp.js +1396 -750
  8. package/dist/DmuxApp.js.map +1 -1
  9. package/dist/actions/paneActions.d.ts.map +1 -1
  10. package/dist/actions/paneActions.js +68 -11
  11. package/dist/actions/paneActions.js.map +1 -1
  12. package/dist/actions/types.d.ts +1 -0
  13. package/dist/actions/types.d.ts.map +1 -1
  14. package/dist/actions/types.js +1 -0
  15. package/dist/actions/types.js.map +1 -1
  16. package/dist/components/ActionInputDialog.d.ts.map +1 -1
  17. package/dist/components/ActionInputDialog.js +3 -2
  18. package/dist/components/ActionInputDialog.js.map +1 -1
  19. package/dist/components/DialogBox.d.ts +16 -0
  20. package/dist/components/DialogBox.d.ts.map +1 -0
  21. package/dist/components/DialogBox.js +12 -0
  22. package/dist/components/DialogBox.js.map +1 -0
  23. package/dist/components/FooterHelp.d.ts +9 -0
  24. package/dist/components/FooterHelp.d.ts.map +1 -1
  25. package/dist/components/FooterHelp.js +41 -5
  26. package/dist/components/FooterHelp.js.map +1 -1
  27. package/dist/components/PaneCard.d.ts +3 -1
  28. package/dist/components/PaneCard.d.ts.map +1 -1
  29. package/dist/components/PaneCard.js +50 -33
  30. package/dist/components/PaneCard.js.map +1 -1
  31. package/dist/components/PanesGrid.d.ts +3 -5
  32. package/dist/components/PanesGrid.d.ts.map +1 -1
  33. package/dist/components/PanesGrid.js +40 -10
  34. package/dist/components/PanesGrid.js.map +1 -1
  35. package/dist/dashboard.js +1 -1
  36. package/dist/decorative-pane.d.ts +3 -0
  37. package/dist/decorative-pane.d.ts.map +1 -0
  38. package/dist/decorative-pane.js +136 -0
  39. package/dist/decorative-pane.js.map +1 -0
  40. package/dist/hooks/useActionSystem.d.ts +14 -1
  41. package/dist/hooks/useActionSystem.d.ts.map +1 -1
  42. package/dist/hooks/useActionSystem.js +93 -4
  43. package/dist/hooks/useActionSystem.js.map +1 -1
  44. package/dist/hooks/useNavigation.js +1 -1
  45. package/dist/hooks/useNavigation.js.map +1 -1
  46. package/dist/hooks/usePaneCreation.d.ts +1 -2
  47. package/dist/hooks/usePaneCreation.d.ts.map +1 -1
  48. package/dist/hooks/usePaneCreation.js +13 -27
  49. package/dist/hooks/usePaneCreation.js.map +1 -1
  50. package/dist/hooks/usePaneRunner.d.ts.map +1 -1
  51. package/dist/hooks/usePaneRunner.js +8 -3
  52. package/dist/hooks/usePaneRunner.js.map +1 -1
  53. package/dist/hooks/usePanes.d.ts.map +1 -1
  54. package/dist/hooks/usePanes.js +210 -37
  55. package/dist/hooks/usePanes.js.map +1 -1
  56. package/dist/hooks/useWorktreeActions.d.ts.map +1 -1
  57. package/dist/hooks/useWorktreeActions.js +7 -13
  58. package/dist/hooks/useWorktreeActions.js.map +1 -1
  59. package/dist/index.js +217 -29
  60. package/dist/index.js.map +1 -1
  61. package/dist/popups/agentChoicePopup.d.ts +7 -0
  62. package/dist/popups/agentChoicePopup.d.ts.map +1 -0
  63. package/dist/popups/agentChoicePopup.js +74 -0
  64. package/dist/popups/agentChoicePopup.js.map +1 -0
  65. package/dist/popups/choicePopup.d.ts +7 -0
  66. package/dist/popups/choicePopup.d.ts.map +1 -0
  67. package/dist/popups/choicePopup.js +64 -0
  68. package/dist/popups/choicePopup.js.map +1 -0
  69. package/dist/popups/components/FileList.d.ts +13 -0
  70. package/dist/popups/components/FileList.d.ts.map +1 -0
  71. package/dist/popups/components/FileList.js +61 -0
  72. package/dist/popups/components/FileList.js.map +1 -0
  73. package/dist/popups/components/PopupContainer.d.ts +14 -0
  74. package/dist/popups/components/PopupContainer.d.ts.map +1 -0
  75. package/dist/popups/components/PopupContainer.js +15 -0
  76. package/dist/popups/components/PopupContainer.js.map +1 -0
  77. package/dist/popups/components/PopupInputBox.d.ts +11 -0
  78. package/dist/popups/components/PopupInputBox.d.ts.map +1 -0
  79. package/dist/popups/components/PopupInputBox.js +10 -0
  80. package/dist/popups/components/PopupInputBox.js.map +1 -0
  81. package/dist/popups/components/PopupWrapper.d.ts +37 -0
  82. package/dist/popups/components/PopupWrapper.d.ts.map +1 -0
  83. package/dist/popups/components/PopupWrapper.js +88 -0
  84. package/dist/popups/components/PopupWrapper.js.map +1 -0
  85. package/dist/popups/components/index.d.ts +8 -0
  86. package/dist/popups/components/index.d.ts.map +1 -0
  87. package/dist/popups/components/index.js +8 -0
  88. package/dist/popups/components/index.js.map +1 -0
  89. package/dist/popups/config.d.ts +40 -0
  90. package/dist/popups/config.d.ts.map +1 -0
  91. package/dist/popups/config.js +40 -0
  92. package/dist/popups/config.js.map +1 -0
  93. package/dist/popups/confirmPopup.d.ts +7 -0
  94. package/dist/popups/confirmPopup.d.ts.map +1 -0
  95. package/dist/popups/confirmPopup.js +72 -0
  96. package/dist/popups/confirmPopup.js.map +1 -0
  97. package/dist/popups/hooksPopup.d.ts +7 -0
  98. package/dist/popups/hooksPopup.d.ts.map +1 -0
  99. package/dist/popups/hooksPopup.js +71 -0
  100. package/dist/popups/hooksPopup.js.map +1 -0
  101. package/dist/popups/inputPopup.d.ts +7 -0
  102. package/dist/popups/inputPopup.d.ts.map +1 -0
  103. package/dist/popups/inputPopup.js +48 -0
  104. package/dist/popups/inputPopup.js.map +1 -0
  105. package/dist/popups/kebabMenuPopup.d.ts +7 -0
  106. package/dist/popups/kebabMenuPopup.d.ts.map +1 -0
  107. package/dist/popups/kebabMenuPopup.js +52 -0
  108. package/dist/popups/kebabMenuPopup.js.map +1 -0
  109. package/dist/popups/logsPopup.d.ts +12 -0
  110. package/dist/popups/logsPopup.d.ts.map +1 -0
  111. package/dist/popups/logsPopup.js +364 -0
  112. package/dist/popups/logsPopup.js.map +1 -0
  113. package/dist/popups/mergePopup.d.ts +7 -0
  114. package/dist/popups/mergePopup.d.ts.map +1 -0
  115. package/dist/popups/mergePopup.js +310 -0
  116. package/dist/popups/mergePopup.js.map +1 -0
  117. package/dist/popups/newPanePopup.d.ts +7 -0
  118. package/dist/popups/newPanePopup.d.ts.map +1 -0
  119. package/dist/popups/newPanePopup.js +234 -0
  120. package/dist/popups/newPanePopup.js.map +1 -0
  121. package/dist/popups/progressPopup.d.ts +8 -0
  122. package/dist/popups/progressPopup.d.ts.map +1 -0
  123. package/dist/popups/progressPopup.js +54 -0
  124. package/dist/popups/progressPopup.js.map +1 -0
  125. package/dist/popups/remotePopup.d.ts +6 -0
  126. package/dist/popups/remotePopup.d.ts.map +1 -0
  127. package/dist/popups/remotePopup.js +166 -0
  128. package/dist/popups/remotePopup.js.map +1 -0
  129. package/dist/popups/settingsPopup.d.ts +7 -0
  130. package/dist/popups/settingsPopup.d.ts.map +1 -0
  131. package/dist/popups/settingsPopup.js +212 -0
  132. package/dist/popups/settingsPopup.js.map +1 -0
  133. package/dist/popups/shortcutsPopup.d.ts +6 -0
  134. package/dist/popups/shortcutsPopup.d.ts.map +1 -0
  135. package/dist/popups/shortcutsPopup.js +74 -0
  136. package/dist/popups/shortcutsPopup.js.map +1 -0
  137. package/dist/popups/templates/SimpleInputPopup.d.ts +15 -0
  138. package/dist/popups/templates/SimpleInputPopup.d.ts.map +1 -0
  139. package/dist/popups/templates/SimpleInputPopup.js +28 -0
  140. package/dist/popups/templates/SimpleInputPopup.js.map +1 -0
  141. package/dist/server/embedded-assets.d.ts.map +1 -1
  142. package/dist/server/embedded-assets.js +2066 -968
  143. package/dist/server/embedded-assets.js.map +1 -1
  144. package/dist/server/index.js +1 -1
  145. package/dist/server/index.js.map +1 -1
  146. package/dist/server/routes.d.ts +1 -1
  147. package/dist/server/routes.d.ts.map +1 -1
  148. package/dist/server/routes.js +73 -6
  149. package/dist/server/routes.js.map +1 -1
  150. package/dist/services/ConfigWatcher.d.ts.map +1 -1
  151. package/dist/services/ConfigWatcher.js +10 -3
  152. package/dist/services/ConfigWatcher.js.map +1 -1
  153. package/dist/services/LogService.d.ts +112 -0
  154. package/dist/services/LogService.d.ts.map +1 -0
  155. package/dist/services/LogService.js +252 -0
  156. package/dist/services/LogService.js.map +1 -0
  157. package/dist/services/PaneWorkerManager.d.ts.map +1 -1
  158. package/dist/services/PaneWorkerManager.js +35 -9
  159. package/dist/services/PaneWorkerManager.js.map +1 -1
  160. package/dist/services/TunnelService.d.ts +1 -0
  161. package/dist/services/TunnelService.d.ts.map +1 -1
  162. package/dist/services/TunnelService.js +56 -15
  163. package/dist/services/TunnelService.js.map +1 -1
  164. package/dist/shared/StateManager.d.ts +49 -1
  165. package/dist/shared/StateManager.d.ts.map +1 -1
  166. package/dist/shared/StateManager.js +97 -2
  167. package/dist/shared/StateManager.js.map +1 -1
  168. package/dist/spacer-pane.d.ts +8 -0
  169. package/dist/spacer-pane.d.ts.map +1 -0
  170. package/dist/spacer-pane.js +40 -0
  171. package/dist/spacer-pane.js.map +1 -0
  172. package/dist/theme/colors.d.ts +25 -0
  173. package/dist/theme/colors.d.ts.map +1 -0
  174. package/dist/theme/colors.js +33 -0
  175. package/dist/theme/colors.js.map +1 -0
  176. package/dist/types.d.ts +14 -0
  177. package/dist/types.d.ts.map +1 -1
  178. package/dist/utils/asciiArt.d.ts +26 -0
  179. package/dist/utils/asciiArt.d.ts.map +1 -0
  180. package/dist/utils/asciiArt.js +88 -0
  181. package/dist/utils/asciiArt.js.map +1 -0
  182. package/dist/utils/conflictResolutionPane.d.ts.map +1 -1
  183. package/dist/utils/conflictResolutionPane.js +8 -4
  184. package/dist/utils/conflictResolutionPane.js.map +1 -1
  185. package/dist/utils/fileScanner.d.ts +23 -0
  186. package/dist/utils/fileScanner.d.ts.map +1 -0
  187. package/dist/utils/fileScanner.js +123 -0
  188. package/dist/utils/fileScanner.js.map +1 -0
  189. package/dist/utils/generated-agents-doc.d.ts +1 -1
  190. package/dist/utils/generated-agents-doc.js +1 -1
  191. package/dist/utils/hooks.d.ts.map +1 -1
  192. package/dist/utils/hooks.js +65 -36
  193. package/dist/utils/hooks.js.map +1 -1
  194. package/dist/utils/hooksDocs.d.ts +1 -1
  195. package/dist/utils/layoutManager.d.ts +45 -0
  196. package/dist/utils/layoutManager.d.ts.map +1 -0
  197. package/dist/utils/layoutManager.js +500 -0
  198. package/dist/utils/layoutManager.js.map +1 -0
  199. package/dist/utils/paneCreation.d.ts.map +1 -1
  200. package/dist/utils/paneCreation.js +125 -11
  201. package/dist/utils/paneCreation.js.map +1 -1
  202. package/dist/utils/popup.d.ts +97 -0
  203. package/dist/utils/popup.d.ts.map +1 -0
  204. package/dist/utils/popup.js +509 -0
  205. package/dist/utils/popup.js.map +1 -0
  206. package/dist/utils/postPaneCleanup.d.ts +12 -0
  207. package/dist/utils/postPaneCleanup.d.ts.map +1 -0
  208. package/dist/utils/postPaneCleanup.js +53 -0
  209. package/dist/utils/postPaneCleanup.js.map +1 -0
  210. package/dist/utils/shellPaneDetection.d.ts +44 -0
  211. package/dist/utils/shellPaneDetection.d.ts.map +1 -0
  212. package/dist/utils/shellPaneDetection.js +175 -0
  213. package/dist/utils/shellPaneDetection.js.map +1 -0
  214. package/dist/utils/tmux.d.ts +53 -1
  215. package/dist/utils/tmux.d.ts.map +1 -1
  216. package/dist/utils/tmux.js +352 -84
  217. package/dist/utils/tmux.js.map +1 -1
  218. package/dist/utils/welcomePane.d.ts +22 -0
  219. package/dist/utils/welcomePane.d.ts.map +1 -0
  220. package/dist/utils/welcomePane.js +119 -0
  221. package/dist/utils/welcomePane.js.map +1 -0
  222. package/dist/utils/welcomePaneManager.d.ts +36 -0
  223. package/dist/utils/welcomePaneManager.d.ts.map +1 -0
  224. package/dist/utils/welcomePaneManager.js +160 -0
  225. package/dist/utils/welcomePaneManager.js.map +1 -0
  226. package/dist/workers/PaneWorker.js +2 -0
  227. package/dist/workers/PaneWorker.js.map +1 -1
  228. package/package.json +5 -2
  229. package/dist/components/NewPaneDialog.d.ts +0 -9
  230. package/dist/components/NewPaneDialog.d.ts.map +0 -1
  231. package/dist/components/NewPaneDialog.js +0 -11
  232. package/dist/components/NewPaneDialog.js.map +0 -1
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Shell Pane Detection Utility
3
+ *
4
+ * Detects manually-created tmux panes and determines their shell type.
5
+ */
6
+ import { execSync } from 'child_process';
7
+ import { LogService } from '../services/LogService.js';
8
+ /**
9
+ * Detects the shell type running in a tmux pane
10
+ * @param paneId The tmux pane ID (e.g., %1)
11
+ * @returns Shell type (bash, zsh, fish, etc) or 'shell' as fallback
12
+ */
13
+ export function detectShellType(paneId) {
14
+ try {
15
+ // Get the command running in the pane
16
+ const command = execSync(`tmux display-message -t '${paneId}' -p '#{pane_current_command}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
17
+ // Common shells
18
+ const knownShells = ['bash', 'zsh', 'fish', 'sh', 'ksh', 'tcsh', 'csh'];
19
+ // Check if it's a known shell
20
+ const lowerCommand = command.toLowerCase();
21
+ for (const shell of knownShells) {
22
+ if (lowerCommand === shell || lowerCommand.endsWith(`/${shell}`)) {
23
+ return shell;
24
+ }
25
+ }
26
+ // If running something else, still try to detect the parent shell
27
+ // This handles cases where a command is running in the shell
28
+ try {
29
+ const pid = execSync(`tmux display-message -t '${paneId}' -p '#{pane_pid}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
30
+ // Get parent process
31
+ const ppid = execSync(`ps -o ppid= -p ${pid}`, {
32
+ encoding: 'utf-8',
33
+ stdio: 'pipe'
34
+ }).trim();
35
+ if (ppid) {
36
+ const parentCommand = execSync(`ps -o comm= -p ${ppid}`, {
37
+ encoding: 'utf-8',
38
+ stdio: 'pipe'
39
+ }).trim();
40
+ const lowerParent = parentCommand.toLowerCase();
41
+ for (const shell of knownShells) {
42
+ if (lowerParent === shell || lowerParent.endsWith(`/${shell}`)) {
43
+ return shell;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // Ignore errors when trying to detect parent
50
+ }
51
+ // Fallback to generic 'shell'
52
+ return 'shell';
53
+ }
54
+ catch (error) {
55
+ LogService.getInstance().debug(`Failed to detect shell type for pane ${paneId}`, 'shellDetection');
56
+ return 'shell';
57
+ }
58
+ }
59
+ /**
60
+ * Gets all untracked tmux panes (panes not in dmux config)
61
+ * @param sessionName The tmux session name
62
+ * @param trackedPaneIds Array of pane IDs already tracked by dmux
63
+ * @param controlPaneId Optional control pane ID to exclude
64
+ * @param welcomePaneId Optional welcome pane ID to exclude
65
+ * @returns Array of untracked pane information
66
+ */
67
+ export function getUntrackedPanes(sessionName, trackedPaneIds, controlPaneId, welcomePaneId) {
68
+ try {
69
+ // Get all panes in the current session with ID, title, and current command
70
+ const output = execSync(`tmux list-panes -s -F '#{pane_id}::#{pane_title}::#{pane_current_command}'`, { encoding: 'utf-8', stdio: 'pipe' }).trim();
71
+ if (!output)
72
+ return [];
73
+ const untrackedPanes = [];
74
+ const lines = output.split('\n');
75
+ for (const line of lines) {
76
+ const [paneId, title, command] = line.split('::');
77
+ if (!paneId || !paneId.startsWith('%'))
78
+ continue;
79
+ // CRITICAL: Skip internal dmux panes by title
80
+ if (title === 'dmux-spacer') {
81
+ LogService.getInstance().debug(`Excluding spacer pane: ${paneId}`, 'shellDetection');
82
+ continue;
83
+ }
84
+ if (title && title.startsWith('dmux v')) {
85
+ LogService.getInstance().debug(`Excluding control pane by title: ${paneId} (${title})`, 'shellDetection');
86
+ continue;
87
+ }
88
+ if (title === 'Welcome') {
89
+ LogService.getInstance().debug(`Excluding welcome pane: ${paneId}`, 'shellDetection');
90
+ continue;
91
+ }
92
+ // CRITICAL: Skip control and welcome panes by ID (most reliable method)
93
+ if (controlPaneId && paneId === controlPaneId) {
94
+ LogService.getInstance().debug(`Excluding control pane by ID: ${paneId}`, 'shellDetection');
95
+ continue;
96
+ }
97
+ if (welcomePaneId && paneId === welcomePaneId) {
98
+ LogService.getInstance().debug(`Excluding welcome pane by ID: ${paneId}`, 'shellDetection');
99
+ continue;
100
+ }
101
+ // CRITICAL: Skip panes running dmux itself (node process running dmux)
102
+ if (command && (command === 'node' || command.includes('dmux'))) {
103
+ LogService.getInstance().debug(`Excluding dmux process pane: ${paneId} (command: ${command})`, 'shellDetection');
104
+ continue;
105
+ }
106
+ // Skip already tracked panes
107
+ if (trackedPaneIds.includes(paneId))
108
+ continue;
109
+ LogService.getInstance().debug(`Found untracked pane: ${paneId} (title: ${title}, command: ${command})`, 'shellDetection');
110
+ untrackedPanes.push({ paneId, title: title || '', command: command || '' });
111
+ }
112
+ return untrackedPanes;
113
+ }
114
+ catch (error) {
115
+ LogService.getInstance().debug('Failed to get untracked panes', 'shellDetection');
116
+ return [];
117
+ }
118
+ }
119
+ /**
120
+ * Creates a DmuxPane object for a shell pane
121
+ * @param paneId The tmux pane ID
122
+ * @param nextId The next available dmux ID number
123
+ * @param existingTitle Optional existing title to preserve
124
+ * @returns DmuxPane object for the shell pane
125
+ */
126
+ export function createShellPane(paneId, nextId, existingTitle) {
127
+ const shellType = detectShellType(paneId);
128
+ // Use existing title if available and it's not a dmux internal title
129
+ // Otherwise generate shell-N naming
130
+ let slug;
131
+ if (existingTitle &&
132
+ existingTitle !== 'dmux-spacer' &&
133
+ !existingTitle.startsWith('dmux v') &&
134
+ existingTitle !== 'Welcome') {
135
+ slug = existingTitle;
136
+ }
137
+ else {
138
+ slug = `shell-${nextId}`;
139
+ // Only set the title if we're generating a new one
140
+ try {
141
+ execSync(`tmux select-pane -t '${paneId}' -T "${slug}"`, { stdio: 'pipe' });
142
+ }
143
+ catch (error) {
144
+ LogService.getInstance().debug(`Failed to set title for shell pane ${paneId}`, 'shellDetection');
145
+ }
146
+ }
147
+ return {
148
+ id: `dmux-${nextId}`,
149
+ slug,
150
+ prompt: '', // No prompt for manually created panes
151
+ paneId,
152
+ type: 'shell',
153
+ shellType,
154
+ };
155
+ }
156
+ /**
157
+ * Gets the next available dmux ID number
158
+ * @param existingPanes Array of existing panes
159
+ * @returns Next available ID number
160
+ */
161
+ export function getNextDmuxId(existingPanes) {
162
+ if (existingPanes.length === 0)
163
+ return 1;
164
+ // Extract numeric IDs from all panes
165
+ const ids = existingPanes
166
+ .map(p => {
167
+ const match = p.id.match(/^dmux-(\d+)$/);
168
+ return match ? parseInt(match[1], 10) : 0;
169
+ })
170
+ .filter(id => id > 0);
171
+ if (ids.length === 0)
172
+ return 1;
173
+ return Math.max(...ids) + 1;
174
+ }
175
+ //# sourceMappingURL=shellPaneDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shellPaneDetection.js","sourceRoot":"","sources":["../../src/utils/shellPaneDetection.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,56 @@
1
1
  import type { PanePosition } from '../types.js';
2
+ export declare const SIDEBAR_WIDTH = 40;
3
+ export declare const MIN_COMFORTABLE_WIDTH = 60;
4
+ export declare const MAX_COMFORTABLE_WIDTH = 100;
5
+ export declare const MIN_COMFORTABLE_HEIGHT = 15;
6
+ export interface WindowDimensions {
7
+ width: number;
8
+ height: number;
9
+ }
10
+ /**
11
+ * Gets current window dimensions
12
+ */
13
+ export declare const getWindowDimensions: () => WindowDimensions;
14
+ /**
15
+ * Gets current terminal (client) dimensions
16
+ * This is the actual terminal size, not the tmux window size
17
+ */
18
+ export declare const getTerminalDimensions: () => WindowDimensions;
2
19
  export declare const getPanePositions: () => PanePosition[];
3
- export declare const applySmartLayout: (paneCount: number) => void;
20
+ /**
21
+ * Gets all pane IDs in current window
22
+ */
23
+ export declare const getAllPaneIds: () => string[];
24
+ /**
25
+ * Gets content pane IDs (excludes control pane and spacer pane)
26
+ */
27
+ export declare const getContentPaneIds: (controlPaneId: string) => string[];
28
+ /**
29
+ * Creates initial sidebar layout by splitting from control pane
30
+ * @param controlPaneId The pane ID running dmux TUI (left sidebar)
31
+ * @returns The newly created content area pane ID
32
+ */
33
+ export declare const setupSidebarLayout: (controlPaneId: string) => string;
34
+ /**
35
+ * Generates a custom tmux layout string for [Sidebar | Grid] arrangement
36
+ * Format: checksum,WxH,X,Y{child1,child2,...}
37
+ * Each child: WxH,X,Y[pane_id] for leaf or WxH,X,Y{...} for container
38
+ */
39
+ export declare const generateSidebarGridLayout: (controlPaneId: string, contentPanes: string[], sidebarWidth: number, windowWidth: number, windowHeight: number, columns: number, maxComfortableWidth?: number) => string;
40
+ /**
41
+ * Calculates optimal number of columns for pane layout based on dimensions
42
+ * @param numPanes Number of panes to arrange
43
+ * @param contentWidth Available width for content panes
44
+ * @param contentHeight Available height for content panes
45
+ * @returns Optimal number of columns
46
+ */
47
+ export declare const calculateOptimalColumns: (numPanes: number, contentWidth: number, contentHeight: number) => number;
48
+ /**
49
+ * Enforces left sidebar layout: 40-char wide sidebar on left, content panes in grid on right
50
+ * This maintains the structure: [Sidebar (40 chars, full height) | Content Grid Area]
51
+ *
52
+ * @deprecated This function now delegates to the centralized layout manager.
53
+ * Consider using recalculateAndApplyLayout() directly from layoutManager.ts
54
+ */
55
+ export declare const enforceControlPaneSize: (controlPaneId: string, width: number) => void;
4
56
  //# sourceMappingURL=tmux.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/utils/tmux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,gBAAgB,QAAO,YAAY,EAoB/C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,WAAW,MAAM,SAmBjD,CAAC"}
1
+ {"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/utils/tmux.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAKhD,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAmBzC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAO,gBAYtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAO,gBAYxC,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,YAAY,EAoB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,EAWtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,eAAe,MAAM,KAAG,MAAM,EAgB/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,MAAM,KAAG,MAqB1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,eAAe,MAAM,EACrB,cAAc,MAAM,EAAE,EACtB,cAAc,MAAM,EACpB,aAAa,MAAM,EACnB,cAAc,MAAM,EACpB,SAAS,MAAM,EACf,sBAAqB,MAA8B,KAClD,MA4LF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,UAAU,MAAM,EAChB,cAAc,MAAM,EACpB,eAAe,MAAM,KACpB,MA+CF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,eAAe,MAAM,EACrB,OAAO,MAAM,KACZ,IAiEF,CAAC"}