@matter-server/dashboard 0.5.15 → 0.6.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.
Files changed (111) hide show
  1. package/dist/esm/components/dialog-box/dialog-box.d.ts +1 -0
  2. package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -1
  3. package/dist/esm/components/dialog-box/dialog-box.js +15 -1
  4. package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
  5. package/dist/esm/components/dialogs/binding/node-binding-dialog.js +15 -19
  6. package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
  7. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
  8. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +2 -1
  9. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
  10. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
  11. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +13 -5
  12. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
  13. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
  14. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +13 -9
  15. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
  16. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
  17. package/dist/esm/components/dialogs/settings/log-level-dialog.js +2 -1
  18. package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
  19. package/dist/esm/components/ha-svg-icon.d.ts.map +1 -1
  20. package/dist/esm/components/ha-svg-icon.js +0 -1
  21. package/dist/esm/components/ha-svg-icon.js.map +1 -1
  22. package/dist/esm/entrypoint/main.js +1 -1
  23. package/dist/esm/entrypoint/main.js.map +1 -1
  24. package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts.map +1 -1
  25. package/dist/esm/pages/cluster-commands/base-cluster-commands.js +72 -68
  26. package/dist/esm/pages/cluster-commands/base-cluster-commands.js.map +1 -1
  27. package/dist/esm/pages/components/header.d.ts +1 -1
  28. package/dist/esm/pages/components/header.d.ts.map +1 -1
  29. package/dist/esm/pages/components/header.js +59 -55
  30. package/dist/esm/pages/components/header.js.map +1 -1
  31. package/dist/esm/pages/components/node-details.js +1 -1
  32. package/dist/esm/pages/components/server-details.d.ts.map +1 -1
  33. package/dist/esm/pages/components/server-details.js +2 -0
  34. package/dist/esm/pages/components/server-details.js.map +1 -1
  35. package/dist/esm/pages/matter-cluster-view.d.ts +2 -1
  36. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  37. package/dist/esm/pages/matter-cluster-view.js +49 -39
  38. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  39. package/dist/esm/pages/matter-endpoint-view.d.ts +2 -1
  40. package/dist/esm/pages/matter-endpoint-view.d.ts.map +1 -1
  41. package/dist/esm/pages/matter-endpoint-view.js +44 -35
  42. package/dist/esm/pages/matter-endpoint-view.js.map +1 -1
  43. package/dist/esm/pages/matter-network-view.d.ts +1 -1
  44. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  45. package/dist/esm/pages/matter-network-view.js +216 -207
  46. package/dist/esm/pages/matter-network-view.js.map +1 -1
  47. package/dist/esm/pages/matter-node-view.d.ts +2 -1
  48. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  49. package/dist/esm/pages/matter-node-view.js +104 -94
  50. package/dist/esm/pages/matter-node-view.js.map +1 -1
  51. package/dist/esm/pages/network/base-network-graph.d.ts.map +1 -1
  52. package/dist/esm/pages/network/base-network-graph.js +12 -5
  53. package/dist/esm/pages/network/base-network-graph.js.map +1 -1
  54. package/dist/esm/pages/network/device-panel.d.ts +1 -0
  55. package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
  56. package/dist/esm/pages/network/device-panel.js +19 -5
  57. package/dist/esm/pages/network/device-panel.js.map +1 -1
  58. package/dist/esm/pages/network/network-details.d.ts +1 -1
  59. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  60. package/dist/esm/pages/network/network-details.js +275 -272
  61. package/dist/esm/pages/network/network-details.js.map +1 -1
  62. package/dist/esm/pages/network/network-utils.d.ts +5 -0
  63. package/dist/esm/pages/network/network-utils.d.ts.map +1 -1
  64. package/dist/esm/pages/network/network-utils.js +47 -17
  65. package/dist/esm/pages/network/network-utils.js.map +1 -1
  66. package/dist/esm/pages/network/update-connections-dialog.d.ts +1 -1
  67. package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
  68. package/dist/esm/pages/network/update-connections-dialog.js +51 -47
  69. package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
  70. package/dist/esm/util/device-icons.d.ts.map +1 -1
  71. package/dist/esm/util/device-icons.js +6 -6
  72. package/dist/esm/util/device-icons.js.map +1 -1
  73. package/dist/esm/util/shared-styles.d.ts +10 -0
  74. package/dist/esm/util/shared-styles.d.ts.map +1 -0
  75. package/dist/esm/util/shared-styles.js +56 -0
  76. package/dist/esm/util/shared-styles.js.map +6 -0
  77. package/dist/web/index.html +53 -1
  78. package/dist/web/js/{commission-node-dialog-ByflSEDK.js → commission-node-dialog-DfwKU9qk.js} +4 -4
  79. package/dist/web/js/{commission-node-existing-CD6-Epwb.js → commission-node-existing-C7ITvNfj.js} +6 -3
  80. package/dist/web/js/{commission-node-thread-CekKshVL.js → commission-node-thread-D-icSzto.js} +23 -7
  81. package/dist/web/js/{commission-node-wifi-D_VKTWwF.js → commission-node-wifi-DwUkXlWz.js} +29 -11
  82. package/dist/web/js/{dialog-box-DdVdxz2_.js → dialog-box-BmpaTrvT.js} +16 -2
  83. package/dist/web/js/{fire_event-uMluKQub.js → fire_event-2ZxL-AHZ.js} +1 -1
  84. package/dist/web/js/{log-level-dialog-BO1OSL0z.js → log-level-dialog-D4hubdib.js} +5 -2
  85. package/dist/web/js/main.js +2 -2
  86. package/dist/web/js/{matter-dashboard-app-b1R3Pout.js → matter-dashboard-app-BtHTmAPq.js} +874 -788
  87. package/dist/web/js/{node-binding-dialog-rikORH9_.js → node-binding-dialog-MMx9rkCF.js} +40 -20
  88. package/package.json +4 -4
  89. package/src/components/dialog-box/dialog-box.ts +16 -1
  90. package/src/components/dialogs/binding/node-binding-dialog.ts +15 -15
  91. package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +2 -1
  92. package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +13 -5
  93. package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +13 -9
  94. package/src/components/dialogs/settings/log-level-dialog.ts +2 -1
  95. package/src/components/ha-svg-icon.ts +0 -1
  96. package/src/entrypoint/main.ts +1 -1
  97. package/src/pages/cluster-commands/base-cluster-commands.ts +84 -80
  98. package/src/pages/components/header.ts +59 -55
  99. package/src/pages/components/node-details.ts +1 -1
  100. package/src/pages/components/server-details.ts +2 -0
  101. package/src/pages/matter-cluster-view.ts +49 -39
  102. package/src/pages/matter-endpoint-view.ts +49 -40
  103. package/src/pages/matter-network-view.ts +200 -191
  104. package/src/pages/matter-node-view.ts +94 -84
  105. package/src/pages/network/base-network-graph.ts +12 -5
  106. package/src/pages/network/device-panel.ts +20 -5
  107. package/src/pages/network/network-details.ts +236 -231
  108. package/src/pages/network/network-utils.ts +51 -17
  109. package/src/pages/network/update-connections-dialog.ts +51 -47
  110. package/src/util/device-icons.ts +12 -6
  111. package/src/util/shared-styles.ts +58 -0
