tabby-tabbyspaces 0.1.0 → 0.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 (76) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/.github/workflows/ci.yml +26 -0
  3. package/.github/workflows/claude-code-review.yml +44 -0
  4. package/.github/workflows/claude.yml +81 -0
  5. package/.github/workflows/release.yml +30 -0
  6. package/CHANGELOG.md +46 -0
  7. package/CLAUDE.md +33 -0
  8. package/CONTRIBUTING.md +3 -1
  9. package/README.md +27 -18
  10. package/TODO.md +5 -0
  11. package/dist/build-config.d.ts +3 -3
  12. package/dist/components/deleteConfirmModal.component.d.ts +7 -0
  13. package/dist/components/deleteConfirmModal.component.d.ts.map +1 -0
  14. package/dist/components/paneEditor.component.d.ts +9 -18
  15. package/dist/components/paneEditor.component.d.ts.map +1 -1
  16. package/dist/components/splitPreview.component.d.ts +50 -50
  17. package/dist/components/splitPreview.component.d.ts.map +1 -1
  18. package/dist/components/workspaceEditor.component.d.ts +61 -54
  19. package/dist/components/workspaceEditor.component.d.ts.map +1 -1
  20. package/dist/components/workspaceList.component.d.ts +56 -39
  21. package/dist/components/workspaceList.component.d.ts.map +1 -1
  22. package/dist/index.d.ts +6 -6
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.LICENSE.txt +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/models/workspace.model.d.ts +118 -78
  28. package/dist/models/workspace.model.d.ts.map +1 -1
  29. package/dist/package.json +1 -1
  30. package/dist/providers/config.provider.d.ts +8 -8
  31. package/dist/providers/settings.provider.d.ts +7 -7
  32. package/dist/providers/toolbar.provider.d.ts +23 -15
  33. package/dist/providers/toolbar.provider.d.ts.map +1 -1
  34. package/dist/services/startupCommand.service.d.ts +27 -19
  35. package/dist/services/startupCommand.service.d.ts.map +1 -1
  36. package/dist/services/workspaceBackground.service.d.ts +38 -0
  37. package/dist/services/workspaceBackground.service.d.ts.map +1 -0
  38. package/dist/services/workspaceEditor.service.d.ts +46 -32
  39. package/dist/services/workspaceEditor.service.d.ts.map +1 -1
  40. package/docs/DESIGN.md +57 -0
  41. package/docs/SESSION-2026-01-14-S1-DESIGN.md +134 -0
  42. package/mockups/index.html +162 -0
  43. package/mockups/s1-tight-sharp.html +522 -0
  44. package/mockups/shared/base.css +216 -0
  45. package/mockups/v06-tabbed.html +643 -0
  46. package/package.json +2 -1
  47. package/screenshots/editor.png +0 -0
  48. package/screenshots/pane-edit.png +0 -0
  49. package/scripts/build-dev.js +2 -1
  50. package/scripts/build-prod.js +2 -1
  51. package/src/components/deleteConfirmModal.component.ts +23 -0
  52. package/src/components/paneEditor.component.pug +27 -43
  53. package/src/components/paneEditor.component.scss +37 -85
  54. package/src/components/paneEditor.component.ts +4 -32
  55. package/src/components/splitPreview.component.pug +0 -9
  56. package/src/components/splitPreview.component.scss +46 -70
  57. package/src/components/splitPreview.component.ts +15 -25
  58. package/src/components/workspaceEditor.component.pug +140 -112
  59. package/src/components/workspaceEditor.component.scss +270 -202
  60. package/src/components/workspaceEditor.component.ts +161 -85
  61. package/src/components/workspaceList.component.pug +31 -51
  62. package/src/components/workspaceList.component.scss +86 -77
  63. package/src/components/workspaceList.component.ts +89 -34
  64. package/src/index.ts +4 -0
  65. package/src/models/workspace.model.ts +80 -2
  66. package/src/providers/toolbar.provider.ts +78 -9
  67. package/src/services/startupCommand.service.ts +30 -32
  68. package/src/services/workspaceBackground.service.ts +167 -0
  69. package/src/services/workspaceEditor.service.ts +77 -40
  70. package/src/styles/_index.scss +3 -0
  71. package/src/styles/_mixins.scss +180 -0
  72. package/src/styles/_variables.scss +67 -0
  73. package/TEST_MCP.md +0 -176
  74. package/cdp-click.js +0 -22
  75. package/cdp-test.js +0 -28
  76. package/test_cdp.py +0 -50
