@almadar/std 14.5.1 → 14.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 (51) hide show
  1. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +1077 -1077
  2. package/behaviors/registry/agent/organisms/std-agent-builder.orb +3053 -3053
  3. package/behaviors/registry/agent/organisms/std-agent-pipeline.orb +2159 -2159
  4. package/behaviors/registry/agent/organisms/std-agent-reviewer.orb +931 -931
  5. package/behaviors/registry/agent/organisms/std-agent-tutor.orb +793 -793
  6. package/behaviors/registry/app/organisms/std-api-gateway.orb +819 -819
  7. package/behaviors/registry/app/organisms/std-booking-system.orb +1168 -1168
  8. package/behaviors/registry/app/organisms/std-cicd-pipeline.orb +825 -825
  9. package/behaviors/registry/app/organisms/std-cms.orb +556 -556
  10. package/behaviors/registry/app/organisms/std-coding-academy.orb +353 -353
  11. package/behaviors/registry/app/organisms/std-crm.orb +806 -806
  12. package/behaviors/registry/app/organisms/std-devops-dashboard.orb +1209 -1209
  13. package/behaviors/registry/app/organisms/std-ecommerce.orb +742 -742
  14. package/behaviors/registry/app/organisms/std-finance-tracker.orb +626 -626
  15. package/behaviors/registry/app/organisms/std-healthcare.orb +1390 -1390
  16. package/behaviors/registry/app/organisms/std-helpdesk.orb +720 -720
  17. package/behaviors/registry/app/organisms/std-hr-portal.orb +1189 -1189
  18. package/behaviors/registry/app/organisms/std-iot-dashboard.orb +786 -786
  19. package/behaviors/registry/app/organisms/std-lms.orb +860 -860
  20. package/behaviors/registry/app/organisms/std-project-manager.orb +668 -668
  21. package/behaviors/registry/app/organisms/std-realtime-chat.orb +725 -725
  22. package/behaviors/registry/app/organisms/std-social-feed.orb +227 -227
  23. package/behaviors/registry/app/organisms/std-trading-dashboard.orb +646 -646
  24. package/behaviors/registry/service/organisms/std-service-marketplace.orb +973 -973
  25. package/behaviors/registry/service/organisms/std-service-research-assistant.orb +898 -898
  26. package/dist/behaviors/registry/agent/organisms/std-agent-assistant.orb +1077 -1077
  27. package/dist/behaviors/registry/agent/organisms/std-agent-builder.orb +3053 -3053
  28. package/dist/behaviors/registry/agent/organisms/std-agent-pipeline.orb +2159 -2159
  29. package/dist/behaviors/registry/agent/organisms/std-agent-reviewer.orb +931 -931
  30. package/dist/behaviors/registry/agent/organisms/std-agent-tutor.orb +793 -793
  31. package/dist/behaviors/registry/app/organisms/std-api-gateway.orb +819 -819
  32. package/dist/behaviors/registry/app/organisms/std-booking-system.orb +1168 -1168
  33. package/dist/behaviors/registry/app/organisms/std-cicd-pipeline.orb +825 -825
  34. package/dist/behaviors/registry/app/organisms/std-cms.orb +556 -556
  35. package/dist/behaviors/registry/app/organisms/std-coding-academy.orb +353 -353
  36. package/dist/behaviors/registry/app/organisms/std-crm.orb +806 -806
  37. package/dist/behaviors/registry/app/organisms/std-devops-dashboard.orb +1209 -1209
  38. package/dist/behaviors/registry/app/organisms/std-ecommerce.orb +742 -742
  39. package/dist/behaviors/registry/app/organisms/std-finance-tracker.orb +626 -626
  40. package/dist/behaviors/registry/app/organisms/std-healthcare.orb +1390 -1390
  41. package/dist/behaviors/registry/app/organisms/std-helpdesk.orb +720 -720
  42. package/dist/behaviors/registry/app/organisms/std-hr-portal.orb +1189 -1189
  43. package/dist/behaviors/registry/app/organisms/std-iot-dashboard.orb +786 -786
  44. package/dist/behaviors/registry/app/organisms/std-lms.orb +860 -860
  45. package/dist/behaviors/registry/app/organisms/std-project-manager.orb +668 -668
  46. package/dist/behaviors/registry/app/organisms/std-realtime-chat.orb +725 -725
  47. package/dist/behaviors/registry/app/organisms/std-social-feed.orb +227 -227
  48. package/dist/behaviors/registry/app/organisms/std-trading-dashboard.orb +646 -646
  49. package/dist/behaviors/registry/service/organisms/std-service-marketplace.orb +973 -973
  50. package/dist/behaviors/registry/service/organisms/std-service-research-assistant.orb +898 -898
  51. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "std-iot-dashboard",
3
3
  "version": "1.0.0",
4
- "description": "std-iot-dashboard as a Function",
4
+ "description": "IoT dashboard: devices, sensor readings, and alerts. Pick for connected-device monitoring.",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "SensorReadingOrbital",
@@ -45,32 +45,32 @@
45
45
  "ref": "AppShell.traits.AppLayout",
46
46
  "name": "SensorAppLayout",
47
47
  "config": {
48
- "searchEvent": "SENSOR_SEARCH",
49
- "contentTrait": "@trait.SensorReadingDisplay",
48
+ "notifications": [],
50
49
  "navItems": [
51
50
  {
52
51
  "icon": "layout-list",
53
- "label": "Sensors",
54
- "href": "/sensors"
52
+ "href": "/sensors",
53
+ "label": "Sensors"
55
54
  },
56
55
  {
57
- "label": "Devices",
58
56
  "href": "/devices",
59
- "icon": "cpu"
57
+ "icon": "cpu",
58
+ "label": "Devices"
60
59
  },
61
60
  {
62
- "icon": "bell",
61
+ "label": "Alerts",
63
62
  "href": "/alerts",
64
- "label": "Alerts"
63
+ "icon": "bell"
65
64
  }
66
65
  ],
67
- "notifications": [],
68
66
  "appName": "IoT Dashboard",
67
+ "searchEvent": "SENSOR_SEARCH",
68
+ "contentTrait": "@trait.SensorReadingDisplay",
69
69
  "notificationClickEvent": "SENSOR_NOTIFICATIONS_OPEN"
70
70
  },
71
71
  "events": {
72
- "SEARCH": "SENSOR_SEARCH",
73
- "NOTIFY_CLICK": "SENSOR_NOTIFICATIONS_OPEN"
72
+ "NOTIFY_CLICK": "SENSOR_NOTIFICATIONS_OPEN",
73
+ "SEARCH": "SENSOR_SEARCH"
74
74
  }
75
75
  },
76
76
  {
@@ -373,8 +373,8 @@
373
373
  "SensorReading",
374
374
  {
375
375
  "emit": {
376
- "success": "SensorReadingLoaded",
377
- "failure": "SensorReadingLoadFailed"
376
+ "failure": "SensorReadingLoadFailed",
377
+ "success": "SensorReadingLoaded"
378
378
  }
379
379
  }
380
380
  ],
@@ -382,12 +382,11 @@
382
382
  "render-ui",
383
383
  "main",
384
384
  {
385
- "gap": "lg",
386
385
  "type": "stack",
387
386
  "direction": "vertical",
387
+ "gap": "lg",
388
388
  "children": [
389
389
  {
390
- "type": "breadcrumb",
391
390
  "items": [
392
391
  {
393
392
  "label": "Home",
@@ -396,38 +395,39 @@
396
395
  {
397
396
  "label": "Sensor Readings"
398
397
  }
399
- ]
398
+ ],
399
+ "type": "breadcrumb"
400
400
  },
401
401
  {
402
- "justify": "between",
403
402
  "gap": "md",
404
403
  "direction": "horizontal",
405
404
  "children": [
406
405
  {
407
- "type": "stack",
408
- "gap": "md",
409
406
  "children": [
410
407
  {
411
- "name": "thermometer",
412
- "type": "icon"
408
+ "type": "icon",
409
+ "name": "thermometer"
413
410
  },
414
411
  {
415
- "content": "Sensor Readings",
416
412
  "variant": "h2",
413
+ "content": "Sensor Readings",
417
414
  "type": "typography"
418
415
  }
419
416
  ],
417
+ "gap": "md",
418
+ "type": "stack",
420
419
  "direction": "horizontal"
421
420
  },
422
421
  {
423
422
  "type": "button",
424
- "icon": "refresh-cw",
425
- "action": "REFRESH",
426
423
  "label": "Refresh",
427
- "variant": "secondary"
424
+ "variant": "secondary",
425
+ "icon": "refresh-cw",
426
+ "action": "REFRESH"
428
427
  }
429
428
  ],
430
- "type": "stack"
429
+ "type": "stack",
430
+ "justify": "between"
431
431
  },
432
432
  {
433
433
  "type": "divider"
@@ -437,16 +437,16 @@
437
437
  "padding": "md",
438
438
  "children": [
439
439
  {
440
- "type": "simple-grid",
441
440
  "cols": 3.0,
441
+ "type": "simple-grid",
442
442
  "children": [
443
443
  {
444
444
  "type": "card",
445
445
  "children": [
446
446
  {
447
- "type": "stack",
448
- "gap": "sm",
449
447
  "direction": "vertical",
448
+ "gap": "sm",
449
+ "type": "stack",
450
450
  "children": [
451
451
  {
452
452
  "type": "typography",
@@ -471,18 +471,18 @@
471
471
  "type": "card",
472
472
  "children": [
473
473
  {
474
- "type": "stack",
475
474
  "direction": "vertical",
475
+ "type": "stack",
476
476
  "gap": "sm",
477
477
  "children": [
478
478
  {
479
- "content": "Unit",
480
479
  "type": "typography",
480
+ "content": "Unit",
481
481
  "variant": "caption"
482
482
  },
483
483
  {
484
- "variant": "h3",
485
484
  "type": "typography",
485
+ "variant": "h3",
486
486
  "content": "@entity.unit"
487
487
  }
488
488
  ]
@@ -490,26 +490,26 @@
490
490
  ]
491
491
  },
492
492
  {
493
+ "type": "card",
493
494
  "children": [
494
495
  {
495
- "type": "stack",
496
- "direction": "vertical",
497
496
  "children": [
498
497
  {
499
- "type": "typography",
500
498
  "content": "Timestamp",
499
+ "type": "typography",
501
500
  "variant": "caption"
502
501
  },
503
502
  {
504
- "type": "typography",
505
503
  "variant": "h3",
506
- "content": "@entity.timestamp"
504
+ "content": "@entity.timestamp",
505
+ "type": "typography"
507
506
  }
508
507
  ],
509
- "gap": "sm"
508
+ "gap": "sm",
509
+ "direction": "vertical",
510
+ "type": "stack"
510
511
  }
511
- ],
512
- "type": "card"
512
+ ]
513
513
  }
514
514
  ]
515
515
  }
@@ -519,6 +519,8 @@
519
519
  "type": "divider"
520
520
  },
521
521
  {
522
+ "gap": "md",
523
+ "cols": 2.0,
522
524
  "children": [
523
525
  {
524
526
  "children": [
@@ -531,19 +533,17 @@
531
533
  "type": "card"
532
534
  },
533
535
  {
534
- "type": "card",
535
536
  "children": [
536
537
  {
537
- "type": "typography",
538
538
  "variant": "caption",
539
- "content": "Graph View"
539
+ "content": "Graph View",
540
+ "type": "typography"
540
541
  }
541
- ]
542
+ ],
543
+ "type": "card"
542
544
  }
543
545
  ],
544
- "cols": 2.0,
545
- "type": "grid",
546
- "gap": "md"
546
+ "type": "grid"
547
547
  },
548
548
  {
549
549
  "data": [
@@ -552,20 +552,20 @@
552
552
  "value": 12.0
553
553
  },
554
554
  {
555
- "date": "Feb",
556
- "value": 19.0
555
+ "value": 19.0,
556
+ "date": "Feb"
557
557
  },
558
558
  {
559
- "value": 15.0,
560
- "date": "Mar"
559
+ "date": "Mar",
560
+ "value": 15.0
561
561
  },
562
562
  {
563
563
  "date": "Apr",
564
564
  "value": 25.0
565
565
  },
566
566
  {
567
- "value": 22.0,
568
- "date": "May"
567
+ "date": "May",
568
+ "value": 22.0
569
569
  },
570
570
  {
571
571
  "date": "Jun",
@@ -575,6 +575,7 @@
575
575
  "type": "line-chart"
576
576
  },
577
577
  {
578
+ "type": "chart-legend",
578
579
  "items": [
579
580
  {
580
581
  "color": "primary",
@@ -584,37 +585,36 @@
584
585
  "color": "muted",
585
586
  "label": "Previous"
586
587
  }
587
- ],
588
- "type": "chart-legend"
588
+ ]
589
589
  },
590
590
  {
591
- "edges": [
592
- {
593
- "source": "a",
594
- "target": "b"
595
- },
596
- {
597
- "target": "c",
598
- "source": "b"
599
- }
600
- ],
601
- "width": 400.0,
602
- "height": 200.0,
603
591
  "type": "graph-view",
592
+ "height": 200.0,
604
593
  "nodes": [
605
594
  {
606
595
  "label": "Start",
607
596
  "id": "a"
608
597
  },
609
598
  {
610
- "id": "b",
611
- "label": "Process"
599
+ "label": "Process",
600
+ "id": "b"
612
601
  },
613
602
  {
614
- "id": "c",
615
- "label": "End"
603
+ "label": "End",
604
+ "id": "c"
616
605
  }
617
- ]
606
+ ],
607
+ "edges": [
608
+ {
609
+ "source": "a",
610
+ "target": "b"
611
+ },
612
+ {
613
+ "target": "c",
614
+ "source": "b"
615
+ }
616
+ ],
617
+ "width": 400.0
618
618
  }
619
619
  ]
620
620
  }
@@ -631,8 +631,8 @@
631
631
  "SensorReading",
632
632
  {
633
633
  "emit": {
634
- "failure": "SensorReadingLoadFailed",
635
- "success": "SensorReadingLoaded"
634
+ "success": "SensorReadingLoaded",
635
+ "failure": "SensorReadingLoadFailed"
636
636
  }
637
637
  }
638
638
  ],
@@ -640,11 +640,10 @@
640
640
  "render-ui",
641
641
  "main",
642
642
  {
643
- "direction": "vertical",
643
+ "type": "stack",
644
644
  "gap": "lg",
645
645
  "children": [
646
646
  {
647
- "type": "breadcrumb",
648
647
  "items": [
649
648
  {
650
649
  "href": "/",
@@ -653,124 +652,125 @@
653
652
  {
654
653
  "label": "Sensor Readings"
655
654
  }
656
- ]
655
+ ],
656
+ "type": "breadcrumb"
657
657
  },
658
658
  {
659
- "justify": "between",
660
- "direction": "horizontal",
661
659
  "children": [
662
660
  {
663
- "direction": "horizontal",
664
661
  "gap": "md",
662
+ "direction": "horizontal",
663
+ "type": "stack",
665
664
  "children": [
666
665
  {
667
- "type": "icon",
668
- "name": "thermometer"
666
+ "name": "thermometer",
667
+ "type": "icon"
669
668
  },
670
669
  {
671
670
  "variant": "h2",
672
671
  "type": "typography",
673
672
  "content": "Sensor Readings"
674
673
  }
675
- ],
676
- "type": "stack"
674
+ ]
677
675
  },
678
676
  {
679
- "icon": "refresh-cw",
680
677
  "type": "button",
681
- "action": "REFRESH",
682
678
  "label": "Refresh",
679
+ "action": "REFRESH",
680
+ "icon": "refresh-cw",
683
681
  "variant": "secondary"
684
682
  }
685
683
  ],
686
684
  "gap": "md",
687
- "type": "stack"
685
+ "type": "stack",
686
+ "direction": "horizontal",
687
+ "justify": "between"
688
688
  },
689
689
  {
690
690
  "type": "divider"
691
691
  },
692
692
  {
693
- "padding": "md",
694
- "type": "box",
695
693
  "children": [
696
694
  {
695
+ "type": "simple-grid",
697
696
  "cols": 3.0,
698
697
  "children": [
699
698
  {
700
699
  "children": [
701
700
  {
702
- "gap": "sm",
703
- "type": "stack",
704
- "direction": "vertical",
705
701
  "children": [
706
702
  {
707
- "type": "typography",
708
703
  "variant": "caption",
704
+ "type": "typography",
709
705
  "content": "SensorId"
710
706
  },
711
707
  {
712
- "content": "@entity.sensorId",
713
708
  "variant": "h3",
709
+ "content": "@entity.sensorId",
714
710
  "type": "typography"
715
711
  }
716
- ]
712
+ ],
713
+ "gap": "sm",
714
+ "direction": "vertical",
715
+ "type": "stack"
717
716
  }
718
717
  ],
719
718
  "type": "card"
720
719
  },
721
720
  {
722
- "value": "@entity.value",
723
721
  "type": "stat-display",
722
+ "value": "@entity.value",
724
723
  "label": "Value"
725
724
  },
726
725
  {
727
726
  "children": [
728
727
  {
729
- "direction": "vertical",
730
- "type": "stack",
731
- "gap": "sm",
732
728
  "children": [
733
729
  {
734
- "content": "Unit",
735
730
  "type": "typography",
731
+ "content": "Unit",
736
732
  "variant": "caption"
737
733
  },
738
734
  {
739
- "type": "typography",
740
735
  "variant": "h3",
741
- "content": "@entity.unit"
736
+ "content": "@entity.unit",
737
+ "type": "typography"
742
738
  }
743
- ]
739
+ ],
740
+ "type": "stack",
741
+ "direction": "vertical",
742
+ "gap": "sm"
744
743
  }
745
744
  ],
746
745
  "type": "card"
747
746
  },
748
747
  {
748
+ "type": "card",
749
749
  "children": [
750
750
  {
751
- "type": "stack",
751
+ "gap": "sm",
752
+ "direction": "vertical",
752
753
  "children": [
753
754
  {
754
- "type": "typography",
755
+ "variant": "caption",
755
756
  "content": "Timestamp",
756
- "variant": "caption"
757
+ "type": "typography"
757
758
  },
758
759
  {
759
- "type": "typography",
760
760
  "content": "@entity.timestamp",
761
+ "type": "typography",
761
762
  "variant": "h3"
762
763
  }
763
764
  ],
764
- "direction": "vertical",
765
- "gap": "sm"
765
+ "type": "stack"
766
766
  }
767
- ],
768
- "type": "card"
767
+ ]
769
768
  }
770
- ],
771
- "type": "simple-grid"
769
+ ]
772
770
  }
773
- ]
771
+ ],
772
+ "type": "box",
773
+ "padding": "md"
774
774
  },
