@almadar/std 14.16.0 → 14.17.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 (121) hide show
  1. package/behaviors/registry/app/atoms/std-branching-logic.orb +84 -84
  2. package/behaviors/registry/app/atoms/std-checkin.orb +60 -60
  3. package/behaviors/registry/app/atoms/std-dunning.orb +44 -44
  4. package/behaviors/registry/app/atoms/std-event.orb +62 -62
  5. package/behaviors/registry/app/atoms/std-flag.orb +72 -72
  6. package/behaviors/registry/app/atoms/std-geosearch.orb +29 -29
  7. package/behaviors/registry/app/atoms/std-image-upload-multi.orb +54 -56
  8. package/behaviors/registry/app/atoms/std-invoice.orb +124 -124
  9. package/behaviors/registry/app/atoms/std-kitchen-display.orb +58 -58
  10. package/behaviors/registry/app/atoms/std-menu.orb +44 -44
  11. package/behaviors/registry/app/atoms/std-mod-queue.orb +38 -38
  12. package/behaviors/registry/app/atoms/std-modifier-group.orb +56 -56
  13. package/behaviors/registry/app/atoms/std-page-tree.orb +55 -55
  14. package/behaviors/registry/app/atoms/std-payout-ledger.orb +66 -66
  15. package/behaviors/registry/app/atoms/std-question-bank.orb +62 -62
  16. package/behaviors/registry/app/atoms/std-rating-review.orb +67 -67
  17. package/behaviors/registry/app/atoms/std-recurring-charge.orb +74 -74
  18. package/behaviors/registry/app/atoms/std-response-collector.orb +44 -44
  19. package/behaviors/registry/app/atoms/std-rich-editor.orb +68 -68
  20. package/behaviors/registry/app/atoms/std-route-optimize.orb +49 -49
  21. package/behaviors/registry/app/atoms/std-saved-search.orb +72 -72
  22. package/behaviors/registry/app/atoms/std-signature-capture.orb +86 -86
  23. package/behaviors/registry/app/atoms/std-table-map.orb +46 -46
  24. package/behaviors/registry/app/atoms/std-tag-taxonomy.orb +73 -92
  25. package/behaviors/registry/app/atoms/std-technician-dispatch.orb +42 -42
  26. package/behaviors/registry/app/atoms/std-thread.orb +59 -59
  27. package/behaviors/registry/app/atoms/std-ticket-tier.orb +53 -53
  28. package/behaviors/registry/app/atoms/std-trial.orb +67 -67
  29. package/behaviors/registry/app/atoms/std-version-history.orb +93 -93
  30. package/behaviors/registry/app/atoms/std-vote.orb +40 -40
  31. package/behaviors/registry/app/atoms/std-waitlist.orb +50 -50
  32. package/behaviors/registry/app/atoms/std-work-order.orb +48 -48
  33. package/behaviors/registry/app/organisms/std-api-gateway.orb +201 -201
  34. package/behaviors/registry/app/organisms/std-booking-system.orb +676 -676
  35. package/behaviors/registry/app/organisms/std-cicd-pipeline.orb +285 -285
  36. package/behaviors/registry/app/organisms/std-cms.orb +265 -265
  37. package/behaviors/registry/app/organisms/std-coding-academy.orb +179 -179
  38. package/behaviors/registry/app/organisms/std-crm.orb +258 -258
  39. package/behaviors/registry/app/organisms/std-devops-dashboard.orb +403 -403
  40. package/behaviors/registry/app/organisms/std-ecommerce.orb +681 -681
  41. package/behaviors/registry/app/organisms/std-event-ticketing.orb +217 -217
  42. package/behaviors/registry/app/organisms/std-field-service.orb +190 -190
  43. package/behaviors/registry/app/organisms/std-finance-tracker.orb +205 -205
  44. package/behaviors/registry/app/organisms/std-forum.orb +141 -141
  45. package/behaviors/registry/app/organisms/std-healthcare.orb +540 -540
  46. package/behaviors/registry/app/organisms/std-helpdesk.orb +175 -175
  47. package/behaviors/registry/app/organisms/std-hr-portal.orb +444 -444
  48. package/behaviors/registry/app/organisms/std-iot-dashboard.orb +344 -344
  49. package/behaviors/registry/app/organisms/std-listings.orb +157 -157
  50. package/behaviors/registry/app/organisms/std-lms.orb +422 -422
  51. package/behaviors/registry/app/organisms/std-marketplace.orb +232 -234
  52. package/behaviors/registry/app/organisms/std-project-manager.orb +193 -193
  53. package/behaviors/registry/app/organisms/std-realtime-chat.orb +248 -248
  54. package/behaviors/registry/app/organisms/std-restaurant-pos.orb +134 -134
  55. package/behaviors/registry/app/organisms/std-social-feed.orb +156 -156
  56. package/behaviors/registry/app/organisms/std-subscription-billing.orb +183 -183
  57. package/behaviors/registry/app/organisms/std-survey.orb +122 -122
  58. package/behaviors/registry/app/organisms/std-trading-dashboard.orb +274 -274
  59. package/behaviors/registry/app/organisms/std-wiki.orb +144 -144
  60. package/dist/behaviors/behaviors-registry.json +1 -1
  61. package/dist/behaviors/registry/app/atoms/std-branching-logic.orb +84 -84
  62. package/dist/behaviors/registry/app/atoms/std-checkin.orb +60 -60
  63. package/dist/behaviors/registry/app/atoms/std-dunning.orb +44 -44
  64. package/dist/behaviors/registry/app/atoms/std-event.orb +62 -62
  65. package/dist/behaviors/registry/app/atoms/std-flag.orb +72 -72
  66. package/dist/behaviors/registry/app/atoms/std-geosearch.orb +29 -29
  67. package/dist/behaviors/registry/app/atoms/std-image-upload-multi.orb +54 -56
  68. package/dist/behaviors/registry/app/atoms/std-invoice.orb +124 -124
  69. package/dist/behaviors/registry/app/atoms/std-kitchen-display.orb +58 -58
  70. package/dist/behaviors/registry/app/atoms/std-menu.orb +44 -44
  71. package/dist/behaviors/registry/app/atoms/std-mod-queue.orb +38 -38
  72. package/dist/behaviors/registry/app/atoms/std-modifier-group.orb +56 -56
  73. package/dist/behaviors/registry/app/atoms/std-page-tree.orb +55 -55
  74. package/dist/behaviors/registry/app/atoms/std-payout-ledger.orb +66 -66
  75. package/dist/behaviors/registry/app/atoms/std-question-bank.orb +62 -62
  76. package/dist/behaviors/registry/app/atoms/std-rating-review.orb +67 -67
  77. package/dist/behaviors/registry/app/atoms/std-recurring-charge.orb +74 -74
  78. package/dist/behaviors/registry/app/atoms/std-response-collector.orb +44 -44
  79. package/dist/behaviors/registry/app/atoms/std-rich-editor.orb +68 -68
  80. package/dist/behaviors/registry/app/atoms/std-route-optimize.orb +49 -49
  81. package/dist/behaviors/registry/app/atoms/std-saved-search.orb +72 -72
  82. package/dist/behaviors/registry/app/atoms/std-signature-capture.orb +86 -86
  83. package/dist/behaviors/registry/app/atoms/std-table-map.orb +46 -46
  84. package/dist/behaviors/registry/app/atoms/std-tag-taxonomy.orb +73 -92
  85. package/dist/behaviors/registry/app/atoms/std-technician-dispatch.orb +42 -42
  86. package/dist/behaviors/registry/app/atoms/std-thread.orb +59 -59
  87. package/dist/behaviors/registry/app/atoms/std-ticket-tier.orb +53 -53
  88. package/dist/behaviors/registry/app/atoms/std-trial.orb +67 -67
  89. package/dist/behaviors/registry/app/atoms/std-version-history.orb +93 -93
  90. package/dist/behaviors/registry/app/atoms/std-vote.orb +40 -40
  91. package/dist/behaviors/registry/app/atoms/std-waitlist.orb +50 -50
  92. package/dist/behaviors/registry/app/atoms/std-work-order.orb +48 -48
  93. package/dist/behaviors/registry/app/organisms/std-api-gateway.orb +201 -201
  94. package/dist/behaviors/registry/app/organisms/std-booking-system.orb +676 -676
  95. package/dist/behaviors/registry/app/organisms/std-cicd-pipeline.orb +285 -285
  96. package/dist/behaviors/registry/app/organisms/std-cms.orb +265 -265
  97. package/dist/behaviors/registry/app/organisms/std-coding-academy.orb +179 -179
  98. package/dist/behaviors/registry/app/organisms/std-crm.orb +258 -258
  99. package/dist/behaviors/registry/app/organisms/std-devops-dashboard.orb +403 -403
  100. package/dist/behaviors/registry/app/organisms/std-ecommerce.orb +681 -681
  101. package/dist/behaviors/registry/app/organisms/std-event-ticketing.orb +217 -217
  102. package/dist/behaviors/registry/app/organisms/std-field-service.orb +190 -190
  103. package/dist/behaviors/registry/app/organisms/std-finance-tracker.orb +205 -205
  104. package/dist/behaviors/registry/app/organisms/std-forum.orb +141 -141
  105. package/dist/behaviors/registry/app/organisms/std-healthcare.orb +540 -540
  106. package/dist/behaviors/registry/app/organisms/std-helpdesk.orb +175 -175
  107. package/dist/behaviors/registry/app/organisms/std-hr-portal.orb +444 -444
  108. package/dist/behaviors/registry/app/organisms/std-iot-dashboard.orb +344 -344
  109. package/dist/behaviors/registry/app/organisms/std-listings.orb +157 -157
  110. package/dist/behaviors/registry/app/organisms/std-lms.orb +422 -422
  111. package/dist/behaviors/registry/app/organisms/std-marketplace.orb +232 -234
  112. package/dist/behaviors/registry/app/organisms/std-project-manager.orb +193 -193
  113. package/dist/behaviors/registry/app/organisms/std-realtime-chat.orb +248 -248
  114. package/dist/behaviors/registry/app/organisms/std-restaurant-pos.orb +134 -134
  115. package/dist/behaviors/registry/app/organisms/std-social-feed.orb +156 -156
  116. package/dist/behaviors/registry/app/organisms/std-subscription-billing.orb +183 -183
  117. package/dist/behaviors/registry/app/organisms/std-survey.orb +122 -122
  118. package/dist/behaviors/registry/app/organisms/std-trading-dashboard.orb +274 -274
  119. package/dist/behaviors/registry/app/organisms/std-wiki.orb +144 -144
  120. package/dist/behaviors-registry.json +1 -1
  121. package/package.json +1 -1
