tabby-tabbyspaces 0.2.4 → 0.2.6

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.
@@ -1,6 +1,6 @@
1
1
  .workspace-list-container
2
2
  //- Tab bar navigation
3
- .tab-bar
3
+ .tab-bar(*ngIf='workspaces.length > 0 || editingWorkspace')
4
4
  .tab(
5
5
  *ngFor='let tab of displayTabs; trackBy: trackByTab',
6
6
  [class.active]='isTabSelected(tab)',
@@ -30,8 +30,11 @@
30
30
  )
31
31
 
32
32
  //- Empty state (when no workspaces)
33
- .tab-content.empty-state(*ngIf='!editingWorkspace && workspaces.length === 0')
34
- p No workspaces configured yet.
35
- p Click
36
- strong +
37
- | to create your first workspace.
33
+ .empty-state(*ngIf='!editingWorkspace && workspaces.length === 0')
34
+ .empty-state-icon
35
+ i.fas.fa-columns
36
+ h2.empty-state-title TabbySpaces
37
+ p.empty-state-description Create custom split layouts with profiles, working directories, and startup commands.
38
+ button.empty-state-cta((click)='createWorkspace()')
39
+ i.fas.fa-plus
40
+ | Create Workspace
@@ -1,7 +1,18 @@
1
1
  @use '../styles/index' as *;
2
2
 
3
+ :host {
4
+ display: flex;
5
+ flex-direction: column;
6
+ flex: 1;
7
+ min-height: 0;
8
+ }
9
+
3
10
  .workspace-list-container {
4
11
  padding: $spacing-2xl;
12
+ display: flex;
13
+ flex-direction: column;
14
+ flex: 1;
15
+ min-height: 0;
5
16
  }
6
17
 
7
18
  // Tab bar
@@ -109,19 +120,43 @@
109
120
  border: 1px solid var(--theme-border, $fallback-border);
110
121
  border-top: none;
111
122
  padding: $spacing-xl;
123
+ flex: 1;
124
+ min-height: 0;
125
+ display: flex;
126
+ flex-direction: column;
127
+ }
128
+
129
+ // Empty state
130
+ .empty-state {
131
+ @include flex-center;
132
+ flex-direction: column;
133
+ padding: 80px $spacing-2xl;
134
+ text-align: center;
135
+ flex: 1;
136
+ }
112
137
 
113
- &.empty-state {
114
- text-align: center;
115
- padding: $spacing-2xl;
116
- color: var(--theme-fg-more);
138
+ .empty-state-icon {
139
+ font-size: 2.5rem;
140
+ color: var(--theme-fg-more, $fallback-fg-more);
141
+ margin-bottom: $spacing-xl;
142
+ opacity: 0.5;
143
+ }
117
144
 
118
- p {
119
- margin: $spacing-md 0;
120
- }
145
+ .empty-state-title {
146
+ font-size: 1.2rem;
147
+ font-weight: 600;
148
+ color: var(--theme-fg);
149
+ margin: 0 0 $spacing-md;
150
+ }
121
151
 
122
- strong {
123
- color: var(--theme-primary);
124
- padding: 0 $spacing-xs;
125
- }
126
- }
152
+ .empty-state-description {
153
+ font-size: $font-sm;
154
+ color: var(--theme-fg-more, $fallback-fg-more);
155
+ margin: 0 0 $spacing-2xl;
156
+ max-width: 320px;
157
+ line-height: 1.5;
158
+ }
159
+
160
+ .empty-state-cta {
161
+ @include btn-primary;
127
162
  }
@@ -16,7 +16,7 @@ import {
16
16
  isWorkspaceSplit,
17
17
  } from '../models/workspace.model'
18
18
 
19
- const SETTINGS_MAX_WIDTH = '876px'
19
+ const SETTINGS_MAX_WIDTH = 'none'
20
20
 
21
21
  @Component({
22
22
  selector: 'workspace-list',
@@ -53,12 +53,22 @@ export class WorkspaceListComponent implements OnInit, OnDestroy, AfterViewInit
53
53
  })
54
54
  }
55
55
 