775
775
  {
776
776
  "type": "divider"
@@ -780,101 +780,101 @@
780
780
  "gap": "md",
781
781
  "children": [
782
782
  {
783
- "type": "card",
784
783
  "children": [
785
784
  {
786
- "variant": "caption",
787
785
  "type": "typography",
786
+ "variant": "caption",
788
787
  "content": "Chart View"
789
788
  }
790
- ]
789
+ ],
790
+ "type": "card"
791
791
  },
792
792
  {
793
- "type": "card",
794
793
  "children": [
795
794
  {
796
- "type": "typography",
797
795
  "variant": "caption",
796
+ "type": "typography",
798
797
  "content": "Graph View"
799
798
  }
800
- ]
799
+ ],
800
+ "type": "card"
801
801
  }
802
802
  ],
803
803
  "cols": 2.0
804
804
  },
805
805
  {
806
- "type": "line-chart",
807
806
  "data": [
808
807
  {
809
808
  "value": 12.0,
810
809
  "date": "Jan"
811
810
  },
812
811
  {
813
- "value": 19.0,
814
- "date": "Feb"
812
+ "date": "Feb",
813
+ "value": 19.0
815
814
  },
816
815
  {
817
816
  "value": 15.0,
818
817
  "date": "Mar"
819
818
  },
820
819
  {
821
- "value": 25.0,
822
- "date": "Apr"
820
+ "date": "Apr",
821
+ "value": 25.0
823
822
  },
824
823
  {
825
824
  "date": "May",
826
825
  "value": 22.0
827
826
  },
828
827
  {
829
- "value": 30.0,
830
- "date": "Jun"
828
+ "date": "Jun",
829
+ "value": 30.0
831
830
  }
832
- ]
831
+ ],
832
+ "type": "line-chart"
833
833
  },
834
834
  {
835
- "type": "chart-legend",
836
835
  "items": [
837
836
  {
838
837
  "color": "primary",
839
838
  "label": "Current"
840
839
  },
841
840
  {
842
- "label": "Previous",
843
- "color": "muted"
841
+ "color": "muted",
842
+ "label": "Previous"
844
843
  }
845
- ]
844
+ ],
845
+ "type": "chart-legend"
846
846
  },
847
847
  {
848
- "type": "graph-view",
849
848
  "height": 200.0,
850
- "edges": [
851
- {
852
- "source": "a",
853
- "target": "b"
854
- },
855
- {
856
- "source": "b",
857
- "target": "c"
858
- }
859
- ],
860
849
  "width": 400.0,
850
+ "type": "graph-view",
861
851
  "nodes": [
862
852
  {
863
853
  "label": "Start",
864
854
  "id": "a"
865
855
  },
866
856
  {
867
- "id": "b",
868
- "label": "Process"
869
- },
857
+ "label": "Process",
858
+ "id": "b"
859
+ },
870
860
  {
871
- "label": "End",
872
- "id": "c"
861
+ "id": "c",
862
+ "label": "End"
863
+ }
864
+ ],
865
+ "edges": [
866
+ {
867
+ "source": "a",
868
+ "target": "b"
869
+ },
870
+ {
871
+ "target": "c",
872
+ "source": "b"
873
873
  }
874
874
  ]
875
875
  }
876
876
  ],
877
- "type": "stack"
877
+ "direction": "vertical"
878
878
  }
879
879
  ]
880
880
  ]
@@ -889,8 +889,8 @@
889
889
  "SensorReading",
890
890
  {
891
891
  "emit": {
892
- "success": "SensorReadingLoaded",
893
- "failure": "SensorReadingLoadFailed"
892
+ "failure": "SensorReadingLoadFailed",
893
+ "success": "SensorReadingLoaded"
894
894
  }
895
895
  }
896
896
  ],
@@ -898,7 +898,9 @@
898
898
  "render-ui",
899
899
  "main",
900
900
  {
901
+ "type": "stack",
901
902
  "gap": "lg",
903
+ "direction": "vertical",
902
904
  "children": [
903
905
  {
904
906
  "items": [
@@ -913,16 +915,18 @@
913
915
  "type": "breadcrumb"
914
916
  },
915
917
  {
916
- "justify": "between",
917
918
  "type": "stack",
918
919
  "gap": "md",
920
+ "direction": "horizontal",
921
+ "justify": "between",
919
922
  "children": [
920
923
  {
921
924
  "direction": "horizontal",
925
+ "gap": "md",
922
926
  "children": [
923
927
  {
924
- "type": "icon",
925
- "name": "thermometer"
928
+ "name": "thermometer",
929
+ "type": "icon"
926
930
  },
927
931
  {
928
932
  "variant": "h2",
@@ -930,25 +934,21 @@
930
934
  "content": "Sensor Readings"
931
935
  }
932
936
  ],
933
- "type": "stack",
934
- "gap": "md"
937
+ "type": "stack"
935
938
  },
936
939
  {
937
- "type": "button",
938
- "label": "Refresh",
939
- "action": "REFRESH",
940
940
  "variant": "secondary",
941
- "icon": "refresh-cw"
941
+ "action": "REFRESH",
942
+ "type": "button",
943
+ "icon": "refresh-cw",
944
+ "label": "Refresh"
942
945
  }
943
- ],
944
- "direction": "horizontal"
946
+ ]
945
947
  },
946
948
  {
947
949
  "type": "divider"
948
950
  },
949
951
  {
950
- "type": "box",
951
- "padding": "md",
952
952
  "children": [
953
953
  {
954
954
  "children": [
@@ -958,108 +958,111 @@
958
958
  {
959
959
  "children": [
960
960
  {
961
- "variant": "caption",
962
961
  "type": "typography",
962
+ "variant": "caption",
963
963
  "content": "SensorId"
964
964
  },
965
965
  {
966
- "variant": "h3",
967
966
  "type": "typography",
968
- "content": "@entity.sensorId"
967
+ "content": "@entity.sensorId",
968
+ "variant": "h3"
969
969
  }
970
970
  ],
971
- "type": "stack",
972
971
  "gap": "sm",
973
- "direction": "vertical"
972
+ "direction": "vertical",
973
+ "type": "stack"
974
974
  }
975
975
  ]
976
976
  },
977
977
  {
978
- "label": "Value",
979
978
  "type": "stat-display",
979
+ "label": "Value",
980
980
  "value": "@entity.value"
981
981
  },
982
982
  {
983
+ "type": "card",
983
984
  "children": [
984
985
  {
986
+ "type": "stack",
987
+ "gap": "sm",
985
988
  "direction": "vertical",
986
989
  "children": [
987
990
  {
991
+ "content": "Unit",
988
992
  "type": "typography",
989
- "variant": "caption",
990
- "content": "Unit"
993
+ "variant": "caption"
991
994
  },
992
995
  {
993
- "variant": "h3",
994
996
  "type": "typography",
995
- "content": "@entity.unit"
997
+ "content": "@entity.unit",
998
+ "variant": "h3"
996
999
  }
997
- ],
998
- "type": "stack",
999
- "gap": "sm"
1000
+ ]
1000
1001
  }
1001
- ],
1002
- "type": "card"
1002
+ ]
1003
1003
  },
1004
1004
  {
1005
+ "type": "card",
1005
1006
  "children": [
1006
1007
  {
1007
- "direction": "vertical",
1008
- "gap": "sm",
1009
- "type": "stack",
1010
1008
  "children": [
1011
1009
  {
1012
- "content": "Timestamp",
1010
+ "type": "typography",
1013
1011
  "variant": "caption",
1014
- "type": "typography"
1012
+ "content": "Timestamp"
1015
1013
  },
1016
1014
  {
1017
1015
  "type": "typography",
1018
1016
  "variant": "h3",
1019
1017
  "content": "@entity.timestamp"
1020
1018
  }
1021
- ]
1019
+ ],
1020
+ "gap": "sm",
1021
+ "type": "stack",
1022
+ "direction": "vertical"
1022
1023
  }
1023
- ],
1024
- "type": "card"
1024
+ ]
1025
1025
  }
