@korajs/devtools 0.1.3 → 0.3.1

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.
@@ -1,7 +1,599 @@
1
1
  <!doctype html>
2
2
  <html lang="en">
3
- <head><meta charset="utf-8" /></head>
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <style>
6
+ /* ================================================================
7
+ Kora DevTools — Dark theme optimized for Chrome DevTools panels
8
+ ================================================================ */
9
+
10
+ :root {
11
+ --bg-primary: #1e1e2e;
12
+ --bg-secondary: #181825;
13
+ --bg-surface: #313244;
14
+ --bg-hover: #45475a;
15
+ --bg-selected: #585b70;
16
+ --text-primary: #cdd6f4;
17
+ --text-secondary: #a6adc8;
18
+ --text-muted: #6c7086;
19
+ --border: #45475a;
20
+
21
+ --green: #a6e3a1;
22
+ --red: #f38ba8;
23
+ --yellow: #f9e2af;
24
+ --blue: #89b4fa;
25
+ --purple: #cba6f7;
26
+ --teal: #94e2d5;
27
+ --peach: #fab387;
28
+
29
+ --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', Consolas, monospace;
30
+ --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
31
+ --font-size: 12px;
32
+ }
33
+
34
+ * {
35
+ box-sizing: border-box;
36
+ margin: 0;
37
+ padding: 0;
38
+ }
39
+
40
+ body {
41
+ background: var(--bg-primary);
42
+ color: var(--text-primary);
43
+ font-family: var(--font-sans);
44
+ font-size: var(--font-size);
45
+ line-height: 1.5;
46
+ overflow: hidden;
47
+ }
48
+
49
+ #kora-devtools-root {
50
+ width: 100vw;
51
+ height: 100vh;
52
+ display: flex;
53
+ flex-direction: column;
54
+ }
55
+
56
+ .kora-devtools {
57
+ display: flex;
58
+ flex-direction: column;
59
+ height: 100%;
60
+ }
61
+
62
+ /* ---- Toolbar ---- */
63
+
64
+ .kora-toolbar {
65
+ background: var(--bg-secondary);
66
+ border-bottom: 1px solid var(--border);
67
+ padding: 4px 8px;
68
+ display: flex;
69
+ flex-wrap: wrap;
70
+ align-items: center;
71
+ gap: 8px;
72
+ flex-shrink: 0;
73
+ }
74
+
75
+ .kora-tabs {
76
+ display: flex;
77
+ gap: 2px;
78
+ }
79
+
80
+ .kora-tab {
81
+ background: transparent;
82
+ color: var(--text-secondary);
83
+ border: none;
84
+ padding: 4px 12px;
85
+ border-radius: 4px;
86
+ cursor: pointer;
87
+ font-size: var(--font-size);
88
+ font-family: var(--font-sans);
89
+ display: flex;
90
+ align-items: center;
91
+ gap: 6px;
92
+ }
93
+
94
+ .kora-tab:hover {
95
+ background: var(--bg-hover);
96
+ color: var(--text-primary);
97
+ }
98
+
99
+ .kora-tab.active {
100
+ background: var(--bg-surface);
101
+ color: var(--text-primary);
102
+ font-weight: 600;
103
+ }
104
+
105
+ .kora-badge {
106
+ background: var(--bg-hover);
107
+ color: var(--text-muted);
108
+ padding: 0 6px;
109
+ border-radius: 10px;
110
+ font-size: 10px;
111
+ font-weight: 500;
112
+ }
113
+
114
+ .kora-tab.active .kora-badge {
115
+ background: var(--blue);
116
+ color: var(--bg-primary);
117
+ }
118
+
119
+ .kora-controls {
120
+ display: flex;
121
+ gap: 4px;
122
+ align-items: center;
123
+ margin-left: auto;
124
+ flex-wrap: wrap;
125
+ }
126
+
127
+ .kora-search {
128
+ background: var(--bg-surface);
129
+ color: var(--text-primary);
130
+ border: 1px solid var(--border);
131
+ padding: 3px 8px;
132
+ border-radius: 4px;
133
+ font-size: var(--font-size);
134
+ font-family: var(--font-sans);
135
+ width: 140px;
136
+ outline: none;
137
+ }
138
+
139
+ .kora-search:focus {
140
+ border-color: var(--blue);
141
+ }
142
+
143
+ .kora-btn {
144
+ background: var(--bg-surface);
145
+ color: var(--text-secondary);
146
+ border: 1px solid var(--border);
147
+ padding: 3px 8px;
148
+ border-radius: 4px;
149
+ cursor: pointer;
150
+ font-size: 11px;
151
+ font-family: var(--font-sans);
152
+ }
153
+
154
+ .kora-btn:hover {
155
+ background: var(--bg-hover);
156
+ color: var(--text-primary);
157
+ }
158
+
159
+ .kora-cat-toggle {
160
+ background: transparent;
161
+ color: var(--text-muted);
162
+ border: 1px solid transparent;
163
+ padding: 2px 6px;
164
+ border-radius: 3px;
165
+ cursor: pointer;
166
+ font-size: 10px;
167
+ font-family: var(--font-sans);
168
+ text-transform: uppercase;
169
+ letter-spacing: 0.5px;
170
+ }
171
+
172
+ .kora-cat-toggle:hover {
173
+ color: var(--text-secondary);
174
+ }
175
+
176
+ .kora-cat-toggle.active {
177
+ background: var(--bg-surface);
178
+ color: var(--text-primary);
179
+ border-color: var(--border);
180
+ }
181
+
182
+ /* ---- Content ---- */
183
+
184
+ .kora-content {
185
+ flex: 1;
186
+ overflow: hidden;
187
+ display: flex;
188
+ flex-direction: column;
189
+ }
190
+
191
+ .kora-panel {
192
+ flex: 1;
193
+ overflow-y: auto;
194
+ padding: 8px;
195
+ }
196
+
197
+ .kora-empty {
198
+ color: var(--text-muted);
199
+ text-align: center;
200
+ padding: 40px;
201
+ font-style: italic;
202
+ }
203
+
204
+ .kora-summary {
205
+ color: var(--text-muted);
206
+ font-size: 11px;
207
+ padding: 4px 0 8px;
208
+ border-bottom: 1px solid var(--border);
209
+ margin-bottom: 4px;
210
+ }
211
+
212
+ /* ---- Event List (Timeline) ---- */
213
+
214
+ .kora-event-list {
215
+ display: flex;
216
+ flex-direction: column;
217
+ }
218
+
219
+ .kora-row {
220
+ display: flex;
221
+ align-items: center;
222
+ gap: 8px;
223
+ padding: 3px 6px;
224
+ border-radius: 3px;
225
+ cursor: pointer;
226
+ min-height: 24px;
227
+ }
228
+
229
+ .kora-row:hover {
230
+ background: var(--bg-hover);
231
+ }
232
+
233
+ .kora-row.expanded,
234
+ .kora-row.selected {
235
+ background: var(--bg-surface);
236
+ }
237
+
238
+ .kora-row.compact {
239
+ padding: 2px 6px;
240
+ font-size: 11px;
241
+ }
242
+
243
+ .kora-time {
244
+ color: var(--text-muted);
245
+ font-family: var(--font-mono);
246
+ font-size: 11px;
247
+ flex-shrink: 0;
248
+ width: 90px;
249
+ }
250
+
251
+ .kora-dot {
252
+ width: 8px;
253
+ height: 8px;
254
+ border-radius: 50%;
255
+ flex-shrink: 0;
256
+ }
257
+
258
+ .kora-type {
259
+ color: var(--text-secondary);
260
+ font-size: 11px;
261
+ flex-shrink: 0;
262
+ width: 140px;
263
+ }
264
+
265
+ .kora-label {
266
+ color: var(--text-primary);
267
+ flex: 1;
268
+ overflow: hidden;
269
+ text-overflow: ellipsis;
270
+ white-space: nowrap;
271
+ }
272
+
273
+ .kora-deps {
274
+ color: var(--peach);
275
+ font-size: 10px;
276
+ flex-shrink: 0;
277
+ }
278
+
279
+ /* ---- Detail / Expandable ---- */
280
+
281
+ .kora-detail,
282
+ .kora-op-detail {
283
+ background: var(--bg-secondary);
284
+ border: 1px solid var(--border);
285
+ border-radius: 4px;
286
+ padding: 8px 12px;
287
+ margin: 2px 0 6px 28px;
288
+ font-size: 11px;
289
+ display: flex;
290
+ flex-direction: column;
291
+ gap: 4px;
292
+ }
293
+
294
+ .kora-detail-label {
295
+ color: var(--text-muted);
296
+ font-weight: 500;
297
+ margin-right: 4px;
298
+ }
299
+
300
+ .kora-mono {
301
+ font-family: var(--font-mono);
302
+ font-size: 11px;
303
+ }
304
+
305
+ /* ---- Conflicts Table ---- */
306
+
307
+ .kora-table {
308
+ width: 100%;
309
+ border-collapse: collapse;
310
+ font-size: 11px;
311
+ }
312
+
313
+ .kora-table th {
314
+ text-align: left;
315
+ color: var(--text-muted);
316
+ font-weight: 500;
317
+ padding: 6px 8px;
318
+ border-bottom: 1px solid var(--border);
319
+ text-transform: uppercase;
320
+ font-size: 10px;
321
+ letter-spacing: 0.5px;
322
+ }
323
+
324
+ .kora-table td {
325
+ padding: 5px 8px;
326
+ border-bottom: 1px solid var(--bg-surface);
327
+ }
328
+
329
+ .kora-conflict-row {
330
+ cursor: pointer;
331
+ }
332
+
333
+ .kora-conflict-row:hover td {
334
+ background: var(--bg-hover);
335
+ }
336
+
337
+ .kora-conflict-row.expanded td {
338
+ background: var(--bg-surface);
339
+ }
340
+
341
+ .kora-conflict-row.violated td {
342
+ border-left: 3px solid var(--red);
343
+ }
344
+
345
+ .kora-strategy {
346
+ padding: 1px 6px;
347
+ border-radius: 3px;
348
+ font-size: 10px;
349
+ font-weight: 500;
350
+ }
351
+
352
+ .kora-strategy.tier-1 {
353
+ background: rgba(166, 227, 161, 0.15);
354
+ color: var(--green);
355
+ }
356
+
357
+ .kora-strategy.tier-2 {
358
+ background: rgba(249, 226, 175, 0.15);
359
+ color: var(--yellow);
360
+ }
361
+
362
+ .kora-strategy.tier-3 {
363
+ background: rgba(203, 166, 247, 0.15);
364
+ color: var(--purple);
365
+ }
366
+
367
+ .kora-detail-row td {
368
+ padding: 0;
369
+ }
370
+
371
+ .kora-conflict-detail {
372
+ padding: 12px;
373
+ }
374
+
375
+ .kora-comparison {
376
+ display: grid;
377
+ grid-template-columns: 1fr 1fr 1fr;
378
+ gap: 8px;
379
+ }
380
+
381
+ .kora-value-box {
382
+ background: var(--bg-primary);
383
+ border: 1px solid var(--border);
384
+ border-radius: 4px;
385
+ padding: 8px;
386
+ }
387
+
388
+ .kora-value-box.result {
389
+ border-color: var(--green);
390
+ }
391
+
392
+ .kora-value-label {
393
+ color: var(--text-muted);
394
+ font-size: 10px;
395
+ text-transform: uppercase;
396
+ letter-spacing: 0.5px;
397
+ margin-bottom: 4px;
398
+ }
399
+
400
+ .kora-value-code {
401
+ font-family: var(--font-mono);
402
+ font-size: 11px;
403
+ color: var(--text-primary);
404
+ white-space: pre-wrap;
405
+ word-break: break-all;
406
+ margin: 0;
407
+ }
408
+
409
+ .kora-constraint-warning {
410
+ margin-top: 8px;
411
+ padding: 6px 10px;
412
+ background: rgba(243, 139, 168, 0.1);
413
+ border: 1px solid var(--red);
414
+ border-radius: 4px;
415
+ color: var(--red);
416
+ font-size: 11px;
417
+ }
418
+
419
+ /* ---- Operations ---- */
420
+
421
+ .kora-op-list {
422
+ display: flex;
423
+ flex-direction: column;
424
+ }
425
+
426
+ .kora-op-row {
427
+ display: flex;
428
+ align-items: center;
429
+ gap: 8px;
430
+ padding: 3px 6px;
431
+ border-radius: 3px;
432
+ cursor: pointer;
433
+ }
434
+
435
+ .kora-op-row:hover {
436
+ background: var(--bg-hover);
437
+ }
438
+
439
+ .kora-op-row.expanded {
440
+ background: var(--bg-surface);
441
+ }
442
+
443
+ .kora-op-type {
444
+ padding: 1px 6px;
445
+ border-radius: 3px;
446
+ font-size: 10px;
447
+ font-weight: 600;
448
+ text-transform: uppercase;
449
+ flex-shrink: 0;
450
+ }
451
+
452
+ .op-insert {
453
+ background: rgba(166, 227, 161, 0.15);
454
+ color: var(--green);
455
+ }
456
+
457
+ .op-update {
458
+ background: rgba(137, 180, 250, 0.15);
459
+ color: var(--blue);
460
+ }
461
+
462
+ .op-delete {
463
+ background: rgba(243, 139, 168, 0.15);
464
+ color: var(--red);
465
+ }
466
+
467
+ .kora-op-collection {
468
+ color: var(--teal);
469
+ font-weight: 500;
470
+ flex-shrink: 0;
471
+ }
472
+
473
+ .kora-op-record {
474
+ color: var(--text-secondary);
475
+ flex-shrink: 0;
476
+ }
477
+
478
+ .kora-op-node {
479
+ color: var(--text-muted);
480
+ font-size: 10px;
481
+ flex-shrink: 0;
482
+ }
483
+
484
+ .kora-op-seq {
485
+ color: var(--text-muted);
486
+ font-size: 10px;
487
+ flex-shrink: 0;
488
+ }
489
+
490
+ /* ---- Network ---- */
491
+
492
+ .kora-network-status {
493
+ padding: 12px 0;
494
+ }
495
+
496
+ .kora-status-indicator {
497
+ display: flex;
498
+ align-items: center;
499
+ gap: 8px;
500
+ font-size: 14px;
501
+ font-weight: 600;
502
+ }
503
+
504
+ .kora-status-dot {
505
+ width: 12px;
506
+ height: 12px;
507
+ border-radius: 50%;
508
+ }
509
+
510
+ .connected .kora-status-dot {
511
+ background: var(--green);
512
+ box-shadow: 0 0 8px rgba(166, 227, 161, 0.5);
513
+ }
514
+
515
+ .disconnected .kora-status-dot {
516
+ background: var(--red);
517
+ box-shadow: 0 0 8px rgba(243, 139, 168, 0.3);
518
+ }
519
+
520
+ .connected .kora-status-text {
521
+ color: var(--green);
522
+ }
523
+
524
+ .disconnected .kora-status-text {
525
+ color: var(--red);
526
+ }
527
+
528
+ .kora-stats-grid {
529
+ display: grid;
530
+ grid-template-columns: repeat(4, 1fr);
531
+ gap: 8px;
532
+ margin: 12px 0;
533
+ }
534
+
535
+ .kora-stat-card {
536
+ background: var(--bg-surface);
537
+ border: 1px solid var(--border);
538
+ border-radius: 6px;
539
+ padding: 12px;
540
+ text-align: center;
541
+ }
542
+
543
+ .kora-stat-value {
544
+ font-size: 20px;
545
+ font-weight: 700;
546
+ color: var(--text-primary);
547
+ font-family: var(--font-mono);
548
+ }
549
+
550
+ .kora-stat-label {
551
+ color: var(--text-muted);
552
+ font-size: 10px;
553
+ text-transform: uppercase;
554
+ letter-spacing: 0.5px;
555
+ margin-top: 2px;
556
+ }
557
+
558
+ .kora-vv-section,
559
+ .kora-sync-log {
560
+ margin-top: 16px;
561
+ }
562
+
563
+ .kora-vv-section h3,
564
+ .kora-sync-log h3 {
565
+ color: var(--text-secondary);
566
+ font-size: 12px;
567
+ font-weight: 600;
568
+ margin-bottom: 8px;
569
+ }
570
+
571
+ .kora-vv-table {
572
+ max-width: 400px;
573
+ }
574
+
575
+ /* ---- Scrollbar ---- */
576
+
577
+ ::-webkit-scrollbar {
578
+ width: 8px;
579
+ }
580
+
581
+ ::-webkit-scrollbar-track {
582
+ background: var(--bg-primary);
583
+ }
584
+
585
+ ::-webkit-scrollbar-thumb {
586
+ background: var(--bg-hover);
587
+ border-radius: 4px;
588
+ }
589
+
590
+ ::-webkit-scrollbar-thumb:hover {
591
+ background: var(--bg-selected);
592
+ }
593
+ </style>
594
+ </head>
4
595
  <body>
5
- <script type="module" src="./devtools.js"></script>
596
+ <main id="kora-devtools-root"></main>
597
+ <script type="module" src="./panel.js"></script>
6
598
  </body>
7
599
  </html>