@@ -71,16 +71,17 @@
71
71
  "name": "SensorAppLayout",
72
72
  "linkedEntity": "SensorReading",
73
73
  "config": {
74
+ "searchEvent": "SENSOR_SEARCH",
74
75
  "navItems": [
75
76
  {
76
- "icon": "layout-list",
77
77
  "href": "/sensors",
78
+ "icon": "layout-list",
78
79
  "label": "Sensors"
79
80
  },
80
81
  {
81
- "href": "/devices",
82
82
  "label": "Devices",
83
- "icon": "cpu"
83
+ "icon": "cpu",
84
+ "href": "/devices"
84
85
  },
85
86
  {
86
87
  "label": "Alerts",
@@ -88,10 +89,9 @@
88
89
  "href": "/alerts"
89
90
  }
90
91
  ],
91
- "searchEvent": "SENSOR_SEARCH",
92
+ "notificationClickEvent": "SENSOR_NOTIFICATIONS_OPEN",
92
93
  "contentTrait": "@trait.SensorCatalog",
93
94
  "notifications": [],
94
- "notificationClickEvent": "SENSOR_NOTIFICATIONS_OPEN",
95
95
  "appName": "IoT Dashboard"
96
96
  },
97
97
  "events": {
@@ -125,15 +125,13 @@
125
125
  "render-ui",
126
126
  "main",
127
127
  {
128
- "type": "stack",
129
- "gap": "lg",
130
128
  "children": [
131
129
  {
132
130
  "gap": "md",
133
- "type": "stack",
134
131
  "justify": "between",
135
- "direction": "horizontal",
132
+ "type": "stack",
136
133
  "align": "center",
134
+ "direction": "horizontal",
137
135
  "children": [
138
136
  {
139
137
  "type": "stack",
@@ -143,14 +141,14 @@
143
141
  "name": "thermometer"
144
142
  },
145
143
  {
146
- "variant": "h2",
147
144
  "type": "typography",
148
- "content": "Sensor Readings"
145
+ "content": "Sensor Readings",
146
+ "variant": "h2"
149
147
  }
150
148
  ],
151
149
  "direction": "horizontal",
152
- "align": "center",
153
- "gap": "sm"
150
+ "gap": "sm",
151
+ "align": "center"
154
152
  }
155
153
  ]
156
154
  },
@@ -161,16 +159,18 @@
161
159
  "@trait.SensorGraphs",
162
160
  {
163
161
  "type": "meter",
164
- "label": "Latest reading vs threshold",
162
+ "value": "@entity.value",
165
163
  "min": 0.0,
166
164
  "max": "@entity.threshold",
167
- "value": "@entity.value"
165
+ "label": "Latest reading vs threshold"
168
166
  },
169
167
  {
170
168
  "type": "divider"
171
169
  },
172
170
  "@trait.SensorBrowseList"
173
171
  ],
172
+ "type": "stack",
173
+ "gap": "lg",
174
174
  "direction": "vertical"
175
175
  }
176
176
  ]
@@ -186,6 +186,8 @@
186
186
  "config": {
187
187
  "metrics": [
188
188
  {
189
+ "label": "Active Sensors",
190
+ "variant": "primary",
189
191
  "filter": [
190
192
  "fn",
191
193
  "row",
@@ -195,22 +197,19 @@
195
197
  ""
196
198
  ]
197
199
  ],
198
- "icon": "activity",
199
- "label": "Active Sensors",
200
200
  "format": "number",
201
- "aggregation": "count",
202
- "variant": "primary"
201
+ "icon": "activity",
202
+ "aggregation": "count"
203
203
  },
204
204
  {
205
- "aggregation": "average",
206
- "icon": "trending-up",
207
- "format": "number",
208
205
  "variant": "success",
206
+ "format": "number",
207
+ "field": "value",
209
208
  "label": "Avg Reading",
210
- "field": "value"
209
+ "icon": "trending-up",
210
+ "aggregation": "average"
211
211
  },
212
212
  {
213
- "label": "Anomalies",
214
213
  "filter": [
215
214
  "fn",
216
215
  "row",
@@ -220,10 +219,11 @@
220
219
  "@row.threshold"
221
220
  ]
222
221
  ],
222
+ "variant": "warning",
223
223
  "aggregation": "count",
224
- "icon": "alert-triangle",
224
+ "label": "Anomalies",
225
225
  "format": "number",
226
- "variant": "warning"
226
+ "icon": "alert-triangle"
227
227
  }