@@ -31,7 +31,8 @@
31
31
  "Bash(git log:*)",
32
32
  "Bash(ls -la \"C:\\\\Users\\\\halil\\\\tabbyspaces\\\\screenshots\"\" 2>nul || echo \"Directory not found \")",
33
33
  "Bash(dir:*)",
34
- "Bash(cmd.exe /c start \"\" \"C:\\\\Program Files \\(x86\\)\\\\Tabby\\\\Tabby.exe\" --remote-debugging-port=9222)"
34
+ "Bash(cmd.exe /c start \"\" \"C:\\\\Program Files \\(x86\\)\\\\Tabby\\\\Tabby.exe\" --remote-debugging-port=9222)",
35
+ "Bash(ls:*)"
35
36
  ]
36
37
  },
37
38
  "enableAllProjectMcpServers": true,
@@ -0,0 +1,26 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [dev]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - name: Setup Node.js
17
+ uses: actions/setup-node@v4
18
+ with:
19
+ node-version: '18'
20
+ cache: 'npm'
21
+
22
+ - name: Install dependencies
23
+ run: npm ci --legacy-peer-deps
24
+
25
+ - name: Build
26
+ run: npm run build
@@ -0,0 +1,44 @@
1
+ name: Claude Code Review
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, synchronize, ready_for_review, reopened]
6
+ # Optional: Only run on specific file changes
7
+ # paths:
8
+ # - "src/**/*.ts"
9
+ # - "src/**/*.tsx"
10
+ # - "src/**/*.js"
11
+ # - "src/**/*.jsx"
12
+
13
+ jobs:
14
+ claude-review:
15
+ # Only run for repository members to control costs
16
+ if: |
17
+ github.event.pull_request.author_association == 'OWNER' ||
18
+ github.event.pull_request.author_association == 'MEMBER' ||
19
+ github.event.pull_request.author_association == 'COLLABORATOR'
20
+
21
+ runs-on: ubuntu-latest
22
+ permissions:
23
+ contents: write
24
+ pull-requests: write
25
+ issues: read
26
+ id-token: write
27
+
28
+ steps:
29
+ - name: Checkout repository
30
+ uses: actions/checkout@v4
31
+ with:
32
+ fetch-depth: 0
33
+
34
+ - name: Run Claude Code Review
35
+ id: claude-review
36
+ uses: anthropics/claude-code-action@v1.0.0
37
+ with:
38
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39
+ prompt: >
40
+ Please review the changes in this pull request and leave a concise summary comment with any issues, suggestions, and potential bugs:
41
+ https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}
42
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
43
+ # or https://code.claude.com/docs/en/cli-reference for available options
44
+
@@ -0,0 +1,81 @@
1
+ name: Claude Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (
17
+ github.event_name == 'issue_comment' &&
18
+ contains(github.event.comment.body, '@claude') &&
19
+ (
20
+ github.event.comment.author_association == 'OWNER' ||
21
+ github.event.comment.author_association == 'MEMBER' ||
22
+ github.event.comment.author_association == 'COLLABORATOR'
23
+ )
24
+ ) ||
25
+ (
26
+ github.event_name == 'pull_request_review_comment' &&
27
+ contains(github.event.comment.body, '@claude') &&
28
+ (
29
+ github.event.comment.author_association == 'OWNER' ||
30
+ github.event.comment.author_association == 'MEMBER' ||
31
+ github.event.comment.author_association == 'COLLABORATOR'
32
+ )
33
+ ) ||
34
+ (
35
+ github.event_name == 'pull_request_review' &&
36
+ contains(github.event.review.body, '@claude') &&
37
+ (
38
+ github.event.review.author_association == 'OWNER' ||
39
+ github.event.review.author_association == 'MEMBER' ||
40
+ github.event.review.author_association == 'COLLABORATOR'
41
+ )
42
+ ) ||
43
+ (
44
+ github.event_name == 'issues' &&
45
+ (
46
+ contains(github.event.issue.body, '@claude') ||
47
+ contains(github.event.issue.title, '@claude')
48
+ ) &&
49
+ (
50
+ github.event.issue.author_association == 'OWNER' ||
51
+ github.event.issue.author_association == 'MEMBER' ||
52
+ github.event.issue.author_association == 'COLLABORATOR'
53
+ )
54
+ )
55
+ runs-on: ubuntu-latest
56
+ permissions:
57
+ contents: read
58
+ pull-requests: write
59
+ issues: write
60
+ id-token: write
61
+ actions: read # Required for Claude to read CI results on PRs
62
+ steps:
63
+ - name: Checkout repository
64
+ uses: actions/checkout@v4
65
+ with:
66
+ fetch-depth: 0
67
+
68
+ - name: Run Claude Code
69
+ id: claude
70
+ uses: anthropics/claude-code-action@v1.0.0
71
+ with:
72
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
73
+
74
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
75
+ # prompt: 'Update the pull request description to include a summary of changes.'
76
+
77
+ # Optional: Add claude_args to customize behavior and configuration
78
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
79
+ # or https://code.claude.com/docs/en/cli-reference for available options
80
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
81
+
@@ -0,0 +1,30 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - name: Setup Node.js
15
+ uses: actions/setup-node@v4
16
+ with:
17
+ node-version: '18'
18
+ cache: 'npm'
19
+ registry-url: 'https://registry.npmjs.org'
20
+
21
+ - name: Install dependencies
22
+ run: npm ci --legacy-peer-deps
23
+
24
+ - name: Build
25
+ run: npm run build
26
+
27
+ - name: Publish to npm
28
+ run: npm publish --access public
29
+ env:
30
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/CHANGELOG.md CHANGED
@@ -1,5 +1,51 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.2.0] - 2026-01-26
4
+
5
+ ### Design
6
+
7
+ - **S1 "Tight & Sharp" UI redesign**
8
+ - Tab bar navigation replaces vertical workspace list
9
+ - Inline pane editor replaces modal overlay
10
+ - Section-based layout with uppercase titles
11
+ - Reorganized preview toolbar with icon buttons
12
+ - 2-column form grid in pane editor
13
+ - Refactor SCSS to modular DRY architecture
14
+ - Shared variables: spacing scale, border radius, colors, z-index
15
+ - Reusable mixins: flex-row, form-input, interactive-card, toolbar-btn
16
+ - All components migrated to use shared styles
17
+ - Add design system documentation (docs/DESIGN.md)
18
+ - Add HTML mockups for design exploration
19
+
20
+ ### Reliability
21
+
22
+ - Improved duplicate workspace detection on Tabby restart
23
+ - Add workspaceId to recovery tokens
24
+ - Two-strategy detection (restored tabs + freshly opened)
25
+ - Better shell initialization with 2s timeout and error handling
26
+ - Wait for Tabby recovery before launching startup workspaces
27
+ - Type-safe workspace detection with proper type guards
28
+
29
+ ### Bug Fixes
30
+
31
+ - Fix focus lost after workspace delete (NgbModal replaces native confirm)
32
+ - Fix split preview change detection (remove OnPush strategy)
33
+ - Fix race condition in shell initialization
34
+
35
+ ### Infrastructure
36
+
37
+ - Add CI/CD workflows (GitHub Actions for build + release)
38
+ - Add dev branch workflow documentation
39
+
40
+ ### Technical
41
+
42
+ - Code review cleanup and fixes
43
+ - Consistent use of deepClone helper
44
+ - Add deleteConfirmModal component
45
+ - Improve singleton service patterns
46
+
47
+ ---
48
+
3
49
  ## [0.1.0] - 2026-01-13
