@kontsedal/olas-devtools 0.0.1-rc.0

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/src/styles.ts ADDED
@@ -0,0 +1,594 @@
1
+ /**
2
+ * Inline CSS for the devtools panel. Scoped to the `.olas-devtools-*` class
3
+ * prefix so it doesn't bleed into the host app. Honors `prefers-color-scheme`
4
+ * and accepts host palette overrides via `--olas-*` custom properties.
5
+ */
6
+ export const DEVTOOLS_CSS = `
7
+ .olas-devtools {
8
+ container-type: inline-size;
9
+ --olas-bg: #ffffff;
10
+ --olas-fg: #1f2330;
11
+ --olas-muted: #6b7280;
12
+ --olas-soft: #f5f6f9;
13
+ --olas-soft-2: #eef0f4;
14
+ --olas-accent: #4f46e5;
15
+ --olas-accent-soft: rgba(79,70,229,0.10);
16
+ --olas-success: #1e8a3d;
17
+ --olas-success-soft: rgba(30,138,61,0.12);
18
+ --olas-warn: #ad6800;
19
+ --olas-warn-soft: rgba(173,104,0,0.12);
20
+ --olas-error: #b8361f;
21
+ --olas-error-soft: rgba(184,54,31,0.12);
22
+ --olas-border: #e6e6ea;
23
+ --olas-border-soft: #eeeef2;
24
+ --olas-row-alt: #fafafc;
25
+
26
+ /* JSON viewer colors */
27
+ --olas-json-key: #7a4ab8;
28
+ --olas-json-string: #1e8a3d;
29
+ --olas-json-number: #b25400;
30
+ --olas-json-boolean: #4f46e5;
31
+ --olas-json-null: #9aa0aa;
32
+ --olas-json-bracket: #6b7280;
33
+ --olas-json-summary: #6b7280;
34
+
35
+ font-family: -apple-system, BlinkMacSystemFont, "Inter var", "Inter", "Segoe UI", system-ui, sans-serif;
36
+ font-size: 12.5px;
37
+ line-height: 1.55;
38
+ color: var(--olas-fg);
39
+ background: var(--olas-bg);
40
+ border: 1px solid var(--olas-border);
41
+ border-radius: 10px;
42
+ display: flex;
43
+ flex-direction: column;
44
+ height: 100%;
45
+ min-height: 320px;
46
+ overflow: hidden;
47
+ box-sizing: border-box;
48
+ }
49
+ .olas-devtools *,
50
+ .olas-devtools *::before,
51
+ .olas-devtools *::after { box-sizing: border-box; }
52
+
53
+ @media (prefers-color-scheme: dark) {
54
+ .olas-devtools {
55
+ --olas-bg: #15171e;
56
+ --olas-fg: #e8ebf2;
57
+ --olas-muted: #97a0b3;
58
+ --olas-soft: #1d2029;
59
+ --olas-soft-2: #232733;
60
+ --olas-accent: #8b86f0;
61
+ --olas-accent-soft: rgba(139,134,240,0.18);
62
+ --olas-success: #4ade80;
63
+ --olas-success-soft: rgba(74,222,128,0.16);
64
+ --olas-warn: #f5b740;
65
+ --olas-warn-soft: rgba(245,183,64,0.16);
66
+ --olas-error: #ef6b53;
67
+ --olas-error-soft: rgba(239,107,83,0.16);
68
+ --olas-border: #2a2e3a;
69
+ --olas-border-soft: #20232c;
70
+ --olas-row-alt: #1a1d25;
71
+
72
+ --olas-json-key: #c39bff;
73
+ --olas-json-string: #7ee79d;
74
+ --olas-json-number: #f5b740;
75
+ --olas-json-boolean: #8b86f0;
76
+ --olas-json-null: #7c8090;
77
+ --olas-json-bracket: #97a0b3;
78
+ --olas-json-summary: #97a0b3;
79
+ }
80
+ }
81
+
82
+ /* ---- tabs ------------------------------------------------------------- */
83
+ .olas-devtools-tabs {
84
+ display: flex;
85
+ align-items: center;
86
+ gap: 1px;
87
+ border-bottom: 1px solid var(--olas-border);
88
+ background: var(--olas-soft);
89
+ padding: 0 8px;
90
+ flex-shrink: 0;
91
+ overflow-x: auto;
92
+ scrollbar-width: none;
93
+ }
94
+ .olas-devtools-tabs::-webkit-scrollbar { display: none; }
95
+ .olas-devtools-tab {
96
+ display: inline-flex;
97
+ align-items: center;
98
+ gap: 6px;
99
+ padding: 9px 10px 8px;
100
+ background: transparent;
101
+ color: var(--olas-muted);
102
+ border: 0;
103
+ border-bottom: 2px solid transparent;
104
+ margin-bottom: -1px;
105
+ cursor: pointer;
106
+ font: inherit;
107
+ font-weight: 500;
108
+ font-size: 12px;
109
+ white-space: nowrap;
110
+ flex-shrink: 0;
111
+ transition: color 80ms, border-color 80ms;
112
+ }
113
+ .olas-devtools-tab-label-full { display: inline; }
114
+ .olas-devtools-tab-label-short { display: none; }
115
+ @container (max-width: 480px) {
116
+ .olas-devtools-tab { padding: 9px 8px 8px; font-size: 11.5px; gap: 4px; }
117
+ .olas-devtools-tab-label-full { display: none; }
118
+ .olas-devtools-tab-label-short { display: inline; }
119
+ .olas-devtools-pause-text,
120
+ .olas-devtools-clear-text { display: none; }
121
+ }
122
+ .olas-devtools-tab:hover { color: var(--olas-fg); }
123
+ .olas-devtools-tab[aria-selected="true"] {
124
+ color: var(--olas-fg);
125
+ border-bottom-color: var(--olas-accent);
126
+ }
127
+ .olas-devtools-tab[aria-selected="true"] .olas-devtools-tab-count {
128
+ background: var(--olas-accent-soft);
129
+ color: var(--olas-accent);
130
+ }
131
+ .olas-devtools-tab-count {
132
+ min-width: 18px;
133
+ padding: 0 6px;
134
+ height: 16px;
135
+ border-radius: 999px;
136
+ background: color-mix(in oklch, var(--olas-fg) 8%, transparent);
137
+ color: var(--olas-muted);
138
+ font-size: 10.5px;
139
+ font-weight: 600;
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ font-variant-numeric: tabular-nums;
144
+ line-height: 1;
145
+ }
146
+ .olas-devtools-pause,
147
+ .olas-devtools-clear {
148
+ padding: 4px 10px;
149
+ background: transparent;
150
+ color: var(--olas-muted);
151
+ border: 0;
152
+ border-radius: 6px;
153
+ cursor: pointer;
154
+ font: inherit;
155
+ font-size: 11.5px;
156
+ align-self: center;
157
+ }
158
+ .olas-devtools-pause { margin-left: auto; }
159
+ .olas-devtools-pause:hover,
160
+ .olas-devtools-clear:hover {
161
+ color: var(--olas-fg);
162
+ background: color-mix(in oklch, var(--olas-bg) 60%, transparent);
163
+ }
164
+ .olas-devtools-pause-on { color: var(--olas-warn); background: var(--olas-warn-soft); }
165
+ .olas-devtools-pause-on:hover { color: var(--olas-warn); }
166
+ .olas-devtools-clear-icon { display: none; }
167
+ @container (max-width: 480px) {
168
+ .olas-devtools-clear-text { display: none; }
169
+ .olas-devtools-clear-icon { display: inline; }
170
+ .olas-devtools-pause, .olas-devtools-clear { padding: 4px 8px; }
171
+ }
172
+
173
+ /* ---- filter ---------------------------------------------------------- */
174
+ .olas-devtools-filter {
175
+ position: sticky;
176
+ top: 0;
177
+ z-index: 1;
178
+ display: flex;
179
+ align-items: center;
180
+ gap: 6px;
181
+ padding: 8px 10px;
182
+ border-bottom: 1px solid var(--olas-border-soft);
183
+ background: var(--olas-bg);
184
+ }
185
+ .olas-devtools-filter input {
186
+ flex: 1;
187
+ padding: 5px 9px;
188
+ border: 1px solid var(--olas-border);
189
+ border-radius: 6px;
190
+ background: var(--olas-soft);
191
+ color: var(--olas-fg);
192
+ font: inherit;
193
+ font-size: 12px;
194
+ outline: none;
195
+ transition: border-color 80ms, box-shadow 80ms;
196
+ }
197
+ .olas-devtools-filter input:focus {
198
+ border-color: var(--olas-accent);
199
+ box-shadow: 0 0 0 2px var(--olas-accent-soft);
200
+ }
201
+ .olas-devtools-filter input::placeholder { color: var(--olas-muted); }
202
+ .olas-devtools-filter button {
203
+ background: transparent;
204
+ border: 0;
205
+ color: var(--olas-muted);
206
+ cursor: pointer;
207
+ font: inherit;
208
+ font-size: 13px;
209
+ padding: 2px 6px;
210
+ }
211
+ .olas-devtools-filter button:hover { color: var(--olas-fg); }
212
+
213
+ /* ---- body ------------------------------------------------------------ */
214
+ .olas-devtools-body {
215
+ flex: 1;
216
+ overflow: auto;
217
+ }
218
+
219
+ /* ---- list rows ------------------------------------------------------- */
220
+ .olas-devtools-list {
221
+ margin: 0;
222
+ padding: 0;
223
+ list-style: none;
224
+ }
225
+ .olas-devtools-list li {
226
+ border-bottom: 1px solid var(--olas-border-soft);
227
+ display: flex;
228
+ flex-direction: column;
229
+ }
230
+ .olas-devtools-list li:last-child { border-bottom: none; }
231
+ .olas-devtools-list li:hover { background: var(--olas-row-alt); }
232
+
233
+ .olas-devtools-row-top {
234
+ display: flex;
235
+ align-items: center;
236
+ gap: 10px;
237
+ padding: 8px 12px;
238
+ min-height: 32px;
239
+ }
240
+ .olas-devtools-row-clickable .olas-devtools-row-top { cursor: pointer; user-select: none; }
241
+
242
+ .olas-devtools-target {
243
+ flex: 1;
244
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
245
+ font-size: 11.5px;
246
+ color: var(--olas-fg);
247
+ word-break: break-word;
248
+ min-width: 0;
249
+ }
250
+ .olas-devtools-target strong { font-weight: 600; color: var(--olas-accent); }
251
+ .olas-devtools-time {
252
+ color: var(--olas-muted);
253
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
254
+ font-size: 10.5px;
255
+ font-variant-numeric: tabular-nums;
256
+ white-space: nowrap;
257
+ }
258
+ .olas-devtools-chevron {
259
+ display: inline-flex;
260
+ align-items: center;
261
+ justify-content: center;
262
+ color: var(--olas-muted);
263
+ font-size: 12px;
264
+ width: 16px;
265
+ height: 16px;
266
+ transition: transform 100ms;
267
+ user-select: none;
268
+ }
269
+ .olas-devtools-chevron-open { transform: rotate(90deg); color: var(--olas-fg); }
270
+
271
+ .olas-devtools-kind {
272
+ color: var(--olas-accent);
273
+ background: var(--olas-accent-soft);
274
+ border-radius: 4px;
275
+ padding: 1px 7px;
276
+ font-size: 10.5px;
277
+ font-weight: 600;
278
+ letter-spacing: 0.02em;
279
+ white-space: nowrap;
280
+ line-height: 1.4;
281
+ font-variant-numeric: tabular-nums;
282
+ }
283
+ .olas-devtools-kind-success { color: var(--olas-success); background: var(--olas-success-soft); }
284
+ .olas-devtools-kind-error { color: var(--olas-error); background: var(--olas-error-soft); }
285
+ .olas-devtools-kind-warn,
286
+ .olas-devtools-kind-rollback { color: var(--olas-warn); background: var(--olas-warn-soft); }
287
+ .olas-devtools-duration {
288
+ color: var(--olas-muted);
289
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
290
+ font-size: 10.5px;
291
+ font-variant-numeric: tabular-nums;
292
+ background: var(--olas-soft);
293
+ border-radius: 4px;
294
+ padding: 1px 6px;
295
+ white-space: nowrap;
296
+ }
297
+
298
+ .olas-devtools-payload {
299
+ margin: 0 12px 10px;
300
+ padding: 8px 10px;
301
+ background: var(--olas-soft);
302
+ border: 1px solid var(--olas-border-soft);
303
+ border-radius: 6px;
304
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
305
+ font-size: 11.5px;
306
+ color: var(--olas-fg);
307
+ overflow-x: auto;
308
+ }
309
+ .olas-devtools-payload-inline {
310
+ margin-top: -4px;
311
+ padding: 4px 10px;
312
+ background: transparent;
313
+ border: 0;
314
+ color: var(--olas-muted);
315
+ font-size: 11px;
316
+ }
317
+ .olas-devtools-payload-json { line-height: 1.5; }
318
+
319
+ /* ---- JSON viewer ----------------------------------------------------- */
320
+ .olas-devtools-json-row {
321
+ display: block;
322
+ padding-left: 14px;
323
+ white-space: pre-wrap;
324
+ word-break: break-word;
325
+ }
326
+ .olas-devtools-json-children {
327
+ display: block;
328
+ border-left: 1px dashed var(--olas-border);
329
+ margin-left: 4px;
330
+ }
331
+ .olas-devtools-json-block {
332
+ display: inline-flex;
333
+ flex-direction: column;
334
+ vertical-align: top;
335
+ }
336
+ .olas-devtools-json-key {
337
+ color: var(--olas-json-key);
338
+ margin-right: 6px;
339
+ font-weight: 500;
340
+ }
341
+ .olas-devtools-json-index {
342
+ color: var(--olas-json-bracket);
343
+ margin-right: 6px;
344
+ }
345
+ .olas-devtools-json-string { color: var(--olas-json-string); }
346
+ .olas-devtools-json-number { color: var(--olas-json-number); }
347
+ .olas-devtools-json-boolean { color: var(--olas-json-boolean); }
348
+ .olas-devtools-json-null { color: var(--olas-json-null); font-style: italic; }
349
+ .olas-devtools-json-bracket { color: var(--olas-json-bracket); }
350
+ .olas-devtools-json-error { color: var(--olas-error); }
351
+ .olas-devtools-json-summary {
352
+ color: var(--olas-json-summary);
353
+ font-style: italic;
354
+ margin: 0 4px;
355
+ }
356
+ .olas-devtools-json-toggle {
357
+ display: inline-flex;
358
+ align-items: center;
359
+ gap: 0;
360
+ background: transparent;
361
+ border: 0;
362
+ padding: 0;
363
+ margin: 0;
364
+ cursor: pointer;
365
+ color: inherit;
366
+ font: inherit;
367
+ }
368
+ .olas-devtools-json-toggle:hover { background: var(--olas-accent-soft); border-radius: 3px; }
369
+
370
+ /* ---- empty state ---------------------------------------------------- */
371
+ .olas-devtools-empty {
372
+ padding: 36px 24px;
373
+ text-align: center;
374
+ color: var(--olas-muted);
375
+ }
376
+ .olas-devtools-empty-title {
377
+ color: var(--olas-fg);
378
+ font-weight: 600;
379
+ font-size: 13px;
380
+ margin-bottom: 4px;
381
+ }
382
+ .olas-devtools-empty-hint {
383
+ font-size: 12px;
384
+ max-width: 320px;
385
+ margin: 0 auto;
386
+ line-height: 1.55;
387
+ }
388
+
389
+ /* ---- tree ------------------------------------------------------------ */
390
+ .olas-devtools-tree { padding: 10px 12px; }
391
+ .olas-devtools-tree-node {
392
+ padding: 1px 0;
393
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
394
+ font-size: 12px;
395
+ }
396
+ .olas-devtools-tree-row {
397
+ display: inline-flex;
398
+ align-items: center;
399
+ gap: 8px;
400
+ padding: 1px 0;
401
+ }
402
+ .olas-devtools-tree-name { color: var(--olas-fg); font-weight: 500; }
403
+ .olas-devtools-tree-state-active,
404
+ .olas-devtools-tree-state-suspended,
405
+ .olas-devtools-tree-state-disposed {
406
+ border-radius: 4px;
407
+ padding: 0 6px;
408
+ font-size: 9.5px;
409
+ font-weight: 700;
410
+ text-transform: uppercase;
411
+ letter-spacing: 0.05em;
412
+ }
413
+ .olas-devtools-tree-state-active {
414
+ color: var(--olas-success);
415
+ background: var(--olas-success-soft);
416
+ }
417
+ .olas-devtools-tree-state-suspended {
418
+ color: var(--olas-warn);
419
+ background: var(--olas-warn-soft);
420
+ }
421
+ .olas-devtools-tree-state-disposed {
422
+ color: var(--olas-muted);
423
+ background: color-mix(in oklch, var(--olas-fg) 8%, transparent);
424
+ }
425
+ .olas-devtools-tree-pending {
426
+ color: var(--olas-warn);
427
+ background: var(--olas-warn-soft);
428
+ border-radius: 4px;
429
+ padding: 0 6px;
430
+ font-size: 10px;
431
+ font-weight: 600;
432
+ letter-spacing: 0.02em;
433
+ }
434
+ .olas-devtools-tree-props-toggle {
435
+ background: transparent;
436
+ border: 0;
437
+ cursor: pointer;
438
+ font: inherit;
439
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
440
+ font-size: 11px;
441
+ color: var(--olas-muted);
442
+ padding: 0 4px;
443
+ border-radius: 4px;
444
+ max-width: 280px;
445
+ overflow: hidden;
446
+ text-overflow: ellipsis;
447
+ white-space: nowrap;
448
+ text-align: left;
449
+ }
450
+ .olas-devtools-tree-props-toggle:hover {
451
+ color: var(--olas-fg);
452
+ background: var(--olas-soft);
453
+ }
454
+ .olas-devtools-tree-props {
455
+ margin: 4px 0 6px 8px;
456
+ padding: 6px 10px;
457
+ background: var(--olas-soft);
458
+ border: 1px solid var(--olas-border-soft);
459
+ border-radius: 6px;
460
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
461
+ font-size: 11px;
462
+ overflow-x: auto;
463
+ }
464
+ .olas-devtools-tree-children {
465
+ margin-left: 8px;
466
+ border-left: 1px dashed var(--olas-border);
467
+ padding-left: 10px;
468
+ margin-top: 2px;
469
+ }
470
+
471
+ /* ---- floating window + launcher ------------------------------------- */
472
+ .olas-devtools-launcher {
473
+ position: fixed;
474
+ right: 16px;
475
+ bottom: 16px;
476
+ z-index: 2147483645;
477
+ display: inline-flex;
478
+ align-items: center;
479
+ gap: 8px;
480
+ padding: 7px 12px 7px 11px;
481
+ background: #1f2330;
482
+ color: #e8ebf2;
483
+ border: 1px solid #2a2e3a;
484
+ border-radius: 999px;
485
+ box-shadow: 0 2px 6px rgba(0,0,0,0.15), 0 8px 24px rgba(0,0,0,0.18);
486
+ cursor: pointer;
487
+ font: inherit;
488
+ font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", system-ui, sans-serif;
489
+ font-size: 12px;
490
+ font-weight: 500;
491
+ }
492
+ .olas-devtools-launcher:hover { filter: brightness(1.1); }
493
+ .olas-devtools-launcher-active { box-shadow: 0 0 0 2px rgba(139,134,240,0.5), 0 8px 24px rgba(0,0,0,0.18); }
494
+ .olas-devtools-launcher-dot {
495
+ width: 8px;
496
+ height: 8px;
497
+ border-radius: 50%;
498
+ background: #4ade80;
499
+ box-shadow: 0 0 6px rgba(74,222,128,0.7);
500
+ }
501
+ .olas-devtools-launcher-label { letter-spacing: 0.01em; }
502
+
503
+ .olas-devtools-floating {
504
+ position: fixed;
505
+ z-index: 2147483646;
506
+ display: flex;
507
+ flex-direction: column;
508
+ background: var(--olas-bg, #ffffff);
509
+ color: var(--olas-fg, #1f2330);
510
+ border: 1px solid var(--olas-border, #e6e6ea);
511
+ border-radius: 10px;
512
+ box-shadow: 0 8px 24px rgba(0,0,0,0.18), 0 24px 64px rgba(0,0,0,0.18);
513
+ overflow: hidden;
514
+ /* Inherit the panel's own CSS vars when DevtoolsPanel is mounted inside. */
515
+ }
516
+ @media (prefers-color-scheme: dark) {
517
+ .olas-devtools-floating {
518
+ background: #15171e;
519
+ color: #e8ebf2;
520
+ border-color: #2a2e3a;
521
+ box-shadow: 0 8px 24px rgba(0,0,0,0.5), 0 24px 64px rgba(0,0,0,0.5);
522
+ }
523
+ }
524
+ .olas-devtools-floating-header {
525
+ display: flex;
526
+ align-items: center;
527
+ gap: 8px;
528
+ height: 30px;
529
+ padding: 0 8px 0 10px;
530
+ background: var(--olas-soft, #f5f6f9);
531
+ border-bottom: 1px solid var(--olas-border, #e6e6ea);
532
+ cursor: grab;
533
+ user-select: none;
534
+ flex-shrink: 0;
535
+ }
536
+ .olas-devtools-floating-header:active { cursor: grabbing; }
537
+ .olas-devtools-floating-grip {
538
+ color: var(--olas-muted, #6b7280);
539
+ font-size: 14px;
540
+ line-height: 1;
541
+ }
542
+ .olas-devtools-floating-title {
543
+ flex: 1;
544
+ font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", system-ui, sans-serif;
545
+ font-size: 11.5px;
546
+ font-weight: 600;
547
+ color: var(--olas-fg, #1f2330);
548
+ letter-spacing: 0.01em;
549
+ }
550
+ .olas-devtools-floating-actions { display: inline-flex; gap: 2px; }
551
+ .olas-devtools-floating-action {
552
+ width: 22px;
553
+ height: 22px;
554
+ display: inline-flex;
555
+ align-items: center;
556
+ justify-content: center;
557
+ background: transparent;
558
+ border: 0;
559
+ border-radius: 4px;
560
+ color: var(--olas-muted, #6b7280);
561
+ cursor: pointer;
562
+ font: inherit;
563
+ font-size: 14px;
564
+ line-height: 1;
565
+ }
566
+ .olas-devtools-floating-action:hover {
567
+ color: var(--olas-fg, #1f2330);
568
+ background: color-mix(in oklch, currentColor 14%, transparent);
569
+ }
570
+ .olas-devtools-floating-body {
571
+ flex: 1;
572
+ min-height: 0;
573
+ display: flex;
574
+ }
575
+ .olas-devtools-floating-body > .olas-devtools {
576
+ flex: 1;
577
+ border: 0;
578
+ border-radius: 0;
579
+ min-height: 0;
580
+ }
581
+ .olas-devtools-floating-resize {
582
+ position: absolute;
583
+ right: 0;
584
+ bottom: 0;
585
+ width: 14px;
586
+ height: 14px;
587
+ cursor: nwse-resize;
588
+ background:
589
+ linear-gradient(135deg, transparent 0 7px, var(--olas-muted, #6b7280) 7px 8px, transparent 8px 10px,
590
+ var(--olas-muted, #6b7280) 10px 11px, transparent 11px 100%);
591
+ opacity: 0.6;
592
+ }
593
+ .olas-devtools-floating-resize:hover { opacity: 1; }
594
+ `