tabby-tabbyspaces 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/.claude/settings.local.json +28 -2
  2. package/CHANGELOG.md +46 -20
  3. package/CLAUDE.md +163 -15
  4. package/README.md +71 -61
  5. package/RELEASE.md +91 -0
  6. package/TEST_MCP.md +176 -0
  7. package/TODO.md +72 -0
  8. package/cdp-click.js +22 -0
  9. package/cdp-test.js +28 -0
  10. package/dist/components/paneEditor.component.d.ts +6 -1
  11. package/dist/components/paneEditor.component.d.ts.map +1 -1
  12. package/dist/components/splitPreview.component.d.ts +22 -7
  13. package/dist/components/splitPreview.component.d.ts.map +1 -1
  14. package/dist/components/workspaceEditor.component.d.ts +30 -4
  15. package/dist/components/workspaceEditor.component.d.ts.map +1 -1
  16. package/dist/components/workspaceList.component.d.ts +21 -9
  17. package/dist/components/workspaceList.component.d.ts.map +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.LICENSE.txt +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/models/workspace.model.d.ts +4 -2
  23. package/dist/models/workspace.model.d.ts.map +1 -1
  24. package/dist/package.json +26 -0
  25. package/dist/providers/settings.provider.d.ts.map +1 -1
  26. package/dist/providers/toolbar.provider.d.ts +4 -1
  27. package/dist/providers/toolbar.provider.d.ts.map +1 -1
  28. package/dist/services/startupCommand.service.d.ts +20 -0
  29. package/dist/services/startupCommand.service.d.ts.map +1 -0
  30. package/dist/services/workspaceEditor.service.d.ts +11 -3
  31. package/dist/services/workspaceEditor.service.d.ts.map +1 -1
  32. package/docs/marketing_status.md +92 -0
  33. package/package.json +2 -7
  34. package/screenshots/editor.png +0 -0
  35. package/screenshots/pane-edit.png +0 -0
  36. package/scripts/build-prod.js +39 -0
  37. package/src/components/paneEditor.component.pug +2 -2
  38. package/src/components/paneEditor.component.ts +19 -1
  39. package/src/components/splitPreview.component.pug +45 -5
  40. package/src/components/splitPreview.component.scss +79 -22
  41. package/src/components/splitPreview.component.ts +91 -16
  42. package/src/components/workspaceEditor.component.pug +130 -70
  43. package/src/components/workspaceEditor.component.scss +205 -120
  44. package/src/components/workspaceEditor.component.ts +193 -6
  45. package/src/components/workspaceList.component.pug +31 -20
  46. package/src/components/workspaceList.component.scss +12 -6
  47. package/src/components/workspaceList.component.ts +116 -34
  48. package/src/index.ts +2 -0
  49. package/src/models/workspace.model.ts +33 -6
  50. package/src/providers/settings.provider.ts +2 -2
  51. package/src/providers/toolbar.provider.ts +41 -10
  52. package/src/services/startupCommand.service.ts +142 -0
  53. package/src/services/workspaceEditor.service.ts +70 -38
  54. package/test_cdp.py +50 -0
  55. package/RELEASE_PLAN.md +0 -161
  56. package/screenshots/workspace-edit.png +0 -0
