@almadar/std 8.5.1 → 10.0.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 (187) hide show
  1. package/behaviors/registry/agent/atoms/std-agent-activity-log.orb +97 -97
  2. package/behaviors/registry/agent/atoms/std-agent-chat-thread.orb +129 -129
  3. package/behaviors/registry/agent/atoms/std-agent-classifier.orb +127 -127
  4. package/behaviors/registry/agent/atoms/std-agent-completion.orb +133 -133
  5. package/behaviors/registry/agent/atoms/std-agent-context-window.orb +419 -419
  6. package/behaviors/registry/agent/atoms/std-agent-conversation.orb +100 -100
  7. package/behaviors/registry/agent/atoms/std-agent-memory.orb +112 -112
  8. package/behaviors/registry/agent/atoms/std-agent-provider.orb +138 -138
  9. package/behaviors/registry/agent/atoms/std-agent-search.orb +78 -78
  10. package/behaviors/registry/agent/atoms/std-agent-session.orb +171 -171
  11. package/behaviors/registry/agent/atoms/std-agent-step-progress.orb +202 -202
  12. package/behaviors/registry/agent/atoms/std-agent-token-gauge.orb +358 -358
  13. package/behaviors/registry/agent/atoms/std-agent-tool-call.orb +79 -79
  14. package/behaviors/registry/agent/molecules/std-agent-fix-loop.orb +204 -204
  15. package/behaviors/registry/agent/molecules/std-agent-learner.orb +190 -190
  16. package/behaviors/registry/agent/molecules/std-agent-planner.orb +152 -152
  17. package/behaviors/registry/agent/molecules/std-agent-rag.orb +115 -115
  18. package/behaviors/registry/agent/molecules/std-agent-tool-loop.orb +188 -188
  19. package/behaviors/registry/agent/organisms/std-agent-assistant.orb +1219 -1219
  20. package/behaviors/registry/agent/organisms/std-agent-builder.orb +2995 -2995
  21. package/behaviors/registry/agent/organisms/std-agent-pipeline.orb +2285 -2285
  22. package/behaviors/registry/agent/organisms/std-agent-reviewer.orb +1063 -1063
  23. package/behaviors/registry/agent/organisms/std-agent-tutor.orb +876 -876
  24. package/behaviors/registry/app/organisms/std-api-gateway.orb +840 -840
  25. package/behaviors/registry/app/organisms/std-booking-system.orb +1248 -1248
  26. package/behaviors/registry/app/organisms/std-cicd-pipeline.orb +816 -816
  27. package/behaviors/registry/app/organisms/std-cms.orb +587 -587
  28. package/behaviors/registry/app/organisms/std-coding-academy.orb +416 -416
  29. package/behaviors/registry/app/organisms/std-crm.orb +966 -966
  30. package/behaviors/registry/app/organisms/std-devops-dashboard.orb +1375 -1375
  31. package/behaviors/registry/app/organisms/std-ecommerce.orb +1109 -1109
  32. package/behaviors/registry/app/organisms/std-finance-tracker.orb +716 -716
  33. package/behaviors/registry/app/organisms/std-healthcare.orb +1473 -1473
  34. package/behaviors/registry/app/organisms/std-helpdesk.orb +693 -693
  35. package/behaviors/registry/app/organisms/std-hr-portal.orb +1252 -1252
  36. package/behaviors/registry/app/organisms/std-iot-dashboard.orb +895 -895
  37. package/behaviors/registry/app/organisms/std-lms.orb +876 -876
  38. package/behaviors/registry/app/organisms/std-project-manager.orb +790 -790
  39. package/behaviors/registry/app/organisms/std-realtime-chat.orb +740 -740
  40. package/behaviors/registry/app/organisms/std-social-feed.orb +266 -266
  41. package/behaviors/registry/app/organisms/std-trading-dashboard.orb +699 -699
  42. package/behaviors/registry/core/atoms/std-browse.orb +67 -67
  43. package/behaviors/registry/core/atoms/std-cache-aside.orb +97 -97
  44. package/behaviors/registry/core/atoms/std-calendar.orb +62 -62
  45. package/behaviors/registry/core/atoms/std-circuit-breaker.orb +188 -188
  46. package/behaviors/registry/core/atoms/std-confirmation.orb +34 -34
  47. package/behaviors/registry/core/atoms/std-display.orb +370 -370
  48. package/behaviors/registry/core/atoms/std-drawer.orb +61 -61
  49. package/behaviors/registry/core/atoms/std-filter.orb +63 -63
  50. package/behaviors/registry/core/atoms/std-gallery.orb +55 -55
  51. package/behaviors/registry/core/atoms/std-modal.orb +19 -19
  52. package/behaviors/registry/core/atoms/std-pagination.orb +53 -53
  53. package/behaviors/registry/core/atoms/std-push.orb +49 -49
  54. package/behaviors/registry/core/atoms/std-rate-limiter.orb +185 -185
  55. package/behaviors/registry/core/atoms/std-related.orb +39 -39
  56. package/behaviors/registry/core/atoms/std-search.orb +73 -73
  57. package/behaviors/registry/core/atoms/std-selection.orb +110 -110
  58. package/behaviors/registry/core/atoms/std-tabs.orb +47 -47
  59. package/behaviors/registry/core/molecules/std-cart.orb +68 -72
  60. package/behaviors/registry/core/molecules/std-filtered-list.orb +11 -11
  61. package/behaviors/registry/core/molecules/std-form-advanced.orb +140 -140
  62. package/behaviors/registry/core/molecules/std-list.orb +68 -68
  63. package/behaviors/registry/core/molecules/std-wizard-form.orb +152 -152
  64. package/behaviors/registry/game/atoms/std-collision.orb +140 -140
  65. package/behaviors/registry/game/atoms/std-combat.orb +76 -76
  66. package/behaviors/registry/game/atoms/std-dialogue-box.orb +27 -27
  67. package/behaviors/registry/game/atoms/std-game-canvas2d.orb +47 -47
  68. package/behaviors/registry/game/atoms/std-gameflow.orb +49 -49
  69. package/behaviors/registry/game/atoms/std-movement.orb +276 -276
  70. package/behaviors/registry/game/atoms/std-overworld.orb +64 -64
  71. package/behaviors/registry/game/atoms/std-physics2d.orb +88 -88
  72. package/behaviors/registry/game/atoms/std-quest.orb +129 -129
  73. package/behaviors/registry/game/atoms/std-timer.orb +285 -285
  74. package/behaviors/registry/game/organisms/std-arcade-game.orb +172 -172
  75. package/behaviors/registry/game/organisms/std-logic-training.orb +89 -89
  76. package/behaviors/registry/game/organisms/std-platformer-app.orb +281 -281
  77. package/behaviors/registry/game/organisms/std-puzzle-app.orb +110 -110
  78. package/behaviors/registry/game/organisms/std-rpg-game.orb +446 -446
  79. package/behaviors/registry/game/organisms/std-stem-lab.orb +349 -349
  80. package/behaviors/registry/game/organisms/std-strategy-game.orb +550 -550
  81. package/behaviors/registry/probes/molecules/std-source-scope-probe.orb +35 -35
  82. package/behaviors/registry/service/atoms/std-service-custom-bearer.orb +93 -93
  83. package/behaviors/registry/service/atoms/std-service-email.orb +92 -92
  84. package/behaviors/registry/service/atoms/std-service-github.orb +111 -111
  85. package/behaviors/registry/service/atoms/std-service-llm.orb +132 -132
  86. package/behaviors/registry/service/atoms/std-service-oauth.orb +133 -133
  87. package/behaviors/registry/service/atoms/std-service-redis.orb +114 -114
  88. package/behaviors/registry/service/atoms/std-service-storage.orb +140 -140
  89. package/behaviors/registry/service/atoms/std-service-stripe.orb +115 -115
  90. package/behaviors/registry/service/atoms/std-service-twilio.orb +131 -131
  91. package/behaviors/registry/service/atoms/std-service-youtube.orb +128 -128
  92. package/behaviors/registry/service/organisms/std-service-marketplace.orb +1092 -1092
  93. package/behaviors/registry/service/organisms/std-service-research-assistant.orb +978 -978
  94. package/dist/behaviors/registry/agent/atoms/std-agent-activity-log.orb +97 -97
  95. package/dist/behaviors/registry/agent/atoms/std-agent-chat-thread.orb +129 -129
  96. package/dist/behaviors/registry/agent/atoms/std-agent-classifier.orb +127 -127
  97. package/dist/behaviors/registry/agent/atoms/std-agent-completion.orb +133 -133
  98. package/dist/behaviors/registry/agent/atoms/std-agent-context-window.orb +419 -419
  99. package/dist/behaviors/registry/agent/atoms/std-agent-conversation.orb +100 -100
  100. package/dist/behaviors/registry/agent/atoms/std-agent-memory.orb +112 -112
  101. package/dist/behaviors/registry/agent/atoms/std-agent-provider.orb +138 -138
  102. package/dist/behaviors/registry/agent/atoms/std-agent-search.orb +78 -78
  103. package/dist/behaviors/registry/agent/atoms/std-agent-session.orb +171 -171
  104. package/dist/behaviors/registry/agent/atoms/std-agent-step-progress.orb +202 -202
  105. package/dist/behaviors/registry/agent/atoms/std-agent-token-gauge.orb +358 -358
  106. package/dist/behaviors/registry/agent/atoms/std-agent-tool-call.orb +79 -79
  107. package/dist/behaviors/registry/agent/molecules/std-agent-fix-loop.orb +204 -204
  108. package/dist/behaviors/registry/agent/molecules/std-agent-learner.orb +190 -190
  109. package/dist/behaviors/registry/agent/molecules/std-agent-planner.orb +152 -152
  110. package/dist/behaviors/registry/agent/molecules/std-agent-rag.orb +115 -115
  111. package/dist/behaviors/registry/agent/molecules/std-agent-tool-loop.orb +188 -188
  112. package/dist/behaviors/registry/agent/organisms/std-agent-assistant.orb +1219 -1219
  113. package/dist/behaviors/registry/agent/organisms/std-agent-builder.orb +2995 -2995
  114. package/dist/behaviors/registry/agent/organisms/std-agent-pipeline.orb +2285 -2285
  115. package/dist/behaviors/registry/agent/organisms/std-agent-reviewer.orb +1063 -1063
  116. package/dist/behaviors/registry/agent/organisms/std-agent-tutor.orb +876 -876
  117. package/dist/behaviors/registry/app/organisms/std-api-gateway.orb +840 -840
  118. package/dist/behaviors/registry/app/organisms/std-booking-system.orb +1248 -1248
  119. package/dist/behaviors/registry/app/organisms/std-cicd-pipeline.orb +816 -816
  120. package/dist/behaviors/registry/app/organisms/std-cms.orb +587 -587
  121. package/dist/behaviors/registry/app/organisms/std-coding-academy.orb +416 -416
  122. package/dist/behaviors/registry/app/organisms/std-crm.orb +966 -966
  123. package/dist/behaviors/registry/app/organisms/std-devops-dashboard.orb +1375 -1375
  124. package/dist/behaviors/registry/app/organisms/std-ecommerce.orb +1109 -1109
  125. package/dist/behaviors/registry/app/organisms/std-finance-tracker.orb +716 -716
  126. package/dist/behaviors/registry/app/organisms/std-healthcare.orb +1473 -1473
  127. package/dist/behaviors/registry/app/organisms/std-helpdesk.orb +693 -693
  128. package/dist/behaviors/registry/app/organisms/std-hr-portal.orb +1252 -1252
  129. package/dist/behaviors/registry/app/organisms/std-iot-dashboard.orb +895 -895
  130. package/dist/behaviors/registry/app/organisms/std-lms.orb +876 -876
  131. package/dist/behaviors/registry/app/organisms/std-project-manager.orb +790 -790
  132. package/dist/behaviors/registry/app/organisms/std-realtime-chat.orb +740 -740
  133. package/dist/behaviors/registry/app/organisms/std-social-feed.orb +266 -266
  134. package/dist/behaviors/registry/app/organisms/std-trading-dashboard.orb +699 -699
  135. package/dist/behaviors/registry/core/atoms/std-browse.orb +67 -67
  136. package/dist/behaviors/registry/core/atoms/std-cache-aside.orb +97 -97
  137. package/dist/behaviors/registry/core/atoms/std-calendar.orb +62 -62
  138. package/dist/behaviors/registry/core/atoms/std-circuit-breaker.orb +188 -188
  139. package/dist/behaviors/registry/core/atoms/std-confirmation.orb +34 -34
  140. package/dist/behaviors/registry/core/atoms/std-display.orb +370 -370
  141. package/dist/behaviors/registry/core/atoms/std-drawer.orb +61 -61
  142. package/dist/behaviors/registry/core/atoms/std-filter.orb +63 -63
  143. package/dist/behaviors/registry/core/atoms/std-gallery.orb +55 -55
  144. package/dist/behaviors/registry/core/atoms/std-modal.orb +19 -19
  145. package/dist/behaviors/registry/core/atoms/std-pagination.orb +53 -53
  146. package/dist/behaviors/registry/core/atoms/std-push.orb +49 -49
  147. package/dist/behaviors/registry/core/atoms/std-rate-limiter.orb +185 -185
  148. package/dist/behaviors/registry/core/atoms/std-related.orb +39 -39
  149. package/dist/behaviors/registry/core/atoms/std-search.orb +73 -73
  150. package/dist/behaviors/registry/core/atoms/std-selection.orb +110 -110
  151. package/dist/behaviors/registry/core/atoms/std-tabs.orb +47 -47
  152. package/dist/behaviors/registry/core/molecules/std-cart.orb +68 -72
  153. package/dist/behaviors/registry/core/molecules/std-filtered-list.orb +11 -11
  154. package/dist/behaviors/registry/core/molecules/std-form-advanced.orb +140 -140
  155. package/dist/behaviors/registry/core/molecules/std-list.orb +68 -68
  156. package/dist/behaviors/registry/core/molecules/std-wizard-form.orb +152 -152
  157. package/dist/behaviors/registry/game/atoms/std-collision.orb +140 -140
  158. package/dist/behaviors/registry/game/atoms/std-combat.orb +76 -76
  159. package/dist/behaviors/registry/game/atoms/std-dialogue-box.orb +27 -27
  160. package/dist/behaviors/registry/game/atoms/std-game-canvas2d.orb +47 -47
  161. package/dist/behaviors/registry/game/atoms/std-gameflow.orb +49 -49
  162. package/dist/behaviors/registry/game/atoms/std-movement.orb +276 -276
  163. package/dist/behaviors/registry/game/atoms/std-overworld.orb +64 -64
  164. package/dist/behaviors/registry/game/atoms/std-physics2d.orb +88 -88
  165. package/dist/behaviors/registry/game/atoms/std-quest.orb +129 -129
  166. package/dist/behaviors/registry/game/atoms/std-timer.orb +285 -285
  167. package/dist/behaviors/registry/game/organisms/std-arcade-game.orb +172 -172
  168. package/dist/behaviors/registry/game/organisms/std-logic-training.orb +89 -89
  169. package/dist/behaviors/registry/game/organisms/std-platformer-app.orb +281 -281
  170. package/dist/behaviors/registry/game/organisms/std-puzzle-app.orb +110 -110
  171. package/dist/behaviors/registry/game/organisms/std-rpg-game.orb +446 -446
  172. package/dist/behaviors/registry/game/organisms/std-stem-lab.orb +349 -349
  173. package/dist/behaviors/registry/game/organisms/std-strategy-game.orb +550 -550
  174. package/dist/behaviors/registry/probes/molecules/std-source-scope-probe.orb +35 -35
  175. package/dist/behaviors/registry/service/atoms/std-service-custom-bearer.orb +93 -93
  176. package/dist/behaviors/registry/service/atoms/std-service-email.orb +92 -92
  177. package/dist/behaviors/registry/service/atoms/std-service-github.orb +111 -111
  178. package/dist/behaviors/registry/service/atoms/std-service-llm.orb +132 -132
  179. package/dist/behaviors/registry/service/atoms/std-service-oauth.orb +133 -133
  180. package/dist/behaviors/registry/service/atoms/std-service-redis.orb +114 -114
  181. package/dist/behaviors/registry/service/atoms/std-service-storage.orb +140 -140
  182. package/dist/behaviors/registry/service/atoms/std-service-stripe.orb +115 -115
  183. package/dist/behaviors/registry/service/atoms/std-service-twilio.orb +131 -131
  184. package/dist/behaviors/registry/service/atoms/std-service-youtube.orb +128 -128
  185. package/dist/behaviors/registry/service/organisms/std-service-marketplace.orb +1092 -1092
  186. package/dist/behaviors/registry/service/organisms/std-service-research-assistant.orb +978 -978
  187. package/package.json +1 -1