228
228
  ],
229
229
  "title": "Sensors"
@@ -243,13 +243,13 @@
243
243
  "ref": "Graphs.traits.GraphItemGraph",
244
244
  "name": "SensorGraphs",
245
245
  "config": {
246
- "chartType": "line",
247
246
  "showLegend": true,
247
+ "subtitle": "Sensor values across time",
248
+ "chartType": "line",
248
249
  "dateField": "timestamp",
249
250
  "valueField": "value",
250
- "height": 240.0,
251
251
  "title": "Readings over time",
252
- "subtitle": "Sensor values across time"
252
+ "height": 240.0
253
253
  },
254
254
  "listens": [
255
255
  {
@@ -267,17 +267,18 @@
267
267
  "name": "SensorBrowseList",
268
268
  "linkedEntity": "SensorReading",
269
269
  "config": {
270
+ "gap": "sm",
270
271
  "fields": [
271
272
  {
272
273
  "variant": "h4",
273
274
  "name": "sensorId",
274
- "label": "Sensor",
275
- "icon": "thermometer"
275
+ "icon": "thermometer",
276
+ "label": "Sensor"
276
277
  },
277
278
  {
278
- "name": "type",
279
+ "label": "Type",
279
280
  "variant": "badge",
280
- "label": "Type"
281
+ "name": "type"
281
282
  },
282
283
  {
283
284
  "format": "number",
@@ -286,18 +287,17 @@
286
287
  "variant": "h4"
287
288
  },
288
289
  {
290
+ "variant": "caption",
289
291
  "name": "unit",
290
- "label": "Unit",
291
- "variant": "caption"
292
+ "label": "Unit"
292
293
  },
293
294
  {
294
- "name": "timestamp",
295
+ "label": "Timestamp",
295
296
  "variant": "caption",
296
- "format": "date",
297
- "label": "Timestamp"
297
+ "name": "timestamp",
298
+ "format": "date"
298
299
  }
299
300
  ],
300
- "gap": "sm",
301
301
  "cols": 1.0
302
302
  }
303
303
  }
@@ -400,32 +400,32 @@
400
400
  "ref": "AppShell.traits.AppLayout",
401
401
  "name": "DeviceAppLayout",
402
402
  "config": {
403
- "contentTrait": "@trait.DeviceCatalog",
404
- "notifications": [],
405
403
  "searchEvent": "DEVICE_SEARCH",
406
- "appName": "IoT Dashboard",
404
+ "notifications": [],
407
405
  "notificationClickEvent": "DEVICE_NOTIFICATIONS_OPEN",
406
+ "appName": "IoT Dashboard",
408
407
  "navItems": [
409
408
  {
410
- "href": "/sensors",
411
409
  "label": "Sensors",
410
+ "href": "/sensors",
412
411
  "icon": "layout-list"
413
412
  },
414
413
  {
414
+ "label": "Devices",
415
415
  "href": "/devices",
416
- "icon": "cpu",
417
- "label": "Devices"
416
+ "icon": "cpu"
418
417
  },
419
418
  {
419
+ "href": "/alerts",
420
420
  "label": "Alerts",
421
- "icon": "bell",
422
- "href": "/alerts"
421
+ "icon": "bell"
423
422
  }
424
- ]
423
+ ],
424
+ "contentTrait": "@trait.DeviceCatalog"
425
425
  },
426
426
  "events": {
427
- "SEARCH": "DEVICE_SEARCH",
428
- "NOTIFY_CLICK": "DEVICE_NOTIFICATIONS_OPEN"
427
+ "NOTIFY_CLICK": "DEVICE_NOTIFICATIONS_OPEN",
428
+ "SEARCH": "DEVICE_SEARCH"
429
429
  }
430
430
  },
431
431
  {
@@ -508,62 +508,62 @@
508
508
  "render-ui",
509
509
  "main",
510
510
  {
511
+ "gap": "lg",
511
512
  "direction": "vertical",
512
513
  "type": "stack",
513
- "gap": "lg",
514
514
  "children": [
515
515
  {
516
+ "direction": "horizontal",
517
+ "justify": "between",
516
518
  "gap": "md",
519
+ "type": "stack",
520
+ "align": "center",
517
521
  "children": [
518
522
  {
519
523
  "type": "stack",
520
- "direction": "horizontal",
521
- "gap": "sm",
522
524
  "align": "center",
523
525
  "children": [
524
526
  {
525
- "name": "cpu",
526
- "type": "icon"
527
+ "type": "icon",
528
+ "name": "cpu"
527
529
  },
528
530
  {
529
- "type": "typography",
530
531
  "content": "Devices",
531
- "variant": "h2"
532
+ "variant": "h2",
533
+ "type": "typography"
532
534
  }
533
- ]
535
+ ],
536
+ "direction": "horizontal",
537
+ "gap": "sm"
534
538
  },
535
539
  {
536
- "type": "stack",
540
+ "direction": "horizontal",
537
541
  "gap": "sm",
542
+ "type": "stack",
538
543
  "children": [
539
544
  {
540
545
  "action": "CREATE",
541
- "label": "Create Device",
542
546
  "type": "button",
547
+ "icon": "plus",
543
548
  "variant": "primary",
544
- "icon": "plus"
549
+ "label": "Create Device"
545
550
  }
546
- ],
547
- "direction": "horizontal"
551
+ ]
548
552
  }
549
- ],
550
- "type": "stack",
551
- "align": "center",
552
- "direction": "horizontal",
553
- "justify": "between"
553
+ ]
554
554
  },
555
555
  {
556
556
  "type": "divider"
557
557
  },
558
558
  {
559
+ "type": "stack",
559
560
  "gap": "md",
560
- "align": "center",
561
561
  "direction": "horizontal",
562
+ "align": "center",
562
563
  "children": [
563
564
  "@trait.DeviceSearch",
564
565
  "@trait.DeviceFilter"
565
- ],
566
- "type": "stack"
566
+ ]
567
567
  },
568
568
  {
569
569
  "type": "divider"
@@ -588,13 +588,10 @@
588
588
  "render-ui",
589
589
  "main",
590
590
  {
591
- "className": "py-8",
592
- "align": "center",
593
- "type": "stack",
594
591
  "children": [
595
592
  {
596
- "name": "bell",
597
- "type": "icon"
593
+ "type": "icon",
594
+ "name": "bell"
598
595
  },
599
596
  {
600
597
  "type": "typography",
@@ -602,18 +599,21 @@
602
599
  "content": "No notifications"
603
600
  },
604
601
  {
605
- "color": "muted",
606
- "content": "You're all caught up.",
602
+ "variant": "caption",
607
603
  "type": "typography",
608
- "variant": "caption"
604
+ "content": "You're all caught up.",
605
+ "color": "muted"
609
606
  },
610
607
  {
608
+ "type": "button",
611
609
  "action": "INIT",
612
610
  "label": "Back",
613
- "variant": "ghost",
614
- "type": "button"
611
+ "variant": "ghost"
615
612
  }
616
613
  ],
614
+ "align": "center",
615
+ "className": "py-8",
616
+ "type": "stack",
617
617
  "direction": "vertical",
618
618
  "gap": "md"
619
619
  }
@@ -628,14 +628,15 @@
628
628
  "ref": "Search.traits.SearchResultSearch",
629
629
  "name": "DeviceSearch",
630
630
  "config": {
631
- "placeholder": "Search devices…",
632
- "event": "DEVICE_SEARCH"
631
+ "event": "DEVICE_SEARCH",
632
+ "placeholder": "Search devices…"
633
633
  }
634
634
  },
