tabby-tabbyspaces 0.1.0 → 0.2.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 +2 -1
- package/.github/workflows/ci.yml +26 -0
- package/.github/workflows/claude-code-review.yml +44 -0
- package/.github/workflows/claude.yml +81 -0
- package/.github/workflows/release.yml +30 -0
- package/CHANGELOG.md +46 -0
- package/CLAUDE.md +33 -0
- package/CONTRIBUTING.md +3 -1
- package/README.md +21 -18
- package/TODO.md +5 -0
- package/dist/build-config.d.ts +3 -3
- package/dist/components/deleteConfirmModal.component.d.ts +7 -0
- package/dist/components/deleteConfirmModal.component.d.ts.map +1 -0
- package/dist/components/paneEditor.component.d.ts +9 -18
- package/dist/components/paneEditor.component.d.ts.map +1 -1
- package/dist/components/splitPreview.component.d.ts +50 -50
- package/dist/components/splitPreview.component.d.ts.map +1 -1
- package/dist/components/workspaceEditor.component.d.ts +61 -54
- package/dist/components/workspaceEditor.component.d.ts.map +1 -1
- package/dist/components/workspaceList.component.d.ts +56 -39
- package/dist/components/workspaceList.component.d.ts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models/workspace.model.d.ts +118 -78
- package/dist/models/workspace.model.d.ts.map +1 -1
- package/dist/package.json +1 -1
- package/dist/providers/config.provider.d.ts +8 -8
- package/dist/providers/settings.provider.d.ts +7 -7
- package/dist/providers/toolbar.provider.d.ts +23 -15
- package/dist/providers/toolbar.provider.d.ts.map +1 -1
- package/dist/services/startupCommand.service.d.ts +27 -19
- package/dist/services/startupCommand.service.d.ts.map +1 -1
- package/dist/services/workspaceBackground.service.d.ts +38 -0
- package/dist/services/workspaceBackground.service.d.ts.map +1 -0
- package/dist/services/workspaceEditor.service.d.ts +46 -32
- package/dist/services/workspaceEditor.service.d.ts.map +1 -1
- package/docs/DESIGN.md +57 -0
- package/docs/SESSION-2026-01-14-S1-DESIGN.md +134 -0
- package/mockups/index.html +162 -0
- package/mockups/s1-tight-sharp.html +522 -0
- package/mockups/shared/base.css +216 -0
- package/mockups/v06-tabbed.html +643 -0
- package/package.json +2 -1
- package/screenshots/editor.png +0 -0
- package/scripts/build-dev.js +2 -1
- package/scripts/build-prod.js +2 -1
- package/src/components/deleteConfirmModal.component.ts +23 -0
- package/src/components/paneEditor.component.pug +27 -43
- package/src/components/paneEditor.component.scss +37 -85
- package/src/components/paneEditor.component.ts +4 -32
- package/src/components/splitPreview.component.pug +0 -9
- package/src/components/splitPreview.component.scss +46 -70
- package/src/components/splitPreview.component.ts +15 -25
- package/src/components/workspaceEditor.component.pug +140 -112
- package/src/components/workspaceEditor.component.scss +270 -202
- package/src/components/workspaceEditor.component.ts +161 -85
- package/src/components/workspaceList.component.pug +31 -51
- package/src/components/workspaceList.component.scss +86 -77
- package/src/components/workspaceList.component.ts +89 -34
- package/src/index.ts +4 -0
- package/src/models/workspace.model.ts +80 -2
- package/src/providers/toolbar.provider.ts +78 -9
- package/src/services/startupCommand.service.ts +30 -32
- package/src/services/workspaceBackground.service.ts +167 -0
- package/src/services/workspaceEditor.service.ts +77 -40
- package/src/styles/_index.scss +3 -0
- package/src/styles/_mixins.scss +180 -0
- package/src/styles/_variables.scss +67 -0
- package/TEST_MCP.md +0 -176
- package/cdp-click.js +0 -22
- package/cdp-test.js +0 -28
- package/screenshots/pane-edit.png +0 -0
- package/test_cdp.py +0 -50
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Session Summary: S1 Design Implementation
|
|
2
|
+
**Date:** 2026-01-14
|
|
3
|
+
**Branch:** design
|
|
4
|
+
|
|
5
|
+
## Task
|
|
6
|
+
Implement S1 "Tight & Sharp" design from `mockups/s1-tight-sharp.html` into TabbySpaces plugin.
|
|
7
|
+
|
|
8
|
+
## Status: COMPLETED (Core Structure)
|
|
9
|
+
|
|
10
|
+
### What Was Done
|
|
11
|
+
|
|
12
|
+
#### 1. Tab Bar Navigation (workspaceList)
|
|
13
|
+
- **Before:** Vertical card list with workspace items
|
|
14
|
+
- **After:** Horizontal tab bar with colored icons, close buttons, and "+" button
|
|
15
|
+
- **Files:** `workspaceList.component.pug`, `workspaceList.component.scss`
|
|
16
|
+
|
|
17
|
+
#### 2. Editor Section Structure (workspaceEditor)
|
|
18
|
+
- Added explicit sections with uppercase titles and icons:
|
|
19
|
+
- "WORKSPACE SETTINGS" (fa-cog)
|
|
20
|
+
- "SPLIT LAYOUT" (fa-columns)
|
|
21
|
+
- **Files:** `workspaceEditor.component.pug`, `workspaceEditor.component.scss`
|
|
22
|
+
|
|
23
|
+
#### 3. Dropdown Triggers
|
|
24
|
+
- Icon picker: Styled as dropdown trigger with chevron
|
|
25
|
+
- Color picker: Native input wrapped in dropdown-style trigger with chevron
|
|
26
|
+
- **Files:** `workspaceEditor.component.pug`, `workspaceEditor.component.scss`
|
|
27
|
+
|
|
28
|
+
#### 4. Inline Pane Editor (MAJOR CHANGE)
|
|
29
|
+
- **Before:** Modal overlay with backdrop
|
|
30
|
+
- **After:** Inline panel below split preview with:
|
|
31
|
+
- Header with title and close button
|
|
32
|
+
- 2-column grid form (Profile, CWD, Title, Command)
|
|
33
|
+
- Cancel/Apply buttons at bottom
|
|
34
|
+
- **Files:** `paneEditor.component.pug`, `paneEditor.component.scss`, `paneEditor.component.ts`
|
|
35
|
+
|
|
36
|
+
#### 5. Preview Toolbar
|
|
37
|
+
- Reorganized toolbar above split preview:
|
|
38
|
+
- Edit (fa-pen)
|
|
39
|
+
- Split H (fa-grip-lines-vertical)
|
|
40
|
+
- Split V (fa-grip-lines)
|
|
41
|
+
- Separator
|
|
42
|
+
- Add Left/Right/Up/Down (fa-arrow-*)
|
|
43
|
+
- Separator
|
|
44
|
+
- Delete (fa-trash, danger style)
|
|
45
|
+
- **Files:** `workspaceEditor.component.pug`, `workspaceEditor.component.scss`
|
|
46
|
+
|
|
47
|
+
#### 6. Split Preview Container
|
|
48
|
+
- Wrapped preview in bordered container with padding
|
|
49
|
+
- **Files:** `workspaceEditor.component.scss`
|
|
50
|
+
|
|
51
|
+
#### 7. Action Buttons
|
|
52
|
+
- Footer with:
|
|
53
|
+
- Left: "Launch on startup" checkbox
|
|
54
|
+
- Right: Cancel (ghost), Save (success) buttons
|
|
55
|
+
- **Files:** `workspaceEditor.component.pug`, `workspaceEditor.component.scss`
|
|
56
|
+
|
|
57
|
+
### Files Modified
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
src/components/
|
|
61
|
+
├── workspaceList.component.pug # Tab bar structure
|
|
62
|
+
├── workspaceList.component.scss # Tab bar styles
|
|
63
|
+
├── workspaceEditor.component.pug # Sections, dropdowns, toolbar, inline pane editor
|
|
64
|
+
├── workspaceEditor.component.scss # All new styles
|
|
65
|
+
├── paneEditor.component.pug # Inline panel (removed modal)
|
|
66
|
+
├── paneEditor.component.scss # Inline panel styles
|
|
67
|
+
└── paneEditor.component.ts # Removed modal-specific code
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Previously Done (before this session)
|
|
71
|
+
- Variables (`_variables.scss`): S1 spacing, radius, shadows, fonts
|
|
72
|
+
- Mixins (`_mixins.scss`): form-input, form-label, interactive-card
|
|
73
|
+
- Color/icon picker size reduced to 28x28px
|
|
74
|
+
|
|
75
|
+
### Build Status
|
|
76
|
+
✅ Build successful (`npm run build:dev`)
|
|
77
|
+
- Only Sass deprecation warnings (expected, @import rules)
|
|
78
|
+
|
|
79
|
+
## What Might Need Attention
|
|
80
|
+
|
|
81
|
+
### 1. Visual Testing Required
|
|
82
|
+
- Restart Tabby and visually verify all changes
|
|
83
|
+
- Test tab switching, pane selection, split/add operations
|
|
84
|
+
- Check inline pane editor save/cancel flow
|
|
85
|
+
|
|
86
|
+
### 2. Potential Issues to Watch
|
|
87
|
+
- Tab close button might need adjustment (currently uses deleteWorkspace with confirm dialog)
|
|
88
|
+
- Icon dropdown positioning (absolute, right-aligned)
|
|
89
|
+
- Color picker trigger click area (hidden input overlay)
|
|
90
|
+
|
|
91
|
+
### 3. Not Implemented (out of scope for this session)
|
|
92
|
+
- Open/Duplicate buttons removed from UI (were on cards, not in tab bar)
|
|
93
|
+
- Could add to editor action buttons or tab context menu later
|
|
94
|
+
- No mobile/responsive considerations
|
|
95
|
+
|
|
96
|
+
## Reference: Mockup vs Implementation
|
|
97
|
+
|
|
98
|
+
| Mockup Element | Implementation |
|
|
99
|
+
|----------------|----------------|
|
|
100
|
+
| `.tab-bar` | ✅ Implemented |
|
|
101
|
+
| `.tab` with icon, name, close | ✅ Implemented |
|
|
102
|
+
| `.tab-new` (+) | ✅ Implemented |
|
|
103
|
+
| `.tab-content` | ✅ Implemented |
|
|
104
|
+
| `.editor-section` | ✅ Implemented |
|
|
105
|
+
| `.section-title` | ✅ Implemented |
|
|
106
|
+
| `.form-row`, `.form-group` | ✅ Implemented |
|
|
107
|
+
| `.dropdown-trigger` | ✅ Implemented |
|
|
108
|
+
| `.color-trigger` | ✅ Implemented (native input wrapped) |
|
|
109
|
+
| `.split-preview-container` | ✅ Implemented |
|
|
110
|
+
| `.preview-toolbar` | ✅ Implemented |
|
|
111
|
+
| `.preview-btn` | ✅ Implemented |
|
|
112
|
+
| `.toolbar-separator` | ✅ Implemented |
|
|
113
|
+
| `.pane-details` (inline panel) | ✅ Implemented |
|
|
114
|
+
| `.pane-form` (2-col grid) | ✅ Implemented |
|
|
115
|
+
| `.action-buttons` | ✅ Implemented |
|
|
116
|
+
| `.checkbox-group` | ✅ Implemented |
|
|
117
|
+
|
|
118
|
+
## Quick Start for Next Session
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# Build and test
|
|
122
|
+
cd C:\Users\halil\tabbyspaces
|
|
123
|
+
npm run build:dev
|
|
124
|
+
|
|
125
|
+
# Install if needed
|
|
126
|
+
cd "$APPDATA/tabby/plugins" && npm install "C:/Users/halil/tabbyspaces/dist-dev"
|
|
127
|
+
|
|
128
|
+
# Restart Tabby to see changes
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Key Files to Read
|
|
132
|
+
- `mockups/s1-tight-sharp.html` - Target design
|
|
133
|
+
- `src/styles/_variables.scss` - S1 spacing/radius values
|
|
134
|
+
- `src/styles/_mixins.scss` - Reusable patterns
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>TabbySpaces Design Mockups</title>
|
|
7
|
+
<link rel="stylesheet" href="shared/base.css">
|
|
8
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
|
9
|
+
<style>
|
|
10
|
+
.mockup-container {
|
|
11
|
+
padding: var(--space-4xl);
|
|
12
|
+
max-width: 700px;
|
|
13
|
+
margin: 0 auto;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
header {
|
|
17
|
+
text-align: center;
|
|
18
|
+
margin-bottom: var(--space-4xl);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
header h1 {
|
|
22
|
+
font-size: var(--font-size-xl);
|
|
23
|
+
color: var(--theme-fg-more);
|
|
24
|
+
margin-bottom: var(--space-md);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
header p {
|
|
28
|
+
color: var(--theme-fg-less);
|
|
29
|
+
font-size: var(--font-size-sm);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.variants-list {
|
|
33
|
+
display: flex;
|
|
34
|
+
flex-direction: column;
|
|
35
|
+
gap: var(--space-lg);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.variant-card {
|
|
39
|
+
display: block;
|
|
40
|
+
background: var(--theme-bg-more);
|
|
41
|
+
border: 1px solid var(--theme-border);
|
|
42
|
+
border-radius: var(--radius-lg);
|
|
43
|
+
padding: var(--space-xl);
|
|
44
|
+
text-decoration: none;
|
|
45
|
+
color: inherit;
|
|
46
|
+
transition: all var(--transition-normal);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.variant-card:hover {
|
|
50
|
+
border-color: var(--theme-primary);
|
|
51
|
+
transform: translateY(-2px);
|
|
52
|
+
box-shadow: var(--shadow-md);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.variant-badges {
|
|
56
|
+
display: flex;
|
|
57
|
+
gap: var(--space-sm);
|
|
58
|
+
margin-bottom: var(--space-md);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.variant-badge {
|
|
62
|
+
display: inline-flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
gap: var(--space-sm);
|
|
65
|
+
padding: var(--space-xs) var(--space-md);
|
|
66
|
+
border-radius: var(--radius-sm);
|
|
67
|
+
font-size: var(--font-size-xs);
|
|
68
|
+
font-weight: 600;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.variant-badge.selected {
|
|
72
|
+
background: var(--theme-success);
|
|
73
|
+
color: white;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.variant-badge.layout {
|
|
77
|
+
background: rgba(0,120,212,0.15);
|
|
78
|
+
color: var(--theme-primary);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.variant-badge.style {
|
|
82
|
+
background: rgba(16,185,129,0.15);
|
|
83
|
+
color: var(--theme-success);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.variant-card h3 {
|
|
87
|
+
font-size: var(--font-size-md);
|
|
88
|
+
color: var(--theme-fg-more);
|
|
89
|
+
margin-bottom: var(--space-sm);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.variant-card p {
|
|
93
|
+
font-size: var(--font-size-sm);
|
|
94
|
+
color: var(--theme-fg-less);
|
|
95
|
+
margin-bottom: var(--space-md);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.variant-specs {
|
|
99
|
+
display: flex;
|
|
100
|
+
gap: var(--space-lg);
|
|
101
|
+
flex-wrap: wrap;
|
|
102
|
+
font-size: var(--font-size-xs);
|
|
103
|
+
color: var(--theme-fg-less);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.variant-specs span {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
gap: var(--space-xs);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
footer {
|
|
113
|
+
margin-top: var(--space-4xl);
|
|
114
|
+
text-align: center;
|
|
115
|
+
color: var(--theme-fg-less);
|
|
116
|
+
font-size: var(--font-size-xs);
|
|
117
|
+
}
|
|
118
|
+
</style>
|
|
119
|
+
</head>
|
|
120
|
+
<body>
|
|
121
|
+
<div class="mockup-container">
|
|
122
|
+
<header>
|
|
123
|
+
<h1><i class="fa-solid fa-palette"></i> TabbySpaces Design</h1>
|
|
124
|
+
<p>Selected layout and style for implementation</p>
|
|
125
|
+
</header>
|
|
126
|
+
|
|
127
|
+
<div class="variants-list">
|
|
128
|
+
<a href="v06-tabbed.html" class="variant-card">
|
|
129
|
+
<div class="variant-badges">
|
|
130
|
+
<span class="variant-badge selected"><i class="fa-solid fa-check"></i> Selected</span>
|
|
131
|
+
<span class="variant-badge layout">Layout</span>
|
|
132
|
+
</div>
|
|
133
|
+
<h3>V06 - Tabbed Interface</h3>
|
|
134
|
+
<p>Browser-tab metaphor for workspace switching. Tab bar with icons + names, "+" for new workspace. Full editor below with inline pane config and nested splits.</p>
|
|
135
|
+
<div class="variant-specs">
|
|
136
|
+
<span><i class="fa-solid fa-folder"></i> Tab-based nav</span>
|
|
137
|
+
<span><i class="fa-solid fa-columns"></i> Nested splits</span>
|
|
138
|
+
<span><i class="fa-solid fa-sliders"></i> Inline editing</span>
|
|
139
|
+
</div>
|
|
140
|
+
</a>
|
|
141
|
+
|
|
142
|
+
<a href="s1-tight-sharp.html" class="variant-card">
|
|
143
|
+
<div class="variant-badges">
|
|
144
|
+
<span class="variant-badge selected"><i class="fa-solid fa-check"></i> Selected</span>
|
|
145
|
+
<span class="variant-badge style">Style</span>
|
|
146
|
+
</div>
|
|
147
|
+
<h3>S1 - Tight & Sharp</h3>
|
|
148
|
+
<p>Compact spacing, sharp corners, flat aesthetic. IDE-like density that maximizes information without clutter.</p>
|
|
149
|
+
<div class="variant-specs">
|
|
150
|
+
<span><i class="fa-solid fa-compress"></i> Tight spacing</span>
|
|
151
|
+
<span><i class="fa-solid fa-square"></i> 2-4px radius</span>
|
|
152
|
+
<span><i class="fa-solid fa-minus"></i> Flat / no shadows</span>
|
|
153
|
+
</div>
|
|
154
|
+
</a>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<footer>
|
|
158
|
+
<p>Constraints: max-width 876px | Dark theme | Static HTML/CSS</p>
|
|
159
|
+
</footer>
|
|
160
|
+
</div>
|
|
161
|
+
</body>
|
|
162
|
+
</html>
|