1026
1026
  ],
1027
1027
  "type": "simple-grid",
1028
1028
  "cols": 3.0
1029
1029
  }
1030
- ]
1030
+ ],
1031
+ "type": "box",
1032
+ "padding": "md"
1031
1033
  },
1032
1034
  {
1033
1035
  "type": "divider"
1034
1036
  },
1035
1037
  {
1038
+ "type": "grid",
1039
+ "gap": "md",
1036
1040
  "children": [
1037
1041
  {
1042
+ "type": "card",
1038
1043
  "children": [
1039
1044
  {
1040
- "type": "typography",
1045
+ "content": "Chart View",
1041
1046
  "variant": "caption",
1042
- "content": "Chart View"
1047
+ "type": "typography"
1043
1048
  }
1044
- ],
1045
- "type": "card"
1049
+ ]
1046
1050
  },
1047
1051
  {
1048
1052
  "type": "card",
1049
1053
  "children": [
1050
1054
  {
1051
- "type": "typography",
1052
1055
  "variant": "caption",
1056
+ "type": "typography",
1053
1057
  "content": "Graph View"
1054
1058
  }
1055
1059
  ]
1056
1060
  }
1057
1061
  ],
1058
- "cols": 2.0,
1059
- "gap": "md",
1060
- "type": "grid"
1062
+ "cols": 2.0
1061
1063
  },
1062
1064
  {
1065
+ "type": "line-chart",
1063
1066
  "data": [
1064
1067
  {
1065
1068
  "date": "Jan",
@@ -1074,51 +1077,49 @@
1074
1077
  "date": "Mar"
1075
1078
  },
1076
1079
  {
1077
- "value": 25.0,
1078
- "date": "Apr"
1080
+ "date": "Apr",
1081
+ "value": 25.0
1079
1082
  },
1080
1083
  {
1081
- "value": 22.0,
1082
- "date": "May"
1084
+ "date": "May",
1085
+ "value": 22.0
1083
1086
  },
1084
1087
  {
1085
1088
  "value": 30.0,
1086
1089
  "date": "Jun"
1087
1090
  }
1088
- ],
1089
- "type": "line-chart"
1091
+ ]
1090
1092
  },
1091
1093
  {
1092
- "type": "chart-legend",
1093
1094
  "items": [
1094
1095
  {
1095
- "label": "Current",
1096
- "color": "primary"
1096
+ "color": "primary",
1097
+ "label": "Current"
1097
1098
  },
1098
1099
  {
1099
- "color": "muted",
1100
- "label": "Previous"
1100
+ "label": "Previous",
1101
+ "color": "muted"
1101
1102
  }
1102
- ]
1103
+ ],
1104
+ "type": "chart-legend"
1103
1105
  },
1104
1106
  {
1107
+ "width": 400.0,
1108
+ "type": "graph-view",
1105
1109
  "nodes": [
1106
1110
  {
1107
- "label": "Start",
1108
- "id": "a"
1111
+ "id": "a",
1112
+ "label": "Start"
1109
1113
  },
1110
1114
  {
1111
- "label": "Process",
1112
- "id": "b"
1115
+ "id": "b",
1116
+ "label": "Process"
1113
1117
  },
1114
1118
  {
1115
- "label": "End",
1116
- "id": "c"
1119
+ "id": "c",
1120
+ "label": "End"
1117
1121
  }
1118
1122
  ],
1119
- "width": 400.0,
1120
- "type": "graph-view",
1121
- "height": 200.0,
1122
1123
  "edges": [
1123
1124
  {
1124
1125
  "source": "a",
@@ -1128,11 +1129,10 @@
1128
1129
  "source": "b",
1129
1130
  "target": "c"
1130
1131
  }
1131
- ]
1132
+ ],
1133
+ "height": 200.0
1132
1134
  }
1133
- ],
1134
- "type": "stack",
1135
- "direction": "vertical"
1135
+ ]
1136
1136
  }
1137
1137
  ]
1138
1138
  ]
@@ -1147,8 +1147,8 @@
1147
1147
  "SensorReading",
1148
1148
  {
1149
1149
  "emit": {
1150
- "failure": "SensorReadingLoadFailed",
1151
- "success": "SensorReadingLoaded"
1150
+ "success": "SensorReadingLoaded",
1151
+ "failure": "SensorReadingLoadFailed"
1152
1152
  }
1153
1153
  }
1154
1154
  ],
@@ -1156,23 +1156,26 @@
1156
1156
  "render-ui",
1157
1157
  "main",
1158
1158
  {
1159
+ "direction": "vertical",
1160
+ "gap": "lg",
1159
1161
  "children": [
1160
1162
  {
1161
- "type": "breadcrumb",
1162
1163
  "items": [
1163
1164
  {
1164
- "href": "/",
1165
- "label": "Home"
1165
+ "label": "Home",
1166
+ "href": "/"
1166
1167
  },
1167
1168
  {
1168
1169
  "label": "Sensor Readings"
1169
1170
  }
1170
- ]
1171
+ ],
1172
+ "type": "breadcrumb"
1171
1173
  },
1172
1174
  {
1173
- "type": "stack",
1174
1175
  "gap": "md",
1176
+ "direction": "horizontal",
1175
1177
  "justify": "between",
1178
+ "type": "stack",
1176
1179
  "children": [
1177
1180
  {
1178
1181
  "children": [
@@ -1181,9 +1184,9 @@
1181
1184
  "name": "thermometer"
1182
1185
  },
1183
1186
  {
1184
- "content": "Sensor Readings",
1185
1187
  "type": "typography",
1186
- "variant": "h2"
1188
+ "variant": "h2",
1189
+ "content": "Sensor Readings"
1187
1190
  }
1188
1191
  ],
1189
1192
  "type": "stack",
@@ -1191,55 +1194,55 @@
1191
1194
  "gap": "md"
1192
1195
  },
1193
1196
  {
1194
- "label": "Refresh",
1197
+ "action": "REFRESH",
1198
+ "icon": "refresh-cw",
1195
1199
  "variant": "secondary",
1196
1200
  "type": "button",
1197
- "action": "REFRESH",
1198
- "icon": "refresh-cw"
1201
+ "label": "Refresh"
1199
1202
  }
1200
- ],
1201
- "direction": "horizontal"
1203
+ ]
1202
1204
  },
1203
1205
  {
1204
1206
  "type": "divider"
1205
1207
  },
1206
1208
  {
1207
- "padding": "md",
1208
1209
  "type": "box",
1209
1210
  "children": [
1210
1211
  {
1211
1212
  "children": [
1212
1213
  {
1214
+ "type": "card",
1213
1215
  "children": [
1214
1216
  {
1215
- "type": "stack",
1216
1217
  "gap": "sm",
1218
+ "type": "stack",
1217
1219
  "children": [
1218
1220
  {
1219
- "variant": "caption",
1220
1221
  "type": "typography",
1221
- "content": "SensorId"
1222
+ "content": "SensorId",
1223
+ "variant": "caption"
1222
1224
  },
1223
1225
  {
1226
+ "variant": "h3",
1224
1227
  "type": "typography",
1225
- "content": "@entity.sensorId",
1226
- "variant": "h3"
1228
+ "content": "@entity.sensorId"
1227
1229
  }
1228
1230
  ],
1229
1231
  "direction": "vertical"
1230
1232
  }
1231
- ],
1232
- "type": "card"
1233
+ ]
1233
1234
  },
1234
1235
  {
1235
- "label": "Value",
1236
1236
  "value": "@entity.value",
1237
+ "label": "Value",
1237
1238
  "type": "stat-display"
1238
1239
  },
1239
1240
  {
1241
+ "type": "card",
1240
1242
  "children": [
1241
1243
  {
1242
1244
  "type": "stack",
1245
+ "direction": "vertical",
1243
1246
  "gap": "sm",
1244
1247
  "children": [
1245
1248
  {
@@ -1248,50 +1251,47 @@
1248
1251
  "content": "Unit"
1249
1252
  },
1250
1253
  {
1251
- "variant": "h3",
1252
1254
  "type": "typography",
1255
+ "variant": "h3",
1253
1256
  "content": "@entity.unit"
1254
1257
  }
1255
- ],
1256
- "direction": "vertical"
1258
+ ]
1257
1259
  }
1258
- ],
1259
- "type": "card"
1260
+ ]
1260
1261
  },
1261
1262
  {
1262
1263
  "type": "card",
1263
1264
  "children": [
1264
1265
  {
1266
+ "direction": "vertical",
1265
1267
  "gap": "sm",
1268
+ "type": "stack",
1266
1269
  "children": [
1267
1270
  {
1268
- "variant": "caption",
1271
+ "type": "typography",
1269
1272
  "content": "Timestamp",
1270
- "type": "typography"
1273
+ "variant": "caption"
1271
1274
  },
1272
1275
  {
1276
+ "variant": "h3",
1273
1277
  "content": "@entity.timestamp",
1274
- "type": "typography",
1275
- "variant": "h3"
1278
+ "type": "typography"
1276
1279
  }
1277
- ],
1278
- "direction": "vertical",
1279
- "type": "stack"
1280
+ ]
1280
1281
  }
1281
1282
  ]
1282
1283
  }
1283
1284
  ],
1284
- "type": "simple-grid",
1285
- "cols": 3.0
1285
+ "cols": 3.0,
1286
+ "type": "simple-grid"
1286
1287
  }
1287
- ]
1288
+ ],
1289
+ "padding": "md"
1288
1290
  },
1289
1291
  {
1290
1292
  "type": "divider"
1291
1293
  },
1292
1294
  {
1293
- "cols": 2.0,
1294
- "type": "grid",
1295
1295
  "children": [
1296
1296
  {
1297
1297
  "type": "card",
@@ -1304,17 +1304,19 @@
1304
1304
  ]
1305
1305
  },
1306
1306
  {
1307
+ "type": "card",
1307
1308
  "children": [
1308
1309
  {
1309
- "content": "Graph View",
1310
+ "variant": "caption",
1310
1311
  "type": "typography",
1311
- "variant": "caption"
1312
+ "content": "Graph View"
1312
1313
  }
1313
- ],
1314
- "type": "card"
1314
+ ]
1315
1315
  }
1316
1316
  ],
1317
- "gap": "md"
1317
+ "gap": "md",
1318
+ "type": "grid",
1319
+ "cols": 2.0
1318
1320
  },
1319
1321
  {
1320
1322
  "type": "line-chart",
@@ -1332,8 +1334,8 @@
1332
1334
  "date": "Mar"
1333
1335
  },
1334
1336
  {
1335
- "date": "Apr",
1336
- "value": 25.0
1337
+ "value": 25.0,
1338
+ "date": "Apr"
1337
1339
  },
1338
1340
  {
1339
1341
  "value": 22.0,
@@ -1346,36 +1348,36 @@
1346
1348
  ]
1347
1349
  },
1348
1350
  {
1349
- "type": "chart-legend",
1350
1351
  "items": [
1351
1352
  {
1352
- "label": "Current",
1353
- "color": "primary"
1353
+ "color": "primary",
1354
+ "label": "Current"
1354
1355
  },
1355
1356
  {
1356
- "color": "muted",
1357
- "label": "Previous"
1357
+ "label": "Previous",
1358
+ "color": "muted"
1358
1359
  }
1359
- ]
1360
+ ],
1361
+ "type": "chart-legend"
1360
1362
  },
1361
1363
  {
1362
1364
  "width": 400.0,
1365
+ "height": 200.0,
1366
+ "type": "graph-view",
1363
1367
  "nodes": [
1364
1368
  {
1365
- "id": "a",
1366
- "label": "Start"
1369
+ "label": "Start",
1370
+ "id": "a"
1367
1371
  },
1368
1372
  {
1369
1373
  "label": "Process",
1370
1374
  "id": "b"
1371
1375
  },
1372
1376
  {
1373
- "id": "c",
1374
- "label": "End"
1377
+ "label": "End",
1378
+ "id": "c"
1375
1379
  }
1376
1380
  ],
1377
- "type": "graph-view",
1378
- "height": 200.0,
1379
1381
  "edges": [
1380
1382
  {
1381
1383
  "source": "a",
@@ -1388,8 +1390,6 @@
1388
1390
  ]
1389
1391
  }
1390
1392
  ],