4
50
 
5
51
  ### Features
package/CLAUDE.md CHANGED
@@ -44,6 +44,9 @@ src/
44
44
  │ ├── config.provider.ts
45
45
  │ ├── settings.provider.ts
46
46
  │ └── toolbar.provider.ts
47
+ ├── styles/ # Shared SCSS (modular DRY)
48
+ │ ├── _variables.scss # Spacing, radius, colors, z-index
49
+ │ └── _mixins.scss # Reusable patterns
47
50
  └── components/ # Angular components (.ts, .pug, .scss)
48
51
  ├── workspaceList # Main settings UI
49
52
  ├── workspaceEditor # Single workspace editor
@@ -51,6 +54,16 @@ src/
51
54
  └── splitPreview # Visual split preview
52
55
  ```
53
56
 
57
+ ## Styles
58
+
59
+ Modular DRY SCSS architecture. All components load shared styles via `@use '../styles/index' as *;`.
60
+
61
+ - **Variables**: `$spacing-*`, `$radius-*`, `$color-*`, `$z-*`, `$transition-*`
62
+ - **Mixins**: Layout, form, card, and button patterns. See `src/styles/_mixins.scss` for the available mixins.
63
+ - **Theming**: Uses Tabby's `--theme-*` CSS variables
64
+
65
+ See `docs/DESIGN.md` for details.
66
+
54
67
  ## Build
55
68
 
56
69
  ```bash
