Skip to content

Commit 9d5925b

Browse files
committed
refactor window-layout-form with reusable components
1 parent e4e5e1d commit 9d5925b

1 file changed

Lines changed: 46 additions & 73 deletions

File tree

src/components/forms/window-layout-form/window-layout-form.component.ts

Lines changed: 46 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import { ConfigStoreService } from '../../../services/config-store.service';
55
import { KittyWindowLayoutConfig, KittyLayout } from '../../../models/kitty-types';
66
import { NumberInputComponent } from '../../shared/number-input/number-input.component';
77
import { VersionBadgeComponent } from '../../shared/version-badge/version-badge.component';
8+
import { SliderInputComponent } from '../../shared/slider-input/slider-input.component';
9+
import { ColorInputComponent } from '../../shared/color-input/color-input.component';
810
import { KittyVersionService } from '../../../services/kitty-version.service';
911

1012
@Component({
1113
selector: 'app-window-layout-form',
12-
imports: [CommonModule, FormsModule, NumberInputComponent, VersionBadgeComponent],
14+
imports: [CommonModule, FormsModule, NumberInputComponent, VersionBadgeComponent, SliderInputComponent, ColorInputComponent],
1315
template: `
1416
<div class="space-y-6">
1517
<div>
@@ -110,15 +112,10 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
110112
<span class="text-kitty-accent font-bold ml-2">{{ windowLayout.window_padding_width }}px</span>
111113
<span class="text-kitty-text-dim text-xs ml-1">Inside border</span>
112114
</label>
113-
<input
114-
type="range"
115-
[(ngModel)]="windowLayout.window_padding_width"
116-
(ngModelChange)="updateWindowLayout()"
117-
min="0"
118-
max="50"
119-
step="1"
120-
class="w-full"
121-
/>
115+
<app-slider-input
116+
[value]="windowLayout.window_padding_width"
117+
(valueChange)="updateNumberWindow('window_padding_width', $event)"
118+
[min]="0" [max]="50" [step]="1" />
122119
</div>
123120
</div>
124121
@@ -133,15 +130,10 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
133130
<span class="text-kitty-accent font-bold ml-2">{{ windowLayout.window_margin_width }}px</span>
134131
<span class="text-kitty-text-dim text-xs ml-1">Outside border</span>
135132
</label>
136-
<input
137-
type="range"
138-
[(ngModel)]="windowLayout.window_margin_width"
139-
(ngModelChange)="updateWindowLayout()"
140-
min="0"
141-
max="50"
142-
step="1"
143-
class="w-full"
144-
/>
133+
<app-slider-input
134+
[value]="windowLayout.window_margin_width"
135+
(valueChange)="updateNumberWindow('window_margin_width', $event)"
136+
[min]="0" [max]="50" [step]="1" />
145137
</div>
146138
147139
<div class="form-group">
@@ -150,15 +142,10 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
150142
<span class="text-kitty-accent font-bold ml-2">{{ windowLayout.single_window_margin_width }}px</span>
151143
<span class="text-kitty-text-dim text-xs ml-1">Override for single-pane mode (-1 = use above)</span>
152144
</label>
153-
<input
154-
type="range"
155-
[(ngModel)]="windowLayout.single_window_margin_width"
156-
(ngModelChange)="updateWindowLayout()"
157-
min="-1"
158-
max="50"
159-
step="1"
160-
class="w-full"
161-
/>
145+
<app-slider-input
146+
[value]="windowLayout.single_window_margin_width"
147+
(valueChange)="updateNumberWindow('single_window_margin_width', $event)"
148+
[min]="-1" [max]="50" [step]="1" />
162149
</div>
163150
</div>
164151
@@ -169,15 +156,10 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
169156
<span class="text-kitty-accent font-bold ml-2">{{ windowLayout.single_window_padding_width }}px</span>
170157
<span class="text-kitty-text-dim text-xs ml-1">Override for single-pane mode (-1 = use above)</span>
171158
</label>
172-
<input
173-
type="range"
174-
[(ngModel)]="windowLayout.single_window_padding_width"
175-
(ngModelChange)="updateWindowLayout()"
176-
min="-1"
177-
max="50"
178-
step="1"
179-
class="w-full"
180-
/>
159+
<app-slider-input
160+
[value]="windowLayout.single_window_padding_width"
161+
(valueChange)="updateNumberWindow('single_window_padding_width', $event)"
162+
[min]="-1" [max]="50" [step]="1" />
181163
</div>
182164
183165
<div class="form-group">
@@ -245,47 +227,33 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
245227
<span class="text-kitty-accent font-bold ml-2">{{ (windowLayout.inactive_text_alpha * 100).toFixed(0) }}%</span>
246228
<span class="text-kitty-text-dim text-xs ml-1">Opacity of text in unfocused panes</span>
247229
</label>
248-
<input
249-
type="range"
250-
[(ngModel)]="windowLayout.inactive_text_alpha"
251-
(ngModelChange)="updateWindowLayout()"
252-
min="0"
253-
max="1"
254-
step="0.05"
255-
class="w-full"
256-
/>
230+
<app-slider-input
231+
[value]="windowLayout.inactive_text_alpha"
232+
(valueChange)="updateNumberWindow('inactive_text_alpha', $event)"
233+
[min]="0" [max]="1" [step]="0.05" />
257234
</div>
258235
</div>
259236
260237
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mt-4">
261238
<div class="form-group">
262239
<label class="block text-sm font-medium text-kitty-text mb-2">Active Border Color</label>
263-
<div class="flex gap-2">
264-
<input type="color" [(ngModel)]="windowLayout.active_border_color" (ngModelChange)="updateWindowLayout()"
265-
class="w-12 h-10 rounded cursor-pointer bg-kitty-bg border border-kitty-border flex-shrink-0" />
266-
<input type="text" [(ngModel)]="windowLayout.active_border_color" (ngModelChange)="updateWindowLayout()"
267-
class="flex-1 px-3 py-2 text-sm bg-kitty-bg border border-kitty-border rounded-lg text-kitty-text focus:outline-none focus:ring-2 focus:ring-kitty-primary font-mono" />
268-
</div>
240+
<app-color-input
241+
[value]="windowLayout.active_border_color || '#cccccc'"
242+
(valueChange)="updateColorWindow('active_border_color', $event)" />
269243
</div>
270244
271245
<div class="form-group">
272246
<label class="block text-sm font-medium text-kitty-text mb-2">Inactive Border Color</label>
273-
<div class="flex gap-2">
274-
<input type="color" [(ngModel)]="windowLayout.inactive_border_color" (ngModelChange)="updateWindowLayout()"
275-
class="w-12 h-10 rounded cursor-pointer bg-kitty-bg border border-kitty-border flex-shrink-0" />
276-
<input type="text" [(ngModel)]="windowLayout.inactive_border_color" (ngModelChange)="updateWindowLayout()"
277-
class="flex-1 px-3 py-2 text-sm bg-kitty-bg border border-kitty-border rounded-lg text-kitty-text focus:outline-none focus:ring-2 focus:ring-kitty-primary font-mono" />
278-
</div>
247+
<app-color-input
248+
[value]="windowLayout.inactive_border_color || '#999999'"
249+
(valueChange)="updateColorWindow('inactive_border_color', $event)" />
279250
</div>
280251
281252
<div class="form-group">
282253
<label class="block text-sm font-medium text-kitty-text mb-2">Bell Border Color</label>
283-
<div class="flex gap-2">
284-
<input type="color" [(ngModel)]="windowLayout.bell_border_color" (ngModelChange)="updateWindowLayout()"
285-
class="w-12 h-10 rounded cursor-pointer bg-kitty-bg border border-kitty-border flex-shrink-0" />
286-
<input type="text" [(ngModel)]="windowLayout.bell_border_color" (ngModelChange)="updateWindowLayout()"
287-
class="flex-1 px-3 py-2 text-sm bg-kitty-bg border border-kitty-border rounded-lg text-kitty-text focus:outline-none focus:ring-2 focus:ring-kitty-primary font-mono" />
288-
</div>
254+
<app-color-input
255+
[value]="windowLayout.bell_border_color || '#ffffff'"
256+
(valueChange)="updateColorWindow('bell_border_color', $event)" />
289257
</div>
290258
</div>
291259
@@ -361,15 +329,10 @@ import { KittyVersionService } from '../../../services/kitty-version.service';
361329
Logo Alpha
362330
<span class="text-kitty-accent font-bold ml-2">{{ (windowLayout.window_logo_alpha * 100).toFixed(0) }}%</span>
363331
</label>
364-
<input
365-
type="range"
366-
[(ngModel)]="windowLayout.window_logo_alpha"
367-
(ngModelChange)="updateWindowLayout()"
368-
min="0"
369-
max="1"
370-
step="0.05"
371-
class="w-full"
372-
/>
332+
<app-slider-input
333+
[value]="windowLayout.window_logo_alpha"
334+
(valueChange)="updateNumberWindow('window_logo_alpha', $event)"
335+
[min]="0" [max]="1" [step]="0.05" />
373336
</div>
374337
</div>
375338
@@ -545,4 +508,14 @@ export class WindowLayoutFormComponent {
545508
updateWindowLayout(): void {
546509
this.configStore.updateSection('window_layout', { ...this.windowLayout });
547510
}
511+
512+
updateNumberWindow(key: keyof KittyWindowLayoutConfig, value: number): void {
513+
this.windowLayout = { ...this.windowLayout, [key]: value };
514+
this.updateWindowLayout();
515+
}
516+
517+
updateColorWindow(key: keyof KittyWindowLayoutConfig, value: string): void {
518+
this.windowLayout = { ...this.windowLayout, [key]: value };
519+
this.updateWindowLayout();
520+
}
548521
}

0 commit comments

Comments
 (0)