1391
- "gap": "lg",
1392
- "direction": "vertical",
1393
1393
  "type": "stack"
1394
1394
  }
1395
1395
  ]
@@ -1405,8 +1405,8 @@
1405
1405
  "SensorReading",
1406
1406
  {
1407
1407
  "emit": {
1408
- "failure": "SensorReadingLoadFailed",
1409
- "success": "SensorReadingLoaded"
1408
+ "success": "SensorReadingLoaded",
1409
+ "failure": "SensorReadingLoadFailed"
1410
1410
  }
1411
1411
  }
1412
1412
  ],
@@ -1414,22 +1414,22 @@
1414
1414
  "render-ui",
1415
1415
  "main",
1416
1416
  {
1417
- "align": "center",
1418
1417
  "children": [
1419
1418
  {
1420
1419
  "type": "spinner"
1421
1420
  },
1422
1421
  {
1423
- "type": "typography",
1424
- "color": "muted",
1425
1422
  "variant": "caption",
1423
+ "color": "muted",
1424
+ "type": "typography",
1426
1425
  "content": "Searching…"
1427
1426
  }
1428
1427
  ],
1428
+ "gap": "md",
1429
1429
  "type": "stack",
1430
+ "align": "center",
1430
1431
  "className": "py-12",
1431
- "direction": "vertical",
1432
- "gap": "md"
1432
+ "direction": "vertical"
1433
1433
  }
1434
1434
  ]
1435
1435
  ]
@@ -1443,34 +1443,34 @@
1443
1443
  "render-ui",
1444
1444
  "main",
1445
1445
  {
1446
+ "className": "py-8",
1446
1447
  "children": [
1447
1448
  {
1448
1449
  "type": "icon",
1449
1450
  "name": "bell"
1450
1451
  },
1451
1452
  {
1452
- "content": "No notifications",
1453
1453
  "variant": "h3",
1454
+ "content": "No notifications",
1454
1455
  "type": "typography"
1455
1456
  },
1456
1457
  {
1457
1458
  "color": "muted",
1458
- "content": "You're all caught up.",
1459
1459
  "type": "typography",
1460
+ "content": "You're all caught up.",
1460
1461
  "variant": "caption"
1461
1462
  },
1462
1463
  {
1463
- "variant": "ghost",
1464
1464
  "action": "INIT",
1465
1465
  "label": "Back",
1466
- "type": "button"
1466
+ "type": "button",
1467
+ "variant": "ghost"
1467
1468
  }
1468
1469
  ],
1469
1470
  "direction": "vertical",
1470
- "gap": "md",
1471
- "type": "stack",
1472
1471
  "align": "center",
1473
- "className": "py-8"
1472
+ "gap": "md",
1473
+ "type": "stack"
1474
1474
  }
1475
1475
  ]
1476
1476
  ]
@@ -1494,14 +1494,14 @@
1494
1494
  "render-ui",
1495
1495
  "main",
1496
1496
  {
1497
- "gap": "lg",
1498
1497
  "type": "stack",
1498
+ "direction": "vertical",
1499
1499
  "children": [
1500
1500
  {
1501
1501
  "items": [
1502
1502
  {
1503
- "href": "/",
1504
- "label": "Home"
1503
+ "label": "Home",
1504
+ "href": "/"
1505
1505
  },
1506
1506
  {
1507
1507
  "label": "Sensor Readings"
@@ -1510,57 +1510,54 @@
1510
1510
  "type": "breadcrumb"
1511
1511
  },
1512
1512
  {
1513
- "justify": "between",
1514
- "direction": "horizontal",
1515
1513
  "children": [
1516
1514
  {
1515
+ "gap": "md",
1517
1516
  "direction": "horizontal",
1518
1517
  "type": "stack",
1519
1518
  "children": [
1520
1519
  {
1521
- "name": "thermometer",
1522
- "type": "icon"
1520
+ "type": "icon",
1521
+ "name": "thermometer"
1523
1522
  },
1524
1523
  {
1525
- "type": "typography",
1524
+ "variant": "h2",
1526
1525
  "content": "Sensor Readings",
1527
- "variant": "h2"
1526
+ "type": "typography"
1528
1527
  }
1529
- ],
1530
- "gap": "md"
1528
+ ]
1531
1529
  },
1532
1530
  {
1533
- "type": "button",
1534
- "variant": "secondary",
1535
1531
  "label": "Refresh",
1532
+ "variant": "secondary",
1533
+ "action": "REFRESH",
1536
1534
  "icon": "refresh-cw",
1537
- "action": "REFRESH"
1535
+ "type": "button"
1538
1536
  }
1539
1537
  ],
1538
+ "direction": "horizontal",
1540
1539
  "gap": "md",
1541
- "type": "stack"
1540
+ "type": "stack",
1541
+ "justify": "between"
1542
1542
  },
1543
1543
  {
1544
1544
  "type": "divider"
1545
1545
  },
1546
1546
  {
1547
- "type": "box",
1548
- "padding": "md",
1549
1547
  "children": [
1550
1548
  {
1551
- "type": "simple-grid",
1552
1549
  "cols": 3.0,
1553
1550
  "children": [
1554
1551
  {
1555
1552
  "children": [
1556
1553
  {
1557
1554
  "type": "stack",
1558
- "gap": "sm",
1555
+ "direction": "vertical",
1559
1556
  "children": [
1560
1557
  {
1561
- "content": "SensorId",
1558
+ "type": "typography",
1562
1559
  "variant": "caption",
1563
- "type": "typography"
1560
+ "content": "SensorId"
1564
1561
  },
1565
1562
  {
1566
1563
  "variant": "h3",
@@ -1568,78 +1565,79 @@
1568
1565
  "type": "typography"
1569
1566
  }
1570
1567
  ],
1571
- "direction": "vertical"
1568
+ "gap": "sm"
1572
1569
  }
1573
1570
  ],
1574
1571
  "type": "card"
1575
1572
  },
1576
1573
  {
1574
+ "value": "@entity.value",
1577
1575
  "type": "stat-display",
1578
- "label": "Value",
1579
- "value": "@entity.value"
1576
+ "label": "Value"
1580
1577
  },
1581
1578
  {
1579
+ "type": "card",
1582
1580
  "children": [
1583
1581
  {
1584
- "direction": "vertical",
1585
1582
  "gap": "sm",
1586
1583
  "type": "stack",
1587
1584
  "children": [
1588
1585
  {
1589
- "content": "Unit",
1590
1586
  "type": "typography",
1591
- "variant": "caption"
1587
+ "variant": "caption",
1588
+ "content": "Unit"
1592
1589
  },
1593
1590
  {
1594
- "type": "typography",
1595
1591
  "variant": "h3",
1596
- "content": "@entity.unit"
1592
+ "content": "@entity.unit",
1593
+ "type": "typography"
1597
1594
  }
1598
- ]
1595
+ ],
1596
+ "direction": "vertical"
1599
1597
  }
1600
- ],
1601
- "type": "card"
1598
+ ]
1602
1599
  },
1603
1600
  {
1604
1601
  "children": [
1605
1602
  {
1606
1603
  "gap": "sm",
1607
- "direction": "vertical",
1608
1604
  "children": [
1609
1605
  {
1610
- "content": "Timestamp",
1606
+ "variant": "caption",
1611
1607
  "type": "typography",
1612
- "variant": "caption"
1608
+ "content": "Timestamp"
1613
1609
  },
1614
1610
  {
1615
1611
  "type": "typography",
1616
- "variant": "h3",
1617
- "content": "@entity.timestamp"
1612
+ "content": "@entity.timestamp",
1613
+ "variant": "h3"
1618
1614
  }
1619
1615
  ],
1620
- "type": "stack"
1616
+ "type": "stack",
1617
+ "direction": "vertical"
1621
1618
  }
1622
1619
  ],
1623
1620
  "type": "card"
1624
1621
  }
1625
- ]
1622
+ ],
1623
+ "type": "simple-grid"
1626
1624
  }
1627
- ]
1625
+ ],
1626
+ "type": "box",
1627
+ "padding": "md"
1628
1628
  },
1629
1629
  {
1630
1630
  "type": "divider"
1631
1631
  },
1632
1632
  {
1633
- "gap": "md",
1634
1633
  "type": "grid",
1635
- "cols": 2.0,
1636
1634
  "children": [
1637
1635
  {
1638
1636
  "children": [
1639
1637
  {
1640
1638
  "type": "typography",
1641
- "content": "Chart View",
1642
- "variant": "caption"
1639
+ "variant": "caption",
1640
+ "content": "Chart View"
1643
1641
  }
1644
1642
  ],
1645
1643
  "type": "card"
@@ -1648,20 +1646,22 @@
1648
1646
  "children": [
1649
1647
  {
1650
1648
  "variant": "caption",
1651
- "type": "typography",
1652
- "content": "Graph View"
1649
+ "content": "Graph View",
1650
+ "type": "typography"
1653
1651
  }
1654
1652
  ],
1655
1653
  "type": "card"
1656
1654
  }
1657
- ]
1655
+ ],
1656
+ "cols": 2.0,
1657
+ "gap": "md"
1658
1658
  },
1659
1659
  {
1660
1660
  "type": "line-chart",
1661
1661
  "data": [
1662
1662
  {
1663
- "date": "Jan",
1664
- "value": 12.0
1663
+ "value": 12.0,
1664
+ "date": "Jan"
1665
1665
  },
1666
1666
  {
1667
1667
  "value": 19.0,
@@ -1686,32 +1686,21 @@
1686
1686
  ]
1687
1687
  },
1688
1688
  {
1689
+ "type": "chart-legend",
1689
1690
  "items": [
1690
1691
  {
1691
- "label": "Current",
1692
- "color": "primary"
1692
+ "color": "primary",
1693
+ "label": "Current"
1693
1694
  },
1694
1695
  {
1695
- "color": "muted",
1696
- "label": "Previous"
1696
+ "label": "Previous",
1697
+ "color": "muted"
1697
1698
  }
1698
- ],
1699
- "type": "chart-legend"
1699
+ ]
1700
1700
  },
1701
1701
  {
1702
1702
  "width": 400.0,
1703
- "edges": [
1704
- {
1705
- "target": "b",
1706
- "source": "a"
1707
- },
1708
- {
1709
- "source": "b",
1710
- "target": "c"
1711
- }
1712
- ],
1713
1703
  "height": 200.0,
1714
- "type": "graph-view",
1715
1704
  "nodes": [
1716
1705
  {
1717
1706
  "label": "Start",
@@ -1722,13 +1711,24 @@
1722
1711
  "label": "Process"
1723
1712
  },
1724
1713
  {
1725
- "id": "c",
1726
- "label": "End"
1714
+ "label": "End",
1715
+ "id": "c"
1716
+ }
1717
+ ],
1718
+ "type": "graph-view",
1719
+ "edges": [
1720
+ {
1721
+ "source": "a",
1722
+ "target": "b"
1723
+ },
1724
+ {
1725
+ "source": "b",
1726
+ "target": "c"
1727
1727
  }
1728
1728
  ]
1729
1729
  }
1730
1730
  ],
1731
- "direction": "vertical"
1731
+ "gap": "lg"
1732
1732
  }
1733
1733
  ]
1734
1734
  ]
@@ -2027,8 +2027,8 @@
2027
2027
  "Device",
2028
2028
  {
2029
2029
  "emit": {
2030
- "failure": "DeviceLoadFailed",
2031
- "success": "DeviceLoaded"
2030
+ "success": "DeviceLoaded",
2031
+ "failure": "DeviceLoadFailed"
2032
2032
  }
2033
2033
  }
2034
2034
  ],
@@ -2036,22 +2036,22 @@
2036
2036
  "render-ui",
2037
2037
  "main",
2038
2038
  {
2039
+ "gap": "md",
2039
2040
  "type": "stack",
2040
2041
  "direction": "vertical",
2041
- "className": "py-12",
2042
2042
  "children": [
2043
2043
  {
2044
2044
  "type": "spinner"
2045
2045
  },
2046
2046
  {
2047
- "type": "typography",
2048
- "variant": "caption",
2049
2047
  "color": "muted",
2050
- "content": "Loading…"
2048
+ "type": "typography",
2049
+ "content": "Loading…",
2050
+ "variant": "caption"
2051
2051
  }
2052
2052
  ],
2053
2053
  "align": "center",
2054
- "gap": "md"
2054
+ "className": "py-12"
2055
2055
  }
2056
2056
  ]
2057
2057
  ]
@@ -2065,6 +2065,8 @@
2065
2065
  "render-ui",
2066
2066
  "main",
