detached 8213ebf

fix(svelte): resolve all svelte-check warnings

commit
8213ebf2f24ef51f156eb077953d451b777e96b4
author
bnema · · 2026-01-18 16:54 UTC
parent
2a250ee
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
6 files · +27 -29
M src/lib/components/aim-login.svelte +1 -0
@@ -17,6 +17,7 @@
1717
1818 let { showAuth = $bindable(), onLoginSuccess, activeTab: initialTab = 'signin' } = $props();
1919
20+ // svelte-ignore state_referenced_locally - intentionally capturing initial value
2021 let activeTab = $state(initialTab);
2122
2223 // Sign In state
@@ -17,6 +17,7 @@
17 17
18 let { showAuth = $bindable(), onLoginSuccess, activeTab: initialTab = 'signin' } = $props();18 let { showAuth = $bindable(), onLoginSuccess, activeTab: initialTab = 'signin' } = $props();
19 19
20+ // svelte-ignore state_referenced_locally - intentionally capturing initial value
20 let activeTab = $state(initialTab);21 let activeTab = $state(initialTab);
21 22
22 // Sign In state23 // Sign In state
M src/lib/components/chat-room.svelte +3 -2
@@ -58,10 +58,11 @@
5858 }
5959
6060 // Text formatting state - initialize directly with merged initial style
61+ // svelte-ignore state_referenced_locally - intentionally capturing initial value
6162 let currentTextStyle = $state<TextStyle>({
6263 ...DEFAULT_TEXT_STYLE,
6364 ...initialTextStyle,
64- color: initialTextStyle.color || '#000000' // Ensure we always have a valid color
65+ color: initialTextStyle.color || '#000000'
6566 });
6667
6768 // Rate limiting state
@@ -703,7 +704,6 @@
703704 bind:style={currentTextStyle}
704705 compact={true}
705706 showFontSelector={true}
706- showGradients={true}
707707 />
708708 </div>
709709 {/if}
@@ -998,6 +998,7 @@
998998 /* Styled input - font is controlled by retro-font-* classes */
999999 .styled-input {
10001000 /* Font family is set by retro-font-* classes, don't override here */
1001+ font-style: inherit;
10011002 }
10021003
10031004 button {
@@ -58,10 +58,11 @@
58 }58 }
59 59
60 // Text formatting state - initialize directly with merged initial style60 // Text formatting state - initialize directly with merged initial style
61+ // svelte-ignore state_referenced_locally - intentionally capturing initial value
61 let currentTextStyle = $state<TextStyle>({62 let currentTextStyle = $state<TextStyle>({
62 ...DEFAULT_TEXT_STYLE,63 ...DEFAULT_TEXT_STYLE,
63 ...initialTextStyle,64 ...initialTextStyle,
64- color: initialTextStyle.color || '#000000' // Ensure we always have a valid color65+ color: initialTextStyle.color || '#000000'
65 });66 });
66 67
67 // Rate limiting state68 // Rate limiting state
@@ -703,7 +704,6 @@
703 bind:style={currentTextStyle}704 bind:style={currentTextStyle}
704 compact={true}705 compact={true}
705 showFontSelector={true}706 showFontSelector={true}
706- showGradients={true}
707 />707 />
708 </div>708 </div>
709 {/if}709 {/if}
@@ -998,6 +998,7 @@
998 /* Styled input - font is controlled by retro-font-* classes */998 /* Styled input - font is controlled by retro-font-* classes */
999 .styled-input {999 .styled-input {
1000 /* Font family is set by retro-font-* classes, don't override here */1000 /* Font family is set by retro-font-* classes, don't override here */
1001+ font-style: inherit;
1001 }1002 }
1002 1003
1003 button {1004 button {
M src/lib/components/color-picker-256.svelte +9 -4
@@ -6,16 +6,13 @@
66 selectedColor = $bindable('#000000'),
77 selectedGradient = $bindable(undefined),
88 onColorChange,
9- onGradientChange,
10- compact: _compact = true
9+ onGradientChange
1110 } = $props<{
1211 selectedColor?: string;
1312 selectedGradient?: string[];
1413 onColorChange?: (color: string) => void;
1514 onGradientChange?: (gradient: string[]) => void;
16- compact?: boolean;
1715 }>();
18- void _compact; // Reserved for future use
1916
2017 // State
2118 let showPicker = $state(false);
@@ -139,6 +136,7 @@
139136
140137 <!-- Color picker dropdown -->
141138 {#if showPicker}
139+ <!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions -->
142140 <div class="picker-dropdown sunken-panel" onclick={(e) => e.stopPropagation()}>
143141 <!-- Gradient controls -->
144142 <div class="gradient-controls">
@@ -158,6 +156,13 @@
158156 e.stopPropagation();
159157 removeGradientColor(index);
160158 }}
159+ onkeydown={(e) => {
160+ if (e.key === 'Enter' || e.key === ' ') {
161+ e.preventDefault();
162+ e.stopPropagation();
163+ removeGradientColor(index);
164+ }
165+ }}
161166 title="Remove this color"
162167 role="button"
163168 tabindex="0">×</span
@@ -6,16 +6,13 @@
6 selectedColor = $bindable('#000000'),6 selectedColor = $bindable('#000000'),
7 selectedGradient = $bindable(undefined),7 selectedGradient = $bindable(undefined),
8 onColorChange,8 onColorChange,
9- onGradientChange,9+ onGradientChange
10- compact: _compact = true
11 } = $props<{10 } = $props<{
12 selectedColor?: string;11 selectedColor?: string;
13 selectedGradient?: string[];12 selectedGradient?: string[];
14 onColorChange?: (color: string) => void;13 onColorChange?: (color: string) => void;
15 onGradientChange?: (gradient: string[]) => void;14 onGradientChange?: (gradient: string[]) => void;
16- compact?: boolean;
17 }>();15 }>();
18- void _compact; // Reserved for future use
19 16
20 // State17 // State
21 let showPicker = $state(false);18 let showPicker = $state(false);
@@ -139,6 +136,7 @@
139 136
140 <!-- Color picker dropdown -->137 <!-- Color picker dropdown -->
141 {#if showPicker}138 {#if showPicker}
139+ <!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions -->
142 <div class="picker-dropdown sunken-panel" onclick={(e) => e.stopPropagation()}>140 <div class="picker-dropdown sunken-panel" onclick={(e) => e.stopPropagation()}>
143 <!-- Gradient controls -->141 <!-- Gradient controls -->
144 <div class="gradient-controls">142 <div class="gradient-controls">
@@ -158,6 +156,13 @@
158 e.stopPropagation();156 e.stopPropagation();
159 removeGradientColor(index);157 removeGradientColor(index);
160 }}158 }}
159+ onkeydown={(e) => {
160+ if (e.key === 'Enter' || e.key === ' ') {
161+ e.preventDefault();
162+ e.stopPropagation();
163+ removeGradientColor(index);
164+ }
165+ }}
161 title="Remove this color"166 title="Remove this color"
162 role="button"167 role="button"
163 tabindex="0">×</span168 tabindex="0">×</span
M src/lib/components/text-formatting-toolbar.svelte +1 -8
@@ -10,19 +10,13 @@
1010 // Props
1111 let {
1212 style = $bindable(DEFAULT_TEXT_STYLE),
13- onPreviewText: _onPreviewText,
1413 compact = true,
15- showFontSelector = false,
16- showGradients: _showGradients = true
14+ showFontSelector = false
1715 } = $props<{
1816 style?: TextStyle;
19- onPreviewText?: (text: string) => void;
2017 compact?: boolean;
2118 showFontSelector?: boolean;
22- showGradients?: boolean;
2319 }>();
24- void _showGradients; // Reserved for future use
25- void _onPreviewText; // Reserved for future use
2620
2721 // State
2822 let currentColor = $state(style.color || '#000000');
@@ -145,7 +139,6 @@
145139 bind:selectedGradient={currentGradient}
146140 onColorChange={handleColorChange}
147141 onGradientChange={handleGradientChange}
148- {compact}
149142 />
150143 </div>
151144 </div>
@@ -10,19 +10,13 @@
10 // Props10 // Props
11 let {11 let {
12 style = $bindable(DEFAULT_TEXT_STYLE),12 style = $bindable(DEFAULT_TEXT_STYLE),
13- onPreviewText: _onPreviewText,
14 compact = true,13 compact = true,
15- showFontSelector = false,14+ showFontSelector = false
16- showGradients: _showGradients = true
17 } = $props<{15 } = $props<{
18 style?: TextStyle;16 style?: TextStyle;
19- onPreviewText?: (text: string) => void;
20 compact?: boolean;17 compact?: boolean;
21 showFontSelector?: boolean;18 showFontSelector?: boolean;
22- showGradients?: boolean;
23 }>();19 }>();
24- void _showGradients; // Reserved for future use
25- void _onPreviewText; // Reserved for future use
26 20
27 // State21 // State
28 let currentColor = $state(style.color || '#000000');22 let currentColor = $state(style.color || '#000000');
@@ -145,7 +139,6 @@
145 bind:selectedGradient={currentGradient}139 bind:selectedGradient={currentGradient}
146 onColorChange={handleColorChange}140 onColorChange={handleColorChange}
147 onGradientChange={handleGradientChange}141 onGradientChange={handleGradientChange}
148- {compact}
149 />142 />
150 </div>143 </div>
151 </div>144 </div>
M src/lib/components/text-style-selector.svelte +11 -14
@@ -100,8 +100,9 @@
100100 <div class="text-style-selector" class:compact>
101101 <!-- Font Family Selection -->
102102 <div class="style-group">
103- <label>Font:</label>
103+ <label for="font-family-select">Font:</label>
104104 <select
105+ id="font-family-select"
105106 bind:value={style.fontFamily}
106107 onchange={(e) => selectFont((e.target as HTMLSelectElement).value as FontFamily)}
107108 >
@@ -115,8 +116,9 @@
115116
116117 <!-- Font Size -->
117118 <div class="style-group">
118- <label>Size:</label>
119+ <label for="font-size-range">Size:</label>
119120 <input
121+ id="font-size-range"
120122 type="range"
121123 min="8"
122124 max="18"
@@ -164,14 +166,13 @@
164166
165167 <!-- Color & Gradient Selection -->
166168 <div class="style-group">
167- <label>Color:</label>
169+ <span class="label-text">Color:</span>
168170 <div class="color-controls">
169171 <ColorPicker256
170172 bind:selectedColor={currentColor}
171173 bind:selectedGradient={currentGradient}
172174 onColorChange={handleColorChange}
173175 onGradientChange={handleGradientChange}
174- compact={false}
175176 />
176177 </div>
177178 </div>
@@ -179,7 +180,7 @@
179180 <!-- Preview -->
180181 {#if showPreview}
181182 <div class="preview-section">
182- <label>Preview:</label>
183+ <span class="label-text">Preview:</span>
183184 <div class="preview-text" style={generateCSSStyle(style)}>
184185 {#if isProcessing}
185186 <span class="loading">Processing...</span>
@@ -212,7 +213,8 @@
212213 margin-bottom: 8px;
213214 }
214215
215- .style-group label {
216+ .style-group label,
217+ .style-group .label-text {
216218 font-weight: bold;
217219 min-width: 50px;
218220 }
@@ -271,7 +273,7 @@
271273 border-top: 1px solid #ccc;
272274 }
273275
274- .preview-section label {
276+ .preview-section .label-text {
275277 display: block;
276278 margin-bottom: 4px;
277279 font-weight: bold;
@@ -300,7 +302,8 @@
300302 margin-bottom: 4px;
301303 }
302304
303- .compact .style-group label {
305+ .compact .style-group label,
306+ .compact .style-group .label-text {
304307 min-width: 40px;
305308 font-size: 10px;
306309 }
@@ -310,10 +313,4 @@
310313 height: 20px;
311314 font-size: 10px;
312315 }
313-
314- .compact .color-button,
315- .compact .gradient-button {
316- font-size: 9px;
317- padding: 1px 4px;
318- }
319316 </style>
@@ -100,8 +100,9 @@
100 <div class="text-style-selector" class:compact>100 <div class="text-style-selector" class:compact>
101 <!-- Font Family Selection -->101 <!-- Font Family Selection -->
102 <div class="style-group">102 <div class="style-group">
103- <label>Font:</label>103+ <label for="font-family-select">Font:</label>
104 <select104 <select
105+ id="font-family-select"
105 bind:value={style.fontFamily}106 bind:value={style.fontFamily}
106 onchange={(e) => selectFont((e.target as HTMLSelectElement).value as FontFamily)}107 onchange={(e) => selectFont((e.target as HTMLSelectElement).value as FontFamily)}
107 >108 >
@@ -115,8 +116,9 @@
115 116
116 <!-- Font Size -->117 <!-- Font Size -->
117 <div class="style-group">118 <div class="style-group">
118- <label>Size:</label>119+ <label for="font-size-range">Size:</label>
119 <input120 <input
121+ id="font-size-range"
120 type="range"122 type="range"
121 min="8"123 min="8"
122 max="18"124 max="18"
@@ -164,14 +166,13 @@
164 166
165 <!-- Color & Gradient Selection -->167 <!-- Color & Gradient Selection -->
166 <div class="style-group">168 <div class="style-group">
167- <label>Color:</label>169+ <span class="label-text">Color:</span>
168 <div class="color-controls">170 <div class="color-controls">
169 <ColorPicker256171 <ColorPicker256
170 bind:selectedColor={currentColor}172 bind:selectedColor={currentColor}
171 bind:selectedGradient={currentGradient}173 bind:selectedGradient={currentGradient}
172 onColorChange={handleColorChange}174 onColorChange={handleColorChange}
173 onGradientChange={handleGradientChange}175 onGradientChange={handleGradientChange}
174- compact={false}
175 />176 />
176 </div>177 </div>
177 </div>178 </div>
@@ -179,7 +180,7 @@
179 <!-- Preview -->180 <!-- Preview -->
180 {#if showPreview}181 {#if showPreview}
181 <div class="preview-section">182 <div class="preview-section">
182- <label>Preview:</label>183+ <span class="label-text">Preview:</span>
183 <div class="preview-text" style={generateCSSStyle(style)}>184 <div class="preview-text" style={generateCSSStyle(style)}>
184 {#if isProcessing}185 {#if isProcessing}
185 <span class="loading">Processing...</span>186 <span class="loading">Processing...</span>
@@ -212,7 +213,8 @@
212 margin-bottom: 8px;213 margin-bottom: 8px;
213 }214 }
214 215
215- .style-group label {216+ .style-group label,
217+ .style-group .label-text {
216 font-weight: bold;218 font-weight: bold;
217 min-width: 50px;219 min-width: 50px;
218 }220 }
@@ -271,7 +273,7 @@
271 border-top: 1px solid #ccc;273 border-top: 1px solid #ccc;
272 }274 }
273 275
274- .preview-section label {276+ .preview-section .label-text {
275 display: block;277 display: block;
276 margin-bottom: 4px;278 margin-bottom: 4px;
277 font-weight: bold;279 font-weight: bold;
@@ -300,7 +302,8 @@
300 margin-bottom: 4px;302 margin-bottom: 4px;
301 }303 }
302 304
303- .compact .style-group label {305+ .compact .style-group label,
306+ .compact .style-group .label-text {
304 min-width: 40px;307 min-width: 40px;
305 font-size: 10px;308 font-size: 10px;
306 }309 }
@@ -310,10 +313,4 @@
310 height: 20px;313 height: 20px;
311 font-size: 10px;314 font-size: 10px;
312 }315 }
313-
314- .compact .color-button,
315- .compact .gradient-button {
316- font-size: 9px;
317- padding: 1px 4px;
318- }
319 </style>316 </style>
M src/lib/components/user-preferences-modal.svelte +2 -1
@@ -89,8 +89,9 @@
8989 role="dialog"
9090 aria-modal="true"
9191 aria-labelledby="preferences-title"
92+ tabindex="-1"
9293 >
93- <!-- Modal content -->
94+ <!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions -->
9495 <div class="modal-window window" onclick={(e) => e.stopPropagation()}>
9596 <div class="title-bar">
9697 <div class="title-bar-text" id="preferences-title">Text Formatting Preferences</div>
@@ -89,8 +89,9 @@
89 role="dialog"89 role="dialog"
90 aria-modal="true"90 aria-modal="true"
91 aria-labelledby="preferences-title"91 aria-labelledby="preferences-title"
92+ tabindex="-1"
92 >93 >
93- <!-- Modal content -->94+ <!-- svelte-ignore a11y_click_events_have_key_events, a11y_no_static_element_interactions -->
94 <div class="modal-window window" onclick={(e) => e.stopPropagation()}>95 <div class="modal-window window" onclick={(e) => e.stopPropagation()}>
95 <div class="title-bar">96 <div class="title-bar">
96 <div class="title-bar-text" id="preferences-title">Text Formatting Preferences</div>97 <div class="title-bar-text" id="preferences-title">Text Formatting Preferences</div>

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 3

Tags 8

↑↓ moveenter openesc close