@@ -9,6 +9,7 @@ import { mdiFitToScreen, mdiMagnifyMinus, mdiMagnifyPlus, mdiPause, mdiPlay } fr
9
9
  import { css, html, LitElement } from "lit";
10
10
  import { customElement, property, query, state } from "lit/decorators.js";
11
11
  import "../components/ha-svg-icon";
12
+ import { reducedMotionStyles } from "../util/shared-styles.js";
12
13
  import "./components/footer";
13
14
  import "./components/header";
14
15
  import type { ActiveView } from "./components/header.js";
@@ -324,234 +325,242 @@ class MatterNetworkView extends LitElement {
324
325
  `;
325
326
  }
326
327
 
327
- static override styles = css`
328
- :host {
329
- display: flex;
330
- flex-direction: column;
331
- height: 100vh;
332
- height: 100dvh; /* dynamic viewport height - fallback above for older browsers */
333
- overflow: hidden;
334
- background-color: var(--md-sys-color-background, #fafafa);
335
- }
336
-
337
- .content {
338
- display: flex;
339
- flex: 1 1 0;
340
- padding: 8px 16px;
341
- gap: 8px;
342
- max-width: 1600px;
343
- margin: 0 auto;
344
- width: 100%;
345
- box-sizing: border-box;
346
- min-height: 0;
347
- overflow: hidden;
348
- }
349
-
350
- .main-area {
351
- flex: 1 1 0;
352
- display: flex;
353
- flex-direction: column;
354
- min-width: 0;
355
- min-height: 0;
356
- overflow: hidden;
357
- }
358
-
359
- .graph-section {
360
- flex: 1 1 0;
361
- min-height: 0;
362
- display: flex;
363
- flex-direction: column;
364
- overflow: hidden;
365
- }
366
-
367
- .graph-header {
368
- display: flex;
369
- align-items: center;
370
- justify-content: space-between;
371
- margin-bottom: 4px;
372
- flex-shrink: 0;
373
- }
328
+ static override styles = [
329
+ reducedMotionStyles,
330
+ css`
331
+ :host {
332
+ display: flex;
333
+ flex-direction: column;
334
+ height: 100vh;
335
+ height: 100dvh; /* dynamic viewport height - fallback above for older browsers */
336
+ overflow: hidden;
337
+ background-color: var(--md-sys-color-background, #fafafa);
338
+ }
374
339
 
375
- .graph-header h2 {
376
- margin: 0;
377
- font-size: 1.1rem;
378
- font-weight: 500;
379
- color: var(--md-sys-color-on-background, #333);
380
- }
340
+ .content {
341
+ display: flex;
342
+ flex: 1 1 0;
343
+ padding: 8px 16px;
344
+ gap: 8px;
345
+ max-width: 1600px;
346
+ margin: 0 auto;
347
+ width: 100%;
348
+ box-sizing: border-box;
349
+ min-height: 0;
350
+ overflow: hidden;
351
+ }
381
352
 
382
- .graph-controls {
383
- display: flex;
384
- gap: 4px;
385
- }
353
+ .main-area {
354
+ flex: 1 1 0;
355
+ display: flex;
356
+ flex-direction: column;
357
+ min-width: 0;
358
+ min-height: 0;
359
+ overflow: hidden;
360
+ }
386
361
 
387
- .graph-actions {
388
- display: flex;
389
- align-items: center;
390
- gap: 8px;
391
- min-width: 0;
392
- }
362
+ .graph-section {
363
+ flex: 1 1 0;
364
+ min-height: 0;
365
+ display: flex;
366
+ flex-direction: column;
367
+ overflow: hidden;
368
+ }
393
369
 
394
- .thread-search {
395
- display: flex;
396
- align-items: center;
397
- gap: 4px;
398
- }
370
+ .graph-header {
371
+ display: flex;
372
+ align-items: center;
373
+ justify-content: space-between;
374
+ margin-bottom: 4px;
375
+ flex-shrink: 0;
376
+ }
399
377
 
400
- .thread-search input {
401
- width: 260px;
402
- max-width: 45vw;
403
- padding: 6px 8px;
404
- border: 1px solid var(--md-sys-color-outline-variant, #ccc);
405
- border-radius: 4px;
406
- background-color: var(--md-sys-color-surface, #fff);
407
- color: var(--md-sys-color-on-surface, #1c1b1f);
408
- font: inherit;
409
- }
378
+ .graph-header h2 {
379
+ margin: 0;
380
+ font-size: 1.1rem;
381
+ font-weight: 500;
382
+ color: var(--md-sys-color-on-background, #333);
383
+ }
410
384
 
411
- .thread-search input:focus {
412
- outline: 2px solid var(--md-sys-color-primary, #6750a4);
413
- outline-offset: 1px;
414
- }
385
+ .graph-controls {
386
+ display: flex;
387
+ gap: 4px;
388
+ }
415
389
 
416
- .search-button {
417
- padding: 6px 10px;
418
- border: 1px solid var(--md-sys-color-outline-variant, #ccc);
419
- border-radius: 4px;
420
- background-color: var(--md-sys-color-surface, #fff);
421
- color: var(--md-sys-color-on-surface, #1c1b1f);
422
- cursor: pointer;
423
- font: inherit;
424
- }
390
+ .graph-actions {
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 8px;
394
+ min-width: 0;
395
+ }
425
396
 
426
- .search-button:hover {
427
- background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
428
- }
397
+ .thread-search {
398
+ display: flex;
399
+ align-items: center;
400
+ gap: 4px;
401
+ }
429
402
 
430
- .thread-search-status {
431
- margin: 0 0 6px;
432
- font-size: 0.85rem;
433
- color: var(--md-sys-color-on-surface-variant, #666);
434
- }
403
+ .thread-search input {
404
+ width: 260px;
405
+ max-width: 45vw;
406
+ padding: 6px 8px;
407
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
408
+ border-radius: 4px;
409
+ background-color: var(--md-sys-color-surface, #fff);
410
+ color: var(--md-sys-color-on-surface, #1c1b1f);
411
+ font: inherit;
412
+ }
435
413
 
436
- .thread-search-status.found {
437
- color: #2e7d32;
438
- }
414
+ .thread-search input:focus {
415
+ outline: 2px solid var(--md-sys-color-primary, #6750a4);
416
+ outline-offset: 1px;
417
+ }
439
418
 
440
- .thread-search-status.not-found {
441
- color: #c62828;
442
- }
419
+ .search-button {
420
+ padding: 6px 10px;
421
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
422
+ border-radius: 4px;
423
+ background-color: var(--md-sys-color-surface, #fff);
424
+ color: var(--md-sys-color-on-surface, #1c1b1f);
425
+ cursor: pointer;
426
+ font: inherit;
427
+ }
443
428
 
444
- .control-button {
445
- background: none;
446
- border: 1px solid var(--md-sys-color-outline-variant, #ccc);
447
- border-radius: 4px;
448
- padding: 6px;
449
- cursor: pointer;
450
- display: flex;
451
- align-items: center;
452
- justify-content: center;
453
- transition:
454
- background-color 0.2s,
455
- border-color 0.2s;
456
- }
429
+ .search-button:hover {
430
+ background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
431
+ }
457
432
 
458
- .control-button:hover {
459
- background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
460
- }
433
+ .search-button:focus-visible {
434
+ outline: 2px solid var(--md-sys-color-primary);
435
+ outline-offset: 1px;
436
+ }
461
437
 
462
- .control-button.active {
463
- background-color: var(--md-sys-color-primary-container, #e8def8);
464
- border-color: var(--md-sys-color-primary, #6750a4);
465
- }
438
+ .thread-search-status {
439
+ margin: 0 0 6px;
440
+ font-size: 0.85rem;
441
+ color: var(--md-sys-color-on-surface-variant, #666);
442
+ }
466
443
 
467
- .control-button ha-svg-icon {
468
- --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
469
- }
444
+ .thread-search-status.found {
445
+ color: var(--signal-color-strong);
446
+ }
470
447
 
471
- .control-button.active ha-svg-icon {
472
- --icon-primary-color: var(--md-sys-color-on-primary-container, #21005d);
473
- }
448
+ .thread-search-status.not-found {
449
+ color: var(--md-sys-color-error);
450
+ }
474
451
 
475
- .graph-section thread-graph,
476
- .graph-section wifi-graph {
477
- flex: 1 1 0;
478
- min-height: 0;
479
- }
452
+ .control-button {
453
+ background: none;
454
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
455
+ border-radius: 4px;
456
+ padding: 6px;
457
+ cursor: pointer;
458
+ display: flex;
459
+ align-items: center;
460
+ justify-content: center;
461
+ transition:
462
+ background-color 0.2s,
463
+ border-color 0.2s;
464
+ }
480
465
 
481
- .wifi-section {
482
- display: flex;
483
- flex-direction: column;
484
- gap: 16px;
485
- overflow-y: auto;
486
- }
466
+ .control-button:hover {
467
+ background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
468
+ }
487
469
 
488
- .wifi-section h2 {
489
- margin: 0;
490
- font-size: 1.25rem;
491
- font-weight: 500;
492
- color: var(--md-sys-color-on-background, #333);
493
- }
470
+ .control-button.active {
471
+ background-color: var(--md-sys-color-primary-container, #e8def8);
472
+ border-color: var(--md-sys-color-primary, #6750a4);
473
+ }
494
474
 
495
- .wifi-section device-panel {
496
- flex-shrink: 0;
497
- }
475
+ .control-button ha-svg-icon {
476
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
477
+ }
498
478
 
499
- .details-sidebar {
500
- width: 320px;
501
- flex-shrink: 0;
502
- display: none;
503
- min-height: 0;
504
- overflow-y: auto;
505
- }
479
+ .control-button.active ha-svg-icon {
480
+ --icon-primary-color: var(--md-sys-color-on-primary-container, #21005d);
481
+ }
506
482
 
507
- .details-sidebar.visible {
508
- display: block;
509
- }
483
+ .graph-section thread-graph,
484
+ .graph-section wifi-graph {
485
+ flex: 1 1 0;
486
+ min-height: 0;
487
+ }
510
488
 
511
- @media (max-width: 1024px) {
512
- .content {
489
+ .wifi-section {
490
+ display: flex;
513
491
  flex-direction: column;
492
+ gap: 16px;
493
+ overflow-y: auto;
514
494
  }
515
495
 
516
- .details-sidebar {
517
- width: 100%;
518
- max-height: 300px;
496
+ .wifi-section h2 {
497
+ margin: 0;
498
+ font-size: 1.25rem;
499
+ font-weight: 500;
500
+ color: var(--md-sys-color-on-background, #333);
519
501
  }
520
502
 
521
- .details-sidebar.visible {
522
- display: block;
503
+ .wifi-section device-panel {
504
+ flex-shrink: 0;
523
505
  }
524
- }
525
506
 
526
- @media (max-width: 600px) {
527
- .content {
528
- padding: 8px;
507
+ .details-sidebar {
508
+ width: 320px;
509
+ flex-shrink: 0;
510
+ display: none;
511
+ min-height: 0;
512
+ overflow-y: auto;
529
513
  }
530
514
 
531
- .graph-header {
532
- align-items: flex-start;
533
- gap: 6px;
515
+ .details-sidebar.visible {
516
+ display: block;
534
517
  }
535
518
 
536
- .graph-actions {
537
- flex-direction: column;
538
- align-items: stretch;
539
- width: 100%;
540
- }
519
+ @media (max-width: 1024px) {
520
+ .content {
521
+ flex-direction: column;
522
+ }
541
523
 
542
- .thread-search {
543
- width: 100%;
544
- }
524
+ .details-sidebar {
525
+ width: 100%;
526
+ max-height: 300px;
527
+ }
545
528
 
546
- .thread-search input {
547
- flex: 1 1 auto;
548
- width: auto;
549
- max-width: none;
529
+ .details-sidebar.visible {
530
+ display: block;
531
+ }
550
532
  }
551
533
 
552
- .graph-controls {
553
- justify-content: flex-end;
534
+ @media (max-width: 600px) {
535
+ .content {
536
+ padding: 8px;
537
+ }
538
+
539
+ .graph-header {
540
+ align-items: flex-start;
541
+ gap: 6px;
542
+ }
543
+
544
+ .graph-actions {
545
+ flex-direction: column;
546
+ align-items: stretch;
547
+ width: 100%;
548
+ }
549
+
550
+ .thread-search {
551
+ width: 100%;
552
+ }
553
+
554
+ .thread-search input {
555
+ flex: 1 1 auto;
556
+ width: auto;
557
+ max-width: none;
558
+ }
559
+
560
+ .graph-controls {
561
+ justify-content: flex-end;
562
+ }
554
563
  }
555
- }
556
- `;
564
+ `,
565
+ ];
557
566
  }
@@ -4,18 +4,20 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import "@material/web/button/outlined-button";
7
8
  import "@material/web/divider/divider";
8
9
  import "@material/web/iconbutton/icon-button";
9
10
  import "@material/web/list/list";
10
11
  import "@material/web/list/list-item";
11
12
  import { isTestNodeId, MatterClient, MatterNode } from "@matter-server/ws-client";
12
- import { mdiChevronRight, mdiGraphOutline } from "@mdi/js";
13
+ import { mdiAlertCircleOutline, mdiChevronRight, mdiGraphOutline } from "@mdi/js";
13
14
  import { css, html, LitElement } from "lit";
14
15
  import { customElement, property } from "lit/decorators.js";
15
16
  import { guard } from "lit/directives/guard.js";
16
17
  import "../components/ha-svg-icon";
17
18
  import { getDeviceIcon, getEndpointIcon } from "../util/device-icons.js";
18
19
  import { formatNodeAddress, getEffectiveFabricIndex } from "../util/format_hex.js";
20
+ import { notFoundStyles, reducedMotionStyles } from "../util/shared-styles.js";
19
21
  import "./components/header";
20
22
  import "./components/node-details";
21
23
  import { getEndpointDeviceTypes } from "./matter-endpoint-view.js";
@@ -44,8 +46,12 @@ class MatterNodeView extends LitElement {
44
46
  override render() {
45
47
  if (!this.node) {
46
48
  return html`
47
- <p>Node not found!</p>
48
- <button @click=${this._goBack}>Back</button>
49
+ <dashboard-header title="Node not found" .client=${this.client} backButton="#"></dashboard-header>
50
+ <div class="not-found">
51
+ <ha-svg-icon .path=${mdiAlertCircleOutline}></ha-svg-icon>
52
+ <p>Node not found</p>
53
+ <md-outlined-button @click=${this._goBack}>Back</md-outlined-button>
54
+ </div>
49
55
  `;
50
56
  }
51
57
 
@@ -129,103 +135,107 @@ class MatterNodeView extends LitElement {
129
135
  history.back();
130
136
  }
131
137
 
132
- static override styles = css`
133
- :host {
134
- display: flex;
135
- background-color: var(--md-sys-color-background);
136
- box-sizing: border-box;
137
- flex-direction: column;
138
- min-height: 100vh;
139
- }
140
-
141
- .container {
142
- padding: 16px;
143
- max-width: 95%;
144
- margin: 0 auto;
145
- width: 100%;
146
- }
138
+ static override styles = [
139
+ notFoundStyles,
140
+ reducedMotionStyles,
141
+ css`
142
+ :host {
143
+ display: flex;
144
+ background-color: var(--md-sys-color-background);
145
+ box-sizing: border-box;
146
+ flex-direction: column;
147
+ min-height: 100vh;
148
+ }
147
149
 
148
- @media (max-width: 600px) {
149
150
  .container {
150
- padding: 16px 0;
151
+ padding: 16px;
152
+ max-width: 95%;
153
+ margin: 0 auto;
154
+ width: 100%;
151
155
  }
152
- }
153
156
 
154
- .status {
155
- color: var(--danger-color);
156
- font-weight: bold;
157
- font-size: 0.8em;
158
- }
157
+ @media (max-width: 600px) {
158
+ .container {
159
+ padding: 16px 0;
160
+ }
161
+ }
159
162
 
160
- .node-title-bar {
161
- display: flex;
162
- align-items: center;
163
- gap: 16px;
164
- margin-bottom: 16px;
165
- }
163
+ .status {
164
+ color: var(--danger-color);
165
+ font-weight: bold;
166
+ font-size: 0.8em;
167
+ }
166
168
 
167
- .node-icon {
168
- --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
169
- --mdc-icon-size: 28px;
170
- }
169
+ .node-title-bar {
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 16px;
173
+ margin-bottom: 16px;
174
+ }
171
175
 
172
- .endpoint-icon {
173
- --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
174
- }
176
+ .node-icon {
177
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
178
+ --mdc-icon-size: 28px;
179
+ }
175
180
 
176
- .node-title-bar h2 {
177
- margin: 0;
178
- font-size: 1.25rem;
179
- font-weight: 500;
180
- color: var(--md-sys-color-on-background, #333);
181
- }
181
+ .endpoint-icon {
182
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
183
+ }
182
184
 
183
- .node-id-hex {
184
- font-size: 0.75em;
185
- font-weight: 400;
186
- color: var(--md-sys-color-on-surface-variant, #666);
187
- font-family: monospace;
188
- }
185
+ .node-title-bar h2 {
186
+ margin: 0;
187
+ font-size: 1.25rem;
188
+ font-weight: 500;
189
+ color: var(--md-sys-color-on-background, #333);
190
+ }
189
191
 
190
- .show-in-graph-button {
191
- display: inline-flex;
192
- align-items: center;
193
- gap: 6px;
194
- padding: 6px 12px;
195
- background-color: var(--md-sys-color-primary);
196
- color: var(--md-sys-color-on-primary);
197
- text-decoration: none;
198
- border-radius: 4px;
199
- font-size: 0.8rem;
200
- font-weight: 500;
201
- transition: opacity 0.2s;
202
- white-space: nowrap;
203
- }
192
+ .node-id-hex {
193
+ font-size: 0.75em;
194
+ font-weight: 400;
195
+ color: var(--md-sys-color-on-surface-variant, #666);
196
+ font-family: var(--monospace-font, monospace);
197
+ }
204
198
 
205
- .show-in-graph-button:hover {
206
- opacity: 0.9;
207
- }
199
+ .show-in-graph-button {
200
+ display: inline-flex;
201
+ align-items: center;
202
+ gap: 6px;
203
+ padding: 6px 12px;
204
+ background-color: var(--md-sys-color-primary);
205
+ color: var(--md-sys-color-on-primary);
206
+ text-decoration: none;
207
+ border-radius: 4px;
208
+ font-size: 0.8rem;
209
+ font-weight: 500;
210
+ transition: opacity 0.2s;
211
+ white-space: nowrap;
212
+ }
208
213
 
209
- .show-in-graph-button ha-svg-icon {
210
- --icon-primary-color: var(--md-sys-color-on-primary);
211
- width: 16px;
212
- height: 16px;
213
- }
214
+ .show-in-graph-button:hover {
215
+ opacity: 0.9;
216
+ }
214
217
 
215
- @media (max-width: 768px) {
216
- .show-in-graph-button {
217
- display: none;
218
+ .show-in-graph-button ha-svg-icon {
219
+ --icon-primary-color: var(--md-sys-color-on-primary);
220
+ width: 16px;
221
+ height: 16px;
218
222
  }
219
- }
220
223
 
221
- @media (max-width: 480px) {
222
- .show-in-graph-button .button-text {
223
- display: none;
224
+ @media (max-width: 768px) {
225
+ .show-in-graph-button {
226
+ display: none;
227
+ }
224
228
  }
225
229
 
226
- .show-in-graph-button {
227
- padding: 6px;
230
+ @media (max-width: 480px) {
231
+ .show-in-graph-button .button-text {
232
+ display: none;
233
+ }
234
+
235
+ .show-in-graph-button {
236
+ padding: 6px;
237
+ }
228
238
  }
229
- }
230
- `;
239
+ `,
240
+ ];
231
241
  }