2067
2067
  {
2068
+ "type": "dashboard-layout",
2069
+ "appName": "IoT Dashboard",
2068
2070
  "navItems": [
2069
2071
  {
2070
2072
  "label": "Sensors",
@@ -2072,20 +2074,21 @@
2072
2074
  "icon": "layout-list"
2073
2075
  },
2074
2076
  {
2077
+ "href": "/devices",
2075
2078
  "icon": "cpu",
2076
- "label": "Devices",
2077
- "href": "/devices"
2079
+ "label": "Devices"
2078
2080
  },
2079
2081
  {
2080
- "href": "/alerts",
2081
2082
  "icon": "bell",
2082
- "label": "Alerts"
2083
+ "label": "Alerts",
2084
+ "href": "/alerts"
2083
2085
  }
2084
2086
  ],
2085
2087
  "children": [
2086
2088
  {
2087
- "gap": "lg",
2089
+ "direction": "vertical",
2088
2090
  "type": "stack",
2091
+ "gap": "lg",
2089
2092
  "className": "max-w-5xl mx-auto w-full",
2090
2093
  "children": [
2091
2094
  {
@@ -2093,94 +2096,91 @@
2093
2096
  "gap": "md",
2094
2097
  "justify": "between",
2095
2098
  "type": "stack",
2096
- "align": "center",
2097
2099
  "children": [
2098
2100
  {
2101
+ "gap": "sm",
2102
+ "direction": "horizontal",
2099
2103
  "children": [
2100
2104
  {
2101
2105
  "name": "cpu",
2102
2106
  "type": "icon"
2103
2107
  },
2104
2108
  {
2109
+ "variant": "h2",
2105
2110
  "type": "typography",
2106
- "content": "Devices",
2107
- "variant": "h2"
2111
+ "content": "Devices"
2108
2112
  }
2109
2113
  ],
2110
2114
  "type": "stack",
2111
- "direction": "horizontal",
2112
- "align": "center",
2113
- "gap": "sm"
2115
+ "align": "center"
2114
2116
  },
2115
2117
  {
2116
2118
  "direction": "horizontal",
2117
- "type": "stack",
2118
- "gap": "sm",
2119
2119
  "children": [
2120
2120
  {
2121
+ "variant": "primary",
2121
2122
  "icon": "plus",
2122
- "action": "CREATE",
2123
- "type": "button",
2124
2123
  "label": "Create Device",
2125
- "variant": "primary"
2124
+ "type": "button",
2125
+ "action": "CREATE"
2126
2126
  }
2127
- ]
2127
+ ],
2128
+ "type": "stack",
2129
+ "gap": "sm"
2128
2130
  }
2129
- ]
2131
+ ],
2132
+ "align": "center"
2130
2133
  },
2131
2134
  {
2132
2135
  "type": "divider"
2133
2136
  },
2134
2137
  {
2135
- "cols": 3.0,
2136
2138
  "itemActions": [
2137
2139
  {
2138
- "variant": "ghost",
2139
2140
  "event": "VIEW",
2141
+ "variant": "ghost",
2140
2142
  "label": "View"
2141
2143
  },
2142
2144
  {
2143
2145
  "event": "EDIT",
2144
- "label": "Edit",
2145
- "variant": "ghost"
2146
+ "variant": "ghost",
2147
+ "label": "Edit"
2146
2148
  },
2147
2149
  {
2148
- "label": "Delete",
2149
2150
  "event": "DELETE",
2150
- "variant": "danger"
2151
+ "variant": "danger",
2152
+ "label": "Delete"
2151
2153
  }
2152
2154
  ],
2153
- "gap": "md",
2154
2155
  "type": "data-grid",
2155
2156
  "entity": "@payload.data",
2157
+ "cols": 3.0,
2158
+ "gap": "md",
2156
2159
  "fields": [
2157
2160
  {
2161
+ "icon": "cpu",
2158
2162
  "variant": "h3",
2159
- "name": "name",
2160
- "icon": "cpu"
2163
+ "name": "name"
2161
2164
  },
2162
2165
  {
2163
- "variant": "badge",
2164
- "name": "status"
2166
+ "name": "status",
2167
+ "variant": "badge"
2165
2168
  },
2166
2169
  {
2167
2170
  "name": "type",
2168
2171
  "variant": "body"
2169
2172
  },
2170
2173
  {
2171
- "variant": "caption",
2172
2174
  "label": "Last Seen",
2173
- "format": "date",
2174
- "name": "lastSeen"
2175
+ "variant": "caption",
2176
+ "name": "lastSeen",
2177
+ "format": "date"
2175
2178
  }
2176
2179
  ]
2177
2180
  }
2178
- ],
2179
- "direction": "vertical"
2181
+ ]
2180
2182
  }
2181
- ],
2182
- "appName": "IoT Dashboard",
2183
- "type": "dashboard-layout"
2183
+ ]
2184
2184
  }
2185
2185
  ]
2186
2186
  ]
@@ -2194,34 +2194,34 @@
2194
2194
  "render-ui",
2195
2195
  "main",
2196
2196
  {
2197
- "align": "center",
2198
2197
  "type": "stack",
2199
2198
  "gap": "md",
2199
+ "align": "center",
2200
2200
  "className": "py-12",
2201
2201
  "direction": "vertical",
2202
2202
  "children": [
2203
2203
  {
2204
- "name": "alert-triangle",
2204
+ "type": "icon",
2205
2205
  "color": "destructive",
2206
- "type": "icon"
2206
+ "name": "alert-triangle"
2207
2207
  },
2208
2208
  {
2209
+ "variant": "h3",
2209
2210
  "content": "Failed to load device",
2210
- "type": "typography",
2211
- "variant": "h3"
2211
+ "type": "typography"
2212
2212
  },
2213
2213
  {
2214
- "color": "muted",
2215
- "type": "typography",
2216
2214
  "variant": "body",
2217
- "content": "@payload.error"
2215
+ "color": "muted",
2216
+ "content": "@payload.error",
2217
+ "type": "typography"
2218
2218
  },
2219
2219
  {
2220
2220
  "type": "button",
2221
+ "label": "Retry",
2221
2222
  "variant": "primary",
2222
- "icon": "rotate-ccw",
2223
2223
  "action": "INIT",
2224
- "label": "Retry"
2224
+ "icon": "rotate-ccw"
2225
2225
  }
2226
2226
  ]
2227
2227
  }
@@ -2424,28 +2424,30 @@
2424
2424
  "render-ui",
2425
2425
  "modal",
2426
2426
  {
2427
+ "type": "stack",
2428
+ "gap": "md",
2429
+ "direction": "vertical",
2427
2430
  "children": [
2428
2431
  {
2429
2432
  "gap": "sm",
2430
- "direction": "horizontal",
2431
- "type": "stack",
2432
2433
  "children": [
2433
2434
  {
2434
2435
  "name": "plus-circle",
2435
2436
  "type": "icon"
2436
2437
  },
2437
2438
  {
2438
- "content": "Create Device",
2439
2439
  "type": "typography",
2440
+ "content": "Create Device",
2440
2441
  "variant": "h3"
2441
2442
  }
2442
- ]
2443
+ ],
2444
+ "type": "stack",
2445
+ "direction": "horizontal"
2443
2446
  },
2444
2447
  {
2445
2448
  "type": "divider"
2446
2449
  },
2447
2450
  {
2448
- "cancelEvent": "CLOSE",
2449
2451
  "mode": "create",
2450
2452
  "fields": [
2451
2453
  "name",
@@ -2454,12 +2456,10 @@
2454
2456
  "lastSeen"
2455
2457
  ],
2456
2458
  "type": "form-section",
2459
+ "cancelEvent": "CLOSE",
2457
2460
  "submitEvent": "SAVE"
2458
2461
  }
2459
- ],
2460
- "gap": "md",
2461
- "type": "stack",
2462
- "direction": "vertical"
2462
+ ]
2463
2463
  }
2464
2464
  ]
2465
2465
  ]
@@ -2727,11 +2727,11 @@
2727
2727
  "fetch",
2728
2728
  "Device",
2729
2729
  {
2730
+ "id": "@payload.id",
2730
2731
  "emit": {
2731
- "success": "DeviceLoaded",
2732
- "failure": "DeviceLoadFailed"
2733
- },
2734
- "id": "@payload.id"
2732
+ "failure": "DeviceLoadFailed",
2733
+ "success": "DeviceLoaded"
2734
+ }
2735
2735
  }
2736
2736
  ],
2737
2737
  [
@@ -2739,40 +2739,40 @@
2739
2739
  "modal",
2740
2740
  {
2741
2741
  "gap": "md",
2742
- "type": "stack",
2743
2742
  "direction": "vertical",
2743
+ "type": "stack",
2744
2744
  "children": [
2745
2745
  {
2746
- "gap": "sm",
2747
2746
  "type": "stack",
2747
+ "direction": "horizontal",
2748
+ "gap": "sm",
2748
2749
  "children": [
2749
2750
  {
2750
2751
  "type": "icon",
2751
2752
  "name": "edit"
2752
2753
  },
2753
2754
  {
2754
- "type": "typography",
2755
+ "variant": "h3",
2755
2756
  "content": "Edit Device",
2756
- "variant": "h3"
2757
+ "type": "typography"
2757
2758
  }
2758
- ],
2759
- "direction": "horizontal"
2759
+ ]
2760
2760
  },
2761
2761
  {
2762
2762
  "type": "divider"
2763
2763
  },
2764
2764
  {
2765
- "entity": "@payload.row",
2766
- "cancelEvent": "CLOSE",
2767
- "submitEvent": "SAVE",
2768
- "mode": "edit",
2769
2765
  "type": "form-section",
2766
+ "mode": "edit",
2767
+ "cancelEvent": "CLOSE",
2770
2768
  "fields": [
2771
2769
  "name",
2772
2770
  "type",
2773
2771
  "status",
2774
2772
  "lastSeen"
2775
- ]
2773
+ ],
2774
+ "entity": "@payload.row",
2775
+ "submitEvent": "SAVE"
2776
2776
  }
2777
2777
  ]
2778
2778
  }
@@ -3002,35 +3002,34 @@
3002
3002
  "fetch",
3003
3003
  "Device",
3004
3004
  {
3005
- "id": "@payload.id",
3006
3005
  "emit": {
3007
- "failure": "DeviceLoadFailed",
3008
- "success": "DeviceLoaded"
3009
- }
3006
+ "success": "DeviceLoaded",
3007
+ "failure": "DeviceLoadFailed"
3008
+ },
3009
+ "id": "@payload.id"
3010
3010
  }
3011
3011
  ],
3012
3012
  [
3013
3013
  "render-ui",
3014
3014
  "modal",
3015
3015
  {
3016
- "type": "stack",
3017
3016
  "children": [
3018
3017
  {
3018
+ "direction": "horizontal",
3019
+ "type": "stack",
3019
3020
  "children": [
3020
3021
  {
3021
- "name": "eye",
3022
- "type": "icon"
3022
+ "type": "icon",
3023
+ "name": "eye"
3023
3024
  },
3024
3025
  {
3025
- "type": "typography",
3026
+ "content": "@entity.name",
3026
3027
  "variant": "h3",
3027
- "content": "@entity.name"
3028
+ "type": "typography"
3028
3029
  }
3029
3030
  ],
3030
3031
  "gap": "sm",
3031
- "type": "stack",
3032
- "align": "center",
3033
- "direction": "horizontal"
3032
+ "align": "center"
3034
3033
  },
3035
3034
  {
3036
3035
  "type": "divider"
@@ -3039,8 +3038,8 @@
3039
3038
  "gap": "md",
3040
3039
  "children": [
3041
3040
  {
3042
- "type": "typography",
3043
3041
  "variant": "caption",
3042
+ "type": "typography",
3044
3043
  "content": "Name"
3045
3044
  },
3046
3045
  {
@@ -3049,15 +3048,17 @@
3049
3048
  "variant": "body"
3050
3049
  }
3051
3050
  ],
3052
- "type": "stack",
3053
- "direction": "horizontal"
3051
+ "direction": "horizontal",
3052
+ "type": "stack"
3054
3053
  },
3055
3054
  {
3055
+ "gap": "md",
3056
+ "direction": "horizontal",
3056
3057
  "children": [
3057
3058
  {
3058
- "type": "typography",
3059
+ "content": "Type",
3059
3060
  "variant": "caption",
3060
- "content": "Type"
3061
+ "type": "typography"
3061
3062
  },
3062
3063
  {
3063
3064
  "content": "@entity.type",
@@ -3065,70 +3066,69 @@
3065
3066
  "variant": "body"
3066
3067
  }
3067
3068
  ],
3068
- "direction": "horizontal",
3069
- "type": "stack",
3070
- "gap": "md"
3069
+ "type": "stack"
3071
3070
  },
3072
3071
  {
3073
3072
  "direction": "horizontal",
3074
- "type": "stack",
3075
- "gap": "md",
3076
3073
  "children": [
3077
3074
  {
3078
3075
  "type": "typography",
3079
- "variant": "caption",
3080
- "content": "Status"
3076
+ "content": "Status",
3077
+ "variant": "caption"
3081
3078
  },
3082
3079
  {
3083
3080
  "type": "typography",
3084
3081
  "content": "@entity.status",
3085
3082
  "variant": "body"
3086
3083
  }
3087
- ]
3084
+ ],
3085
+ "gap": "md",
3086
+ "type": "stack"
3088
3087
  },
3089
3088
  {
3090
- "gap": "md",
3091
3089
  "type": "stack",
3090
+ "gap": "md",
3091
+ "direction": "horizontal",
3092
3092
  "children": [
3093
3093
  {
3094
- "content": "Last Seen",
3095
3094
  "type": "typography",
3096
- "variant": "caption"
3095
+ "variant": "caption",
3096
+ "content": "Last Seen"
3097
3097
  },
3098
3098
  {
3099
- "content": "@entity.lastSeen",
3100
3099
  "type": "typography",
3101
- "variant": "body"
3100
+ "variant": "body",
3101
+ "content": "@entity.lastSeen"
3102
3102
  }
3103
- ],
3104
- "direction": "horizontal"
3103
+ ]
3105
3104
  },
3106
3105
  {
3107
3106
  "type": "divider"
3108
3107
  },
3109
3108
  {
3109
+ "justify": "end",
3110
3110
  "type": "stack",
3111
+ "direction": "horizontal",
3111
3112
  "gap": "sm",
3112
3113
  "children": [
3113
3114
  {
3114
- "variant": "primary",
3115
- "icon": "edit",
3116
- "action": "EDIT",
3117
3115
  "type": "button",
3118
- "label": "Edit"
3116
+ "action": "EDIT",
3117
+ "variant": "primary",
3118
+ "label": "Edit",
3119
+ "icon": "edit"
3119
3120
  },
3120
3121
  {
3122
+ "variant": "ghost",
3121
3123
  "type": "button",
3122
- "label": "Close",
3123
3124
  "action": "CLOSE",
3124
- "variant": "ghost"
3125
+ "label": "Close"
3125
3126
  }
3126
- ],
3127
- "direction": "horizontal",
3128
- "justify": "end"
3127
+ ]
3129
3128
  }
