@owear/cli 0.1.3 → 0.1.5

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.
@@ -4,18 +4,74 @@
4
4
 
5
5
  :root {
6
6
  color-scheme: dark;
7
- --bg: #0d1117;
8
- --panel: #161b22;
9
- --panel-2: #0f141a;
10
- --line: #262d38;
11
- --line-2: #30363d;
12
- --text: #e6edf3;
13
- --muted: #8b949e;
14
- --accent: #3b82f6;
15
- --accent-hover: #2f6fd0;
16
- --danger: #e5484d;
17
- --ok: #3fb950;
18
- --radius: 12px;
7
+
8
+ /* colores base */
9
+ --bg: #282c34;
10
+ --bg-deep: #21252b;
11
+ --panel: #2c313a;
12
+ --panel-2: #21252b;
13
+ --line: #3b4048;
14
+ --line-2: #4b5263;
15
+ --text: #abb2bf;
16
+ --text-strong: #dcdfe4;
17
+ --muted: #5c6370;
18
+ --purple: #c678dd;
19
+ --green: #98c379;
20
+ --red: #e06c75;
21
+ --cyan: #56b6c2;
22
+
23
+ /* acento: rosado seco */
24
+ --accent: #d3869b;
25
+ --accent-hover: #c06f86;
26
+ --accent-ink: #241820;
27
+
28
+ --radius: 10px;
29
+
30
+ --btn: #2c313a;
31
+ --hover: rgba(255, 255, 255, 0.06);
32
+ --hover-strong: rgba(255, 255, 255, 0.14);
33
+ }
34
+
35
+ /* Tema CLARO: lo aplica el renderer con data-theme (según theme.setSource). */
36
+ :root[data-theme="light"] {
37
+ color-scheme: light;
38
+ --bg: #fafafa;
39
+ --bg-deep: #f0f0f1;
40
+ --panel: #ffffff;
41
+ --panel-2: #f0f0f1;
42
+ --line: #d7d7d9;
43
+ --line-2: #b9b9bc;
44
+ --text: #383a42;
45
+ --text-strong: #1f2126;
46
+ --muted: #9aa0a6;
47
+ --purple: #a626a4;
48
+ --green: #50a14f;
49
+ --red: #e45649;
50
+ --cyan: #0184bc;
51
+ --accent: #b5586e;
52
+ --accent-hover: #9d4760;
53
+ --accent-ink: #ffffff;
54
+ --btn: #e8e8ea;
55
+ --hover: rgba(0, 0, 0, 0.05);
56
+ --hover-strong: rgba(0, 0, 0, 0.10);
57
+ }
58
+
59
+ /* Cursiva real (self-hosted → funciona offline) */
60
+ @font-face {
61
+ font-family: "Dancing Script";
62
+ font-style: normal;
63
+ font-weight: 600;
64
+ font-display: swap;
65
+ src: url("./assets/dancing-script.woff2") format("woff2");
66
+ }
67
+
68
+ /* UI (JetBrains Mono, self-hosted, variable 400–700) */
69
+ @font-face {
70
+ font-family: "JetBrains Mono";
71
+ font-style: normal;
72
+ font-weight: 400 700;
73
+ font-display: swap;
74
+ src: url("./assets/jetbrains-mono.woff2") format("woff2");
19
75
  }
20
76
 
