tabby-tabbyspaces 0.0.1
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.
- package/.claude/settings.local.json +15 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- package/.github/ISSUE_TEMPLATE/config.yml +5 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- package/CHANGELOG.md +20 -0
- package/CLAUDE.md +159 -0
- package/CONTRIBUTING.md +64 -0
- package/LICENSE +21 -0
- package/README.md +61 -0
- package/RELEASE_PLAN.md +161 -0
- package/dist/build-config.d.ts +4 -0
- package/dist/build-config.d.ts.map +1 -0
- package/dist/components/paneEditor.component.d.ts +14 -0
- package/dist/components/paneEditor.component.d.ts.map +1 -0
- package/dist/components/splitPreview.component.d.ts +36 -0
- package/dist/components/splitPreview.component.d.ts.map +1 -0
- package/dist/components/workspaceEditor.component.d.ts +29 -0
- package/dist/components/workspaceEditor.component.d.ts.map +1 -0
- package/dist/components/workspaceList.component.d.ts +28 -0
- package/dist/components/workspaceList.component.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.LICENSE.txt +43 -0
- package/dist/index.js.map +1 -0
- package/dist/models/workspace.model.d.ts +77 -0
- package/dist/models/workspace.model.d.ts.map +1 -0
- package/dist/providers/config.provider.d.ts +9 -0
- package/dist/providers/config.provider.d.ts.map +1 -0
- package/dist/providers/settings.provider.d.ts +8 -0
- package/dist/providers/settings.provider.d.ts.map +1 -0
- package/dist/providers/toolbar.provider.d.ts +13 -0
- package/dist/providers/toolbar.provider.d.ts.map +1 -0
- package/dist/services/workspaceEditor.service.d.ts +25 -0
- package/dist/services/workspaceEditor.service.d.ts.map +1 -0
- package/package.json +73 -0
- package/screenshots/editor.png +0 -0
- package/screenshots/pane-edit.png +0 -0
- package/screenshots/workspace-edit.png +0 -0
- package/scripts/build-dev.js +46 -0
- package/src/build-config.ts +8 -0
- package/src/components/paneEditor.component.pug +46 -0
- package/src/components/paneEditor.component.scss +112 -0
- package/src/components/paneEditor.component.ts +33 -0
- package/src/components/splitPreview.component.pug +45 -0
- package/src/components/splitPreview.component.scss +126 -0
- package/src/components/splitPreview.component.ts +111 -0
- package/src/components/workspaceEditor.component.pug +84 -0
- package/src/components/workspaceEditor.component.scss +169 -0
- package/src/components/workspaceEditor.component.ts +181 -0
- package/src/components/workspaceList.component.pug +46 -0
- package/src/components/workspaceList.component.scss +112 -0
- package/src/components/workspaceList.component.ts +124 -0
- package/src/index.ts +38 -0
- package/src/models/workspace.model.ts +126 -0
- package/src/providers/config.provider.ts +12 -0
- package/src/providers/settings.provider.ts +15 -0
- package/src/providers/toolbar.provider.ts +81 -0
- package/src/services/workspaceEditor.service.ts +228 -0
- package/tsconfig.json +29 -0
- package/webpack.config.js +62 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ConfigService } from 'tabby-core';
|
|
3
|
+
import { WorkspaceEditorService } from '../services/workspaceEditor.service';
|
|
4
|
+
import { Workspace } from '../models/workspace.model';
|
|
5
|
+
export declare class WorkspaceListComponent implements OnInit, OnDestroy {
|
|
6
|
+
config: ConfigService;
|
|
7
|
+
private workspaceService;
|
|
8
|
+
private cdr;
|
|
9
|
+
workspaces: Workspace[];
|
|
10
|
+
editingWorkspace: Workspace | null;
|
|
11
|
+
showEditor: boolean;
|
|
12
|
+
private configSubscription;
|
|
13
|
+
constructor(config: ConfigService, workspaceService: WorkspaceEditorService, cdr: ChangeDetectorRef);
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
ngOnDestroy(): void;
|
|
16
|
+
loadWorkspaces(): void;
|
|
17
|
+
createWorkspace(): Promise<void>;
|
|
18
|
+
private setProfileForAllPanes;
|
|
19
|
+
editWorkspace(workspace: Workspace): void;
|
|
20
|
+
duplicateWorkspace(workspace: Workspace): Promise<void>;
|
|
21
|
+
deleteWorkspace(workspace: Workspace): Promise<void>;
|
|
22
|
+
onEditorSave(workspace: Workspace): Promise<void>;
|
|
23
|
+
closeEditor(): void;
|
|
24
|
+
getPaneCount(workspace: Workspace): number;
|
|
25
|
+
getOrientationLabel(workspace: Workspace): string;
|
|
26
|
+
setAsDefault(workspace: Workspace): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=workspaceList.component.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { WorkspaceEditorConfigProvider } from './providers/config.provider';
|
|
2
|
+
import { WorkspaceEditorSettingsProvider } from './providers/settings.provider';
|
|
3
|
+
import { WorkspaceEditorService } from './services/workspaceEditor.service';
|
|
4
|
+
export default class WorkspaceEditorModule {
|
|
5
|
+
}
|
|
6
|
+
export { WorkspaceEditorService, WorkspaceEditorConfigProvider, WorkspaceEditorSettingsProvider, };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! For license information please see index.js.LICENSE.txt */
|
|
2
|
+
!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("tabby-core"),require("tabby-settings"),function(){try{return require("fs")}catch(e){}}());else if("function"==typeof define&&define.amd)define(["@angular/core","@angular/common","@angular/forms","tabby-core","tabby-settings","fs"],r);else{var t="object"==typeof exports?r(require("@angular/core"),require("@angular/common"),require("@angular/forms"),require("tabby-core"),require("tabby-settings"),function(){try{return require("fs")}catch(e){}}()):r(e["@angular/core"],e["@angular/common"],e["@angular/forms"],e["tabby-core"],e["tabby-settings"],e.fs);for(var n in t)("object"==typeof exports?exports:e)[n]=t[n]}}(global,(e,r,t,n,o,i)=>(()=>{var a={28(e,r,t){"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(354),o=t.n(n),i=t(314),a=t.n(i)()(o());a.push([e.id,".workspace-editor-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:1000}.workspace-editor-modal{background:var(--theme-bg);border-radius:12px;width:90%;max-width:700px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.4)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--theme-border)}.modal-header h4{margin:0;font-size:1.25rem}.modal-header .close-btn{font-size:1.25rem;color:var(--theme-fg-more);padding:4px 8px}.modal-header .close-btn:hover{color:var(--theme-fg)}.modal-body{padding:20px;overflow-y:auto;flex:1}.form-row{display:flex;gap:16px;margin-bottom:16px}.form-row:last-child{margin-bottom:0}.form-group{display:flex;flex-direction:column;gap:6px}.form-group.flex-grow{flex:1}.form-group label{font-size:.9rem;color:var(--theme-fg-more)}.form-group input[type=checkbox]{margin-right:8px}.form-control{padding:8px 12px;border-radius:6px;border:1px solid var(--theme-border);background:var(--theme-bg-more);color:var(--theme-fg);font-size:.95rem}.form-control:focus{outline:none;border-color:var(--theme-primary)}.color-input{width:60px;height:36px;padding:2px;cursor:pointer}.icon-selector{display:flex;flex-wrap:wrap;gap:4px}.icon-option{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid var(--theme-border);border-radius:6px;background:var(--theme-bg-more);color:var(--theme-fg-more);cursor:pointer;transition:all .2s}.icon-option:hover{background:var(--theme-bg-more-more);color:var(--theme-fg)}.icon-option.selected{border-color:var(--theme-primary);background:var(--theme-primary);color:#fff}.form-section{margin-top:20px}.form-section .section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.form-section .section-header h5{margin:0;font-size:1rem}.orientation-toggle{display:flex;gap:8px}.orientation-toggle .btn{display:flex;align-items:center;gap:6px}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid var(--theme-border)}","",{version:3,sources:["webpack://./src/components/workspaceEditor.component.scss"],names:[],mappings:"AAAA,0BACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,yBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,YAAA,CAGF,wBACE,0BAAA,CACA,kBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,qCAAA,CAGF,cACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,iBAAA,CACA,2CAAA,CAEA,iBACE,QAAA,CACA,iBAAA,CAGF,yBACE,iBAAA,CACA,0BAAA,CACA,eAAA,CAEA,+BACE,qBAAA,CAKN,YACE,YAAA,CACA,eAAA,CACA,MAAA,CAGF,UACE,YAAA,CACA,QAAA,CACA,kBAAA,CAEA,qBACE,eAAA,CAIJ,YACE,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,sBACE,MAAA,CAGF,kBACE,eAAA,CACA,0BAAA,CAGF,iCACE,gBAAA,CAIJ,cACE,gBAAA,CACA,iBAAA,CACA,oCAAA,CACA,+BAAA,CACA,qBAAA,CACA,gBAAA,CAEA,oBACE,YAAA,CACA,iCAAA,CAIJ,aACE,UAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CAGF,eACE,YAAA,CACA,cAAA,CACA,OAAA,CAGF,aACE,UAAA,CACA,WAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oCAAA,CACA,iBAAA,CACA,+BAAA,CACA,0BAAA,CACA,cAAA,CACA,kBAAA,CAEA,mBACE,oCAAA,CACA,qBAAA,CAGF,sBACE,iCAAA,CACA,+BAAA,CACA,UAAA,CAIJ,cACE,eAAA,CAEA,8BACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,kBAAA,CAEA,iCACE,QAAA,CACA,cAAA,CAKN,oBACE,YAAA,CACA,OAAA,CAEA,yBACE,YAAA,CACA,kBAAA,CACA,OAAA,CAIJ,cACE,YAAA,CACA,wBAAA,CACA,QAAA,CACA,iBAAA,CACA,wCAAA",sourcesContent:[".workspace-editor-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(0, 0, 0, 0.6);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 1000;\r\n}\r\n\r\n.workspace-editor-modal {\r\n background: var(--theme-bg);\r\n border-radius: 12px;\r\n width: 90%;\r\n max-width: 700px;\r\n max-height: 90vh;\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 16px 20px;\r\n border-bottom: 1px solid var(--theme-border);\r\n\r\n h4 {\r\n margin: 0;\r\n font-size: 1.25rem;\r\n }\r\n\r\n .close-btn {\r\n font-size: 1.25rem;\r\n color: var(--theme-fg-more);\r\n padding: 4px 8px;\r\n\r\n &:hover {\r\n color: var(--theme-fg);\r\n }\r\n }\r\n}\r\n\r\n.modal-body {\r\n padding: 20px;\r\n overflow-y: auto;\r\n flex: 1;\r\n}\r\n\r\n.form-row {\r\n display: flex;\r\n gap: 16px;\r\n margin-bottom: 16px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n}\r\n\r\n.form-group {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n\r\n &.flex-grow {\r\n flex: 1;\r\n }\r\n\r\n label {\r\n font-size: 0.9rem;\r\n color: var(--theme-fg-more);\r\n }\r\n\r\n input[type='checkbox'] {\r\n margin-right: 8px;\r\n }\r\n}\r\n\r\n.form-control {\r\n padding: 8px 12px;\r\n border-radius: 6px;\r\n border: 1px solid var(--theme-border);\r\n background: var(--theme-bg-more);\r\n color: var(--theme-fg);\r\n font-size: 0.95rem;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: var(--theme-primary);\r\n }\r\n}\r\n\r\n.color-input {\r\n width: 60px;\r\n height: 36px;\r\n padding: 2px;\r\n cursor: pointer;\r\n}\r\n\r\n.icon-selector {\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 4px;\r\n}\r\n\r\n.icon-option {\r\n width: 36px;\r\n height: 36px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid var(--theme-border);\r\n border-radius: 6px;\r\n background: var(--theme-bg-more);\r\n color: var(--theme-fg-more);\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n\r\n &:hover {\r\n background: var(--theme-bg-more-more);\r\n color: var(--theme-fg);\r\n }\r\n\r\n &.selected {\r\n border-color: var(--theme-primary);\r\n background: var(--theme-primary);\r\n color: white;\r\n }\r\n}\r\n\r\n.form-section {\r\n margin-top: 20px;\r\n\r\n .section-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 12px;\r\n\r\n h5 {\r\n margin: 0;\r\n font-size: 1rem;\r\n }\r\n }\r\n}\r\n\r\n.orientation-toggle {\r\n display: flex;\r\n gap: 8px;\r\n\r\n .btn {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n }\r\n}\r\n\r\n.modal-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 12px;\r\n padding: 16px 20px;\r\n border-top: 1px solid var(--theme-border);\r\n}\r\n"],sourceRoot:""}]);const s=a},33(e,r,t){var n=t(893);n&&n.__esModule&&(n=n.default),e.exports="string"==typeof n?n:n.toString()},182(e){"use strict";e.exports=t},210(e,r,t){var n=t(270);n&&n.__esModule&&(n=n.default),e.exports="string"==typeof n?n:n.toString()},234(e,r,t){t(766),e.exports=function(e){return""+'<div class="workspace-editor-overlay" (click)="onCancel()"><div class="workspace-editor-modal" (click)="$event.stopPropagation()"><div class="modal-header"><h4>{{ workspace.id ? \'Edit\' : \'New\' }} Workspace</h4><button class="btn btn-link close-btn" type="button" (click)="onCancel()"><i class="fas fa-times"></i></button></div><div class="modal-body"><div class="form-row"><div class="form-group flex-grow"><label>Name</label><input class="form-control" type="text" [(ngModel)]="workspace.name" placeholder="Workspace name"></div></div><div class="form-row"><div class="form-group"><label>Icon</label><div class="icon-selector"><button class="icon-option" *ngFor="let icon of availableIcons" type="button" [class.selected]="workspace.icon === icon" (click)="workspace.icon = icon"><i class="fas" [class]=""fa-" + icon"></i></button></div></div><div class="form-group"><label>Color</label><input class="form-control color-input" type="color" [(ngModel)]="workspace.color"></div></div><div class="form-row"><div class="form-group"><label><input type="checkbox" [(ngModel)]="workspace.isDefault"> Launch on startup</label></div></div><div class="form-section"><div class="section-header"><h5>Layout Preview</h5><div class="orientation-toggle"><button class="btn btn-sm" type="button" [class.btn-primary]="workspace.root.orientation === "horizontal"" [class.btn-outline-secondary]="workspace.root.orientation !== "horizontal"" (click)="setOrientation("horizontal")"><i class="fas fa-arrows-alt-h"></i> Horizontal</button><button class="btn btn-sm" type="button" [class.btn-primary]="workspace.root.orientation === "vertical"" [class.btn-outline-secondary]="workspace.root.orientation !== "vertical"" (click)="setOrientation("vertical")"><i class="fas fa-arrows-alt-v"></i> Vertical</button></div></div><split-preview [split]="workspace.root" (paneClick)="selectPane($event)" (splitHorizontal)="splitPane($event, "horizontal")" (splitVertical)="splitPane($event, "vertical")" (removePane)="removePane($event)"></split-preview></div></div><div class="modal-footer"><button class="btn btn-secondary" type="button" (click)="onCancel()">Cancel</button><button class="btn btn-primary" type="button" (click)="onSave()" [disabled]="!workspace.name?.trim()"><i class="fas fa-save"></i> Save Workspace</button></div></div></div><pane-editor *ngIf="showPaneEditor && selectedPane" [pane]="selectedPane" [profiles]="profiles" (save)="onPaneSave($event)" (cancel)="closePaneEditor()"></pane-editor>'}},245(e,r,t){t(766),e.exports=function(e){return""+'<div class="pane-editor-overlay" (click)="onCancel()"><div class="pane-editor-modal" (click)="$event.stopPropagation()"><div class="modal-header"><h4>Edit Pane</h4><button class="btn btn-link close-btn" type="button" (click)="onCancel()"><i class="fas fa-times"></i></button></div><div class="modal-body"><div class="form-group"><label>Base Profile</label><select class="form-control" [(ngModel)]="editedPane.profileId"><option value="">-- Select Profile --</option><option *ngFor="let profile of profiles" [value]="profile.id">{{ profile.name }}</option></select></div><div class="form-group"><label>Working Directory</label><input class="form-control" type="text" [(ngModel)]="editedPane.cwd" placeholder="C:\\path\\to\\project"></div><div class="form-group"><label>Startup Command</label><input class="form-control" type="text" [(ngModel)]="editedPane.startupCommand" placeholder="e.g., npm run dev"><small class="help-text">Command to execute when the pane opens. For Nushell, use commands like: uv run serve</small></div><div class="form-group"><label>Pane Title (optional)</label><input class="form-control" type="text" [(ngModel)]="editedPane.title" placeholder="Custom tab title"></div></div><div class="modal-footer"><button class="btn btn-secondary" type="button" (click)="onCancel()">Cancel</button><button class="btn btn-primary" type="button" (click)="onSave()"><i class="fas fa-check"></i> Apply</button></div></div></div>'}},261(e,r,t){t(766),e.exports=function(e){return""+'<div class="workspace-list-container"><div class="workspace-list-header"><h3>Workspace Editor</h3><button class="btn btn-primary" type="button" (click)="createWorkspace()"><i class="fas fa-plus"></i> New Workspace</button></div><div class="workspace-list" *ngIf="workspaces.length > 0"><div class="workspace-item" *ngFor="let workspace of workspaces"><div class="workspace-info"><div class="workspace-icon" [style.color]="workspace.color"><i class="fas" [class]=""fa-" + (workspace.icon || "columns")"></i></div><div class="workspace-details"><div class="workspace-name">{{ workspace.name }}</div><div class="workspace-meta"><span>{{ getPaneCount(workspace) }} panes</span><span class="separator">·</span><span>{{ getOrientationLabel(workspace) }}</span><span class="separator" *ngIf="workspace.isDefault">·</span><span class="badge badge-primary" *ngIf="workspace.isDefault">default</span></div></div></div><div class="workspace-actions"><button class="btn btn-link" type="button" title="Set as default" (click)="setAsDefault(workspace)" [class.active]="workspace.isDefault"><i class="fas fa-star"></i></button><button class="btn btn-link" type="button" title="Duplicate" (click)="duplicateWorkspace(workspace)"><i class="fas fa-copy"></i></button><button class="btn btn-link" type="button" title="Edit" (click)="editWorkspace(workspace)"><i class="fas fa-edit"></i></button><button class="btn btn-link text-danger" type="button" title="Delete" (click)="deleteWorkspace(workspace)"><i class="fas fa-trash"></i></button></div></div></div><div class="workspace-empty" *ngIf="workspaces.length === 0"><p>No workspaces configured yet.</p><p>Click "New Workspace" to create your first split-layout workspace.</p></div></div><workspace-editor *ngIf="showEditor" [workspace]="editingWorkspace" (save)="onEditorSave($event)" (cancel)="closeEditor()"></workspace-editor>'}},270(e,r,t){"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(354),o=t.n(n),i=t(314),a=t.n(i)()(o());a.push([e.id,".split-preview{display:flex;width:100%;min-height:200px;gap:4px;border-radius:8px;overflow:hidden;background:var(--theme-bg-more);border:1px solid var(--theme-border)}.split-preview.horizontal{flex-direction:row}.split-preview.vertical{flex-direction:column}.preview-pane{display:flex;align-items:center;justify-content:center;background:var(--theme-bg-more-more);border-radius:4px;cursor:pointer;transition:all .2s;position:relative;min-height:80px}.preview-pane:hover{background:var(--theme-primary)}.preview-pane:hover .pane-content{color:#fff}.preview-pane:hover .pane-hint{opacity:1}.pane-content{text-align:center;padding:12px;color:var(--theme-fg)}.pane-label{font-size:.9rem;font-weight:500;margin-bottom:4px}.pane-hint{font-size:.75rem;opacity:.5;transition:opacity .2s}.context-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1200}.context-menu{position:fixed;background:var(--theme-bg);border:1px solid var(--theme-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.3);min-width:160px;padding:4px;z-index:1201}.context-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;border:none;background:none;color:var(--theme-fg);font-size:.9rem;text-align:left;cursor:pointer;border-radius:4px}.context-menu-item:hover{background:var(--theme-bg-more)}.context-menu-item.danger{color:var(--theme-danger, #ef4444)}.context-menu-item.danger:hover{background:rgba(239,68,68,.1)}.context-menu-item i{width:16px;text-align:center;opacity:.7}.context-menu-divider{height:1px;background:var(--theme-border);margin:4px 0}:host{display:flex;flex:1}","",{version:3,sources:["webpack://./src/components/splitPreview.component.scss"],names:[],mappings:"AAAA,eACE,YAAA,CACA,UAAA,CACA,gBAAA,CACA,OAAA,CACA,iBAAA,CACA,eAAA,CACA,+BAAA,CACA,oCAAA,CAEA,0BACE,kBAAA,CAGF,wBACE,qBAAA,CAIJ,cACE,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oCAAA,CACA,iBAAA,CACA,cAAA,CACA,kBAAA,CACA,iBAAA,CACA,eAAA,CAEA,oBACE,+BAAA,CAEA,kCACE,UAAA,CAGF,+BACE,SAAA,CAKN,cACE,iBAAA,CACA,YAAA,CACA,qBAAA,CAGF,YACE,eAAA,CACA,eAAA,CACA,iBAAA,CAGF,WACE,gBAAA,CACA,UAAA,CACA,sBAAA,CAIF,sBACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,YAAA,CAGF,cACE,cAAA,CACA,0BAAA,CACA,oCAAA,CACA,iBAAA,CACA,oCAAA,CACA,eAAA,CACA,WAAA,CACA,YAAA,CAGF,mBACE,YAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,gBAAA,CACA,WAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,iBAAA,CAEA,yBACE,+BAAA,CAGF,0BACE,kCAAA,CAEA,gCACE,6BAAA,CAIJ,qBACE,UAAA,CACA,iBAAA,CACA,UAAA,CAIJ,sBACE,UAAA,CACA,8BAAA,CACA,YAAA,CAIF,MACE,YAAA,CACA,MAAA",sourcesContent:[".split-preview {\r\n display: flex;\r\n width: 100%;\r\n min-height: 200px;\r\n gap: 4px;\r\n border-radius: 8px;\r\n overflow: hidden;\r\n background: var(--theme-bg-more);\r\n border: 1px solid var(--theme-border);\r\n\r\n &.horizontal {\r\n flex-direction: row;\r\n }\r\n\r\n &.vertical {\r\n flex-direction: column;\r\n }\r\n}\r\n\r\n.preview-pane {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: var(--theme-bg-more-more);\r\n border-radius: 4px;\r\n cursor: pointer;\r\n transition: all 0.2s;\r\n position: relative;\r\n min-height: 80px;\r\n\r\n &:hover {\r\n background: var(--theme-primary);\r\n\r\n .pane-content {\r\n color: white;\r\n }\r\n\r\n .pane-hint {\r\n opacity: 1;\r\n }\r\n }\r\n}\r\n\r\n.pane-content {\r\n text-align: center;\r\n padding: 12px;\r\n color: var(--theme-fg);\r\n}\r\n\r\n.pane-label {\r\n font-size: 0.9rem;\r\n font-weight: 500;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.pane-hint {\r\n font-size: 0.75rem;\r\n opacity: 0.5;\r\n transition: opacity 0.2s;\r\n}\r\n\r\n// Context menu\r\n.context-menu-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n z-index: 1200;\r\n}\r\n\r\n.context-menu {\r\n position: fixed;\r\n background: var(--theme-bg);\r\n border: 1px solid var(--theme-border);\r\n border-radius: 8px;\r\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\r\n min-width: 160px;\r\n padding: 4px;\r\n z-index: 1201;\r\n}\r\n\r\n.context-menu-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n width: 100%;\r\n padding: 8px 12px;\r\n border: none;\r\n background: none;\r\n color: var(--theme-fg);\r\n font-size: 0.9rem;\r\n text-align: left;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n\r\n &:hover {\r\n background: var(--theme-bg-more);\r\n }\r\n\r\n &.danger {\r\n color: var(--theme-danger, #ef4444);\r\n\r\n &:hover {\r\n background: rgba(239, 68, 68, 0.1);\r\n }\r\n }\r\n\r\n i {\r\n width: 16px;\r\n text-align: center;\r\n opacity: 0.7;\r\n }\r\n}\r\n\r\n.context-menu-divider {\r\n height: 1px;\r\n background: var(--theme-border);\r\n margin: 4px 0;\r\n}\r\n\r\n// Nested splits styling\r\n:host {\r\n display: flex;\r\n flex: 1;\r\n}\r\n"],sourceRoot:""}]);const s=a},314(e){"use strict";e.exports=function(e){var r=[];return r.toString=function(){return this.map(function(r){var t="",n=void 0!==r[5];return r[4]&&(t+="@supports (".concat(r[4],") {")),r[2]&&(t+="@media ".concat(r[2]," {")),n&&(t+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),t+=e(r),n&&(t+="}"),r[2]&&(t+="}"),r[4]&&(t+="}"),t}).join("")},r.i=function(e,t,n,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(n)for(var s=0;s<this.length;s++){var c=this[s][0];null!=c&&(a[c]=!0)}for(var A=0;A<e.length;A++){var l=[].concat(e[A]);n&&a[l[0]]||(void 0!==i&&(void 0===l[5]||(l[1]="@layer".concat(l[5].length>0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=i),t&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=t):l[2]=t),o&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=o):l[4]="".concat(o)),r.push(l))}},r}},341(e,r,t){var n=t(481);n&&n.__esModule&&(n=n.default),e.exports="string"==typeof n?n:n.toString()},354(e){"use strict";e.exports=function(e){var r=e[1],t=e[3];if(!t)return r;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(o," */");return[r].concat([i]).join("\n")}return[r].join("\n")}},358(e){"use strict";e.exports=r},481(e,r,t){"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(354),o=t.n(n),i=t(314),a=t.n(i)()(o());a.push([e.id,".workspace-list-container{padding:20px;max-width:800px}.workspace-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.workspace-list-header h3{margin:0;font-size:1.5rem}.workspace-list{display:flex;flex-direction:column;gap:12px}.workspace-item{display:flex;justify-content:space-between;align-items:center;padding:16px;background:var(--theme-bg-more);border-radius:8px;border:1px solid var(--theme-border);transition:background .2s}.workspace-item:hover{background:var(--theme-bg-more-more)}.workspace-info{display:flex;align-items:center;gap:16px}.workspace-icon{font-size:24px;width:40px;text-align:center}.workspace-details{display:flex;flex-direction:column;gap:4px}.workspace-name{font-size:1.1rem;font-weight:500}.workspace-meta{font-size:.85rem;color:var(--theme-fg-more)}.workspace-meta .separator{margin:0 6px}.workspace-meta .badge{font-size:.75rem;padding:2px 6px;border-radius:4px;background:var(--theme-primary);color:#fff}.workspace-actions{display:flex;gap:4px}.workspace-actions .btn-link{padding:8px;color:var(--theme-fg-more);opacity:.7;transition:opacity .2s}.workspace-actions .btn-link:hover{opacity:1}.workspace-actions .btn-link.active{color:gold;opacity:1}.workspace-actions .btn-link.text-danger:hover{color:var(--theme-danger)}.workspace-empty{text-align:center;padding:40px;color:var(--theme-fg-more)}.workspace-empty p{margin:8px 0}","",{version:3,sources:["webpack://./src/components/workspaceList.component.scss"],names:[],mappings:"AAAA,0BACE,YAAA,CACA,eAAA,CAGF,uBACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,kBAAA,CAEA,0BACE,QAAA,CACA,gBAAA,CAIJ,gBACE,YAAA,CACA,qBAAA,CACA,QAAA,CAGF,gBACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,YAAA,CACA,+BAAA,CACA,iBAAA,CACA,oCAAA,CACA,yBAAA,CAEA,sBACE,oCAAA,CAIJ,gBACE,YAAA,CACA,kBAAA,CACA,QAAA,CAGF,gBACE,cAAA,CACA,UAAA,CACA,iBAAA,CAGF,mBACE,YAAA,CACA,qBAAA,CACA,OAAA,CAGF,gBACE,gBAAA,CACA,eAAA,CAGF,gBACE,gBAAA,CACA,0BAAA,CAEA,2BACE,YAAA,CAGF,uBACE,gBAAA,CACA,eAAA,CACA,iBAAA,CACA,+BAAA,CACA,UAAA,CAIJ,mBACE,YAAA,CACA,OAAA,CAEA,6BACE,WAAA,CACA,0BAAA,CACA,UAAA,CACA,sBAAA,CAEA,mCACE,SAAA,CAGF,oCACE,UAAA,CACA,SAAA,CAGF,+CACE,yBAAA,CAKN,iBACE,iBAAA,CACA,YAAA,CACA,0BAAA,CAEA,mBACE,YAAA",sourcesContent:[".workspace-list-container {\r\n padding: 20px;\r\n max-width: 800px;\r\n}\r\n\r\n.workspace-list-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n\r\n h3 {\r\n margin: 0;\r\n font-size: 1.5rem;\r\n }\r\n}\r\n\r\n.workspace-list {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 12px;\r\n}\r\n\r\n.workspace-item {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 16px;\r\n background: var(--theme-bg-more);\r\n border-radius: 8px;\r\n border: 1px solid var(--theme-border);\r\n transition: background 0.2s;\r\n\r\n &:hover {\r\n background: var(--theme-bg-more-more);\r\n }\r\n}\r\n\r\n.workspace-info {\r\n display: flex;\r\n align-items: center;\r\n gap: 16px;\r\n}\r\n\r\n.workspace-icon {\r\n font-size: 24px;\r\n width: 40px;\r\n text-align: center;\r\n}\r\n\r\n.workspace-details {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n}\r\n\r\n.workspace-name {\r\n font-size: 1.1rem;\r\n font-weight: 500;\r\n}\r\n\r\n.workspace-meta {\r\n font-size: 0.85rem;\r\n color: var(--theme-fg-more);\r\n\r\n .separator {\r\n margin: 0 6px;\r\n }\r\n\r\n .badge {\r\n font-size: 0.75rem;\r\n padding: 2px 6px;\r\n border-radius: 4px;\r\n background: var(--theme-primary);\r\n color: white;\r\n }\r\n}\r\n\r\n.workspace-actions {\r\n display: flex;\r\n gap: 4px;\r\n\r\n .btn-link {\r\n padding: 8px;\r\n color: var(--theme-fg-more);\r\n opacity: 0.7;\r\n transition: opacity 0.2s;\r\n\r\n &:hover {\r\n opacity: 1;\r\n }\r\n\r\n &.active {\r\n color: gold;\r\n opacity: 1;\r\n }\r\n\r\n &.text-danger:hover {\r\n color: var(--theme-danger);\r\n }\r\n }\r\n}\r\n\r\n.workspace-empty {\r\n text-align: center;\r\n padding: 40px;\r\n color: var(--theme-fg-more);\r\n\r\n p {\r\n margin: 8px 0;\r\n }\r\n}\r\n"],sourceRoot:""}]);const s=a},528(e,r,t){t(766),e.exports=function(e){return""+'<div class="split-preview" [class.horizontal]="split.orientation === "horizontal"" [class.vertical]="split.orientation === "vertical""><ng-container *ngFor="let child of split.children; let i = index"><div class="preview-pane" *ngIf="isPane(child)" [style.flex-basis]="getFlexStyle(i)" (click)="onPaneClick(asPane(child))" (contextmenu)="onContextMenu($event, asPane(child))"><div class="pane-content"><div class="pane-label">{{ getPaneLabel(asPane(child)) }}</div><div class="pane-hint">Click to edit</div></div></div><split-preview *ngIf="isSplit(child)" [split]="asSplit(child)" [depth]="depth + 1" [style.flex-basis]="getFlexStyle(i)" (paneClick)="onNestedPaneClick($event)" (splitHorizontal)="onNestedSplitH($event)" (splitVertical)="onNestedSplitV($event)" (removePane)="onNestedRemove($event)"></split-preview></ng-container></div><div class="context-menu-overlay" *ngIf="contextMenuPane" (click)="closeContextMenu()"><div class="context-menu" [style.left.px]="contextMenuPosition.x" [style.top.px]="contextMenuPosition.y" (click)="$event.stopPropagation()"><button class="context-menu-item" type="button" (click)="onSplitH()"><i class="fas fa-arrows-alt-h"></i> Split Horizontal</button><button class="context-menu-item" type="button" (click)="onSplitV()"><i class="fas fa-arrows-alt-v"></i> Split Vertical</button><div class="context-menu-divider"></div><button class="context-menu-item danger" type="button" (click)="onRemove()"><i class="fas fa-trash"></i> Remove Pane</button></div></div>'}},581(e,r,t){var n=t(528);e.exports=(n.default||n).apply(n,[])},650(e){"use strict";e.exports=n},700(e){"use strict";e.exports=o},766(e,r,t){"use strict";var n=Object.prototype.hasOwnProperty;function o(e,r){return Array.isArray(e)?function(e,r){for(var t,n="",i="",a=Array.isArray(r),s=0;s<e.length;s++)(t=o(e[s]))&&(a&&r[s]&&(t=c(t)),n=n+i+t,i=" ");return n}(e,r):e&&"object"==typeof e?function(e){var r="",t="";for(var o in e)o&&e[o]&&n.call(e,o)&&(r=r+t+o,t=" ");return r}(e):e||""}function i(e){if(!e)return"";if("object"==typeof e){var r="";for(var t in e)n.call(e,t)&&(r=r+t+":"+e[t]+";");return r}return e+""}function a(e,r,t,n){if(!1===r||null==r||!r&&("class"===e||"style"===e))return"";if(!0===r)return" "+(n?e:e+'="'+e+'"');var o=typeof r;return"object"!==o&&"function"!==o||"function"!=typeof r.toJSON||(r=r.toJSON()),"string"==typeof r||(r=JSON.stringify(r),t||-1===r.indexOf('"'))?(t&&(r=c(r))," "+e+'="'+r+'"'):" "+e+"='"+r.replace(/'/g,"'")+"'"}r.merge=function e(r,t){if(1===arguments.length){for(var n=r[0],o=1;o<r.length;o++)n=e(n,r[o]);return n}for(var a in t)if("class"===a){var s=r[a]||[];r[a]=(Array.isArray(s)?s:[s]).concat(t[a]||[])}else if("style"===a){s=(s=i(r[a]))&&";"!==s[s.length-1]?s+";":s;var c=i(t[a]);c=c&&";"!==c[c.length-1]?c+";":c,r[a]=s+c}else r[a]=t[a];return r},r.classes=o,r.style=i,r.attr=a,r.attrs=function(e,r){var t="";for(var s in e)if(n.call(e,s)){var c=e[s];if("class"===s){t=a(s,c=o(c),!1,r)+t;continue}"style"===s&&(c=i(c)),t+=a(s,c,!1,r)}return t};var s=/["&<>]/;function c(e){var r=""+e,t=s.exec(r);if(!t)return e;var n,o,i,a="";for(n=t.index,o=0;n<r.length;n++){switch(r.charCodeAt(n)){case 34:i=""";break;case 38:i="&";break;case 60:i="<";break;case 62:i=">";break;default:continue}o!==n&&(a+=r.substring(o,n)),o=n+1,a+=i}return o!==n?a+r.substring(o,n):a}r.escape=c,r.rethrow=function e(r,n,o,i){if(!(r instanceof Error))throw r;if(!("undefined"==typeof window&&n||i))throw r.message+=" on line "+o,r;var a,s,c,A;try{i=i||t(947).readFileSync(n,{encoding:"utf8"}),a=3,s=i.split("\n"),c=Math.max(o-a,0),A=Math.min(s.length,o+a)}catch(t){return r.message+=" - could not read from "+n+" ("+t.message+")",void e(r,null,o)}a=s.slice(c,A).map(function(e,r){var t=r+c+1;return(t==o?" > ":" ")+t+"| "+e}).join("\n"),r.path=n;try{r.message=(n||"Pug")+":"+o+"\n"+a+"\n\n"+r.message}catch(e){}throw r}},801(e,r,t){var n=t(234);e.exports=(n.default||n).apply(n,[])},840(e,r,t){var n=t(28);n&&n.__esModule&&(n=n.default),e.exports="string"==typeof n?n:n.toString()},860(r){"use strict";r.exports=e},864(e,r,t){var n=t(245);e.exports=(n.default||n).apply(n,[])},893(e,r,t){"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(354),o=t.n(n),i=t(314),a=t.n(i)()(o());a.push([e.id,".pane-editor-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:1100}.pane-editor-modal{background:var(--theme-bg);border-radius:12px;width:90%;max-width:500px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.4)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--theme-border)}.modal-header h4{margin:0;font-size:1.15rem}.modal-header .close-btn{font-size:1.15rem;color:var(--theme-fg-more);padding:4px 8px}.modal-header .close-btn:hover{color:var(--theme-fg)}.modal-body{padding:20px;overflow-y:auto;flex:1}.form-group{margin-bottom:16px}.form-group:last-child{margin-bottom:0}.form-group label{display:block;margin-bottom:6px;font-size:.9rem;color:var(--theme-fg-more)}.form-control{width:100%;padding:10px 12px;border-radius:6px;border:1px solid var(--theme-border);background:var(--theme-bg-more);color:var(--theme-fg);font-size:.95rem}.form-control:focus{outline:none;border-color:var(--theme-primary)}select.form-control{cursor:pointer}.input-with-button{display:flex;gap:8px}.input-with-button input{flex:1}.help-text{display:block;margin-top:4px;font-size:.8rem;color:var(--theme-fg-more);opacity:.8}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid var(--theme-border)}","",{version:3,sources:["webpack://./src/components/paneEditor.component.scss"],names:[],mappings:"AAAA,qBACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,yBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,YAAA,CAGF,mBACE,0BAAA,CACA,kBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,qCAAA,CAGF,cACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,iBAAA,CACA,2CAAA,CAEA,iBACE,QAAA,CACA,iBAAA,CAGF,yBACE,iBAAA,CACA,0BAAA,CACA,eAAA,CAEA,+BACE,qBAAA,CAKN,YACE,YAAA,CACA,eAAA,CACA,MAAA,CAGF,YACE,kBAAA,CAEA,uBACE,eAAA,CAGF,kBACE,aAAA,CACA,iBAAA,CACA,eAAA,CACA,0BAAA,CAIJ,cACE,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,oCAAA,CACA,+BAAA,CACA,qBAAA,CACA,gBAAA,CAEA,oBACE,YAAA,CACA,iCAAA,CAIJ,oBACE,cAAA,CAGF,mBACE,YAAA,CACA,OAAA,CAEA,yBACE,MAAA,CAIJ,WACE,aAAA,CACA,cAAA,CACA,eAAA,CACA,0BAAA,CACA,UAAA,CAGF,cACE,YAAA,CACA,wBAAA,CACA,QAAA,CACA,iBAAA,CACA,wCAAA",sourcesContent:[".pane-editor-overlay {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n background: rgba(0, 0, 0, 0.7);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 1100;\r\n}\r\n\r\n.pane-editor-modal {\r\n background: var(--theme-bg);\r\n border-radius: 12px;\r\n width: 90%;\r\n max-width: 500px;\r\n max-height: 80vh;\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);\r\n}\r\n\r\n.modal-header {\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n padding: 16px 20px;\r\n border-bottom: 1px solid var(--theme-border);\r\n\r\n h4 {\r\n margin: 0;\r\n font-size: 1.15rem;\r\n }\r\n\r\n .close-btn {\r\n font-size: 1.15rem;\r\n color: var(--theme-fg-more);\r\n padding: 4px 8px;\r\n\r\n &:hover {\r\n color: var(--theme-fg);\r\n }\r\n }\r\n}\r\n\r\n.modal-body {\r\n padding: 20px;\r\n overflow-y: auto;\r\n flex: 1;\r\n}\r\n\r\n.form-group {\r\n margin-bottom: 16px;\r\n\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n\r\n label {\r\n display: block;\r\n margin-bottom: 6px;\r\n font-size: 0.9rem;\r\n color: var(--theme-fg-more);\r\n }\r\n}\r\n\r\n.form-control {\r\n width: 100%;\r\n padding: 10px 12px;\r\n border-radius: 6px;\r\n border: 1px solid var(--theme-border);\r\n background: var(--theme-bg-more);\r\n color: var(--theme-fg);\r\n font-size: 0.95rem;\r\n\r\n &:focus {\r\n outline: none;\r\n border-color: var(--theme-primary);\r\n }\r\n}\r\n\r\nselect.form-control {\r\n cursor: pointer;\r\n}\r\n\r\n.input-with-button {\r\n display: flex;\r\n gap: 8px;\r\n\r\n input {\r\n flex: 1;\r\n }\r\n}\r\n\r\n.help-text {\r\n display: block;\r\n margin-top: 4px;\r\n font-size: 0.8rem;\r\n color: var(--theme-fg-more);\r\n opacity: 0.8;\r\n}\r\n\r\n.modal-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 12px;\r\n padding: 16px 20px;\r\n border-top: 1px solid var(--theme-border);\r\n}\r\n"],sourceRoot:""}]);const s=a},947(e){"use strict";if(void 0===i){var r=new Error("Cannot find module 'fs'");throw r.code="MODULE_NOT_FOUND",r}e.exports=i},958(e,r,t){var n=t(261);e.exports=(n.default||n).apply(n,[])}},s={};function c(e){var r=s[e];if(void 0!==r)return r.exports;if(void 0===a[e]){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}var n=s[e]={id:e,exports:{}};return a[e](n,n.exports,c),n.exports}c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var A={};return(()=>{"use strict";c.r(A),c.d(A,{WorkspaceEditorConfigProvider:()=>s,WorkspaceEditorService:()=>m,WorkspaceEditorSettingsProvider:()=>g,default:()=>j});var e=c(860),r=c(358),t=c(182),n=c(650),o=c(700);const i="tabbyspaces",a="TabbySpaces";let s=class extends n.ConfigProvider{constructor(){super(...arguments),this.defaults={[i]:{workspaces:[]}}}};function l(e){return"orientation"in e&&"children"in e}function p(){return{id:f(),profileId:"",cwd:"",startupCommand:"",title:""}}function d(e="horizontal"){return{orientation:e,ratios:[.5,.5],children:[p(),p()]}}function f(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const r=16*Math.random()|0;return("x"===e?r:3&r|8).toString(16)})}function u(e){return l(e)?e.children.reduce((e,r)=>e+u(r),0):1}s=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.Injectable)()],s);let m=class{constructor(e,r,t){this.config=e,this.notifications=r,this.profilesService=t}getWorkspaces(){return this.config.store[i]?.workspaces??[]}async saveWorkspaces(e){return this.config.store[i].workspaces=e,this.syncTabbyProfiles(e),await this.saveConfig()}async addWorkspace(e){const r=this.getWorkspaces();r.push(e),await this.saveWorkspaces(r),this.notifications.info(`Workspace "${e.name}" created`)}async updateWorkspace(e){const r=this.getWorkspaces(),t=r.findIndex(r=>r.id===e.id);-1!==t&&(r[t]=e,await this.saveWorkspaces(r),this.notifications.info(`Workspace "${e.name}" updated`))}async deleteWorkspace(e){const r=this.getWorkspaces(),t=r.find(r=>r.id===e),n=r.filter(r=>r.id!==e);await this.saveWorkspaces(n),t&&this.notifications.info(`Workspace "${t.name}" deleted`)}async getAvailableProfiles(){return(await this.profilesService.getProfiles()).filter(e=>"local"===e.type&&!e.id?.startsWith("split-layout:"))}syncTabbyProfiles(e){const r=this.config.store.profiles??[];for(let e=r.length-1;e>=0;e--)r[e].id?.startsWith(`split-layout:${i}:`)&&r.splice(e,1);for(const t of e){const e=this.generateTabbyProfile(t);r.push(e)}}generateTabbyProfile(e){const r=this.sanitizeForProfileId(e.name);return{id:`split-layout:${i}:${r}:${e.id}`,type:"split-layout",name:e.name,group:a,icon:e.icon,color:e.color,isBuiltin:!1,options:{recoveryToken:this.generateRecoveryToken(e.root)}}}generateRecoveryToken(e){return{type:"app:split-tab",orientation:"horizontal"===e.orientation?"h":"v",ratios:e.ratios,children:e.children.map(e=>l(e)?this.generateRecoveryToken(e):this.generatePaneToken(e))}}generatePaneToken(e){const r=this.getProfileById(e.profileId);if(!r)return{type:"app:local-tab",profile:{type:"local",name:"Shell"},savedState:!1};const t={restoreFromPTYID:!1,command:r.options?.command||"",args:r.options?.args||[],cwd:e.cwd||r.options?.cwd||"",env:r.options?.env||{},width:null,height:null,pauseAfterExit:!1,runAsAdministrator:!1};if(e.startupCommand){const n=r.options?.command||"";n.includes("nu.exe")||r.name?.toLowerCase().includes("nushell")?t.args=["-e",e.startupCommand]:n.includes("powershell")||n.includes("pwsh")?t.args=["-NoExit","-Command",e.startupCommand]:n.includes("cmd.exe")?t.args=["/K",e.startupCommand]:t.args=["-c",e.startupCommand]}return{type:"app:local-tab",profile:{id:r.id,type:"local",name:r.name||"Shell",group:r.group||"",options:t,icon:r.icon||"",color:r.color||"",disableDynamicTitle:!1,weight:0,isBuiltin:!1,isTemplate:!1,terminalColorScheme:null,behaviorOnSessionEnd:"auto"},savedState:!1,tabTitle:e.title||"",tabCustomTitle:e.title||"",disableDynamicTitle:!!e.title}}duplicateWorkspace(e){const r=JSON.parse(JSON.stringify(e));return r.id=f(),r.name=`${e.name} (Copy)`,r.isDefault=!1,this.regenerateIds(r.root),r}regenerateIds(e){if(l(e))for(const r of e.children)this.regenerateIds(r);else e.id=f()}sanitizeForProfileId(e){return e.toLowerCase().replace(/[^a-z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"workspace"}getProfileById(e){return(this.config.store.profiles??[]).find(r=>r.id===e&&"local"===r.type)}getProfileName(e){return this.getProfileById(e)?.name}async saveConfig(){try{return await this.config.save(),!0}catch(e){return this.notifications.error("Failed to save configuration"),console.error("TabbySpaces save error:",e),!1}}};m=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.Injectable)({providedIn:"root"}),function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)}("design:paramtypes",[n.ConfigService,n.NotificationsService,n.ProfilesService])],m);let C=class{constructor(e,r,t){this.config=e,this.workspaceService=r,this.cdr=t,this.workspaces=[],this.editingWorkspace=null,this.showEditor=!1,this.configSubscription=null}ngOnInit(){this.loadWorkspaces(),this.configSubscription=this.config.changed$.subscribe(()=>{this.loadWorkspaces()})}ngOnDestroy(){this.configSubscription?.unsubscribe()}loadWorkspaces(){this.workspaces=this.workspaceService.getWorkspaces(),this.cdr.detectChanges()}async createWorkspace(){const e=await this.workspaceService.getAvailableProfiles(),r=e[0]?.id||"",t=function(e="New Workspace"){return{id:f(),name:e,icon:"columns",color:"#3b82f6",root:d(),isDefault:!1}}();this.setProfileForAllPanes(t.root,r),this.editingWorkspace=t,this.showEditor=!0}setProfileForAllPanes(e,r){l(e)?e.children.forEach(e=>this.setProfileForAllPanes(e,r)):e.profileId=r}editWorkspace(e){this.editingWorkspace=JSON.parse(JSON.stringify(e)),this.showEditor=!0}async duplicateWorkspace(e){const r=this.workspaceService.duplicateWorkspace(e);await this.workspaceService.addWorkspace(r),this.loadWorkspaces()}async deleteWorkspace(e){console.log("[TabbySpaces] deleteWorkspace called",e.id),confirm(`Delete workspace "${e.name}"?`)&&(console.log("[TabbySpaces] confirm = true, calling service.deleteWorkspace"),await this.workspaceService.deleteWorkspace(e.id),console.log("[TabbySpaces] service.deleteWorkspace done, calling loadWorkspaces"),this.loadWorkspaces(),console.log("[TabbySpaces] loadWorkspaces done, workspaces:",this.workspaces.length))}async onEditorSave(e){console.log("[TabbySpaces] onEditorSave called",e.id,e.name);const r=this.workspaces.find(r=>r.id===e.id);console.log("[TabbySpaces] existing workspace?",!!r),r?await this.workspaceService.updateWorkspace(e):await this.workspaceService.addWorkspace(e),console.log("[TabbySpaces] save done, calling loadWorkspaces"),this.loadWorkspaces(),console.log("[TabbySpaces] calling closeEditor"),this.closeEditor(),console.log("[TabbySpaces] closeEditor done, showEditor:",this.showEditor)}closeEditor(){console.log("[TabbySpaces] closeEditor called, showEditor before:",this.showEditor),this.showEditor=!1,this.editingWorkspace=null,this.cdr.detectChanges(),console.log("[TabbySpaces] closeEditor done, showEditor after:",this.showEditor)}getPaneCount(e){return u(e.root)}getOrientationLabel(e){return"horizontal"===e.root.orientation?"horizontal":"vertical"}async setAsDefault(e){this.workspaces.forEach(e=>e.isDefault=!1),e.isDefault=!0,await this.workspaceService.saveWorkspaces(this.workspaces),this.loadWorkspaces()}};C=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.Component)({selector:"workspace-list",template:c(958),styles:[c(341)]}),function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)}("design:paramtypes",[n.ConfigService,m,e.ChangeDetectorRef])],C);let g=class extends o.SettingsTabProvider{constructor(){super(...arguments),this.id=i,this.icon="columns",this.title=a}getComponentType(){return C}};g=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.Injectable)()],g);let h=class extends n.ToolbarButtonProvider{constructor(e,r,t){super(),this.workspaceService=e,this.profilesService=r,this.app=t}provide(){return[{icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <rect x="3" y="3" width="7" height="7"/>\n <rect x="14" y="3" width="7" height="7"/>\n <rect x="14" y="14" width="7" height="7"/>\n <rect x="3" y="14" width="7" height="7"/>\n </svg>',title:a,weight:5,click:()=>this.showWorkspaceSelector()}]}async showWorkspaceSelector(){const e=this.workspaceService.getWorkspaces();if(0===e.length)return void this.openSettings();const r=e.map(e=>({name:e.name,description:`${u(e.root)} panes`,icon:e.icon||"grid",color:e.color,result:e.id}));r.push({name:"Manage Workspaces...",description:"Create and edit workspaces",icon:"cog",color:void 0,result:"__settings__"});const t=await this.app.showSelector("Select Workspace",r);"__settings__"===t?this.openSettings():t&&this.openWorkspace(t)}openSettings(){this.app.openNewTabRaw({type:o.SettingsTabComponent,inputs:{activeTab:i}})}openWorkspace(e){const r=this.workspaceService.getWorkspaces().find(r=>r.id===e);if(!r)return;const t=this.workspaceService.generateTabbyProfile(r);this.profilesService.openNewTabForProfile(t)}};h=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.Injectable)(),function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)}("design:paramtypes",[m,n.ProfilesService,n.AppService])],h);var b=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a},v=function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)};let x=class{constructor(r){this.workspaceService=r,this.save=new e.EventEmitter,this.cancel=new e.EventEmitter,this.selectedPane=null,this.showPaneEditor=!1,this.profiles=[],this.availableIcons=["columns","terminal","code","folder","home","briefcase","cog","database","server","cloud","rocket","flask","bug","wrench","cube","layer-group","sitemap","project-diagram"]}async ngOnInit(){this.profiles=await this.workspaceService.getAvailableProfiles(),this.workspace.root||(this.workspace.root={orientation:"horizontal",ratios:[.5,.5],children:[p(),p()]})}onSave(){this.workspace.name?.trim()&&this.save.emit(this.workspace)}onCancel(){this.cancel.emit()}selectPane(e){this.selectedPane=e,this.showPaneEditor=!0}closePaneEditor(){this.showPaneEditor=!1,this.selectedPane=null}onPaneSave(e){this.updatePaneInTree(this.workspace.root,e),this.closePaneEditor()}updatePaneInTree(e,r){for(let t=0;t<e.children.length;t++){const n=e.children[t];if(l(n)){if(this.updatePaneInTree(n,r))return!0}else if(n.id===r.id)return e.children[t]=r,!0}return!1}splitPane(e,r){this.splitPaneInTree(this.workspace.root,e,r)}splitPaneInTree(e,r,t){for(let n=0;n<e.children.length;n++){const o=e.children[n];if(l(o)){if(this.splitPaneInTree(o,r,t))return!0}else if(o.id===r.id){const r=p();r.profileId=o.profileId;const i={orientation:t,ratios:[.5,.5],children:[o,r]};return e.children[n]=i,this.recalculateRatios(e),!0}}return!1}removePane(e){this.removePaneFromTree(this.workspace.root,e)}removePaneFromTree(e,r){for(let t=0;t<e.children.length;t++){const n=e.children[t];if(l(n)){const o=n.children.findIndex(e=>!l(e)&&e.id===r.id);if(-1!==o&&n.children.length>1)return n.children.splice(o,1),this.recalculateRatios(n),1===n.children.length&&(e.children[t]=n.children[0]),!0;if(this.removePaneFromTree(n,r))return!0}else if(n.id===r.id&&e.children.length>1)return e.children.splice(t,1),this.recalculateRatios(e),!0}return!1}recalculateRatios(e){const r=e.children.length;e.ratios=e.children.map(()=>1/r)}setOrientation(e){this.workspace.root.orientation=e}updateRatio(e,r){const t=[...this.workspace.root.ratios],n=r-t[e];e<t.length-1?(t[e]=r,t[e+1]-=n):(t[e]=r,t[e-1]-=n),t.forEach((e,r)=>{t[r]=Math.max(.1,Math.min(.9,e))}),this.workspace.root.ratios=t}};b([(0,e.Input)(),v("design:type",Object)],x.prototype,"workspace",void 0),b([(0,e.Output)(),v("design:type",Object)],x.prototype,"save",void 0),b([(0,e.Output)(),v("design:type",Object)],x.prototype,"cancel",void 0),x=b([(0,e.Component)({selector:"workspace-editor",template:c(801),styles:[c(840)]}),v("design:paramtypes",[m])],x);var y=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a},k=function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)};let w=class{constructor(){this.profiles=[],this.save=new e.EventEmitter,this.cancel=new e.EventEmitter}ngOnInit(){this.editedPane={...this.pane}}onSave(){this.save.emit(this.editedPane)}onCancel(){this.cancel.emit()}getProfileName(e){const r=this.profiles.find(r=>r.id===e);return r?.name??"Unknown"}};y([(0,e.Input)(),k("design:type",Object)],w.prototype,"pane",void 0),y([(0,e.Input)(),k("design:type",Array)],w.prototype,"profiles",void 0),y([(0,e.Output)(),k("design:type",Object)],w.prototype,"save",void 0),y([(0,e.Output)(),k("design:type",Object)],w.prototype,"cancel",void 0),w=y([(0,e.Component)({selector:"pane-editor",template:c(864),styles:[c(33)]})],w);var B=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a},E=function(e,r){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,r)};let P=class{constructor(r){this.workspaceService=r,this.depth=0,this.paneClick=new e.EventEmitter,this.splitHorizontal=new e.EventEmitter,this.splitVertical=new e.EventEmitter,this.removePane=new e.EventEmitter,this.contextMenuPane=null,this.contextMenuPosition={x:0,y:0}}isPane(e){return!l(e)}isSplit(e){return l(e)}asSplit(e){return e}asPane(e){return e}getFlexStyle(e){return 100*this.split.ratios[e]+"%"}onPaneClick(e){this.paneClick.emit(e)}onContextMenu(e,r){e.preventDefault(),this.contextMenuPane=r,this.contextMenuPosition={x:e.clientX,y:e.clientY}}closeContextMenu(){this.contextMenuPane=null}onSplitH(){this.contextMenuPane&&(this.splitHorizontal.emit(this.contextMenuPane),this.closeContextMenu())}onSplitV(){this.contextMenuPane&&(this.splitVertical.emit(this.contextMenuPane),this.closeContextMenu())}onRemove(){this.contextMenuPane&&(this.removePane.emit(this.contextMenuPane),this.closeContextMenu())}getProfileName(e){return this.workspaceService.getProfileName(e)??"Select profile"}getPaneLabel(e){if(e.title)return e.title;if(e.startupCommand){const r=e.startupCommand;return r.length>20?r.substring(0,17)+"...":r}return this.getProfileName(e.profileId)}onNestedPaneClick(e){this.paneClick.emit(e)}onNestedSplitH(e){this.splitHorizontal.emit(e)}onNestedSplitV(e){this.splitVertical.emit(e)}onNestedRemove(e){this.removePane.emit(e)}};B([(0,e.Input)(),E("design:type",Object)],P.prototype,"split",void 0),B([(0,e.Input)(),E("design:type",Object)],P.prototype,"depth",void 0),B([(0,e.Output)(),E("design:type",Object)],P.prototype,"paneClick",void 0),B([(0,e.Output)(),E("design:type",Object)],P.prototype,"splitHorizontal",void 0),B([(0,e.Output)(),E("design:type",Object)],P.prototype,"splitVertical",void 0),B([(0,e.Output)(),E("design:type",Object)],P.prototype,"removePane",void 0),P=B([(0,e.Component)({selector:"split-preview",template:c(581),styles:[c(210)]}),E("design:paramtypes",[m])],P);let S=class{};S=function(e,r,t,n){var o,i=arguments.length,a=i<3?r:null===n?n=Object.getOwnPropertyDescriptor(r,t):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,r,t,n);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(r,t,a):o(r,t))||a);return i>3&&a&&Object.defineProperty(r,t,a),a}([(0,e.NgModule)({imports:[r.CommonModule,t.FormsModule],providers:[{provide:n.ConfigProvider,useClass:s,multi:!0},{provide:o.SettingsTabProvider,useClass:g,multi:!0},{provide:n.ToolbarButtonProvider,useClass:h,multi:!0},m],declarations:[C,x,w,P]})],S);const j=S})(),A})());
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./paneEditor.component.scss */
|
|
2
|
+
|
|
3
|
+
/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./splitPreview.component.scss */
|
|
4
|
+
|
|
5
|
+
/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./workspaceEditor.component.scss */
|
|
6
|
+
|
|
7
|
+
/*! !!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./workspaceList.component.scss */
|
|
8
|
+
|
|
9
|
+
/*! !!./node_modules/pug-loader/index.js!./src/components/paneEditor.component.pug */
|
|
10
|
+
|
|
11
|
+
/*! !!./node_modules/pug-loader/index.js!./src/components/splitPreview.component.pug */
|
|
12
|
+
|
|
13
|
+
/*! !!./node_modules/pug-loader/index.js!./src/components/workspaceEditor.component.pug */
|
|
14
|
+
|
|
15
|
+
/*! !!./node_modules/pug-loader/index.js!./src/components/workspaceList.component.pug */
|
|
16
|
+
|
|
17
|
+
/*! !../../node_modules/pug-runtime/index.js */
|
|
18
|
+
|
|
19
|
+
/*! ../../node_modules/css-loader/dist/runtime/api.js */
|
|
20
|
+
|
|
21
|
+
/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */
|
|
22
|
+
|
|
23
|
+
/*! ./paneEditor.component.pug */
|
|
24
|
+
|
|
25
|
+
/*! ./paneEditor.component.scss */
|
|
26
|
+
|
|
27
|
+
/*! ./splitPreview.component.pug */
|
|
28
|
+
|
|
29
|
+
/*! ./splitPreview.component.scss */
|
|
30
|
+
|
|
31
|
+
/*! ./workspaceEditor.component.pug */
|
|
32
|
+
|
|
33
|
+
/*! ./workspaceEditor.component.scss */
|
|
34
|
+
|
|
35
|
+
/*! ./workspaceList.component.pug */
|
|
36
|
+
|
|
37
|
+
/*! ./workspaceList.component.scss */
|
|
38
|
+
|
|
39
|
+
/*! fs */
|
|
40
|
+
|
|
41
|
+
/*!***********************************!*\
|
|
42
|
+
!*** ./src/index.ts + 10 modules ***!
|
|
43
|
+
\***********************************/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","mappings":"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","sources":["webpack://tabby-tabbyspaces/webpack/universalModuleDefinition","webpack://tabby-tabbyspaces/./src/components/workspaceEditor.component.scss","webpack://tabby-tabbyspaces/./src/components/paneEditor.component.scss?5edd","webpack://tabby-tabbyspaces/external umd \"@angular/forms\"","webpack://tabby-tabbyspaces/./src/components/splitPreview.component.scss?0de1","webpack://tabby-tabbyspaces/./src/components/workspaceEditor.component.pug","webpack://tabby-tabbyspaces/./src/components/paneEditor.component.pug","webpack://tabby-tabbyspaces/./src/components/workspaceList.component.pug","webpack://tabby-tabbyspaces/./src/components/splitPreview.component.scss","webpack://tabby-tabbyspaces/./node_modules/css-loader/dist/runtime/api.js","webpack://tabby-tabbyspaces/./src/components/workspaceList.component.scss?e911","webpack://tabby-tabbyspaces/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tabby-tabbyspaces/external umd \"@angular/common\"","webpack://tabby-tabbyspaces/./src/components/workspaceList.component.scss","webpack://tabby-tabbyspaces/./src/components/splitPreview.component.pug","webpack://tabby-tabbyspaces/./src/components/splitPreview.component.pug?8802","webpack://tabby-tabbyspaces/external umd \"tabby-core\"","webpack://tabby-tabbyspaces/external umd \"tabby-settings\"","webpack://tabby-tabbyspaces/./node_modules/pug-runtime/index.js","webpack://tabby-tabbyspaces/./src/components/workspaceEditor.component.pug?b08a","webpack://tabby-tabbyspaces/./src/components/workspaceEditor.component.scss?c31e","webpack://tabby-tabbyspaces/external umd \"@angular/core\"","webpack://tabby-tabbyspaces/./src/components/paneEditor.component.pug?4d23","webpack://tabby-tabbyspaces/./src/components/paneEditor.component.scss","webpack://tabby-tabbyspaces/external umd \"fs\"","webpack://tabby-tabbyspaces/./src/components/workspaceList.component.pug?e89b","webpack://tabby-tabbyspaces/webpack/bootstrap","webpack://tabby-tabbyspaces/webpack/runtime/compat get default export","webpack://tabby-tabbyspaces/webpack/runtime/define property getters","webpack://tabby-tabbyspaces/webpack/runtime/hasOwnProperty shorthand","webpack://tabby-tabbyspaces/webpack/runtime/make namespace object","webpack://tabby-tabbyspaces/./src/build-config.ts","webpack://tabby-tabbyspaces/./src/providers/config.provider.ts","webpack://tabby-tabbyspaces/./src/models/workspace.model.ts","webpack://tabby-tabbyspaces/./src/services/workspaceEditor.service.ts","webpack://tabby-tabbyspaces/./src/components/workspaceList.component.ts","webpack://tabby-tabbyspaces/./src/providers/settings.provider.ts","webpack://tabby-tabbyspaces/./src/providers/toolbar.provider.ts","webpack://tabby-tabbyspaces/./src/components/workspaceEditor.component.ts","webpack://tabby-tabbyspaces/./src/components/paneEditor.component.ts","webpack://tabby-tabbyspaces/./src/components/splitPreview.component.ts","webpack://tabby-tabbyspaces/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@angular/core\"), require(\"@angular/common\"), require(\"@angular/forms\"), require(\"tabby-core\"), require(\"tabby-settings\"), (function webpackLoadOptionalExternalModule() { try { return require(\"fs\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@angular/core\", \"@angular/common\", \"@angular/forms\", \"tabby-core\", \"tabby-settings\", \"fs\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"@angular/core\"), require(\"@angular/common\"), require(\"@angular/forms\"), require(\"tabby-core\"), require(\"tabby-settings\"), (function webpackLoadOptionalExternalModule() { try { return require(\"fs\"); } catch(e) {} }())) : factory(root[\"@angular/core\"], root[\"@angular/common\"], root[\"@angular/forms\"], root[\"tabby-core\"], root[\"tabby-settings\"], root[\"fs\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(global, (__WEBPACK_EXTERNAL_MODULE__860__, __WEBPACK_EXTERNAL_MODULE__358__, __WEBPACK_EXTERNAL_MODULE__182__, __WEBPACK_EXTERNAL_MODULE__650__, __WEBPACK_EXTERNAL_MODULE__700__, __WEBPACK_EXTERNAL_MODULE__947__) => {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.workspace-editor-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:1000}.workspace-editor-modal{background:var(--theme-bg);border-radius:12px;width:90%;max-width:700px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.4)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--theme-border)}.modal-header h4{margin:0;font-size:1.25rem}.modal-header .close-btn{font-size:1.25rem;color:var(--theme-fg-more);padding:4px 8px}.modal-header .close-btn:hover{color:var(--theme-fg)}.modal-body{padding:20px;overflow-y:auto;flex:1}.form-row{display:flex;gap:16px;margin-bottom:16px}.form-row:last-child{margin-bottom:0}.form-group{display:flex;flex-direction:column;gap:6px}.form-group.flex-grow{flex:1}.form-group label{font-size:.9rem;color:var(--theme-fg-more)}.form-group input[type=checkbox]{margin-right:8px}.form-control{padding:8px 12px;border-radius:6px;border:1px solid var(--theme-border);background:var(--theme-bg-more);color:var(--theme-fg);font-size:.95rem}.form-control:focus{outline:none;border-color:var(--theme-primary)}.color-input{width:60px;height:36px;padding:2px;cursor:pointer}.icon-selector{display:flex;flex-wrap:wrap;gap:4px}.icon-option{width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid var(--theme-border);border-radius:6px;background:var(--theme-bg-more);color:var(--theme-fg-more);cursor:pointer;transition:all .2s}.icon-option:hover{background:var(--theme-bg-more-more);color:var(--theme-fg)}.icon-option.selected{border-color:var(--theme-primary);background:var(--theme-primary);color:#fff}.form-section{margin-top:20px}.form-section .section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.form-section .section-header h5{margin:0;font-size:1rem}.orientation-toggle{display:flex;gap:8px}.orientation-toggle .btn{display:flex;align-items:center;gap:6px}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid var(--theme-border)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/workspaceEditor.component.scss\"],\"names\":[],\"mappings\":\"AAAA,0BACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,yBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,YAAA,CAGF,wBACE,0BAAA,CACA,kBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,qCAAA,CAGF,cACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,iBAAA,CACA,2CAAA,CAEA,iBACE,QAAA,CACA,iBAAA,CAGF,yBACE,iBAAA,CACA,0BAAA,CACA,eAAA,CAEA,+BACE,qBAAA,CAKN,YACE,YAAA,CACA,eAAA,CACA,MAAA,CAGF,UACE,YAAA,CACA,QAAA,CACA,kBAAA,CAEA,qBACE,eAAA,CAIJ,YACE,YAAA,CACA,qBAAA,CACA,OAAA,CAEA,sBACE,MAAA,CAGF,kBACE,eAAA,CACA,0BAAA,CAGF,iCACE,gBAAA,CAIJ,cACE,gBAAA,CACA,iBAAA,CACA,oCAAA,CACA,+BAAA,CACA,qBAAA,CACA,gBAAA,CAEA,oBACE,YAAA,CACA,iCAAA,CAIJ,aACE,UAAA,CACA,WAAA,CACA,WAAA,CACA,cAAA,CAGF,eACE,YAAA,CACA,cAAA,CACA,OAAA,CAGF,aACE,UAAA,CACA,WAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oCAAA,CACA,iBAAA,CACA,+BAAA,CACA,0BAAA,CACA,cAAA,CACA,kBAAA,CAEA,mBACE,oCAAA,CACA,qBAAA,CAGF,sBACE,iCAAA,CACA,+BAAA,CACA,UAAA,CAIJ,cACE,eAAA,CAEA,8BACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,kBAAA,CAEA,iCACE,QAAA,CACA,cAAA,CAKN,oBACE,YAAA,CACA,OAAA,CAEA,yBACE,YAAA,CACA,kBAAA,CACA,OAAA,CAIJ,cACE,YAAA,CACA,wBAAA,CACA,QAAA,CACA,iBAAA,CACA,wCAAA\",\"sourcesContent\":[\".workspace-editor-overlay {\\r\\n position: fixed;\\r\\n top: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n bottom: 0;\\r\\n background: rgba(0, 0, 0, 0.6);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n z-index: 1000;\\r\\n}\\r\\n\\r\\n.workspace-editor-modal {\\r\\n background: var(--theme-bg);\\r\\n border-radius: 12px;\\r\\n width: 90%;\\r\\n max-width: 700px;\\r\\n max-height: 90vh;\\r\\n overflow: hidden;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);\\r\\n}\\r\\n\\r\\n.modal-header {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n padding: 16px 20px;\\r\\n border-bottom: 1px solid var(--theme-border);\\r\\n\\r\\n h4 {\\r\\n margin: 0;\\r\\n font-size: 1.25rem;\\r\\n }\\r\\n\\r\\n .close-btn {\\r\\n font-size: 1.25rem;\\r\\n color: var(--theme-fg-more);\\r\\n padding: 4px 8px;\\r\\n\\r\\n &:hover {\\r\\n color: var(--theme-fg);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.modal-body {\\r\\n padding: 20px;\\r\\n overflow-y: auto;\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n.form-row {\\r\\n display: flex;\\r\\n gap: 16px;\\r\\n margin-bottom: 16px;\\r\\n\\r\\n &:last-child {\\r\\n margin-bottom: 0;\\r\\n }\\r\\n}\\r\\n\\r\\n.form-group {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 6px;\\r\\n\\r\\n &.flex-grow {\\r\\n flex: 1;\\r\\n }\\r\\n\\r\\n label {\\r\\n font-size: 0.9rem;\\r\\n color: var(--theme-fg-more);\\r\\n }\\r\\n\\r\\n input[type='checkbox'] {\\r\\n margin-right: 8px;\\r\\n }\\r\\n}\\r\\n\\r\\n.form-control {\\r\\n padding: 8px 12px;\\r\\n border-radius: 6px;\\r\\n border: 1px solid var(--theme-border);\\r\\n background: var(--theme-bg-more);\\r\\n color: var(--theme-fg);\\r\\n font-size: 0.95rem;\\r\\n\\r\\n &:focus {\\r\\n outline: none;\\r\\n border-color: var(--theme-primary);\\r\\n }\\r\\n}\\r\\n\\r\\n.color-input {\\r\\n width: 60px;\\r\\n height: 36px;\\r\\n padding: 2px;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.icon-selector {\\r\\n display: flex;\\r\\n flex-wrap: wrap;\\r\\n gap: 4px;\\r\\n}\\r\\n\\r\\n.icon-option {\\r\\n width: 36px;\\r\\n height: 36px;\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n border: 1px solid var(--theme-border);\\r\\n border-radius: 6px;\\r\\n background: var(--theme-bg-more);\\r\\n color: var(--theme-fg-more);\\r\\n cursor: pointer;\\r\\n transition: all 0.2s;\\r\\n\\r\\n &:hover {\\r\\n background: var(--theme-bg-more-more);\\r\\n color: var(--theme-fg);\\r\\n }\\r\\n\\r\\n &.selected {\\r\\n border-color: var(--theme-primary);\\r\\n background: var(--theme-primary);\\r\\n color: white;\\r\\n }\\r\\n}\\r\\n\\r\\n.form-section {\\r\\n margin-top: 20px;\\r\\n\\r\\n .section-header {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n margin-bottom: 12px;\\r\\n\\r\\n h5 {\\r\\n margin: 0;\\r\\n font-size: 1rem;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.orientation-toggle {\\r\\n display: flex;\\r\\n gap: 8px;\\r\\n\\r\\n .btn {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 6px;\\r\\n }\\r\\n}\\r\\n\\r\\n.modal-footer {\\r\\n display: flex;\\r\\n justify-content: flex-end;\\r\\n gap: 12px;\\r\\n padding: 16px 20px;\\r\\n border-top: 1px solid var(--theme-border);\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\n var result = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./paneEditor.component.scss\");\n\n if (result && result.__esModule) {\n result = result.default;\n }\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n ","module.exports = __WEBPACK_EXTERNAL_MODULE__182__;","\n var result = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./splitPreview.component.scss\");\n\n if (result && result.__esModule) {\n result = result.default;\n }\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n ","var pug = require(\"!../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"workspace-editor-overlay\\\" (click)=\\\"onCancel()\\\"\\u003E\\u003Cdiv class=\\\"workspace-editor-modal\\\" (click)=\\\"$event.stopPropagation()\\\"\\u003E\\u003Cdiv class=\\\"modal-header\\\"\\u003E\\u003Ch4\\u003E{{ workspace.id ? 'Edit' : 'New' }} Workspace\\u003C\\u002Fh4\\u003E\\u003Cbutton class=\\\"btn btn-link close-btn\\\" type=\\\"button\\\" (click)=\\\"onCancel()\\\"\\u003E\\u003Ci class=\\\"fas fa-times\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"modal-body\\\"\\u003E\\u003Cdiv class=\\\"form-row\\\"\\u003E\\u003Cdiv class=\\\"form-group flex-grow\\\"\\u003E\\u003Clabel\\u003EName\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-control\\\" type=\\\"text\\\" [(ngModel)]=\\\"workspace.name\\\" placeholder=\\\"Workspace name\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-row\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EIcon\\u003C\\u002Flabel\\u003E\\u003Cdiv class=\\\"icon-selector\\\"\\u003E\\u003Cbutton class=\\\"icon-option\\\" *ngFor=\\\"let icon of availableIcons\\\" type=\\\"button\\\" [class.selected]=\\\"workspace.icon === icon\\\" (click)=\\\"workspace.icon = icon\\\"\\u003E\\u003Ci class=\\\"fas\\\" [class]=\\\""fa-" + icon\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EColor\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-control color-input\\\" type=\\\"color\\\" [(ngModel)]=\\\"workspace.color\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-row\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003E\\u003Cinput type=\\\"checkbox\\\" [(ngModel)]=\\\"workspace.isDefault\\\"\\u003E Launch on startup\\u003C\\u002Flabel\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-section\\\"\\u003E\\u003Cdiv class=\\\"section-header\\\"\\u003E\\u003Ch5\\u003ELayout Preview\\u003C\\u002Fh5\\u003E\\u003Cdiv class=\\\"orientation-toggle\\\"\\u003E\\u003Cbutton class=\\\"btn btn-sm\\\" type=\\\"button\\\" [class.btn-primary]=\\\"workspace.root.orientation === "horizontal"\\\" [class.btn-outline-secondary]=\\\"workspace.root.orientation !== "horizontal"\\\" (click)=\\\"setOrientation("horizontal")\\\"\\u003E\\u003Ci class=\\\"fas fa-arrows-alt-h\\\"\\u003E\\u003C\\u002Fi\\u003E Horizontal\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-sm\\\" type=\\\"button\\\" [class.btn-primary]=\\\"workspace.root.orientation === "vertical"\\\" [class.btn-outline-secondary]=\\\"workspace.root.orientation !== "vertical"\\\" (click)=\\\"setOrientation("vertical")\\\"\\u003E\\u003Ci class=\\\"fas fa-arrows-alt-v\\\"\\u003E\\u003C\\u002Fi\\u003E Vertical\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Csplit-preview [split]=\\\"workspace.root\\\" (paneClick)=\\\"selectPane($event)\\\" (splitHorizontal)=\\\"splitPane($event, "horizontal")\\\" (splitVertical)=\\\"splitPane($event, "vertical")\\\" (removePane)=\\\"removePane($event)\\\"\\u003E\\u003C\\u002Fsplit-preview\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"modal-footer\\\"\\u003E\\u003Cbutton class=\\\"btn btn-secondary\\\" type=\\\"button\\\" (click)=\\\"onCancel()\\\"\\u003ECancel\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-primary\\\" type=\\\"button\\\" (click)=\\\"onSave()\\\" [disabled]=\\\"!workspace.name?.trim()\\\"\\u003E\\u003Ci class=\\\"fas fa-save\\\"\\u003E\\u003C\\u002Fi\\u003E Save Workspace\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cpane-editor *ngIf=\\\"showPaneEditor && selectedPane\\\" [pane]=\\\"selectedPane\\\" [profiles]=\\\"profiles\\\" (save)=\\\"onPaneSave($event)\\\" (cancel)=\\\"closePaneEditor()\\\"\\u003E\\u003C\\u002Fpane-editor\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"pane-editor-overlay\\\" (click)=\\\"onCancel()\\\"\\u003E\\u003Cdiv class=\\\"pane-editor-modal\\\" (click)=\\\"$event.stopPropagation()\\\"\\u003E\\u003Cdiv class=\\\"modal-header\\\"\\u003E\\u003Ch4\\u003EEdit Pane\\u003C\\u002Fh4\\u003E\\u003Cbutton class=\\\"btn btn-link close-btn\\\" type=\\\"button\\\" (click)=\\\"onCancel()\\\"\\u003E\\u003Ci class=\\\"fas fa-times\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"modal-body\\\"\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EBase Profile\\u003C\\u002Flabel\\u003E\\u003Cselect class=\\\"form-control\\\" [(ngModel)]=\\\"editedPane.profileId\\\"\\u003E\\u003Coption value=\\\"\\\"\\u003E-- Select Profile --\\u003C\\u002Foption\\u003E\\u003Coption *ngFor=\\\"let profile of profiles\\\" [value]=\\\"profile.id\\\"\\u003E{{ profile.name }}\\u003C\\u002Foption\\u003E\\u003C\\u002Fselect\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EWorking Directory\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-control\\\" type=\\\"text\\\" [(ngModel)]=\\\"editedPane.cwd\\\" placeholder=\\\"C:\\\\path\\\\to\\\\project\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EStartup Command\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-control\\\" type=\\\"text\\\" [(ngModel)]=\\\"editedPane.startupCommand\\\" placeholder=\\\"e.g., npm run dev\\\"\\u003E\\u003Csmall class=\\\"help-text\\\"\\u003ECommand to execute when the pane opens. For Nushell, use commands like: uv run serve\\u003C\\u002Fsmall\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"form-group\\\"\\u003E\\u003Clabel\\u003EPane Title (optional)\\u003C\\u002Flabel\\u003E\\u003Cinput class=\\\"form-control\\\" type=\\\"text\\\" [(ngModel)]=\\\"editedPane.title\\\" placeholder=\\\"Custom tab title\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"modal-footer\\\"\\u003E\\u003Cbutton class=\\\"btn btn-secondary\\\" type=\\\"button\\\" (click)=\\\"onCancel()\\\"\\u003ECancel\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-primary\\\" type=\\\"button\\\" (click)=\\\"onSave()\\\"\\u003E\\u003Ci class=\\\"fas fa-check\\\"\\u003E\\u003C\\u002Fi\\u003E Apply\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var pug = require(\"!../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"workspace-list-container\\\"\\u003E\\u003Cdiv class=\\\"workspace-list-header\\\"\\u003E\\u003Ch3\\u003EWorkspace Editor\\u003C\\u002Fh3\\u003E\\u003Cbutton class=\\\"btn btn-primary\\\" type=\\\"button\\\" (click)=\\\"createWorkspace()\\\"\\u003E\\u003Ci class=\\\"fas fa-plus\\\"\\u003E\\u003C\\u002Fi\\u003E New Workspace\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"workspace-list\\\" *ngIf=\\\"workspaces.length > 0\\\"\\u003E\\u003Cdiv class=\\\"workspace-item\\\" *ngFor=\\\"let workspace of workspaces\\\"\\u003E\\u003Cdiv class=\\\"workspace-info\\\"\\u003E\\u003Cdiv class=\\\"workspace-icon\\\" [style.color]=\\\"workspace.color\\\"\\u003E\\u003Ci class=\\\"fas\\\" [class]=\\\""fa-" + (workspace.icon || "columns")\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"workspace-details\\\"\\u003E\\u003Cdiv class=\\\"workspace-name\\\"\\u003E{{ workspace.name }}\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"workspace-meta\\\"\\u003E\\u003Cspan\\u003E{{ getPaneCount(workspace) }} panes\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"separator\\\"\\u003E·\\u003C\\u002Fspan\\u003E\\u003Cspan\\u003E{{ getOrientationLabel(workspace) }}\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"separator\\\" *ngIf=\\\"workspace.isDefault\\\"\\u003E·\\u003C\\u002Fspan\\u003E\\u003Cspan class=\\\"badge badge-primary\\\" *ngIf=\\\"workspace.isDefault\\\"\\u003Edefault\\u003C\\u002Fspan\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"workspace-actions\\\"\\u003E\\u003Cbutton class=\\\"btn btn-link\\\" type=\\\"button\\\" title=\\\"Set as default\\\" (click)=\\\"setAsDefault(workspace)\\\" [class.active]=\\\"workspace.isDefault\\\"\\u003E\\u003Ci class=\\\"fas fa-star\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-link\\\" type=\\\"button\\\" title=\\\"Duplicate\\\" (click)=\\\"duplicateWorkspace(workspace)\\\"\\u003E\\u003Ci class=\\\"fas fa-copy\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-link\\\" type=\\\"button\\\" title=\\\"Edit\\\" (click)=\\\"editWorkspace(workspace)\\\"\\u003E\\u003Ci class=\\\"fas fa-edit\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"btn btn-link text-danger\\\" type=\\\"button\\\" title=\\\"Delete\\\" (click)=\\\"deleteWorkspace(workspace)\\\"\\u003E\\u003Ci class=\\\"fas fa-trash\\\"\\u003E\\u003C\\u002Fi\\u003E\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"workspace-empty\\\" *ngIf=\\\"workspaces.length === 0\\\"\\u003E\\u003Cp\\u003ENo workspaces configured yet.\\u003C\\u002Fp\\u003E\\u003Cp\\u003EClick \\\"New Workspace\\\" to create your first split-layout workspace.\\u003C\\u002Fp\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cworkspace-editor *ngIf=\\\"showEditor\\\" [workspace]=\\\"editingWorkspace\\\" (save)=\\\"onEditorSave($event)\\\" (cancel)=\\\"closeEditor()\\\"\\u003E\\u003C\\u002Fworkspace-editor\\u003E\";;return pug_html;};\nmodule.exports = template;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.split-preview{display:flex;width:100%;min-height:200px;gap:4px;border-radius:8px;overflow:hidden;background:var(--theme-bg-more);border:1px solid var(--theme-border)}.split-preview.horizontal{flex-direction:row}.split-preview.vertical{flex-direction:column}.preview-pane{display:flex;align-items:center;justify-content:center;background:var(--theme-bg-more-more);border-radius:4px;cursor:pointer;transition:all .2s;position:relative;min-height:80px}.preview-pane:hover{background:var(--theme-primary)}.preview-pane:hover .pane-content{color:#fff}.preview-pane:hover .pane-hint{opacity:1}.pane-content{text-align:center;padding:12px;color:var(--theme-fg)}.pane-label{font-size:.9rem;font-weight:500;margin-bottom:4px}.pane-hint{font-size:.75rem;opacity:.5;transition:opacity .2s}.context-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1200}.context-menu{position:fixed;background:var(--theme-bg);border:1px solid var(--theme-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.3);min-width:160px;padding:4px;z-index:1201}.context-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;border:none;background:none;color:var(--theme-fg);font-size:.9rem;text-align:left;cursor:pointer;border-radius:4px}.context-menu-item:hover{background:var(--theme-bg-more)}.context-menu-item.danger{color:var(--theme-danger, #ef4444)}.context-menu-item.danger:hover{background:rgba(239,68,68,.1)}.context-menu-item i{width:16px;text-align:center;opacity:.7}.context-menu-divider{height:1px;background:var(--theme-border);margin:4px 0}:host{display:flex;flex:1}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/splitPreview.component.scss\"],\"names\":[],\"mappings\":\"AAAA,eACE,YAAA,CACA,UAAA,CACA,gBAAA,CACA,OAAA,CACA,iBAAA,CACA,eAAA,CACA,+BAAA,CACA,oCAAA,CAEA,0BACE,kBAAA,CAGF,wBACE,qBAAA,CAIJ,cACE,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,oCAAA,CACA,iBAAA,CACA,cAAA,CACA,kBAAA,CACA,iBAAA,CACA,eAAA,CAEA,oBACE,+BAAA,CAEA,kCACE,UAAA,CAGF,+BACE,SAAA,CAKN,cACE,iBAAA,CACA,YAAA,CACA,qBAAA,CAGF,YACE,eAAA,CACA,eAAA,CACA,iBAAA,CAGF,WACE,gBAAA,CACA,UAAA,CACA,sBAAA,CAIF,sBACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,YAAA,CAGF,cACE,cAAA,CACA,0BAAA,CACA,oCAAA,CACA,iBAAA,CACA,oCAAA,CACA,eAAA,CACA,WAAA,CACA,YAAA,CAGF,mBACE,YAAA,CACA,kBAAA,CACA,QAAA,CACA,UAAA,CACA,gBAAA,CACA,WAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,iBAAA,CAEA,yBACE,+BAAA,CAGF,0BACE,kCAAA,CAEA,gCACE,6BAAA,CAIJ,qBACE,UAAA,CACA,iBAAA,CACA,UAAA,CAIJ,sBACE,UAAA,CACA,8BAAA,CACA,YAAA,CAIF,MACE,YAAA,CACA,MAAA\",\"sourcesContent\":[\".split-preview {\\r\\n display: flex;\\r\\n width: 100%;\\r\\n min-height: 200px;\\r\\n gap: 4px;\\r\\n border-radius: 8px;\\r\\n overflow: hidden;\\r\\n background: var(--theme-bg-more);\\r\\n border: 1px solid var(--theme-border);\\r\\n\\r\\n &.horizontal {\\r\\n flex-direction: row;\\r\\n }\\r\\n\\r\\n &.vertical {\\r\\n flex-direction: column;\\r\\n }\\r\\n}\\r\\n\\r\\n.preview-pane {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n background: var(--theme-bg-more-more);\\r\\n border-radius: 4px;\\r\\n cursor: pointer;\\r\\n transition: all 0.2s;\\r\\n position: relative;\\r\\n min-height: 80px;\\r\\n\\r\\n &:hover {\\r\\n background: var(--theme-primary);\\r\\n\\r\\n .pane-content {\\r\\n color: white;\\r\\n }\\r\\n\\r\\n .pane-hint {\\r\\n opacity: 1;\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.pane-content {\\r\\n text-align: center;\\r\\n padding: 12px;\\r\\n color: var(--theme-fg);\\r\\n}\\r\\n\\r\\n.pane-label {\\r\\n font-size: 0.9rem;\\r\\n font-weight: 500;\\r\\n margin-bottom: 4px;\\r\\n}\\r\\n\\r\\n.pane-hint {\\r\\n font-size: 0.75rem;\\r\\n opacity: 0.5;\\r\\n transition: opacity 0.2s;\\r\\n}\\r\\n\\r\\n// Context menu\\r\\n.context-menu-overlay {\\r\\n position: fixed;\\r\\n top: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n bottom: 0;\\r\\n z-index: 1200;\\r\\n}\\r\\n\\r\\n.context-menu {\\r\\n position: fixed;\\r\\n background: var(--theme-bg);\\r\\n border: 1px solid var(--theme-border);\\r\\n border-radius: 8px;\\r\\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\\r\\n min-width: 160px;\\r\\n padding: 4px;\\r\\n z-index: 1201;\\r\\n}\\r\\n\\r\\n.context-menu-item {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 10px;\\r\\n width: 100%;\\r\\n padding: 8px 12px;\\r\\n border: none;\\r\\n background: none;\\r\\n color: var(--theme-fg);\\r\\n font-size: 0.9rem;\\r\\n text-align: left;\\r\\n cursor: pointer;\\r\\n border-radius: 4px;\\r\\n\\r\\n &:hover {\\r\\n background: var(--theme-bg-more);\\r\\n }\\r\\n\\r\\n &.danger {\\r\\n color: var(--theme-danger, #ef4444);\\r\\n\\r\\n &:hover {\\r\\n background: rgba(239, 68, 68, 0.1);\\r\\n }\\r\\n }\\r\\n\\r\\n i {\\r\\n width: 16px;\\r\\n text-align: center;\\r\\n opacity: 0.7;\\r\\n }\\r\\n}\\r\\n\\r\\n.context-menu-divider {\\r\\n height: 1px;\\r\\n background: var(--theme-border);\\r\\n margin: 4px 0;\\r\\n}\\r\\n\\r\\n// Nested splits styling\\r\\n:host {\\r\\n display: flex;\\r\\n flex: 1;\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\n var result = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./workspaceList.component.scss\");\n\n if (result && result.__esModule) {\n result = result.default;\n }\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n ","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","module.exports = __WEBPACK_EXTERNAL_MODULE__358__;","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.workspace-list-container{padding:20px;max-width:800px}.workspace-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.workspace-list-header h3{margin:0;font-size:1.5rem}.workspace-list{display:flex;flex-direction:column;gap:12px}.workspace-item{display:flex;justify-content:space-between;align-items:center;padding:16px;background:var(--theme-bg-more);border-radius:8px;border:1px solid var(--theme-border);transition:background .2s}.workspace-item:hover{background:var(--theme-bg-more-more)}.workspace-info{display:flex;align-items:center;gap:16px}.workspace-icon{font-size:24px;width:40px;text-align:center}.workspace-details{display:flex;flex-direction:column;gap:4px}.workspace-name{font-size:1.1rem;font-weight:500}.workspace-meta{font-size:.85rem;color:var(--theme-fg-more)}.workspace-meta .separator{margin:0 6px}.workspace-meta .badge{font-size:.75rem;padding:2px 6px;border-radius:4px;background:var(--theme-primary);color:#fff}.workspace-actions{display:flex;gap:4px}.workspace-actions .btn-link{padding:8px;color:var(--theme-fg-more);opacity:.7;transition:opacity .2s}.workspace-actions .btn-link:hover{opacity:1}.workspace-actions .btn-link.active{color:gold;opacity:1}.workspace-actions .btn-link.text-danger:hover{color:var(--theme-danger)}.workspace-empty{text-align:center;padding:40px;color:var(--theme-fg-more)}.workspace-empty p{margin:8px 0}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/workspaceList.component.scss\"],\"names\":[],\"mappings\":\"AAAA,0BACE,YAAA,CACA,eAAA,CAGF,uBACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,kBAAA,CAEA,0BACE,QAAA,CACA,gBAAA,CAIJ,gBACE,YAAA,CACA,qBAAA,CACA,QAAA,CAGF,gBACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,YAAA,CACA,+BAAA,CACA,iBAAA,CACA,oCAAA,CACA,yBAAA,CAEA,sBACE,oCAAA,CAIJ,gBACE,YAAA,CACA,kBAAA,CACA,QAAA,CAGF,gBACE,cAAA,CACA,UAAA,CACA,iBAAA,CAGF,mBACE,YAAA,CACA,qBAAA,CACA,OAAA,CAGF,gBACE,gBAAA,CACA,eAAA,CAGF,gBACE,gBAAA,CACA,0BAAA,CAEA,2BACE,YAAA,CAGF,uBACE,gBAAA,CACA,eAAA,CACA,iBAAA,CACA,+BAAA,CACA,UAAA,CAIJ,mBACE,YAAA,CACA,OAAA,CAEA,6BACE,WAAA,CACA,0BAAA,CACA,UAAA,CACA,sBAAA,CAEA,mCACE,SAAA,CAGF,oCACE,UAAA,CACA,SAAA,CAGF,+CACE,yBAAA,CAKN,iBACE,iBAAA,CACA,YAAA,CACA,0BAAA,CAEA,mBACE,YAAA\",\"sourcesContent\":[\".workspace-list-container {\\r\\n padding: 20px;\\r\\n max-width: 800px;\\r\\n}\\r\\n\\r\\n.workspace-list-header {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n margin-bottom: 20px;\\r\\n\\r\\n h3 {\\r\\n margin: 0;\\r\\n font-size: 1.5rem;\\r\\n }\\r\\n}\\r\\n\\r\\n.workspace-list {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 12px;\\r\\n}\\r\\n\\r\\n.workspace-item {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n padding: 16px;\\r\\n background: var(--theme-bg-more);\\r\\n border-radius: 8px;\\r\\n border: 1px solid var(--theme-border);\\r\\n transition: background 0.2s;\\r\\n\\r\\n &:hover {\\r\\n background: var(--theme-bg-more-more);\\r\\n }\\r\\n}\\r\\n\\r\\n.workspace-info {\\r\\n display: flex;\\r\\n align-items: center;\\r\\n gap: 16px;\\r\\n}\\r\\n\\r\\n.workspace-icon {\\r\\n font-size: 24px;\\r\\n width: 40px;\\r\\n text-align: center;\\r\\n}\\r\\n\\r\\n.workspace-details {\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n gap: 4px;\\r\\n}\\r\\n\\r\\n.workspace-name {\\r\\n font-size: 1.1rem;\\r\\n font-weight: 500;\\r\\n}\\r\\n\\r\\n.workspace-meta {\\r\\n font-size: 0.85rem;\\r\\n color: var(--theme-fg-more);\\r\\n\\r\\n .separator {\\r\\n margin: 0 6px;\\r\\n }\\r\\n\\r\\n .badge {\\r\\n font-size: 0.75rem;\\r\\n padding: 2px 6px;\\r\\n border-radius: 4px;\\r\\n background: var(--theme-primary);\\r\\n color: white;\\r\\n }\\r\\n}\\r\\n\\r\\n.workspace-actions {\\r\\n display: flex;\\r\\n gap: 4px;\\r\\n\\r\\n .btn-link {\\r\\n padding: 8px;\\r\\n color: var(--theme-fg-more);\\r\\n opacity: 0.7;\\r\\n transition: opacity 0.2s;\\r\\n\\r\\n &:hover {\\r\\n opacity: 1;\\r\\n }\\r\\n\\r\\n &.active {\\r\\n color: gold;\\r\\n opacity: 1;\\r\\n }\\r\\n\\r\\n &.text-danger:hover {\\r\\n color: var(--theme-danger);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.workspace-empty {\\r\\n text-align: center;\\r\\n padding: 40px;\\r\\n color: var(--theme-fg-more);\\r\\n\\r\\n p {\\r\\n margin: 8px 0;\\r\\n }\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var pug = require(\"!../../node_modules/pug-runtime/index.js\");\n\nfunction template(locals) {var pug_html = \"\", pug_mixins = {}, pug_interp;pug_html = pug_html + \"\\u003Cdiv class=\\\"split-preview\\\" [class.horizontal]=\\\"split.orientation === "horizontal"\\\" [class.vertical]=\\\"split.orientation === "vertical"\\\"\\u003E\\u003Cng-container *ngFor=\\\"let child of split.children; let i = index\\\"\\u003E\\u003Cdiv class=\\\"preview-pane\\\" *ngIf=\\\"isPane(child)\\\" [style.flex-basis]=\\\"getFlexStyle(i)\\\" (click)=\\\"onPaneClick(asPane(child))\\\" (contextmenu)=\\\"onContextMenu($event, asPane(child))\\\"\\u003E\\u003Cdiv class=\\\"pane-content\\\"\\u003E\\u003Cdiv class=\\\"pane-label\\\"\\u003E{{ getPaneLabel(asPane(child)) }}\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"pane-hint\\\"\\u003EClick to edit\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\\u003Csplit-preview *ngIf=\\\"isSplit(child)\\\" [split]=\\\"asSplit(child)\\\" [depth]=\\\"depth + 1\\\" [style.flex-basis]=\\\"getFlexStyle(i)\\\" (paneClick)=\\\"onNestedPaneClick($event)\\\" (splitHorizontal)=\\\"onNestedSplitH($event)\\\" (splitVertical)=\\\"onNestedSplitV($event)\\\" (removePane)=\\\"onNestedRemove($event)\\\"\\u003E\\u003C\\u002Fsplit-preview\\u003E\\u003C\\u002Fng-container\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cdiv class=\\\"context-menu-overlay\\\" *ngIf=\\\"contextMenuPane\\\" (click)=\\\"closeContextMenu()\\\"\\u003E\\u003Cdiv class=\\\"context-menu\\\" [style.left.px]=\\\"contextMenuPosition.x\\\" [style.top.px]=\\\"contextMenuPosition.y\\\" (click)=\\\"$event.stopPropagation()\\\"\\u003E\\u003Cbutton class=\\\"context-menu-item\\\" type=\\\"button\\\" (click)=\\\"onSplitH()\\\"\\u003E\\u003Ci class=\\\"fas fa-arrows-alt-h\\\"\\u003E\\u003C\\u002Fi\\u003E Split Horizontal\\u003C\\u002Fbutton\\u003E\\u003Cbutton class=\\\"context-menu-item\\\" type=\\\"button\\\" (click)=\\\"onSplitV()\\\"\\u003E\\u003Ci class=\\\"fas fa-arrows-alt-v\\\"\\u003E\\u003C\\u002Fi\\u003E Split Vertical\\u003C\\u002Fbutton\\u003E\\u003Cdiv class=\\\"context-menu-divider\\\"\\u003E\\u003C\\u002Fdiv\\u003E\\u003Cbutton class=\\\"context-menu-item danger\\\" type=\\\"button\\\" (click)=\\\"onRemove()\\\"\\u003E\\u003Ci class=\\\"fas fa-trash\\\"\\u003E\\u003C\\u002Fi\\u003E Remove Pane\\u003C\\u002Fbutton\\u003E\\u003C\\u002Fdiv\\u003E\\u003C\\u002Fdiv\\u003E\";;return pug_html;};\nmodule.exports = template;","var req = require(\"!!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\node_modules\\\\pug-loader\\\\index.js!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\src\\\\components\\\\splitPreview.component.pug\");\nmodule.exports = (req['default'] || req).apply(req, [])","module.exports = __WEBPACK_EXTERNAL_MODULE__650__;","module.exports = __WEBPACK_EXTERNAL_MODULE__700__;","'use strict';\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n if (arguments.length === 1) {\n var attrs = a[0];\n for (var i = 1; i < a.length; i++) {\n attrs = pug_merge(attrs, a[i]);\n }\n return attrs;\n }\n\n for (var key in b) {\n if (key === 'class') {\n var valA = a[key] || [];\n a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n } else if (key === 'style') {\n var valA = pug_style(a[key]);\n valA = valA && valA[valA.length - 1] !== ';' ? valA + ';' : valA;\n var valB = pug_style(b[key]);\n valB = valB && valB[valB.length - 1] !== ';' ? valB + ';' : valB;\n a[key] = valA + valB;\n } else {\n a[key] = b[key];\n }\n }\n\n return a;\n}\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.<string>|Object.<string, boolean>|string)} val\n * @param {?Array.<string>} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n var classString = '',\n className,\n padding = '',\n escapeEnabled = Array.isArray(escaping);\n for (var i = 0; i < val.length; i++) {\n className = pug_classes(val[i]);\n if (!className) continue;\n escapeEnabled && escaping[i] && (className = pug_escape(className));\n classString = classString + padding + className;\n padding = ' ';\n }\n return classString;\n}\nfunction pug_classes_object(val) {\n var classString = '',\n padding = '';\n for (var key in val) {\n if (key && val[key] && pug_has_own_property.call(val, key)) {\n classString = classString + padding + key;\n padding = ' ';\n }\n }\n return classString;\n}\nfunction pug_classes(val, escaping) {\n if (Array.isArray(val)) {\n return pug_classes_array(val, escaping);\n } else if (val && typeof val === 'object') {\n return pug_classes_object(val);\n } else {\n return val || '';\n }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.<string, string>|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n if (!val) return '';\n if (typeof val === 'object') {\n var out = '';\n for (var style in val) {\n /* istanbul ignore else */\n if (pug_has_own_property.call(val, style)) {\n out = out + style + ':' + val[style] + ';';\n }\n }\n return out;\n } else {\n return val + '';\n }\n}\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n if (\n val === false ||\n val == null ||\n (!val && (key === 'class' || key === 'style'))\n ) {\n return '';\n }\n if (val === true) {\n return ' ' + (terse ? key : key + '=\"' + key + '\"');\n }\n var type = typeof val;\n if (\n (type === 'object' || type === 'function') &&\n typeof val.toJSON === 'function'\n ) {\n val = val.toJSON();\n }\n if (typeof val !== 'string') {\n val = JSON.stringify(val);\n if (!escaped && val.indexOf('\"') !== -1) {\n return ' ' + key + \"='\" + val.replace(/'/g, ''') + \"'\";\n }\n }\n if (escaped) val = pug_escape(val);\n return ' ' + key + '=\"' + val + '\"';\n}\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse) {\n var attrs = '';\n\n for (var key in obj) {\n if (pug_has_own_property.call(obj, key)) {\n var val = obj[key];\n\n if ('class' === key) {\n val = pug_classes(val);\n attrs = pug_attr(key, val, false, terse) + attrs;\n continue;\n }\n if ('style' === key) {\n val = pug_style(val);\n }\n attrs += pug_attr(key, val, false, terse);\n }\n }\n\n return attrs;\n}\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /[\"&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html) {\n var html = '' + _html;\n var regexResult = pug_match_html.exec(html);\n if (!regexResult) return _html;\n\n var result = '';\n var i, lastIndex, escape;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34:\n escape = '"';\n break;\n case 38:\n escape = '&';\n break;\n case 60:\n escape = '<';\n break;\n case 62:\n escape = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n else return result;\n}\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str) {\n if (!(err instanceof Error)) throw err;\n if ((typeof window != 'undefined' || !filename) && !str) {\n err.message += ' on line ' + lineno;\n throw err;\n }\n var context, lines, start, end;\n try {\n str = str || require('fs').readFileSync(filename, {encoding: 'utf8'});\n context = 3;\n lines = str.split('\\n');\n start = Math.max(lineno - context, 0);\n end = Math.min(lines.length, lineno + context);\n } catch (ex) {\n err.message +=\n ' - could not read from ' + filename + ' (' + ex.message + ')';\n pug_rethrow(err, null, lineno);\n return;\n }\n\n // Error context\n context = lines\n .slice(start, end)\n .map(function(line, i) {\n var curr = i + start + 1;\n return (curr == lineno ? ' > ' : ' ') + curr + '| ' + line;\n })\n .join('\\n');\n\n // Alter exception message\n err.path = filename;\n try {\n err.message =\n (filename || 'Pug') +\n ':' +\n lineno +\n '\\n' +\n context +\n '\\n\\n' +\n err.message;\n } catch (e) {}\n throw err;\n}\n","var req = require(\"!!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\node_modules\\\\pug-loader\\\\index.js!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\src\\\\components\\\\workspaceEditor.component.pug\");\nmodule.exports = (req['default'] || req).apply(req, [])","\n var result = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./workspaceEditor.component.scss\");\n\n if (result && result.__esModule) {\n result = result.default;\n }\n\n if (typeof result === \"string\") {\n module.exports = result;\n } else {\n module.exports = result.toString();\n }\n ","module.exports = __WEBPACK_EXTERNAL_MODULE__860__;","var req = require(\"!!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\node_modules\\\\pug-loader\\\\index.js!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\src\\\\components\\\\paneEditor.component.pug\");\nmodule.exports = (req['default'] || req).apply(req, [])","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.pane-editor-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:1100}.pane-editor-modal{background:var(--theme-bg);border-radius:12px;width:90%;max-width:500px;max-height:80vh;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 20px 60px rgba(0,0,0,.4)}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid var(--theme-border)}.modal-header h4{margin:0;font-size:1.15rem}.modal-header .close-btn{font-size:1.15rem;color:var(--theme-fg-more);padding:4px 8px}.modal-header .close-btn:hover{color:var(--theme-fg)}.modal-body{padding:20px;overflow-y:auto;flex:1}.form-group{margin-bottom:16px}.form-group:last-child{margin-bottom:0}.form-group label{display:block;margin-bottom:6px;font-size:.9rem;color:var(--theme-fg-more)}.form-control{width:100%;padding:10px 12px;border-radius:6px;border:1px solid var(--theme-border);background:var(--theme-bg-more);color:var(--theme-fg);font-size:.95rem}.form-control:focus{outline:none;border-color:var(--theme-primary)}select.form-control{cursor:pointer}.input-with-button{display:flex;gap:8px}.input-with-button input{flex:1}.help-text{display:block;margin-top:4px;font-size:.8rem;color:var(--theme-fg-more);opacity:.8}.modal-footer{display:flex;justify-content:flex-end;gap:12px;padding:16px 20px;border-top:1px solid var(--theme-border)}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/paneEditor.component.scss\"],\"names\":[],\"mappings\":\"AAAA,qBACE,cAAA,CACA,KAAA,CACA,MAAA,CACA,OAAA,CACA,QAAA,CACA,yBAAA,CACA,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,YAAA,CAGF,mBACE,0BAAA,CACA,kBAAA,CACA,SAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,YAAA,CACA,qBAAA,CACA,qCAAA,CAGF,cACE,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,iBAAA,CACA,2CAAA,CAEA,iBACE,QAAA,CACA,iBAAA,CAGF,yBACE,iBAAA,CACA,0BAAA,CACA,eAAA,CAEA,+BACE,qBAAA,CAKN,YACE,YAAA,CACA,eAAA,CACA,MAAA,CAGF,YACE,kBAAA,CAEA,uBACE,eAAA,CAGF,kBACE,aAAA,CACA,iBAAA,CACA,eAAA,CACA,0BAAA,CAIJ,cACE,UAAA,CACA,iBAAA,CACA,iBAAA,CACA,oCAAA,CACA,+BAAA,CACA,qBAAA,CACA,gBAAA,CAEA,oBACE,YAAA,CACA,iCAAA,CAIJ,oBACE,cAAA,CAGF,mBACE,YAAA,CACA,OAAA,CAEA,yBACE,MAAA,CAIJ,WACE,aAAA,CACA,cAAA,CACA,eAAA,CACA,0BAAA,CACA,UAAA,CAGF,cACE,YAAA,CACA,wBAAA,CACA,QAAA,CACA,iBAAA,CACA,wCAAA\",\"sourcesContent\":[\".pane-editor-overlay {\\r\\n position: fixed;\\r\\n top: 0;\\r\\n left: 0;\\r\\n right: 0;\\r\\n bottom: 0;\\r\\n background: rgba(0, 0, 0, 0.7);\\r\\n display: flex;\\r\\n align-items: center;\\r\\n justify-content: center;\\r\\n z-index: 1100;\\r\\n}\\r\\n\\r\\n.pane-editor-modal {\\r\\n background: var(--theme-bg);\\r\\n border-radius: 12px;\\r\\n width: 90%;\\r\\n max-width: 500px;\\r\\n max-height: 80vh;\\r\\n overflow: hidden;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4);\\r\\n}\\r\\n\\r\\n.modal-header {\\r\\n display: flex;\\r\\n justify-content: space-between;\\r\\n align-items: center;\\r\\n padding: 16px 20px;\\r\\n border-bottom: 1px solid var(--theme-border);\\r\\n\\r\\n h4 {\\r\\n margin: 0;\\r\\n font-size: 1.15rem;\\r\\n }\\r\\n\\r\\n .close-btn {\\r\\n font-size: 1.15rem;\\r\\n color: var(--theme-fg-more);\\r\\n padding: 4px 8px;\\r\\n\\r\\n &:hover {\\r\\n color: var(--theme-fg);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\n.modal-body {\\r\\n padding: 20px;\\r\\n overflow-y: auto;\\r\\n flex: 1;\\r\\n}\\r\\n\\r\\n.form-group {\\r\\n margin-bottom: 16px;\\r\\n\\r\\n &:last-child {\\r\\n margin-bottom: 0;\\r\\n }\\r\\n\\r\\n label {\\r\\n display: block;\\r\\n margin-bottom: 6px;\\r\\n font-size: 0.9rem;\\r\\n color: var(--theme-fg-more);\\r\\n }\\r\\n}\\r\\n\\r\\n.form-control {\\r\\n width: 100%;\\r\\n padding: 10px 12px;\\r\\n border-radius: 6px;\\r\\n border: 1px solid var(--theme-border);\\r\\n background: var(--theme-bg-more);\\r\\n color: var(--theme-fg);\\r\\n font-size: 0.95rem;\\r\\n\\r\\n &:focus {\\r\\n outline: none;\\r\\n border-color: var(--theme-primary);\\r\\n }\\r\\n}\\r\\n\\r\\nselect.form-control {\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.input-with-button {\\r\\n display: flex;\\r\\n gap: 8px;\\r\\n\\r\\n input {\\r\\n flex: 1;\\r\\n }\\r\\n}\\r\\n\\r\\n.help-text {\\r\\n display: block;\\r\\n margin-top: 4px;\\r\\n font-size: 0.8rem;\\r\\n color: var(--theme-fg-more);\\r\\n opacity: 0.8;\\r\\n}\\r\\n\\r\\n.modal-footer {\\r\\n display: flex;\\r\\n justify-content: flex-end;\\r\\n gap: 12px;\\r\\n padding: 16px 20px;\\r\\n border-top: 1px solid var(--theme-border);\\r\\n}\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","if(typeof __WEBPACK_EXTERNAL_MODULE__947__ === 'undefined') { var e = new Error(\"Cannot find module 'fs'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__947__;","var req = require(\"!!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\node_modules\\\\pug-loader\\\\index.js!C:\\\\Users\\\\halil\\\\tabbyspaces\\\\src\\\\components\\\\workspaceList.component.pug\");\nmodule.exports = (req['default'] || req).apply(req, [])","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Check if module exists (development only)\n\tif (__webpack_modules__[moduleId] === undefined) {\n\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Build-time constants injected by webpack DefinePlugin\r\ndeclare const __CONFIG_KEY__: string\r\ndeclare const __DISPLAY_NAME__: string\r\ndeclare const __IS_DEV__: boolean\r\n\r\nexport const CONFIG_KEY = typeof __CONFIG_KEY__ !== 'undefined' ? __CONFIG_KEY__ : 'tabbyspaces'\r\nexport const DISPLAY_NAME = typeof __DISPLAY_NAME__ !== 'undefined' ? __DISPLAY_NAME__ : 'TabbySpaces'\r\nexport const IS_DEV = typeof __IS_DEV__ !== 'undefined' ? __IS_DEV__ : false\r\n","import { Injectable } from '@angular/core'\r\nimport { ConfigProvider } from 'tabby-core'\r\nimport { CONFIG_KEY } from '../build-config'\r\n\r\n@Injectable()\r\nexport class WorkspaceEditorConfigProvider extends ConfigProvider {\r\n defaults = {\r\n [CONFIG_KEY]: {\r\n workspaces: [],\r\n },\r\n }\r\n}\r\n","// Tabby profile interfaces\r\nexport interface TabbyProfileOptions {\r\n command?: string\r\n args?: string[]\r\n cwd?: string\r\n env?: Record<string, string>\r\n restoreFromPTYID?: boolean\r\n width?: number | null\r\n height?: number | null\r\n pauseAfterExit?: boolean\r\n runAsAdministrator?: boolean\r\n}\r\n\r\nexport interface TabbyProfile {\r\n id: string\r\n type: string\r\n name: string\r\n group?: string\r\n icon?: string\r\n color?: string\r\n options?: TabbyProfileOptions\r\n isBuiltin?: boolean\r\n isTemplate?: boolean\r\n weight?: number\r\n disableDynamicTitle?: boolean\r\n terminalColorScheme?: string | null\r\n behaviorOnSessionEnd?: string\r\n}\r\n\r\nexport interface TabbyRecoveryToken {\r\n type: string\r\n orientation?: 'h' | 'v'\r\n ratios?: number[]\r\n children?: TabbyRecoveryToken[]\r\n profile?: Partial<TabbyProfile>\r\n savedState?: boolean\r\n tabTitle?: string\r\n tabCustomTitle?: string\r\n disableDynamicTitle?: boolean\r\n}\r\n\r\nexport interface TabbySplitLayoutProfile {\r\n id: string\r\n type: 'split-layout'\r\n name: string\r\n group: string\r\n icon?: string\r\n color?: string\r\n isBuiltin: boolean\r\n options: {\r\n recoveryToken: TabbyRecoveryToken\r\n }\r\n}\r\n\r\n// Workspace interfaces\r\nexport interface WorkspacePane {\r\n id: string\r\n profileId: string\r\n cwd?: string\r\n startupCommand?: string\r\n title?: string\r\n}\r\n\r\nexport interface WorkspaceSplit {\r\n orientation: 'horizontal' | 'vertical'\r\n ratios: number[]\r\n children: (WorkspacePane | WorkspaceSplit)[]\r\n}\r\n\r\nexport interface Workspace {\r\n id: string\r\n name: string\r\n icon?: string\r\n color?: string\r\n root: WorkspaceSplit\r\n isDefault?: boolean\r\n hotkey?: string\r\n}\r\n\r\nexport function isWorkspaceSplit(node: WorkspacePane | WorkspaceSplit): node is WorkspaceSplit {\r\n return 'orientation' in node && 'children' in node\r\n}\r\n\r\nexport function createDefaultPane(): WorkspacePane {\r\n return {\r\n id: generateUUID(),\r\n profileId: '',\r\n cwd: '',\r\n startupCommand: '',\r\n title: '',\r\n }\r\n}\r\n\r\nexport function createDefaultSplit(orientation: 'horizontal' | 'vertical' = 'horizontal'): WorkspaceSplit {\r\n return {\r\n orientation,\r\n ratios: [0.5, 0.5],\r\n children: [createDefaultPane(), createDefaultPane()],\r\n }\r\n}\r\n\r\nexport function createDefaultWorkspace(name: string = 'New Workspace'): Workspace {\r\n return {\r\n id: generateUUID(),\r\n name,\r\n icon: 'columns',\r\n color: '#3b82f6',\r\n root: createDefaultSplit(),\r\n isDefault: false,\r\n }\r\n}\r\n\r\nexport function generateUUID(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8\r\n return v.toString(16)\r\n })\r\n}\r\n\r\nexport function countPanes(node: WorkspacePane | WorkspaceSplit): number {\r\n if (isWorkspaceSplit(node)) {\r\n return node.children.reduce((sum, child) => sum + countPanes(child), 0)\r\n }\r\n return 1\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { ConfigService, NotificationsService, ProfilesService } from 'tabby-core'\r\nimport {\r\n Workspace,\r\n WorkspacePane,\r\n WorkspaceSplit,\r\n isWorkspaceSplit,\r\n generateUUID,\r\n TabbyProfile,\r\n TabbyRecoveryToken,\r\n TabbySplitLayoutProfile,\r\n} from '../models/workspace.model'\r\nimport { CONFIG_KEY, DISPLAY_NAME } from '../build-config'\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class WorkspaceEditorService {\r\n constructor(\r\n private config: ConfigService,\r\n private notifications: NotificationsService,\r\n private profilesService: ProfilesService\r\n ) {}\r\n\r\n getWorkspaces(): Workspace[] {\r\n return this.config.store[CONFIG_KEY]?.workspaces ?? []\r\n }\r\n\r\n async saveWorkspaces(workspaces: Workspace[]): Promise<boolean> {\r\n this.config.store[CONFIG_KEY].workspaces = workspaces\r\n this.syncTabbyProfiles(workspaces)\r\n return await this.saveConfig()\r\n }\r\n\r\n async addWorkspace(workspace: Workspace): Promise<void> {\r\n const workspaces = this.getWorkspaces()\r\n workspaces.push(workspace)\r\n await this.saveWorkspaces(workspaces)\r\n this.notifications.info(`Workspace \"${workspace.name}\" created`)\r\n }\r\n\r\n async updateWorkspace(workspace: Workspace): Promise<void> {\r\n const workspaces = this.getWorkspaces()\r\n const index = workspaces.findIndex((w) => w.id === workspace.id)\r\n if (index !== -1) {\r\n workspaces[index] = workspace\r\n await this.saveWorkspaces(workspaces)\r\n this.notifications.info(`Workspace \"${workspace.name}\" updated`)\r\n }\r\n }\r\n\r\n async deleteWorkspace(workspaceId: string): Promise<void> {\r\n const workspaces = this.getWorkspaces()\r\n const workspace = workspaces.find((w) => w.id === workspaceId)\r\n const filtered = workspaces.filter((w) => w.id !== workspaceId)\r\n await this.saveWorkspaces(filtered)\r\n if (workspace) {\r\n this.notifications.info(`Workspace \"${workspace.name}\" deleted`)\r\n }\r\n }\r\n\r\n async getAvailableProfiles(): Promise<TabbyProfile[]> {\r\n const allProfiles = await this.profilesService.getProfiles()\r\n return allProfiles.filter(\r\n (p) => p.type === 'local' && !p.id?.startsWith('split-layout:')\r\n ) as TabbyProfile[]\r\n }\r\n\r\n private syncTabbyProfiles(workspaces: Workspace[]): void {\r\n const profiles: (TabbyProfile | TabbySplitLayoutProfile)[] = this.config.store.profiles ?? []\r\n\r\n // Remove old plugin profiles (mutate in place)\r\n for (let i = profiles.length - 1; i >= 0; i--) {\r\n if (profiles[i].id?.startsWith(`split-layout:${CONFIG_KEY}:`)) {\r\n profiles.splice(i, 1)\r\n }\r\n }\r\n\r\n // Add new workspace profiles\r\n for (const workspace of workspaces) {\r\n const tabbyProfile = this.generateTabbyProfile(workspace)\r\n profiles.push(tabbyProfile)\r\n }\r\n }\r\n\r\n generateTabbyProfile(workspace: Workspace): TabbySplitLayoutProfile {\r\n const safeName = this.sanitizeForProfileId(workspace.name)\r\n return {\r\n id: `split-layout:${CONFIG_KEY}:${safeName}:${workspace.id}`,\r\n type: 'split-layout',\r\n name: workspace.name,\r\n group: DISPLAY_NAME,\r\n icon: workspace.icon,\r\n color: workspace.color,\r\n isBuiltin: false,\r\n options: {\r\n recoveryToken: this.generateRecoveryToken(workspace.root),\r\n },\r\n }\r\n }\r\n\r\n private generateRecoveryToken(split: WorkspaceSplit): TabbyRecoveryToken {\r\n return {\r\n type: 'app:split-tab',\r\n orientation: split.orientation === 'horizontal' ? 'h' : 'v',\r\n ratios: split.ratios,\r\n children: split.children.map((child) => {\r\n if (isWorkspaceSplit(child)) {\r\n return this.generateRecoveryToken(child)\r\n }\r\n return this.generatePaneToken(child)\r\n }),\r\n }\r\n }\r\n\r\n private generatePaneToken(pane: WorkspacePane): TabbyRecoveryToken {\r\n const baseProfile = this.getProfileById(pane.profileId)\r\n\r\n if (!baseProfile) {\r\n return {\r\n type: 'app:local-tab',\r\n profile: {\r\n type: 'local',\r\n name: 'Shell',\r\n },\r\n savedState: false,\r\n }\r\n }\r\n\r\n // Build complete profile object like Tabby expects\r\n const options = {\r\n restoreFromPTYID: false,\r\n command: baseProfile.options?.command || '',\r\n args: baseProfile.options?.args || [],\r\n cwd: pane.cwd || baseProfile.options?.cwd || '',\r\n env: baseProfile.options?.env || {},\r\n width: null,\r\n height: null,\r\n pauseAfterExit: false,\r\n runAsAdministrator: false,\r\n }\r\n\r\n // Handle startup command for different shells\r\n if (pane.startupCommand) {\r\n const cmd = baseProfile.options?.command || ''\r\n if (cmd.includes('nu.exe') || baseProfile.name?.toLowerCase().includes('nushell')) {\r\n options.args = ['-e', pane.startupCommand]\r\n } else if (cmd.includes('powershell') || cmd.includes('pwsh')) {\r\n options.args = ['-NoExit', '-Command', pane.startupCommand]\r\n } else if (cmd.includes('cmd.exe')) {\r\n options.args = ['/K', pane.startupCommand]\r\n } else {\r\n options.args = ['-c', pane.startupCommand]\r\n }\r\n }\r\n\r\n const profile = {\r\n id: baseProfile.id,\r\n type: 'local',\r\n name: baseProfile.name || 'Shell',\r\n group: baseProfile.group || '',\r\n options,\r\n icon: baseProfile.icon || '',\r\n color: baseProfile.color || '',\r\n disableDynamicTitle: false,\r\n weight: 0,\r\n isBuiltin: false,\r\n isTemplate: false,\r\n terminalColorScheme: null,\r\n behaviorOnSessionEnd: 'auto',\r\n }\r\n\r\n return {\r\n type: 'app:local-tab',\r\n profile,\r\n savedState: false,\r\n tabTitle: pane.title || '',\r\n tabCustomTitle: pane.title || '',\r\n disableDynamicTitle: !!pane.title,\r\n }\r\n }\r\n\r\n duplicateWorkspace(workspace: Workspace): Workspace {\r\n const clone = JSON.parse(JSON.stringify(workspace)) as Workspace\r\n clone.id = generateUUID()\r\n clone.name = `${workspace.name} (Copy)`\r\n clone.isDefault = false\r\n this.regenerateIds(clone.root)\r\n return clone\r\n }\r\n\r\n private regenerateIds(node: WorkspacePane | WorkspaceSplit): void {\r\n if (isWorkspaceSplit(node)) {\r\n for (const child of node.children) {\r\n this.regenerateIds(child)\r\n }\r\n } else {\r\n node.id = generateUUID()\r\n }\r\n }\r\n\r\n private sanitizeForProfileId(name: string): string {\r\n return name\r\n .toLowerCase()\r\n .replace(/[^a-z0-9-]/g, '-')\r\n .replace(/-+/g, '-')\r\n .replace(/^-|-$/g, '')\r\n || 'workspace'\r\n }\r\n\r\n private getProfileById(profileId: string): TabbyProfile | undefined {\r\n const profiles: TabbyProfile[] = this.config.store.profiles ?? []\r\n return profiles.find((p) => p.id === profileId && p.type === 'local')\r\n }\r\n\r\n getProfileName(profileId: string): string | undefined {\r\n return this.getProfileById(profileId)?.name\r\n }\r\n\r\n private async saveConfig(): Promise<boolean> {\r\n try {\r\n await this.config.save()\r\n return true\r\n } catch (error) {\r\n this.notifications.error('Failed to save configuration')\r\n console.error('TabbySpaces save error:', error)\r\n return false\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core'\r\nimport { ConfigService } from 'tabby-core'\r\nimport { Subscription } from 'rxjs'\r\nimport { WorkspaceEditorService } from '../services/workspaceEditor.service'\r\nimport {\r\n Workspace,\r\n WorkspacePane,\r\n WorkspaceSplit,\r\n countPanes,\r\n createDefaultWorkspace,\r\n isWorkspaceSplit,\r\n} from '../models/workspace.model'\r\n\r\n@Component({\r\n selector: 'workspace-list',\r\n template: require('./workspaceList.component.pug'),\r\n styles: [require('./workspaceList.component.scss')],\r\n})\r\nexport class WorkspaceListComponent implements OnInit, OnDestroy {\r\n workspaces: Workspace[] = []\r\n editingWorkspace: Workspace | null = null\r\n showEditor = false\r\n private configSubscription: Subscription | null = null\r\n\r\n constructor(\r\n public config: ConfigService,\r\n private workspaceService: WorkspaceEditorService,\r\n private cdr: ChangeDetectorRef\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.loadWorkspaces()\r\n this.configSubscription = this.config.changed$.subscribe(() => {\r\n this.loadWorkspaces()\r\n })\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.configSubscription?.unsubscribe()\r\n }\r\n\r\n loadWorkspaces(): void {\r\n this.workspaces = this.workspaceService.getWorkspaces()\r\n this.cdr.detectChanges()\r\n }\r\n\r\n async createWorkspace(): Promise<void> {\r\n const profiles = await this.workspaceService.getAvailableProfiles()\r\n const defaultProfileId = profiles[0]?.id || ''\r\n const workspace = createDefaultWorkspace()\r\n this.setProfileForAllPanes(workspace.root, defaultProfileId)\r\n this.editingWorkspace = workspace\r\n this.showEditor = true\r\n }\r\n\r\n private setProfileForAllPanes(node: WorkspacePane | WorkspaceSplit, profileId: string): void {\r\n if (isWorkspaceSplit(node)) {\r\n node.children.forEach((child) => this.setProfileForAllPanes(child, profileId))\r\n } else {\r\n node.profileId = profileId\r\n }\r\n }\r\n\r\n editWorkspace(workspace: Workspace): void {\r\n this.editingWorkspace = JSON.parse(JSON.stringify(workspace))\r\n this.showEditor = true\r\n }\r\n\r\n async duplicateWorkspace(workspace: Workspace): Promise<void> {\r\n const clone = this.workspaceService.duplicateWorkspace(workspace)\r\n await this.workspaceService.addWorkspace(clone)\r\n this.loadWorkspaces()\r\n }\r\n\r\n async deleteWorkspace(workspace: Workspace): Promise<void> {\r\n console.log('[TabbySpaces] deleteWorkspace called', workspace.id)\r\n if (confirm(`Delete workspace \"${workspace.name}\"?`)) {\r\n console.log('[TabbySpaces] confirm = true, calling service.deleteWorkspace')\r\n await this.workspaceService.deleteWorkspace(workspace.id)\r\n console.log('[TabbySpaces] service.deleteWorkspace done, calling loadWorkspaces')\r\n this.loadWorkspaces()\r\n console.log('[TabbySpaces] loadWorkspaces done, workspaces:', this.workspaces.length)\r\n }\r\n }\r\n\r\n async onEditorSave(workspace: Workspace): Promise<void> {\r\n console.log('[TabbySpaces] onEditorSave called', workspace.id, workspace.name)\r\n const existing = this.workspaces.find((w) => w.id === workspace.id)\r\n console.log('[TabbySpaces] existing workspace?', !!existing)\r\n if (existing) {\r\n await this.workspaceService.updateWorkspace(workspace)\r\n } else {\r\n await this.workspaceService.addWorkspace(workspace)\r\n }\r\n console.log('[TabbySpaces] save done, calling loadWorkspaces')\r\n this.loadWorkspaces()\r\n console.log('[TabbySpaces] calling closeEditor')\r\n this.closeEditor()\r\n console.log('[TabbySpaces] closeEditor done, showEditor:', this.showEditor)\r\n }\r\n\r\n closeEditor(): void {\r\n console.log('[TabbySpaces] closeEditor called, showEditor before:', this.showEditor)\r\n this.showEditor = false\r\n this.editingWorkspace = null\r\n this.cdr.detectChanges()\r\n console.log('[TabbySpaces] closeEditor done, showEditor after:', this.showEditor)\r\n }\r\n\r\n getPaneCount(workspace: Workspace): number {\r\n return countPanes(workspace.root)\r\n }\r\n\r\n getOrientationLabel(workspace: Workspace): string {\r\n return workspace.root.orientation === 'horizontal' ? 'horizontal' : 'vertical'\r\n }\r\n\r\n async setAsDefault(workspace: Workspace): Promise<void> {\r\n this.workspaces.forEach((w) => (w.isDefault = false))\r\n workspace.isDefault = true\r\n await this.workspaceService.saveWorkspaces(this.workspaces)\r\n this.loadWorkspaces()\r\n }\r\n}\r\n","import { Injectable } from '@angular/core'\r\nimport { SettingsTabProvider } from 'tabby-settings'\r\nimport { WorkspaceListComponent } from '../components/workspaceList.component'\r\nimport { CONFIG_KEY, DISPLAY_NAME } from '../build-config'\r\n\r\n@Injectable()\r\nexport class WorkspaceEditorSettingsProvider extends SettingsTabProvider {\r\n id = CONFIG_KEY\r\n icon = 'columns'\r\n title = DISPLAY_NAME\r\n\r\n getComponentType(): any {\r\n return WorkspaceListComponent\r\n }\r\n}\r\n","import { Injectable } from '@angular/core'\nimport { ToolbarButtonProvider, ToolbarButton, ProfilesService, AppService } from 'tabby-core'\nimport { WorkspaceEditorService } from '../services/workspaceEditor.service'\nimport { SettingsTabComponent } from 'tabby-settings'\nimport { CONFIG_KEY, DISPLAY_NAME } from '../build-config'\nimport { countPanes } from '../models/workspace.model'\n\n@Injectable()\nexport class WorkspaceToolbarProvider extends ToolbarButtonProvider {\n constructor(\n private workspaceService: WorkspaceEditorService,\n private profilesService: ProfilesService,\n private app: AppService\n ) {\n super()\n }\n\n provide(): ToolbarButton[] {\n return [\n {\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/>\n </svg>`,\n title: DISPLAY_NAME,\n weight: 5,\n click: () => this.showWorkspaceSelector()\n }\n ]\n }\n\n private async showWorkspaceSelector(): Promise<void> {\n const workspaces = this.workspaceService.getWorkspaces()\n\n if (workspaces.length === 0) {\n this.openSettings()\n return\n }\n\n const options = workspaces.map((ws) => ({\n name: ws.name,\n description: `${countPanes(ws.root)} panes`,\n icon: ws.icon || 'grid',\n color: ws.color,\n result: ws.id\n }))\n\n // Add option to open settings\n options.push({\n name: 'Manage Workspaces...',\n description: 'Create and edit workspaces',\n icon: 'cog',\n color: undefined,\n result: '__settings__'\n })\n\n const selectedId = await this.app.showSelector('Select Workspace', options)\n\n if (selectedId === '__settings__') {\n this.openSettings()\n } else if (selectedId) {\n this.openWorkspace(selectedId)\n }\n }\n\n private openSettings(): void {\n this.app.openNewTabRaw({ type: SettingsTabComponent, inputs: { activeTab: CONFIG_KEY } })\n }\n\n private openWorkspace(workspaceId: string): void {\n const workspaces = this.workspaceService.getWorkspaces()\n const workspace = workspaces.find((w) => w.id === workspaceId)\n\n if (!workspace) return\n\n const profile = this.workspaceService.generateTabbyProfile(workspace)\n this.profilesService.openNewTabForProfile(profile)\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'\r\nimport {\r\n Workspace,\r\n WorkspacePane,\r\n WorkspaceSplit,\r\n TabbyProfile,\r\n isWorkspaceSplit,\r\n createDefaultPane,\r\n generateUUID,\r\n} from '../models/workspace.model'\r\nimport { WorkspaceEditorService } from '../services/workspaceEditor.service'\r\n\r\n@Component({\r\n selector: 'workspace-editor',\r\n template: require('./workspaceEditor.component.pug'),\r\n styles: [require('./workspaceEditor.component.scss')],\r\n})\r\nexport class WorkspaceEditorComponent implements OnInit {\r\n @Input() workspace!: Workspace\r\n @Output() save = new EventEmitter<Workspace>()\r\n @Output() cancel = new EventEmitter<void>()\r\n\r\n selectedPane: WorkspacePane | null = null\r\n showPaneEditor = false\r\n profiles: TabbyProfile[] = []\r\n availableIcons = [\r\n 'columns', 'terminal', 'code', 'folder', 'home', 'briefcase',\r\n 'cog', 'database', 'server', 'cloud', 'rocket', 'flask',\r\n 'bug', 'wrench', 'cube', 'layer-group', 'sitemap', 'project-diagram'\r\n ]\r\n\r\n constructor(private workspaceService: WorkspaceEditorService) {}\r\n\r\n async ngOnInit(): Promise<void> {\r\n this.profiles = await this.workspaceService.getAvailableProfiles()\r\n if (!this.workspace.root) {\r\n this.workspace.root = {\r\n orientation: 'horizontal',\r\n ratios: [0.5, 0.5],\r\n children: [createDefaultPane(), createDefaultPane()],\r\n }\r\n }\r\n }\r\n\r\n onSave(): void {\r\n if (!this.workspace.name?.trim()) {\r\n return\r\n }\r\n this.save.emit(this.workspace)\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit()\r\n }\r\n\r\n selectPane(pane: WorkspacePane): void {\r\n this.selectedPane = pane\r\n this.showPaneEditor = true\r\n }\r\n\r\n closePaneEditor(): void {\r\n this.showPaneEditor = false\r\n this.selectedPane = null\r\n }\r\n\r\n onPaneSave(pane: WorkspacePane): void {\r\n this.updatePaneInTree(this.workspace.root, pane)\r\n this.closePaneEditor()\r\n }\r\n\r\n private updatePaneInTree(node: WorkspaceSplit, updatedPane: WorkspacePane): boolean {\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i]\r\n if (isWorkspaceSplit(child)) {\r\n if (this.updatePaneInTree(child, updatedPane)) {\r\n return true\r\n }\r\n } else if (child.id === updatedPane.id) {\r\n node.children[i] = updatedPane\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n splitPane(pane: WorkspacePane, orientation: 'horizontal' | 'vertical'): void {\r\n this.splitPaneInTree(this.workspace.root, pane, orientation)\r\n }\r\n\r\n private splitPaneInTree(\r\n node: WorkspaceSplit,\r\n targetPane: WorkspacePane,\r\n orientation: 'horizontal' | 'vertical'\r\n ): boolean {\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i]\r\n if (isWorkspaceSplit(child)) {\r\n if (this.splitPaneInTree(child, targetPane, orientation)) {\r\n return true\r\n }\r\n } else if (child.id === targetPane.id) {\r\n const newPane = createDefaultPane()\r\n newPane.profileId = child.profileId // Copy profile from source pane\r\n const newSplit: WorkspaceSplit = {\r\n orientation,\r\n ratios: [0.5, 0.5],\r\n children: [child, newPane],\r\n }\r\n node.children[i] = newSplit\r\n this.recalculateRatios(node)\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n\r\n removePane(pane: WorkspacePane): void {\r\n this.removePaneFromTree(this.workspace.root, pane)\r\n }\r\n\r\n private removePaneFromTree(node: WorkspaceSplit, targetPane: WorkspacePane): boolean {\r\n for (let i = 0; i < node.children.length; i++) {\r\n const child = node.children[i]\r\n if (isWorkspaceSplit(child)) {\r\n // Check if the pane is directly in this split\r\n const paneIndex = child.children.findIndex(\r\n (c) => !isWorkspaceSplit(c) && (c as WorkspacePane).id === targetPane.id\r\n )\r\n if (paneIndex !== -1 && child.children.length > 1) {\r\n child.children.splice(paneIndex, 1)\r\n this.recalculateRatios(child)\r\n // If only one child remains, flatten\r\n if (child.children.length === 1) {\r\n node.children[i] = child.children[0]\r\n }\r\n return true\r\n }\r\n if (this.removePaneFromTree(child, targetPane)) {\r\n return true\r\n }\r\n } else if (child.id === targetPane.id) {\r\n if (node.children.length > 1) {\r\n node.children.splice(i, 1)\r\n this.recalculateRatios(node)\r\n return true\r\n }\r\n }\r\n }\r\n return false\r\n }\r\n\r\n private recalculateRatios(split: WorkspaceSplit): void {\r\n const count = split.children.length\r\n split.ratios = split.children.map(() => 1 / count)\r\n }\r\n\r\n setOrientation(orientation: 'horizontal' | 'vertical'): void {\r\n this.workspace.root.orientation = orientation\r\n }\r\n\r\n updateRatio(index: number, value: number): void {\r\n const ratios = [...this.workspace.root.ratios]\r\n const diff = value - ratios[index]\r\n\r\n if (index < ratios.length - 1) {\r\n ratios[index] = value\r\n ratios[index + 1] -= diff\r\n } else {\r\n ratios[index] = value\r\n ratios[index - 1] -= diff\r\n }\r\n\r\n // Clamp values\r\n ratios.forEach((r, i) => {\r\n ratios[i] = Math.max(0.1, Math.min(0.9, r))\r\n })\r\n\r\n this.workspace.root.ratios = ratios\r\n }\r\n\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core'\r\nimport { WorkspacePane, TabbyProfile } from '../models/workspace.model'\r\n\r\n@Component({\r\n selector: 'pane-editor',\r\n template: require('./paneEditor.component.pug'),\r\n styles: [require('./paneEditor.component.scss')],\r\n})\r\nexport class PaneEditorComponent implements OnInit {\r\n @Input() pane!: WorkspacePane\r\n @Input() profiles: TabbyProfile[] = []\r\n @Output() save = new EventEmitter<WorkspacePane>()\r\n @Output() cancel = new EventEmitter<void>()\r\n\r\n editedPane!: WorkspacePane\r\n\r\n ngOnInit(): void {\r\n this.editedPane = { ...this.pane }\r\n }\r\n\r\n onSave(): void {\r\n this.save.emit(this.editedPane)\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit()\r\n }\r\n\r\n getProfileName(profileId: string): string {\r\n const profile = this.profiles.find((p) => p.id === profileId)\r\n return profile?.name ?? 'Unknown'\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core'\r\nimport {\r\n WorkspaceSplit,\r\n WorkspacePane,\r\n isWorkspaceSplit,\r\n} from '../models/workspace.model'\r\nimport { WorkspaceEditorService } from '../services/workspaceEditor.service'\r\n\r\n@Component({\r\n selector: 'split-preview',\r\n template: require('./splitPreview.component.pug'),\r\n styles: [require('./splitPreview.component.scss')],\r\n})\r\nexport class SplitPreviewComponent {\r\n @Input() split!: WorkspaceSplit\r\n @Input() depth = 0\r\n @Output() paneClick = new EventEmitter<WorkspacePane>()\r\n @Output() splitHorizontal = new EventEmitter<WorkspacePane>()\r\n @Output() splitVertical = new EventEmitter<WorkspacePane>()\r\n @Output() removePane = new EventEmitter<WorkspacePane>()\r\n\r\n contextMenuPane: WorkspacePane | null = null\r\n contextMenuPosition = { x: 0, y: 0 }\r\n\r\n constructor(private workspaceService: WorkspaceEditorService) {}\r\n\r\n isPane(child: WorkspacePane | WorkspaceSplit): boolean {\r\n return !isWorkspaceSplit(child)\r\n }\r\n\r\n isSplit(child: WorkspacePane | WorkspaceSplit): boolean {\r\n return isWorkspaceSplit(child)\r\n }\r\n\r\n asSplit(child: WorkspacePane | WorkspaceSplit): WorkspaceSplit {\r\n return child as WorkspaceSplit\r\n }\r\n\r\n asPane(child: WorkspacePane | WorkspaceSplit): WorkspacePane {\r\n return child as WorkspacePane\r\n }\r\n\r\n getFlexStyle(index: number): string {\r\n return `${this.split.ratios[index] * 100}%`\r\n }\r\n\r\n onPaneClick(pane: WorkspacePane): void {\r\n this.paneClick.emit(pane)\r\n }\r\n\r\n onContextMenu(event: MouseEvent, pane: WorkspacePane): void {\r\n event.preventDefault()\r\n this.contextMenuPane = pane\r\n this.contextMenuPosition = { x: event.clientX, y: event.clientY }\r\n }\r\n\r\n closeContextMenu(): void {\r\n this.contextMenuPane = null\r\n }\r\n\r\n onSplitH(): void {\r\n if (this.contextMenuPane) {\r\n this.splitHorizontal.emit(this.contextMenuPane)\r\n this.closeContextMenu()\r\n }\r\n }\r\n\r\n onSplitV(): void {\r\n if (this.contextMenuPane) {\r\n this.splitVertical.emit(this.contextMenuPane)\r\n this.closeContextMenu()\r\n }\r\n }\r\n\r\n onRemove(): void {\r\n if (this.contextMenuPane) {\r\n this.removePane.emit(this.contextMenuPane)\r\n this.closeContextMenu()\r\n }\r\n }\r\n\r\n getProfileName(profileId: string): string {\r\n return this.workspaceService.getProfileName(profileId) ?? 'Select profile'\r\n }\r\n\r\n getPaneLabel(pane: WorkspacePane): string {\r\n if (pane.title) return pane.title\r\n if (pane.startupCommand) {\r\n const cmd = pane.startupCommand\r\n return cmd.length > 20 ? cmd.substring(0, 17) + '...' : cmd\r\n }\r\n return this.getProfileName(pane.profileId)\r\n }\r\n\r\n // Pass-through events from nested splits\r\n onNestedPaneClick(pane: WorkspacePane): void {\r\n this.paneClick.emit(pane)\r\n }\r\n\r\n onNestedSplitH(pane: WorkspacePane): void {\r\n this.splitHorizontal.emit(pane)\r\n }\r\n\r\n onNestedSplitV(pane: WorkspacePane): void {\r\n this.splitVertical.emit(pane)\r\n }\r\n\r\n onNestedRemove(pane: WorkspacePane): void {\r\n this.removePane.emit(pane)\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { CommonModule } from '@angular/common'\r\nimport { FormsModule } from '@angular/forms'\r\nimport { ConfigProvider, ToolbarButtonProvider } from 'tabby-core'\r\nimport { SettingsTabProvider } from 'tabby-settings'\r\n\r\nimport { WorkspaceEditorConfigProvider } from './providers/config.provider'\r\nimport { WorkspaceEditorSettingsProvider } from './providers/settings.provider'\r\nimport { WorkspaceToolbarProvider } from './providers/toolbar.provider'\r\nimport { WorkspaceEditorService } from './services/workspaceEditor.service'\r\n\r\nimport { WorkspaceListComponent } from './components/workspaceList.component'\r\nimport { WorkspaceEditorComponent } from './components/workspaceEditor.component'\r\nimport { PaneEditorComponent } from './components/paneEditor.component'\r\nimport { SplitPreviewComponent } from './components/splitPreview.component'\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule],\r\n providers: [\r\n { provide: ConfigProvider, useClass: WorkspaceEditorConfigProvider, multi: true },\r\n { provide: SettingsTabProvider, useClass: WorkspaceEditorSettingsProvider, multi: true },\r\n { provide: ToolbarButtonProvider, useClass: WorkspaceToolbarProvider, multi: true },\r\n WorkspaceEditorService,\r\n ],\r\n declarations: [\r\n WorkspaceListComponent,\r\n WorkspaceEditorComponent,\r\n PaneEditorComponent,\r\n SplitPreviewComponent,\r\n ],\r\n})\r\nexport default class WorkspaceEditorModule {}\r\n\r\nexport {\r\n WorkspaceEditorService,\r\n WorkspaceEditorConfigProvider,\r\n WorkspaceEditorSettingsProvider,\r\n}\r\n"],"names":["root","factory","exports","module","require","e","define","amd","a","i","global","__WEBPACK_EXTERNAL_MODULE__860__","__WEBPACK_EXTERNAL_MODULE__358__","__WEBPACK_EXTERNAL_MODULE__182__","__WEBPACK_EXTERNAL_MODULE__650__","__WEBPACK_EXTERNAL_MODULE__700__","__WEBPACK_EXTERNAL_MODULE__947__","___CSS_LOADER_EXPORT___","push","id","result","__esModule","default","toString","locals","cssWithMappingToString","list","this","map","item","content","needLayer","concat","length","join","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","req","apply","pug_has_own_property","Object","prototype","hasOwnProperty","pug_classes","val","escaping","Array","isArray","className","classString","padding","escapeEnabled","pug_escape","pug_classes_array","key","call","pug_classes_object","pug_style","out","style","pug_attr","escaped","terse","type","toJSON","indexOf","replace","merge","pug_merge","b","arguments","attrs","valA","valB","classes","attr","obj","pug_match_html","_html","html","regexResult","exec","lastIndex","escape","index","charCodeAt","substring","rethrow","pug_rethrow","err","filename","lineno","str","Error","window","message","context","lines","start","end","encoding","split","Math","max","min","ex","slice","line","curr","path","code","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","d","definition","o","defineProperty","enumerable","get","prop","r","Symbol","toStringTag","value","CONFIG_KEY","DISPLAY_NAME","WorkspaceEditorConfigProvider","ConfigProvider","defaults","workspaces","isWorkspaceSplit","node","createDefaultPane","generateUUID","profileId","cwd","startupCommand","title","createDefaultSplit","orientation","ratios","children","c","random","countPanes","reduce","sum","child","Injectable","WorkspaceEditorService","constructor","config","notifications","profilesService","getWorkspaces","store","saveWorkspaces","syncTabbyProfiles","saveConfig","addWorkspace","workspace","info","name","updateWorkspace","findIndex","w","deleteWorkspace","workspaceId","find","filtered","filter","getAvailableProfiles","getProfiles","p","startsWith","profiles","splice","tabbyProfile","generateTabbyProfile","safeName","sanitizeForProfileId","group","icon","color","isBuiltin","options","recoveryToken","generateRecoveryToken","generatePaneToken","pane","baseProfile","getProfileById","profile","savedState","restoreFromPTYID","command","args","env","width","height","pauseAfterExit","runAsAdministrator","cmd","includes","toLowerCase","disableDynamicTitle","weight","isTemplate","terminalColorScheme","behaviorOnSessionEnd","tabTitle","tabCustomTitle","duplicateWorkspace","clone","parse","isDefault","regenerateIds","getProfileName","save","error","console","providedIn","ConfigService","NotificationsService","ProfilesService","WorkspaceListComponent","workspaceService","cdr","editingWorkspace","showEditor","configSubscription","ngOnInit","loadWorkspaces","changed$","subscribe","ngOnDestroy","unsubscribe","detectChanges","createWorkspace","defaultProfileId","createDefaultWorkspace","setProfileForAllPanes","forEach","editWorkspace","log","confirm","onEditorSave","existing","closeEditor","getPaneCount","getOrientationLabel","setAsDefault","Component","selector","template","styles","ChangeDetectorRef","WorkspaceEditorSettingsProvider","SettingsTabProvider","getComponentType","WorkspaceToolbarProvider","ToolbarButtonProvider","app","super","provide","click","showWorkspaceSelector","openSettings","ws","description","selectedId","showSelector","openWorkspace","openNewTabRaw","SettingsTabComponent","inputs","activeTab","openNewTabForProfile","AppService","WorkspaceEditorComponent","EventEmitter","cancel","selectedPane","showPaneEditor","availableIcons","onSave","trim","emit","onCancel","selectPane","closePaneEditor","onPaneSave","updatePaneInTree","updatedPane","splitPane","splitPaneInTree","targetPane","newPane","newSplit","recalculateRatios","removePane","removePaneFromTree","paneIndex","count","setOrientation","updateRatio","diff","Input","Output","PaneEditorComponent","editedPane","SplitPreviewComponent","depth","paneClick","splitHorizontal","splitVertical","contextMenuPane","contextMenuPosition","x","y","isPane","isSplit","asSplit","asPane","getFlexStyle","onPaneClick","onContextMenu","event","preventDefault","clientX","clientY","closeContextMenu","onSplitH","onSplitV","onRemove","getPaneLabel","onNestedPaneClick","onNestedSplitH","onNestedSplitV","onNestedRemove","WorkspaceEditorModule","NgModule","imports","CommonModule","FormsModule","providers","useClass","multi","declarations"],"ignoreList":[],"sourceRoot":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface TabbyProfileOptions {
|
|
2
|
+
command?: string;
|
|
3
|
+
args?: string[];
|
|
4
|
+
cwd?: string;
|
|
5
|
+
env?: Record<string, string>;
|
|
6
|
+
restoreFromPTYID?: boolean;
|
|
7
|
+
width?: number | null;
|
|
8
|
+
height?: number | null;
|
|
9
|
+
pauseAfterExit?: boolean;
|
|
10
|
+
runAsAdministrator?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface TabbyProfile {
|
|
13
|
+
id: string;
|
|
14
|
+
type: string;
|
|
15
|
+
name: string;
|
|
16
|
+
group?: string;
|
|
17
|
+
icon?: string;
|
|
18
|
+
color?: string;
|
|
19
|
+
options?: TabbyProfileOptions;
|
|
20
|
+
isBuiltin?: boolean;
|
|
21
|
+
isTemplate?: boolean;
|
|
22
|
+
weight?: number;
|
|
23
|
+
disableDynamicTitle?: boolean;
|
|
24
|
+
terminalColorScheme?: string | null;
|
|
25
|
+
behaviorOnSessionEnd?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface TabbyRecoveryToken {
|
|
28
|
+
type: string;
|
|
29
|
+
orientation?: 'h' | 'v';
|
|
30
|
+
ratios?: number[];
|
|
31
|
+
children?: TabbyRecoveryToken[];
|
|
32
|
+
profile?: Partial<TabbyProfile>;
|
|
33
|
+
savedState?: boolean;
|
|
34
|
+
tabTitle?: string;
|
|
35
|
+
tabCustomTitle?: string;
|
|
36
|
+
disableDynamicTitle?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface TabbySplitLayoutProfile {
|
|
39
|
+
id: string;
|
|
40
|
+
type: 'split-layout';
|
|
41
|
+
name: string;
|
|
42
|
+
group: string;
|
|
43
|
+
icon?: string;
|
|
44
|
+
color?: string;
|
|
45
|
+
isBuiltin: boolean;
|
|
46
|
+
options: {
|
|
47
|
+
recoveryToken: TabbyRecoveryToken;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export interface WorkspacePane {
|
|
51
|
+
id: string;
|
|
52
|
+
profileId: string;
|
|
53
|
+
cwd?: string;
|
|
54
|
+
startupCommand?: string;
|
|
55
|
+
title?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface WorkspaceSplit {
|
|
58
|
+
orientation: 'horizontal' | 'vertical';
|
|
59
|
+
ratios: number[];
|
|
60
|
+
children: (WorkspacePane | WorkspaceSplit)[];
|
|
61
|
+
}
|
|
62
|
+
export interface Workspace {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
icon?: string;
|
|
66
|
+
color?: string;
|
|
67
|
+
root: WorkspaceSplit;
|
|
68
|
+
isDefault?: boolean;
|
|
69
|
+
hotkey?: string;
|
|
70
|
+
}
|
|
71
|
+
export declare function isWorkspaceSplit(node: WorkspacePane | WorkspaceSplit): node is WorkspaceSplit;
|
|
72
|
+
export declare function createDefaultPane(): WorkspacePane;
|
|
73
|
+
export declare function createDefaultSplit(orientation?: 'horizontal' | 'vertical'): WorkspaceSplit;
|
|
74
|
+
export declare function createDefaultWorkspace(name?: string): Workspace;
|
|
75
|
+
export declare function generateUUID(): string;
|
|
76
|
+
export declare function countPanes(node: WorkspacePane | WorkspaceSplit): number;
|
|
77
|
+
//# sourceMappingURL=workspace.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.model.d.ts","sourceRoot":"","sources":["../../src/models/workspace.model.ts"],"names":[],"mappings":"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"}
|