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