56
+ private originalStyles: { element: HTMLElement; maxWidth: string; height: string }[] = []
57
+
56
58
  ngAfterViewInit(): void {
57
- // Hack: Override Tabby's settings-tab-body max-width restriction
59
+ // Hack: Override Tabby's settings-tab-body to allow full-height layout.
60
+ // Only touches settingsTabBody — host styles are in SCSS :host block.
61
+ // Parent elements (like .tab-pane) are NOT modified to avoid affecting other tabs.
58
62
  setTimeout(() => {
59
- const parent = this.elementRef.nativeElement.closest('settings-tab-body') as HTMLElement
60
- if (parent) {
61
- parent.style.maxWidth = SETTINGS_MAX_WIDTH
63
+ const settingsTabBody = this.elementRef.nativeElement.closest('settings-tab-body') as HTMLElement
64
+ if (settingsTabBody) {
65
+ this.originalStyles.push({
66
+ element: settingsTabBody,
67
+ maxWidth: settingsTabBody.style.maxWidth,
68
+ height: settingsTabBody.style.height,
69
+ })
70
+ settingsTabBody.style.maxWidth = SETTINGS_MAX_WIDTH
71
+ settingsTabBody.style.height = '100%'
62
72
  }
63
73
  }, 0)
64
74
  }
@@ -82,6 +92,12 @@ export class WorkspaceListComponent implements OnInit, OnDestroy, AfterViewInit
82
92
 
83
93
  ngOnDestroy(): void {
84
94
  this.configSubscription?.unsubscribe()
95
+ // Restore original styles on parent elements to avoid affecting other settings tabs
96
+ for (const entry of this.originalStyles) {
97
+ entry.element.style.maxWidth = entry.maxWidth
98
+ entry.element.style.height = entry.height
99
+ }
100
+ this.originalStyles = []
85
101
  }
86
102
 
87
103
  loadWorkspaces(): void {
@@ -58,6 +58,7 @@ export interface TabbySplitLayoutProfile {
58
58
  // Workspace interfaces
59
59
  export interface WorkspacePane {
60
60
  id: string
61
+ name?: string
61
62
  profileId: string
62
63
  cwd?: string
63
64
  startupCommand?: string
@@ -173,7 +173,7 @@
173
173
  // ======================
174
174
 
175
175
  @mixin dropdown-panel {
176
- background: var(--theme-bg-more);
176
+ background: var(--theme-bg-more, $fallback-bg-more);
177
177
  border: 1px solid var(--theme-border, $fallback-border);
178
178
  border-radius: $radius-md;
179
179
  box-shadow: $shadow-dropdown;
@@ -28,6 +28,7 @@ $color-danger: #ef4444;
28
28
  // Fallback values for Tabby theme variables that may not be defined
29
29
  $fallback-border: rgba(255, 255, 255, 0.1);
30
30
  $fallback-fg-more: rgba(255, 255, 255, 0.3);
31
+ $fallback-bg-more: #1e1e1e;
31
32
 
32
33
  // ======================
33
34
  // SHADOWS (S1: Flat - no shadows)
@@ -1,44 +0,0 @@
1
- name: Claude Code Review
2
-
3
- on:
4
- pull_request:
5
- types: [opened, synchronize, ready_for_review, reopened]
6
- # Optional: Only run on specific file changes
7
- # paths:
8
- # - "src/**/*.ts"
9
- # - "src/**/*.tsx"
10
- # - "src/**/*.js"
11
- # - "src/**/*.jsx"
12
-
13
- jobs:
14
- claude-review:
15
- # Only run for repository members to control costs
16
- if: |
17
- github.event.pull_request.author_association == 'OWNER' ||
18
- github.event.pull_request.author_association == 'MEMBER' ||
19
- github.event.pull_request.author_association == 'COLLABORATOR'
20
-
21
- runs-on: ubuntu-latest
22
- permissions:
23
- contents: write
24
- pull-requests: write
25
- issues: read
26
- id-token: write
27
-
28
- steps:
29
- - name: Checkout repository
30
- uses: actions/checkout@v4
31
- with:
32
- fetch-depth: 0
33
-
34
- - name: Run Claude Code Review
35
- id: claude-review
36
- uses: anthropics/claude-code-action@v1.0.0
37
- with:
38
- claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
39
- prompt: >
40
- Please review the changes in this pull request and leave a concise summary comment with any issues, suggestions, and potential bugs:
41
- https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}
42
- # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
43
- # or https://code.claude.com/docs/en/cli-reference for available options
44
-