@@ -44,7 +44,7 @@
44
44
  "event": "SensorReadingLoaded",
45
45
  "description": "Fired when SensorReading finishes loading",
46
46
  "scope": "internal",
47
- "payload": [
47
+ "payloadSchema": [
48
48
  {
49
49
  "name": "data",
50
50
  "type": "[SensorReading]"
@@ -55,7 +55,7 @@
55
55
  "event": "SensorReadingLoadFailed",
56
56
  "description": "Fired when SensorReading fails to load",
57
57
  "scope": "internal",
58
- "payload": [
58
+ "payloadSchema": [
59
59
  {
60
60
  "name": "error",
61
61
  "type": "string"
@@ -69,7 +69,7 @@
69
69
  {
70
70
  "event": "DeviceSaved",
71
71
  "scope": "internal",
72
- "payload": [
72
+ "payloadSchema": [
73
73
  {
74
74
  "name": "id",
75
75
  "type": "string"
@@ -79,7 +79,7 @@
79
79
  {
80
80
  "event": "DeviceSaveFailed",
81
81
  "scope": "internal",
82
- "payload": [
82
+ "payloadSchema": [
83
83
  {
84
84
  "name": "error",
85
85
  "type": "string"
@@ -93,7 +93,7 @@
93
93
  {
94
94
  "event": "DeviceUpdated",
95
95
  "scope": "internal",
96
- "payload": [
96
+ "payloadSchema": [
97
97
  {
98
98
  "name": "id",
99
99
  "type": "string"
@@ -103,7 +103,7 @@
103
103
  {
104
104
  "event": "DeviceUpdateFailed",
105
105
  "scope": "internal",
106
- "payload": [
106
+ "payloadSchema": [
107
107
  {
108
108
  "name": "error",
109
109
  "type": "string"
@@ -117,7 +117,7 @@
117
117
  {
118
118
  "event": "DeviceDeleted",
119
119
  "scope": "internal",
120
- "payload": [
120
+ "payloadSchema": [
121
121
  {
122
122
  "name": "id",
123
123
  "type": "string"
@@ -127,7 +127,7 @@
127
127
  {
128
128
  "event": "DeviceDeleteFailed",
129
129
  "scope": "internal",
130
- "payload": [
130
+ "payloadSchema": [
131
131
  {
132
132
  "name": "error",
133
133
  "type": "string"
@@ -172,7 +172,7 @@
172
172
  {
173
173
  "key": "SensorReadingLoaded",
174
174
  "name": "SensorReading loaded",
175
- "payload": [
175
+ "payloadSchema": [
176
176
  {
177
177
  "name": "data",
178
178
  "type": "[SensorReading]"
@@ -182,7 +182,7 @@
182
182
  {
183
183
  "key": "SensorReadingLoadFailed",
184
184
  "name": "SensorReading load failed",
185
- "payload": [
185
+ "payloadSchema": [
186
186
  {
187
187
  "name": "error",
188
188
  "type": "string"
@@ -196,7 +196,7 @@
196
196
  {
197
197
  "key": "DeviceSaved",
198
198
  "name": "Device saved",
199
- "payload": [
199
+ "payloadSchema": [
200
200
  {
201
201
  "name": "id",
202
202
  "type": "string"
@@ -206,7 +206,7 @@
206
206
  {
207
207
  "key": "DeviceSaveFailed",
208
208
  "name": "Device save failed",
209
- "payload": [
209
+ "payloadSchema": [
210
210
  {
211
211
  "name": "error",
212
212
  "type": "string"
@@ -220,7 +220,7 @@
220
220
  {
221
221
  "key": "DeviceUpdated",
222
222
  "name": "Device updated",
223
- "payload": [
223
+ "payloadSchema": [
224
224
  {
225
225
  "name": "id",
226
226
  "type": "string"
@@ -230,7 +230,7 @@
230
230
  {
231
231
  "key": "DeviceUpdateFailed",
232
232
  "name": "Device update failed",
233
- "payload": [
233
+ "payloadSchema": [
234
234
  {
235
235
  "name": "error",
236
236
  "type": "string"
@@ -244,7 +244,7 @@
244
244
  {
245
245
  "key": "DeviceDeleted",
246
246
  "name": "Device deleted",
247
- "payload": [
247
+ "payloadSchema": [
248
248
  {
249
249
  "name": "id",
250
250
  "type": "string"
@@ -254,7 +254,7 @@
254
254
  {
255
255
  "key": "DeviceDeleteFailed",
256
256
  "name": "Device delete failed",
257
- "payload": [
257
+ "payloadSchema": [
258
258
  {
259
259
  "name": "error",
260
260
  "type": "string"
@@ -286,96 +286,92 @@
286
286
  "render-ui",
287
287
  "main",
288
288
  {
289
- "appName": "IoT Dashboard",
290
- "type": "dashboard-layout",
291
289
  "navItems": [
292
290
  {
293
291
  "label": "Sensors",
294
- "icon": "layout-list",
295
- "href": "/sensors"
292
+ "href": "/sensors",
293
+ "icon": "layout-list"
296
294
  },
297
295
  {
298
- "label": "Devices",
299
296
  "icon": "cpu",
297
+ "label": "Devices",
300
298
  "href": "/devices"
301
299
  },
302
300
  {
301
+ "icon": "bell",
303
302
  "label": "Alerts",
304
- "href": "/alerts",
305
- "icon": "bell"
303
+ "href": "/alerts"
306
304
  }
307
305
  ],
306
+ "appName": "IoT Dashboard",
308
307
  "children": [
309
308
  {
310
- "type": "scaled-diagram",
311
309
  "children": [
312
310
  {
311
+ "gap": "lg",
312
+ "direction": "vertical",
313
313
  "children": [
314
314
  {
315
- "type": "breadcrumb",
316
315
  "items": [
317
316
  {
318
- "label": "Home",
319
- "href": "/"
317
+ "href": "/",
318
+ "label": "Home"
320
319
  },
321
320
  {
322
321
  "label": "Sensor Readings"
323
322
  }
324
- ]
323
+ ],
324
+ "type": "breadcrumb"
325
325
  },
326
326
  {
327
+ "direction": "horizontal",
328
+ "type": "stack",
329
+ "justify": "between",
330
+ "gap": "md",
327
331
  "children": [
328
332
  {
333
+ "type": "stack",
329
334
  "children": [
330
335
  {
331
336
  "type": "icon",
332
337
  "name": "thermometer"
333
338
  },
334
339
  {
335
- "content": "Sensor Readings",
336
340
  "type": "typography",
337
- "variant": "h2"
341
+ "variant": "h2",
342
+ "content": "Sensor Readings"
338
343
  }
339
344
  ],
340
- "direction": "horizontal",
341
345
  "gap": "md",
342
- "type": "stack"
346
+ "direction": "horizontal"
343
347
  },
344
348
  {
345
- "type": "button",
346
- "label": "Refresh",
347
349
  "variant": "secondary",
348
350
  "icon": "refresh-cw",
351
+ "type": "button",
352
+ "label": "Refresh",
349
353
  "action": "REFRESH"
350
354
  }
351
- ],
352
- "type": "stack",
353
- "gap": "md",
354
- "justify": "between",
355
- "direction": "horizontal"
355
+ ]
356
356
  },
357
357
  {
358
358
  "type": "divider"
359
359
  },
360
360
  {
361
- "padding": "md",
362
- "type": "box",
363
361
  "children": [
364
362
  {
365
363
  "type": "simple-grid",
366
- "cols": 3.0,
367
364
  "children": [
368
365
  {
369
- "type": "card",
370
366
  "children": [
371
367
  {
372
- "type": "stack",
373
368
  "direction": "vertical",
369
+ "type": "stack",
374
370
  "children": [
375
371
  {
376
- "type": "typography",
372
+ "variant": "caption",
377
373
  "content": "SensorId",
378
- "variant": "caption"
374
+ "type": "typography"
379
375
  },
380
376
  {
381
377
  "variant": "h3",
@@ -385,12 +381,13 @@
385
381
  ],
386
382
  "gap": "sm"
387
383
  }
388
- ]
384
+ ],
385
+ "type": "card"
389
386
  },
390
387
  {
391
- "type": "stat-display",
392
388
  "value": "@entity.value",
393
- "label": "Value"
389
+ "label": "Value",
390
+ "type": "stat-display"
394
391
  },
395
392
  {
396
393
  "type": "card",
@@ -398,19 +395,19 @@
398
395
  {
399
396
  "children": [
400
397
  {
401
- "content": "Unit",
402
398
  "type": "typography",
399
+ "content": "Unit",
403
400
  "variant": "caption"
404
401
  },
405
402
  {
406
- "variant": "h3",
407
403
  "type": "typography",
408
- "content": "@entity.unit"
404
+ "content": "@entity.unit",
405
+ "variant": "h3"
409
406
  }
410
407
  ],
411
408
  "direction": "vertical",
412
- "gap": "sm",
413
- "type": "stack"
409
+ "type": "stack",
410
+ "gap": "sm"
414
411
  }
415
412
  ]
416
413
  },
@@ -418,34 +415,38 @@
418
415
  "type": "card",
419
416
  "children": [
420
417
  {
421
- "type": "stack",
422
418
  "gap": "sm",
423
- "direction": "vertical",
424
419
  "children": [
425
420
  {
426
- "content": "Timestamp",
421
+ "variant": "caption",
427
422
  "type": "typography",
428
- "variant": "caption"
423
+ "content": "Timestamp"
429
424
  },
430
425
  {
431
426
  "variant": "h3",
432
- "content": "@entity.timestamp",
433
- "type": "typography"
427
+ "type": "typography",
428
+ "content": "@entity.timestamp"
434
429
  }
435
- ]
430
+ ],
431
+ "direction": "vertical",
432
+ "type": "stack"
436
433
  }
437
434
  ]
438
435
  }
439
- ]
436
+ ],
437
+ "cols": 3.0
440
438
  }
441
- ]
439
+ ],
440
+ "padding": "md",
441
+ "type": "box"
442
442
  },
443
443
  {
444
444
  "type": "divider"
445
445
  },
446
446
  {
447
- "type": "grid",
448
447
  "cols": 2.0,
448
+ "gap": "md",
449
+ "type": "grid",
449
450
  "children": [
450
451
  {
451
452
  "type": "card",
@@ -458,32 +459,31 @@
458
459
  ]
459
460
  },
460
461
  {
461
- "type": "card",
462
462
  "children": [
463
463
  {
464
464
  "type": "typography",
465
465
  "content": "Graph View",
466
466
  "variant": "caption"
467
467
  }
468
- ]
468
+ ],
469
+ "type": "card"
469
470
  }
470
- ],
471
- "gap": "md"
471
+ ]
472
472
  },
473
473
  {
474
474
  "type": "line-chart",
475
475
  "data": [
476
476
  {
477
- "date": "Jan",
478
- "value": 12.0
477
+ "value": 12.0,
478
+ "date": "Jan"
479
479
  },
480
480
  {
481
481
  "value": 19.0,
482
482
  "date": "Feb"
483
483
  },
484
484
  {
485
- "date": "Mar",
486
- "value": 15.0
485
+ "value": 15.0,
486
+ "date": "Mar"
487
487
  },
488
488
  {
489
489
  "value": 25.0,
@@ -503,8 +503,8 @@
503
503
  "type": "chart-legend",
504
504
  "items": [
505
505
  {
506
- "color": "primary",
507
- "label": "Current"
506
+ "label": "Current",
507
+ "color": "primary"
508
508
  },
509
509
  {
510
510
  "label": "Previous",
@@ -513,19 +513,8 @@
513
513
  ]
514
514
  },
515
515
  {
516
- "edges": [
517
- {
518
- "source": "a",
519
- "target": "b"
520
- },
521
- {
522
- "source": "b",
523
- "target": "c"
524
- }
525
- ],
526
516
  "type": "graph-view",
527
517
  "height": 200.0,
528
- "width": 400.0,
529
518
  "nodes": [
530
519
  {
531
520
  "label": "Start",
@@ -539,16 +528,27 @@
539
528
  "id": "c",
540
529
  "label": "End"
541
530
  }
531
+ ],
532
+ "width": 400.0,
533
+ "edges": [
534
+ {
535
+ "target": "b",
536
+ "source": "a"
537
+ },
538
+ {
539
+ "source": "b",
540
+ "target": "c"
541
+ }
542
542
  ]
543
543
  }
544
544
  ],
545
- "gap": "lg",
546
- "direction": "vertical",
547
545
  "type": "stack"
548
546
  }
549
- ]
547
+ ],
548
+ "type": "scaled-diagram"
550
549
  }
551
- ]
550
+ ],
551
+ "type": "dashboard-layout"
552
552
  }
553
553
  ]
554
554
  ]
@@ -572,17 +572,31 @@
572
572
  "render-ui",
573
573
  "main",
574
574
  {
575
+ "navItems": [
576
+ {
577
+ "label": "Sensors",
578
+ "href": "/sensors",
579
+ "icon": "layout-list"
580
+ },
581
+ {
582
+ "label": "Devices",
583
+ "href": "/devices",
584
+ "icon": "cpu"
585
+ },
586
+ {
587
+ "label": "Alerts",
588
+ "href": "/alerts",
589
+ "icon": "bell"
590
+ }
591
+ ],
575
592
  "children": [
576
593
  {
577
594
  "type": "scaled-diagram",
578
595
  "children": [
579
596
  {
580
- "direction": "vertical",
581
- "gap": "lg",
582
597
  "type": "stack",
583
598
  "children": [
584
599
  {
585
- "type": "breadcrumb",
586
600
  "items": [
587
601
  {
588
602
  "href": "/",
@@ -591,13 +605,13 @@
591
605
  {
592
606
  "label": "Sensor Readings"
593
607
  }
594
- ]
608
+ ],
609
+ "type": "breadcrumb"
595
610
  },
596
611
  {
597
- "gap": "md",
598
612
  "children": [
599
613
  {
600
- "type": "stack",
614
+ "direction": "horizontal",
601
615
  "gap": "md",
602
616
  "children": [
603
617
  {
@@ -605,23 +619,24 @@
605
619
  "name": "thermometer"
606
620
  },
607
621
  {
622
+ "variant": "h2",
608
623
  "type": "typography",
609
- "content": "Sensor Readings",
610
- "variant": "h2"
624
+ "content": "Sensor Readings"
611
625
  }
612
626
  ],
613
- "direction": "horizontal"
627
+ "type": "stack"
614
628
  },
615
629
  {
630
+ "label": "Refresh",
616
631
  "variant": "secondary",
617
632
  "type": "button",
618
- "label": "Refresh",
619
633
  "icon": "refresh-cw",
620
634
  "action": "REFRESH"
621
635
  }
622
636
  ],
623
- "type": "stack",
637
+ "gap": "md",
624
638
  "direction": "horizontal",
639
+ "type": "stack",
625
640
  "justify": "between"
626
641
  },
627
642
  {
@@ -629,53 +644,51 @@
629
644
  },
630
645
  {
631
646
  "type": "box",
632
- "padding": "md",
633
647
  "children": [
634
648
  {
635
- "type": "simple-grid",
636
649
  "cols": 3.0,
637
650
  "children": [
638
651
  {
639
- "type": "card",
640
652
  "children": [
641
653
  {
642
- "gap": "sm",
643
- "type": "stack",
644
654
  "direction": "vertical",
655
+ "gap": "sm",
645
656
  "children": [
646
657
  {
647
658
  "content": "SensorId",
648
- "type": "typography",
649
- "variant": "caption"
659
+ "variant": "caption",
660
+ "type": "typography"
650
661
  },
651
662
  {
652
- "content": "@entity.sensorId",
653
663
  "type": "typography",
654
- "variant": "h3"
664
+ "variant": "h3",
665
+ "content": "@entity.sensorId"
655
666
  }
656
- ]
667
+ ],
668
+ "type": "stack"
657
669
  }
658
- ]
670
+ ],
671
+ "type": "card"
659
672
  },
660
673
  {
661
- "label": "Value",
662
674
  "type": "stat-display",
675
+ "label": "Value",
663
676
  "value": "@entity.value"
664
677
  },
665
678
  {
666
679
  "children": [
667
680
  {
668
- "direction": "vertical",
669
681
  "gap": "sm",
682
+ "direction": "vertical",
670
683
  "children": [
671
684
  {
672
- "content": "Unit",
673
685
  "type": "typography",
674
- "variant": "caption"
686
+ "variant": "caption",
687
+ "content": "Unit"
675
688
  },
676
689
  {
677
- "variant": "h3",
678
690
  "type": "typography",
691
+ "variant": "h3",
679
692
  "content": "@entity.unit"
680
693
  }
681
694
  ],
@@ -687,7 +700,6 @@
687
700
  {
688
701
  "children": [
689
702
  {
690
- "direction": "vertical",
691
703
  "children": [
692
704
  {
693
705
  "content": "Timestamp",
@@ -695,20 +707,23 @@
695
707
  "variant": "caption"
696
708
  },
697
709
  {
698
- "content": "@entity.timestamp",
699
710
  "type": "typography",
711
+ "content": "@entity.timestamp",
700
712
  "variant": "h3"
701
713
  }
702
714
  ],
715
+ "type": "stack",
703
716
  "gap": "sm",
704
- "type": "stack"
717
+ "direction": "vertical"
705
718
  }
706
719
  ],
707
720
  "type": "card"
708
721
  }
709
- ]
722
+ ],
723
+ "type": "simple-grid"
710
724
  }
711
- ]
725
+ ],
726
+ "padding": "md"
712
727
  },
713
728
  {
714
729
  "type": "divider"
@@ -716,22 +731,22 @@
716
731
  {
717
732
  "children": [
718
733
  {
719
- "type": "card",
720
734
  "children": [
721
735
  {
722
736
  "content": "Chart View",
723
737
  "type": "typography",
724
738
  "variant": "caption"
725
739
  }
726
- ]
740
+ ],
741
+ "type": "card"
727
742
  },
728
743
  {
729
744
  "type": "card",
730
745
  "children": [
731
746
  {
732
- "type": "typography",
733
747
  "variant": "caption",
734
- "content": "Graph View"
748
+ "content": "Graph View",
749
+ "type": "typography"
735
750
  }
736
751
  ]
737
752
  }
@@ -741,23 +756,22 @@
741
756
  "cols": 2.0
742
757
  },
743
758
  {
744
- "type": "line-chart",
745
759
  "data": [
746
760
  {
747
- "date": "Jan",
748
- "value": 12.0
761
+ "value": 12.0,
762
+ "date": "Jan"
749
763
  },
750
764
  {
751
- "value": 19.0,
752
- "date": "Feb"
765
+ "date": "Feb",
766
+ "value": 19.0
753
767
  },
754
768
  {
755
- "value": 15.0,
756
- "date": "Mar"
769
+ "date": "Mar",
770
+ "value": 15.0
757
771
  },
758
772
  {
759
- "value": 25.0,
760
- "date": "Apr"
773
+ "date": "Apr",
774
+ "value": 25.0
761
775
  },
762
776
  {
763
777
  "date": "May",
@@ -767,7 +781,8 @@
767
781
  "date": "Jun",
768
782
  "value": 30.0
769
783
  }
770
- ]
784
+ ],
785
+ "type": "line-chart"
771
786
  },
772
787
  {
773
788
  "items": [
@@ -783,7 +798,8 @@
783
798
  "type": "chart-legend"
784
799
  },
785
800
  {
786
- "type": "graph-view",
801
+ "width": 400.0,
802
+ "height": 200.0,
787
803
  "edges": [
788
804
  {
789
805
  "source": "a",
@@ -796,45 +812,29 @@
796
812
  ],
797
813
  "nodes": [
798
814
  {
799
- "id": "a",
800
- "label": "Start"
815
+ "label": "Start",
816
+ "id": "a"
801
817
  },
802
818
  {
803
- "label": "Process",
804
- "id": "b"
819
+ "id": "b",
820
+ "label": "Process"
805
821
  },
806
822
  {
807
- "label": "End",
808
- "id": "c"
823
+ "id": "c",
824
+ "label": "End"
809
825
  }
810
826
  ],
811
- "height": 200.0,
812
- "width": 400.0
827
+ "type": "graph-view"
813
828
  }
814
- ]
829
+ ],
830
+ "gap": "lg",
831
+ "direction": "vertical"
815
832
  }
816
833
  ]
817
834
  }
818
835
  ],
819
- "navItems": [
820
- {
821
- "label": "Sensors",
822
- "href": "/sensors",
823
- "icon": "layout-list"
824
- },
825
- {
826
- "href": "/devices",
827
- "icon": "cpu",
828
- "label": "Devices"
829
- },
830
- {
831
- "label": "Alerts",
832
- "icon": "bell",
833
- "href": "/alerts"
834
- }
835
- ],
836
- "appName": "IoT Dashboard",
837
- "type": "dashboard-layout"
836
+ "type": "dashboard-layout",
837
+ "appName": "IoT Dashboard"
838
838
  }
839
839
  ]
840
840
  ]
@@ -860,18 +860,18 @@
860
860
  {
861
861
  "navItems": [
862
862
  {
863
- "icon": "layout-list",
864
863
  "href": "/sensors",
864
+ "icon": "layout-list",
865
865
  "label": "Sensors"
866
866
  },
867
867
  {
868
- "icon": "cpu",
869
868
  "label": "Devices",
869
+ "icon": "cpu",
870
870
  "href": "/devices"
871
871
  },
872
872
  {
873
- "label": "Alerts",
874
873
  "href": "/alerts",
874
+ "label": "Alerts",
875
875
  "icon": "bell"
876
876
  }
877
877
  ],
@@ -882,12 +882,15 @@
882
882
  "type": "scaled-diagram",
883
883
  "children": [
884
884
  {
885
+ "type": "stack",
886
+ "gap": "lg",
887
+ "direction": "vertical",
885
888
  "children": [
886
889
  {
887
890
  "items": [
888
891
  {
889
- "label": "Home",
890
- "href": "/"
892
+ "href": "/",
893
+ "label": "Home"
891
894
  },
892
895
  {
893
896
  "label": "Sensor Readings"
@@ -896,65 +899,64 @@
896
899
  "type": "breadcrumb"
897
900
  },
898
901
  {
902
+ "direction": "horizontal",
899
903
  "justify": "between",
904
+ "gap": "md",
905
+ "type": "stack",
900
906
  "children": [
901
907
  {
902
- "direction": "horizontal",
908
+ "type": "stack",
903
909
  "children": [
904
910
  {
905
- "type": "icon",
906
- "name": "thermometer"
911
+ "name": "thermometer",
912
+ "type": "icon"
907
913
  },
908
914
  {
909
- "content": "Sensor Readings",
915
+ "type": "typography",
910
916
  "variant": "h2",
911
- "type": "typography"
917
+ "content": "Sensor Readings"
912
918
  }
913
919
  ],
914
920
  "gap": "md",
915
- "type": "stack"
921
+ "direction": "horizontal"
916
922
  },
917
923
  {
918
- "icon": "refresh-cw",
919
924
  "action": "REFRESH",
920
925
  "type": "button",
921
926
  "label": "Refresh",
922
- "variant": "secondary"
927
+ "variant": "secondary",
928
+ "icon": "refresh-cw"
923
929
  }
924
- ],
925
- "gap": "md",
926
- "type": "stack",
927
- "direction": "horizontal"
930
+ ]
928
931
  },
929
932
  {
930
933
  "type": "divider"
931
934
  },
932
935
  {
933
- "type": "box",
934
- "padding": "md",
935
936
  "children": [
936
937
  {
938
+ "cols": 3.0,
937
939
  "type": "simple-grid",
938
940
  "children": [
939
941
  {
940
942
  "type": "card",
941
943
  "children": [
942
944
  {
945
+ "gap": "sm",
943
946
  "direction": "vertical",
944
947
  "type": "stack",
945
948
  "children": [
946
949
  {
950
+ "content": "SensorId",
947
951
  "type": "typography",
948
- "variant": "caption",
949
- "content": "SensorId"
952
+ "variant": "caption"
950
953
  },
951
954
  {
952
- "variant": "h3",
955
+ "type": "typography",
953
956
  "content": "@entity.sensorId",
954
- "type": "typography"
957
+ "variant": "h3"
955
958
  }
956
- ],
957
- "gap": "sm"
959
+ ]
958
960
  }
959
961
  ]
960
962
  },
@@ -967,21 +969,21 @@
967
969
  "type": "card",
968
970
  "children": [
969
971
  {
972
+ "gap": "sm",
970
973
  "type": "stack",
974
+ "direction": "vertical",
971
975
  "children": [
972
976
  {
973
- "content": "Unit",
974
977
  "variant": "caption",
975
- "type": "typography"
978
+ "type": "typography",
979
+ "content": "Unit"
976
980
  },
977
981
  {
978
- "type": "typography",
979
982
  "content": "@entity.unit",
983
+ "type": "typography",
980
984
  "variant": "h3"
981
985
  }
982
- ],
983
- "direction": "vertical",
984
- "gap": "sm"
986
+ ]
985
987
  }
986
988
  ]
987
989
  },
@@ -989,54 +991,55 @@
989
991
  "type": "card",
990
992
  "children": [
991
993
  {
992
- "direction": "vertical",
993
994
  "type": "stack",
995
+ "direction": "vertical",
996
+ "gap": "sm",
994
997
  "children": [
995
998
  {
996
999
  "type": "typography",
997
- "variant": "caption",
998
- "content": "Timestamp"
1000
+ "content": "Timestamp",
1001
+ "variant": "caption"
999
1002
  },
1000
1003
  {
1001
- "type": "typography",
1002
1004
  "variant": "h3",
1003
- "content": "@entity.timestamp"
1005
+ "content": "@entity.timestamp",
1006
+ "type": "typography"
1004
1007
  }
1005
- ],
1006
- "gap": "sm"
1008
+ ]
1007
1009
  }
1008
1010
  ]
1009
1011
  }
1010
- ],
1011
- "cols": 3.0
1012
+ ]
1012
1013
  }
1013
- ]
1014
+ ],
1015
+ "type": "box",
1016
+ "padding": "md"
1014
1017
  },
1015
1018
  {
1016
1019
  "type": "divider"
1017
1020
  },
1018
1021
  {
1019
1022
  "cols": 2.0,
1020
- "gap": "md",
1021
1023
  "type": "grid",
1024
+ "gap": "md",
1022
1025
  "children": [
1023
1026
  {
1027
+ "type": "card",
1024
1028
  "children": [
1025
1029
  {
1026
- "variant": "caption",
1027
1030
  "content": "Chart View",
1028
- "type": "typography"
1031
+ "type": "typography",
1032
+ "variant": "caption"
1029
1033
  }
1030
- ],
1031
- "type": "card"
1034
+ ]
1032
1035
  },
1033
1036
  {
1034
1037
  "type": "card",
1035
1038
  "children": [
1036
1039
  {
1037
1040
  "variant": "caption",
1038
- "content": "Graph View",
1039
- "type": "typography"
1041
+ "type": "typography",
1042
+ "content": "Graph View"
1040
1043
  }
1041
1044
  ]
1042
1045
  }
@@ -1054,8 +1057,8 @@
1054
1057
  "value": 19.0
1055
1058
  },
1056
1059
  {
1057
- "value": 15.0,
1058
- "date": "Mar"
1060
+ "date": "Mar",
1061
+ "value": 15.0
1059
1062
  },
1060
1063
  {
1061
1064
  "date": "Apr",
@@ -1074,49 +1077,46 @@
1074
1077
  {
1075
1078
  "items": [
1076
1079
  {
1077
- "color": "primary",
1078
- "label": "Current"
1080
+ "label": "Current",
1081
+ "color": "primary"
1079
1082
  },
1080
1083
  {
1081
- "color": "muted",
1082
- "label": "Previous"
1084
+ "label": "Previous",
1085
+ "color": "muted"
1083
1086
  }
1084
1087
  ],
1085
1088
  "type": "chart-legend"
1086
1089
  },
1087
1090
  {
1091
+ "width": 400.0,
1088
1092
  "nodes": [
1089
1093
  {
1090
- "label": "Start",
1091
- "id": "a"
1094
+ "id": "a",
1095
+ "label": "Start"
1092
1096
  },
1093
1097
  {
1094
- "label": "Process",
1095
- "id": "b"
1098
+ "id": "b",
1099
+ "label": "Process"
1096
1100
  },
1097
1101
  {
1098
1102
  "id": "c",
1099
1103
  "label": "End"
1100
1104
  }
1101
1105
  ],
1102
- "height": 200.0,
1103
- "type": "graph-view",
1104
1106
  "edges": [
1105
1107
  {
1106
- "target": "b",
1107
- "source": "a"
1108
+ "source": "a",
1109
+ "target": "b"
1108
1110
  },
1109
1111
  {
1110
1112
  "source": "b",
1111
1113
  "target": "c"
1112
1114
  }
1113
1115
  ],
1114
- "width": 400.0
1116
+ "type": "graph-view",
1117
+ "height": 200.0
1115
1118
  }
1116
- ],
1117
- "type": "stack",
1118
- "direction": "vertical",
1119
- "gap": "lg"
1119
+ ]
1120
1120
  }
1121
1121
  ]
1122
1122
  }
@@ -1145,19 +1145,34 @@
1145
1145
  "main",
1146
1146
  {
1147
1147
  "appName": "IoT Dashboard",
1148
- "type": "dashboard-layout",
1148
+ "navItems": [
1149
+ {
1150
+ "label": "Sensors",
1151
+ "icon": "layout-list",
1152
+ "href": "/sensors"
1153
+ },
1154
+ {
1155
+ "icon": "cpu",
1156
+ "href": "/devices",
1157
+ "label": "Devices"
1158
+ },
1159
+ {
1160
+ "href": "/alerts",
1161
+ "label": "Alerts",
1162
+ "icon": "bell"
1163
+ }
1164
+ ],
1149
1165
  "children": [
1150
1166
  {
1151
1167
  "children": [
1152
1168
  {
1153
1169
  "gap": "lg",
1154
- "type": "stack",
1155
1170
  "children": [
1156
1171
  {
1157
1172
  "items": [
1158
1173
  {
1159
- "label": "Home",
1160
- "href": "/"
1174
+ "href": "/",
1175
+ "label": "Home"
1161
1176
  },
1162
1177
  {
1163
1178
  "label": "Sensor Readings"
@@ -1166,76 +1181,77 @@
1166
1181
  "type": "breadcrumb"
1167
1182
  },
1168
1183
  {
1184
+ "type": "stack",
1185
+ "gap": "md",
1169
1186
  "children": [
1170
1187
  {
1188
+ "direction": "horizontal",
1171
1189
  "children": [
1172
1190
  {
1173
1191
  "type": "icon",
1174
1192
  "name": "thermometer"
1175
1193
  },
1176
1194
  {
1195
+ "type": "typography",
1177
1196
  "content": "Sensor Readings",
1178
- "variant": "h2",
1179
- "type": "typography"
1197
+ "variant": "h2"
1180
1198
  }
1181
1199
  ],
1182
1200
  "type": "stack",
1183
- "direction": "horizontal",
1184
1201
  "gap": "md"
1185
1202
  },
1186
1203
  {
1187
- "variant": "secondary",
1188
- "action": "REFRESH",
1189
- "label": "Refresh",
1190
1204
  "type": "button",
1191
- "icon": "refresh-cw"
1205
+ "label": "Refresh",
1206
+ "variant": "secondary",
1207
+ "icon": "refresh-cw",
1208
+ "action": "REFRESH"
1192
1209
  }
1193
1210
  ],
1194
- "type": "stack",
1195
1211
  "direction": "horizontal",
1196
- "gap": "md",
1197
1212
  "justify": "between"
1198
1213
  },
1199
1214
  {
1200
1215
  "type": "divider"
1201
1216
  },
1202
1217
  {
1218
+ "padding": "md",
1203
1219
  "type": "box",
1204
1220
  "children": [
1205
1221
  {
1206
- "cols": 3.0,
1222
+ "type": "simple-grid",
1207
1223
  "children": [
1208
1224
  {
1209
- "type": "card",
1210
1225
  "children": [
1211
1226
  {
1212
- "gap": "sm",
1227
+ "type": "stack",
1213
1228
  "children": [
1214
1229
  {
1230
+ "type": "typography",
1215
1231
  "variant": "caption",
1216
- "content": "SensorId",
1217
- "type": "typography"
1232
+ "content": "SensorId"
1218
1233
  },
1219
1234
  {
1220
1235
  "type": "typography",
1221
- "content": "@entity.sensorId",
1222
- "variant": "h3"
1236
+ "variant": "h3",
1237
+ "content": "@entity.sensorId"
1223
1238
  }
1224
1239
  ],
1225
1240
  "direction": "vertical",
1226
- "type": "stack"
1241
+ "gap": "sm"
1227
1242
  }
1228
- ]
1243
+ ],
1244
+ "type": "card"
1229
1245
  },
1230
1246
  {
1231
- "value": "@entity.value",
1247
+ "label": "Value",
1232
1248
  "type": "stat-display",
1233
- "label": "Value"
1249
+ "value": "@entity.value"
1234
1250
  },
1235
1251
  {
1252
+ "type": "card",
1236
1253
  "children": [
1237
1254
  {
1238
- "direction": "vertical",
1239
1255
  "gap": "sm",
1240
1256
  "type": "stack",
1241
1257
  "children": [
@@ -1249,10 +1265,10 @@
1249
1265
  "variant": "h3",
1250
1266
  "content": "@entity.unit"
1251
1267
  }
1252
- ]
1268
+ ],
1269
+ "direction": "vertical"
1253
1270
  }
1254
- ],
1255
- "type": "card"
1271
+ ]
1256
1272
  },
1257
1273
  {
1258
1274
  "type": "card",
@@ -1260,42 +1276,43 @@
1260
1276
  {
1261
1277
  "children": [
1262
1278
  {
1263
- "variant": "caption",
1264
1279
  "content": "Timestamp",
1280
+ "variant": "caption",
1265
1281
  "type": "typography"
1266
1282
  },
1267
1283
  {
1268
1284
  "variant": "h3",
1269
- "content": "@entity.timestamp",
1270
- "type": "typography"
1285
+ "type": "typography",
1286
+ "content": "@entity.timestamp"
1271
1287
  }
1272
1288
  ],
1289
+ "type": "stack",
1273
1290
  "direction": "vertical",
1274
- "gap": "sm",
1275
- "type": "stack"
1291
+ "gap": "sm"
1276
1292
  }
1277
1293
  ]
1278
1294
  }
1279
1295
  ],
1280
- "type": "simple-grid"
1296
+ "cols": 3.0
1281
1297
  }
1282
- ],
1283
- "padding": "md"
1298
+ ]
1284
1299
  },
1285
1300
  {
1286
1301
  "type": "divider"
1287
1302
  },
1288
1303
  {
1304
+ "cols": 2.0,
1305
+ "gap": "md",
1289
1306
  "children": [
1290
1307
  {
1291
- "type": "card",
1292
1308
  "children": [
1293
1309
  {
1294
1310
  "content": "Chart View",
1295
- "variant": "caption",
1296
- "type": "typography"
1311
+ "type": "typography",
1312
+ "variant": "caption"
1297
1313
  }
1298
- ]
1314
+ ],
1315
+ "type": "card"
1299
1316
  },
1300
1317
  {
1301
1318
  "type": "card",
@@ -1308,66 +1325,53 @@
1308
1325
  ]
1309
1326
  }
1310
1327
  ],
1311
- "gap": "md",
1312
- "type": "grid",
1313
- "cols": 2.0
1328
+ "type": "grid"
1314
1329
  },
1315
1330
  {
1316
- "type": "line-chart",
1317
1331
  "data": [
1318
1332
  {
1319
- "value": 12.0,
1320
- "date": "Jan"
1333
+ "date": "Jan",
1334
+ "value": 12.0
1321
1335
  },
1322
1336
  {
1323
- "value": 19.0,
1324
- "date": "Feb"
1337
+ "date": "Feb",
1338
+ "value": 19.0
1325
1339
  },
1326
1340
  {
1327
1341
  "date": "Mar",
1328
1342
  "value": 15.0
1329
1343
  },
1330
1344
  {
1331
- "value": 25.0,
1332
- "date": "Apr"
1345
+ "date": "Apr",
1346
+ "value": 25.0
1333
1347
  },
1334
1348
  {
1335
- "date": "May",
1336
- "value": 22.0
1349
+ "value": 22.0,
1350
+ "date": "May"
1337
1351
  },
1338
1352
  {
1339
1353
  "value": 30.0,
1340
1354
  "date": "Jun"
1341
1355
  }
1342
- ]
1356
+ ],
1357
+ "type": "line-chart"
1343
1358
  },
1344
1359
  {
1360
+ "type": "chart-legend",
1345
1361
  "items": [
1346
1362
  {
1347
1363
  "label": "Current",
1348
1364
  "color": "primary"
1349
1365
  },
1350
1366
  {
1351
- "label": "Previous",
1352
- "color": "muted"
1367
+ "color": "muted",
1368
+ "label": "Previous"
1353
1369
  }
1354
- ],
1355
- "type": "chart-legend"
1370
+ ]
1356
1371
  },
1357
1372
  {
1358
- "type": "graph-view",
1359
- "width": 400.0,
1360
1373
  "height": 200.0,
1361
- "edges": [
1362
- {
1363
- "target": "b",
1364
- "source": "a"
1365
- },
1366
- {
1367
- "target": "c",
1368
- "source": "b"
1369
- }
1370
- ],
1374
+ "type": "graph-view",
1371
1375
  "nodes": [
1372
1376
  {
1373
1377
  "label": "Start",
@@ -1378,35 +1382,31 @@
1378
1382
  "label": "Process"
1379
1383
  },
1380
1384
  {
1381
- "id": "c",
1382
- "label": "End"
1385
+ "label": "End",
1386
+ "id": "c"
1387
+ }
1388
+ ],
1389
+ "width": 400.0,
1390
+ "edges": [
1391
+ {
1392
+ "target": "b",
1393
+ "source": "a"
1394
+ },
1395
+ {
1396
+ "source": "b",
1397
+ "target": "c"
1383
1398
  }
1384
1399
  ]
1385
1400
  }
1386
1401
  ],
1402
+ "type": "stack",
1387
1403
  "direction": "vertical"
1388
1404
  }
1389
1405
  ],
1390
1406
  "type": "scaled-diagram"
1391
1407
  }
1392
1408
  ],
1393
- "navItems": [
1394
- {
1395
- "href": "/sensors",
1396
- "icon": "layout-list",
1397
- "label": "Sensors"
1398
- },
1399
- {
1400
- "href": "/devices",
1401
- "icon": "cpu",
1402
- "label": "Devices"
1403
- },
1404
- {
1405
- "icon": "bell",
1406
- "label": "Alerts",
1407
- "href": "/alerts"
1408
- }
1409
- ]
1409
+ "type": "dashboard-layout"
1410
1410
  }
1411
1411
  ]
1412
1412
  ]
@@ -1430,15 +1430,33 @@
1430
1430
  "render-ui",
1431
1431
  "main",
1432
1432
  {
1433
+ "type": "dashboard-layout",
1434
+ "appName": "IoT Dashboard",
1435
+ "navItems": [
1436
+ {
1437
+ "label": "Sensors",
1438
+ "icon": "layout-list",
1439
+ "href": "/sensors"
1440
+ },
1441
+ {
1442
+ "icon": "cpu",
1443
+ "href": "/devices",
1444
+ "label": "Devices"
1445
+ },
1446
+ {
1447
+ "href": "/alerts",
1448
+ "icon": "bell",
1449
+ "label": "Alerts"
1450
+ }
1451
+ ],
1433
1452
  "children": [
1434
1453
  {
1435
1454
  "children": [
1436
1455
  {
1437
- "type": "stack",
1438
1456
  "direction": "vertical",
1439
- "gap": "lg",
1440
1457
  "children": [
1441
1458
  {
1459
+ "type": "breadcrumb",
1442
1460
  "items": [
1443
1461
  {
1444
1462
  "href": "/",
@@ -1447,38 +1465,37 @@
1447
1465
  {
1448
1466
  "label": "Sensor Readings"
1449
1467
  }
1450
- ],
1451
- "type": "breadcrumb"
1468
+ ]
1452
1469
  },
1453
1470
  {
1454
- "type": "stack",
1471
+ "gap": "md",
1472
+ "justify": "between",
1455
1473
  "children": [
1456
1474
  {
1457
1475
  "type": "stack",
1458
1476
  "direction": "horizontal",
1477
+ "gap": "md",
1459
1478
  "children": [
1460
1479
  {
1461
- "name": "thermometer",
1462
- "type": "icon"
1480
+ "type": "icon",
1481
+ "name": "thermometer"
1463
1482
  },
1464
1483
  {
1465
- "content": "Sensor Readings",
1484
+ "type": "typography",
1466
1485
  "variant": "h2",
1467
- "type": "typography"
1486
+ "content": "Sensor Readings"
1468
1487
  }
1469
- ],
1470
- "gap": "md"
1488
+ ]
1471
1489
  },
1472
1490
  {
1473
- "type": "button",
1474
- "icon": "refresh-cw",
1475
- "action": "REFRESH",
1476
1491
  "label": "Refresh",
1477
- "variant": "secondary"
1492
+ "icon": "refresh-cw",
1493
+ "variant": "secondary",
1494
+ "type": "button",
1495
+ "action": "REFRESH"
1478
1496
  }
1479
1497
  ],
1480
- "gap": "md",
1481
- "justify": "between",
1498
+ "type": "stack",
1482
1499
  "direction": "horizontal"
1483
1500
  },
1484
1501
  {
@@ -1486,7 +1503,6 @@
1486
1503
  },
1487
1504
  {
1488
1505
  "padding": "md",
1489
- "type": "box",
1490
1506
  "children": [
1491
1507
  {
1492
1508
  "cols": 3.0,
@@ -1495,33 +1511,34 @@
1495
1511
  "type": "card",
1496
1512
  "children": [
1497
1513
  {
1498
- "type": "stack",
1514
+ "direction": "vertical",
1499
1515
  "children": [
1500
1516
  {
1501
1517
  "content": "SensorId",
1502
- "type": "typography",
1503
- "variant": "caption"
1518
+ "variant": "caption",
1519
+ "type": "typography"
1504
1520
  },
1505
1521
  {
1522
+ "type": "typography",
1506
1523
  "variant": "h3",
1507
- "content": "@entity.sensorId",
1508
- "type": "typography"
1524
+ "content": "@entity.sensorId"
1509
1525
  }
1510
1526
  ],
1511
- "direction": "vertical",
1527
+ "type": "stack",
1512
1528
  "gap": "sm"
1513
1529
  }
1514
1530
  ]
1515
1531
  },
1516
1532
  {
1533
+ "value": "@entity.value",
1517
1534
  "type": "stat-display",
1518
- "label": "Value",
1519
- "value": "@entity.value"
1535
+ "label": "Value"
1520
1536
  },
1521
1537
  {
1522
1538
  "type": "card",
1523
1539
  "children": [
1524
1540
  {
1541
+ "direction": "vertical",
1525
1542
  "children": [
1526
1543
  {
1527
1544
  "type": "typography",
@@ -1530,95 +1547,95 @@
1530
1547
  },
1531
1548
  {
1532
1549
  "variant": "h3",
1533
- "content": "@entity.unit",
1534
- "type": "typography"
1550
+ "type": "typography",
1551
+ "content": "@entity.unit"
1535
1552
  }
1536
1553
  ],
1537
- "direction": "vertical",
1538
- "gap": "sm",
1539
- "type": "stack"
1554
+ "type": "stack",
1555
+ "gap": "sm"
1540
1556
  }
1541
1557
  ]
1542
1558
  },
1543
1559
  {
1544
- "type": "card",
1545
1560
  "children": [
1546
1561
  {
1547
- "gap": "sm",
1548
1562
  "type": "stack",
1549
- "direction": "vertical",
1563
+ "gap": "sm",
1550
1564
  "children": [
1551
1565
  {
1566
+ "type": "typography",
1552
1567
  "variant": "caption",
1553
- "content": "Timestamp",
1554
- "type": "typography"
1568
+ "content": "Timestamp"
1555
1569
  },
1556
1570
  {
1557
1571
  "type": "typography",
1558
1572
  "variant": "h3",
1559
1573
  "content": "@entity.timestamp"
1560
1574
  }
1561
- ]
1575
+ ],
1576
+ "direction": "vertical"
1562
1577
  }
1563
- ]
1578
+ ],
1579
+ "type": "card"
1564
1580
  }
1565
1581
  ],
1566
1582
  "type": "simple-grid"
1567
1583
  }
1568
- ]
1584
+ ],
1585
+ "type": "box"
1569
1586
  },
1570
1587
  {
1571
1588
  "type": "divider"
1572
1589
  },
1573
1590
  {
1591
+ "cols": 2.0,
1574
1592
  "children": [
1575
1593
  {
1594
+ "type": "card",
1576
1595
  "children": [
1577
1596
  {
1578
- "type": "typography",
1597
+ "content": "Chart View",
1579
1598
  "variant": "caption",
1580
- "content": "Chart View"
1599
+ "type": "typography"
1581
1600
  }
1582
- ],
1583
- "type": "card"
1601
+ ]
1584
1602
  },
1585
1603
  {
1586
1604
  "children": [
1587
1605
  {
1606
+ "type": "typography",
1588
1607
  "variant": "caption",
1589
- "content": "Graph View",
1590
- "type": "typography"
1608
+ "content": "Graph View"
1591
1609
  }
1592
1610
  ],
1593
1611
  "type": "card"
1594
1612
  }
1595
1613
  ],
1596
- "cols": 2.0,
1597
- "type": "grid",
1598
- "gap": "md"
1614
+ "gap": "md",
1615
+ "type": "grid"
1599
1616
  },
1600
1617
  {
1601
1618
  "type": "line-chart",
1602
1619
  "data": [
1603
1620
  {
1604
- "date": "Jan",
1605
- "value": 12.0
1621
+ "value": 12.0,
1622
+ "date": "Jan"
1606
1623
  },
1607
1624
  {
1608
1625
  "date": "Feb",
1609
1626
  "value": 19.0
1610
1627
  },
1611
1628
  {
1612
- "date": "Mar",
1613
- "value": 15.0
1629
+ "value": 15.0,
1630
+ "date": "Mar"
1614
1631
  },
1615
1632
  {
1616
- "date": "Apr",
1617
- "value": 25.0
1633
+ "value": 25.0,
1634
+ "date": "Apr"
1618
1635
  },
1619
1636
  {
1620
- "value": 22.0,
1621
- "date": "May"
1637
+ "date": "May",
1638
+ "value": 22.0
1622
1639
  },
1623
1640
  {
1624
1641
  "date": "Jun",
@@ -1630,27 +1647,17 @@
1630
1647
  "type": "chart-legend",
1631
1648
  "items": [
1632
1649
  {
1633
- "label": "Current",
1634
- "color": "primary"
1650
+ "color": "primary",
1651
+ "label": "Current"
1635
1652
  },
1636
1653
  {
1637
- "color": "muted",
1638
- "label": "Previous"
1654
+ "label": "Previous",
1655
+ "color": "muted"
1639
1656
  }
1640
1657
  ]
1641
1658
  },
1642
1659
  {
1643
1660
  "type": "graph-view",
1644
- "edges": [
1645
- {
1646
- "source": "a",
1647
- "target": "b"
1648
- },
1649
- {
1650
- "source": "b",
1651
- "target": "c"
1652
- }
1653
- ],
1654
1661
  "nodes": [
1655
1662
  {
1656
1663
  "label": "Start",
@@ -1666,32 +1673,25 @@
1666
1673
  }
1667
1674
  ],
1668
1675
  "width": 400.0,
1669
- "height": 200.0
1676
+ "height": 200.0,
1677
+ "edges": [
1678
+ {
1679
+ "source": "a",
1680
+ "target": "b"
1681
+ },
1682
+ {
1683
+ "source": "b",
1684
+ "target": "c"
1685
+ }
1686
+ ]
1670
1687
  }
1671
- ]
1688
+ ],
1689
+ "type": "stack",
1690
+ "gap": "lg"
1672
1691
  }
1673
1692
  ],
1674
1693
  "type": "scaled-diagram"
1675
1694
  }
1676
- ],
1677
- "appName": "IoT Dashboard",
1678
- "type": "dashboard-layout",
1679
- "navItems": [
1680
- {
1681
- "icon": "layout-list",
1682
- "href": "/sensors",
1683
- "label": "Sensors"
1684
- },
1685
- {
1686
- "href": "/devices",
1687
- "label": "Devices",
1688
- "icon": "cpu"
1689
- },
1690
- {
1691
- "label": "Alerts",
1692
- "icon": "bell",
1693
- "href": "/alerts"
1694
- }
1695
1695
  ]
1696
1696
  }
1697
1697
  ]
@@ -1761,7 +1761,7 @@
1761
1761
  "event": "DeviceLoaded",
1762
1762
  "description": "Fired when Device finishes loading",
1763
1763
  "scope": "internal",
1764
- "payload": [
1764
+ "payloadSchema": [
1765
1765
  {
1766
1766
  "name": "data",
1767
1767
  "type": "[Device]"
@@ -1772,7 +1772,7 @@
1772
1772
  "event": "DeviceLoadFailed",
1773
1773
  "description": "Fired when Device fails to load",
1774
1774
  "scope": "internal",
1775
- "payload": [
1775
+ "payloadSchema": [
1776
1776
  {
1777
1777
  "name": "error",
1778
1778
  "type": "string"
@@ -1825,7 +1825,7 @@
1825
1825
  {
1826
1826
  "key": "DeviceLoaded",
1827
1827
  "name": "Device loaded",
1828
- "payload": [
1828
+ "payloadSchema": [
1829
1829
  {
1830
1830
  "name": "data",
1831
1831
  "type": "[Device]"
@@ -1835,7 +1835,7 @@
1835
1835
  {
1836
1836
  "key": "DeviceLoadFailed",
1837
1837
  "name": "Device load failed",
1838
- "payload": [
1838
+ "payloadSchema": [
1839
1839
  {
1840
1840
  "name": "error",
1841
1841
  "type": "string"
@@ -1858,8 +1858,8 @@
1858
1858
  "Device",
1859
1859
  {
1860
1860
  "emit": {
1861
- "success": "DeviceLoaded",
1862
- "failure": "DeviceLoadFailed"
1861
+ "failure": "DeviceLoadFailed",
1862
+ "success": "DeviceLoaded"
1863
1863
  }
1864
1864
  }
1865
1865
  ],
@@ -1867,7 +1867,8 @@
1867
1867
  "render-ui",
1868
1868
  "main",
1869
1869
  {
1870
- "type": "stack",
1870
+ "direction": "vertical",
1871
+ "gap": "md",
1871
1872
  "align": "center",
1872
1873
  "className": "py-12",
1873
1874
  "children": [
@@ -1876,13 +1877,12 @@
1876
1877
  },
1877
1878
  {
1878
1879
  "variant": "caption",
1880
+ "content": "Loading…",
1879
1881
  "type": "typography",
1880
- "color": "muted",
1881
- "content": "Loading…"
1882
+ "color": "muted"
1882
1883
  }
1883
1884
  ],
1884
- "gap": "md",
1885
- "direction": "vertical"
1885
+ "type": "stack"
1886
1886
  }
1887
1887
  ]
1888
1888
  ]
@@ -1896,41 +1896,23 @@
1896
1896
  "render-ui",
1897
1897
  "main",
1898
1898
  {
1899
- "navItems": [
1900
- {
1901
- "icon": "layout-list",
1902
- "label": "Sensors",
1903
- "href": "/sensors"
1904
- },
1905
- {
1906
- "label": "Devices",
1907
- "href": "/devices",
1908
- "icon": "cpu"
1909
- },
1910
- {
1911
- "icon": "bell",
1912
- "href": "/alerts",
1913
- "label": "Alerts"
1914
- }
1915
- ],
1916
- "type": "dashboard-layout",
1917
- "appName": "IoT Dashboard",
1918
1899
  "children": [
1919
1900
  {
1920
- "direction": "vertical",
1921
1901
  "type": "stack",
1922
- "gap": "lg",
1923
- "className": "max-w-5xl mx-auto w-full",
1902
+ "direction": "vertical",
1924
1903
  "children": [
1925
1904
  {
1926
- "justify": "between",
1905
+ "direction": "horizontal",
1927
1906
  "type": "stack",
1928
- "align": "center",
1907
+ "justify": "between",
1929
1908
  "gap": "md",
1930
- "direction": "horizontal",
1909
+ "align": "center",
1931
1910
  "children": [
1932
1911
  {
1912
+ "type": "stack",
1933
1913
  "direction": "horizontal",
1914
+ "gap": "sm",
1915
+ "align": "center",
1934
1916
  "children": [
1935
1917
  {
1936
1918
  "name": "cpu",
@@ -1938,27 +1920,24 @@
1938
1920
  },
1939
1921
  {
1940
1922
  "content": "Devices",
1941
- "variant": "h2",
1942
- "type": "typography"
1923
+ "type": "typography",
1924
+ "variant": "h2"
1943
1925
  }
1944
- ],
1945
- "type": "stack",
1946
- "gap": "sm",
1947
- "align": "center"
1926
+ ]
1948
1927
  },
1949
1928
  {
1950
- "gap": "sm",
1929
+ "type": "stack",
1951
1930
  "direction": "horizontal",
1952
1931
  "children": [
1953
1932
  {
1954
- "variant": "primary",
1955
- "type": "button",
1956
1933
  "action": "CREATE",
1957
1934
  "label": "Create Device",
1958
- "icon": "plus"
1935
+ "variant": "primary",
1936
+ "icon": "plus",
1937
+ "type": "button"
1959
1938
  }
1960
1939
  ],
1961
- "type": "stack"
1940
+ "gap": "sm"
1962
1941
  }
1963
1942
  ]
1964
1943
  },
@@ -1966,7 +1945,11 @@
1966
1945
  "type": "divider"
1967
1946
  },
1968
1947
  {
1948
+ "cols": 3.0,
1949
+ "gap": "md",
1969
1950
  "type": "data-grid",
1951
+ "entity": "@payload.data",
1952
+ "fields": [],
1970
1953
  "itemActions": [
1971
1954
  {
1972
1955
  "variant": "ghost",
@@ -1974,45 +1957,62 @@
1974
1957
  "event": "VIEW"
1975
1958
  },
1976
1959
  {
1977
- "label": "Edit",
1960
+ "event": "EDIT",
1978
1961
  "variant": "ghost",
1979
- "event": "EDIT"
1962
+ "label": "Edit"
1980
1963
  },
1981
1964
  {
1982
- "event": "DELETE",
1983
1965
  "label": "Delete",
1966
+ "event": "DELETE",
1984
1967
  "variant": "danger"
1985
1968
  }
1986
1969
  ],
1987
- "gap": "md",
1988
- "fields": [],
1989
- "entity": "@payload.data",
1990
1970
  "columns": [
1991
1971
  {
1992
1972
  "variant": "h3",
1993
- "name": "name",
1994
- "icon": "cpu"
1973
+ "icon": "cpu",
1974
+ "name": "name"
1995
1975
  },
1996
1976
  {
1997
- "name": "status",
1998
- "variant": "badge"
1977
+ "variant": "badge",
1978
+ "name": "status"
1999
1979
  },
2000
1980
  {
2001
1981
  "name": "type",
2002
1982
  "variant": "body"
2003
1983
  },
2004
1984
  {
1985
+ "label": "Last Seen",
2005
1986
  "variant": "caption",
2006
- "name": "lastSeen",
2007
1987
  "format": "date",
2008
- "label": "Last Seen"
1988
+ "name": "lastSeen"
2009
1989
  }
2010
- ],
2011
- "cols": 3.0
1990
+ ]
2012
1991
  }
2013
- ]
1992
+ ],
1993
+ "gap": "lg",
1994
+ "className": "max-w-5xl mx-auto w-full"
2014
1995
  }
2015
- ]
1996
+ ],
1997
+ "navItems": [
1998
+ {
1999
+ "icon": "layout-list",
2000
+ "href": "/sensors",
2001
+ "label": "Sensors"
2002
+ },
2003
+ {
2004
+ "icon": "cpu",
2005
+ "label": "Devices",
2006
+ "href": "/devices"
2007
+ },
2008
+ {
2009
+ "label": "Alerts",
2010
+ "href": "/alerts",
2011
+ "icon": "bell"
2012
+ }
2013
+ ],
2014
+ "type": "dashboard-layout",
2015
+ "appName": "IoT Dashboard"
2016
2016
  }
2017
2017
  ]
2018
2018
  ]
@@ -2028,7 +2028,6 @@
2028
2028
  {
2029
2029
  "gap": "md",
2030
2030
  "type": "stack",
2031
- "align": "center",
2032
2031
  "children": [
2033
2032
  {
2034
2033
  "color": "destructive",
@@ -2036,26 +2035,27 @@
2036
2035
  "name": "alert-triangle"
2037
2036
  },
2038
2037
  {
2038
+ "type": "typography",
2039
2039
  "variant": "h3",
2040
- "content": "Failed to load device",
2041
- "type": "typography"
2040
+ "content": "Failed to load device"
2042
2041
  },
2043
2042
  {
2044
2043
  "variant": "body",
2045
- "content": "@payload.error",
2044
+ "color": "muted",
2046
2045
  "type": "typography",
2047
- "color": "muted"
2046
+ "content": "@payload.error"
2048
2047
  },
2049
2048
  {
2050
- "label": "Retry",
2051
- "variant": "primary",
2052
2049
  "icon": "rotate-ccw",
2050
+ "type": "button",
2053
2051
  "action": "INIT",
2054
- "type": "button"
2052
+ "label": "Retry",
2053
+ "variant": "primary"
2055
2054
  }
2056
2055
  ],
2057
- "className": "py-12",
2058
- "direction": "vertical"
2056
+ "align": "center",
2057
+ "direction": "vertical",
2058
+ "className": "py-12"
2059
2059
  }
2060
2060
  ]
2061
2061
  ]
@@ -2076,7 +2076,7 @@
2076
2076
  "event": "DeviceLoadFailed",
2077
2077
  "description": "Fired when Device fails to load",
2078
2078
  "scope": "internal",
2079
- "payload": [
2079
+ "payloadSchema": [
2080
2080
  {
2081
2081
  "name": "error",
2082
2082
  "type": "string"
@@ -2091,7 +2091,7 @@
2091
2091
  "event": "DeviceLoaded",
2092
2092
  "description": "Fired when Device finishes loading",
2093
2093
  "scope": "internal",
2094
- "payload": [
2094
+ "payloadSchema": [
2095
2095
  {
2096
2096
  "name": "data",
2097
2097
  "type": "[Device]"
@@ -2101,7 +2101,7 @@
2101
2101
  {
2102
2102
  "event": "DeviceSaveFailed",
2103
2103
  "scope": "internal",
2104
- "payload": [
2104
+ "payloadSchema": [
2105
2105
  {
2106
2106
  "name": "error",
2107
2107
  "type": "string"
@@ -2115,7 +2115,7 @@
2115
2115
  {
2116
2116
  "event": "DeviceSaved",
2117
2117
  "scope": "internal",
2118
- "payload": [
2118
+ "payloadSchema": [
2119
2119
  {
2120
2120
  "name": "id",
2121
2121
  "type": "string"
@@ -2149,7 +2149,7 @@
2149
2149
  {
2150
2150
  "key": "SAVE",
2151
2151
  "name": "Save",
2152
- "payload": [
2152
+ "payloadSchema": [
2153
2153
  {
2154
2154
  "name": "data",
2155
2155
  "type": "string"
@@ -2163,7 +2163,7 @@
2163
2163
  {
2164
2164
  "key": "DeviceLoadFailed",
2165
2165
  "name": "Device load failed",
2166
- "payload": [
2166
+ "payloadSchema": [
2167
2167
  {
2168
2168
  "name": "error",
2169
2169
  "type": "string"
@@ -2177,7 +2177,7 @@
2177
2177
  {
2178
2178
  "key": "DeviceLoaded",
2179
2179
  "name": "Device loaded",
2180
- "payload": [
2180
+ "payloadSchema": [
2181
2181
  {
2182
2182
  "name": "data",
2183
2183
  "type": "[Device]"
@@ -2187,7 +2187,7 @@
2187
2187
  {
2188
2188
  "key": "DeviceSaveFailed",
2189
2189
  "name": "Device save failed",
2190
- "payload": [
2190
+ "payloadSchema": [
2191
2191
  {
2192
2192
  "name": "error",
2193
2193
  "type": "string"
@@ -2201,7 +2201,7 @@
2201
2201
  {
2202
2202
  "key": "DeviceSaved",
2203
2203
  "name": "Device saved",
2204
- "payload": [
2204
+ "payloadSchema": [
2205
2205
  {
2206
2206
  "name": "id",
2207
2207
  "type": "string"
@@ -2231,8 +2231,8 @@
2231
2231
  "Device",
2232
2232
  {
2233
2233
  "emit": {
2234
- "success": "DeviceLoaded",
2235
- "failure": "DeviceLoadFailed"
2234
+ "failure": "DeviceLoadFailed",
2235
+ "success": "DeviceLoaded"
2236
2236
  }
2237
2237
  }
2238
2238
  ],
@@ -2242,20 +2242,20 @@
2242
2242
  {
2243
2243
  "children": [
2244
2244
  {
2245
+ "type": "stack",
2246
+ "gap": "sm",
2245
2247
  "children": [
2246
2248
  {
2247
- "type": "icon",
2248
- "name": "plus-circle"
2249
+ "name": "plus-circle",
2250
+ "type": "icon"
2249
2251
  },
2250
2252
  {
2251
- "type": "typography",
2252
2253
  "variant": "h3",
2254
+ "type": "typography",
2253
2255
  "content": "Create Device"
2254
2256
  }
2255
2257
  ],
2256
- "direction": "horizontal",
2257
- "gap": "sm",
2258
- "type": "stack"
2258
+ "direction": "horizontal"
2259
2259
  },
2260
2260
  {
2261
2261
  "type": "divider"
@@ -2267,15 +2267,15 @@
2267
2267
  "status",
2268
2268
  "lastSeen"
2269
2269
  ],
2270
- "submitEvent": "SAVE",
2271
2270
  "mode": "create",
2271
+ "cancelEvent": "CLOSE",
2272
2272
  "type": "form-section",
2273
- "cancelEvent": "CLOSE"
2273
+ "submitEvent": "SAVE"
2274
2274
  }
2275
2275
  ],
2276
2276
  "type": "stack",
2277
- "direction": "vertical",
2278
- "gap": "md"
2277
+ "gap": "md",
2278
+ "direction": "vertical"
2279
2279
  }
2280
2280
  ]
2281
2281
  ]
@@ -2316,8 +2316,8 @@
2316
2316
  "@payload.data",
2317
2317
  {
2318
2318
  "emit": {
2319
- "failure": "DeviceSaveFailed",
2320
- "success": "DeviceSaved"
2319
+ "success": "DeviceSaved",
2320
+ "failure": "DeviceSaveFailed"
2321
2321
  }
2322
2322
  }
2323
2323
  ],
@@ -2355,7 +2355,7 @@
2355
2355
  "event": "DeviceLoadFailed",
2356
2356
  "description": "Fired when Device fails to load",
2357
2357
  "scope": "internal",
2358
- "payload": [
2358
+ "payloadSchema": [
2359
2359
  {
2360
2360
  "name": "error",
2361
2361
  "type": "string"
@@ -2370,7 +2370,7 @@
2370
2370
  "event": "DeviceLoaded",
2371
2371
  "description": "Fired when Device finishes loading",
2372
2372
  "scope": "internal",
2373
- "payload": [
2373
+ "payloadSchema": [
2374
2374
  {
2375
2375
  "name": "data",
2376
2376
  "type": "[Device]"
@@ -2380,7 +2380,7 @@
2380
2380
  {
2381
2381
  "event": "DeviceUpdateFailed",
2382
2382
  "scope": "internal",
2383
- "payload": [
2383
+ "payloadSchema": [
2384
2384
  {
2385
2385
  "name": "error",
2386
2386
  "type": "string"
@@ -2394,7 +2394,7 @@
2394
2394
  {
2395
2395
  "event": "DeviceUpdated",
2396
2396
  "scope": "internal",
2397
- "payload": [
2397
+ "payloadSchema": [
2398
2398
  {
2399
2399
  "name": "id",
2400
2400
  "type": "string"
@@ -2420,7 +2420,7 @@
2420
2420
  {
2421
2421
  "key": "EDIT",
2422
2422
  "name": "Edit",
2423
- "payload": [
2423
+ "payloadSchema": [
2424
2424
  {
2425
2425
  "name": "id",
2426
2426
  "type": "string"
@@ -2438,7 +2438,7 @@
2438
2438
  {
2439
2439
  "key": "SAVE",
2440
2440
  "name": "Save",
2441
- "payload": [
2441
+ "payloadSchema": [
2442
2442
  {
2443
2443
  "name": "data",
2444
2444
  "type": "string"
@@ -2452,7 +2452,7 @@
2452
2452
  {
2453
2453
  "key": "DeviceLoadFailed",
2454
2454
  "name": "Device load failed",
2455
- "payload": [
2455
+ "payloadSchema": [
2456
2456
  {
2457
2457
  "name": "error",
2458
2458
  "type": "string"
@@ -2466,7 +2466,7 @@
2466
2466
  {
2467
2467
  "key": "DeviceLoaded",
2468
2468
  "name": "Device loaded",
2469
- "payload": [
2469
+ "payloadSchema": [
2470
2470
  {
2471
2471
  "name": "data",
2472
2472
  "type": "[Device]"
@@ -2476,7 +2476,7 @@
2476
2476
  {
2477
2477
  "key": "DeviceUpdateFailed",
2478
2478
  "name": "Device update failed",
2479
- "payload": [
2479
+ "payloadSchema": [
2480
2480
  {
2481
2481
  "name": "error",
2482
2482
  "type": "string"
@@ -2490,7 +2490,7 @@
2490
2490
  {
2491
2491
  "key": "DeviceUpdated",
2492
2492
  "name": "Device updated",
2493
- "payload": [
2493
+ "payloadSchema": [
2494
2494
  {
2495
2495
  "name": "id",
2496
2496
  "type": "string"
@@ -2521,8 +2521,8 @@
2521
2521
  {
2522
2522
  "id": "@payload.id",
2523
2523
  "emit": {
2524
- "failure": "DeviceLoadFailed",
2525
- "success": "DeviceLoaded"
2524
+ "success": "DeviceLoaded",
2525
+ "failure": "DeviceLoadFailed"
2526
2526
  }
2527
2527
  }
2528
2528
  ],
@@ -2535,36 +2535,36 @@
2535
2535
  "gap": "md",
2536
2536
  "children": [
2537
2537
  {
2538
- "type": "stack",
2539
- "direction": "horizontal",
2540
- "gap": "sm",
2541
2538
  "children": [
2542
2539
  {
2543
- "name": "edit",
2544
- "type": "icon"
2540
+ "type": "icon",
2541
+ "name": "edit"
2545
2542
  },
2546
2543
  {
2547
2544
  "type": "typography",
2548
- "content": "Edit Device",
2549
- "variant": "h3"
2545
+ "variant": "h3",
2546
+ "content": "Edit Device"
2550
2547
  }
2551
- ]
2548
+ ],
2549
+ "gap": "sm",
2550
+ "direction": "horizontal",
2551
+ "type": "stack"
2552
2552
  },
2553
2553
  {
2554
2554
  "type": "divider"
2555
2555
  },
2556
2556
  {
2557
- "entity": "@payload.row",
2558
- "mode": "edit",
2559
2557
  "cancelEvent": "CLOSE",
2560
- "submitEvent": "SAVE",
2558
+ "mode": "edit",
2561
2559
  "fields": [
2562
2560
  "name",
2563
2561
  "type",
2564
2562
  "status",
2565
2563
  "lastSeen"
2566
2564
  ],
2567
- "type": "form-section"
2565
+ "type": "form-section",
2566
+ "entity": "@payload.row",
2567
+ "submitEvent": "SAVE"
2568
2568
  }
2569
2569
  ]
2570
2570
  }
@@ -2607,8 +2607,8 @@
2607
2607
  "@payload.data",
2608
2608
  {
2609
2609
  "emit": {
2610
- "failure": "DeviceUpdateFailed",
2611
- "success": "DeviceUpdated"
2610
+ "success": "DeviceUpdated",
2611
+ "failure": "DeviceUpdateFailed"
2612
2612
  }
2613
2613
  }
2614
2614
  ],
@@ -2643,7 +2643,7 @@
2643
2643
  "event": "DeviceLoaded",
2644
2644
  "description": "Fired when Device finishes loading",
2645
2645
  "scope": "internal",
2646
- "payload": [
2646
+ "payloadSchema": [
2647
2647
  {
2648
2648
  "name": "data",
2649
2649
  "type": "[Device]"
@@ -2654,7 +2654,7 @@
2654
2654
  "event": "DeviceLoadFailed",
2655
2655
  "description": "Fired when Device fails to load",
2656
2656
  "scope": "internal",
2657
- "payload": [
2657
+ "payloadSchema": [
2658
2658
  {
2659
2659
  "name": "error",
2660
2660
  "type": "string"
@@ -2684,7 +2684,7 @@
2684
2684
  {
2685
2685
  "key": "VIEW",
2686
2686
  "name": "View",
2687
- "payload": [
2687
+ "payloadSchema": [
2688
2688
  {
2689
2689
  "name": "id",
2690
2690
  "type": "string"
@@ -2702,7 +2702,7 @@
2702
2702
  {
2703
2703
  "key": "DeviceLoaded",
2704
2704
  "name": "Device loaded",
2705
- "payload": [
2705
+ "payloadSchema": [
2706
2706
  {
2707
2707
  "name": "data",
2708
2708
  "type": "[Device]"
@@ -2712,7 +2712,7 @@
2712
2712
  {
2713
2713
  "key": "DeviceLoadFailed",
2714
2714
  "name": "Device load failed",
2715
- "payload": [
2715
+ "payloadSchema": [
2716
2716
  {
2717
2717
  "name": "error",
2718
2718
  "type": "string"
@@ -2756,28 +2756,33 @@
2756
2756
  "render-ui",
2757
2757
  "modal",
2758
2758
  {
2759
+ "direction": "vertical",
2760
+ "gap": "md",
2761
+ "type": "stack",
2759
2762
  "children": [
2760
2763
  {
2764
+ "direction": "horizontal",
2765
+ "gap": "sm",
2761
2766
  "align": "center",
2767
+ "type": "stack",
2762
2768
  "children": [
2763
2769
  {
2764
- "name": "eye",
2765
- "type": "icon"
2770
+ "type": "icon",
2771
+ "name": "eye"
2766
2772
  },
2767
2773
  {
2768
2774
  "type": "typography",
2769
2775
  "variant": "h3",
2770
2776
  "content": "@entity.name"
2771
2777
  }
2772
- ],
2773
- "direction": "horizontal",
2774
- "gap": "sm",
2775
- "type": "stack"
2778
+ ]
2776
2779
  },
2777
2780
  {
2778
2781
  "type": "divider"
2779
2782
  },
2780
2783
  {
2784
+ "type": "stack",
2785
+ "direction": "horizontal",
2781
2786
  "gap": "md",
2782
2787
  "children": [
2783
2788
  {
@@ -2786,93 +2791,88 @@
2786
2791
  "content": "Name"
2787
2792
  },
2788
2793
  {
2794
+ "type": "typography",
2789
2795
  "variant": "body",
2790
- "content": "@entity.name",
2791
- "type": "typography"
2796
+ "content": "@entity.name"
2792
2797
  }
2793
- ],
2794
- "direction": "horizontal",
2795
- "type": "stack"
2798
+ ]
2796
2799
  },
2797
2800
  {
2798
- "type": "stack",
2801
+ "direction": "horizontal",
2802
+ "gap": "md",
2799
2803
  "children": [
2800
2804
  {
2801
2805
  "content": "Type",
2802
- "type": "typography",
2803
- "variant": "caption"
2806
+ "variant": "caption",
2807
+ "type": "typography"
2804
2808
  },
2805
2809
  {
2806
- "content": "@entity.type",
2807
2810
  "type": "typography",
2811
+ "content": "@entity.type",
2808
2812
  "variant": "body"
2809
2813
  }
2810
2814
  ],
2811
- "direction": "horizontal",
2812
- "gap": "md"
2815
+ "type": "stack"
2813
2816
  },
2814
2817
  {
2815
2818
  "type": "stack",
2816
2819
  "children": [
2817
2820
  {
2818
- "content": "Status",
2821
+ "type": "typography",
2819
2822
  "variant": "caption",
2820
- "type": "typography"
2823
+ "content": "Status"
2821
2824
  },
2822
2825
  {
2823
- "content": "@entity.status",
2824
2826
  "type": "typography",
2827
+ "content": "@entity.status",
2825
2828
  "variant": "body"
2826
2829
  }
2827
2830
  ],
2828
- "gap": "md",
2829
- "direction": "horizontal"
2831
+ "direction": "horizontal",
2832
+ "gap": "md"
2830
2833
  },
2831
2834
  {
2832
2835
  "gap": "md",
2836
+ "type": "stack",
2833
2837
  "direction": "horizontal",
2834
2838
  "children": [
2835
2839
  {
2840
+ "variant": "caption",
2836
2841
  "type": "typography",
2837
- "content": "Last Seen",
2838
- "variant": "caption"
2842
+ "content": "Last Seen"
2839
2843
  },
2840
2844
  {
2841
- "type": "typography",
2845
+ "variant": "body",
2842
2846
  "content": "@entity.lastSeen",
2843
- "variant": "body"
2847
+ "type": "typography"
2844
2848
  }
2845
- ],
2846
- "type": "stack"
2849
+ ]
2847
2850
  },
2848
2851
  {
2849
2852
  "type": "divider"
2850
2853
  },
2851
2854
  {
2852
- "direction": "horizontal",
2853
- "type": "stack",
2854
- "gap": "sm",
2855
- "justify": "end",
2856
2855
  "children": [
2857
2856
  {
2858
- "action": "EDIT",
2859
2857
  "label": "Edit",
2858
+ "action": "EDIT",
2860
2859
  "type": "button",
2861
2860
  "variant": "primary",
2862
2861
  "icon": "edit"
2863
2862
  },
2864
2863
  {
2865
- "label": "Close",
2864
+ "variant": "ghost",
2866
2865
  "type": "button",
2867
2866
  "action": "CLOSE",
2868
- "variant": "ghost"
2867
+ "label": "Close"
2869
2868
  }
2870
- ]
2869
+ ],
2870
+ "direction": "horizontal",
2871
+ "gap": "sm",
2872
+ "type": "stack",
2873
+ "justify": "end"
2871
2874
  }
2872
- ],
2873
- "direction": "vertical",
2874
- "gap": "md",
2875
- "type": "stack"
2875
+ ]
2876
2876
  }
2877
2877
  ]
2878
2878
  ]
@@ -2935,7 +2935,7 @@
2935
2935
  {
2936
2936
  "event": "DeviceDeleteFailed",
2937
2937
  "scope": "internal",
2938
- "payload": [
2938
+ "payloadSchema": [
2939
2939
  {
2940
2940
  "name": "error",
2941
2941
  "type": "string"
@@ -2949,7 +2949,7 @@
2949
2949
  {
2950
2950
  "event": "DeviceDeleted",
2951
2951
  "scope": "internal",
2952
- "payload": [
2952
+ "payloadSchema": [
2953
2953
  {
2954
2954
  "name": "id",
2955
2955
  "type": "string"
@@ -2960,7 +2960,7 @@
2960
2960
  "event": "DeviceLoadFailed",
2961
2961
  "description": "Fired when Device fails to load",
2962
2962
  "scope": "internal",
2963
- "payload": [
2963
+ "payloadSchema": [
2964
2964
  {
2965
2965
  "name": "error",
2966
2966
  "type": "string"
@@ -2975,7 +2975,7 @@
2975
2975
  "event": "DeviceLoaded",
2976
2976
  "description": "Fired when Device finishes loading",
2977
2977
  "scope": "internal",
2978
- "payload": [
2978
+ "payloadSchema": [
2979
2979
  {
2980
2980
  "name": "data",
2981
2981
  "type": "[Device]"
@@ -3001,7 +3001,7 @@
3001
3001
  {
3002
3002
  "key": "DELETE",
3003
3003
  "name": "Delete",
3004
- "payload": [
3004
+ "payloadSchema": [
3005
3005
  {
3006
3006
  "name": "id",
3007
3007
  "type": "string"
@@ -3027,7 +3027,7 @@
3027
3027
  {
3028
3028
  "key": "DeviceDeleteFailed",
3029
3029
  "name": "Device delete failed",
3030
- "payload": [
3030
+ "payloadSchema": [
3031
3031
  {
3032
3032
  "name": "error",
3033
3033
  "type": "string"
@@ -3041,7 +3041,7 @@
3041
3041
  {
3042
3042
  "key": "DeviceDeleted",
3043
3043
  "name": "Device deleted",
3044
- "payload": [
3044
+ "payloadSchema": [
3045
3045
  {
3046
3046
  "name": "id",
3047
3047
  "type": "string"
@@ -3051,7 +3051,7 @@
3051
3051
  {
3052
3052
  "key": "DeviceLoadFailed",
3053
3053
  "name": "Device load failed",
3054
- "payload": [
3054
+ "payloadSchema": [
3055
3055
  {
3056
3056
  "name": "error",
3057
3057
  "type": "string"
@@ -3065,7 +3065,7 @@
3065
3065
  {
3066
3066
  "key": "DeviceLoaded",
3067
3067
  "name": "Device loaded",
3068
- "payload": [
3068
+ "payloadSchema": [
3069
3069
  {
3070
3070
  "name": "data",
3071
3071
  "type": "[Device]"
@@ -3101,8 +3101,8 @@
3101
3101
  {
3102
3102
  "id": "@payload.id",
3103
3103
  "emit": {
3104
- "success": "DeviceLoaded",
3105
- "failure": "DeviceLoadFailed"
3104
+ "failure": "DeviceLoadFailed",
3105
+ "success": "DeviceLoaded"
3106
3106
  }
3107
3107
  }
3108
3108
  ],
@@ -3110,55 +3110,55 @@
3110
3110
  "render-ui",
3111
3111
  "modal",
3112
3112
  {
3113
- "direction": "vertical",
3114
- "gap": "md",
3115
3113
  "type": "stack",
3114
+ "gap": "md",
3115
+ "direction": "vertical",
3116
3116
  "children": [
3117
3117
  {
3118
- "direction": "horizontal",
3119
- "type": "stack",
3120
3118
  "gap": "sm",
3121
3119
  "align": "center",
3120
+ "type": "stack",
3122
3121
  "children": [
3123
3122
  {
3124
- "name": "alert-triangle",
3125
- "type": "icon"
3123
+ "type": "icon",
3124
+ "name": "alert-triangle"
3126
3125
  },
3127
3126
  {
3128
- "variant": "h3",
3127
+ "type": "typography",
3129
3128
  "content": "Delete Device",
3130
- "type": "typography"
3129
+ "variant": "h3"
3131
3130
  }
3132
- ]
3131
+ ],
3132
+ "direction": "horizontal"
3133
3133
  },
3134
3134
  {
3135
3135
  "type": "divider"
3136
3136
  },
3137
3137
  {
3138
3138
  "variant": "error",
3139
- "type": "alert",
3140
- "message": "This action cannot be undone."
3139
+ "message": "This action cannot be undone.",
3140
+ "type": "alert"
3141
3141
  },
3142
3142
  {
3143
3143
  "gap": "sm",
3144
- "justify": "end",
3145
- "direction": "horizontal",
3146
- "type": "stack",
3147
3144
  "children": [
3148
3145
  {
3149
- "label": "Cancel",
3150
- "action": "CANCEL",
3146
+ "variant": "ghost",
3151
3147
  "type": "button",
3152
- "variant": "ghost"
3148
+ "label": "Cancel",
3149
+ "action": "CANCEL"
3153
3150
  },
3154
3151
  {
3155
3152
  "icon": "check",
3156
- "type": "button",
3157
3153
  "action": "CONFIRM_DELETE",
3154
+ "type": "button",
3158
3155
  "variant": "danger",
3159
3156
  "label": "Delete"
3160
3157
  }
3161
- ]
3158
+ ],
3159
+ "type": "stack",
3160
+ "justify": "end",
3161
+ "direction": "horizontal"
3162
3162
  }
3163
3163
  ]
3164
3164
  }
@@ -3332,7 +3332,7 @@
3332
3332
  "event": "DeviceAlertLoaded",
3333
3333
  "description": "Fired when DeviceAlert finishes loading",
3334
3334
  "scope": "internal",
3335
- "payload": [
3335
+ "payloadSchema": [
3336
3336
  {
3337
3337
  "name": "data",
3338
3338
  "type": "[DeviceAlert]"
@@ -3343,7 +3343,7 @@
3343
3343
  "event": "DeviceAlertLoadFailed",
3344
3344
  "description": "Fired when DeviceAlert fails to load",
3345
3345
  "scope": "internal",
3346
- "payload": [
3346
+ "payloadSchema": [
3347
3347
  {
3348
3348
  "name": "error",
3349
3349
  "type": "string"
@@ -3392,7 +3392,7 @@
3392
3392
  {
3393
3393
  "key": "DeviceAlertLoaded",
3394
3394
  "name": "DeviceAlert loaded",
3395
- "payload": [
3395
+ "payloadSchema": [
3396
3396
  {
3397
3397
  "name": "data",
3398
3398
  "type": "[DeviceAlert]"
@@ -3402,7 +3402,7 @@
3402
3402
  {
3403
3403
  "key": "DeviceAlertLoadFailed",
3404
3404
  "name": "DeviceAlert load failed",
3405
- "payload": [
3405
+ "payloadSchema": [
3406
3406
  {
3407
3407
  "name": "error",
3408
3408
  "type": "string"
@@ -3425,8 +3425,8 @@
3425
3425
  "DeviceAlert",
3426
3426
  {
3427
3427
  "emit": {
3428
- "success": "DeviceAlertLoaded",
3429
- "failure": "DeviceAlertLoadFailed"
3428
+ "failure": "DeviceAlertLoadFailed",
3429
+ "success": "DeviceAlertLoaded"
3430
3430
  }
3431
3431
  }
3432
3432
  ],
@@ -3434,59 +3434,42 @@
3434
3434
  "render-ui",
3435
3435
  "main",
3436
3436
  {
3437
- "navItems": [
3438
- {
3439
- "href": "/sensors",
3440
- "icon": "layout-list",
3441
- "label": "Sensors"
3442
- },
3443
- {
3444
- "href": "/devices",
3445
- "icon": "cpu",
3446
- "label": "Devices"
3447
- },
3448
- {
3449
- "icon": "bell",
3450
- "href": "/alerts",
3451
- "label": "Alerts"
3452
- }
3453
- ],
3454
- "type": "dashboard-layout",
3455
- "appName": "IoT Dashboard",
3456
3437
  "children": [
3457
3438
  {
3439
+ "direction": "vertical",
3440
+ "gap": "lg",
3458
3441
  "children": [
3459
3442
  {
3443
+ "align": "center",
3460
3444
  "children": [
3461
3445
  {
3462
- "direction": "horizontal",
3463
- "type": "stack",
3464
3446
  "align": "center",
3465
- "children": [
3447
+ "direction": "horizontal",
3448
+ "gap": "md",
3449
+ "children": [
3466
3450
  {
3467
- "type": "icon",
3468
- "name": "bell"
3451
+ "name": "bell",
3452
+ "type": "icon"
3469
3453
  },
3470
3454
  {
3455
+ "type": "typography",
3471
3456
  "content": "DeviceAlert",
3472
- "variant": "h2",
3473
- "type": "typography"
3457
+ "variant": "h2"
3474
3458
  }
3475
3459
  ],
3476
- "gap": "md"
3460
+ "type": "stack"
3477
3461
  },
3478
3462
  {
3463
+ "label": "Circuit Closed",
3479
3464
  "type": "status-dot",
3480
3465
  "status": "online",
3481
- "label": "Circuit Closed",
3482
3466
  "pulse": false
3483
3467
  }
3484
3468
  ],
3485
3469
  "justify": "between",
3486
- "gap": "md",
3487
- "direction": "horizontal",
3488
3470
  "type": "stack",
3489
- "align": "center"
3471
+ "direction": "horizontal",
3472
+ "gap": "md"
3490
3473
  },
3491
3474
  {
3492
3475
  "type": "divider"
@@ -3497,31 +3480,48 @@
3497
3480
  "variant": "success"
3498
3481
  },
3499
3482
  {
3500
- "type": "simple-grid",
3501
- "cols": 2.0,
3502
3483
  "children": [
3503
3484
  {
3485
+ "value": "@entity.failureCount",
3504
3486
  "type": "stat-display",
3505
- "label": "Failures",
3506
- "value": "@entity.failureCount"
3487
+ "label": "Failures"
3507
3488
  },
3508
3489
  {
3509
- "value": "@entity.successCount",
3490
+ "label": "Successes",
3510
3491
  "type": "stat-display",
3511
- "label": "Successes"
3492
+ "value": "@entity.successCount"
3512
3493
  }
3513
- ]
3494
+ ],
3495
+ "cols": 2.0,
3496
+ "type": "simple-grid"
3514
3497
  },
3515
3498
  {
3516
- "value": "@entity.failureCount",
3517
3499
  "min": 0.0,
3518
3500
  "max": "@entity.threshold",
3501
+ "value": "@entity.failureCount",
3519
3502
  "type": "meter"
3520
3503
  }
3521
3504
  ],
3522
- "gap": "lg",
3523
- "type": "stack",
3524
- "direction": "vertical"
3505
+ "type": "stack"
3506
+ }
3507
+ ],
3508
+ "type": "dashboard-layout",
3509
+ "appName": "IoT Dashboard",
3510
+ "navItems": [
3511
+ {
3512
+ "icon": "layout-list",
3513
+ "href": "/sensors",
3514
+ "label": "Sensors"
3515
+ },
3516
+ {
3517
+ "href": "/devices",
3518
+ "label": "Devices",
3519
+ "icon": "cpu"
3520
+ },
3521
+ {
3522
+ "href": "/alerts",
3523
+ "icon": "bell",
3524
+ "label": "Alerts"
3525
3525
  }
3526
3526
  ]
3527
3527
  }
@@ -3537,8 +3537,6 @@
3537
3537
  "render-ui",
3538
3538
  "main",
3539
3539
  {
3540
- "type": "dashboard-layout",
3541
- "appName": "IoT Dashboard",
3542
3540
  "navItems": [
3543
3541
  {
3544
3542
  "href": "/sensors",
@@ -3546,94 +3544,96 @@
3546
3544
  "icon": "layout-list"
3547
3545
  },
3548
3546
  {
3549
- "icon": "cpu",
3547
+ "href": "/devices",
3550
3548
  "label": "Devices",
3551
- "href": "/devices"
3549
+ "icon": "cpu"
3552
3550
  },
3553
3551
  {
3554
- "label": "Alerts",
3555
3552
  "icon": "bell",
3556
- "href": "/alerts"
3553
+ "href": "/alerts",
3554
+ "label": "Alerts"
3557
3555
  }
3558
3556
  ],
3557
+ "type": "dashboard-layout",
3559
3558
  "children": [
3560
3559
  {
3560
+ "type": "stack",
3561
+ "direction": "vertical",
3562
+ "gap": "lg",
3561
3563
  "children": [
3562
3564
  {
3563
- "gap": "md",
3564
- "direction": "horizontal",
3565
- "type": "stack",
3566
3565
  "children": [
3567
3566
  {
3567
+ "align": "center",
3568
3568
  "direction": "horizontal",
3569
+ "gap": "md",
3570
+ "type": "stack",
3569
3571
  "children": [
3570
3572
  {
3571
3573
  "type": "icon",
3572
3574
  "name": "alert-triangle"
3573
3575
  },
3574
3576
  {
3575
- "type": "typography",
3576
3577
  "variant": "h2",
3578
+ "type": "typography",
3577
3579
  "content": "DeviceAlert"
3578
3580
  }
3579
- ],
3580
- "align": "center",
3581
- "gap": "md",
3582
- "type": "stack"
3581
+ ]
3583
3582
  },
3584
3583
  {
3585
3584
  "type": "status-dot",
3586
- "label": "Circuit Open",
3587
3585
  "pulse": true,
3586
+ "label": "Circuit Open",
3588
3587
  "status": "critical"
3589
3588
  }
3590
3589
  ],
3591
- "align": "center",
3592
- "justify": "between"
3590
+ "gap": "md",
3591
+ "type": "stack",
3592
+ "justify": "between",
3593
+ "direction": "horizontal",
3594
+ "align": "center"
3593
3595
  },
3594
3596
  {
3595
3597
  "type": "divider"
3596
3598
  },
3597
3599
  {
3598
- "type": "alert",
3599
3600
  "variant": "error",
3600
- "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
3601
+ "message": "Circuit is open. Requests are being rejected to prevent cascading failures.",
3602
+ "type": "alert"
3601
3603
  },
3602
3604
  {
3605
+ "cols": 2.0,
3606
+ "type": "simple-grid",
3603
3607
  "children": [
3604
3608
  {
3605
3609
  "type": "stat-display",
3606
- "value": "@entity.failureCount",
3607
- "label": "Failures"
3610
+ "label": "Failures",
3611
+ "value": "@entity.failureCount"
3608
3612
  },
3609
3613
  {
3614
+ "label": "Successes",
3610
3615
  "type": "stat-display",
3611
- "value": "@entity.successCount",
3612
- "label": "Successes"
3616
+ "value": "@entity.successCount"
3613
3617
  }
3614
- ],
3615
- "type": "simple-grid",
3616
- "cols": 2.0
3618
+ ]
3617
3619
  },
3618
3620
  {
3619
- "type": "meter",
3620
- "max": "@entity.threshold",
3621
3621
  "value": "@entity.failureCount",
3622
- "min": 0.0
3622
+ "type": "meter",
3623
+ "min": 0.0,
3624
+ "max": "@entity.threshold"
3623
3625
  },
3624
3626
  {
3625
- "type": "button",
3626
- "variant": "ghost",
3627
3627
  "action": "RESET",
3628
- "icon": "rotate-ccw",
3629
- "label": "Reset"
3628
+ "variant": "ghost",
3629
+ "type": "button",
3630
+ "label": "Reset",
3631
+ "icon": "rotate-ccw"
3630
3632
  }
3631
- ],
3632
- "type": "stack",
3633
- "direction": "vertical",
3634
- "gap": "lg"
3633
+ ]
3635
3634
  }
3636
- ]
3635
+ ],
3636
+ "appName": "IoT Dashboard"
3637
3637
  }
3638
3638
  ]
3639
3639
  ]
@@ -3648,37 +3648,39 @@
3648
3648
  "main",
3649
3649
  {
3650
3650
  "appName": "IoT Dashboard",
3651
+ "type": "dashboard-layout",
3651
3652
  "navItems": [
3652
3653
  {
3653
- "href": "/sensors",
3654
3654
  "icon": "layout-list",
3655
- "label": "Sensors"
3655
+ "label": "Sensors",
3656
+ "href": "/sensors"
3656
3657
  },
3657
3658
  {
3659
+ "icon": "cpu",
3658
3660
  "label": "Devices",
3659
- "href": "/devices",
3660
- "icon": "cpu"
3661
+ "href": "/devices"
3661
3662
  },
3662
3663
  {
3663
- "href": "/alerts",
3664
3664
  "label": "Alerts",
3665
+ "href": "/alerts",
3665
3666
  "icon": "bell"
3666
3667
  }
3667
3668
  ],
3668
- "type": "dashboard-layout",
3669
3669
  "children": [
3670
3670
  {
3671
- "gap": "lg",
3672
3671
  "children": [
3673
3672
  {
3674
- "gap": "md",
3675
3673
  "align": "center",
3674
+ "justify": "between",
3676
3675
  "children": [
3677
3676
  {
3677
+ "type": "stack",
3678
+ "direction": "horizontal",
3679
+ "align": "center",
3678
3680
  "children": [
3679
3681
  {
3680
- "type": "icon",
3681
- "name": "bell"
3682
+ "name": "bell",
3683
+ "type": "icon"
3682
3684
  },
3683
3685
  {
3684
3686
  "content": "DeviceAlert",
@@ -3686,19 +3688,16 @@
3686
3688
  "variant": "h2"
3687
3689
  }
3688
3690
  ],
3689
- "direction": "horizontal",
3690
- "align": "center",
3691
- "type": "stack",
3692
3691
  "gap": "md"
3693
3692
  },
3694
3693
  {
3695
- "type": "status-dot",
3696
- "label": "Circuit Closed",
3697
3694
  "status": "online",
3698
- "pulse": false
3695
+ "type": "status-dot",
3696
+ "pulse": false,
3697
+ "label": "Circuit Closed"
3699
3698
  }
3700
3699
  ],
3701
- "justify": "between",
3700
+ "gap": "md",
3702
3701
  "direction": "horizontal",
3703
3702
  "type": "stack"
3704
3703
  },
@@ -3706,34 +3705,35 @@
3706
3705
  "type": "divider"
3707
3706
  },
3708
3707
  {
3709
- "message": "Service is healthy. All requests are being processed.",
3708
+ "variant": "success",
3710
3709
  "type": "alert",
3711
- "variant": "success"
3710
+ "message": "Service is healthy. All requests are being processed."
3712
3711
  },
3713
3712
  {
3714
- "cols": 2.0,
3715
3713
  "type": "simple-grid",
3716
3714
  "children": [
3717
3715
  {
3718
- "label": "Failures",
3719
3716
  "type": "stat-display",
3717
+ "label": "Failures",
3720
3718
  "value": "@entity.failureCount"
3721
3719
  },
3722
3720
  {
3721
+ "type": "stat-display",
3723
3722
  "label": "Successes",
3724
- "value": "@entity.successCount",
3725
- "type": "stat-display"
3723
+ "value": "@entity.successCount"
3726
3724
  }
3727
- ]
3725
+ ],
3726
+ "cols": 2.0
3728
3727
  },
3729
3728
  {
3730
- "value": "@entity.failureCount",
3731
- "type": "meter",
3732
3729
  "min": 0.0,
3733
- "max": "@entity.threshold"
3730
+ "max": "@entity.threshold",
3731
+ "value": "@entity.failureCount",
3732
+ "type": "meter"
3734
3733
  }
3735
3734
  ],
3736
3735
  "direction": "vertical",
3736
+ "gap": "lg",
3737
3737
  "type": "stack"
3738
3738
  }
3739
3739
  ]
@@ -3750,42 +3750,61 @@
3750
3750
  "render-ui",
3751
3751
  "main",
3752
3752
  {
3753
- "type": "dashboard-layout",
3754
3753
  "appName": "IoT Dashboard",
3754
+ "navItems": [
3755
+ {
3756
+ "label": "Sensors",
3757
+ "href": "/sensors",
3758
+ "icon": "layout-list"
3759
+ },
3760
+ {
3761
+ "label": "Devices",
3762
+ "href": "/devices",
3763
+ "icon": "cpu"
3764
+ },
3765
+ {
3766
+ "icon": "bell",
3767
+ "href": "/alerts",
3768
+ "label": "Alerts"
3769
+ }
3770
+ ],
3771
+ "type": "dashboard-layout",
3755
3772
  "children": [
3756
3773
  {
3774
+ "gap": "lg",
3775
+ "direction": "vertical",
3757
3776
  "children": [
3758
3777
  {
3759
- "align": "center",
3760
3778
  "justify": "between",
3779
+ "type": "stack",
3761
3780
  "gap": "md",
3762
3781
  "direction": "horizontal",
3782
+ "align": "center",
3763
3783
  "children": [
3764
3784
  {
3765
- "gap": "md",
3766
- "align": "center",
3767
- "direction": "horizontal",
3768
3785
  "children": [
3769
3786
  {
3770
- "name": "activity",
3771
- "type": "icon"
3787
+ "type": "icon",
3788
+ "name": "activity"
3772
3789
  },
3773
3790
  {
3774
3791
  "type": "typography",
3775
- "variant": "h2",
3776
- "content": "DeviceAlert"
3792
+ "content": "DeviceAlert",
3793
+ "variant": "h2"
3777
3794
  }
3778
3795
  ],
3796
+ "gap": "md",
3797
+ "align": "center",
3798
+ "direction": "horizontal",
3779
3799
  "type": "stack"
3780
3800
  },
3781
3801
  {
3782
- "pulse": true,
3783
- "label": "Circuit Half-Open",
3784
3802
  "type": "status-dot",
3785
- "status": "warning"
3803
+ "label": "Circuit Half-Open",
3804
+ "status": "warning",
3805
+ "pulse": true
3786
3806
  }
3787
- ],
3788
- "type": "stack"
3807
+ ]
3789
3808
  },
3790
3809
  {
3791
3810
  "type": "divider"
@@ -3796,42 +3815,23 @@
3796
3815
  "message": "Testing recovery. Limited requests are being allowed through."
3797
3816
  },
3798
3817
  {
3799
- "type": "simple-grid",
3800
3818
  "cols": 2.0,
3801
3819
  "children": [
3802
3820
  {
3803
- "value": "@entity.failureCount",
3804
3821
  "type": "stat-display",
3822
+ "value": "@entity.failureCount",
3805
3823
  "label": "Failures"
3806
3824
  },
3807
3825
  {
3808
- "value": "@entity.successCount",
3809
3826
  "label": "Successes",
3827
+ "value": "@entity.successCount",
3810
3828
  "type": "stat-display"
3811
3829
  }
3812
- ]
3830
+ ],
3831
+ "type": "simple-grid"
3813
3832
  }
3814
3833
  ],
3815
- "type": "stack",
3816
- "direction": "vertical",
3817
- "gap": "lg"
3818
- }
3819
- ],
3820
- "navItems": [
3821
- {
3822
- "label": "Sensors",
3823
- "href": "/sensors",
3824
- "icon": "layout-list"
3825
- },
3826
- {
3827
- "href": "/devices",
3828
- "label": "Devices",
3829
- "icon": "cpu"
3830
- },
3831
- {
3832
- "label": "Alerts",
3833
- "href": "/alerts",
3834
- "icon": "bell"
3834
+ "type": "stack"
3835
3835
  }
3836
3836
  ]
3837
3837
  }
@@ -3847,71 +3847,68 @@
3847
3847
  "render-ui",
3848
3848
  "main",
3849
3849
  {
3850
- "appName": "IoT Dashboard",
3850
+ "type": "dashboard-layout",
3851
3851
  "navItems": [
3852
3852
  {
3853
+ "icon": "layout-list",
3853
3854
  "label": "Sensors",
3854
- "href": "/sensors",
3855
- "icon": "layout-list"
3855
+ "href": "/sensors"
3856
3856
  },
3857
3857
  {
3858
- "label": "Devices",
3859
3858
  "href": "/devices",
3860
- "icon": "cpu"
3859
+ "icon": "cpu",
3860
+ "label": "Devices"
3861
3861
  },
3862
3862
  {
3863
- "href": "/alerts",
3864
3863
  "icon": "bell",
3865
- "label": "Alerts"
3864
+ "label": "Alerts",
3865
+ "href": "/alerts"
3866
3866
  }
3867
3867
  ],
3868
3868
  "children": [
3869
3869
  {
3870
- "direction": "vertical",
3871
- "gap": "lg",
3872
3870
  "children": [
3873
3871
  {
3872
+ "gap": "md",
3873
+ "justify": "between",
3874
3874
  "type": "stack",
3875
3875
  "direction": "horizontal",
3876
3876
  "children": [
3877
3877
  {
3878
3878
  "direction": "horizontal",
3879
- "gap": "md",
3880
3879
  "align": "center",
3880
+ "gap": "md",
3881
3881
  "type": "stack",
3882
3882
  "children": [
3883
3883
  {
3884
- "name": "bell",
3885
- "type": "icon"
3884
+ "type": "icon",
3885
+ "name": "bell"
3886
3886
  },
3887
3887
  {
3888
- "type": "typography",
3889
3888
  "content": "DeviceAlert",
3890
- "variant": "h2"
3889
+ "variant": "h2",
3890
+ "type": "typography"
3891
3891
  }
3892
3892
  ]
3893
3893
  },
3894
3894
  {
3895
+ "status": "online",
3895
3896
  "type": "status-dot",
3896
3897
  "label": "Circuit Closed",
3897
- "status": "online",
3898
3898
  "pulse": false
3899
3899
  }
3900
3900
  ],
3901
- "gap": "md",
3902
- "align": "center",
3903
- "justify": "between"
3901
+ "align": "center"
3904
3902
  },
3905
3903
  {
3906
3904
  "type": "divider"
3907
3905
  },
3908
3906
  {
3909
- "message": "Service is healthy. All requests are being processed.",
3910
3907
  "type": "alert",
3908
+ "message": "Service is healthy. All requests are being processed.",
3911
3909
  "variant": "success"
3912
3910
  },
3913
3911
  {
3914
- "cols": 2.0,
3915
3912
  "children": [
3916
3913
  {
3917
3914
  "type": "stat-display",
@@ -3919,24 +3916,27 @@
3919
3916
  "label": "Failures"
3920
3917
  },
3921
3918
  {
3922
- "value": "@entity.successCount",
3919
+ "label": "Successes",
3923
3920
  "type": "stat-display",
3924
- "label": "Successes"
3921
+ "value": "@entity.successCount"
3925
3922
  }
3926
3923
  ],
3924
+ "cols": 2.0,
3927
3925
  "type": "simple-grid"
3928
3926
  },
3929
3927
  {
3930
- "min": 0.0,
3931
- "max": "@entity.threshold",
3932
3928
  "value": "@entity.failureCount",
3929
+ "max": "@entity.threshold",
3930
+ "min": 0.0,
3933
3931
  "type": "meter"
3934
3932
  }
3935
3933
  ],
3934
+ "direction": "vertical",
3935
+ "gap": "lg",
3936
3936
  "type": "stack"
3937
3937
  }
3938
3938
  ],
3939
- "type": "dashboard-layout"
3939
+ "appName": "IoT Dashboard"
3940
3940
  }
3941
3941
  ]
3942
3942
  ]
@@ -3950,15 +3950,17 @@
3950
3950
  "render-ui",
3951
3951
  "main",
3952
3952
  {
3953
+ "appName": "IoT Dashboard",
3954
+ "type": "dashboard-layout",
3953
3955
  "navItems": [
3954
3956
  {
3955
- "label": "Sensors",
3956
3957
  "href": "/sensors",
3957
- "icon": "layout-list"
3958
+ "icon": "layout-list",
3959
+ "label": "Sensors"
3958
3960
  },
3959
3961
  {
3960
- "label": "Devices",
3961
3962
  "href": "/devices",
3963
+ "label": "Devices",
3962
3964
  "icon": "cpu"
3963
3965
  },
3964
3966
  {
@@ -3969,77 +3971,75 @@
3969
3971
  ],
3970
3972
  "children": [
3971
3973
  {
3972
- "type": "stack",
3973
3974
  "direction": "vertical",
3974
- "gap": "lg",
3975
3975
  "children": [
3976
3976
  {
3977
- "type": "stack",
3978
- "direction": "horizontal",
3979
- "gap": "md",
3977
+ "align": "center",
3978
+ "justify": "between",
3980
3979
  "children": [
3981
3980
  {
3982
3981
  "type": "stack",
3982
+ "gap": "md",
3983
3983
  "children": [
3984
3984
  {
3985
3985
  "name": "bell",
3986
3986
  "type": "icon"
3987
3987
  },
3988
3988
  {
3989
- "type": "typography",
3990
3989
  "content": "DeviceAlert",
3991
- "variant": "h2"
3990
+ "variant": "h2",
3991
+ "type": "typography"
3992
3992
  }
3993
3993
  ],
3994
3994
  "align": "center",
3995
- "gap": "md",
3996
3995
  "direction": "horizontal"
3997
3996
  },
3998
3997
  {
3999
- "status": "online",
4000
3998
  "pulse": false,
3999
+ "status": "online",
4001
4000
  "label": "Circuit Closed",
4002
4001
  "type": "status-dot"
4003
4002
  }
4004
4003
  ],
4005
- "justify": "between",
4006
- "align": "center"
4004
+ "gap": "md",
4005
+ "direction": "horizontal",
4006
+ "type": "stack"
4007
4007
  },
4008
4008
  {
4009
4009
  "type": "divider"
4010
4010
  },
4011
4011
  {
4012
- "variant": "success",
4012
+ "message": "Service is healthy. All requests are being processed.",
4013
4013
  "type": "alert",
4014
- "message": "Service is healthy. All requests are being processed."
4014
+ "variant": "success"
4015
4015
  },
4016
4016
  {
4017
+ "type": "simple-grid",
4018
+ "cols": 2.0,
4017
4019
  "children": [
4018
4020
  {
4019
4021
  "type": "stat-display",
4020
- "value": "@entity.failureCount",
4021
- "label": "Failures"
4022
+ "label": "Failures",
4023
+ "value": "@entity.failureCount"
4022
4024
  },
4023
4025
  {
4024
- "label": "Successes",
4026
+ "value": "@entity.successCount",
4025
4027
  "type": "stat-display",
4026
- "value": "@entity.successCount"
4028
+ "label": "Successes"
4027
4029
  }
4028
- ],
4029
- "type": "simple-grid",
4030
- "cols": 2.0
4030
+ ]
4031
4031
  },
4032
4032
  {
4033
- "type": "meter",
4034
- "value": "@entity.failureCount",
4033
+ "min": 0.0,
4035
4034
  "max": "@entity.threshold",
4036
- "min": 0.0
4035
+ "type": "meter",
4036
+ "value": "@entity.failureCount"
4037
4037
  }
4038
- ]
4038
+ ],
4039
+ "gap": "lg",
4040
+ "type": "stack"
4039
4041
  }
4040
- ],
4041
- "appName": "IoT Dashboard",
4042
- "type": "dashboard-layout"
4042
+ ]
4043
4043
  }
4044
4044
  ]
4045
4045
  ]
@@ -4053,69 +4053,51 @@
4053
4053
  "render-ui",
4054
4054
  "main",
4055
4055
  {
4056
- "appName": "IoT Dashboard",
4057
4056
  "type": "dashboard-layout",
4058
- "navItems": [
4059
- {
4060
- "icon": "layout-list",
4061
- "label": "Sensors",
4062
- "href": "/sensors"
4063
- },
4064
- {
4065
- "href": "/devices",
4066
- "icon": "cpu",
4067
- "label": "Devices"
4068
- },
4069
- {
4070
- "href": "/alerts",
4071
- "icon": "bell",
4072
- "label": "Alerts"
4073
- }
4074
- ],
4075
4057
  "children": [
4076
4058
  {
4077
- "gap": "lg",
4078
4059
  "direction": "vertical",
4060
+ "type": "stack",
4079
4061
  "children": [
4080
4062
  {
4081
- "gap": "md",
4082
- "align": "center",
4063
+ "justify": "between",
4064
+ "type": "stack",
4083
4065
  "children": [
4084
4066
  {
4085
- "align": "center",
4086
- "type": "stack",
4087
4067
  "children": [
4088
4068
  {
4089
- "name": "alert-triangle",
4090
- "type": "icon"
4069
+ "type": "icon",
4070
+ "name": "alert-triangle"
4091
4071
  },
4092
4072
  {
4093
- "content": "DeviceAlert",
4094
4073
  "variant": "h2",
4095
- "type": "typography"
4074
+ "type": "typography",
4075
+ "content": "DeviceAlert"
4096
4076
  }
4097
4077
  ],
4078
+ "type": "stack",
4098
4079
  "gap": "md",
4080
+ "align": "center",
4099
4081
  "direction": "horizontal"
4100
4082
  },
4101
4083
  {
4102
- "pulse": true,
4103
4084
  "status": "critical",
4104
- "label": "Circuit Open",
4105
- "type": "status-dot"
4085
+ "pulse": true,
4086
+ "type": "status-dot",
4087
+ "label": "Circuit Open"
4106
4088
  }
4107
4089
  ],
4108
- "justify": "between",
4109
- "type": "stack",
4110
- "direction": "horizontal"
4090
+ "direction": "horizontal",
4091
+ "align": "center",
4092
+ "gap": "md"
4111
4093
  },
4112
4094
  {
4113
4095
  "type": "divider"
4114
4096
  },
4115
4097
  {
4116
- "variant": "error",
4117
4098
  "message": "Circuit is open. Requests are being rejected to prevent cascading failures.",
4118
- "type": "alert"
4099
+ "type": "alert",
4100
+ "variant": "error"
4119
4101
  },
4120
4102
  {
4121
4103
  "type": "simple-grid",
@@ -4123,8 +4105,8 @@
4123
4105
  "children": [
4124
4106
  {
4125
4107
  "type": "stat-display",
4126
- "label": "Failures",
4127
- "value": "@entity.failureCount"
4108
+ "value": "@entity.failureCount",
4109
+ "label": "Failures"
4128
4110
  },
4129
4111
  {
4130
4112
  "label": "Successes",
@@ -4134,40 +4116,27 @@
4134
4116
  ]
4135
4117
  },
4136
4118
  {
4137
- "value": "@entity.failureCount",
4138
4119
  "max": "@entity.threshold",
4120
+ "value": "@entity.failureCount",
4139
4121
  "type": "meter",
4140
4122
  "min": 0.0
4141
4123
  },
4142
4124
  {
4125
+ "type": "button",
4143
4126
  "action": "RESET",
4144
- "variant": "ghost",
4145
- "label": "Reset",
4146
4127
  "icon": "rotate-ccw",
4147
- "type": "button"
4128
+ "label": "Reset",
4129
+ "variant": "ghost"
4148
4130
  }
4149
4131
  ],
4150
- "type": "stack"
4132
+ "gap": "lg"
4151
4133
  }
4152
- ]
4153
- }
4154
- ]
4155
- ]
4156
- },
4157
- {
4158
- "from": "halfOpen",
4159
- "to": "closed",
4160
- "event": "RESET",
4161
- "effects": [
4162
- [
4163
- "render-ui",
4164
- "main",
4165
- {
4134
+ ],
4166
4135
  "navItems": [
4167
4136
  {
4168
- "label": "Sensors",
4169
4137
  "icon": "layout-list",
4170
- "href": "/sensors"
4138
+ "href": "/sensors",
4139
+ "label": "Sensors"
4171
4140
  },
4172
4141
  {
4173
4142
  "icon": "cpu",
@@ -4176,15 +4145,34 @@
4176
4145
  },
4177
4146
  {
4178
4147
  "href": "/alerts",
4179
- "icon": "bell",
4180
- "label": "Alerts"
4148
+ "label": "Alerts",
4149
+ "icon": "bell"
4181
4150
  }
4182
4151
  ],
4183
- "appName": "IoT Dashboard",
4152
+ "appName": "IoT Dashboard"
4153
+ }
4154
+ ]
4155
+ ]
4156
+ },
4157
+ {
4158
+ "from": "halfOpen",
4159
+ "to": "closed",
4160
+ "event": "RESET",
4161
+ "effects": [
4162
+ [
4163
+ "render-ui",
4164
+ "main",
4165
+ {
4166
+ "type": "dashboard-layout",
4184
4167
  "children": [
4185
4168
  {
4169
+ "type": "stack",
4186
4170
  "children": [
4187
4171
  {
4172
+ "gap": "md",
4173
+ "align": "center",
4174
+ "justify": "between",
4175
+ "direction": "horizontal",
4188
4176
  "children": [
4189
4177
  {
4190
4178
  "direction": "horizontal",
@@ -4194,44 +4182,40 @@
4194
4182
  "type": "icon"
4195
4183
  },
4196
4184
  {
4185
+ "content": "DeviceAlert",
4197
4186
  "variant": "h2",
4198
- "type": "typography",
4199
- "content": "DeviceAlert"
4187
+ "type": "typography"
4200
4188
  }
4201
4189
  ],
4202
- "align": "center",
4203
4190
  "gap": "md",
4204
- "type": "stack"
4191
+ "type": "stack",
4192
+ "align": "center"
4205
4193
  },
4206
4194
  {
4207
- "status": "online",
4195
+ "type": "status-dot",
4208
4196
  "label": "Circuit Closed",
4209
4197
  "pulse": false,
4210
- "type": "status-dot"
4198
+ "status": "online"
4211
4199
  }
4212
4200
  ],
4213
- "direction": "horizontal",
4214
- "type": "stack",
4215
- "justify": "between",
4216
- "gap": "md",
4217
- "align": "center"
4201
+ "type": "stack"
4218
4202
  },
4219
4203
  {
4220
4204
  "type": "divider"
4221
4205
  },
4222
4206
  {
4207
+ "type": "alert",
4223
4208
  "variant": "success",
4224
- "message": "Service is healthy. All requests are being processed.",
4225
- "type": "alert"
4209
+ "message": "Service is healthy. All requests are being processed."
4226
4210
  },
4227
4211
  {
4228
4212
  "type": "simple-grid",
4229
4213
  "cols": 2.0,
4230
4214
  "children": [
4231
4215
  {
4232
- "type": "stat-display",
4233
4216
  "label": "Failures",
4234
- "value": "@entity.failureCount"
4217
+ "value": "@entity.failureCount",
4218
+ "type": "stat-display"
4235
4219
  },
4236
4220
  {
4237
4221
  "type": "stat-display",
@@ -4241,18 +4225,34 @@
4241
4225
  ]
4242
4226
  },
4243
4227
  {
4244
- "type": "meter",
4245
- "min": 0.0,
4246
4228
  "value": "@entity.failureCount",
4247
- "max": "@entity.threshold"
4229
+ "min": 0.0,
4230
+ "max": "@entity.threshold",
4231
+ "type": "meter"
4248
4232
  }
4249
4233
  ],
4250
- "type": "stack",
4251
4234
  "gap": "lg",
4252
4235
  "direction": "vertical"
4253
4236
  }
4254
4237
  ],
4255
- "type": "dashboard-layout"
4238
+ "appName": "IoT Dashboard",
4239
+ "navItems": [
4240
+ {
4241
+ "href": "/sensors",
4242
+ "icon": "layout-list",
4243
+ "label": "Sensors"
4244
+ },
4245
+ {
4246
+ "icon": "cpu",
4247
+ "label": "Devices",
4248
+ "href": "/devices"
4249
+ },
4250
+ {
4251
+ "icon": "bell",
4252
+ "label": "Alerts",
4253
+ "href": "/alerts"
4254
+ }
4255
+ ]
4256
4256
  }
4257
4257
  ]
4258
4258
  ]
@@ -4275,4 +4275,4 @@
4275
4275
  ]
4276
4276
  }
4277
4277
  ]
4278
- }
4278
+ }