635
635
  {
636
636
  "ref": "Filter.traits.FilterTargetFilter",
637
637
  "name": "DeviceFilter",
638
638
  "config": {
639
+ "event": "DEVICE_FILTER",
639
640
  "filters": [
640
641
  {
641
642
  "label": "Status",
@@ -644,22 +645,21 @@
644
645
  "offline",
645
646
  "maintenance"
646
647
  ],
647
- "field": "status",
648
- "filterType": "select"
648
+ "filterType": "select",
649
+ "field": "status"
649
650
  },
650
651
  {
651
- "label": "Type",
652
- "field": "type",
653
- "filterType": "select",
654
652
  "options": [
655
653
  "sensor",
656
654
  "gateway",
657
655
  "actuator",
658
656
  "controller"
659
- ]
657
+ ],
658
+ "filterType": "select",
659
+ "field": "type",
660
+ "label": "Type"
660
661
  }
661
- ],
662
- "event": "DEVICE_FILTER"
662
+ ]
663
663
  }
664
664
  },
665
665
  {
@@ -667,29 +667,29 @@
667
667
  "name": "DeviceBrowseList",
668
668
  "linkedEntity": "Device",
669
669
  "config": {
670
+ "cols": 3.0,
671
+ "gap": "md",
670
672
  "fields": [
671
673
  {
674
+ "icon": "cpu",
672
675
  "name": "name",
673
- "variant": "h3",
674
- "icon": "cpu"
676
+ "variant": "h3"
675
677
  },
676
678
  {
677
679
  "name": "status",
678
680
  "variant": "badge"
679
681
  },
680
682
  {
681
- "variant": "body",
682
- "name": "type"
683
+ "name": "type",
684
+ "variant": "body"
683
685
  },
684
686
  {
687
+ "name": "lastSeen",
685
688
  "label": "Last Seen",
686
689
  "format": "date",
687
- "name": "lastSeen",
688
690
  "variant": "caption"
689
691
  }
690
692
  ],
691
- "gap": "md",
692
- "cols": 3.0,
693
693
  "itemActions": [
694
694
  {
695
695
  "label": "View",
@@ -697,13 +697,13 @@
697
697
  "variant": "ghost"
698
698
  },
699
699
  {
700
+ "label": "Edit",
700
701
  "event": "EDIT",
701
- "variant": "ghost",
702
- "label": "Edit"
702
+ "variant": "ghost"
703
703
  },
704
704
  {
705
- "label": "Delete",
706
705
  "event": "DELETE",
706
+ "label": "Delete",
707
707
  "variant": "danger"
708
708
  }
709
709
  ]
@@ -756,15 +756,15 @@
756
756
  "name": "DeviceCreate",
757
757
  "linkedEntity": "Device",
758
758
  "config": {
759
- "mode": "create",
760
- "icon": "plus-circle",
761
- "title": "Create Device",
762
759
  "fields": [
763
760
  "name",
764
761
  "type",
765
762
  "status",
766
763
  "lastSeen"
767
- ]
764
+ ],
765
+ "title": "Create Device",
766
+ "mode": "create",
767
+ "icon": "plus-circle"
768
768
  },
769
769
  "events": {
770
770
  "OPEN": "CREATE"
@@ -786,8 +786,8 @@
786
786
  "linkedEntity": "Device",
787
787
  "config": {
788
788
  "icon": "edit",
789
- "title": "Edit Device",
790
789
  "mode": "edit",
790
+ "title": "Edit Device",
791
791
  "fields": [
792
792
  "name",
793
793
  "type",
@@ -814,7 +814,6 @@
814
814
  "name": "DeviceView",
815
815
  "linkedEntity": "Device",
816
816
  "config": {
817
- "icon": "eye",
818
817
  "title": "View Device",
819
818
  "fields": [
820
819
  "name",
@@ -822,7 +821,8 @@
822
821
  "status",
823
822
  "lastSeen"
824
823
  ],
825
- "mode": "edit"
824
+ "mode": "edit",
825
+ "icon": "eye"
826
826
  },
827
827
  "events": {
828
828
  "OPEN": "VIEW"
@@ -843,10 +843,10 @@
843
843
  "name": "DeviceDelete",
844
844
  "linkedEntity": "Device",
845
845
  "config": {
846
- "alertMessage": "This action cannot be undone.",
847
846
  "title": "Delete Device",
847
+ "confirmLabel": "Delete",
848
848
  "icon": "alert-triangle",
849
- "confirmLabel": "Delete"
849
+ "alertMessage": "This action cannot be undone."
850
850
  },
851
851
  "events": {
852
852
  "CONFIRM": "CONFIRM_DELETE",
@@ -1173,6 +1173,10 @@
1173
1173
  "name": "DeviceAlertAppLayout",
1174
1174
  "linkedEntity": "DeviceAlert",
1175
1175
  "config": {
1176
+ "contentTrait": "@trait.AlertCatalog",
1177
+ "notificationClickEvent": "ALERT_NOTIFICATIONS_OPEN",
1178
+ "notifications": [],
1179
+ "appName": "IoT Dashboard",
1176
1180
  "navItems": [
1177
1181
  {
1178
1182
  "href": "/sensors",
@@ -1180,25 +1184,21 @@
1180
1184
  "label": "Sensors"
1181
1185
  },
1182
1186
  {
1183
- "icon": "cpu",
1187
+ "label": "Devices",
1184
1188
  "href": "/devices",
1185
- "label": "Devices"
1189
+ "icon": "cpu"
1186
1190
  },
1187
1191
  {
1192
+ "href": "/alerts",
1188
1193
  "icon": "bell",
1189
- "label": "Alerts",
1190
- "href": "/alerts"
1194
+ "label": "Alerts"
1191
1195
  }
1192
1196
  ],
1193
- "appName": "IoT Dashboard",
1194
- "notifications": [],
1195
- "notificationClickEvent": "ALERT_NOTIFICATIONS_OPEN",
1196
- "contentTrait": "@trait.AlertCatalog",
1197
1197
  "searchEvent": "ALERT_SEARCH"
1198
1198
  },
1199
1199
  "events": {
1200
- "SEARCH": "ALERT_SEARCH",
1201
- "NOTIFY_CLICK": "ALERT_NOTIFICATIONS_OPEN"
1200
+ "NOTIFY_CLICK": "ALERT_NOTIFICATIONS_OPEN",
1201
+ "SEARCH": "ALERT_SEARCH"
1202
1202
  }
1203
1203
  },
1204
1204
  {
@@ -1243,17 +1243,12 @@
1243
1243
  "render-ui",
1244
1244
  "main",
1245
1245
  {
1246
- "type": "stack",
1247
- "gap": "lg",
1248
1246
  "children": [
1249
1247
  {
1250
1248
  "type": "stack",
1251
- "gap": "md",
1252
- "justify": "between",
1253
- "align": "center",
1249
+ "direction": "horizontal",
1254
1250
  "children": [
1255
1251
  {
1256
- "align": "center",
1257
1252
  "children": [
1258
1253
  {
1259
1254
  "type": "icon",
@@ -1265,26 +1260,29 @@
1265
1260
  "type": "typography"
1266
1261
  }
1267
1262
  ],
1268
- "direction": "horizontal",
1263
+ "type": "stack",
1269
1264
  "gap": "sm",
1270
- "type": "stack"
1265
+ "align": "center",
1266
+ "direction": "horizontal"
1271
1267
  },
1272
1268
  {
1273
- "direction": "horizontal",
1274
- "type": "stack",
1275
1269
  "gap": "sm",
1270
+ "type": "stack",
1271
+ "direction": "horizontal",
1276
1272
  "children": [
1277
1273
  {
1278
- "type": "button",
1279
1274
  "action": "CREATE",
1280
- "icon": "plus",
1275
+ "label": "New Alert",
1281
1276
  "variant": "primary",
1282
- "label": "New Alert"
1277
+ "icon": "plus",
1278
+ "type": "button"
1283
1279
  }
1284
1280
  ]
1285
1281
  }
1286
1282
  ],
1287
- "direction": "horizontal"
1283
+ "gap": "md",
1284
+ "justify": "between",
1285
+ "align": "center"
1288
1286
  },
1289
1287
  {
1290
1288
  "type": "divider"
@@ -1295,7 +1293,9 @@
1295
1293
  },
1296
1294
  "@trait.DeviceAlertCircuitBreaker"
1297
1295
  ],
1298
- "direction": "vertical"
1296
+ "type": "stack",
1297
+ "direction": "vertical",
1298
+ "gap": "lg"
1299
1299
  }
1300
1300
  ]
1301
1301
  ]
@@ -1309,30 +1309,14 @@
1309
1309
  "name": "AlertBrowseList",
1310
1310
  "linkedEntity": "DeviceAlert",
1311
1311
  "config": {
1312
- "itemActions": [
1313
- {
1314
- "variant": "ghost",
1315
- "label": "View",
1316
- "event": "VIEW"
1317
- },
1318
- {
1319
- "variant": "ghost",
1320
- "event": "EDIT",
1321
- "label": "Edit"
1322
- },
1323
- {
1324
- "variant": "danger",
1325
- "event": "DELETE",
1326
- "label": "Delete"
1327
- }
1328
- ],
1329
1312
  "gap": "sm",
1313
+ "cols": 1.0,
1330
1314
  "fields": [
1331
1315
  {
1332
- "label": "Device",
1333
- "icon": "cpu",
1316
+ "name": "deviceId",
1334
1317
  "variant": "h4",
1335
- "name": "deviceId"
1318
+ "icon": "cpu",
1319
+ "label": "Device"
1336
1320
  },
1337
1321
  {
1338
1322
  "variant": "badge",
@@ -1340,18 +1324,34 @@
1340
1324
  "label": "Severity"
1341
1325
  },
1342
1326
  {
1343
- "label": "Message",
1327
+ "variant": "body",
1344
1328
  "name": "message",
1345
- "variant": "body"
1329
+ "label": "Message"
1346
1330
  },
1347
1331
  {
1348
- "name": "acknowledged",
1349
1332
  "format": "boolean",
1350
1333
  "label": "Acknowledged",
1351
- "variant": "badge"
1334
+ "variant": "badge",
1335
+ "name": "acknowledged"
1352
1336
  }
1353
1337
  ],
1354
- "cols": 1.0
1338
+ "itemActions": [
1339
+ {
1340
+ "variant": "ghost",
1341
+ "label": "View",
1342
+ "event": "VIEW"
1343
+ },
1344
+ {
1345
+ "event": "EDIT",
1346
+ "label": "Edit",
1347
+ "variant": "ghost"
1348
+ },
1349
+ {
1350
+ "event": "DELETE",
1351
+ "label": "Delete",
1352
+ "variant": "danger"
1353
+ }
1354
+ ]
1355
1355
  },
1356
1356
  "listens": [
1357
1357
  {
@@ -1385,9 +1385,9 @@
1385
1385
  "name": "AlertCreate",
1386
1386
  "linkedEntity": "DeviceAlert",
1387
1387
  "config": {
1388
+ "icon": "plus-circle",
1388
1389
  "mode": "create",
1389
1390
  "title": "New Alert",
1390
- "icon": "plus-circle",
1391
1391
  "fields": [
1392
1392
  "deviceId",
1393
1393
  "severity",
@@ -1414,15 +1414,15 @@
1414
1414
  "name": "AlertEdit",
1415
1415
  "linkedEntity": "DeviceAlert",
1416
1416
  "config": {
1417
+ "title": "Edit Alert",
1418
+ "icon": "edit",
1417
1419
  "fields": [
1418
1420
  "deviceId",
1419
1421
  "severity",
1420
1422
  "message",
1421
1423
  "acknowledged"
1422
1424
  ],
1423
- "mode": "edit",
1424
- "title": "Edit Alert",
1425
- "icon": "edit"
1425
+ "mode": "edit"
1426
1426
  },
1427
1427
  "events": {
1428
1428
  "OPEN": "EDIT"
@@ -1443,7 +1443,6 @@
1443
1443
  "name": "AlertView",
1444
1444
  "linkedEntity": "DeviceAlert",
1445
1445
  "config": {
1446
- "mode": "edit",
1447
1446
  "fields": [
1448
1447
  "deviceId",
1449
1448
  "severity",
@@ -1451,6 +1450,7 @@
1451
1450
  "acknowledged"
1452
1451
  ],
1453
1452
  "icon": "eye",
1453
+ "mode": "edit",
1454
1454
  "title": "View Alert"
1455
1455
  },
1456
1456
  "events": {
@@ -1474,8 +1474,8 @@
1474
1474
  "config": {
1475
1475
  "icon": "alert-triangle",
1476
1476
  "confirmLabel": "Delete",
1477
- "title": "Delete Alert",
1478
- "alertMessage": "This action cannot be undone."
1477
+ "alertMessage": "This action cannot be undone.",
1478
+ "title": "Delete Alert"
1479
1479
  },
1480
1480
  "events": {
1481
1481
  "REQUEST": "DELETE",
@@ -1716,10 +1716,10 @@
1716
1716
  "ref": "Email.traits.ServiceEmailEmail",
1717
1717
  "name": "AlertEmail",
1718
1718
  "config": {
1719
- "uiTrait": "@trait.AlertEmailNotice",
1720
- "subject": "Critical alert raised",
1721
1719
  "body": "A critical alert was raised on a device. Investigate immediately.",
1720
+ "subject": "Critical alert raised",
1722
1721
  "sender": "alerts@example.com",
1722
+ "uiTrait": "@trait.AlertEmailNotice",
1723
1723
  "recipient": "ops@example.com"
1724
1724
  },
1725
1725
  "listens": [
@@ -1861,68 +1861,68 @@
1861
1861
  {
1862
1862
  "children": [
1863
1863
  {
1864
- "type": "stack",
1865
1864
  "children": [
1866
1865
  {
1867
1866
  "direction": "horizontal",
1868
1867
  "gap": "md",
1869
- "align": "center",
1870
1868
  "type": "stack",
1869
+ "align": "center",
1871
1870
  "children": [
1872
1871
  {
1873
1872
  "name": "shield-check",
1874
1873
  "type": "icon"
1875
1874
  },
1876
1875
  {
1876
+ "type": "typography",
1877
1877
  "content": "Circuit Breaker",
1878
- "variant": "h3",
1879
- "type": "typography"
1878
+ "variant": "h3"
1880
1879
  }
1881
1880
  ]
1882
1881
  },
1883
1882
  {
1884
- "label": "Closed",
1885
- "status": "online",
1883
+ "type": "status-dot",
1886
1884
  "pulse": false,
1887
- "type": "status-dot"
1885
+ "status": "online",
1886
+ "label": "Closed"
1888
1887
  }
1889
1888
  ],
1890
- "align": "center",
1891
- "direction": "horizontal",
1892
1889
  "gap": "md",
1893
- "justify": "between"
1890
+ "align": "center",
1891
+ "type": "stack",
1892
+ "justify": "between",
1893
+ "direction": "horizontal"
1894
1894
  },
1895
1895
  {
1896
- "type": "alert",
1896
+ "message": "Service is healthy. All requests are being processed.",
1897
1897
  "variant": "success",
1898
- "message": "Service is healthy. All requests are being processed."
1898
+ "type": "alert"
1899
1899
  },
1900
1900
  {
1901
- "type": "simple-grid",
1902
- "cols": 2.0,
1903
1901
  "children": [
1904
1902
  {
1905
- "value": "@entity.failureCount",
1906
1903
  "label": "Failures",
1907
- "type": "stat-display"
1904
+ "type": "stat-display",
1905
+ "value": "@entity.failureCount"
1908
1906
  },
1909
1907
  {
1910
- "label": "Successes",
1911
1908
  "type": "stat-display",
1909
+ "label": "Successes",
1912
1910
  "value": "@entity.successCount"
1913
1911
  }
1914
- ]
1912
+ ],
1913
+ "cols": 2.0,
1914
+ "type": "simple-grid"
1915
1915
  },
1916
1916
  {
1917
- "min": 0.0,
1918
1917
  "max": "@entity.threshold",
1918
+ "type": "meter",
1919
1919
  "value": "@entity.failureCount",
1920
- "type": "meter"
1920
+ "min": 0.0
1921
1921
  }
1922
1922
  ],
1923
- "direction": "vertical",
1923
+ "type": "stack",
1924
1924
  "gap": "lg",
1925
- "type": "stack"
1925
+ "direction": "vertical"
1926
1926
  }
1927
1927
  ]
1928
1928
  ]
@@ -1936,77 +1936,77 @@
1936
1936
  "render-ui",
1937
1937
  "main",
1938
1938
  {
1939
- "gap": "lg",
1939
+ "direction": "vertical",
1940
1940
  "type": "stack",
1941
+ "gap": "lg",
1941
1942
  "children": [
1942
1943
  {
1943
- "gap": "md",
1944
- "align": "center",
1945
- "direction": "horizontal",
1946
- "type": "stack",
1944
+ "justify": "between",
1947
1945
  "children": [
1948
1946
  {
1949
- "direction": "horizontal",
1950
- "align": "center",
1951
1947
  "type": "stack",
1948
+ "align": "center",
1949
+ "direction": "horizontal",
1950
+ "gap": "md",
1952
1951
  "children": [
1953
1952
  {
1954
- "type": "icon",
1955
- "name": "alert-triangle"
1953
+ "name": "alert-triangle",
1954
+ "type": "icon"
1956
1955
  },
1957
1956
  {
1958
- "type": "typography",
1957
+ "content": "Circuit Breaker",
1959
1958
  "variant": "h3",
1960
- "content": "Circuit Breaker"
1959
+ "type": "typography"
1961
1960
  }
1962
- ],
1963
- "gap": "md"
1961
+ ]
1964
1962
  },
1965
1963
  {
1966
- "pulse": true,
1967
1964
  "label": "Open",
1968
1965
  "type": "status-dot",
1969
- "status": "critical"
1966
+ "status": "critical",
1967
+ "pulse": true
1970
1968
  }
1971
1969
  ],
1972
- "justify": "between"
1970
+ "type": "stack",
1971
+ "direction": "horizontal",
1972
+ "gap": "md",
1973
+ "align": "center"
1973
1974
  },
1974
1975
  {
1975
- "message": "Circuit is open. Requests are being rejected to prevent cascading failures.",
1976
+ "variant": "error",
1976
1977
  "type": "alert",
1977
- "variant": "error"
1978
+ "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
1978
1979
  },
1979
1980
  {
1981
+ "cols": 2.0,
1982
+ "type": "simple-grid",
1980
1983
  "children": [
1981
1984
  {
1982
- "value": "@entity.failureCount",
1983
1985
  "label": "Failures",
1986
+ "value": "@entity.failureCount",
1984
1987
  "type": "stat-display"
1985
1988
  },
1986
1989
  {
1987
- "type": "stat-display",
1988
1990
  "label": "Successes",
1991
+ "type": "stat-display",
1989
1992
  "value": "@entity.successCount"
1990
1993
  }
1991
- ],
1992
- "type": "simple-grid",
1993
- "cols": 2.0
1994
+ ]
1994
1995
  },
1995
1996
  {
1996
- "max": "@entity.threshold",
1997
- "min": 0.0,
1998
1997
  "type": "meter",
1998
+ "min": 0.0,
1999
+ "max": "@entity.threshold",
1999
2000
  "value": "@entity.failureCount"
2000
2001
  },
2001
2002
  {
2002
- "label": "Reset",
2003
- "action": "RESET",
2004
2003
  "variant": "ghost",
2005
2004
  "icon": "rotate-ccw",
2006
- "type": "button"
2005
+ "type": "button",
2006
+ "label": "Reset",
2007
+ "action": "RESET"
2007
2008
  }
2008
- ],
2009
- "direction": "vertical"
2009
+ ]
2010
2010
  }
2011
2011
  ]
2012
2012
  ]
@@ -2020,52 +2020,53 @@
2020
2020
  "render-ui",
2021
2021
  "main",
2022
2022
  {
2023
+ "gap": "lg",
2023
2024
  "children": [
2024
2025
  {
2025
- "direction": "horizontal",
2026
- "type": "stack",
2027
2026
  "gap": "md",
2028
2027
  "align": "center",
2028
+ "type": "stack",
2029
2029
  "justify": "between",
2030
+ "direction": "horizontal",
2030
2031
  "children": [
2031
2032
  {
2032
2033
  "align": "center",
2033
- "direction": "horizontal",
2034
- "gap": "md",
2035
- "type": "stack",
2036
2034
  "children": [
2037
2035
  {
2038
- "name": "shield-check",
2039
- "type": "icon"
2036
+ "type": "icon",
2037
+ "name": "shield-check"
2040
2038
  },
2041
2039
  {
2040
+ "variant": "h3",
2042
2041
  "content": "Circuit Breaker",
2043
- "type": "typography",
2044
- "variant": "h3"
2042
+ "type": "typography"
2045
2043
  }
2046
- ]
2044
+ ],
2045
+ "type": "stack",
2046
+ "direction": "horizontal",
2047
+ "gap": "md"
2047
2048
  },
2048
2049
  {
2049
- "status": "online",
2050
- "pulse": false,
2051
2050
  "type": "status-dot",
2052
- "label": "Closed"
2051
+ "status": "online",
2052
+ "label": "Closed",
2053
+ "pulse": false
2053
2054
  }
2054
2055
  ]
2055
2056
  },
2056
2057
  {
2058
+ "variant": "success",
2057
2059
  "message": "Service is healthy.",
2058
- "type": "alert",
2059
- "variant": "success"
2060
+ "type": "alert"
2060
2061
  },
2061
2062
  {
2062
2063
  "type": "simple-grid",
2063
2064
  "cols": 2.0,
2064
2065
  "children": [
2065
2066
  {
2067
+ "value": "@entity.failureCount",
2066
2068
  "type": "stat-display",
2067
- "label": "Failures",
2068
- "value": "@entity.failureCount"
2069
+ "label": "Failures"
2069
2070
  },
2070
2071
  {
2071
2072
  "type": "stat-display",
@@ -2077,13 +2078,12 @@
2077
2078
  {
2078
2079
  "min": 0.0,
2079
2080
  "type": "meter",
2080
- "max": "@entity.threshold",
2081
- "value": "@entity.failureCount"
2081
+ "value": "@entity.failureCount",
2082
+ "max": "@entity.threshold"
2082
2083
  }
2083
2084
  ],
2084
2085
  "type": "stack",
2085
- "direction": "vertical",
2086
- "gap": "lg"
2086
+ "direction": "vertical"
2087
2087
  }
2088
2088
  ]
2089
2089
  ]
@@ -2097,64 +2097,64 @@
2097
2097
  "render-ui",
2098
2098
  "main",
2099
2099
  {
2100
+ "direction": "vertical",
2101
+ "gap": "lg",
2102
+ "type": "stack",
2100
2103
  "children": [
2101
2104
  {
2105
+ "align": "center",
2102
2106
  "children": [
2103
2107
  {
2104
2108
  "direction": "horizontal",
2105
- "type": "stack",
2106
2109
  "align": "center",
2107
- "gap": "md",
2108
2110
  "children": [
2109
2111
  {
2110
2112
  "type": "icon",
2111
2113
  "name": "activity"
2112
2114
  },
2113
2115
  {
2114
- "type": "typography",
2115
2116
  "content": "Circuit Breaker",
2117
+ "type": "typography",
2116
2118
  "variant": "h3"
2117
2119
  }
2118
- ]
2120
+ ],
2121
+ "type": "stack",
2122
+ "gap": "md"
2119
2123
  },
2120
2124
  {
2121
- "label": "Half-Open",
2122
2125
  "status": "warning",
2123
2126
  "pulse": true,
2124
- "type": "status-dot"
2127
+ "type": "status-dot",
2128
+ "label": "Half-Open"
2125
2129
  }
2126
2130
  ],
2127
- "gap": "md",
2128
2131
  "type": "stack",
2132
+ "gap": "md",
2129
2133
  "direction": "horizontal",
2130
- "align": "center",
2131
2134
  "justify": "between"
2132
2135
  },
2133
2136
  {
2134
- "variant": "warning",
2137
+ "message": "Testing recovery. Limited requests allowed.",
2135
2138
  "type": "alert",
2136
- "message": "Testing recovery. Limited requests allowed."
2139
+ "variant": "warning"
2137
2140
  },
2138
2141
  {
2139
- "cols": 2.0,
2140
- "type": "simple-grid",
2141
2142
  "children": [
2142
2143
  {
2143
- "type": "stat-display",
2144
2144
  "label": "Failures",
2145
+ "type": "stat-display",
2145
2146
  "value": "@entity.failureCount"
2146
2147
  },
2147
2148
  {
2149
+ "label": "Successes",
2148
2150
  "type": "stat-display",
2149
- "value": "@entity.successCount",
2150
- "label": "Successes"
2151
+ "value": "@entity.successCount"
2151
2152
  }
2152
- ]
2153
+ ],
2154
+ "type": "simple-grid",
2155
+ "cols": 2.0
2153
2156
  }
2154
- ],
2155
- "type": "stack",
2156
- "gap": "lg",
2157
- "direction": "vertical"
2157
+ ]
2158
2158
  }
2159
2159
  ]