@@ -291,6 +304,26 @@ await new Promise(r => setTimeout(r, 100));
291
304
  return document.querySelectorAll('.preview-pane.selected').length;
292
305
  ```
293
306
 
307
+ ## Angular Change Detection
308
+
309
+ **KRITIČNO**: NE koristi `OnPush` strategiju na komponentama koje primaju mutirane objekte.
310
+
311
+ ### Pravilo
312
+ - **NE koristi `OnPush`** ako parent komponenta mutira objekte umesto da kreira nove reference
313
+ - Angular default strategija automatski detektuje sve promene
314
+ - `OnPush` je samo za leaf komponente koje emituju events bez lokalnog state-a
315
+
316
+ ### Zašto
317
+ - `OnPush` osvežava view samo kada se `@Input` referenca promeni
318
+ - Mutacija objekta (npr. `workspace.root.children.push()`) NE menja referencu
319
+ - Bez nove reference, Angular ne zna da treba re-renderovati
320
+
321
+ ### Komponente u ovom projektu
322
+ - `workspaceEditor` - **default CD** (mutira workspace)
323
+ - `workspaceList` - **default CD** (koristi `detectChanges()` za async operacije)
324
+ - `splitPreview` - **default CD** (prima mutirane objekte)
325
+ - `paneEditor` - može biti `OnPush` (samo emituje, nema mutacija)
326
+
294
327
  ## Known Issues
295
328
 
296
329
  ### YAML escape sequences in config.yaml
package/CONTRIBUTING.md CHANGED
@@ -49,7 +49,9 @@ No hot reload. Tabby doesn't support it for plugins. Restart after each build.
49
49
  2. Create a branch (`git checkout -b fix/thing`)
50
50
  3. Make your changes
51
51
  4. Test manually in Tabby
52
- 5. Submit PR with a clear description
52
+ 5. Submit PR **to the `dev` branch** (not `main`)
53
+
54
+ CI will check that your code builds. `main` is for releases only.
53
55
 
54
56
  No strict commit message format. Just be clear about what you changed and why.
55
57
 
package/README.md CHANGED
@@ -4,19 +4,26 @@ Visual workspace editor for [Tabby](https://tabby.sh). Create split-layout termi
4
4
 
5
5
  ![Workspace Editor](screenshots/editor.png)
6
6
 
7
- ## What it does
7
+ ## Features
8
8
 
9
- - Visual editor for split layouts (horizontal/vertical, nested, any depth)
10
- - Per-pane configuration: profile, working directory, startup command, title
11
- - One-click workspace launch from toolbar
12
- - Launch on startup (auto-open workspaces when Tabby starts)
13
- - Works with any shell (Bash, Zsh, PowerShell, Nushell, etc.)
9
+ - **Visual split editor** - Design layouts inline, not in modal dialogs. Split horizontally, vertically, nest to any depth
10
+ - **Layout toolbar** - Select a pane, then split, add adjacent panes, or delete with toolbar buttons
11
+ - **Per-pane configuration** - Set profile, working directory, and startup command for each pane
12
+ - **One-click launch** - Open workspaces instantly from the toolbar dropdown
13
+ - **Launch on startup** - Auto-open multiple workspaces when Tabby starts
14
+ - **Any shell** - Works with Bash, Zsh, PowerShell, Nushell, cmd, WSL, and any other shell Tabby supports
15
+
16
+ ## Screenshots
17
+
18
+ | Editor with selected pane | Pane configuration |
19
+ |---------------------------|-------------------|
20
+ | ![Editor](screenshots/editor.png) | ![Pane Edit](screenshots/pane-edit.png) |
14
21
 
15
22
  ## About this project
16
23
 
17
24
  This plugin was written 100% by [Claude Code](https://claude.ai/code).
18
25
 
19
- Igor Halilović had the idea and provided product direction. He hates Angular so much (19 years of web dev, wrote his own TypeScript framework) that he didn't look at this code. Not once. He told Claude Code what he wanted, Claude Code built it.
26
+ Igor Halilovic had the idea and provided product direction. He hates Angular so much (19 years of web dev, wrote his own TypeScript framework) that he didn't look at this code. Not once. He told Claude Code what he wanted, Claude Code built it.
20
27
 
21
28
  Human provides the *what* and *why*. AI handles the *how*.
22
29
 
@@ -25,7 +32,7 @@ Here's the fun part: to test this plugin, we built [tabby-mcp](https://github.co
25
32
  ## Install
26
33
 
27
34
  **From Tabby Plugin Manager:**
28
- Settings Plugins Search "tabbyspaces" Install
35
+ Settings > Plugins > Search "tabbyspaces" > Install
29
36
 
30
37
  **Manual:**
31
38
  ```bash
