opencroc 1.8.2 → 1.8.3

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.
Files changed (44) hide show
  1. package/package.json +1 -1
  2. package/dist/web/index.html +0 -12
  3. package/dist/web/public/botreview/char_0.png +0 -0
  4. package/dist/web/public/botreview/char_1.png +0 -0
  5. package/dist/web/public/botreview/char_2.png +0 -0
  6. package/dist/web/public/botreview/coffee-machine.gif +0 -0
  7. package/dist/web/public/botreview/server.gif +0 -0
  8. package/dist/web/public/botreview/walls.png +0 -0
  9. package/dist/web/public/star/desk-v3.webp +0 -0
  10. package/dist/web/public/star/office_bg_small.webp +0 -0
  11. package/dist/web/public/star/star-idle-v5.png +0 -0
  12. package/dist/web/public/star/star-working-spritesheet-grid.webp +0 -0
  13. package/dist/web/src/app/AppLayout.tsx +0 -34
  14. package/dist/web/src/app/AppRouter.tsx +0 -46
  15. package/dist/web/src/app/bootstrap.tsx +0 -22
  16. package/dist/web/src/app/routes.tsx +0 -52
  17. package/dist/web/src/features/office/runtime/index.ts +0 -1
  18. package/dist/web/src/features/office/runtime/mount.ts +0 -809
  19. package/dist/web/src/features/pixel/runtime/index.ts +0 -1
  20. package/dist/web/src/features/pixel/runtime/mount.ts +0 -728
  21. package/dist/web/src/features/studio/runtime/index.ts +0 -1
  22. package/dist/web/src/features/studio/runtime/mount.ts +0 -664
  23. package/dist/web/src/features/three/engine/index.ts +0 -1
  24. package/dist/web/src/main.tsx +0 -7
  25. package/dist/web/src/pages/office/index.ts +0 -1
  26. package/dist/web/src/pages/office/page.tsx +0 -283
  27. package/dist/web/src/pages/pixel/index.ts +0 -1
  28. package/dist/web/src/pages/pixel/page.tsx +0 -564
  29. package/dist/web/src/pages/studio/index.ts +0 -1
  30. package/dist/web/src/pages/studio/page.tsx +0 -446
  31. package/dist/web/src/runtime/agents.ts +0 -738
  32. package/dist/web/src/runtime/camera.ts +0 -132
  33. package/dist/web/src/runtime/dataviz.ts +0 -312
  34. package/dist/web/src/runtime/effects.ts +0 -482
  35. package/dist/web/src/runtime/engine.ts +0 -528
  36. package/dist/web/src/runtime/office.ts +0 -932
  37. package/dist/web/src/runtime/state.ts +0 -37
  38. package/dist/web/src/runtime/ui.ts +0 -388
  39. package/dist/web/src/shared/assets.ts +0 -4
  40. package/dist/web/src/shared/navigation.ts +0 -47
  41. package/dist/web/src/styles/app-layout.css +0 -19
  42. package/dist/web/src/styles/office.css +0 -268
  43. package/dist/web/tsconfig.json +0 -28
  44. package/dist/web/vite.config.ts +0 -93