2160
2160
  ]
@@ -2168,70 +2168,70 @@
2168
2168
  "render-ui",
2169
2169
  "main",
2170
2170
  {
2171
- "direction": "vertical",
2171
+ "type": "stack",
2172
+ "gap": "lg",
2172
2173
  "children": [
2173
2174
  {
2174
- "type": "stack",
2175
- "direction": "horizontal",
2176
- "gap": "md",
2177
2175
  "justify": "between",
2178
- "align": "center",
2179
2176
  "children": [
2180
2177
  {
2181
- "type": "stack",
2182
- "gap": "md",
2183
2178
  "direction": "horizontal",
2184
- "align": "center",
2179
+ "type": "stack",
2185
2180
  "children": [
2186
2181
  {
2187
2182
  "type": "icon",
2188
2183
  "name": "shield-check"
2189
2184
  },
2190
2185
  {
2191
- "variant": "h3",
2186
+ "type": "typography",
2192
2187
  "content": "Circuit Breaker",
2193
- "type": "typography"
2188
+ "variant": "h3"
2194
2189
  }
2195
- ]
2190
+ ],
2191
+ "gap": "md",
2192
+ "align": "center"
2196
2193
  },
2197
2194
  {
2198
- "type": "status-dot",
2199
2195
  "pulse": false,
2196
+ "label": "Closed",
2200
2197
  "status": "online",
2201
- "label": "Closed"
2198
+ "type": "status-dot"
2202
2199
  }
2203
- ]
2200
+ ],
2201
+ "direction": "horizontal",
2202
+ "type": "stack",
2203
+ "gap": "md",
2204
+ "align": "center"
2204
2205
  },