@@ -35,17 +42,13 @@ npm install tabby-tabbyspaces
35
42
 
36
43
  Restart Tabby after installation.
37
44
 
38
- ## Usage
39
-
40
- 1. Open Settings → TabbySpaces
41
- 2. Create a workspace
42
- 3. Design your split layout visually
43
- 4. Configure each pane (profile, cwd, startup command)
44
- 5. Save and launch from the toolbar
45
-
46
- ### Pane configuration
45
+ ## Quick Start
47
46
 
48
- ![Edit Pane](screenshots/pane-edit.png)
47
+ 1. **Open settings** - Settings > TabbySpaces
48
+ 2. **Create workspace** - Click "New Workspace", name it
49
+ 3. **Design layout** - Click a pane to select it, use toolbar to split (horizontal/vertical)
50
+ 4. **Configure panes** - Click a pane (or use its context menu) to set profile, cwd, startup command
51
+ 5. **Save and launch** - Save changes, then click "Open" or use the toolbar dropdown
49
52
 
50
53
  ## Roadmap
51
54
 
@@ -66,6 +69,12 @@ Restart Tabby after installation.
66
69
  - [Discussions](https://github.com/halilc4/tabbyspaces/discussions) - Questions, ideas, show your setup
67
70
  - [Issues](https://github.com/halilc4/tabbyspaces/issues) - Bug reports
68
71
 
72
+ ## Contributing
73
+
74
+ PRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions.
75
+
76
+ All PRs go to the `dev` branch. CI checks the build automatically.
77
+
69
78
  ## License
70
79
 
71
80
  MIT
package/TODO.md CHANGED
@@ -13,10 +13,14 @@
13
13
  - [ ] List: add small layout preview
14
14
  - [ ] Better input for command
15
15
  - [ ] Better input for cwd
16
+ - [ ] Editor workspace + pane editor autosave
17
+ - [ ] Undo/redo for editor changes
16
18
 
17
19
  ### Bugs
18
20
  - [~] Resize panes in Tabby reverts to original values (ratio problem) - WATCH: happens only on one workspace
19
21
  - [ ] Layout preview responsive - nested splits don't adapt well to smaller sizes
22
+ - [ ] Launch on startup - Tabby remembers open tabs, check if we can detect if workspace is already open; if not, kill the feature
23
+ - [x] Tab titles are a mess - keep only workspace name or default to Tabby behavior (verify no caching/lookup by tab name)
20
24
 
21
25
  ### Other
22
26
  - [ ] Update screenshots in README
@@ -60,6 +64,7 @@
60
64
  - [x] Refactoring: Remove profile persistence, shell-aware CWD, dead code cleanup
61
65
 
62
66
  ### Bugs
67
+ - [x] Focus lost after deleting workspace (native confirm() steals focus from Electron) - fix: use NgbModal instead
63
68
  - [x] Audit async functions - check if `detectChanges()` is missing after async operations that change state
64
69
  - [x] Split pane runs command (in-memory profiles) - fix: clear profile.options.args after command execution
65
70
  - [x] Pane editor modal bug - mouseup outside dialog closes modal. Dialog should close only on Esc or close/cancel/save button
@@ -1,4 +1,4 @@
1
- export declare const CONFIG_KEY: string;
2
- export declare const DISPLAY_NAME: string;
3
- export declare const IS_DEV: boolean;
1
+ export declare const CONFIG_KEY: string;
2
+ export declare const DISPLAY_NAME: string;
3
+ export declare const IS_DEV: boolean;
4
4
  //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
2
+ export declare class DeleteConfirmModalComponent {
3
+ modal: NgbActiveModal;
4
+ workspaceName: string;
5
+ constructor(modal: NgbActiveModal);
6
+ }
7
+ //# sourceMappingURL=deleteConfirmModal.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deleteConfirmModal.component.d.ts","sourceRoot":"","sources":["../../src/components/deleteConfirmModal.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,qBAgBa,2BAA2B;IAEnB,KAAK,EAAE,cAAc;IAD/B,aAAa,SAAK;gBACR,KAAK,EAAE,cAAc;CACzC"}
@@ -1,19 +1,10 @@
1
- import { EventEmitter, OnInit, ElementRef } from '@angular/core';
2
- import { WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
- export declare class PaneEditorComponent implements OnInit {
4
- pane: WorkspacePane;
5
- profiles: TabbyProfile[];
6
- save: EventEmitter<WorkspacePane>;
7
- cancel: EventEmitter<void>;
8
- modalRef: ElementRef<HTMLElement>;
9
- editedPane: WorkspacePane;
10
- private pointerDownInsideModal;
11
- ngOnInit(): void;
12
- onEscapeKey(): void;
13
- onDocumentPointerDown(event: PointerEvent): void;
14
- onOverlayClick(event: MouseEvent): void;
15
- onSave(): void;
16
- onCancel(): void;
17
- getProfileName(profileId: string): string;
18
- }
1
+ import { EventEmitter } from '@angular/core';
2
+ import { WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
+ export declare class PaneEditorComponent {
4
+ pane: WorkspacePane;
5
+ profiles: TabbyProfile[];
6
+ close: EventEmitter<void>;
7
+ onEscapeKey(): void;
8
+ getProfileName(profileId: string): string;
9
+ }
19
10
  //# sourceMappingURL=paneEditor.component.d.ts.map
@@ -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,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
+ {"version":3,"file":"paneEditor.component.d.ts","sourceRoot":"","sources":["../../src/components/paneEditor.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAgB,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAEvE,qBAKa,mBAAmB;IACrB,IAAI,EAAG,aAAa,CAAA;IACpB,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC5B,KAAK,qBAA2B;IAG1C,WAAW,IAAI,IAAI;IAInB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAI1C"}
@@ -1,51 +1,51 @@
1
- import { EventEmitter } from '@angular/core';
2
- import { WorkspaceSplit, WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
- export declare class SplitPreviewComponent {
4
- split: WorkspaceSplit;
5
- depth: number;
6
- selectedPaneId: string | null;
7
- profiles: TabbyProfile[];
8
- paneSelect: EventEmitter<WorkspacePane>;
9
- paneEdit: EventEmitter<WorkspacePane>;
10
- splitHorizontal: EventEmitter<WorkspacePane>;
11
- splitVertical: EventEmitter<WorkspacePane>;
12
- removePane: EventEmitter<WorkspacePane>;
13
- addLeft: EventEmitter<WorkspacePane>;
14
- addRight: EventEmitter<WorkspacePane>;
15
- addTop: EventEmitter<WorkspacePane>;
16
- addBottom: EventEmitter<WorkspacePane>;
17
- contextMenuPane: WorkspacePane | null;
18
- contextMenuPosition: {
19
- x: number;
20
- y: number;
21
- };
22
- isPane(child: WorkspacePane | WorkspaceSplit): boolean;
23
- isSplit(child: WorkspacePane | WorkspaceSplit): boolean;
24
- asSplit(child: WorkspacePane | WorkspaceSplit): WorkspaceSplit;
25
- asPane(child: WorkspacePane | WorkspaceSplit): WorkspacePane;
26
- getFlexStyle(index: number): string;
27
- onPaneClick(pane: WorkspacePane): void;
28
- onEditClick(event: MouseEvent, pane: WorkspacePane): void;
29
- truncate(text: string, maxLength: number): string;
30
- onContextMenu(event: MouseEvent, pane: WorkspacePane): void;
31
- closeContextMenu(): void;
32
- onEdit(): void;
33
- onSplitH(): void;
34
- onSplitV(): void;
35
- onAddLeft(): void;
36
- onAddRight(): void;
37
- onAddTop(): void;
38
- onAddBottom(): void;
39
- onRemove(): void;
40
- getPaneLabel(pane: WorkspacePane): string;
41
- onNestedPaneSelect(pane: WorkspacePane): void;
42
- onNestedPaneEdit(pane: WorkspacePane): void;
43
- onNestedSplitH(pane: WorkspacePane): void;
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;
49
- onNestedRemove(pane: WorkspacePane): void;
50
- }
1
+ import { EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';
2
+ import { WorkspaceSplit, WorkspacePane, TabbyProfile } from '../models/workspace.model';
3
+ export declare class SplitPreviewComponent implements OnChanges {
4
+ private cdr;
5
+ split: WorkspaceSplit;
6
+ depth: number;
7
+ selectedPaneId: string | null;
8
+ profiles: TabbyProfile[];
9
+ paneEdit: EventEmitter<WorkspacePane>;
10
+ splitHorizontal: EventEmitter<WorkspacePane>;
11
+ splitVertical: EventEmitter<WorkspacePane>;
12
+ removePane: EventEmitter<WorkspacePane>;
13
+ addLeft: EventEmitter<WorkspacePane>;
14
+ addRight: EventEmitter<WorkspacePane>;
15
+ addTop: EventEmitter<WorkspacePane>;
16
+ addBottom: EventEmitter<WorkspacePane>;
17
+ contextMenuPane: WorkspacePane | null;
18
+ contextMenuPosition: {
19
+ x: number;
20
+ y: number;
21
+ };
22
+ constructor(cdr: ChangeDetectorRef);
23
+ ngOnChanges(changes: SimpleChanges): void;
24
+ isPane(child: WorkspacePane | WorkspaceSplit): boolean;
25
+ isSplit(child: WorkspacePane | WorkspaceSplit): boolean;
26
+ asSplit(child: WorkspacePane | WorkspaceSplit): WorkspaceSplit;
27
+ asPane(child: WorkspacePane | WorkspaceSplit): WorkspacePane;
28
+ getFlexStyle(index: number): string;
29
+ onPaneClick(pane: WorkspacePane): void;
30
+ truncate(text: string, maxLength: number): string;
31
+ onContextMenu(event: MouseEvent, pane: WorkspacePane): void;
32
+ closeContextMenu(): void;
33
+ onEdit(): void;
34
+ onSplitH(): void;
35
+ onSplitV(): void;
36
+ onAddLeft(): void;
37
+ onAddRight(): void;
38
+ onAddTop(): void;
39
+ onAddBottom(): void;
40
+ onRemove(): void;
41
+ getPaneLabel(pane: WorkspacePane): string;
42
+ onNestedPaneEdit(pane: WorkspacePane): void;
43
+ onNestedSplitH(pane: WorkspacePane): void;
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;
49
+ onNestedRemove(pane: WorkspacePane): void;
50
+ }
51
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,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
+ {"version":3,"file":"splitPreview.component.d.ts","sourceRoot":"","sources":["../../src/components/splitPreview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACnH,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EAEb,MAAM,2BAA2B,CAAA;AAElC,qBAKa,qBAAsB,YAAW,SAAS;IAiBzC,OAAO,CAAC,GAAG;IAhBd,KAAK,EAAG,cAAc,CAAA;IACtB,KAAK,SAAI;IACT,cAAc,EAAE,MAAM,GAAG,IAAI,CAAO;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAK;IAC5B,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;gBAEhB,GAAG,EAAE,iBAAiB;IAE1C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOzC,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,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;IAKxB,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;IAQzC,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"}