relmio 0.2.7 → 0.2.8
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.
- package/CHANGELOG.md +10 -0
- package/package.json +1 -1
- package/src/ui/icons/monitor.svg +6 -0
- package/src/ui/icons/moon.svg +4 -0
- package/src/ui/icons/sun.svg +12 -0
- package/src/ui/index.html +9 -6
- package/src/ui/styles.css +33 -16
- package/src/web/server.js +11 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ checks the registry separately after publication.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## [0.2.8] - 2026-08-02
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Replace the local browser wizard's text appearance selector with compact,
|
|
15
|
+
accessible System/Light/Dark icons, while keeping the original horizontal
|
|
16
|
+
Signal Spine flow and touch-friendly behavior.
|
|
17
|
+
- Serve the bundled Lucide SVG assets from the wizard and include them in the
|
|
18
|
+
npm package so offline and Node-free browser launches render consistently.
|
|
19
|
+
|
|
10
20
|
## [0.2.7] - 2026-08-02
|
|
11
21
|
|
|
12
22
|
### Changed
|
package/package.json
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- Lucide monitor icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<rect width="20" height="14" x="2" y="3" rx="2" />
|
|
4
|
+
<line x1="8" x2="16" y1="21" y2="21" />
|
|
5
|
+
<line x1="12" x2="12" y1="17" y2="21" />
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<!-- Lucide moon icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" />
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!-- Lucide sun icon, ISC licensed: https://lucide.dev/license -->
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round">
|
|
3
|
+
<circle cx="12" cy="12" r="4" />
|
|
4
|
+
<path d="M12 2v2" />
|
|
5
|
+
<path d="M12 20v2" />
|
|
6
|
+
<path d="m4.93 4.93 1.41 1.41" />
|
|
7
|
+
<path d="m17.66 17.66 1.41 1.41" />
|
|
8
|
+
<path d="M2 12h2" />
|
|
9
|
+
<path d="M20 12h2" />
|
|
10
|
+
<path d="m6.34 17.66-1.41 1.41" />
|
|
11
|
+
<path d="m19.07 4.93-1.41 1.41" />
|
|
12
|
+
</svg>
|
package/src/ui/index.html
CHANGED
|
@@ -35,17 +35,20 @@
|
|
|
35
35
|
<div class="header-actions">
|
|
36
36
|
<fieldset class="theme-picker">
|
|
37
37
|
<legend class="visually-hidden">Color theme</legend>
|
|
38
|
-
<label>
|
|
38
|
+
<label title="Use system appearance">
|
|
39
39
|
<input type="radio" name="color-theme" value="system" checked />
|
|
40
|
-
<span
|
|
40
|
+
<span class="theme-icon theme-icon-system" aria-hidden="true"></span>
|
|
41
|
+
<span class="visually-hidden">System</span>
|
|
41
42
|
</label>
|
|
42
|
-
<label>
|
|
43
|
+
<label title="Use light appearance">
|
|
43
44
|
<input type="radio" name="color-theme" value="light" />
|
|
44
|
-
<span
|
|
45
|
+
<span class="theme-icon theme-icon-light" aria-hidden="true"></span>
|
|
46
|
+
<span class="visually-hidden">Light</span>
|
|
45
47
|
</label>
|
|
46
|
-
<label>
|
|
48
|
+
<label title="Use dark appearance">
|
|
47
49
|
<input type="radio" name="color-theme" value="dark" />
|
|
48
|
-
<span
|
|
50
|
+
<span class="theme-icon theme-icon-dark" aria-hidden="true"></span>
|
|
51
|
+
<span class="visually-hidden">Dark</span>
|
|
49
52
|
</label>
|
|
50
53
|
</fieldset>
|
|
51
54
|
<span class="local-badge">Runs only on this computer</span>
|
package/src/ui/styles.css
CHANGED
|
@@ -201,9 +201,9 @@ a:focus-visible {
|
|
|
201
201
|
min-width: 0;
|
|
202
202
|
margin: 0;
|
|
203
203
|
padding: 0.1875rem;
|
|
204
|
-
border:
|
|
205
|
-
border-radius:
|
|
206
|
-
background: var(--
|
|
204
|
+
border: 0;
|
|
205
|
+
border-radius: 999px;
|
|
206
|
+
background: color-mix(in srgb, var(--text) 88%, var(--border));
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
.theme-picker label {
|
|
@@ -217,29 +217,50 @@ a:focus-visible {
|
|
|
217
217
|
pointer-events: none;
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
.theme-picker
|
|
221
|
-
|
|
220
|
+
.theme-picker .theme-icon {
|
|
221
|
+
width: 1.75rem;
|
|
222
|
+
min-height: 1.75rem;
|
|
222
223
|
display: inline-flex;
|
|
223
224
|
align-items: center;
|
|
224
225
|
justify-content: center;
|
|
225
|
-
padding: 0
|
|
226
|
-
border-radius:
|
|
227
|
-
color:
|
|
228
|
-
font-size: 0.6875rem;
|
|
229
|
-
font-weight: 700;
|
|
226
|
+
padding: 0;
|
|
227
|
+
border-radius: 999px;
|
|
228
|
+
color: rgb(255 255 255 / 72%);
|
|
230
229
|
transition:
|
|
231
230
|
color 160ms var(--ease),
|
|
232
231
|
background 160ms var(--ease),
|
|
233
232
|
box-shadow 160ms var(--ease);
|
|
234
233
|
}
|
|
235
234
|
|
|
236
|
-
.theme-picker
|
|
235
|
+
.theme-picker .theme-icon::before {
|
|
236
|
+
width: 1rem;
|
|
237
|
+
height: 1rem;
|
|
238
|
+
content: "";
|
|
239
|
+
display: block;
|
|
240
|
+
background: currentColor;
|
|
241
|
+
mask: center / contain no-repeat var(--theme-icon);
|
|
242
|
+
-webkit-mask: center / contain no-repeat var(--theme-icon);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.theme-icon-system {
|
|
246
|
+
--theme-icon: url("/icons/monitor.svg");
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.theme-icon-light {
|
|
250
|
+
--theme-icon: url("/icons/sun.svg");
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.theme-icon-dark {
|
|
254
|
+
--theme-icon: url("/icons/moon.svg");
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.theme-picker input:checked + .theme-icon {
|
|
237
258
|
color: var(--text);
|
|
238
259
|
background: var(--surface);
|
|
239
260
|
box-shadow: var(--shadow-sm);
|
|
240
261
|
}
|
|
241
262
|
|
|
242
|
-
.theme-picker input:focus-visible +
|
|
263
|
+
.theme-picker input:focus-visible + .theme-icon {
|
|
243
264
|
outline: 3px solid #f2a94a;
|
|
244
265
|
outline-offset: 2px;
|
|
245
266
|
}
|
|
@@ -1050,10 +1071,6 @@ footer p {
|
|
|
1050
1071
|
gap: 0.375rem;
|
|
1051
1072
|
}
|
|
1052
1073
|
|
|
1053
|
-
.theme-picker span {
|
|
1054
|
-
padding-inline: 0.5rem;
|
|
1055
|
-
}
|
|
1056
|
-
|
|
1057
1074
|
.shell {
|
|
1058
1075
|
width: min(100% - 1rem, 54rem);
|
|
1059
1076
|
padding-top: 2rem;
|
package/src/web/server.js
CHANGED
|
@@ -182,6 +182,9 @@ async function loadDefaultUiFiles() {
|
|
|
182
182
|
readFile(new URL("../ui/theme.js", import.meta.url), "utf8"),
|
|
183
183
|
readFile(new URL("../ui/time.js", import.meta.url), "utf8"),
|
|
184
184
|
readFile(new URL("../ui/styles.css", import.meta.url), "utf8"),
|
|
185
|
+
readFile(new URL("../ui/icons/monitor.svg", import.meta.url), "utf8"),
|
|
186
|
+
readFile(new URL("../ui/icons/sun.svg", import.meta.url), "utf8"),
|
|
187
|
+
readFile(new URL("../ui/icons/moon.svg", import.meta.url), "utf8"),
|
|
185
188
|
]);
|
|
186
189
|
|
|
187
190
|
return {
|
|
@@ -190,6 +193,9 @@ async function loadDefaultUiFiles() {
|
|
|
190
193
|
"/theme.js": files[2],
|
|
191
194
|
"/time.js": files[3],
|
|
192
195
|
"/styles.css": files[4],
|
|
196
|
+
"/icons/monitor.svg": files[5],
|
|
197
|
+
"/icons/sun.svg": files[6],
|
|
198
|
+
"/icons/moon.svg": files[7],
|
|
193
199
|
};
|
|
194
200
|
}
|
|
195
201
|
|
|
@@ -421,9 +427,11 @@ function createRequestHandler(state) {
|
|
|
421
427
|
const contentType =
|
|
422
428
|
path.endsWith(".js")
|
|
423
429
|
? "text/javascript; charset=utf-8"
|
|
424
|
-
: path
|
|
425
|
-
? "
|
|
426
|
-
: "
|
|
430
|
+
: path.endsWith(".svg")
|
|
431
|
+
? "image/svg+xml; charset=utf-8"
|
|
432
|
+
: path === "/styles.css"
|
|
433
|
+
? "text/css; charset=utf-8"
|
|
434
|
+
: "text/html; charset=utf-8";
|
|
427
435
|
const contents = state.uiFiles[path];
|
|
428
436
|
response.writeHead(200, {
|
|
429
437
|
"Content-Type": contentType,
|