3130
3129
  ],
3131
3130
  "direction": "vertical",
3131
+ "type": "stack",
3132
3132
  "gap": "md"
3133
3133
  }
3134
3134
  ]
@@ -3351,8 +3351,8 @@
3351
3351
  "Device",
3352
3352
  {
3353
3353
  "emit": {
3354
- "failure": "DeviceLoadFailed",
3355
- "success": "DeviceLoaded"
3354
+ "success": "DeviceLoaded",
3355
+ "failure": "DeviceLoadFailed"
3356
3356
  }
3357
3357
  }
3358
3358
  ]
@@ -3372,37 +3372,35 @@
3372
3372
  "fetch",
3373
3373
  "Device",
3374
3374
  {
3375
+ "id": "@payload.id",
3375
3376
  "emit": {
3376
3377
  "success": "DeviceLoaded",
3377
3378
  "failure": "DeviceLoadFailed"
3378
- },
3379
- "id": "@payload.id"
3379
+ }
3380
3380
  }
3381
3381
  ],
3382
3382
  [
3383
3383
  "render-ui",
3384
3384
  "modal",
3385
3385
  {
3386
- "type": "stack",
3387
3386
  "direction": "vertical",
3388
- "gap": "md",
3389
3387
  "children": [
3390
3388
  {
3391
- "direction": "horizontal",
3392
3389
  "gap": "sm",
3393
3390
  "type": "stack",
3394
- "align": "center",
3395
3391
  "children": [
3396
3392
  {
3397
- "name": "alert-triangle",
3398
- "type": "icon"
3393
+ "type": "icon",
3394
+ "name": "alert-triangle"
3399
3395
  },
3400
3396
  {
3401
- "content": "Delete Device",
3402
3397
  "variant": "h3",
3403
- "type": "typography"
3398
+ "type": "typography",
3399
+ "content": "Delete Device"
3404
3400
  }
3405
- ]
3401
+ ],
3402
+ "direction": "horizontal",
3403
+ "align": "center"
3406
3404
  },
3407
3405
  {
3408
3406
  "type": "divider"
@@ -3415,14 +3413,12 @@
3415
3413
  {
3416
3414
  "gap": "sm",
3417
3415
  "justify": "end",
3418
- "direction": "horizontal",
3419
- "type": "stack",
3420
3416
  "children": [
3421
3417
  {
3422
- "type": "button",
3423
3418
  "action": "CANCEL",
3424
- "label": "Cancel",
3425
- "variant": "ghost"
3419
+ "variant": "ghost",
3420
+ "type": "button",
3421
+ "label": "Cancel"
3426
3422
  },
3427
3423
  {
3428
3424
  "action": "CONFIRM_DELETE",
@@ -3431,9 +3427,13 @@
3431
3427
  "icon": "check",
3432
3428
  "variant": "danger"
3433
3429
  }
3434
- ]
3430
+ ],
3431
+ "direction": "horizontal",
3432
+ "type": "stack"
3435
3433
  }
3436
- ]
3434
+ ],
3435
+ "type": "stack",
3436
+ "gap": "md"
3437
3437
  }
3438
3438
  ]
3439
3439
  ]
@@ -3450,8 +3450,8 @@
3450
3450
  "@entity.pendingId",
3451
3451
  {
3452
3452
  "emit": {
3453
- "success": "DeviceDeleted",
3454
- "failure": "DeviceDeleteFailed"
3453
+ "failure": "DeviceDeleteFailed",
3454
+ "success": "DeviceDeleted"
3455
3455
  }
3456
3456
  }
3457
3457
  ],
@@ -3534,8 +3534,8 @@
3534
3534
  "Device",
3535
3535
  {
3536
3536
  "emit": {
3537
- "success": "DeviceLoaded",
3538
- "failure": "DeviceLoadFailed"
3537
+ "failure": "DeviceLoadFailed",
3538
+ "success": "DeviceLoaded"
3539
3539
  }
3540
3540
  }
3541
3541
  ]
@@ -3731,8 +3731,8 @@
3731
3731
  "DeviceAlert",
3732
3732
  {
3733
3733
  "emit": {
3734
- "failure": "DeviceAlertLoadFailed",
3735
- "success": "DeviceAlertLoaded"
3734
+ "success": "DeviceAlertLoaded",
3735
+ "failure": "DeviceAlertLoadFailed"
3736
3736
  }
3737
3737
  }
3738
3738
  ],
@@ -3740,22 +3740,20 @@
3740
3740
  "render-ui",
3741
3741
  "main",
3742
3742
  {
3743
+ "appName": "IoT Dashboard",
3743
3744
  "children": [
3744
3745
  {
3745
- "direction": "vertical",
3746
- "gap": "lg",
3747
3746
  "children": [
3748
3747
  {
3749
3748
  "direction": "horizontal",
3750
- "gap": "md",
3749
+ "type": "stack",
3751
3750
  "align": "center",
3751
+ "gap": "md",
3752
3752
  "justify": "between",
3753
3753
  "children": [
3754
3754
  {
3755
- "type": "stack",
3756
3755
  "direction": "horizontal",
3757
- "gap": "md",
3758
- "align": "center",
3756
+ "type": "stack",
3759
3757
  "children": [
3760
3758
  {
3761
3759
  "type": "icon",
@@ -3766,32 +3764,32 @@
3766
3764
  "content": "DeviceAlert",
3767
3765
  "variant": "h2"
3768
3766
  }
3769
- ]
3767
+ ],
3768
+ "gap": "md",
3769
+ "align": "center"
3770
3770
  },
3771
3771
  {
3772
- "type": "status-dot",
3773
- "pulse": false,
3772
+ "label": "Circuit Closed",
3774
3773
  "status": "online",
3775
- "label": "Circuit Closed"
3774
+ "pulse": false,
3775
+ "type": "status-dot"
3776
3776
  }
3777
- ],
3778
- "type": "stack"
3777
+ ]
3779
3778
  },
3780
3779
  {
3781
3780
  "type": "divider"
3782
3781
  },
3783
3782
  {
3784
3783
  "type": "alert",
3785
- "message": "Service is healthy. All requests are being processed.",
3786
- "variant": "success"
3784
+ "variant": "success",
3785
+ "message": "Service is healthy. All requests are being processed."
3787
3786
  },
3788
3787
  {
3789
- "cols": 2.0,
3790
3788
  "children": [
3791
3789
  {
3790
+ "value": "@entity.failureCount",
3792
3791
  "type": "stat-display",
3793
- "label": "Failures",
3794
- "value": "@entity.failureCount"
3792
+ "label": "Failures"
3795
3793
  },
3796
3794
  {
3797
3795
  "value": "@entity.successCount",
@@ -3799,37 +3797,39 @@
3799
3797
  "label": "Successes"
3800
3798
  }
3801
3799
  ],
3802
- "type": "simple-grid"
3800
+ "type": "simple-grid",
3801
+ "cols": 2.0
3803
3802
  },
3804
3803
  {
3805
- "value": "@entity.failureCount",
3806
3804
  "min": 0.0,
3807
3805
  "type": "meter",
3806
+ "value": "@entity.failureCount",
3808
3807
  "max": "@entity.threshold"
3809
3808
  }
3810
3809
  ],
3811
- "type": "stack"
3810
+ "type": "stack",
3811
+ "direction": "vertical",
3812
+ "gap": "lg"
3812
3813
  }
3813
3814
  ],
3814
- "appName": "IoT Dashboard",
3815
+ "type": "dashboard-layout",
3815
3816
  "navItems": [
3816
3817
  {
3817
3818
  "href": "/sensors",
3818
- "label": "Sensors",
3819
- "icon": "layout-list"
3819
+ "icon": "layout-list",
3820
+ "label": "Sensors"
3820
3821
  },
3821
3822
  {
3822
3823
  "label": "Devices",
3823
- "icon": "cpu",
3824
- "href": "/devices"
3824
+ "href": "/devices",
3825
+ "icon": "cpu"
3825
3826
  },
3826
3827
  {
3827
3828
  "href": "/alerts",
3828
- "icon": "bell",
3829
- "label": "Alerts"
3829
+ "label": "Alerts",
3830
+ "icon": "bell"
3830
3831
  }
3831
- ],
3832
- "type": "dashboard-layout"
3832
+ ]
3833
3833
  }
3834
3834
  ]
3835
3835
  ]
@@ -3846,33 +3846,36 @@
3846
3846
  "navItems": [
3847
3847
  {
3848
3848
  "label": "Sensors",
3849
- "icon": "layout-list",
3850
- "href": "/sensors"
3849
+ "href": "/sensors",
3850
+ "icon": "layout-list"
3851
3851
  },
3852
3852
  {
3853
- "label": "Devices",
3853
+ "icon": "cpu",
3854
3854
  "href": "/devices",
3855
- "icon": "cpu"
3855
+ "label": "Devices"
3856
3856
  },
3857
3857
  {
3858
- "label": "Alerts",
3859
3858
  "href": "/alerts",
3860
- "icon": "bell"
3859
+ "icon": "bell",
3860
+ "label": "Alerts"
3861
3861
  }
3862
3862
  ],
3863
- "appName": "IoT Dashboard",
3864
3863
  "type": "dashboard-layout",
3864
+ "appName": "IoT Dashboard",
3865
3865
  "children": [
3866
3866
  {
3867
3867
  "direction": "vertical",
3868
3868
  "gap": "lg",
3869
- "type": "stack",
3870
3869
  "children": [
3871
3870
  {
3871
+ "gap": "md",
3872
+ "type": "stack",
3873
+ "direction": "horizontal",
3872
3874
  "children": [
3873
3875
  {
3874
- "direction": "horizontal",
3876
+ "type": "stack",
3875
3877
  "align": "center",
3878
+ "gap": "md",
3876
3879
  "children": [
3877
3880
  {
3878
3881
  "type": "icon",
@@ -3880,64 +3883,61 @@
3880
3883
  },
3881
3884
  {
3882
3885
  "type": "typography",
3883
- "variant": "h2",
3884
- "content": "DeviceAlert"
3886
+ "content": "DeviceAlert",
3887
+ "variant": "h2"
3885
3888
  }
3886
3889
  ],
3887
- "type": "stack",
3888
- "gap": "md"
3890
+ "direction": "horizontal"
3889
3891
  },
3890
3892
  {
3891
- "pulse": true,
3892
3893
  "status": "critical",
3893
3894
  "label": "Circuit Open",
3894
- "type": "status-dot"
3895
+ "type": "status-dot",
3896
+ "pulse": true
3895
3897
  }
3896
3898
  ],
3897
- "justify": "between",
3898
- "gap": "md",
3899
- "direction": "horizontal",
3900
- "type": "stack",
3901
- "align": "center"
3899
+ "align": "center",
3900
+ "justify": "between"
3902
3901
  },
3903
3902
  {
3904
3903
  "type": "divider"
3905
3904
  },
3906
3905
  {
3907
- "variant": "error",
3908
3906
  "type": "alert",
3907
+ "variant": "error",
3909
3908
  "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
3910
3909
  },
3911
3910
  {
3912
3911
  "cols": 2.0,
3912
+ "type": "simple-grid",
3913
3913
  "children": [
3914
3914
  {
3915
- "type": "stat-display",
3916
3915
  "value": "@entity.failureCount",
3916
+ "type": "stat-display",
3917
3917
  "label": "Failures"
3918
3918
  },
3919
3919
  {
3920
- "label": "Successes",
3920
+ "value": "@entity.successCount",
3921
3921
  "type": "stat-display",
3922
- "value": "@entity.successCount"
3922
+ "label": "Successes"
3923
3923
  }
3924
- ],
3925
- "type": "simple-grid"
3924
+ ]
3926
3925
  },
3927
3926
  {
3928
- "min": 0.0,
3929
3927
  "value": "@entity.failureCount",
3930
3928
  "max": "@entity.threshold",
3931
- "type": "meter"
3929
+ "type": "meter",
3930
+ "min": 0.0
3932
3931
  },
3933
3932
  {
3934
- "variant": "ghost",
3935
- "type": "button",
3936
- "label": "Reset",
3937
3933
  "action": "RESET",
3934
+ "label": "Reset",
3935
+ "type": "button",
3936
+ "variant": "ghost",
3938
3937
  "icon": "rotate-ccw"
3939
3938
  }
3940
- ]
3939
+ ],
3940
+ "type": "stack"
3941
3941
  }
