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