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.
Files changed (76) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/.github/workflows/ci.yml +26 -0
  3. package/.github/workflows/claude-code-review.yml +44 -0
  4. package/.github/workflows/claude.yml +81 -0
  5. package/.github/workflows/release.yml +30 -0
  6. package/CHANGELOG.md +46 -0
  7. package/CLAUDE.md +33 -0
  8. package/CONTRIBUTING.md +3 -1
  9. package/README.md +21 -18
  10. package/TODO.md +5 -0
  11. package/dist/build-config.d.ts +3 -3
  12. package/dist/components/deleteConfirmModal.component.d.ts +7 -0
  13. package/dist/components/deleteConfirmModal.component.d.ts.map +1 -0
  14. package/dist/components/paneEditor.component.d.ts +9 -18
  15. package/dist/components/paneEditor.component.d.ts.map +1 -1
  16. package/dist/components/splitPreview.component.d.ts +50 -50
  17. package/dist/components/splitPreview.component.d.ts.map +1 -1
  18. package/dist/components/workspaceEditor.component.d.ts +61 -54
  19. package/dist/components/workspaceEditor.component.d.ts.map +1 -1
  20. package/dist/components/workspaceList.component.d.ts +56 -39
  21. package/dist/components/workspaceList.component.d.ts.map +1 -1
  22. package/dist/index.d.ts +6 -6
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.LICENSE.txt +1 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/models/workspace.model.d.ts +118 -78
  28. package/dist/models/workspace.model.d.ts.map +1 -1
  29. package/dist/package.json +1 -1
  30. package/dist/providers/config.provider.d.ts +8 -8
  31. package/dist/providers/settings.provider.d.ts +7 -7
  32. package/dist/providers/toolbar.provider.d.ts +23 -15
  33. package/dist/providers/toolbar.provider.d.ts.map +1 -1
  34. package/dist/services/startupCommand.service.d.ts +27 -19
  35. package/dist/services/startupCommand.service.d.ts.map +1 -1
  36. package/dist/services/workspaceBackground.service.d.ts +38 -0
  37. package/dist/services/workspaceBackground.service.d.ts.map +1 -0
  38. package/dist/services/workspaceEditor.service.d.ts +46 -32
  39. package/dist/services/workspaceEditor.service.d.ts.map +1 -1
  40. package/docs/DESIGN.md +57 -0
  41. package/docs/SESSION-2026-01-14-S1-DESIGN.md +134 -0
  42. package/mockups/index.html +162 -0
  43. package/mockups/s1-tight-sharp.html +522 -0
  44. package/mockups/shared/base.css +216 -0
  45. package/mockups/v06-tabbed.html +643 -0
  46. package/package.json +2 -1
  47. package/screenshots/editor.png +0 -0
  48. package/scripts/build-dev.js +2 -1
  49. package/scripts/build-prod.js +2 -1
  50. package/src/components/deleteConfirmModal.component.ts +23 -0
  51. package/src/components/paneEditor.component.pug +27 -43
  52. package/src/components/paneEditor.component.scss +37 -85
  53. package/src/components/paneEditor.component.ts +4 -32
  54. package/src/components/splitPreview.component.pug +0 -9
  55. package/src/components/splitPreview.component.scss +46 -70
  56. package/src/components/splitPreview.component.ts +15 -25
  57. package/src/components/workspaceEditor.component.pug +140 -112
  58. package/src/components/workspaceEditor.component.scss +270 -202
  59. package/src/components/workspaceEditor.component.ts +161 -85
  60. package/src/components/workspaceList.component.pug +31 -51
  61. package/src/components/workspaceList.component.scss +86 -77
  62. package/src/components/workspaceList.component.ts +89 -34
  63. package/src/index.ts +4 -0
  64. package/src/models/workspace.model.ts +80 -2
  65. package/src/providers/toolbar.provider.ts +78 -9
  66. package/src/services/startupCommand.service.ts +30 -32
  67. package/src/services/workspaceBackground.service.ts +167 -0
  68. package/src/services/workspaceEditor.service.ts +77 -40
  69. package/src/styles/_index.scss +3 -0
  70. package/src/styles/_mixins.scss +180 -0
  71. package/src/styles/_variables.scss +67 -0
  72. package/TEST_MCP.md +0 -176
  73. package/cdp-click.js +0 -22
  74. package/cdp-test.js +0 -28
  75. package/screenshots/pane-edit.png +0 -0
  76. 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>