21
77
  * {
@@ -31,7 +87,8 @@ body {
31
87
  margin: 0;
32
88
  background: var(--bg);
33
89
  color: var(--text);
34
- font: 14px/1.55 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
90
+ font: 14px/1.55 "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo,
91
+ Consolas, monospace;
35
92
  display: flex;
36
93
  flex-direction: column;
37
94
  overflow: hidden;
@@ -45,8 +102,7 @@ body {
45
102
  flex: 0 0 auto;
46
103
  display: flex;
47
104
  align-items: stretch;
48
- background: #010409;
49
- border-bottom: 1px solid var(--line);
105
+ background: var(--bg-deep);
50
106
  }
51
107
 
52
108
  .titlebar__drag {
@@ -66,6 +122,7 @@ body {
66
122
  }
67
123
 
68
124
  .brand__name {
125
+ color: var(--text-strong);
69
126
  font-weight: 600;
70
127
  letter-spacing: 0.2px;
71
128
  white-space: nowrap;
@@ -73,10 +130,26 @@ body {
73
130
  text-overflow: ellipsis;
74
131
  }
75
132
 
133
+ /* Los controles del web se ocultan por DEFECTO y solo se muestran si el SO no
134
+ provee botones nativos (el renderer añade .ow-web-controls). Así nunca
135
+ parpadean detrás del overlay nativo (que es transparente). */
76
136
  .titlebar__controls {
137
+ display: none;
138
+ }
139
+
140
+ html.ow-web-controls .titlebar__controls {
77
141
  display: flex;
78
142
  }
79
143
 
144
+ /* titleBarOverlay activo: reservar el hueco a la derecha y ajustar la altura. */
145
+ html.ow-native-overlay .titlebar__drag {
146
+ padding-right: var(--ow-overlay-width, 0px);
147
+ }
148
+
149
+ html.ow-native-overlay .titlebar {
150
+ height: var(--ow-overlay-height, 40px);
151
+ }
152
+
80
153
  .winbtn {
81
154
  width: 46px;
82
155
  border: 0;
@@ -94,12 +167,12 @@ body {
94
167
  }
95
168
 
96
169
  .winbtn:hover {
97
- background: var(--line);
98
- color: var(--text);
170
+ background: var(--btn);
171
+ color: var(--text-strong);
99
172
  }
100
173
 
101
174
  .winbtn--close:hover {
102
- background: var(--danger);
175
+ background: var(--red);
103
176
  color: #fff;
104
177
  }
105
178
 
@@ -123,19 +196,14 @@ body {
123
196
  gap: 12px;
124
197
  }
125
198
 
126
- .eyebrow {
127
- font-size: 12px;
128
- font-weight: 600;
129
- letter-spacing: 0.08em;
130
- text-transform: uppercase;
131
- color: var(--muted);
132
- }
133
-
134
199
  h1 {
135
200
  margin: 0;
136
- font-size: clamp(24px, 3vw, 32px);
137
- line-height: 1.2;
138
- letter-spacing: -0.01em;
201
+ color: var(--text-strong);
202
+ font-family: "Dancing Script", cursive;
203
+ font-weight: 600;
204
+ font-size: clamp(30px, 4vw, 44px);
205
+ line-height: 1.15;
206
+ letter-spacing: 0;
139
207
  }
140
208
 
141
209
  .lead {
@@ -157,39 +225,68 @@ h1 {
157
225
  }
158
226
 
159
227
  .btn {
228
+ position: relative;
229
+ isolation: isolate;
160
230
  font: inherit;
161
231
  color: var(--text);
162
- background: #21262d;
163
- border: 1px solid var(--line-2);
164
- border-radius: 8px;
232
+ background: var(--btn);
233
+ border: 0;
234
+ border-radius: 10px;
165
235
  padding: 8px 14px;
166
236
  cursor: pointer;
167
237
  }
168
238
 
169
- .btn:hover {
170
- background: #2b323b;
239
+ /* Hover tipo menú contextual: el resaltado va DENTRO, con margen.
240
+ Al pulsar, se expande hasta llenar el botón. */
241
+ .btn::before {
242
+ content: "";
243
+ position: absolute;
244
+ inset: 3px;
245
+ border-radius: 7px;
246
+ background: transparent;
247
+ transition: inset 0.12s ease, border-radius 0.12s ease, background 0.12s ease;
248
+ z-index: -1;
249
+ pointer-events: none;
250
+ }
251
+
252
+ .btn:hover::before {
253
+ background: var(--hover);
171
254
  }
172
255
 
173
- .btn:active {
174
- transform: translateY(1px);
256
+ .btn:active::before {
257
+ inset: 0;
258
+ border-radius: 10px;
259
+ background: var(--hover-strong);
175
260
  }
176
261
 
177
262
  .btn--primary {
178
263
  background: var(--accent);
179
- border-color: var(--accent);
180
- color: #fff;
264
+ color: var(--accent-ink);
181
265
  font-weight: 600;
182
266
  }
183
267
 
184
- .btn--primary:hover {
185
- background: var(--accent-hover);
186
- border-color: var(--accent-hover);
268
+ .btn--primary:hover::before {
269
+ background: rgba(255, 255, 255, 0.16);
270
+ }
271
+
272
+ .btn--primary:active::before {
273
+ background: rgba(255, 255, 255, 0.3);
187
274
  }
188
275
 
189
276
  .btn--ghost {
190
277
  background: transparent;
191
278
  }
192
279
 
280
+ /* Contenedor con fondo propio que agrupa las cards de abajo */
281
+ .board {
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 16px;
285
+ padding: 16px;
286
+ background: var(--bg-deep);
287
+ border-radius: var(--radius);
288
+ }
289
+
193
290
  .grid {
194
291
  display: grid;
195
292
  grid-template-columns: minmax(240px, 300px) 1fr;
@@ -204,7 +301,6 @@ h1 {
204
301
 
205
302
  .card {
206
303
  background: var(--panel);
207
- border: 1px solid var(--line);
208
304
  border-radius: var(--radius);
209
305
  padding: 16px 18px;
210
306
  }
@@ -232,7 +328,7 @@ h1 {
232
328
 
233
329
  .badge {
234
330
  font-size: 12px;
235
- color: var(--muted);
331
+ color: var(--purple);
236
332
  background: var(--panel-2);
237
333
  border: 1px solid var(--line);
238
334
  border-radius: 999px;
@@ -259,12 +355,19 @@ h1 {
259
355
 
260
356
  .kv dd {
261
357
  margin: 0;
358
+ color: var(--text-strong);
262
359
  font-variant-numeric: tabular-nums;
263
360
  }
264
361
 
362
+ .kv dd.mono {
363
+ font-family: var(--font-mono, ui-monospace, monospace);
364
+ font-size: 11px;
365
+ word-break: break-all;
366
+ }
367
+
265
368
  .ua {
266
369
  margin: 14px 0 0;
267
- color: #5b6672;
370
+ color: var(--muted);
268
371
  font-size: 12px;
269
372
  word-break: break-word;
270
373
  }
@@ -275,11 +378,11 @@ h1 {
275
378
  max-height: 46vh;
276
379
  margin: 0;
277
380
  overflow: auto;
278
- background: #010409;
279
- border: 1px solid var(--line);
381
+ background: var(--bg-deep);
280
382
  border-radius: 8px;
281
383
  padding: 12px 14px;
282
- font: 12.5px/1.6 ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
384
+ font: 12.5px/1.6 "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
385
+ color: var(--text);
283
386
  white-space: pre-wrap;
284
387
  word-break: break-word;
285
388
  user-select: text;
@@ -287,11 +390,11 @@ h1 {
287
390
  }
288
391
 
289
392
  .console .line--ok {
290
- color: var(--ok);
393
+ color: var(--green);
291
394
  }
292
395
 
293
396
  .console .line--err {
294
- color: #ff8085;
397
+ color: var(--red);
295
398
  }
296
399
 
297
400
  .console .line--muted {
@@ -307,7 +410,7 @@ h1 {
307
410
  }
308
411
 
309
412
  .linkbtn:hover {
310
- color: var(--text);
413
+ color: var(--accent);
311
414
  }
312
415
 
313
416
  .hint {
@@ -318,25 +421,146 @@ h1 {
318
421
  .code {
319
422
  margin: 0;
320
423
  overflow: auto;
321
- background: #010409;
322
- border: 1px solid var(--line);
424
+ background: var(--bg-deep);
323
425
  border-radius: 8px;
324
426
  padding: 14px;
325
- font: 12.5px/1.7 ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
326
- color: #c9d1d9;
427
+ font: 12.5px/1.7 "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;
428
+ color: var(--text);
327
429
  user-select: text;
328
430
  -webkit-user-select: text;
329
431
  }
330
432
 
331
433
  code {
332
- color: #79c0ff;
434
+ color: var(--purple);
333
435
  }
334
436
 
335
437
  .hint code,
336
438
  .lead code {
337
- background: #21262d;
439
+ background: var(--panel-2);
338
440
  border: 1px solid var(--line);
339
441
  border-radius: 6px;
340
442
  padding: 1px 6px;
341
443
  font-size: 12.5px;
342
444
  }
445
+
446
+ /* ── Navegador embebido (webview nativa dentro de #wv-slot) ───────────── */
447
+ .browser {
448
+ display: flex;
449
+ flex-direction: column;
450
+ gap: 8px;
451
+ }
452
+
453
+ .browser__bar {
454
+ display: flex;
455
+ align-items: center;
456
+ gap: 6px;
457
+ }
458
+
459
+ .iconbtn {
460
+ width: 30px;
461
+ height: 30px;
462
+ border: 0;
463
+ border-radius: 8px;
464
+ background: var(--panel);
465
+ color: var(--text-strong);
466
+ font-size: 16px;
467
+ line-height: 1;
468
+ cursor: pointer;
469
+ }
470
+
471
+ .iconbtn:hover {
472
+ background: var(--line);
473
+ }
474
+
475
+ .browser__url {
476
+ flex: 1;
477
+ min-width: 0;
478
+ font: inherit;
479
+ color: var(--text);
480
+ background: var(--bg-deep);
481
+ border: 0;
482
+ border-radius: 8px;
483
+ padding: 7px 10px;
484
+ }
485
+
486
+ /* El placeholder define la zona donde se coloca la webview nativa encima. */
487
+ .browser__slot {
488
+ height: min(64vh, 600px);
489
+ min-height: 380px;
490
+ border-radius: 8px;
491
+ background: var(--bg-deep);
492
+ }
493
+
494
+ /* ── C10: pantallas (multi-monitor) ─────────────────────────────────────── */
495
+ .monmap {
496
+ position: relative;
497
+ width: 100%;
498
+ height: 190px;
499
+ margin-bottom: 10px;
500
+ background: var(--bg-deep);
501
+ border: 1px solid var(--line);
502
+ border-radius: 8px;
503
+ overflow: hidden;
504
+ }
505
+ .monmap__hint {
506
+ position: absolute;
507
+ inset: 0;
508
+ display: flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ color: var(--muted);
512
+ font-size: 12.5px;
513
+ }
514
+ .monmap__cell {
515
+ position: absolute;
516
+ box-sizing: border-box;
517
+ border: 1px solid var(--line-2);
518
+ border-radius: 6px;
519
+ background: var(--panel);
520
+ padding: 4px 6px;
521
+ overflow: hidden;
522
+ }
523
+ .monmap__cell--primary {
524
+ border-color: var(--accent);
525
+ box-shadow: inset 0 0 0 1px var(--accent);
526
+ }
527
+ .monmap__id {
528
+ display: block;
529
+ font: 600 11px/1.3 "JetBrains Mono", ui-monospace, monospace;
530
+ color: var(--text-strong);
531
+ }
532
+ .monmap__meta {
533
+ display: block;
534
+ font: 10.5px/1.3 "JetBrains Mono", ui-monospace, monospace;
535
+ color: var(--muted);
536
+ white-space: nowrap;
537
+ }
538
+ .monmap__cursor {
539
+ position: absolute;
540
+ width: 9px;
541
+ height: 9px;
542
+ margin: -5px 0 0 -5px;
543
+ border-radius: 50%;
544
+ background: var(--cyan);
545
+ box-shadow: 0 0 0 3px rgba(86, 182, 194, 0.25);
546
+ }
547
+ .monlist {
548
+ display: flex;
549
+ flex-direction: column;
550
+ gap: 4px;
551
+ max-height: 150px;
552
+ overflow: auto;
553
+ user-select: text;
554
+ -webkit-user-select: text;
555
+ }
556
+ .monlist__row {
557
+ font: 12px/1.5 "JetBrains Mono", ui-monospace, monospace;
558
+ color: var(--text);
559
+ }
560
+ .monlist__row code {
561
+ color: var(--accent);
562
+ }
563
+ .console--short {
564
+ min-height: 120px;
565
+ max-height: 28vh;
566
+ }
@@ -6,14 +6,22 @@
6
6
  <head>
7
7
  <meta charset="UTF-8" />
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
- <title>Instalador — __APP_NAME__</title>
9
+ <title>Instalador · __APP_NAME__</title>
10
10
  </head>
11
11
  <body>
12
+ <!-- Titlebar propia: el kernel convierte [data-ow-drag] en zona de arrastre. -->
12
13
  <header class="titlebar">
13
14
  <div class="titlebar__drag" data-ow-drag>
15
+ <span class="brand__mark" aria-hidden="true"></span>
14
16
  <span class="brand__name">Instalador · __APP_NAME__</span>
15
17
  </div>
16
18
  <div class="titlebar__controls">
19
+ <button id="win-min" class="winbtn" title="Minimizar" aria-label="Minimizar">
20
+ <svg viewBox="0 0 12 12" width="12" height="12"><path d="M2 6h8" /></svg>
21
+ </button>
22
+ <button id="win-max" class="winbtn" title="Maximizar" aria-label="Maximizar">
23
+ <svg viewBox="0 0 12 12" width="12" height="12"><rect x="2.5" y="2.5" width="7" height="7" rx="1" /></svg>
24
+ </button>
17
25
  <button id="win-close" class="winbtn winbtn--close" title="Cerrar" aria-label="Cerrar">
18
26
  <svg viewBox="0 0 12 12" width="12" height="12"><path d="M2.5 2.5l7 7M9.5 2.5l-7 7" /></svg>
19
27
  </button>
@@ -22,39 +30,41 @@
22
30
 
23
31
  <main class="page">
24
32
  <section class="hero">
25
- <span class="eyebrow">Owear Installer</span>
26
33
  <h1>Instalar __APP_NAME__</h1>
27
34
  <p class="lead" id="summary">Cargando metadatos…</p>
28
35
  </section>
29
36
 
30
- <section class="card">
31
- <header class="card__head"><h2>Destino</h2></header>
32
- <div class="row">
33
- <input id="dir" class="input" type="text" spellcheck="false" />
34
- <button id="pick" class="btn">Elegir…</button>
35
- </div>
36
- <div class="row">
37
- <label class="opt"><input type="checkbox" id="shortcut" checked /> Acceso directo</label>
38
- <label class="opt"><input type="checkbox" id="launch" checked /> Abrir al terminar</label>
39
- </div>
40
- </section>
37
+ <section class="board">
38
+ <article class="card">
39
+ <header class="card__head"><h2>Destino</h2></header>
40
+ <div class="row">
41
+ <input id="dir" class="field" type="text" spellcheck="false" aria-label="Directorio de instalación" />
42
+ <button id="pick" class="btn">Elegir…</button>
43
+ </div>
44
+ <div class="row">
45
+ <label class="opt"><input type="checkbox" id="shortcut" checked /> Acceso directo</label>
46
+ <label class="opt"><input type="checkbox" id="launch" checked /> Abrir al terminar</label>
47
+ </div>
48
+ </article>
41
49
 
42
- <section class="card card--grow">
43
- <header class="card__head">
44
- <h2>Contenido</h2>
45
- <span class="badge" id="count">—</span>
46
- </header>
47
- <pre id="plan" class="console">—</pre>
50
+ <article class="card card--grow">
51
+ <header class="card__head">
52
+ <h2>Contenido</h2>
53
+ <span class="badge" id="count">—</span>
54
+ </header>
55
+ <pre id="plan" class="console">—</pre>
56
+ </article>
48
57
  </section>
49
-
50
- <footer class="actions">
51
- <progress id="bar" max="100" value="0" hidden></progress>
52
- <span id="status" class="status"></span>
53
- <button id="install" class="btn btn--primary" disabled>Instalar</button>
54
- <button id="cancel" class="btn btn--ghost" hidden>Cancelar</button>
55
- </footer>
56
58
  </main>
57
59
 
60
+ <footer class="foot">
61
+ <span id="status" class="status"></span>
62
+ <span class="foot__spacer"></span>
63
+ <progress id="bar" max="100" value="0" hidden></progress>
64
+ <button id="cancel" class="btn btn--ghost" hidden>Cancelar</button>
65
+ <button id="install" class="btn btn--primary" disabled>Instalar</button>
66
+ </footer>
67
+
58
68
  <script type="module" src="/src/installer.ts"></script>
59
69
  </body>
60
70
  </html>