2205
2206
  {
2206
2207
  "variant": "success",
2207
- "message": "Service is healthy.",
2208
- "type": "alert"
2208
+ "type": "alert",
2209
+ "message": "Service is healthy."
2209
2210
  },
2210
2211
  {
2211
- "type": "simple-grid",
2212
- "cols": 2.0,
2213
2212
  "children": [
2214
2213
  {
2215
- "value": "@entity.failureCount",
2214
+ "label": "Failures",
2216
2215
  "type": "stat-display",
2217
- "label": "Failures"
2216
+ "value": "@entity.failureCount"
2218
2217
  },
2219
2218
  {
2220
2219
  "label": "Successes",
2221
2220
  "value": "@entity.successCount",
2222
2221
  "type": "stat-display"
2223
2222
  }
2224
- ]
2223
+ ],
2224
+ "type": "simple-grid",
2225
+ "cols": 2.0
2225
2226
  },
2226
2227
  {
2227
- "type": "meter",
2228
2228
  "min": 0.0,
2229
+ "type": "meter",
2229
2230
  "value": "@entity.failureCount",
2230
2231
  "max": "@entity.threshold"
2231
2232
  }
2232
2233
  ],
2233
- "gap": "lg",
2234
- "type": "stack"
2234
+ "direction": "vertical"
2235
2235
  }