3942
3942
  ]
3943
3943
  }
@@ -3953,96 +3953,96 @@
3953
3953
  "render-ui",
3954
3954
  "main",
3955
3955
  {
3956
- "appName": "IoT Dashboard",
3957
- "navItems": [
3958
- {
3959
- "href": "/sensors",
3960
- "icon": "layout-list",
3961
- "label": "Sensors"
3962
- },
3963
- {
3964
- "icon": "cpu",
3965
- "label": "Devices",
3966
- "href": "/devices"
3967
- },
3968
- {
3969
- "label": "Alerts",
3970
- "href": "/alerts",
3971
- "icon": "bell"
3972
- }
3973
- ],
3974
3956
  "children": [
3975
3957
  {
3976
- "direction": "vertical",
3977
3958
  "type": "stack",
3978
3959
  "gap": "lg",
3960
+ "direction": "vertical",
3979
3961
  "children": [
3980
3962
  {
3981
- "type": "stack",
3982
3963
  "gap": "md",
3983
- "direction": "horizontal",
3964
+ "type": "stack",
3984
3965
  "align": "center",
3985
3966
  "justify": "between",
3986
3967
  "children": [
3987
3968
  {
3969
+ "align": "center",
3988
3970
  "children": [
3989
3971
  {
3990
- "name": "bell",
3991
- "type": "icon"
3972
+ "type": "icon",
3973
+ "name": "bell"
3992
3974
  },
3993
3975
  {
3994
- "variant": "h2",
3995
3976
  "content": "DeviceAlert",
3996
- "type": "typography"
3977
+ "type": "typography",
3978
+ "variant": "h2"
3997
3979
  }
3998
3980
  ],
3999
- "direction": "horizontal",
4000
- "align": "center",
3981
+ "type": "stack",
4001
3982
  "gap": "md",
4002
- "type": "stack"
3983
+ "direction": "horizontal"
4003
3984
  },
4004
3985
  {
4005
3986
  "pulse": false,
4006
3987
  "type": "status-dot",
4007
- "status": "online",
4008
- "label": "Circuit Closed"
3988
+ "label": "Circuit Closed",
3989
+ "status": "online"
4009
3990
  }
4010
- ]
3991
+ ],
3992
+ "direction": "horizontal"
4011
3993
  },
4012
3994
  {
4013
3995
  "type": "divider"
4014
3996
  },
4015
3997
  {
4016
3998
  "type": "alert",
4017
- "variant": "success",
4018
- "message": "Service is healthy. All requests are being processed."
3999
+ "message": "Service is healthy. All requests are being processed.",
4000
+ "variant": "success"
4019
4001
  },
4020
4002
  {
4021
- "cols": 2.0,
4022
- "type": "simple-grid",
4023
4003
  "children": [
4024
4004
  {
4025
- "type": "stat-display",
4026
4005
  "label": "Failures",
4006
+ "type": "stat-display",
4027
4007
  "value": "@entity.failureCount"
4028
4008
  },
4029
4009
  {
4030
4010
  "type": "stat-display",
4031
- "value": "@entity.successCount",
4032
- "label": "Successes"
4011
+ "label": "Successes",
4012
+ "value": "@entity.successCount"
4033
4013
  }
4034
- ]
4014
+ ],
4015
+ "cols": 2.0,
4016
+ "type": "simple-grid"
4035
4017
  },
4036
4018
  {
4037
- "type": "meter",
4038
4019
  "value": "@entity.failureCount",
4039
4020
  "max": "@entity.threshold",
4040
- "min": 0.0
4021
+ "min": 0.0,
4022
+ "type": "meter"
4041
4023
  }
4042
4024
  ]
4043
4025
  }
4044
4026
  ],
4045
- "type": "dashboard-layout"
4027
+ "type": "dashboard-layout",
4028
+ "navItems": [
4029
+ {
4030
+ "label": "Sensors",
4031
+ "icon": "layout-list",
4032
+ "href": "/sensors"
4033
+ },
4034
+ {
4035
+ "label": "Devices",
4036
+ "icon": "cpu",
4037
+ "href": "/devices"
4038
+ },
4039
+ {
4040
+ "icon": "bell",
4041
+ "label": "Alerts",
4042
+ "href": "/alerts"
4043
+ }
4044
+ ],
4045
+ "appName": "IoT Dashboard"
4046
4046
  }
4047
4047
  ]
4048
4048
  ]
@@ -4058,39 +4058,38 @@
4058
4058
  {
4059
4059
  "children": [
4060
4060
  {
4061
- "direction": "vertical",
4062
4061
  "type": "stack",
4063
- "gap": "lg",
4062
+ "direction": "vertical",
4064
4063
  "children": [
4065
4064
  {
4066
- "type": "stack",
4067
- "gap": "md",
4068
- "justify": "between",
4069
4065
  "direction": "horizontal",
4070
4066
  "align": "center",
4067
+ "justify": "between",
4068
+ "gap": "md",
4069
+ "type": "stack",
4071
4070
  "children": [
4072
4071
  {
4073
- "align": "center",
4074
4072
  "direction": "horizontal",
4073
+ "align": "center",
4074
+ "type": "stack",
4075
+ "gap": "md",
4075
4076
  "children": [
4076
4077
  {
4077
4078
  "type": "icon",
4078
4079
  "name": "activity"
4079
4080
  },
4080
4081
  {
4081
- "type": "typography",
4082
+ "variant": "h2",
4082
4083
  "content": "DeviceAlert",
4083
- "variant": "h2"
4084
+ "type": "typography"
4084
4085
  }
4085
- ],
4086
- "type": "stack",
4087
- "gap": "md"
4086
+ ]
4088
4087
  },
4089
4088
  {
4090
- "pulse": true,
4091
- "type": "status-dot",
4092
4089
  "label": "Circuit Half-Open",
4093
- "status": "warning"
4090
+ "status": "warning",
4091
+ "type": "status-dot",
4092
+ "pulse": true
4094
4093
  }
4095
4094
  ]
4096
4095
  },
@@ -4098,48 +4097,49 @@
4098
4097
  "type": "divider"
4099
4098
  },
4100
4099
  {
4101
- "message": "Testing recovery. Limited requests are being allowed through.",
4102
4100
  "variant": "warning",
4101
+ "message": "Testing recovery. Limited requests are being allowed through.",
4103
4102
  "type": "alert"
4104
4103
  },
4105
4104
  {
4106
- "type": "simple-grid",
4107
- "cols": 2.0,
4108
4105
  "children": [
4109
4106
  {
4110
- "label": "Failures",
4111
4107
  "type": "stat-display",
4112
- "value": "@entity.failureCount"
4108
+ "value": "@entity.failureCount",
4109
+ "label": "Failures"
4113
4110
  },
4114
4111
  {
4112
+ "label": "Successes",
4115
4113
  "value": "@entity.successCount",
4116
- "type": "stat-display",
4117
- "label": "Successes"
4114
+ "type": "stat-display"
4118
4115
  }
4119
- ]
4116
+ ],
4117
+ "cols": 2.0,
4118
+ "type": "simple-grid"
4120
4119
  }
4121
- ]
4120
+ ],
4121
+ "gap": "lg"
4122
4122
  }
4123
4123
  ],
4124
4124
  "appName": "IoT Dashboard",
4125
+ "type": "dashboard-layout",
4125
4126
  "navItems": [
4126
4127
  {
4127
- "href": "/sensors",
4128
4128
  "label": "Sensors",
4129
- "icon": "layout-list"
4129
+ "icon": "layout-list",
4130
+ "href": "/sensors"
4130
4131
  },
4131
4132
  {
4132
- "label": "Devices",
4133
4133
  "icon": "cpu",
4134
+ "label": "Devices",
4134
4135
  "href": "/devices"
4135
4136
  },
4136
4137
  {
4137
4138
  "href": "/alerts",
4138
- "icon": "bell",
4139
- "label": "Alerts"
4139
+ "label": "Alerts",
4140
+ "icon": "bell"
4140
4141
  }
4141
- ],
4142
- "type": "dashboard-layout"
4142
+ ]
4143
4143
  }
4144
4144
  ]
4145
4145
  ]
@@ -4153,96 +4153,96 @@
4153
4153
  "render-ui",
4154
4154
  "main",
4155
4155
  {
4156
- "navItems": [
4157
- {
4158
- "label": "Sensors",
4159
- "icon": "layout-list",
4160
- "href": "/sensors"
4161
- },
4162
- {
4163
- "label": "Devices",
4164
- "href": "/devices",
4165
- "icon": "cpu"
4166
- },
4167
- {
4168
- "label": "Alerts",
4169
- "href": "/alerts",
4170
- "icon": "bell"
4171
- }
4172
- ],
4173
4156
  "children": [
4174
4157
  {
4175
- "direction": "vertical",
4176
- "gap": "lg",
4177
4158
  "children": [
4178
4159
  {
4179
- "gap": "md",
4180
- "align": "center",
4181
- "type": "stack",
4160
+ "justify": "between",
4161
+ "direction": "horizontal",
4182
4162
  "children": [
4183
4163
  {
4164
+ "align": "center",
4184
4165
  "children": [
4185
4166
  {
4186
4167
  "type": "icon",
4187
4168
  "name": "bell"
4188
4169
  },
4189
4170
  {
4171
+ "content": "DeviceAlert",
4190
4172
  "variant": "h2",
4191
- "type": "typography",
4192
- "content": "DeviceAlert"
4173
+ "type": "typography"
4193
4174
  }
4194
4175
  ],
4195
- "gap": "md",
4196
4176
  "direction": "horizontal",
4197
- "align": "center",
4177
+ "gap": "md",
4198
4178
  "type": "stack"
4199
4179
  },
4200
4180
  {
4201
- "status": "online",
4181
+ "label": "Circuit Closed",
4202
4182
  "pulse": false,
4203
- "type": "status-dot",
4204
- "label": "Circuit Closed"
4183
+ "status": "online",
4184
+ "type": "status-dot"
4205
4185
  }
4206
4186
  ],
4207
- "justify": "between",
4208
- "direction": "horizontal"
4187
+ "align": "center",
4188
+ "gap": "md",
4189
+ "type": "stack"
4209
4190
  },
4210
4191
  {
4211
4192
  "type": "divider"
4212
4193
  },
4213
4194
  {
4195
+ "message": "Service is healthy. All requests are being processed.",
4214
4196
  "type": "alert",
4215
- "variant": "success",
4216
- "message": "Service is healthy. All requests are being processed."
4197
+ "variant": "success"
4217
4198
  },
4218
4199
  {
4200
+ "type": "simple-grid",
4219
4201
  "children": [
4220
4202
  {
4221
- "type": "stat-display",
4203
+ "value": "@entity.failureCount",
4222
4204
  "label": "Failures",
4223
- "value": "@entity.failureCount"
4205
+ "type": "stat-display"
4224
4206
  },
4225
4207
  {
4226
- "type": "stat-display",
4227
4208
  "label": "Successes",
4209
+ "type": "stat-display",
4228
4210
  "value": "@entity.successCount"
4229
4211
  }
4230
4212
  ],
4231
- "type": "simple-grid",
4232
4213
  "cols": 2.0
4233
4214
  },
4234
4215
  {
4235
- "min": 0.0,
4236
- "type": "meter",
4237
4216
  "value": "@entity.failureCount",
4238
- "max": "@entity.threshold"
4217
+ "min": 0.0,
4218
+ "max": "@entity.threshold",
4219
+ "type": "meter"
4239
4220
  }
4240
4221
  ],
4241
- "type": "stack"
4222
+ "gap": "lg",
4223
+ "type": "stack",
4224
+ "direction": "vertical"
4242
4225
  }
4243
4226
  ],
4244
4227
  "type": "dashboard-layout",
4245
- "appName": "IoT Dashboard"
4228
+ "appName": "IoT Dashboard",
4229
+ "navItems": [
4230
+ {
4231
+ "label": "Sensors",
4232
+ "href": "/sensors",
4233
+ "icon": "layout-list"
4234
+ },
4235
+ {
4236
+ "label": "Devices",
4237
+ "icon": "cpu",
4238
+ "href": "/devices"
4239
+ },
4240
+ {
4241
+ "label": "Alerts",
4242
+ "href": "/alerts",
4243
+ "icon": "bell"
4244
+ }
4245
+ ]
4246
4246
  }