package/TEST_MCP.md ADDED
@@ -0,0 +1,176 @@
1
+ # MCP Testiranje TabbySpaces
2
+
3
+ Uputstvo za Claude da testira plugin kroz tabby-mcp.
4
+
5
+ ## Pre-requisites
6
+
7
+ 1. Build plugin: `npm run build:dev`
8
+ 2. Pokreni NOVI Tabby instance sa debug portom:
9
+ ```bash
10
+ cmd.exe /c start "" "C:\Program Files (x86)\Tabby\Tabby.exe" --remote-debugging-port=9222
11
+ ```
12
+
13
+ ## Test 1: Proveri da nema orphaned profila
14
+
15
+ ```javascript
16
+ // Očekivano: Nema split-layout:tabbyspaces_dev: profila u config
17
+ mcp__tabby__execute_js(target: -1, code: `
18
+ const profiles = window.require('tabby-core').ConfigService.store.profiles || []
19
+ const orphaned = profiles.filter(p => p.id?.startsWith('split-layout:tabbyspaces'))
20
+ JSON.stringify({ total: profiles.length, orphaned: orphaned.length, ids: orphaned.map(p => p.id) })
21
+ `)
22
+ ```
23
+
24
+ **Očekivan rezultat:** `orphaned: 0`
25
+
26
+ ## Test 2: Otvori Settings i proveri plugin
27
+
28
+ ```javascript
29
+ // Klikni na Settings
30
+ mcp__tabby__execute_js(target: -1, code: `
31
+ document.querySelector('[title="Settings"]')?.click()
32
+ 'Settings opened'
33
+ `)
34
+
35
+ // Sačekaj 500ms, pa klikni na TabbySpaces DEV tab
36
+ mcp__tabby__execute_js(target: -1, code: `
37
+ const tabs = Array.from(document.querySelectorAll('.nav-link'))
38
+ const devTab = tabs.find(t => t.textContent.includes('TabbySpaces DEV'))
39
+ devTab?.click()
40
+ devTab ? 'TabbySpaces DEV tab clicked' : 'Tab not found'
41
+ `)
42
+ ```
43
+
44
+ ## Test 3: Kreiraj test workspace
45
+
46
+ ```javascript
47
+ // Klikni New Workspace
48
+ mcp__tabby__execute_js(target: -1, code: `
49
+ const btn = Array.from(document.querySelectorAll('button')).find(b => b.textContent.includes('New Workspace'))
50
+ btn?.click()
51
+ btn ? 'New Workspace clicked' : 'Button not found'
52
+ `)
53
+
54
+ // Unesi ime
55
+ mcp__tabby__execute_js(target: -1, code: `
56
+ const input = document.querySelector('.name-input')
57
+ if (input) {
58
+ input.value = 'MCP Test Workspace'
59
+ input.dispatchEvent(new Event('input', { bubbles: true }))
60
+ 'Name set'
61
+ } else 'Input not found'
62
+ `)
63
+
64
+ // Sačuvaj
65
+ mcp__tabby__execute_js(target: -1, code: `
66
+ const saveBtn = Array.from(document.querySelectorAll('button')).find(b => b.textContent.includes('Save'))
67
+ saveBtn?.click()
68
+ saveBtn ? 'Saved' : 'Save button not found'
69
+ `)
70
+ ```
71
+
72
+ ## Test 4: Proveri da NIJE kreiran profil u config.store.profiles
73
+
74
+ ```javascript
75
+ mcp__tabby__execute_js(target: -1, code: `
76
+ const profiles = window.require('tabby-core').ConfigService.store.profiles || []
77
+ const wsProfiles = profiles.filter(p => p.id?.includes('mcp-test-workspace'))
78
+ JSON.stringify({ found: wsProfiles.length, message: wsProfiles.length === 0 ? 'PASS - No profile created' : 'FAIL - Profile was created' })
79
+ `)
80
+ ```
81
+
82
+ **Očekivan rezultat:** `found: 0, message: "PASS - No profile created"`
83
+
84
+ ## Test 5: Testiraj CWD injection (Shell Detection)
85
+
86
+ ```javascript
87
+ // Testiraj shell detection funkciju
88
+ mcp__tabby__execute_js(target: -1, code: `
89
+ // Simuliraj shell detection
90
+ function detectShellType(command) {
91
+ const cmd = command.toLowerCase()
92
+ if (cmd.includes('nu.exe') || cmd.includes('nushell') || cmd.endsWith('/nu')) return 'nushell'
93
+ if (cmd.includes('powershell') || cmd.includes('pwsh')) return 'powershell'
94
+ if (cmd.includes('cmd.exe') || cmd.endsWith('\\\\cmd')) return 'cmd'
95
+ if (cmd.includes('bash') || cmd.includes('zsh') || cmd.includes('fish') || cmd.includes('/sh')) return 'posix'
96
+ return 'unknown'
97
+ }
98
+
99
+ const tests = [
100
+ { cmd: 'C:\\\\Programs\\\\nu\\\\bin\\\\nu.exe', expected: 'nushell' },
101
+ { cmd: 'C:\\\\Windows\\\\System32\\\\WindowsPowerShell\\\\v1.0\\\\powershell.exe', expected: 'powershell' },
102
+ { cmd: 'pwsh.exe', expected: 'powershell' },
103
+ { cmd: 'C:\\\\Windows\\\\System32\\\\cmd.exe', expected: 'cmd' },
104
+ { cmd: '/usr/bin/bash', expected: 'posix' },
105
+ { cmd: '/bin/zsh', expected: 'posix' },
106
+ ]
107
+
108
+ const results = tests.map(t => ({
109
+ cmd: t.cmd,
110
+ expected: t.expected,
111
+ actual: detectShellType(t.cmd),
112
+ pass: detectShellType(t.cmd) === t.expected
113
+ }))
114
+
115
+ JSON.stringify({ passed: results.filter(r => r.pass).length, total: results.length, results }, null, 2)
116
+ `)
117
+ ```
118
+
119
+ **Očekivan rezultat:** `passed: 6, total: 6`
120
+
121
+ ## Test 6: Otvori workspace iz toolbar-a
122
+
123
+ ```javascript
124
+ // Klikni na TabbySpaces toolbar button (4 squares icon)
125
+ mcp__tabby__execute_js(target: -1, code: `
126
+ const toolbarBtns = document.querySelectorAll('toolbar-button')
127
+ const wsBtn = Array.from(toolbarBtns).find(b => b.querySelector('svg rect'))
128
+ wsBtn?.click()
129
+ wsBtn ? 'Toolbar button clicked' : 'Button not found'
130
+ `)
131
+
132
+ // Selektuj workspace iz liste
133
+ mcp__tabby__execute_js(target: -1, code: `
134
+ const options = document.querySelectorAll('.selector-option')
135
+ const testWs = Array.from(options).find(o => o.textContent.includes('MCP Test'))
136
+ testWs?.click()
137
+ testWs ? 'Workspace selected' : 'Workspace not found in selector'
138
+ `)
139
+ ```
140
+
141
+ ## Test 7: Proveri otvorene tabove
142
+
143
+ ```javascript
144
+ mcp__tabby__execute_js(target: -1, code: `
145
+ const tabs = document.querySelectorAll('.tab')
146
+ const tabInfo = Array.from(tabs).map(t => ({
147
+ title: t.querySelector('.tab-title')?.textContent || 'unknown',
148
+ active: t.classList.contains('active')
149
+ }))
150
+ JSON.stringify(tabInfo)
151
+ `)
152
+ ```
153
+
154
+ ## Cleanup
155
+
156
+ ```javascript
157
+ // Zatvori test tab
158
+ mcp__tabby__execute_js(target: -1, code: `
159
+ const closeBtn = document.querySelector('.tab.active .btn-close')
160
+ closeBtn?.click()
161
+ 'Tab closed'
162
+ `)
163
+ ```
164
+
165
+ ## Quick Full Test Sequence
166
+
167
+ ```
168
+ 1. mcp__tabby__list_targets (uzmi poslednji target)
169
+ 2. Test 1: Proveri orphaned profile
170
+ 3. Test 5: Shell detection
171
+ 4. Test 2: Otvori settings
172
+ 5. Test 3: Kreiraj workspace
173
+ 6. Test 4: Proveri da nema profila
174
+ 7. Test 6: Otvori workspace
175
+ 8. Test 7: Proveri tabove
176
+ ```
package/TODO.md ADDED
@@ -0,0 +1,72 @@
1
+ # TODO
2
+
3
+ > **Note:** Please write all entries in English.
4
+
5
+ ## To Do
6
+
7
+ ### Layout Editing
8
+ - [ ] Polish design
9
+ - [ ] Find better way to display nested panes in editor
10
+
11
+ ### UX Improvements
12
+ - [ ] Split/Add pane: duplicate existing pane instead of creating empty one
13
+ - [ ] List: add small layout preview
14
+ - [ ] Better input for command
15
+ - [ ] Better input for cwd
16
+
17
+ ### Bugs
18
+ - [~] Resize panes in Tabby reverts to original values (ratio problem) - WATCH: happens only on one workspace
19
+ - [ ] Layout preview responsive - nested splits don't adapt well to smaller sizes
20
+
21
+ ### Other
22
+ - [ ] Update screenshots in README
23
+
24
+ ## Roadmap
25
+
26
+ - [ ] Pane presets (saved pane configurations for quick adding)
27
+ - [ ] Resize panes (adjust ratios in editor)
28
+ - [ ] Drag and drop panes (reorganize layout by dragging)
29
+
30
+ ---
31
+
32
+ ## Done
33
+
34
+ ### Layout Editing
35
+ - [x] Remove two layout vert/hor buttons from toolbar (and horizontal/vertical text from list)
36
+ - [x] Enable selection in toolbar, add button for edit pane (not on click)
37
+ - [x] When item selected in toolbar - show options similar to context menu
38
+ - [x] Context menu for pane: add to left/right/top/bottom alongside split options + edit pane
39
+ - [x] Instead of "click to edit" - edit icon in pane corner
40
+ - [x] Title bug - better handling
41
+ - [x] Edit icon on pane: show on hover instead of on selection
42
+
43
+ ### UX Improvements
44
+ - [x] Pane title format: `(Title - )? Base Profile` (show base profile if no custom title)
45
+ - [x] Move run button to workspace list
46
+ - [x] Launch on startup: switch from single workspace option to multi-select (multiple workspaces can be marked)
47
+ - [x] Not-saved / "you have changes" indicator (compare state after change with saved)
48
+ - [x] New workspace: focus on name input, no default value, placeholder "Name your workspace"
49
+ - [x] Save button: disabled when no changes, enabled when there are (replacement for indicator)
50
+ - [x] Duplicate: select new workspace after duplicating
51
+ - [x] Open/Run/Duplicate/Delete buttons select workspace - add stopPropagation
52
+ - [x] Rename "Run" to "Open" with appropriate icon
53
+
54
+ ### Other
55
+ - [x] Different icon for DEV version (easier distinction in Settings)
56
+ - [x] Open workspace from workspace editor
57
+ - [x] Move workspace edit dialog inline above workspace list (always one selected)
58
+ - [x] Icon picker as dropdown next to color picker (similar UI)
59
+ - [x] Randomize color and icon on new workspace + focus on name input
60
+ - [x] Refactoring: Remove profile persistence, shell-aware CWD, dead code cleanup
61
+
62
+ ### Bugs
63
+ - [x] Audit async functions - check if `detectChanges()` is missing after async operations that change state
64
+ - [x] Split pane runs command (in-memory profiles) - fix: clear profile.options.args after command execution
65
+ - [x] Pane editor modal bug - mouseup outside dialog closes modal. Dialog should close only on Esc or close/cancel/save button
66
+ - [x] Migration and profile deletion not working (fix: timing - cleanup was called before config.store loaded)
67
+ - [x] New workspace: focus on name input not working
68
+ - [x] Built-in shells (PowerShell, cmd, WSL) weren't working - filter looked for `type === 'local'` instead of `type.startsWith('local:')`
69
+ - [x] Fallback for built-in profile lookup (cache all profiles before opening workspace)
70
+
71
+ ### Notes
72
+ - **CWD**: Uses native `options.cwd` in recovery token - shell spawns directly in target directory without visible `cd` commands.
package/cdp-click.js ADDED
@@ -0,0 +1,22 @@
1
+ const CDP = require('chrome-remote-interface');
2
+
3
+ (async () => {
4
+ const client = await CDP({port: 9222});
5
+ const {Runtime, DOM, Input} = client;
6
+
7
+ // Click on "TabbySpaces DEV" link
8
+ const result = await Runtime.evaluate({
9
+ expression: `
10
+ const link = Array.from(document.querySelectorAll('a')).find(a => a.innerText.includes('TabbySpaces DEV'));
11
+ if (link) {
12
+ link.click();
13
+ 'Clicked TabbySpaces DEV';
14
+ } else {
15
+ 'TabbySpaces DEV link not found';
16
+ }
17
+ `
18
+ });
19
+ console.log('Result:', result.result.value);
20
+
21
+ await client.close();
22
+ })().catch(e => console.error('Error:', e.message));
package/cdp-test.js ADDED
@@ -0,0 +1,28 @@
1
+ const CDP = require('chrome-remote-interface');
2
+
3
+ (async () => {
4
+ const client = await CDP({port: 9222});
5
+ const {Runtime, DOM} = client;
6
+
7
+ // Get page title
8
+ const title = await Runtime.evaluate({expression: 'document.title'});
9
+ console.log('Title:', title.result.value);
10
+
11
+ // Get all clickable elements
12
+ const clickables = await Runtime.evaluate({
13
+ expression: `
14
+ Array.from(document.querySelectorAll('button, [role=button], .btn, a, [ng-click]'))
15
+ .map(el => ({
16
+ tag: el.tagName,
17
+ text: (el.innerText || el.textContent || '').trim().substring(0, 50),
18
+ class: (el.className || '').substring(0, 50)
19
+ }))
20
+ .slice(0, 30)
21
+ `,
22
+ returnByValue: true
23
+ });
24
+ console.log('Clickable elements:');
25
+ console.log(JSON.stringify(clickables.result.value, null, 2));
26
+
27
+ await client.close();
28
+ })().catch(e => console.error('Error:', e.message));
@@ -1,12 +1,17 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
1
+ import { EventEmitter, OnInit, ElementRef } from '@angular/core';
2
2
  import { WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
3
  export declare class PaneEditorComponent implements OnInit {
4
4
  pane: WorkspacePane;
5
5
  profiles: TabbyProfile[];
6
6
  save: EventEmitter<WorkspacePane>;
7
7
  cancel: EventEmitter<void>;
8
+ modalRef: ElementRef<HTMLElement>;
8
9
  editedPane: WorkspacePane;
10
+ private pointerDownInsideModal;
9
11
  ngOnInit(): void;
12
+ onEscapeKey(): void;
13
+ onDocumentPointerDown(event: PointerEvent): void;
14
+ onOverlayClick(event: MouseEvent): void;
10
15
  onSave(): void;
11
16
  onCancel(): void;
12
17
  getProfileName(profileId: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"paneEditor.component.d.ts","sourceRoot":"","sources":["../../src/components/paneEditor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAEvE,qBAKa,mBAAoB,YAAW,MAAM;IACvC,IAAI,EAAG,aAAa,CAAA;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC5B,IAAI,8BAAoC;IACxC,MAAM,qBAA2B;IAE3C,UAAU,EAAG,aAAa,CAAA;IAE1B,QAAQ,IAAI,IAAI;IAIhB,MAAM,IAAI,IAAI;IAId,QAAQ,IAAI,IAAI;IAIhB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAI1C"}
1
+ {"version":3,"file":"paneEditor.component.d.ts","sourceRoot":"","sources":["../../src/components/paneEditor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAgB,UAAU,EAAa,MAAM,eAAe,CAAA;AACnH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAEvE,qBAKa,mBAAoB,YAAW,MAAM;IACvC,IAAI,EAAG,aAAa,CAAA;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC5B,IAAI,8BAAoC;IACxC,MAAM,qBAA2B;IACL,QAAQ,EAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IAExE,UAAU,EAAG,aAAa,CAAA;IAC1B,OAAO,CAAC,sBAAsB,CAAQ;IAEtC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAIhD,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMvC,MAAM,IAAI,IAAI;IAId,QAAQ,IAAI,IAAI;IAIhB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAI1C"}
@@ -1,36 +1,51 @@
1
1
  import { EventEmitter } from '@angular/core';
2
- import { WorkspaceSplit, WorkspacePane } from '../models/workspace.model';
3
- import { WorkspaceEditorService } from '../services/workspaceEditor.service';
2
+ import { WorkspaceSplit, WorkspacePane, TabbyProfile } from '../models/workspace.model';
4
3
  export declare class SplitPreviewComponent {
5
- private workspaceService;
6
4
  split: WorkspaceSplit;
7
5
  depth: number;
8
- paneClick: EventEmitter<WorkspacePane>;
6
+ selectedPaneId: string | null;
7
+ profiles: TabbyProfile[];
8
+ paneSelect: EventEmitter<WorkspacePane>;
9
+ paneEdit: EventEmitter<WorkspacePane>;
9
10
  splitHorizontal: EventEmitter<WorkspacePane>;
10
11
  splitVertical: EventEmitter<WorkspacePane>;
11
12
  removePane: EventEmitter<WorkspacePane>;
13
+ addLeft: EventEmitter<WorkspacePane>;
14
+ addRight: EventEmitter<WorkspacePane>;
15
+ addTop: EventEmitter<WorkspacePane>;
16
+ addBottom: EventEmitter<WorkspacePane>;
12
17
  contextMenuPane: WorkspacePane | null;
13
18
  contextMenuPosition: {
14
19
  x: number;
15
20
  y: number;
16
21
  };
17
- constructor(workspaceService: WorkspaceEditorService);
18
22
  isPane(child: WorkspacePane | WorkspaceSplit): boolean;
19
23
  isSplit(child: WorkspacePane | WorkspaceSplit): boolean;
20
24
  asSplit(child: WorkspacePane | WorkspaceSplit): WorkspaceSplit;
21
25
  asPane(child: WorkspacePane | WorkspaceSplit): WorkspacePane;
22
26
  getFlexStyle(index: number): string;
23
27
  onPaneClick(pane: WorkspacePane): void;
28
+ onEditClick(event: MouseEvent, pane: WorkspacePane): void;
29
+ truncate(text: string, maxLength: number): string;
24
30
  onContextMenu(event: MouseEvent, pane: WorkspacePane): void;
25
31
  closeContextMenu(): void;
32
+ onEdit(): void;
26
33
  onSplitH(): void;
27
34
  onSplitV(): void;
35
+ onAddLeft(): void;
36
+ onAddRight(): void;
37
+ onAddTop(): void;
38
+ onAddBottom(): void;
28
39
  onRemove(): void;
29
- getProfileName(profileId: string): string;
30
40
  getPaneLabel(pane: WorkspacePane): string;
31
- onNestedPaneClick(pane: WorkspacePane): void;
41
+ onNestedPaneSelect(pane: WorkspacePane): void;
42
+ onNestedPaneEdit(pane: WorkspacePane): void;
32
43
  onNestedSplitH(pane: WorkspacePane): void;
33
44
  onNestedSplitV(pane: WorkspacePane): void;
45
+ onNestedAddLeft(pane: WorkspacePane): void;
46
+ onNestedAddRight(pane: WorkspacePane): void;
47
+ onNestedAddTop(pane: WorkspacePane): void;
48
+ onNestedAddBottom(pane: WorkspacePane): void;
34
49
  onNestedRemove(pane: WorkspacePane): void;
35
50
  }
36
51
  //# sourceMappingURL=splitPreview.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"splitPreview.component.d.ts","sourceRoot":"","sources":["../../src/components/splitPreview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,EACL,cAAc,EACd,aAAa,EAEd,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,qBAKa,qBAAqB;IAWpB,OAAO,CAAC,gBAAgB;IAV3B,KAAK,EAAG,cAAc,CAAA;IACtB,KAAK,SAAI;IACR,SAAS,8BAAoC;IAC7C,eAAe,8BAAoC;IACnD,aAAa,8BAAoC;IACjD,UAAU,8BAAoC;IAExD,eAAe,EAAE,aAAa,GAAG,IAAI,CAAO;IAC5C,mBAAmB;;;MAAiB;gBAEhB,gBAAgB,EAAE,sBAAsB;IAE5D,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO;IAItD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO;IAIvD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,cAAc;IAI9D,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,aAAa;IAI5D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAItC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAM3D,gBAAgB,IAAI,IAAI;IAIxB,QAAQ,IAAI,IAAI;IAOhB,QAAQ,IAAI,IAAI;IAOhB,QAAQ,IAAI,IAAI;IAOhB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIzC,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAUzC,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI5C,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIzC,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIzC,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;CAG1C"}
1
+ {"version":3,"file":"splitPreview.component.d.ts","sourceRoot":"","sources":["../../src/components/splitPreview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EAEb,MAAM,2BAA2B,CAAA;AAElC,qBAKa,qBAAqB;IACvB,KAAK,EAAG,cAAc,CAAA;IACtB,KAAK,SAAI;IACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAO;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC5B,UAAU,8BAAoC;IAC9C,QAAQ,8BAAoC;IAC5C,eAAe,8BAAoC;IACnD,aAAa,8BAAoC;IACjD,UAAU,8BAAoC;IAC9C,OAAO,8BAAoC;IAC3C,QAAQ,8BAAoC;IAC5C,MAAM,8BAAoC;IAC1C,SAAS,8BAAoC;IAEvD,eAAe,EAAE,aAAa,GAAG,IAAI,CAAO;IAC5C,mBAAmB;;;MAAiB;IAEpC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO;IAItD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,OAAO;IAIvD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,cAAc;IAI9D,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,aAAa;IAI5D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInC,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAItC,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAKzD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAMjD,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI;IAM3D,gBAAgB,IAAI,IAAI;IAIxB,MAAM,IAAI,IAAI;IAOd,QAAQ,IAAI,IAAI;IAOhB,QAAQ,IAAI,IAAI;IAOhB,SAAS,IAAI,IAAI;IAOjB,UAAU,IAAI,IAAI;IAOlB,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAOnB,QAAQ,IAAI,IAAI;IAOhB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAkBzC,kBAAkB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI7C,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI3C,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIzC,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIzC,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI1C,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI3C,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIzC,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAI5C,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;CAG1C"}
@@ -1,29 +1,55 @@
1
- import { EventEmitter, OnInit } from '@angular/core';
1
+ import { EventEmitter, OnInit, OnChanges, AfterViewInit, SimpleChanges, ElementRef } from '@angular/core';
2
2
  import { Workspace, WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
3
  import { WorkspaceEditorService } from '../services/workspaceEditor.service';
4
- export declare class WorkspaceEditorComponent implements OnInit {
4
+ export declare class WorkspaceEditorComponent implements OnInit, OnChanges, AfterViewInit {
5
5
  private workspaceService;
6
+ private elementRef;
6
7
  workspace: Workspace;
8
+ autoFocus: boolean;
9
+ hasUnsavedChanges: boolean;
7
10
  save: EventEmitter<Workspace>;
8
11
  cancel: EventEmitter<void>;
9
- selectedPane: WorkspacePane | null;
12
+ nameInput: ElementRef<HTMLInputElement>;
13
+ selectedPaneId: string | null;
14
+ editingPane: WorkspacePane | null;
10
15
  showPaneEditor: boolean;
11
16
  profiles: TabbyProfile[];
12
17
  availableIcons: string[];
13
- constructor(workspaceService: WorkspaceEditorService);
18
+ iconDropdownOpen: boolean;
19
+ constructor(workspaceService: WorkspaceEditorService, elementRef: ElementRef);
20
+ onDocumentClick(event: MouseEvent): void;
21
+ toggleIconDropdown(): void;
22
+ selectIcon(icon: string): void;
14
23
  ngOnInit(): Promise<void>;
24
+ ngAfterViewInit(): void;
25
+ private focusNameInput;
26
+ ngOnChanges(changes: SimpleChanges): void;
27
+ private initializeWorkspace;
15
28
  onSave(): void;
16
29
  onCancel(): void;
17
30
  selectPane(pane: WorkspacePane): void;
31
+ deselectPane(): void;
32
+ onPreviewBackgroundClick(): void;
33
+ editPane(pane: WorkspacePane): void;
34
+ editSelectedPane(): void;
18
35
  closePaneEditor(): void;
19
36
  onPaneSave(pane: WorkspacePane): void;
37
+ private findPaneById;
38
+ private findPaneInNode;
39
+ canRemovePane(): boolean;
40
+ private countPanes;
20
41
  private updatePaneInTree;
21
42
  splitPane(pane: WorkspacePane, orientation: 'horizontal' | 'vertical'): void;
43
+ splitSelectedPane(orientation: 'horizontal' | 'vertical'): void;
22
44
  private splitPaneInTree;
23
45
  removePane(pane: WorkspacePane): void;
46
+ removeSelectedPane(): void;
24
47
  private removePaneFromTree;
25
48
  private recalculateRatios;
26
49
  setOrientation(orientation: 'horizontal' | 'vertical'): void;
27
50
  updateRatio(index: number, value: number): void;
51
+ addPane(direction: 'left' | 'right' | 'top' | 'bottom'): void;
52
+ addPaneFromEvent(pane: WorkspacePane, direction: 'left' | 'right' | 'top' | 'bottom'): void;
53
+ private addPaneInTree;
28
54
  }
29
55
  //# sourceMappingURL=workspaceEditor.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceEditor.component.d.ts","sourceRoot":"","sources":["../../src/components/workspaceEditor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EACL,SAAS,EACT,aAAa,EAEb,YAAY,EAIb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,qBAKa,wBAAyB,YAAW,MAAM;IAczC,OAAO,CAAC,gBAAgB;IAb3B,SAAS,EAAG,SAAS,CAAA;IACpB,IAAI,0BAAgC;IACpC,MAAM,qBAA2B;IAE3C,YAAY,EAAE,aAAa,GAAG,IAAI,CAAO;IACzC,cAAc,UAAQ;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC7B,cAAc,WAIb;gBAEmB,gBAAgB,EAAE,sBAAsB;IAEtD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,MAAM,IAAI,IAAI;IAOd,QAAQ,IAAI,IAAI;IAIhB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKrC,eAAe,IAAI,IAAI;IAKvB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKrC,OAAO,CAAC,gBAAgB;IAexB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI;IAI5E,OAAO,CAAC,eAAe;IA2BvB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIrC,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,iBAAiB;IAKzB,cAAc,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI;IAI5D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAoBhD"}
1
+ {"version":3,"file":"workspaceEditor.component.d.ts","sourceRoot":"","sources":["../../src/components/workspaceEditor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAgB,UAAU,EAAa,MAAM,eAAe,CAAA;AAC5J,OAAO,EACL,SAAS,EACT,aAAa,EAEb,YAAY,EAIb,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAE5E,qBAKa,wBAAyB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAqB7E,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,UAAU;IArBX,SAAS,EAAG,SAAS,CAAA;IACrB,SAAS,UAAQ;IACjB,iBAAiB,UAAQ;IACxB,IAAI,0BAAgC;IACpC,MAAM,qBAA2B;IAEnB,SAAS,EAAG,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAEhE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAO;IACpC,WAAW,EAAE,aAAa,GAAG,IAAI,CAAO;IACxC,cAAc,UAAQ;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC7B,cAAc,WAIb;IACD,gBAAgB,UAAQ;gBAGd,gBAAgB,EAAE,sBAAsB,EACxC,UAAU,EAAE,UAAU;IAIhC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAOxC,kBAAkB,IAAI,IAAI;IAI1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,eAAe,IAAI,IAAI;IAMvB,OAAO,CAAC,cAAc;IAWtB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAgBzC,OAAO,CAAC,mBAAmB;IAU3B,MAAM,IAAI,IAAI;IAOd,QAAQ,IAAI,IAAI;IAIhB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIrC,YAAY,IAAI,IAAI;IAIpB,wBAAwB,IAAI,IAAI;IAIhC,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKnC,gBAAgB,IAAI,IAAI;IAMxB,eAAe,IAAI,IAAI;IAKvB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAMrC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAYtB,aAAa,IAAI,OAAO;IAIxB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAexB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI;IAI5E,iBAAiB,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI;IAM/D,OAAO,CAAC,eAAe;IA2BvB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAOrC,kBAAkB,IAAI,IAAI;IAM1B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,iBAAiB;IAKzB,cAAc,CAAC,WAAW,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI;IAI5D,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAqB/C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI;IAO7D,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI;IAI3F,OAAO,CAAC,aAAa;CAoDtB"}
@@ -1,28 +1,40 @@
1
- import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
- import { ConfigService } from 'tabby-core';
1
+ import { OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef, ElementRef, NgZone } from '@angular/core';
2
+ import { ConfigService, ProfilesService } from 'tabby-core';
3
+ import { StartupCommandService } from '../services/startupCommand.service';
3
4
  import { WorkspaceEditorService } from '../services/workspaceEditor.service';
4
5
  import { Workspace } from '../models/workspace.model';
5
- export declare class WorkspaceListComponent implements OnInit, OnDestroy {
6
+ export declare class WorkspaceListComponent implements OnInit, OnDestroy, AfterViewInit {
6
7
  config: ConfigService;
7
8
  private workspaceService;
9
+ private profilesService;
10
+ private startupService;
8
11
  private cdr;
12
+ private elementRef;
13
+ private zone;
9
14
  workspaces: Workspace[];
15
+ selectedWorkspace: Workspace | null;
10
16
  editingWorkspace: Workspace | null;
11
- showEditor: boolean;
17
+ isCreatingNew: boolean;
18
+ openingWorkspaceId: string | null;
12
19
  private configSubscription;
13
- constructor(config: ConfigService, workspaceService: WorkspaceEditorService, cdr: ChangeDetectorRef);
20
+ constructor(config: ConfigService, workspaceService: WorkspaceEditorService, profilesService: ProfilesService, startupService: StartupCommandService, cdr: ChangeDetectorRef, elementRef: ElementRef, zone: NgZone);
14
21
  ngOnInit(): void;
22
+ ngAfterViewInit(): void;
23
+ private autoSelectFirst;
24
+ selectWorkspace(workspace: Workspace): void;
25
+ isSelected(workspace: Workspace): boolean;
15
26
  ngOnDestroy(): void;
16
27
  loadWorkspaces(): void;
17
28
  createWorkspace(): Promise<void>;
18
29
  private setProfileForAllPanes;
19
30
  editWorkspace(workspace: Workspace): void;
20
- duplicateWorkspace(workspace: Workspace): Promise<void>;
21
- deleteWorkspace(workspace: Workspace): Promise<void>;
31
+ duplicateWorkspace(event: MouseEvent, workspace: Workspace): Promise<void>;
32
+ deleteWorkspace(event: MouseEvent, workspace: Workspace): Promise<void>;
22
33
  onEditorSave(workspace: Workspace): Promise<void>;
23
- closeEditor(): void;
34
+ onEditorCancel(): void;
24
35
  getPaneCount(workspace: Workspace): number;
25
36
  getOrientationLabel(workspace: Workspace): string;
26
- setAsDefault(workspace: Workspace): Promise<void>;
37
+ get hasUnsavedChanges(): boolean;
38
+ openWorkspace(event: MouseEvent, workspace: Workspace): Promise<void>;
27
39
  }
28
40
  //# sourceMappingURL=workspaceList.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspaceList.component.d.ts","sourceRoot":"","sources":["../../src/components/workspaceList.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EACL,SAAS,EAMV,MAAM,2BAA2B,CAAA;AAElC,qBAKa,sBAAuB,YAAW,MAAM,EAAE,SAAS;IAOrD,MAAM,EAAE,aAAa;IAC5B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,GAAG;IARb,UAAU,EAAE,SAAS,EAAE,CAAK;IAC5B,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAO;IACzC,UAAU,UAAQ;IAClB,OAAO,CAAC,kBAAkB,CAA4B;gBAG7C,MAAM,EAAE,aAAa,EACpB,gBAAgB,EAAE,sBAAsB,EACxC,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAOhB,WAAW,IAAI,IAAI;IAInB,cAAc,IAAI,IAAI;IAKhB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,OAAO,CAAC,qBAAqB;IAQ7B,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAKnC,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,WAAW,IAAI,IAAI;IAQnB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAI1C,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAI3C,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxD"}
1
+ {"version":3,"file":"workspaceList.component.d.ts","sourceRoot":"","sources":["../../src/components/workspaceList.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAClH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,EACL,SAAS,EAMV,MAAM,2BAA2B,CAAA;AAElC,qBAKa,sBAAuB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IASpE,MAAM,EAAE,aAAa;IAC5B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IAdd,UAAU,EAAE,SAAS,EAAE,CAAK;IAC5B,iBAAiB,EAAE,SAAS,GAAG,IAAI,CAAO;IAC1C,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAO;IACzC,aAAa,UAAQ;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAO;IACxC,OAAO,CAAC,kBAAkB,CAA4B;gBAG7C,MAAM,EAAE,aAAa,EACpB,gBAAgB,EAAE,sBAAsB,EACxC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,qBAAqB,EACrC,GAAG,EAAE,iBAAiB,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM;IAGtB,QAAQ,IAAI,IAAI;IAQhB,eAAe,IAAI,IAAI;IAUvB,OAAO,CAAC,eAAe;IAMvB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAM3C,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAIzC,WAAW,IAAI,IAAI;IAInB,cAAc,IAAI,IAAI;IAKhB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC,OAAO,CAAC,qBAAqB;IAQ7B,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAInC,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAc1E,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvE,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvD,cAAc,IAAI,IAAI;IAiBtB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAI1C,mBAAmB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAIjD,IAAI,iBAAiB,IAAI,OAAO,CAG/B;IAEK,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAoB5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAA;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAsB3E,MAAM,CAAC,OAAO,OAAO,qBAAqB;CAAG;AAE7C,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,+BAA+B,GAChC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAA;AAE/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAA;AAwB3E,MAAM,CAAC,OAAO,OAAO,qBAAqB;CAAG;AAE7C,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,+BAA+B,GAChC,CAAA"}