2236
2236
  ]
2237
2237
  ]
@@ -2246,65 +2246,65 @@
2246
2246
  "main",
2247
2247
  {
2248
2248
  "gap": "lg",
2249
- "direction": "vertical",
2250
2249
  "type": "stack",
2250
+ "direction": "vertical",
2251
2251
  "children": [
2252
2252
  {
2253
+ "gap": "md",
2253
2254
  "type": "stack",
2254
2255
  "direction": "horizontal",
2255
- "justify": "between",
2256
- "gap": "md",
2257
2256
  "align": "center",
2257
+ "justify": "between",
2258
2258
  "children": [
2259
2259
  {
2260
- "direction": "horizontal",
2261
2260
  "type": "stack",
2262
- "align": "center",
2261
+ "direction": "horizontal",
2263
2262
  "gap": "md",
2263
+ "align": "center",
2264
2264
  "children": [
2265
2265
  {
2266
- "type": "icon",
2267
- "name": "shield-check"
2266
+ "name": "shield-check",
2267
+ "type": "icon"
2268
2268
  },
2269
2269
  {
2270
2270
  "content": "Circuit Breaker",
2271
- "type": "typography",
2272
- "variant": "h3"
2271
+ "variant": "h3",
2272
+ "type": "typography"
2273
2273
  }
2274
2274
  ]
2275
2275
  },
2276
2276
  {
2277
- "status": "online",
2278
2277
  "pulse": false,
2278
+ "status": "online",
2279
2279
  "type": "status-dot",
2280
2280
  "label": "Closed"
2281
2281
  }
2282
2282
  ]
2283
2283
  },
2284
2284
  {
2285
+ "variant": "success",
2285
2286
  "message": "Service is healthy.",
2286
- "type": "alert",
2287
- "variant": "success"
2287
+ "type": "alert"
2288
2288
  },
2289
2289
  {
2290
2290
  "type": "simple-grid",
2291
2291
  "cols": 2.0,
2292
2292
  "children": [
2293
2293
  {
2294
+ "value": "@entity.failureCount",
2294
2295
  "label": "Failures",
2295
- "type": "stat-display",
2296
- "value": "@entity.failureCount"
2296
+ "type": "stat-display"
2297
2297
  },
2298
2298
  {
2299
- "label": "Successes",
2300
2299
  "type": "stat-display",
2301
- "value": "@entity.successCount"
2300
+ "value": "@entity.successCount",
2301
+ "label": "Successes"
2302
2302
  }
2303
2303
  ]
2304
2304
  },
2305
2305
  {
2306
- "min": 0.0,
2307
2306
  "type": "meter",
2307
+ "min": 0.0,
2308
2308
  "value": "@entity.failureCount",
2309
2309
  "max": "@entity.threshold"
2310
2310
  }
@@ -2322,44 +2322,43 @@
2322
2322
  "render-ui",
2323
2323
  "main",
2324
2324
  {
2325
- "type": "stack",
2326
2325
  "direction": "vertical",
2327
2326
  "children": [
2328
2327
  {
2328
+ "align": "center",
2329
2329
  "children": [
2330
2330
  {
2331
+ "gap": "md",
2332
+ "direction": "horizontal",
2333
+ "align": "center",
2331
2334
  "children": [
2332
2335
  {
2333
2336
  "type": "icon",
2334
2337
  "name": "alert-triangle"
2335
2338
  },
2336
2339
  {
2337
- "content": "Circuit Breaker",
2338
2340
  "type": "typography",
2341
+ "content": "Circuit Breaker",
2339
2342
  "variant": "h3"
2340
2343
  }
2341
2344
  ],
2342
- "gap": "md",
2343
- "direction": "horizontal",
2344
- "type": "stack",
2345
- "align": "center"
2345
+ "type": "stack"
2346
2346
  },
2347
2347
  {
2348
- "type": "status-dot",
2349
- "pulse": true,
2348
+ "label": "Open",
2350
2349
  "status": "critical",
2351
- "label": "Open"
2350
+ "type": "status-dot",
2351
+ "pulse": true
2352
2352
  }
2353
2353
  ],
2354
2354
  "justify": "between",
2355
2355
  "type": "stack",
2356
- "direction": "horizontal",
2357
2356
  "gap": "md",
2358
- "align": "center"
2357
+ "direction": "horizontal"
2359
2358
  },
2360
2359
  {
2361
- "variant": "error",
2362
2360
  "message": "Circuit is open.",
2361
+ "variant": "error",
2363
2362
  "type": "alert"
2364
2363
  },
2365
2364
  {
@@ -2370,29 +2369,30 @@
2370
2369
  "value": "@entity.failureCount"
2371
2370
  },
2372
2371
  {
2373
- "label": "Successes",
2372
+ "value": "@entity.successCount",
2374
2373
  "type": "stat-display",
2375
- "value": "@entity.successCount"
2374
+ "label": "Successes"
2376
2375
  }
2377
2376
  ],
2378
2377
  "type": "simple-grid",
2379
2378
  "cols": 2.0
2380
2379
  },
2381
2380
  {
2382
- "value": "@entity.failureCount",
2383
- "max": "@entity.threshold",
2384
2381
  "type": "meter",
2385
- "min": 0.0
2382
+ "value": "@entity.failureCount",
2383
+ "min": 0.0,
2384
+ "max": "@entity.threshold"
2386
2385
  },
2387
2386
  {
2388
- "icon": "rotate-ccw",
2389
2387
  "type": "button",
2390
2388
  "variant": "ghost",
2391
- "label": "Reset",
2392
- "action": "RESET"
2389
+ "icon": "rotate-ccw",
2390
+ "action": "RESET",
2391
+ "label": "Reset"
2393
2392
  }
2394
2393
  ],
2395
- "gap": "lg"
2394
+ "gap": "lg",
2395
+ "type": "stack"
2396
2396
  }