4247
4247
  ]
4248
4248
  ]
@@ -4256,50 +4256,30 @@
4256
4256
  "render-ui",
4257
4257
  "main",
4258
4258
  {
4259
- "navItems": [
4260
- {
4261
- "label": "Sensors",
4262
- "href": "/sensors",
4263
- "icon": "layout-list"
4264
- },
4265
- {
4266
- "href": "/devices",
4267
- "icon": "cpu",
4268
- "label": "Devices"
4269
- },
4270
- {
4271
- "label": "Alerts",
4272
- "icon": "bell",
4273
- "href": "/alerts"
4274
- }
4275
- ],
4276
4259
  "type": "dashboard-layout",
4277
4260
  "appName": "IoT Dashboard",
4278
4261
  "children": [
4279
4262
  {
4280
- "type": "stack",
4281
4263
  "gap": "lg",
4264
+ "direction": "vertical",
4282
4265
  "children": [
4283
4266
  {
4284
- "type": "stack",
4285
- "align": "center",
4286
- "gap": "md",
4287
4267
  "children": [
4288
4268
  {
4269
+ "type": "stack",
4270
+ "direction": "horizontal",
4271
+ "gap": "md",
4289
4272
  "children": [
4290
4273
  {
4291
4274
  "type": "icon",
4292
4275
  "name": "bell"
4293
4276
  },
4294
4277
  {
4295
- "variant": "h2",
4296
4278
  "type": "typography",
4297
- "content": "DeviceAlert"
4279
+ "content": "DeviceAlert",
4280
+ "variant": "h2"
4298
4281
  }
4299
4282
  ],
4300
- "direction": "horizontal",
4301
- "type": "stack",
4302
- "gap": "md",
4303
4283
  "align": "center"
4304
4284
  },
4305
4285
  {
@@ -4309,41 +4289,61 @@
4309
4289
  "status": "online"
4310
4290
  }
4311
4291
  ],
4292
+ "type": "stack",
4312
4293
  "direction": "horizontal",
4313
- "justify": "between"
4294
+ "align": "center",
4295
+ "justify": "between",
4296
+ "gap": "md"
4314
4297
  },
4315
4298
  {
4316
4299
  "type": "divider"
4317
4300
  },
4318
4301
  {
4302
+ "message": "Service is healthy. All requests are being processed.",
4319
4303
  "type": "alert",
4320
- "variant": "success",
4321
- "message": "Service is healthy. All requests are being processed."
4304
+ "variant": "success"
4322
4305
  },
4323
4306
  {
4307
+ "cols": 2.0,
4324
4308
  "children": [
4325
4309
  {
4326
- "label": "Failures",
4327
4310
  "value": "@entity.failureCount",
4328
- "type": "stat-display"
4311
+ "type": "stat-display",
4312
+ "label": "Failures"
4329
4313
  },
4330
4314
  {
4331
- "type": "stat-display",
4332
4315
  "label": "Successes",
4333
- "value": "@entity.successCount"
4316
+ "value": "@entity.successCount",
4317
+ "type": "stat-display"
4334
4318
  }
4335
4319
  ],
4336
- "type": "simple-grid",
4337
- "cols": 2.0
4320
+ "type": "simple-grid"
4338
4321
  },
4339
4322
  {
4340
- "value": "@entity.failureCount",
4341
- "min": 0.0,
4323
+ "type": "meter",
4342
4324
  "max": "@entity.threshold",
4343
- "type": "meter"
4325
+ "min": 0.0,
4326
+ "value": "@entity.failureCount"
4344
4327
  }
4345
4328
  ],
4346
- "direction": "vertical"
4329
+ "type": "stack"
4330
+ }
4331
+ ],
4332
+ "navItems": [
4333
+ {
4334
+ "icon": "layout-list",
4335
+ "label": "Sensors",
4336
+ "href": "/sensors"
4337
+ },
4338
+ {
4339
+ "icon": "cpu",
4340
+ "label": "Devices",
4341
+ "href": "/devices"
4342
+ },
4343
+ {
4344
+ "href": "/alerts",
4345
+ "label": "Alerts",
4346
+ "icon": "bell"
4347
4347
  }
4348
4348
  ]
4349
4349
  }
@@ -4361,19 +4361,21 @@
4361
4361
  {
4362
4362
  "children": [
4363
4363
  {
4364
- "gap": "lg",
4365
4364
  "type": "stack",
4365
+ "gap": "lg",
4366
+ "direction": "vertical",
4366
4367
  "children": [
4367
4368
  {
4368
- "type": "stack",
4369
- "justify": "between",
4369
+ "gap": "md",
4370
4370
  "direction": "horizontal",
4371
+ "type": "stack",
4371
4372
  "align": "center",
4372
4373
  "children": [
4373
4374
  {
4375
+ "type": "stack",
4374
4376
  "direction": "horizontal",
4375
- "align": "center",
4376
4377
  "gap": "md",
4378
+ "align": "center",
4377
4379
  "children": [
4378
4380
  {
4379
4381
  "name": "alert-triangle",
@@ -4381,81 +4383,79 @@
4381
4383
  },
4382
4384
  {
4383
4385
  "type": "typography",
4384
- "variant": "h2",
4385
- "content": "DeviceAlert"
4386
+ "content": "DeviceAlert",
4387
+ "variant": "h2"
4386
4388
  }
4387
- ],
4388
- "type": "stack"
4389
+ ]
4389
4390
  },
4390
4391
  {
4392
+ "label": "Circuit Open",
4391
4393
  "type": "status-dot",
4392
4394
  "status": "critical",
4393
- "label": "Circuit Open",
4394
4395
  "pulse": true
4395
4396
  }
4396
4397
  ],
4397
- "gap": "md"
4398
+ "justify": "between"
4398
4399
  },
4399
4400
  {
4400
4401
  "type": "divider"
4401
4402
  },
4402
4403
  {
4403
- "message": "Circuit is open. Requests are being rejected to prevent cascading failures.",
4404
4404
  "type": "alert",
4405
- "variant": "error"
4405
+ "variant": "error",
4406
+ "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
4406
4407
  },
4407
4408
  {
4409
+ "type": "simple-grid",
4410
+ "cols": 2.0,
4408
4411
  "children": [
4409
4412
  {
4410
- "label": "Failures",
4411
4413
  "value": "@entity.failureCount",
4414
+ "label": "Failures",
4412
4415
  "type": "stat-display"
4413
4416
  },
4414
4417
  {
4415
- "value": "@entity.successCount",
4416
4418
  "type": "stat-display",
4417
- "label": "Successes"
4419
+ "label": "Successes",
4420
+ "value": "@entity.successCount"
4418
4421
  }
4419
- ],
4420
- "type": "simple-grid",
4421
- "cols": 2.0
4422
+ ]
4422
4423
  },
4423
4424
  {
4424
- "max": "@entity.threshold",
4425
- "value": "@entity.failureCount",
4426
4425
  "min": 0.0,
4427
- "type": "meter"
4426
+ "value": "@entity.failureCount",
4427
+ "type": "meter",
4428
+ "max": "@entity.threshold"
4428
4429
  },
4429
4430
  {
4430
- "type": "button",
4431
4431
  "label": "Reset",
4432
4432
  "variant": "ghost",
4433
4433
  "icon": "rotate-ccw",
4434
+ "type": "button",
4434
4435
  "action": "RESET"
4435
4436
  }
4436
- ],
4437
- "direction": "vertical"
4437
+ ]
4438
4438
  }
4439
4439
  ],
4440
- "type": "dashboard-layout",
4440
+ "appName": "IoT Dashboard",
4441
4441
  "navItems": [
4442
4442
  {
4443
- "href": "/sensors",
4444
4443
  "icon": "layout-list",
4445
- "label": "Sensors"
4444
+ "label": "Sensors",
4445
+ "href": "/sensors"
4446
4446
  },
4447
4447
  {
4448
4448
  "label": "Devices",
4449
- "href": "/devices",
4450
- "icon": "cpu"
4449
+ "icon": "cpu",
4450
+ "href": "/devices"
4451
4451
  },
4452
4452
  {
4453
+ "icon": "bell",
4453
4454
  "href": "/alerts",
4454
- "label": "Alerts",
4455
- "icon": "bell"
4455
+ "label": "Alerts"
4456
4456
  }
4457
4457
  ],
4458
- "appName": "IoT Dashboard"
4458
+ "type": "dashboard-layout"
4459
4459
  }
4460
4460
  ]
4461
4461
  ]
@@ -4469,6 +4469,8 @@
4469
4469
  "render-ui",
4470
4470
  "main",
4471
4471
  {
4472
+ "appName": "IoT Dashboard",
4473
+ "type": "dashboard-layout",
4472
4474
  "navItems": [
4473
4475
  {
4474
4476
  "label": "Sensors",
@@ -4476,89 +4478,87 @@
4476
4478
  "icon": "layout-list"
4477
4479
  },
4478
4480
  {
4479
- "href": "/devices",
4480
4481
  "label": "Devices",
4482
+ "href": "/devices",
4481
4483
  "icon": "cpu"
4482
4484
  },
4483
4485
  {
4484
- "icon": "bell",
4486
+ "href": "/alerts",
4485
4487
  "label": "Alerts",
4486
- "href": "/alerts"
4488
+ "icon": "bell"
4487
4489
  }
4488
4490
  ],
4489
- "type": "dashboard-layout",
4490
4491
  "children": [
4491
4492
  {
4493
+ "direction": "vertical",
4494
+ "type": "stack",
4492
4495
  "gap": "lg",
4493
4496
  "children": [
4494
4497
  {
4495
- "direction": "horizontal",
4496
- "gap": "md",
4497
- "type": "stack",
4498
4498
  "align": "center",
4499
4499
  "justify": "between",
4500
4500
  "children": [
4501
4501
  {
4502
- "type": "stack",
4503
4502
  "direction": "horizontal",
4504
4503
  "gap": "md",
4504
+ "type": "stack",
4505
+ "align": "center",
4505
4506
  "children": [
4506
4507
  {
4507
- "name": "bell",
4508
- "type": "icon"
4508
+ "type": "icon",
4509
+ "name": "bell"
4509
4510
  },
4510
4511
  {
4511
4512
  "type": "typography",
4512
4513
  "variant": "h2",
4513
4514
  "content": "DeviceAlert"
4514
4515
  }
4515
- ],
4516
- "align": "center"
4516
+ ]
4517
4517
  },
4518
4518
  {
4519
4519
  "pulse": false,
4520
- "label": "Circuit Closed",
4521
4520
  "type": "status-dot",
4522
- "status": "online"
4521
+ "status": "online",
4522
+ "label": "Circuit Closed"
4523
4523
  }
4524
- ]
4524
+ ],
4525
+ "gap": "md",
4526
+ "type": "stack",
4527
+ "direction": "horizontal"
4525
4528
  },
4526
4529
  {
4527
4530
  "type": "divider"
4528
4531
  },
4529
4532
  {
4533
+ "variant": "success",
4530
4534
  "message": "Service is healthy. All requests are being processed.",
4531
- "type": "alert",
4532
- "variant": "success"
4535
+ "type": "alert"
4533
4536
  },
4534
4537
  {
4535
- "type": "simple-grid",
4536
4538
  "cols": 2.0,
4537
4539
  "children": [
4538
4540
  {
4539
- "type": "stat-display",
4540
4541
  "value": "@entity.failureCount",
4541
- "label": "Failures"
4542
+ "label": "Failures",
4543
+ "type": "stat-display"
4542
4544
  },
4543
4545
  {
4544
4546
  "type": "stat-display",
4545
4547
  "label": "Successes",
4546
4548
  "value": "@entity.successCount"
4547
4549
  }
4548
- ]
4550
+ ],
4551
+ "type": "simple-grid"
4549
4552
  },
4550
4553
  {
4551
- "type": "meter",
4552
- "max": "@entity.threshold",
4554
+ "value": "@entity.failureCount",
4553
4555
  "min": 0.0,
4554
- "value": "@entity.failureCount"
4556
+ "type": "meter",
4557
+ "max": "@entity.threshold"
4555
4558
  }
4556
- ],
4557
- "direction": "vertical",
4558
- "type": "stack"
4559
+ ]
4559
4560
  }
4560
- ],
4561
- "appName": "IoT Dashboard"
4561
+ ]
4562
4562
  }
4563
4563
  ]
4564
4564
  ]