@@ -5,11 +5,13 @@ import { ConfigStoreService } from '../../../services/config-store.service';
55import { KittyWindowLayoutConfig , KittyLayout } from '../../../models/kitty-types' ;
66import { NumberInputComponent } from '../../shared/number-input/number-input.component' ;
77import { 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' ;
810import { 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