@@ -1,564 +0,0 @@
1
- import { useEffect } from 'react';
2
- import { publicAsset } from '@shared/assets';
3
-
4
- const pixelStyles = `
5
- :root {
6
- --pixel-bg: #0a1220;
7
- --pixel-panel: rgba(11, 18, 31, 0.86);
8
- --pixel-card: rgba(19, 30, 50, 0.8);
9
- --pixel-hover: rgba(34, 51, 82, 0.84);
10
- --pixel-border: rgba(148, 163, 184, 0.15);
11
- --pixel-accent: #34d399;
12
- --pixel-red: #f87171;
13
- --pixel-orange: #fbbf24;
14
- --pixel-blue: #60a5fa;
15
- --pixel-purple: #a78bfa;
16
- --pixel-text: #e2e8f0;
17
- --pixel-dim: #94a3b8;
18
- --pixel-muted: #64748b;
19
- --pixel-shadow: 0 18px 48px rgba(0, 0, 0, 0.32);
20
- }
21
- [data-theme="light"] {
22
- --pixel-bg: #edf3fb;
23
- --pixel-panel: rgba(255, 255, 255, 0.88);
24
- --pixel-card: rgba(248, 250, 252, 0.98);
25
- --pixel-hover: rgba(226, 232, 240, 0.98);
26
- --pixel-border: rgba(100, 116, 139, 0.18);
27
- --pixel-accent: #059669;
28
- --pixel-red: #dc2626;
29
- --pixel-orange: #d97706;
30
- --pixel-blue: #2563eb;
31
- --pixel-purple: #7c3aed;
32
- --pixel-text: #0f172a;
33
- --pixel-dim: #475569;
34
- --pixel-muted: #94a3b8;
35
- --pixel-shadow: 0 18px 48px rgba(15, 23, 42, 0.08);
36
- }
37
- html, body, #root { width: 100%; height: 100%; }
38
- body {
39
- margin: 0;
40
- overflow: hidden;
41
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
42
- background:
43
- radial-gradient(circle at top left, rgba(96, 165, 250, 0.08), transparent 34%),
44
- radial-gradient(circle at bottom right, rgba(52, 211, 153, 0.08), transparent 30%),
45
- var(--pixel-bg);
46
- color: var(--pixel-text);
47
- }
48
- .pixel-app {
49
- display: grid;
50
- grid-template-columns: 260px 1fr 360px;
51
- grid-template-rows: 72px 1fr 180px;
52
- grid-template-areas:
53
- "header header header"
54
- "sidebar main panel"
55
- "office office office";
56
- gap: 10px;
57
- height: 100%;
58
- padding: 10px;
59
- }
60
- .pixel-shell,
61
- .pixel-header,
62
- .pixel-main,
63
- .pixel-panel,
64
- .pixel-office {
65
- border-radius: 20px;
66
- border: 1px solid var(--pixel-border);
67
- background: var(--pixel-panel);
68
- backdrop-filter: blur(18px);
69
- box-shadow: var(--pixel-shadow);
70
- }
71
- .pixel-header {
72
- grid-area: header;
73
- display: flex;
74
- align-items: center;
75
- gap: 10px;
76
- padding: 12px 16px;
77
- }
78
- .pixel-logo {
79
- width: 38px;
80
- height: 38px;
81
- display: grid;
82
- place-items: center;
83
- border-radius: 12px;
84
- background: color-mix(in srgb, var(--pixel-accent) 16%, transparent);
85
- color: var(--pixel-accent);
86
- font-weight: 700;
87
- }
88
- .pixel-title h1 { margin: 0; font-size: 16px; }
89
- .pixel-title p { margin: 2px 0 0; font-size: 12px; color: var(--pixel-dim); }
90
- .pixel-switch,
91
- .pixel-actions,
92
- .pixel-stats,
93
- .pixel-panel-tabs,
94
- .pixel-kpis { display: flex; gap: 8px; }
95
- .pixel-switch button,
96
- .pixel-btn,
97
- .pixel-tab,
98
- .pixel-small-btn {
99
- border: 1px solid var(--pixel-border);
100
- border-radius: 12px;
101
- background: var(--pixel-card);
102
- color: var(--pixel-text);
103
- cursor: pointer;
104
- transition: 0.2s ease;
105
- font: inherit;
106
- }
107
- .pixel-switch button,
108
- .pixel-btn,
109
- .pixel-small-btn { padding: 9px 12px; }
110
- .pixel-tab { padding: 8px 10px; flex: 1; }
111
- .pixel-switch button.active,
112
- .pixel-tab.active {
113
- border-color: color-mix(in srgb, var(--pixel-accent) 36%, var(--pixel-border));
114
- background: color-mix(in srgb, var(--pixel-accent) 14%, var(--pixel-card));
115
- }
116
- .pixel-btn.primary { background: color-mix(in srgb, var(--pixel-accent) 20%, var(--pixel-card)); }
117
- .pixel-btn.danger { background: color-mix(in srgb, var(--pixel-red) 16%, var(--pixel-card)); }
118
- .pixel-switch button:hover,
119
- .pixel-btn:hover,
120
- .pixel-tab:hover,
121
- .pixel-small-btn:hover,
122
- .pixel-list-item:hover,
123
- .pixel-agent-card:hover { background: var(--pixel-hover); }
124
- .pixel-select {
125
- border-radius: 12px;
126
- border: 1px solid var(--pixel-border);
127
- background: var(--pixel-card);
128
- color: var(--pixel-text);
129
- padding: 9px 10px;
130
- }
131
- .pixel-spacer { flex: 1; }
132
- .pixel-stats > div {
133
- min-width: 62px;
134
- padding: 7px 10px;
135
- border-radius: 14px;
136
- border: 1px solid var(--pixel-border);
137
- background: var(--pixel-card);
138
- text-align: center;
139
- }
140
- .pixel-stats .label { font-size: 10px; color: var(--pixel-muted); text-transform: uppercase; }
141
- .pixel-stats .value {
142
- display: block;
143
- margin-top: 4px;
144
- font-size: 17px;
145
- font-weight: 700;
146
- color: var(--pixel-accent);
147
- }
148
- .pixel-theme-btn {
149
- width: 34px;
150
- height: 34px;
151
- display: grid;
152
- place-items: center;
153
- border-radius: 12px;
154
- border: 1px solid var(--pixel-border);
155
- background: var(--pixel-card);
156
- }
157
- .pixel-conn {
158
- width: 12px;
159
- height: 12px;
160
- border-radius: 50%;
161
- background: var(--pixel-muted);
162
- }
163
- .pixel-conn.connected { background: var(--pixel-accent); }
164
- .pixel-sidebar {
165
- grid-area: sidebar;
166
- overflow: auto;
167
- padding: 16px;
168
- }
169
- .pixel-sidebar h3 {
170
- margin: 0 0 10px;
171
- font-size: 11px;
172
- letter-spacing: 0.08em;
173
- text-transform: uppercase;
174
- color: var(--pixel-dim);
175
- }
176
- .pixel-list { display: flex; flex-direction: column; gap: 8px; }
177
- .pixel-list-item,
178
- .pixel-agent-card,
179
- .pixel-file-item {
180
- padding: 12px;
181
- border-radius: 14px;
182
- border: 1px solid var(--pixel-border);
183
- background: var(--pixel-card);
184
- }
185
- .pixel-main {
186
- grid-area: main;
187
- position: relative;
188
- overflow: hidden;
189
- }
190
- .pixel-view { position: absolute; inset: 0; }
191
- .pixel-view.hidden { display: none; }
192
- .pixel-graph-canvas { width: 100%; height: 100%; }
193
- .pixel-tooltip {
194
- position: fixed;
195
- z-index: 80;
196
- display: none;
197
- padding: 8px 10px;
198
- border-radius: 12px;
199
- border: 1px solid var(--pixel-border);
200
- background: rgba(10, 15, 26, 0.94);
201
- color: #e2e8f0;
202
- font-size: 12px;
203
- pointer-events: none;
204
- }
205
- .pixel-tooltip.visible { display: block; }
206
- .pixel-stage {
207
- position: relative;
208
- width: 100%;
209
- height: 100%;
210
- padding: 24px;
211
- overflow: hidden;
212
- }
213
- .pixel-stage .asset {
214
- position: absolute;
215
- image-rendering: pixelated;
216
- user-select: none;
217
- pointer-events: none;
218
- }
219
- .desk-asset {
220
- left: 50%;
221
- bottom: 18px;
222
- transform: translateX(-50%);
223
- width: min(760px, 92%);
224
- opacity: 0.92;
225
- }
226
- .server-asset { left: 36px; bottom: 26px; width: 100px; }
227
- .coffee-asset { right: 42px; bottom: 34px; width: 88px; }
228
- .walls-asset { right: 24px; top: 24px; width: 220px; opacity: 0.85; }
229
- .pixel-kpis {
230
- position: absolute;
231
- left: 18px;
232
- top: 18px;
233
- gap: 10px;
234
- }
235
- .pixel-kpi {
236
- min-width: 100px;
237
- padding: 10px 12px;
238
- border-radius: 14px;
239
- border: 1px solid var(--pixel-border);
240
- background: rgba(8, 15, 27, 0.72);
241
- }
242
- .pixel-kpi .t { font-size: 11px; color: var(--pixel-dim); }
243
- .pixel-kpi .v {
244
- margin-top: 5px;
245
- font-size: 26px;
246
- font-weight: 700;
247
- color: var(--pixel-accent);
248
- }
249
- .pixel-kpi.errors .v { color: var(--pixel-red); }
250
- .pixel-kpi.done .v { color: var(--pixel-blue); }
251
- .pixel-agent-layer { position: absolute; inset: 0; }
252
- .pixel-avatar {
253
- position: absolute;
254
- width: 52px;
255
- height: 52px;
256
- display: grid;
257
- place-items: center;
258
- border-radius: 16px;
259
- border: 1px solid var(--pixel-border);
260
- background: color-mix(in srgb, var(--pixel-accent) 12%, var(--pixel-card));
261
- font-size: 20px;
262
- box-shadow: 0 12px 24px rgba(0, 0, 0, 0.18);
263
- }
264
- .pixel-avatar.error,
265
- .pixel-avatar.failed { background: color-mix(in srgb, var(--pixel-red) 14%, var(--pixel-card)); }
266
- .pixel-avatar.testing { background: color-mix(in srgb, var(--pixel-blue) 14%, var(--pixel-card)); }
267
- .pixel-avatar.done,
268
- .pixel-avatar.passed { background: color-mix(in srgb, var(--pixel-accent) 18%, var(--pixel-card)); }
269
- .pixel-label {
270
- position: absolute;
271
- min-width: 120px;
272
- max-width: 160px;
273
- padding: 8px 10px;
274
- border-radius: 12px;
275
- border: 1px solid var(--pixel-border);
276
- background: rgba(8, 15, 27, 0.82);
277
- font-size: 12px;
278
- color: var(--pixel-text);
279
- transform: translateX(-50%);
280
- }
281
- .pixel-label .role,
282
- .pixel-label .task { display: block; color: var(--pixel-dim); font-size: 11px; }
283
- .pixel-bubble {
284
- position: absolute;
285
- padding: 7px 10px;
286
- border-radius: 999px;
287
- border: 1px solid var(--pixel-border);
288
- background: rgba(8, 15, 27, 0.88);
289
- font-size: 11px;
290
- color: var(--pixel-text);
291
- animation: pixel-bubble-in 3s ease forwards;
292
- }
293
- @keyframes pixel-bubble-in {
294
- 0% { opacity: 0; transform: translateY(8px); }
295
- 12% { opacity: 1; transform: translateY(0); }
296
- 88% { opacity: 1; transform: translateY(0); }
297
- 100% { opacity: 0; transform: translateY(-6px); }
298
- }
299
- .pixel-panel {
300
- grid-area: panel;
301
- display: flex;
302
- flex-direction: column;
303
- overflow: hidden;
304
- }
305
- .pixel-panel-tabs {
306
- padding: 10px;
307
- border-bottom: 1px solid var(--pixel-border);
308
- }
309
- .pixel-panel-body { flex: 1; overflow: auto; padding: 12px; }
310
- .pixel-log-entry {
311
- padding: 10px 12px;
312
- border-radius: 14px;
313
- border: 1px solid var(--pixel-border);
314
- background: var(--pixel-card);
315
- margin-bottom: 8px;
316
- font-size: 12px;
317
- }
318
- .pixel-log-entry .ts {
319
- display: block;
320
- margin-bottom: 4px;
321
- color: var(--pixel-muted);
322
- font-size: 10px;
323
- }
324
- .pixel-office {
325
- grid-area: office;
326
- overflow: auto;
327
- padding: 14px;
328
- }
329
- .pixel-office-grid {
330
- display: grid;
331
- grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
332
- gap: 10px;
333
- }
334
- .pixel-agent-card .role,
335
- .pixel-agent-card .task,
336
- .pixel-file-meta { display: block; color: var(--pixel-dim); font-size: 11px; }
337
- .pixel-progress {
338
- margin-top: 10px;
339
- height: 7px;
340
- border-radius: 999px;
341
- overflow: hidden;
342
- background: rgba(15, 23, 42, 0.4);
343
- }
344
- .pixel-progress > span {
345
- display: block;
346
- height: 100%;
347
- background: linear-gradient(90deg, var(--pixel-accent), var(--pixel-blue));
348
- }
349
- .pixel-file-preview {
350
- position: fixed;
351
- inset: 0;
352
- display: none;
353
- align-items: center;
354
- justify-content: center;
355
- background: rgba(2, 6, 23, 0.44);
356
- backdrop-filter: blur(10px);
357
- z-index: 90;
358
- }
359
- .pixel-file-preview.visible { display: flex; }
360
- .pixel-file-dialog {
361
- width: min(860px, 92vw);
362
- height: min(680px, 86vh);
363
- border-radius: 20px;
364
- border: 1px solid var(--pixel-border);
365
- background: var(--pixel-panel);
366
- box-shadow: var(--pixel-shadow);
367
- display: flex;
368
- flex-direction: column;
369
- overflow: hidden;
370
- }
371
- .pixel-file-head {
372
- display: flex;
373
- align-items: center;
374
- justify-content: space-between;
375
- gap: 10px;
376
- padding: 14px 16px;
377
- border-bottom: 1px solid var(--pixel-border);
378
- }
379
- .pixel-file-code {
380
- flex: 1;
381
- overflow: auto;
382
- margin: 0;
383
- padding: 16px;
384
- color: var(--pixel-dim);
385
- font-size: 12px;
386
- line-height: 1.7;
387
- white-space: pre-wrap;
388
- }
389
- .pixel-shortcuts {
390
- position: fixed;
391
- right: 12px;
392
- bottom: 12px;
393
- z-index: 85;
394
- display: none;
395
- grid-template-columns: auto auto;
396
- gap: 4px 12px;
397
- padding: 12px 14px;
398
- border-radius: 16px;
399
- border: 1px solid var(--pixel-border);
400
- background: rgba(8, 15, 27, 0.88);
401
- color: var(--pixel-dim);
402
- font-size: 11px;
403
- }
404
- .pixel-shortcuts.visible { display: grid; }
405
- .pixel-shortcuts kbd {
406
- display: inline-flex;
407
- min-width: 18px;
408
- justify-content: center;
409
- padding: 2px 6px;
410
- border-radius: 6px;
411
- border: 1px solid var(--pixel-border);
412
- background: var(--pixel-card);
413
- color: var(--pixel-text);
414
- }
415
- @media (max-width: 1260px) {
416
- .pixel-app { grid-template-columns: 220px 1fr 320px; }
417
- }
418
- @media (max-width: 1080px) {
419
- .pixel-app {
420
- grid-template-columns: 1fr;
421
- grid-template-rows: 72px 1fr 180px;
422
- grid-template-areas:
423
- "header"
424
- "main"
425
- "office";
426
- }
427
- .pixel-sidebar,
428
- .pixel-panel { display: none; }
429
- }
430
- `;
431
-
432
- export default function PixelPage() {
433
- useEffect(() => {
434
- let dispose: (() => void) | undefined;
435
- let cancelled = false;
436
-
437
- void import('@features/pixel/runtime')
438
- .then(({ mountPixelRuntime }) => mountPixelRuntime())
439
- .then((cleanup) => {
440
- if (cancelled) {
441
- cleanup();
442
- return;
443
- }
444
- dispose = cleanup;
445
- });
446
-
447
- return () => {
448
- cancelled = true;
449
- dispose?.();
450
- };
451
- }, []);
452
-
453
- return (
454
- <>
455
- <style>{pixelStyles}</style>
456
- <div className="pixel-app">
457
- <header className="pixel-header">
458
- <div className="pixel-logo">OC</div>
459
- <div className="pixel-title">
460
- <h1>OpenCroc Studio</h1>
461
- <p>Pixel Ops Dashboard | Multi-agent runtime monitor</p>
462
- </div>
463
- <div className="pixel-switch">
464
- <button id="view-dashboard" className="active" type="button">Dashboard</button>
465
- <button id="view-office" type="button">Pixel Office</button>
466
- </div>
467
- <div className="pixel-actions">
468
- <button id="btn-scan" className="pixel-btn primary" type="button">Scan</button>
469
- <button id="btn-pipeline" className="pixel-btn primary" type="button">Pipeline</button>
470
- <select id="run-mode" className="pixel-select" defaultValue="auto">
471
- <option value="auto">Auto</option>
472
- <option value="reuse">Reuse</option>
473
- <option value="managed">Managed</option>
474
- </select>
475
- <button id="btn-run-tests" className="pixel-btn" type="button">Tests</button>
476
- <button id="btn-reports" className="pixel-btn" type="button">Reports</button>
477
- <button id="btn-reset" className="pixel-btn danger" type="button">Reset</button>
478
- </div>
479
- <div className="pixel-spacer" />
480
- <div className="pixel-stats">
481
- <div><span className="label">Modules</span><span className="value" id="s-mod">-</span></div>
482
- <div><span className="label">Models</span><span className="value" id="s-mdl">-</span></div>
483
- <div><span className="label">APIs</span><span className="value" id="s-api">-</span></div>
484
- <div><span className="label">Tests</span><span className="value" id="s-files">-</span></div>
485
- <div id="s-results-wrap" style={{ display: 'none' }}><span className="label">Results</span><span className="value" id="s-results">-</span></div>
486
- </div>
487
- <button id="theme-toggle" className="pixel-theme-btn" type="button">◐</button>
488
- <div id="conn-dot" className="pixel-conn" />
489
- </header>
490
-
491
- <aside className="pixel-shell pixel-sidebar">
492
- <h3>Modules</h3>
493
- <div id="mod-list" className="pixel-list" />
494
- <h3 style={{ marginTop: 16 }}>Agents</h3>
495
- <div id="agent-sidebar" className="pixel-list" />
496
- </aside>
497
-
498
- <main className="pixel-main">
499
- <div id="graph-view" className="pixel-view">
500
- <canvas id="graph-canvas" className="pixel-graph-canvas" />
501
- </div>
502
- <div id="pixel-view" className="pixel-view hidden">
503
- <div className="pixel-stage">
504
- <img className="asset desk-asset" src={publicAsset('star/desk-v3.webp')} alt="desk" />
505
- <img className="asset server-asset" src={publicAsset('botreview/server.gif')} alt="server" />
506
- <img className="asset coffee-asset" src={publicAsset('botreview/coffee-machine.gif')} alt="coffee" />
507
- <img className="asset walls-asset" src={publicAsset('botreview/walls.png')} alt="walls" />
508
- <div className="pixel-kpis">
509
- <div className="pixel-kpi"><div className="t">Working</div><div className="v" id="kpi-working">0</div></div>
510
- <div className="pixel-kpi errors"><div className="t">Errors</div><div className="v" id="kpi-errors">0</div></div>
511
- <div className="pixel-kpi done"><div className="t">Done</div><div className="v" id="kpi-done">0</div></div>
512
- </div>
513
- <div id="pixel-agent-layer" className="pixel-agent-layer" />
514
- </div>
515
- </div>
516
- </main>
517
-
518
- <aside className="pixel-panel">
519
- <div className="pixel-panel-tabs">
520
- <button className="pixel-tab active" data-tab="log" type="button">Log</button>
521
- <button className="pixel-tab" data-tab="files" type="button">Tests</button>
522
- <button className="pixel-tab" data-tab="results" type="button">Results</button>
523
- <button className="pixel-tab" data-tab="reports" type="button">Reports</button>
524
- </div>
525
- <div className="pixel-panel-body">
526
- <div id="log-list" />
527
- <div id="file-list" style={{ display: 'none' }} />
528
- <div id="results-panel" style={{ display: 'none' }} />
529
- <div id="reports-panel" style={{ display: 'none' }} />
530
- </div>
531
- </aside>
532
-
533
- <section className="pixel-office">
534
- <h3 style={{ margin: '0 0 10px', fontSize: 11, letterSpacing: '0.08em', textTransform: 'uppercase', color: 'var(--pixel-dim)' }}>Desk View</h3>
535
- <div id="croc-office" className="pixel-office-grid" />
536
- </section>
537
- </div>
538
-
539
- <div id="tooltip" className="pixel-tooltip" />
540
-
541
- <div id="file-preview" className="pixel-file-preview">
542
- <div className="pixel-file-dialog">
543
- <div className="pixel-file-head">
544
- <strong id="fp-title">file.ts</strong>
545
- <button id="fp-close" className="pixel-small-btn" type="button">Close</button>
546
- </div>
547
- <pre id="fp-code" className="pixel-file-code" />
548
- </div>
549
- </div>
550
-
551
- <div id="shortcut-legend" className="pixel-shortcuts">
552
- <kbd>1</kbd><span>Dashboard</span>
553
- <kbd>2</kbd><span>Pixel Office</span>
554
- <kbd>S</kbd><span>Scan</span>
555
- <kbd>P</kbd><span>Pipeline</span>
556
- <kbd>T</kbd><span>Run tests</span>
557
- <kbd>R</kbd><span>Reports</span>
558
- <kbd>X</kbd><span>Reset</span>
559
- <kbd>D</kbd><span>Theme</span>
560
- <kbd>?</kbd><span>Show shortcuts</span>
561
- </div>
562
- </>
563
- );
564
- }
@@ -1 +0,0 @@
1
- export { default } from './page';