2397
2397
  ]
2398
2398
  ]
@@ -2406,19 +2406,17 @@
2406
2406
  "render-ui",
2407
2407
  "main",
2408
2408
  {
2409
- "gap": "lg",
2410
- "direction": "vertical",
2409
+ "type": "stack",
2411
2410
  "children": [
2412
2411
  {
2413
- "gap": "md",
2414
2412
  "children": [
2415
2413
  {
2416
2414
  "type": "stack",
2417
- "direction": "horizontal",
2415
+ "align": "center",
2418
2416
  "children": [
2419
2417
  {
2420
- "name": "shield-check",
2421
- "type": "icon"
2418
+ "type": "icon",
2419
+ "name": "shield-check"
2422
2420
  },
2423
2421
  {
2424
2422
  "content": "Circuit Breaker",
@@ -2427,49 +2425,51 @@
2427
2425
  }
2428
2426
  ],
2429
2427
  "gap": "md",
2430
- "align": "center"
2428
+ "direction": "horizontal"
2431
2429
  },
2432
2430
  {
2433
2431
  "status": "online",
2434
2432
  "type": "status-dot",
2435
- "pulse": false,
2436
- "label": "Closed"
2433
+ "label": "Closed",
2434
+ "pulse": false
2437
2435
  }
2438
2436
  ],
2439
2437
  "direction": "horizontal",
2440
2438
  "type": "stack",
2441
2439
  "align": "center",
2442
- "justify": "between"
2440
+ "justify": "between",
2441
+ "gap": "md"
2443
2442
  },
2444
2443
  {
2444
+ "type": "alert",
2445
2445
  "variant": "success",
2446
- "message": "Service is healthy.",
2447
- "type": "alert"
2446
+ "message": "Service is healthy."
2448
2447
  },
2449
2448
  {
2450
- "cols": 2.0,
2451
2449
  "type": "simple-grid",
2450
+ "cols": 2.0,
2452
2451
  "children": [
2453
2452
  {
2454
- "value": "@entity.failureCount",
2453
+ "label": "Failures",
2455
2454
  "type": "stat-display",
2456
- "label": "Failures"
2455
+ "value": "@entity.failureCount"
2457
2456
  },
2458
2457
  {
2459
2458
  "label": "Successes",
2460
- "type": "stat-display",
2461
- "value": "@entity.successCount"
2459
+ "value": "@entity.successCount",
2460
+ "type": "stat-display"
2462
2461
  }
2463
2462
  ]
2464
2463
  },
2465
2464
  {
2466
2465
  "max": "@entity.threshold",
2467
- "value": "@entity.failureCount",
2466
+ "min": 0.0,
2468
2467
  "type": "meter",
2469
- "min": 0.0
2468
+ "value": "@entity.failureCount"
2470
2469
  }
2471
2470
  ],
2472
- "type": "stack"
2471
+ "direction": "vertical",
2472
+ "gap": "lg"
2473
2473
  }
2474
2474
  ]
2475
2475
  ]