@almadar/std 3.2.1 → 3.2.3

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 (295) hide show
  1. package/behaviors/exports/atoms/std-async.orb +41 -24
  2. package/behaviors/exports/atoms/std-browse.orb +44 -44
  3. package/behaviors/exports/atoms/std-cache-aside.orb +256 -42
  4. package/behaviors/exports/atoms/std-calendar.orb +770 -0
  5. package/behaviors/exports/atoms/std-circuit-breaker.orb +577 -97
  6. package/behaviors/exports/atoms/std-collision.orb +278 -206
  7. package/behaviors/exports/atoms/std-combat-log.orb +6 -1
  8. package/behaviors/exports/atoms/std-combat.orb +6 -1
  9. package/behaviors/exports/atoms/std-confirmation.orb +212 -7
  10. package/behaviors/exports/atoms/std-dialogue-box.orb +6 -1
  11. package/behaviors/exports/atoms/std-display.orb +1186 -376
  12. package/behaviors/exports/atoms/std-drawer.orb +307 -101
  13. package/behaviors/exports/atoms/std-filter.orb +211 -18
  14. package/behaviors/exports/atoms/std-flip-card.orb +596 -0
  15. package/behaviors/exports/atoms/std-gallery.orb +382 -0
  16. package/behaviors/exports/atoms/std-game-audio.orb +6 -1
  17. package/behaviors/exports/atoms/std-game-canvas2d.orb +6 -1
  18. package/behaviors/exports/atoms/std-game-canvas3d.orb +6 -1
  19. package/behaviors/exports/atoms/std-game-hud.orb +6 -1
  20. package/behaviors/exports/atoms/std-game-menu.orb +6 -1
  21. package/behaviors/exports/atoms/std-game-over-screen.orb +6 -1
  22. package/behaviors/exports/atoms/std-gameflow.orb +100 -5
  23. package/behaviors/exports/atoms/std-input.orb +142 -137
  24. package/behaviors/exports/atoms/std-inventory-panel.orb +6 -1
  25. package/behaviors/exports/atoms/std-isometric-canvas.orb +6 -1
  26. package/behaviors/exports/atoms/std-loading.orb +149 -170
  27. package/behaviors/exports/atoms/std-modal.orb +159 -94
  28. package/behaviors/exports/atoms/std-movement.orb +401 -31
  29. package/behaviors/exports/atoms/std-notification.orb +117 -95
  30. package/behaviors/exports/atoms/std-overworld.orb +44 -16
  31. package/behaviors/exports/atoms/std-pagination.orb +44 -115
  32. package/behaviors/exports/atoms/std-physics2d.orb +6 -1
  33. package/behaviors/exports/atoms/std-platformer-canvas.orb +6 -1
  34. package/behaviors/exports/atoms/std-quest.orb +309 -34
  35. package/behaviors/exports/atoms/std-rate-limiter.orb +410 -157
  36. package/behaviors/exports/atoms/std-rating.orb +328 -0
  37. package/behaviors/exports/atoms/std-score-board.orb +6 -1
  38. package/behaviors/exports/atoms/std-score.orb +252 -11
  39. package/behaviors/exports/atoms/std-search.orb +62 -47
  40. package/behaviors/exports/atoms/std-selection.orb +180 -149
  41. package/behaviors/exports/atoms/std-simulation-canvas.orb +6 -1
  42. package/behaviors/exports/atoms/std-sort.orb +192 -60
  43. package/behaviors/exports/atoms/std-sprite.orb +6 -1
  44. package/behaviors/exports/atoms/std-tabs.orb +25 -15
  45. package/behaviors/exports/atoms/std-text-effects.orb +658 -0
  46. package/behaviors/exports/atoms/std-theme.orb +573 -0
  47. package/behaviors/exports/atoms/std-timer.orb +483 -91
  48. package/behaviors/exports/atoms/std-undo.orb +211 -81
  49. package/behaviors/exports/atoms/std-upload.orb +535 -0
  50. package/behaviors/exports/atoms/std-wizard.orb +677 -240
  51. package/behaviors/exports/molecules/std-builder-game.orb +49 -4
  52. package/behaviors/exports/molecules/std-cart.orb +325 -102
  53. package/behaviors/exports/molecules/std-classifier-game.orb +49 -4
  54. package/behaviors/exports/molecules/std-debugger-game.orb +49 -4
  55. package/behaviors/exports/molecules/std-detail.orb +52 -48
  56. package/behaviors/exports/molecules/std-event-handler-game.orb +49 -4
  57. package/behaviors/exports/molecules/std-form-advanced.orb +654 -0
  58. package/behaviors/exports/molecules/std-geospatial.orb +70 -51
  59. package/behaviors/exports/molecules/std-inventory.orb +92 -53
  60. package/behaviors/exports/molecules/std-list.orb +416 -52
  61. package/behaviors/exports/molecules/std-messaging.orb +41 -49
  62. package/behaviors/exports/molecules/std-negotiator-game.orb +49 -4
  63. package/behaviors/exports/molecules/std-platformer-game.orb +58 -3
  64. package/behaviors/exports/molecules/std-puzzle-game.orb +58 -7
  65. package/behaviors/exports/molecules/std-quiz.orb +1045 -0
  66. package/behaviors/exports/molecules/std-sequencer-game.orb +49 -4
  67. package/behaviors/exports/molecules/std-simulator-game.orb +49 -4
  68. package/behaviors/exports/molecules/std-turn-based-battle.orb +66 -1
  69. package/behaviors/exports/organisms/std-api-gateway.orb +2615 -867
  70. package/behaviors/exports/organisms/std-arcade-game.orb +399 -197
  71. package/behaviors/exports/organisms/std-booking-system.orb +3154 -1305
  72. package/behaviors/exports/organisms/std-cicd-pipeline.orb +2298 -779
  73. package/behaviors/exports/organisms/std-cms.orb +1150 -277
  74. package/behaviors/exports/organisms/std-coding-academy.orb +1222 -533
  75. package/behaviors/exports/organisms/std-crm.orb +2357 -821
  76. package/behaviors/exports/organisms/std-devops-dashboard.orb +4230 -1281
  77. package/behaviors/exports/organisms/std-ecommerce.orb +2660 -1098
  78. package/behaviors/exports/organisms/std-finance-tracker.orb +1749 -737
  79. package/behaviors/exports/organisms/std-healthcare.orb +3593 -1478
  80. package/behaviors/exports/organisms/std-helpdesk.orb +1870 -738
  81. package/behaviors/exports/organisms/std-hr-portal.orb +3290 -1385
  82. package/behaviors/exports/organisms/std-iot-dashboard.orb +2704 -788
  83. package/behaviors/exports/organisms/std-lms.orb +2548 -1192
  84. package/behaviors/exports/organisms/std-logic-training.orb +220 -66
  85. package/behaviors/exports/organisms/std-platformer-app.orb +373 -194
  86. package/behaviors/exports/organisms/std-project-manager.orb +2347 -806
  87. package/behaviors/exports/organisms/std-puzzle-app.orb +240 -95
  88. package/behaviors/exports/organisms/std-realtime-chat.orb +2020 -660
  89. package/behaviors/exports/organisms/std-rpg-game.orb +1303 -740
  90. package/behaviors/exports/organisms/std-social-feed.orb +184 -168
  91. package/behaviors/exports/organisms/std-stem-lab.orb +1223 -512
  92. package/behaviors/exports/organisms/std-strategy-game.orb +1412 -731
  93. package/behaviors/exports/organisms/std-trading-dashboard.orb +1869 -695
  94. package/behaviors/exports/validation-report.json +3 -750
  95. package/behaviors/exports/verify-results.json +13 -0
  96. package/dist/behaviors/exports/atoms/std-async.orb +41 -24
  97. package/dist/behaviors/exports/atoms/std-browse.orb +44 -44
  98. package/dist/behaviors/exports/atoms/std-cache-aside.orb +256 -42
  99. package/dist/behaviors/exports/atoms/std-calendar.orb +770 -0
  100. package/dist/behaviors/exports/atoms/std-circuit-breaker.orb +577 -97
  101. package/dist/behaviors/exports/atoms/std-collision.orb +278 -206
  102. package/dist/behaviors/exports/atoms/std-combat-log.orb +6 -1
  103. package/dist/behaviors/exports/atoms/std-combat.orb +6 -1
  104. package/dist/behaviors/exports/atoms/std-confirmation.orb +212 -7
  105. package/dist/behaviors/exports/atoms/std-dialogue-box.orb +6 -1
  106. package/dist/behaviors/exports/atoms/std-display.orb +1186 -376
  107. package/dist/behaviors/exports/atoms/std-drawer.orb +307 -101
  108. package/dist/behaviors/exports/atoms/std-filter.orb +211 -18
  109. package/dist/behaviors/exports/atoms/std-flip-card.orb +596 -0
  110. package/dist/behaviors/exports/atoms/std-gallery.orb +382 -0
  111. package/dist/behaviors/exports/atoms/std-game-audio.orb +6 -1
  112. package/dist/behaviors/exports/atoms/std-game-canvas2d.orb +6 -1
  113. package/dist/behaviors/exports/atoms/std-game-canvas3d.orb +6 -1
  114. package/dist/behaviors/exports/atoms/std-game-hud.orb +6 -1
  115. package/dist/behaviors/exports/atoms/std-game-menu.orb +6 -1
  116. package/dist/behaviors/exports/atoms/std-game-over-screen.orb +6 -1
  117. package/dist/behaviors/exports/atoms/std-gameflow.orb +100 -5
  118. package/dist/behaviors/exports/atoms/std-input.orb +142 -137
  119. package/dist/behaviors/exports/atoms/std-inventory-panel.orb +6 -1
  120. package/dist/behaviors/exports/atoms/std-isometric-canvas.orb +6 -1
  121. package/dist/behaviors/exports/atoms/std-loading.orb +149 -170
  122. package/dist/behaviors/exports/atoms/std-modal.orb +159 -94
  123. package/dist/behaviors/exports/atoms/std-movement.orb +401 -31
  124. package/dist/behaviors/exports/atoms/std-notification.orb +117 -95
  125. package/dist/behaviors/exports/atoms/std-overworld.orb +44 -16
  126. package/dist/behaviors/exports/atoms/std-pagination.orb +44 -115
  127. package/dist/behaviors/exports/atoms/std-physics2d.orb +6 -1
  128. package/dist/behaviors/exports/atoms/std-platformer-canvas.orb +6 -1
  129. package/dist/behaviors/exports/atoms/std-quest.orb +309 -34
  130. package/dist/behaviors/exports/atoms/std-rate-limiter.orb +410 -157
  131. package/dist/behaviors/exports/atoms/std-rating.orb +328 -0
  132. package/dist/behaviors/exports/atoms/std-score-board.orb +6 -1
  133. package/dist/behaviors/exports/atoms/std-score.orb +252 -11
  134. package/dist/behaviors/exports/atoms/std-search.orb +62 -47
  135. package/dist/behaviors/exports/atoms/std-selection.orb +180 -149
  136. package/dist/behaviors/exports/atoms/std-simulation-canvas.orb +6 -1
  137. package/dist/behaviors/exports/atoms/std-sort.orb +192 -60
  138. package/dist/behaviors/exports/atoms/std-sprite.orb +6 -1
  139. package/dist/behaviors/exports/atoms/std-tabs.orb +25 -15
  140. package/dist/behaviors/exports/atoms/std-text-effects.orb +658 -0
  141. package/dist/behaviors/exports/atoms/std-theme.orb +573 -0
  142. package/dist/behaviors/exports/atoms/std-timer.orb +483 -91
  143. package/dist/behaviors/exports/atoms/std-undo.orb +211 -81
  144. package/dist/behaviors/exports/atoms/std-upload.orb +535 -0
  145. package/dist/behaviors/exports/atoms/std-wizard.orb +677 -240
  146. package/dist/behaviors/exports/molecules/std-builder-game.orb +49 -4
  147. package/dist/behaviors/exports/molecules/std-cart.orb +325 -102
  148. package/dist/behaviors/exports/molecules/std-classifier-game.orb +49 -4
  149. package/dist/behaviors/exports/molecules/std-debugger-game.orb +49 -4
  150. package/dist/behaviors/exports/molecules/std-detail.orb +52 -48
  151. package/dist/behaviors/exports/molecules/std-event-handler-game.orb +49 -4
  152. package/dist/behaviors/exports/molecules/std-form-advanced.orb +654 -0
  153. package/dist/behaviors/exports/molecules/std-geospatial.orb +70 -51
  154. package/dist/behaviors/exports/molecules/std-inventory.orb +92 -53
  155. package/dist/behaviors/exports/molecules/std-list.orb +416 -52
  156. package/dist/behaviors/exports/molecules/std-messaging.orb +41 -49
  157. package/dist/behaviors/exports/molecules/std-negotiator-game.orb +49 -4
  158. package/dist/behaviors/exports/molecules/std-platformer-game.orb +58 -3
  159. package/dist/behaviors/exports/molecules/std-puzzle-game.orb +58 -7
  160. package/dist/behaviors/exports/molecules/std-quiz.orb +1045 -0
  161. package/dist/behaviors/exports/molecules/std-sequencer-game.orb +49 -4
  162. package/dist/behaviors/exports/molecules/std-simulator-game.orb +49 -4
  163. package/dist/behaviors/exports/molecules/std-turn-based-battle.orb +66 -1
  164. package/dist/behaviors/exports/organisms/std-api-gateway.orb +2615 -867
  165. package/dist/behaviors/exports/organisms/std-arcade-game.orb +399 -197
  166. package/dist/behaviors/exports/organisms/std-booking-system.orb +3154 -1305
  167. package/dist/behaviors/exports/organisms/std-cicd-pipeline.orb +2298 -779
  168. package/dist/behaviors/exports/organisms/std-cms.orb +1150 -277
  169. package/dist/behaviors/exports/organisms/std-coding-academy.orb +1222 -533
  170. package/dist/behaviors/exports/organisms/std-crm.orb +2357 -821
  171. package/dist/behaviors/exports/organisms/std-devops-dashboard.orb +4230 -1281
  172. package/dist/behaviors/exports/organisms/std-ecommerce.orb +2660 -1098
  173. package/dist/behaviors/exports/organisms/std-finance-tracker.orb +1749 -737
  174. package/dist/behaviors/exports/organisms/std-healthcare.orb +3593 -1478
  175. package/dist/behaviors/exports/organisms/std-helpdesk.orb +1870 -738
  176. package/dist/behaviors/exports/organisms/std-hr-portal.orb +3290 -1385
  177. package/dist/behaviors/exports/organisms/std-iot-dashboard.orb +2704 -788
  178. package/dist/behaviors/exports/organisms/std-lms.orb +2548 -1192
  179. package/dist/behaviors/exports/organisms/std-logic-training.orb +220 -66
  180. package/dist/behaviors/exports/organisms/std-platformer-app.orb +373 -194
  181. package/dist/behaviors/exports/organisms/std-project-manager.orb +2347 -806
  182. package/dist/behaviors/exports/organisms/std-puzzle-app.orb +240 -95
  183. package/dist/behaviors/exports/organisms/std-realtime-chat.orb +2020 -660
  184. package/dist/behaviors/exports/organisms/std-rpg-game.orb +1303 -740
  185. package/dist/behaviors/exports/organisms/std-social-feed.orb +184 -168
  186. package/dist/behaviors/exports/organisms/std-stem-lab.orb +1223 -512
  187. package/dist/behaviors/exports/organisms/std-strategy-game.orb +1412 -731
  188. package/dist/behaviors/exports/organisms/std-trading-dashboard.orb +1869 -695
  189. package/dist/behaviors/exports/validation-report.json +3 -750
  190. package/dist/behaviors/exports/verify-results.json +13 -0
  191. package/dist/behaviors/functions/index.d.ts +270 -1
  192. package/dist/behaviors/functions/index.js +3811 -1333
  193. package/dist/behaviors/functions/index.js.map +1 -1
  194. package/dist/behaviors/index.d.ts +1 -1
  195. package/dist/behaviors/index.js +3811 -1333
  196. package/dist/behaviors/index.js.map +1 -1
  197. package/dist/exports/atoms/std-async.orb +41 -24
  198. package/dist/exports/atoms/std-browse.orb +44 -44
  199. package/dist/exports/atoms/std-cache-aside.orb +256 -42
  200. package/dist/exports/atoms/std-calendar.orb +770 -0
  201. package/dist/exports/atoms/std-circuit-breaker.orb +577 -97
  202. package/dist/exports/atoms/std-collision.orb +278 -206
  203. package/dist/exports/atoms/std-combat-log.orb +6 -1
  204. package/dist/exports/atoms/std-combat.orb +6 -1
  205. package/dist/exports/atoms/std-confirmation.orb +212 -7
  206. package/dist/exports/atoms/std-dialogue-box.orb +6 -1
  207. package/dist/exports/atoms/std-display.orb +1186 -376
  208. package/dist/exports/atoms/std-drawer.orb +307 -101
  209. package/dist/exports/atoms/std-filter.orb +211 -18
  210. package/dist/exports/atoms/std-flip-card.orb +596 -0
  211. package/dist/exports/atoms/std-gallery.orb +382 -0
  212. package/dist/exports/atoms/std-game-audio.orb +6 -1
  213. package/dist/exports/atoms/std-game-canvas2d.orb +6 -1
  214. package/dist/exports/atoms/std-game-canvas3d.orb +6 -1
  215. package/dist/exports/atoms/std-game-hud.orb +6 -1
  216. package/dist/exports/atoms/std-game-menu.orb +6 -1
  217. package/dist/exports/atoms/std-game-over-screen.orb +6 -1
  218. package/dist/exports/atoms/std-gameflow.orb +100 -5
  219. package/dist/exports/atoms/std-input.orb +142 -137
  220. package/dist/exports/atoms/std-inventory-panel.orb +6 -1
  221. package/dist/exports/atoms/std-isometric-canvas.orb +6 -1
  222. package/dist/exports/atoms/std-loading.orb +149 -170
  223. package/dist/exports/atoms/std-modal.orb +159 -94
  224. package/dist/exports/atoms/std-movement.orb +401 -31
  225. package/dist/exports/atoms/std-notification.orb +117 -95
  226. package/dist/exports/atoms/std-overworld.orb +44 -16
  227. package/dist/exports/atoms/std-pagination.orb +44 -115
  228. package/dist/exports/atoms/std-physics2d.orb +6 -1
  229. package/dist/exports/atoms/std-platformer-canvas.orb +6 -1
  230. package/dist/exports/atoms/std-quest.orb +309 -34
  231. package/dist/exports/atoms/std-rate-limiter.orb +410 -157
  232. package/dist/exports/atoms/std-rating.orb +328 -0
  233. package/dist/exports/atoms/std-score-board.orb +6 -1
  234. package/dist/exports/atoms/std-score.orb +252 -11
  235. package/dist/exports/atoms/std-search.orb +62 -47
  236. package/dist/exports/atoms/std-selection.orb +180 -149
  237. package/dist/exports/atoms/std-simulation-canvas.orb +6 -1
  238. package/dist/exports/atoms/std-sort.orb +192 -60
  239. package/dist/exports/atoms/std-sprite.orb +6 -1
  240. package/dist/exports/atoms/std-tabs.orb +25 -15
  241. package/dist/exports/atoms/std-text-effects.orb +658 -0
  242. package/dist/exports/atoms/std-theme.orb +573 -0
  243. package/dist/exports/atoms/std-timer.orb +483 -91
  244. package/dist/exports/atoms/std-undo.orb +211 -81
  245. package/dist/exports/atoms/std-upload.orb +535 -0
  246. package/dist/exports/atoms/std-wizard.orb +677 -240
  247. package/dist/exports/molecules/std-builder-game.orb +49 -4
  248. package/dist/exports/molecules/std-cart.orb +325 -102
  249. package/dist/exports/molecules/std-classifier-game.orb +49 -4
  250. package/dist/exports/molecules/std-debugger-game.orb +49 -4
  251. package/dist/exports/molecules/std-detail.orb +52 -48
  252. package/dist/exports/molecules/std-event-handler-game.orb +49 -4
  253. package/dist/exports/molecules/std-form-advanced.orb +654 -0
  254. package/dist/exports/molecules/std-geospatial.orb +70 -51
  255. package/dist/exports/molecules/std-inventory.orb +92 -53
  256. package/dist/exports/molecules/std-list.orb +416 -52
  257. package/dist/exports/molecules/std-messaging.orb +41 -49
  258. package/dist/exports/molecules/std-negotiator-game.orb +49 -4
  259. package/dist/exports/molecules/std-platformer-game.orb +58 -3
  260. package/dist/exports/molecules/std-puzzle-game.orb +58 -7
  261. package/dist/exports/molecules/std-quiz.orb +1045 -0
  262. package/dist/exports/molecules/std-sequencer-game.orb +49 -4
  263. package/dist/exports/molecules/std-simulator-game.orb +49 -4
  264. package/dist/exports/molecules/std-turn-based-battle.orb +66 -1
  265. package/dist/exports/organisms/std-api-gateway.orb +2615 -867
  266. package/dist/exports/organisms/std-arcade-game.orb +399 -197
  267. package/dist/exports/organisms/std-booking-system.orb +3154 -1305
  268. package/dist/exports/organisms/std-cicd-pipeline.orb +2298 -779
  269. package/dist/exports/organisms/std-cms.orb +1150 -277
  270. package/dist/exports/organisms/std-coding-academy.orb +1222 -533
  271. package/dist/exports/organisms/std-crm.orb +2357 -821
  272. package/dist/exports/organisms/std-devops-dashboard.orb +4230 -1281
  273. package/dist/exports/organisms/std-ecommerce.orb +2660 -1098
  274. package/dist/exports/organisms/std-finance-tracker.orb +1749 -737
  275. package/dist/exports/organisms/std-healthcare.orb +3593 -1478
  276. package/dist/exports/organisms/std-helpdesk.orb +1870 -738
  277. package/dist/exports/organisms/std-hr-portal.orb +3290 -1385
  278. package/dist/exports/organisms/std-iot-dashboard.orb +2704 -788
  279. package/dist/exports/organisms/std-lms.orb +2548 -1192
  280. package/dist/exports/organisms/std-logic-training.orb +220 -66
  281. package/dist/exports/organisms/std-platformer-app.orb +373 -194
  282. package/dist/exports/organisms/std-project-manager.orb +2347 -806
  283. package/dist/exports/organisms/std-puzzle-app.orb +240 -95
  284. package/dist/exports/organisms/std-realtime-chat.orb +2020 -660
  285. package/dist/exports/organisms/std-rpg-game.orb +1303 -740
  286. package/dist/exports/organisms/std-social-feed.orb +184 -168
  287. package/dist/exports/organisms/std-stem-lab.orb +1223 -512
  288. package/dist/exports/organisms/std-strategy-game.orb +1412 -731
  289. package/dist/exports/organisms/std-trading-dashboard.orb +1869 -695
  290. package/dist/exports/validation-report.json +3 -750
  291. package/dist/exports/verify-results.json +13 -0
  292. package/dist/index.d.ts +1 -1
  293. package/dist/index.js +3808 -1330
  294. package/dist/index.js.map +1 -1
  295. package/package.json +1 -1
@@ -22,7 +22,14 @@
22
22
  {
23
23
  "name": "method",
24
24
  "type": "string",
25
- "required": true
25
+ "required": true,
26
+ "values": [
27
+ "GET",
28
+ "POST",
29
+ "PUT",
30
+ "DELETE",
31
+ "PATCH"
32
+ ]
26
33
  },
27
34
  {
28
35
  "name": "backend",
@@ -151,118 +158,125 @@
151
158
  "render-ui",
152
159
  "main",
153
160
  {
154
- "type": "stack",
155
- "direction": "vertical",
156
- "gap": "lg",
157
- "children": [
161
+ "type": "dashboard-layout",
162
+ "appName": "API Gateway",
163
+ "navItems": [
158
164
  {
159
- "type": "stack",
160
- "direction": "horizontal",
161
- "gap": "md",
162
- "justify": "space-between",
163
- "children": [
164
- {
165
- "type": "stack",
166
- "direction": "horizontal",
167
- "gap": "sm",
168
- "align": "center",
169
- "children": [
170
- {
171
- "type": "icon",
172
- "name": "git-branch",
173
- "size": "lg"
174
- },
175
- {
176
- "type": "typography",
177
- "content": "Routes",
178
- "variant": "h2"
179
- }
180
- ]
181
- },
182
- {
183
- "type": "stack",
184
- "direction": "horizontal",
185
- "gap": "sm",
186
- "children": [
187
- {
188
- "type": "button",
189
- "label": "Create Route",
190
- "event": "CREATE",
191
- "variant": "primary",
192
- "icon": "plus"
193
- }
194
- ]
195
- }
196
- ]
165
+ "label": "Routes",
166
+ "href": "/routes",
167
+ "icon": "git-branch"
197
168
  },
198
169
  {
199
- "type": "divider"
170
+ "label": "Backends",
171
+ "href": "/backends",
172
+ "icon": "server"
200
173
  },
201
174
  {
202
- "type": "data-grid",
203
- "entity": "Route",
204
- "emptyIcon": "inbox",
205
- "emptyTitle": "No routes yet",
206
- "emptyDescription": "Create your first route to get started.",
207
- "itemActions": [
208
- {
209
- "label": "View",
210
- "event": "VIEW"
211
- },
212
- {
213
- "label": "Edit",
214
- "event": "EDIT"
215
- },
216
- {
217
- "label": "Delete",
218
- "event": "DELETE",
219
- "variant": "danger"
220
- }
221
- ],
222
- "className": "transition-shadow hover:shadow-md cursor-pointer",
175
+ "label": "Analytics",
176
+ "href": "/analytics",
177
+ "icon": "bar-chart-2"
178
+ }
179
+ ],
180
+ "children": [
181
+ {
182
+ "type": "stack",
183
+ "direction": "vertical",
184
+ "gap": "lg",
185
+ "className": "max-w-5xl mx-auto w-full",
223
186
  "children": [
224
187
  {
225
188
  "type": "stack",
226
- "direction": "vertical",
227
- "gap": "sm",
189
+ "direction": "horizontal",
190
+ "gap": "md",
191
+ "justify": "space-between",
192
+ "align": "center",
228
193
  "children": [
229
194
  {
230
195
  "type": "stack",
231
196
  "direction": "horizontal",
232
- "justify": "space-between",
197
+ "gap": "sm",
233
198
  "align": "center",
234
199
  "children": [
235
200
  {
236
- "type": "stack",
237
- "direction": "horizontal",
238
- "gap": "sm",
239
- "align": "center",
240
- "children": [
241
- {
242
- "type": "icon",
243
- "name": "git-branch",
244
- "size": "sm"
245
- },
246
- {
247
- "type": "typography",
248
- "variant": "h4",
249
- "content": "@entity.path"
250
- }
251
- ]
201
+ "type": "icon",
202
+ "name": "git-branch",
203
+ "size": "lg"
252
204
  },
253
205
  {
254
- "type": "badge",
255
- "label": "@entity.method"
206
+ "type": "typography",
207
+ "content": "Routes",
208
+ "variant": "h2"
256
209
  }
257
210
  ]
258
211
  },
259
212
  {
260
- "type": "typography",
261
- "variant": "caption",
262
- "color": "muted",
263
- "content": "@entity.backend"
213
+ "type": "stack",
214
+ "direction": "horizontal",
215
+ "gap": "sm",
216
+ "children": [
217
+ {
218
+ "type": "button",
219
+ "label": "Create Route",
220
+ "event": "CREATE",
221
+ "variant": "primary",
222
+ "icon": "plus"
223
+ }
224
+ ]
264
225
  }
265
226
  ]
227
+ },
228
+ {
229
+ "type": "divider"
230
+ },
231
+ {
232
+ "type": "data-list",
233
+ "entity": "Route",
234
+ "emptyIcon": "inbox",
235
+ "emptyTitle": "No routes configured",
236
+ "emptyDescription": "Add API routes to your gateway.",
237
+ "itemActions": [
238
+ {
239
+ "label": "View",
240
+ "event": "VIEW",
241
+ "variant": "ghost",
242
+ "size": "sm"
243
+ },
244
+ {
245
+ "label": "Edit",
246
+ "event": "EDIT",
247
+ "variant": "ghost",
248
+ "size": "sm"
249
+ },
250
+ {
251
+ "label": "Delete",
252
+ "event": "DELETE",
253
+ "variant": "danger",
254
+ "size": "sm"
255
+ }
256
+ ],
257
+ "columns": [
258
+ {
259
+ "name": "method",
260
+ "variant": "badge"
261
+ },
262
+ {
263
+ "name": "path",
264
+ "variant": "h3",
265
+ "icon": "git-branch"
266
+ },
267
+ {
268
+ "name": "backend",
269
+ "variant": "body"
270
+ },
271
+ {
272
+ "name": "rateLimit",
273
+ "label": "Rate Limit",
274
+ "variant": "caption",
275
+ "format": "number"
276
+ }
277
+ ],
278
+ "variant": "card",
279
+ "gap": "sm"
266
280
  }
267
281
  ]
268
282
  }
@@ -382,6 +396,135 @@
382
396
  "fetch",
383
397
  "Route"
384
398
  ],
399
+ [
400
+ "render-ui",
401
+ "main",
402
+ {
403
+ "type": "dashboard-layout",
404
+ "appName": "API Gateway",
405
+ "navItems": [
406
+ {
407
+ "label": "Routes",
408
+ "href": "/routes",
409
+ "icon": "git-branch"
410
+ },
411
+ {
412
+ "label": "Backends",
413
+ "href": "/backends",
414
+ "icon": "server"
415
+ },
416
+ {
417
+ "label": "Analytics",
418
+ "href": "/analytics",
419
+ "icon": "bar-chart-2"
420
+ }
421
+ ],
422
+ "children": [
423
+ {
424
+ "type": "stack",
425
+ "direction": "vertical",
426
+ "gap": "lg",
427
+ "className": "max-w-5xl mx-auto w-full",
428
+ "children": [
429
+ {
430
+ "type": "stack",
431
+ "direction": "horizontal",
432
+ "gap": "md",
433
+ "justify": "space-between",
434
+ "align": "center",
435
+ "children": [
436
+ {
437
+ "type": "stack",
438
+ "direction": "horizontal",
439
+ "gap": "sm",
440
+ "align": "center",
441
+ "children": [
442
+ {
443
+ "type": "icon",
444
+ "name": "git-branch",
445
+ "size": "lg"
446
+ },
447
+ {
448
+ "type": "typography",
449
+ "content": "Routes",
450
+ "variant": "h2"
451
+ }
452
+ ]
453
+ },
454
+ {
455
+ "type": "stack",
456
+ "direction": "horizontal",
457
+ "gap": "sm",
458
+ "children": [
459
+ {
460
+ "type": "button",
461
+ "label": "Create Route",
462
+ "event": "CREATE",
463
+ "variant": "primary",
464
+ "icon": "plus"
465
+ }
466
+ ]
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "type": "divider"
472
+ },
473
+ {
474
+ "type": "data-list",
475
+ "entity": "Route",
476
+ "emptyIcon": "inbox",
477
+ "emptyTitle": "No routes configured",
478
+ "emptyDescription": "Add API routes to your gateway.",
479
+ "itemActions": [
480
+ {
481
+ "label": "View",
482
+ "event": "VIEW",
483
+ "variant": "ghost",
484
+ "size": "sm"
485
+ },
486
+ {
487
+ "label": "Edit",
488
+ "event": "EDIT",
489
+ "variant": "ghost",
490
+ "size": "sm"
491
+ },
492
+ {
493
+ "label": "Delete",
494
+ "event": "DELETE",
495
+ "variant": "danger",
496
+ "size": "sm"
497
+ }
498
+ ],
499
+ "columns": [
500
+ {
501
+ "name": "method",
502
+ "variant": "badge"
503
+ },
504
+ {
505
+ "name": "path",
506
+ "variant": "h3",
507
+ "icon": "git-branch"
508
+ },
509
+ {
510
+ "name": "backend",
511
+ "variant": "body"
512
+ },
513
+ {
514
+ "name": "rateLimit",
515
+ "label": "Rate Limit",
516
+ "variant": "caption",
517
+ "format": "number"
518
+ }
519
+ ],
520
+ "variant": "card",
521
+ "gap": "sm"
522
+ }
523
+ ]
524
+ }
525
+ ]
526
+ }
527
+ ],
385
528
  [
386
529
  "notify",
387
530
  "Route deleted successfully"
@@ -397,110 +540,376 @@
397
540
  "render-ui",
398
541
  "modal",
399
542
  null
400
- ]
401
- ]
402
- },
403
- {
404
- "from": "deleting",
405
- "to": "browsing",
406
- "event": "CLOSE",
407
- "effects": [
408
- [
409
- "render-ui",
410
- "modal",
411
- null
412
- ]
413
- ]
414
- }
415
- ]
416
- }
417
- },
418
- {
419
- "name": "RouteCreate",
420
- "linkedEntity": "Route",
421
- "category": "interaction",
422
- "emits": [
423
- {
424
- "event": "ROUTE_CREATED"
425
- }
426
- ],
427
- "stateMachine": {
428
- "states": [
429
- {
430
- "name": "closed",
431
- "isInitial": true
432
- },
433
- {
434
- "name": "open"
435
- }
436
- ],
437
- "events": [
438
- {
439
- "key": "INIT",
440
- "name": "Initialize"
441
- },
442
- {
443
- "key": "CREATE",
444
- "name": "Open"
445
- },
446
- {
447
- "key": "CLOSE",
448
- "name": "Close"
449
- },
450
- {
451
- "key": "SAVE",
452
- "name": "Save",
453
- "payload": [
454
- {
455
- "name": "data",
456
- "type": "object",
457
- "required": true
458
- }
459
- ]
460
- }
461
- ],
462
- "transitions": [
463
- {
464
- "from": "closed",
465
- "to": "closed",
466
- "event": "INIT",
467
- "effects": [
468
- [
469
- "fetch",
470
- "Route"
471
- ]
472
- ]
473
- },
474
- {
475
- "from": "closed",
476
- "to": "open",
477
- "event": "CREATE",
478
- "effects": [
543
+ ],
479
544
  [
480
545
  "fetch",
481
546
  "Route"
482
547
  ],
483
548
  [
484
549
  "render-ui",
485
- "modal",
550
+ "main",
486
551
  {
487
- "type": "stack",
488
- "direction": "vertical",
489
- "gap": "md",
552
+ "type": "dashboard-layout",
553
+ "appName": "API Gateway",
554
+ "navItems": [
555
+ {
556
+ "label": "Routes",
557
+ "href": "/routes",
558
+ "icon": "git-branch"
559
+ },
560
+ {
561
+ "label": "Backends",
562
+ "href": "/backends",
563
+ "icon": "server"
564
+ },
565
+ {
566
+ "label": "Analytics",
567
+ "href": "/analytics",
568
+ "icon": "bar-chart-2"
569
+ }
570
+ ],
490
571
  "children": [
491
572
  {
492
573
  "type": "stack",
493
- "direction": "horizontal",
494
- "gap": "sm",
574
+ "direction": "vertical",
575
+ "gap": "lg",
576
+ "className": "max-w-5xl mx-auto w-full",
495
577
  "children": [
496
578
  {
497
- "type": "icon",
498
- "name": "plus-circle",
499
- "size": "md"
500
- },
501
- {
502
- "type": "typography",
503
- "content": "Create Route",
579
+ "type": "stack",
580
+ "direction": "horizontal",
581
+ "gap": "md",
582
+ "justify": "space-between",
583
+ "align": "center",
584
+ "children": [
585
+ {
586
+ "type": "stack",
587
+ "direction": "horizontal",
588
+ "gap": "sm",
589
+ "align": "center",
590
+ "children": [
591
+ {
592
+ "type": "icon",
593
+ "name": "git-branch",
594
+ "size": "lg"
595
+ },
596
+ {
597
+ "type": "typography",
598
+ "content": "Routes",
599
+ "variant": "h2"
600
+ }
601
+ ]
602
+ },
603
+ {
604
+ "type": "stack",
605
+ "direction": "horizontal",
606
+ "gap": "sm",
607
+ "children": [
608
+ {
609
+ "type": "button",
610
+ "label": "Create Route",
611
+ "event": "CREATE",
612
+ "variant": "primary",
613
+ "icon": "plus"
614
+ }
615
+ ]
616
+ }
617
+ ]
618
+ },
619
+ {
620
+ "type": "divider"
621
+ },
622
+ {
623
+ "type": "data-list",
624
+ "entity": "Route",
625
+ "emptyIcon": "inbox",
626
+ "emptyTitle": "No routes configured",
627
+ "emptyDescription": "Add API routes to your gateway.",
628
+ "itemActions": [
629
+ {
630
+ "label": "View",
631
+ "event": "VIEW",
632
+ "variant": "ghost",
633
+ "size": "sm"
634
+ },
635
+ {
636
+ "label": "Edit",
637
+ "event": "EDIT",
638
+ "variant": "ghost",
639
+ "size": "sm"
640
+ },
641
+ {
642
+ "label": "Delete",
643
+ "event": "DELETE",
644
+ "variant": "danger",
645
+ "size": "sm"
646
+ }
647
+ ],
648
+ "columns": [
649
+ {
650
+ "name": "method",
651
+ "variant": "badge"
652
+ },
653
+ {
654
+ "name": "path",
655
+ "variant": "h3",
656
+ "icon": "git-branch"
657
+ },
658
+ {
659
+ "name": "backend",
660
+ "variant": "body"
661
+ },
662
+ {
663
+ "name": "rateLimit",
664
+ "label": "Rate Limit",
665
+ "variant": "caption",
666
+ "format": "number"
667
+ }
668
+ ],
669
+ "variant": "card",
670
+ "gap": "sm"
671
+ }
672
+ ]
673
+ }
674
+ ]
675
+ }
676
+ ]
677
+ ]
678
+ },
679
+ {
680
+ "from": "deleting",
681
+ "to": "browsing",
682
+ "event": "CLOSE",
683
+ "effects": [
684
+ [
685
+ "render-ui",
686
+ "modal",
687
+ null
688
+ ],
689
+ [
690
+ "fetch",
691
+ "Route"
692
+ ],
693
+ [
694
+ "render-ui",
695
+ "main",
696
+ {
697
+ "type": "dashboard-layout",
698
+ "appName": "API Gateway",
699
+ "navItems": [
700
+ {
701
+ "label": "Routes",
702
+ "href": "/routes",
703
+ "icon": "git-branch"
704
+ },
705
+ {
706
+ "label": "Backends",
707
+ "href": "/backends",
708
+ "icon": "server"
709
+ },
710
+ {
711
+ "label": "Analytics",
712
+ "href": "/analytics",
713
+ "icon": "bar-chart-2"
714
+ }
715
+ ],
716
+ "children": [
717
+ {
718
+ "type": "stack",
719
+ "direction": "vertical",
720
+ "gap": "lg",
721
+ "className": "max-w-5xl mx-auto w-full",
722
+ "children": [
723
+ {
724
+ "type": "stack",
725
+ "direction": "horizontal",
726
+ "gap": "md",
727
+ "justify": "space-between",
728
+ "align": "center",
729
+ "children": [
730
+ {
731
+ "type": "stack",
732
+ "direction": "horizontal",
733
+ "gap": "sm",
734
+ "align": "center",
735
+ "children": [
736
+ {
737
+ "type": "icon",
738
+ "name": "git-branch",
739
+ "size": "lg"
740
+ },
741
+ {
742
+ "type": "typography",
743
+ "content": "Routes",
744
+ "variant": "h2"
745
+ }
746
+ ]
747
+ },
748
+ {
749
+ "type": "stack",
750
+ "direction": "horizontal",
751
+ "gap": "sm",
752
+ "children": [
753
+ {
754
+ "type": "button",
755
+ "label": "Create Route",
756
+ "event": "CREATE",
757
+ "variant": "primary",
758
+ "icon": "plus"
759
+ }
760
+ ]
761
+ }
762
+ ]
763
+ },
764
+ {
765
+ "type": "divider"
766
+ },
767
+ {
768
+ "type": "data-list",
769
+ "entity": "Route",
770
+ "emptyIcon": "inbox",
771
+ "emptyTitle": "No routes configured",
772
+ "emptyDescription": "Add API routes to your gateway.",
773
+ "itemActions": [
774
+ {
775
+ "label": "View",
776
+ "event": "VIEW",
777
+ "variant": "ghost",
778
+ "size": "sm"
779
+ },
780
+ {
781
+ "label": "Edit",
782
+ "event": "EDIT",
783
+ "variant": "ghost",
784
+ "size": "sm"
785
+ },
786
+ {
787
+ "label": "Delete",
788
+ "event": "DELETE",
789
+ "variant": "danger",
790
+ "size": "sm"
791
+ }
792
+ ],
793
+ "columns": [
794
+ {
795
+ "name": "method",
796
+ "variant": "badge"
797
+ },
798
+ {
799
+ "name": "path",
800
+ "variant": "h3",
801
+ "icon": "git-branch"
802
+ },
803
+ {
804
+ "name": "backend",
805
+ "variant": "body"
806
+ },
807
+ {
808
+ "name": "rateLimit",
809
+ "label": "Rate Limit",
810
+ "variant": "caption",
811
+ "format": "number"
812
+ }
813
+ ],
814
+ "variant": "card",
815
+ "gap": "sm"
816
+ }
817
+ ]
818
+ }
819
+ ]
820
+ }
821
+ ]
822
+ ]
823
+ }
824
+ ]
825
+ }
826
+ },
827
+ {
828
+ "name": "RouteCreate",
829
+ "linkedEntity": "Route",
830
+ "category": "interaction",
831
+ "emits": [
832
+ {
833
+ "event": "ROUTE_CREATED"
834
+ }
835
+ ],
836
+ "stateMachine": {
837
+ "states": [
838
+ {
839
+ "name": "closed",
840
+ "isInitial": true
841
+ },
842
+ {
843
+ "name": "open"
844
+ }
845
+ ],
846
+ "events": [
847
+ {
848
+ "key": "INIT",
849
+ "name": "Initialize"
850
+ },
851
+ {
852
+ "key": "CREATE",
853
+ "name": "Open"
854
+ },
855
+ {
856
+ "key": "CLOSE",
857
+ "name": "Close"
858
+ },
859
+ {
860
+ "key": "SAVE",
861
+ "name": "Save",
862
+ "payload": [
863
+ {
864
+ "name": "data",
865
+ "type": "object",
866
+ "required": true
867
+ }
868
+ ]
869
+ }
870
+ ],
871
+ "transitions": [
872
+ {
873
+ "from": "closed",
874
+ "to": "closed",
875
+ "event": "INIT",
876
+ "effects": [
877
+ [
878
+ "fetch",
879
+ "Route"
880
+ ]
881
+ ]
882
+ },
883
+ {
884
+ "from": "closed",
885
+ "to": "open",
886
+ "event": "CREATE",
887
+ "effects": [
888
+ [
889
+ "fetch",
890
+ "Route"
891
+ ],
892
+ [
893
+ "render-ui",
894
+ "modal",
895
+ {
896
+ "type": "stack",
897
+ "direction": "vertical",
898
+ "gap": "md",
899
+ "children": [
900
+ {
901
+ "type": "stack",
902
+ "direction": "horizontal",
903
+ "gap": "sm",
904
+ "children": [
905
+ {
906
+ "type": "icon",
907
+ "name": "plus-circle",
908
+ "size": "md"
909
+ },
910
+ {
911
+ "type": "typography",
912
+ "content": "Create Route",
504
913
  "variant": "h3"
505
914
  }
506
915
  ]
@@ -535,6 +944,11 @@
535
944
  "render-ui",
536
945
  "modal",
537
946
  null
947
+ ],
948
+ [
949
+ "notify",
950
+ "Cancelled",
951
+ "info"
538
952
  ]
539
953
  ]
540
954
  },
@@ -700,6 +1114,11 @@
700
1114
  "render-ui",
701
1115
  "modal",
702
1116
  null
1117
+ ],
1118
+ [
1119
+ "notify",
1120
+ "Cancelled",
1121
+ "info"
703
1122
  ]
704
1123
  ]
705
1124
  },
@@ -881,7 +1300,7 @@
881
1300
  {
882
1301
  "type": "typography",
883
1302
  "variant": "caption",
884
- "content": "RateLimit"
1303
+ "content": "Rate Limit"
885
1304
  },
886
1305
  {
887
1306
  "type": "typography",
@@ -928,6 +1347,11 @@
928
1347
  "render-ui",
929
1348
  "modal",
930
1349
  null
1350
+ ],
1351
+ [
1352
+ "notify",
1353
+ "Cancelled",
1354
+ "info"
931
1355
  ]
932
1356
  ]
933
1357
  }
@@ -985,6 +1409,21 @@
985
1409
  {
986
1410
  "name": "latency",
987
1411
  "type": "number"
1412
+ },
1413
+ {
1414
+ "name": "failureCount",
1415
+ "type": "number",
1416
+ "default": 0
1417
+ },
1418
+ {
1419
+ "name": "successCount",
1420
+ "type": "number",
1421
+ "default": 0
1422
+ },
1423
+ {
1424
+ "name": "threshold",
1425
+ "type": "number",
1426
+ "default": 5
988
1427
  }
989
1428
  ]
990
1429
  },
@@ -1042,40 +1481,123 @@
1042
1481
  "render-ui",
1043
1482
  "main",
1044
1483
  {
1045
- "type": "stack",
1046
- "direction": "vertical",
1047
- "gap": "lg",
1048
- "align": "center",
1484
+ "type": "dashboard-layout",
1485
+ "appName": "API Gateway",
1486
+ "navItems": [
1487
+ {
1488
+ "label": "Routes",
1489
+ "href": "/routes",
1490
+ "icon": "git-branch"
1491
+ },
1492
+ {
1493
+ "label": "Backends",
1494
+ "href": "/backends",
1495
+ "icon": "server"
1496
+ },
1497
+ {
1498
+ "label": "Analytics",
1499
+ "href": "/analytics",
1500
+ "icon": "bar-chart-2"
1501
+ }
1502
+ ],
1049
1503
  "children": [
1050
1504
  {
1051
1505
  "type": "stack",
1052
- "direction": "horizontal",
1053
- "gap": "md",
1054
- "align": "center",
1506
+ "direction": "vertical",
1507
+ "gap": "lg",
1055
1508
  "children": [
1056
1509
  {
1057
- "type": "icon",
1058
- "name": "server",
1059
- "size": "lg"
1510
+ "type": "stack",
1511
+ "direction": "horizontal",
1512
+ "gap": "md",
1513
+ "align": "center",
1514
+ "justify": "space-between",
1515
+ "children": [
1516
+ {
1517
+ "type": "stack",
1518
+ "direction": "horizontal",
1519
+ "gap": "md",
1520
+ "align": "center",
1521
+ "children": [
1522
+ {
1523
+ "type": "icon",
1524
+ "name": "server",
1525
+ "size": "lg"
1526
+ },
1527
+ {
1528
+ "type": "typography",
1529
+ "content": "Backend",
1530
+ "variant": "h2"
1531
+ }
1532
+ ]
1533
+ },
1534
+ {
1535
+ "type": "status-dot",
1536
+ "status": "success",
1537
+ "pulse": false,
1538
+ "label": "Circuit Closed"
1539
+ }
1540
+ ]
1060
1541
  },
1061
1542
  {
1062
- "type": "typography",
1063
- "content": "Backend",
1064
- "variant": "h2"
1543
+ "type": "divider"
1544
+ },
1545
+ {
1546
+ "type": "alert",
1547
+ "variant": "success",
1548
+ "message": "Service is healthy. All requests are being processed."
1549
+ },
1550
+ {
1551
+ "type": "simple-grid",
1552
+ "columns": 2,
1553
+ "children": [
1554
+ {
1555
+ "type": "stat-display",
1556
+ "label": "Failures",
1557
+ "value": [
1558
+ "object/get",
1559
+ [
1560
+ "array/first",
1561
+ "@entity"
1562
+ ],
1563
+ "failureCount"
1564
+ ]
1565
+ },
1566
+ {
1567
+ "type": "stat-display",
1568
+ "label": "Successes",
1569
+ "value": [
1570
+ "object/get",
1571
+ [
1572
+ "array/first",
1573
+ "@entity"
1574
+ ],
1575
+ "successCount"
1576
+ ]
1577
+ }
1578
+ ]
1579
+ },
1580
+ {
1581
+ "type": "meter",
1582
+ "value": [
1583
+ "object/get",
1584
+ [
1585
+ "array/first",
1586
+ "@entity"
1587
+ ],
1588
+ "failureCount"
1589
+ ],
1590
+ "min": 0,
1591
+ "max": [
1592
+ "object/get",
1593
+ [
1594
+ "array/first",
1595
+ "@entity"
1596
+ ],
1597
+ "threshold"
1598
+ ]
1065
1599
  }
1066
1600
  ]
1067
- },
1068
- {
1069
- "type": "divider"
1070
- },
1071
- {
1072
- "type": "badge",
1073
- "label": "Circuit Closed"
1074
- },
1075
- {
1076
- "type": "typography",
1077
- "content": "Service is healthy. All requests are being processed.",
1078
- "variant": "body"
1079
1601
  }
1080
1602
  ]
1081
1603
  }
@@ -1091,47 +1613,130 @@
1091
1613
  "render-ui",
1092
1614
  "main",
1093
1615
  {
1094
- "type": "stack",
1095
- "direction": "vertical",
1096
- "gap": "lg",
1097
- "align": "center",
1616
+ "type": "dashboard-layout",
1617
+ "appName": "API Gateway",
1618
+ "navItems": [
1619
+ {
1620
+ "label": "Routes",
1621
+ "href": "/routes",
1622
+ "icon": "git-branch"
1623
+ },
1624
+ {
1625
+ "label": "Backends",
1626
+ "href": "/backends",
1627
+ "icon": "server"
1628
+ },
1629
+ {
1630
+ "label": "Analytics",
1631
+ "href": "/analytics",
1632
+ "icon": "bar-chart-2"
1633
+ }
1634
+ ],
1098
1635
  "children": [
1099
1636
  {
1100
1637
  "type": "stack",
1101
- "direction": "horizontal",
1102
- "gap": "md",
1103
- "align": "center",
1638
+ "direction": "vertical",
1639
+ "gap": "lg",
1104
1640
  "children": [
1105
1641
  {
1106
- "type": "icon",
1107
- "name": "alert-triangle",
1108
- "size": "lg"
1642
+ "type": "stack",
1643
+ "direction": "horizontal",
1644
+ "gap": "md",
1645
+ "align": "center",
1646
+ "justify": "space-between",
1647
+ "children": [
1648
+ {
1649
+ "type": "stack",
1650
+ "direction": "horizontal",
1651
+ "gap": "md",
1652
+ "align": "center",
1653
+ "children": [
1654
+ {
1655
+ "type": "icon",
1656
+ "name": "alert-triangle",
1657
+ "size": "lg"
1658
+ },
1659
+ {
1660
+ "type": "typography",
1661
+ "content": "Backend",
1662
+ "variant": "h2"
1663
+ }
1664
+ ]
1665
+ },
1666
+ {
1667
+ "type": "status-dot",
1668
+ "status": "error",
1669
+ "pulse": true,
1670
+ "label": "Circuit Open"
1671
+ }
1672
+ ]
1109
1673
  },
1110
1674
  {
1111
- "type": "typography",
1112
- "content": "Backend",
1113
- "variant": "h2"
1675
+ "type": "divider"
1676
+ },
1677
+ {
1678
+ "type": "alert",
1679
+ "variant": "danger",
1680
+ "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
1681
+ },
1682
+ {
1683
+ "type": "simple-grid",
1684
+ "columns": 2,
1685
+ "children": [
1686
+ {
1687
+ "type": "stat-display",
1688
+ "label": "Failures",
1689
+ "value": [
1690
+ "object/get",
1691
+ [
1692
+ "array/first",
1693
+ "@entity"
1694
+ ],
1695
+ "failureCount"
1696
+ ]
1697
+ },
1698
+ {
1699
+ "type": "stat-display",
1700
+ "label": "Successes",
1701
+ "value": [
1702
+ "object/get",
1703
+ [
1704
+ "array/first",
1705
+ "@entity"
1706
+ ],
1707
+ "successCount"
1708
+ ]
1709
+ }
1710
+ ]
1711
+ },
1712
+ {
1713
+ "type": "meter",
1714
+ "value": [
1715
+ "object/get",
1716
+ [
1717
+ "array/first",
1718
+ "@entity"
1719
+ ],
1720
+ "failureCount"
1721
+ ],
1722
+ "min": 0,
1723
+ "max": [
1724
+ "object/get",
1725
+ [
1726
+ "array/first",
1727
+ "@entity"
1728
+ ],
1729
+ "threshold"
1730
+ ]
1731
+ },
1732
+ {
1733
+ "type": "button",
1734
+ "label": "Reset",
1735
+ "event": "RESET",
1736
+ "variant": "ghost",
1737
+ "icon": "rotate-ccw"
1114
1738
  }
1115
1739
  ]
1116
- },
1117
- {
1118
- "type": "divider"
1119
- },
1120
- {
1121
- "type": "badge",
1122
- "label": "Circuit Open"
1123
- },
1124
- {
1125
- "type": "typography",
1126
- "content": "Circuit is open. Requests are being rejected to prevent cascading failures.",
1127
- "variant": "body"
1128
- },
1129
- {
1130
- "type": "button",
1131
- "label": "Reset",
1132
- "event": "RESET",
1133
- "variant": "ghost",
1134
- "icon": "rotate-ccw"
1135
1740
  }
1136
1741
  ]
1137
1742
  }
@@ -1147,40 +1752,123 @@
1147
1752
  "render-ui",
1148
1753
  "main",
1149
1754
  {
1150
- "type": "stack",
1151
- "direction": "vertical",
1152
- "gap": "lg",
1153
- "align": "center",
1755
+ "type": "dashboard-layout",
1756
+ "appName": "API Gateway",
1757
+ "navItems": [
1758
+ {
1759
+ "label": "Routes",
1760
+ "href": "/routes",
1761
+ "icon": "git-branch"
1762
+ },
1763
+ {
1764
+ "label": "Backends",
1765
+ "href": "/backends",
1766
+ "icon": "server"
1767
+ },
1768
+ {
1769
+ "label": "Analytics",
1770
+ "href": "/analytics",
1771
+ "icon": "bar-chart-2"
1772
+ }
1773
+ ],
1154
1774
  "children": [
1155
1775
  {
1156
1776
  "type": "stack",
1157
- "direction": "horizontal",
1158
- "gap": "md",
1159
- "align": "center",
1777
+ "direction": "vertical",
1778
+ "gap": "lg",
1160
1779
  "children": [
1161
1780
  {
1162
- "type": "icon",
1163
- "name": "server",
1164
- "size": "lg"
1781
+ "type": "stack",
1782
+ "direction": "horizontal",
1783
+ "gap": "md",
1784
+ "align": "center",
1785
+ "justify": "space-between",
1786
+ "children": [
1787
+ {
1788
+ "type": "stack",
1789
+ "direction": "horizontal",
1790
+ "gap": "md",
1791
+ "align": "center",
1792
+ "children": [
1793
+ {
1794
+ "type": "icon",
1795
+ "name": "server",
1796
+ "size": "lg"
1797
+ },
1798
+ {
1799
+ "type": "typography",
1800
+ "content": "Backend",
1801
+ "variant": "h2"
1802
+ }
1803
+ ]
1804
+ },
1805
+ {
1806
+ "type": "status-dot",
1807
+ "status": "success",
1808
+ "pulse": false,
1809
+ "label": "Circuit Closed"
1810
+ }
1811
+ ]
1165
1812
  },
1166
1813
  {
1167
- "type": "typography",
1168
- "content": "Backend",
1169
- "variant": "h2"
1814
+ "type": "divider"
1815
+ },
1816
+ {
1817
+ "type": "alert",
1818
+ "variant": "success",
1819
+ "message": "Service is healthy. All requests are being processed."
1820
+ },
1821
+ {
1822
+ "type": "simple-grid",
1823
+ "columns": 2,
1824
+ "children": [
1825
+ {
1826
+ "type": "stat-display",
1827
+ "label": "Failures",
1828
+ "value": [
1829
+ "object/get",
1830
+ [
1831
+ "array/first",
1832
+ "@entity"
1833
+ ],
1834
+ "failureCount"
1835
+ ]
1836
+ },
1837
+ {
1838
+ "type": "stat-display",
1839
+ "label": "Successes",
1840
+ "value": [
1841
+ "object/get",
1842
+ [
1843
+ "array/first",
1844
+ "@entity"
1845
+ ],
1846
+ "successCount"
1847
+ ]
1848
+ }
1849
+ ]
1850
+ },
1851
+ {
1852
+ "type": "meter",
1853
+ "value": [
1854
+ "object/get",
1855
+ [
1856
+ "array/first",
1857
+ "@entity"
1858
+ ],
1859
+ "failureCount"
1860
+ ],
1861
+ "min": 0,
1862
+ "max": [
1863
+ "object/get",
1864
+ [
1865
+ "array/first",
1866
+ "@entity"
1867
+ ],
1868
+ "threshold"
1869
+ ]
1170
1870
  }
1171
1871
  ]
1172
- },
1173
- {
1174
- "type": "divider"
1175
- },
1176
- {
1177
- "type": "badge",
1178
- "label": "Circuit Closed"
1179
- },
1180
- {
1181
- "type": "typography",
1182
- "content": "Service is healthy. All requests are being processed.",
1183
- "variant": "body"
1184
1872
  }
1185
1873
  ]
1186
1874
  }
@@ -1196,40 +1884,103 @@
1196
1884
  "render-ui",
1197
1885
  "main",
1198
1886
  {
1199
- "type": "stack",
1200
- "direction": "vertical",
1201
- "gap": "lg",
1202
- "align": "center",
1887
+ "type": "dashboard-layout",
1888
+ "appName": "API Gateway",
1889
+ "navItems": [
1890
+ {
1891
+ "label": "Routes",
1892
+ "href": "/routes",
1893
+ "icon": "git-branch"
1894
+ },
1895
+ {
1896
+ "label": "Backends",
1897
+ "href": "/backends",
1898
+ "icon": "server"
1899
+ },
1900
+ {
1901
+ "label": "Analytics",
1902
+ "href": "/analytics",
1903
+ "icon": "bar-chart-2"
1904
+ }
1905
+ ],
1203
1906
  "children": [
1204
1907
  {
1205
1908
  "type": "stack",
1206
- "direction": "horizontal",
1207
- "gap": "md",
1208
- "align": "center",
1909
+ "direction": "vertical",
1910
+ "gap": "lg",
1209
1911
  "children": [
1210
1912
  {
1211
- "type": "icon",
1212
- "name": "activity",
1213
- "size": "lg"
1913
+ "type": "stack",
1914
+ "direction": "horizontal",
1915
+ "gap": "md",
1916
+ "align": "center",
1917
+ "justify": "space-between",
1918
+ "children": [
1919
+ {
1920
+ "type": "stack",
1921
+ "direction": "horizontal",
1922
+ "gap": "md",
1923
+ "align": "center",
1924
+ "children": [
1925
+ {
1926
+ "type": "icon",
1927
+ "name": "activity",
1928
+ "size": "lg"
1929
+ },
1930
+ {
1931
+ "type": "typography",
1932
+ "content": "Backend",
1933
+ "variant": "h2"
1934
+ }
1935
+ ]
1936
+ },
1937
+ {
1938
+ "type": "status-dot",
1939
+ "status": "warning",
1940
+ "pulse": true,
1941
+ "label": "Circuit Half-Open"
1942
+ }
1943
+ ]
1214
1944
  },
1215
1945
  {
1216
- "type": "typography",
1217
- "content": "Backend",
1218
- "variant": "h2"
1946
+ "type": "divider"
1947
+ },
1948
+ {
1949
+ "type": "alert",
1950
+ "variant": "warning",
1951
+ "message": "Testing recovery. Limited requests are being allowed through."
1952
+ },
1953
+ {
1954
+ "type": "simple-grid",
1955
+ "columns": 2,
1956
+ "children": [
1957
+ {
1958
+ "type": "stat-display",
1959
+ "label": "Failures",
1960
+ "value": [
1961
+ "object/get",
1962
+ [
1963
+ "array/first",
1964
+ "@entity"
1965
+ ],
1966
+ "failureCount"
1967
+ ]
1968
+ },
1969
+ {
1970
+ "type": "stat-display",
1971
+ "label": "Successes",
1972
+ "value": [
1973
+ "object/get",
1974
+ [
1975
+ "array/first",
1976
+ "@entity"
1977
+ ],
1978
+ "successCount"
1979
+ ]
1980
+ }
1981
+ ]
1219
1982
  }
1220
1983
  ]
1221
- },
1222
- {
1223
- "type": "divider"
1224
- },
1225
- {
1226
- "type": "badge",
1227
- "label": "Circuit Half-Open"
1228
- },
1229
- {
1230
- "type": "typography",
1231
- "content": "Testing recovery. Limited requests are being allowed through.",
1232
- "variant": "body"
1233
1984
  }
1234
1985
  ]
1235
1986
  }
@@ -1245,40 +1996,123 @@
1245
1996
  "render-ui",
1246
1997
  "main",
1247
1998
  {
1248
- "type": "stack",
1249
- "direction": "vertical",
1250
- "gap": "lg",
1251
- "align": "center",
1999
+ "type": "dashboard-layout",
2000
+ "appName": "API Gateway",
2001
+ "navItems": [
2002
+ {
2003
+ "label": "Routes",
2004
+ "href": "/routes",
2005
+ "icon": "git-branch"
2006
+ },
2007
+ {
2008
+ "label": "Backends",
2009
+ "href": "/backends",
2010
+ "icon": "server"
2011
+ },
2012
+ {
2013
+ "label": "Analytics",
2014
+ "href": "/analytics",
2015
+ "icon": "bar-chart-2"
2016
+ }
2017
+ ],
1252
2018
  "children": [
1253
2019
  {
1254
2020
  "type": "stack",
1255
- "direction": "horizontal",
1256
- "gap": "md",
1257
- "align": "center",
2021
+ "direction": "vertical",
2022
+ "gap": "lg",
1258
2023
  "children": [
1259
2024
  {
1260
- "type": "icon",
1261
- "name": "server",
1262
- "size": "lg"
2025
+ "type": "stack",
2026
+ "direction": "horizontal",
2027
+ "gap": "md",
2028
+ "align": "center",
2029
+ "justify": "space-between",
2030
+ "children": [
2031
+ {
2032
+ "type": "stack",
2033
+ "direction": "horizontal",
2034
+ "gap": "md",
2035
+ "align": "center",
2036
+ "children": [
2037
+ {
2038
+ "type": "icon",
2039
+ "name": "server",
2040
+ "size": "lg"
2041
+ },
2042
+ {
2043
+ "type": "typography",
2044
+ "content": "Backend",
2045
+ "variant": "h2"
2046
+ }
2047
+ ]
2048
+ },
2049
+ {
2050
+ "type": "status-dot",
2051
+ "status": "success",
2052
+ "pulse": false,
2053
+ "label": "Circuit Closed"
2054
+ }
2055
+ ]
1263
2056
  },
1264
2057
  {
1265
- "type": "typography",
1266
- "content": "Backend",
1267
- "variant": "h2"
1268
- }
1269
- ]
1270
- },
1271
- {
1272
- "type": "divider"
1273
- },
1274
- {
1275
- "type": "badge",
1276
- "label": "Circuit Closed"
1277
- },
1278
- {
1279
- "type": "typography",
1280
- "content": "Service is healthy. All requests are being processed.",
1281
- "variant": "body"
2058
+ "type": "divider"
2059
+ },
2060
+ {
2061
+ "type": "alert",
2062
+ "variant": "success",
2063
+ "message": "Service is healthy. All requests are being processed."
2064
+ },
2065
+ {
2066
+ "type": "simple-grid",
2067
+ "columns": 2,
2068
+ "children": [
2069
+ {
2070
+ "type": "stat-display",
2071
+ "label": "Failures",
2072
+ "value": [
2073
+ "object/get",
2074
+ [
2075
+ "array/first",
2076
+ "@entity"
2077
+ ],
2078
+ "failureCount"
2079
+ ]
2080
+ },
2081
+ {
2082
+ "type": "stat-display",
2083
+ "label": "Successes",
2084
+ "value": [
2085
+ "object/get",
2086
+ [
2087
+ "array/first",
2088
+ "@entity"
2089
+ ],
2090
+ "successCount"
2091
+ ]
2092
+ }
2093
+ ]
2094
+ },
2095
+ {
2096
+ "type": "meter",
2097
+ "value": [
2098
+ "object/get",
2099
+ [
2100
+ "array/first",
2101
+ "@entity"
2102
+ ],
2103
+ "failureCount"
2104
+ ],
2105
+ "min": 0,
2106
+ "max": [
2107
+ "object/get",
2108
+ [
2109
+ "array/first",
2110
+ "@entity"
2111
+ ],
2112
+ "threshold"
2113
+ ]
2114
+ }
2115
+ ]
1282
2116
  }
1283
2117
  ]
1284
2118
  }
@@ -1294,40 +2128,123 @@
1294
2128
  "render-ui",
1295
2129
  "main",
1296
2130
  {
1297
- "type": "stack",
1298
- "direction": "vertical",
1299
- "gap": "lg",
1300
- "align": "center",
2131
+ "type": "dashboard-layout",
2132
+ "appName": "API Gateway",
2133
+ "navItems": [
2134
+ {
2135
+ "label": "Routes",
2136
+ "href": "/routes",
2137
+ "icon": "git-branch"
2138
+ },
2139
+ {
2140
+ "label": "Backends",
2141
+ "href": "/backends",
2142
+ "icon": "server"
2143
+ },
2144
+ {
2145
+ "label": "Analytics",
2146
+ "href": "/analytics",
2147
+ "icon": "bar-chart-2"
2148
+ }
2149
+ ],
1301
2150
  "children": [
1302
2151
  {
1303
2152
  "type": "stack",
1304
- "direction": "horizontal",
1305
- "gap": "md",
1306
- "align": "center",
2153
+ "direction": "vertical",
2154
+ "gap": "lg",
1307
2155
  "children": [
1308
2156
  {
1309
- "type": "icon",
1310
- "name": "server",
1311
- "size": "lg"
2157
+ "type": "stack",
2158
+ "direction": "horizontal",
2159
+ "gap": "md",
2160
+ "align": "center",
2161
+ "justify": "space-between",
2162
+ "children": [
2163
+ {
2164
+ "type": "stack",
2165
+ "direction": "horizontal",
2166
+ "gap": "md",
2167
+ "align": "center",
2168
+ "children": [
2169
+ {
2170
+ "type": "icon",
2171
+ "name": "server",
2172
+ "size": "lg"
2173
+ },
2174
+ {
2175
+ "type": "typography",
2176
+ "content": "Backend",
2177
+ "variant": "h2"
2178
+ }
2179
+ ]
2180
+ },
2181
+ {
2182
+ "type": "status-dot",
2183
+ "status": "success",
2184
+ "pulse": false,
2185
+ "label": "Circuit Closed"
2186
+ }
2187
+ ]
1312
2188
  },
1313
2189
  {
1314
- "type": "typography",
1315
- "content": "Backend",
1316
- "variant": "h2"
2190
+ "type": "divider"
2191
+ },
2192
+ {
2193
+ "type": "alert",
2194
+ "variant": "success",
2195
+ "message": "Service is healthy. All requests are being processed."
2196
+ },
2197
+ {
2198
+ "type": "simple-grid",
2199
+ "columns": 2,
2200
+ "children": [
2201
+ {
2202
+ "type": "stat-display",
2203
+ "label": "Failures",
2204
+ "value": [
2205
+ "object/get",
2206
+ [
2207
+ "array/first",
2208
+ "@entity"
2209
+ ],
2210
+ "failureCount"
2211
+ ]
2212
+ },
2213
+ {
2214
+ "type": "stat-display",
2215
+ "label": "Successes",
2216
+ "value": [
2217
+ "object/get",
2218
+ [
2219
+ "array/first",
2220
+ "@entity"
2221
+ ],
2222
+ "successCount"
2223
+ ]
2224
+ }
2225
+ ]
2226
+ },
2227
+ {
2228
+ "type": "meter",
2229
+ "value": [
2230
+ "object/get",
2231
+ [
2232
+ "array/first",
2233
+ "@entity"
2234
+ ],
2235
+ "failureCount"
2236
+ ],
2237
+ "min": 0,
2238
+ "max": [
2239
+ "object/get",
2240
+ [
2241
+ "array/first",
2242
+ "@entity"
2243
+ ],
2244
+ "threshold"
2245
+ ]
1317
2246
  }
1318
2247
  ]
1319
- },
1320
- {
1321
- "type": "divider"
1322
- },
1323
- {
1324
- "type": "badge",
1325
- "label": "Circuit Closed"
1326
- },
1327
- {
1328
- "type": "typography",
1329
- "content": "Service is healthy. All requests are being processed.",
1330
- "variant": "body"
1331
2248
  }
1332
2249
  ]
1333
2250
  }
@@ -1343,47 +2260,130 @@
1343
2260
  "render-ui",
1344
2261
  "main",
1345
2262
  {
1346
- "type": "stack",
1347
- "direction": "vertical",
1348
- "gap": "lg",
1349
- "align": "center",
2263
+ "type": "dashboard-layout",
2264
+ "appName": "API Gateway",
2265
+ "navItems": [
2266
+ {
2267
+ "label": "Routes",
2268
+ "href": "/routes",
2269
+ "icon": "git-branch"
2270
+ },
2271
+ {
2272
+ "label": "Backends",
2273
+ "href": "/backends",
2274
+ "icon": "server"
2275
+ },
2276
+ {
2277
+ "label": "Analytics",
2278
+ "href": "/analytics",
2279
+ "icon": "bar-chart-2"
2280
+ }
2281
+ ],
1350
2282
  "children": [
1351
2283
  {
1352
2284
  "type": "stack",
1353
- "direction": "horizontal",
1354
- "gap": "md",
1355
- "align": "center",
2285
+ "direction": "vertical",
2286
+ "gap": "lg",
1356
2287
  "children": [
1357
2288
  {
1358
- "type": "icon",
1359
- "name": "alert-triangle",
1360
- "size": "lg"
2289
+ "type": "stack",
2290
+ "direction": "horizontal",
2291
+ "gap": "md",
2292
+ "align": "center",
2293
+ "justify": "space-between",
2294
+ "children": [
2295
+ {
2296
+ "type": "stack",
2297
+ "direction": "horizontal",
2298
+ "gap": "md",
2299
+ "align": "center",
2300
+ "children": [
2301
+ {
2302
+ "type": "icon",
2303
+ "name": "alert-triangle",
2304
+ "size": "lg"
2305
+ },
2306
+ {
2307
+ "type": "typography",
2308
+ "content": "Backend",
2309
+ "variant": "h2"
2310
+ }
2311
+ ]
2312
+ },
2313
+ {
2314
+ "type": "status-dot",
2315
+ "status": "error",
2316
+ "pulse": true,
2317
+ "label": "Circuit Open"
2318
+ }
2319
+ ]
1361
2320
  },
1362
2321
  {
1363
- "type": "typography",
1364
- "content": "Backend",
1365
- "variant": "h2"
2322
+ "type": "divider"
2323
+ },
2324
+ {
2325
+ "type": "alert",
2326
+ "variant": "danger",
2327
+ "message": "Circuit is open. Requests are being rejected to prevent cascading failures."
2328
+ },
2329
+ {
2330
+ "type": "simple-grid",
2331
+ "columns": 2,
2332
+ "children": [
2333
+ {
2334
+ "type": "stat-display",
2335
+ "label": "Failures",
2336
+ "value": [
2337
+ "object/get",
2338
+ [
2339
+ "array/first",
2340
+ "@entity"
2341
+ ],
2342
+ "failureCount"
2343
+ ]
2344
+ },
2345
+ {
2346
+ "type": "stat-display",
2347
+ "label": "Successes",
2348
+ "value": [
2349
+ "object/get",
2350
+ [
2351
+ "array/first",
2352
+ "@entity"
2353
+ ],
2354
+ "successCount"
2355
+ ]
2356
+ }
2357
+ ]
2358
+ },
2359
+ {
2360
+ "type": "meter",
2361
+ "value": [
2362
+ "object/get",
2363
+ [
2364
+ "array/first",
2365
+ "@entity"
2366
+ ],
2367
+ "failureCount"
2368
+ ],
2369
+ "min": 0,
2370
+ "max": [
2371
+ "object/get",
2372
+ [
2373
+ "array/first",
2374
+ "@entity"
2375
+ ],
2376
+ "threshold"
2377
+ ]
2378
+ },
2379
+ {
2380
+ "type": "button",
2381
+ "label": "Reset",
2382
+ "event": "RESET",
2383
+ "variant": "ghost",
2384
+ "icon": "rotate-ccw"
1366
2385
  }
1367
2386
  ]
1368
- },
1369
- {
1370
- "type": "divider"
1371
- },
1372
- {
1373
- "type": "badge",
1374
- "label": "Circuit Open"
1375
- },
1376
- {
1377
- "type": "typography",
1378
- "content": "Circuit is open. Requests are being rejected to prevent cascading failures.",
1379
- "variant": "body"
1380
- },
1381
- {
1382
- "type": "button",
1383
- "label": "Reset",
1384
- "event": "RESET",
1385
- "variant": "ghost",
1386
- "icon": "rotate-ccw"
1387
2387
  }
1388
2388
  ]
1389
2389
  }
@@ -1399,40 +2399,123 @@
1399
2399
  "render-ui",
1400
2400
  "main",
1401
2401
  {
1402
- "type": "stack",
1403
- "direction": "vertical",
1404
- "gap": "lg",
1405
- "align": "center",
2402
+ "type": "dashboard-layout",
2403
+ "appName": "API Gateway",
2404
+ "navItems": [
2405
+ {
2406
+ "label": "Routes",
2407
+ "href": "/routes",
2408
+ "icon": "git-branch"
2409
+ },
2410
+ {
2411
+ "label": "Backends",
2412
+ "href": "/backends",
2413
+ "icon": "server"
2414
+ },
2415
+ {
2416
+ "label": "Analytics",
2417
+ "href": "/analytics",
2418
+ "icon": "bar-chart-2"
2419
+ }
2420
+ ],
1406
2421
  "children": [
1407
2422
  {
1408
2423
  "type": "stack",
1409
- "direction": "horizontal",
1410
- "gap": "md",
1411
- "align": "center",
2424
+ "direction": "vertical",
2425
+ "gap": "lg",
1412
2426
  "children": [
1413
2427
  {
1414
- "type": "icon",
1415
- "name": "server",
1416
- "size": "lg"
2428
+ "type": "stack",
2429
+ "direction": "horizontal",
2430
+ "gap": "md",
2431
+ "align": "center",
2432
+ "justify": "space-between",
2433
+ "children": [
2434
+ {
2435
+ "type": "stack",
2436
+ "direction": "horizontal",
2437
+ "gap": "md",
2438
+ "align": "center",
2439
+ "children": [
2440
+ {
2441
+ "type": "icon",
2442
+ "name": "server",
2443
+ "size": "lg"
2444
+ },
2445
+ {
2446
+ "type": "typography",
2447
+ "content": "Backend",
2448
+ "variant": "h2"
2449
+ }
2450
+ ]
2451
+ },
2452
+ {
2453
+ "type": "status-dot",
2454
+ "status": "success",
2455
+ "pulse": false,
2456
+ "label": "Circuit Closed"
2457
+ }
2458
+ ]
1417
2459
  },
1418
2460
  {
1419
- "type": "typography",
1420
- "content": "Backend",
1421
- "variant": "h2"
2461
+ "type": "divider"
2462
+ },
2463
+ {
2464
+ "type": "alert",
2465
+ "variant": "success",
2466
+ "message": "Service is healthy. All requests are being processed."
2467
+ },
2468
+ {
2469
+ "type": "simple-grid",
2470
+ "columns": 2,
2471
+ "children": [
2472
+ {
2473
+ "type": "stat-display",
2474
+ "label": "Failures",
2475
+ "value": [
2476
+ "object/get",
2477
+ [
2478
+ "array/first",
2479
+ "@entity"
2480
+ ],
2481
+ "failureCount"
2482
+ ]
2483
+ },
2484
+ {
2485
+ "type": "stat-display",
2486
+ "label": "Successes",
2487
+ "value": [
2488
+ "object/get",
2489
+ [
2490
+ "array/first",
2491
+ "@entity"
2492
+ ],
2493
+ "successCount"
2494
+ ]
2495
+ }
2496
+ ]
2497
+ },
2498
+ {
2499
+ "type": "meter",
2500
+ "value": [
2501
+ "object/get",
2502
+ [
2503
+ "array/first",
2504
+ "@entity"
2505
+ ],
2506
+ "failureCount"
2507
+ ],
2508
+ "min": 0,
2509
+ "max": [
2510
+ "object/get",
2511
+ [
2512
+ "array/first",
2513
+ "@entity"
2514
+ ],
2515
+ "threshold"
2516
+ ]
1422
2517
  }
1423
2518
  ]
1424
- },
1425
- {
1426
- "type": "divider"
1427
- },
1428
- {
1429
- "type": "badge",
1430
- "label": "Circuit Closed"
1431
- },
1432
- {
1433
- "type": "typography",
1434
- "content": "Service is healthy. All requests are being processed.",
1435
- "variant": "body"
1436
2519
  }
1437
2520
  ]
1438
2521
  }
@@ -1536,134 +2619,267 @@
1536
2619
  "render-ui",
1537
2620
  "main",
1538
2621
  {
1539
- "type": "stack",
1540
- "direction": "vertical",
1541
- "gap": "lg",
1542
- "children": [
2622
+ "type": "dashboard-layout",
2623
+ "appName": "API Gateway",
2624
+ "navItems": [
1543
2625
  {
1544
- "type": "stack",
1545
- "direction": "horizontal",
1546
- "gap": "md",
1547
- "justify": "space-between",
1548
- "children": [
1549
- {
1550
- "type": "stack",
1551
- "direction": "horizontal",
1552
- "gap": "md",
1553
- "children": [
1554
- {
1555
- "type": "icon",
1556
- "name": "bar-chart-2",
1557
- "size": "lg"
1558
- },
1559
- {
1560
- "type": "typography",
1561
- "content": "Analytics",
1562
- "variant": "h2"
1563
- }
1564
- ]
1565
- },
1566
- {
1567
- "type": "button",
1568
- "label": "Refresh",
1569
- "event": "REFRESH",
1570
- "variant": "secondary",
1571
- "icon": "refresh-cw"
1572
- }
1573
- ]
2626
+ "label": "Routes",
2627
+ "href": "/routes",
2628
+ "icon": "git-branch"
1574
2629
  },
1575
2630
  {
1576
- "type": "divider"
2631
+ "label": "Backends",
2632
+ "href": "/backends",
2633
+ "icon": "server"
1577
2634
  },
1578
2635
  {
1579
- "type": "simple-grid",
1580
- "columns": 3,
2636
+ "label": "Analytics",
2637
+ "href": "/analytics",
2638
+ "icon": "bar-chart-2"
2639
+ }
2640
+ ],
2641
+ "children": [
2642
+ {
2643
+ "type": "scaled-diagram",
1581
2644
  "children": [
1582
2645
  {
1583
- "type": "card",
2646
+ "type": "stack",
2647
+ "direction": "vertical",
2648
+ "gap": "lg",
1584
2649
  "children": [
1585
2650
  {
1586
- "type": "stack",
1587
- "direction": "vertical",
1588
- "gap": "sm",
1589
- "children": [
2651
+ "type": "breadcrumb",
2652
+ "items": [
1590
2653
  {
1591
- "type": "typography",
1592
- "variant": "caption",
1593
- "content": "TotalRequests"
2654
+ "label": "Home",
2655
+ "href": "/"
1594
2656
  },
1595
2657
  {
1596
- "type": "typography",
1597
- "variant": "h3",
1598
- "content": "@entity.totalRequests"
2658
+ "label": "Analytics"
1599
2659
  }
1600
2660
  ]
1601
- }
1602
- ]
1603
- },
1604
- {
1605
- "type": "card",
1606
- "children": [
2661
+ },
1607
2662
  {
1608
2663
  "type": "stack",
1609
- "direction": "vertical",
1610
- "gap": "sm",
2664
+ "direction": "horizontal",
2665
+ "gap": "md",
2666
+ "justify": "space-between",
1611
2667
  "children": [
1612
2668
  {
1613
- "type": "typography",
1614
- "variant": "caption",
1615
- "content": "ErrorRate"
2669
+ "type": "stack",
2670
+ "direction": "horizontal",
2671
+ "gap": "md",
2672
+ "children": [
2673
+ {
2674
+ "type": "icon",
2675
+ "name": "bar-chart-2",
2676
+ "size": "lg"
2677
+ },
2678
+ {
2679
+ "type": "typography",
2680
+ "content": "Analytics",
2681
+ "variant": "h2"
2682
+ }
2683
+ ]
1616
2684
  },
1617
2685
  {
1618
- "type": "typography",
1619
- "variant": "h3",
1620
- "content": "@entity.errorRate"
2686
+ "type": "button",
2687
+ "label": "Refresh",
2688
+ "event": "REFRESH",
2689
+ "variant": "secondary",
2690
+ "icon": "refresh-cw"
1621
2691
  }
1622
2692
  ]
1623
- }
1624
- ]
1625
- },
1626
- {
1627
- "type": "card",
1628
- "children": [
2693
+ },
1629
2694
  {
1630
- "type": "stack",
1631
- "direction": "vertical",
1632
- "gap": "sm",
2695
+ "type": "divider"
2696
+ },
2697
+ {
2698
+ "type": "box",
2699
+ "padding": "md",
1633
2700
  "children": [
1634
2701
  {
1635
- "type": "typography",
1636
- "variant": "caption",
1637
- "content": "AvgLatency"
2702
+ "type": "simple-grid",
2703
+ "columns": 3,
2704
+ "children": [
2705
+ {
2706
+ "type": "stat-display",
2707
+ "label": "TotalRequests",
2708
+ "value": [
2709
+ "object/get",
2710
+ [
2711
+ "array/first",
2712
+ "@entity"
2713
+ ],
2714
+ "totalRequests"
2715
+ ]
2716
+ },
2717
+ {
2718
+ "type": "stat-display",
2719
+ "label": "ErrorRate",
2720
+ "value": [
2721
+ "object/get",
2722
+ [
2723
+ "array/first",
2724
+ "@entity"
2725
+ ],
2726
+ "errorRate"
2727
+ ]
2728
+ },
2729
+ {
2730
+ "type": "stat-display",
2731
+ "label": "AvgLatency",
2732
+ "value": [
2733
+ "object/get",
2734
+ [
2735
+ "array/first",
2736
+ "@entity"
2737
+ ],
2738
+ "avgLatency"
2739
+ ]
2740
+ },
2741
+ {
2742
+ "type": "card",
2743
+ "children": [
2744
+ {
2745
+ "type": "stack",
2746
+ "direction": "vertical",
2747
+ "gap": "sm",
2748
+ "children": [
2749
+ {
2750
+ "type": "typography",
2751
+ "variant": "caption",
2752
+ "content": "Uptime"
2753
+ },
2754
+ {
2755
+ "type": "typography",
2756
+ "variant": "h3",
2757
+ "content": [
2758
+ "object/get",
2759
+ [
2760
+ "array/first",
2761
+ "@entity"
2762
+ ],
2763
+ "uptime"
2764
+ ]
2765
+ }
2766
+ ]
2767
+ }
2768
+ ]
2769
+ }
2770
+ ]
2771
+ }
2772
+ ]
2773
+ },
2774
+ {
2775
+ "type": "divider"
2776
+ },
2777
+ {
2778
+ "type": "grid",
2779
+ "columns": 2,
2780
+ "gap": "md",
2781
+ "children": [
2782
+ {
2783
+ "type": "card",
2784
+ "children": [
2785
+ {
2786
+ "type": "typography",
2787
+ "variant": "caption",
2788
+ "content": "Chart View"
2789
+ }
2790
+ ]
1638
2791
  },
1639
2792
  {
1640
- "type": "typography",
1641
- "variant": "h3",
1642
- "content": "@entity.avgLatency"
2793
+ "type": "card",
2794
+ "children": [
2795
+ {
2796
+ "type": "typography",
2797
+ "variant": "caption",
2798
+ "content": "Graph View"
2799
+ }
2800
+ ]
1643
2801
  }
1644
2802
  ]
1645
- }
1646
- ]
1647
- },
1648
- {
1649
- "type": "card",
1650
- "children": [
2803
+ },
1651
2804
  {
1652
- "type": "stack",
1653
- "direction": "vertical",
1654
- "gap": "sm",
1655
- "children": [
2805
+ "type": "line-chart",
2806
+ "data": [
1656
2807
  {
1657
- "type": "typography",
1658
- "variant": "caption",
1659
- "content": "Uptime"
2808
+ "date": "Jan",
2809
+ "value": 12
1660
2810
  },
1661
2811
  {
1662
- "type": "typography",
1663
- "variant": "h3",
1664
- "content": "@entity.uptime"
2812
+ "date": "Feb",
2813
+ "value": 19
2814
+ },
2815
+ {
2816
+ "date": "Mar",
2817
+ "value": 15
2818
+ },
2819
+ {
2820
+ "date": "Apr",
2821
+ "value": 25
2822
+ },
2823
+ {
2824
+ "date": "May",
2825
+ "value": 22
2826
+ },
2827
+ {
2828
+ "date": "Jun",
2829
+ "value": 30
2830
+ }
2831
+ ],
2832
+ "xKey": "date",
2833
+ "yKey": "value",
2834
+ "title": "Trend"
2835
+ },
2836
+ {
2837
+ "type": "chart-legend",
2838
+ "items": [
2839
+ {
2840
+ "label": "Current",
2841
+ "color": "primary"
2842
+ },
2843
+ {
2844
+ "label": "Previous",
2845
+ "color": "muted"
1665
2846
  }
1666
2847
  ]
2848
+ },
2849
+ {
2850
+ "type": "graph-view",
2851
+ "nodes": [
2852
+ {
2853
+ "id": "a",
2854
+ "label": "Start",
2855
+ "x": 50,
2856
+ "y": 100
2857
+ },
2858
+ {
2859
+ "id": "b",
2860
+ "label": "Process",
2861
+ "x": 200,
2862
+ "y": 50
2863
+ },
2864
+ {
2865
+ "id": "c",
2866
+ "label": "End",
2867
+ "x": 350,
2868
+ "y": 100
2869
+ }
2870
+ ],
2871
+ "edges": [
2872
+ {
2873
+ "from": "a",
2874
+ "to": "b"
2875
+ },
2876
+ {
2877
+ "from": "b",
2878
+ "to": "c"
2879
+ }
2880
+ ],
2881
+ "width": 400,
2882
+ "height": 200
1667
2883
  }
1668
2884
  ]
1669
2885
  }
@@ -1687,134 +2903,267 @@
1687
2903
  "render-ui",
1688
2904
  "main",
1689
2905
  {
1690
- "type": "stack",
1691
- "direction": "vertical",
1692
- "gap": "lg",
1693
- "children": [
2906
+ "type": "dashboard-layout",
2907
+ "appName": "API Gateway",
2908
+ "navItems": [
1694
2909
  {
1695
- "type": "stack",
1696
- "direction": "horizontal",
1697
- "gap": "md",
1698
- "justify": "space-between",
1699
- "children": [
1700
- {
1701
- "type": "stack",
1702
- "direction": "horizontal",
1703
- "gap": "md",
1704
- "children": [
1705
- {
1706
- "type": "icon",
1707
- "name": "bar-chart-2",
1708
- "size": "lg"
1709
- },
1710
- {
1711
- "type": "typography",
1712
- "content": "Analytics",
1713
- "variant": "h2"
1714
- }
1715
- ]
1716
- },
1717
- {
1718
- "type": "button",
1719
- "label": "Refresh",
1720
- "event": "REFRESH",
1721
- "variant": "secondary",
1722
- "icon": "refresh-cw"
1723
- }
1724
- ]
2910
+ "label": "Routes",
2911
+ "href": "/routes",
2912
+ "icon": "git-branch"
1725
2913
  },
1726
2914
  {
1727
- "type": "divider"
2915
+ "label": "Backends",
2916
+ "href": "/backends",
2917
+ "icon": "server"
1728
2918
  },
1729
2919
  {
1730
- "type": "simple-grid",
1731
- "columns": 3,
2920
+ "label": "Analytics",
2921
+ "href": "/analytics",
2922
+ "icon": "bar-chart-2"
2923
+ }
2924
+ ],
2925
+ "children": [
2926
+ {
2927
+ "type": "scaled-diagram",
1732
2928
  "children": [
1733
2929
  {
1734
- "type": "card",
2930
+ "type": "stack",
2931
+ "direction": "vertical",
2932
+ "gap": "lg",
1735
2933
  "children": [
1736
2934
  {
1737
- "type": "stack",
1738
- "direction": "vertical",
1739
- "gap": "sm",
1740
- "children": [
2935
+ "type": "breadcrumb",
2936
+ "items": [
1741
2937
  {
1742
- "type": "typography",
1743
- "variant": "caption",
1744
- "content": "TotalRequests"
2938
+ "label": "Home",
2939
+ "href": "/"
1745
2940
  },
1746
2941
  {
1747
- "type": "typography",
1748
- "variant": "h3",
1749
- "content": "@entity.totalRequests"
2942
+ "label": "Analytics"
1750
2943
  }
1751
2944
  ]
1752
- }
1753
- ]
1754
- },
1755
- {
1756
- "type": "card",
1757
- "children": [
2945
+ },
1758
2946
  {
1759
2947
  "type": "stack",
1760
- "direction": "vertical",
1761
- "gap": "sm",
2948
+ "direction": "horizontal",
2949
+ "gap": "md",
2950
+ "justify": "space-between",
1762
2951
  "children": [
1763
2952
  {
1764
- "type": "typography",
1765
- "variant": "caption",
1766
- "content": "ErrorRate"
2953
+ "type": "stack",
2954
+ "direction": "horizontal",
2955
+ "gap": "md",
2956
+ "children": [
2957
+ {
2958
+ "type": "icon",
2959
+ "name": "bar-chart-2",
2960
+ "size": "lg"
2961
+ },
2962
+ {
2963
+ "type": "typography",
2964
+ "content": "Analytics",
2965
+ "variant": "h2"
2966
+ }
2967
+ ]
1767
2968
  },
1768
2969
  {
1769
- "type": "typography",
1770
- "variant": "h3",
1771
- "content": "@entity.errorRate"
2970
+ "type": "button",
2971
+ "label": "Refresh",
2972
+ "event": "REFRESH",
2973
+ "variant": "secondary",
2974
+ "icon": "refresh-cw"
1772
2975
  }
1773
2976
  ]
1774
- }
1775
- ]
1776
- },
1777
- {
1778
- "type": "card",
1779
- "children": [
2977
+ },
1780
2978
  {
1781
- "type": "stack",
1782
- "direction": "vertical",
1783
- "gap": "sm",
2979
+ "type": "divider"
2980
+ },
2981
+ {
2982
+ "type": "box",
2983
+ "padding": "md",
1784
2984
  "children": [
1785
2985
  {
1786
- "type": "typography",
1787
- "variant": "caption",
1788
- "content": "AvgLatency"
2986
+ "type": "simple-grid",
2987
+ "columns": 3,
2988
+ "children": [
2989
+ {
2990
+ "type": "stat-display",
2991
+ "label": "TotalRequests",
2992
+ "value": [
2993
+ "object/get",
2994
+ [
2995
+ "array/first",
2996
+ "@entity"
2997
+ ],
2998
+ "totalRequests"
2999
+ ]
3000
+ },
3001
+ {
3002
+ "type": "stat-display",
3003
+ "label": "ErrorRate",
3004
+ "value": [
3005
+ "object/get",
3006
+ [
3007
+ "array/first",
3008
+ "@entity"
3009
+ ],
3010
+ "errorRate"
3011
+ ]
3012
+ },
3013
+ {
3014
+ "type": "stat-display",
3015
+ "label": "AvgLatency",
3016
+ "value": [
3017
+ "object/get",
3018
+ [
3019
+ "array/first",
3020
+ "@entity"
3021
+ ],
3022
+ "avgLatency"
3023
+ ]
3024
+ },
3025
+ {
3026
+ "type": "card",
3027
+ "children": [
3028
+ {
3029
+ "type": "stack",
3030
+ "direction": "vertical",
3031
+ "gap": "sm",
3032
+ "children": [
3033
+ {
3034
+ "type": "typography",
3035
+ "variant": "caption",
3036
+ "content": "Uptime"
3037
+ },
3038
+ {
3039
+ "type": "typography",
3040
+ "variant": "h3",
3041
+ "content": [
3042
+ "object/get",
3043
+ [
3044
+ "array/first",
3045
+ "@entity"
3046
+ ],
3047
+ "uptime"
3048
+ ]
3049
+ }
3050
+ ]
3051
+ }
3052
+ ]
3053
+ }
3054
+ ]
3055
+ }
3056
+ ]
3057
+ },
3058
+ {
3059
+ "type": "divider"
3060
+ },
3061
+ {
3062
+ "type": "grid",
3063
+ "columns": 2,
3064
+ "gap": "md",
3065
+ "children": [
3066
+ {
3067
+ "type": "card",
3068
+ "children": [
3069
+ {
3070
+ "type": "typography",
3071
+ "variant": "caption",
3072
+ "content": "Chart View"
3073
+ }
3074
+ ]
1789
3075
  },
1790
3076
  {
1791
- "type": "typography",
1792
- "variant": "h3",
1793
- "content": "@entity.avgLatency"
3077
+ "type": "card",
3078
+ "children": [
3079
+ {
3080
+ "type": "typography",
3081
+ "variant": "caption",
3082
+ "content": "Graph View"
3083
+ }
3084
+ ]
1794
3085
  }
1795
3086
  ]
1796
- }
1797
- ]
1798
- },
1799
- {
1800
- "type": "card",
1801
- "children": [
3087
+ },
1802
3088
  {
1803
- "type": "stack",
1804
- "direction": "vertical",
1805
- "gap": "sm",
1806
- "children": [
3089
+ "type": "line-chart",
3090
+ "data": [
1807
3091
  {
1808
- "type": "typography",
1809
- "variant": "caption",
1810
- "content": "Uptime"
3092
+ "date": "Jan",
3093
+ "value": 12
1811
3094
  },
1812
3095
  {
1813
- "type": "typography",
1814
- "variant": "h3",
1815
- "content": "@entity.uptime"
3096
+ "date": "Feb",
3097
+ "value": 19
3098
+ },
3099
+ {
3100
+ "date": "Mar",
3101
+ "value": 15
3102
+ },
3103
+ {
3104
+ "date": "Apr",
3105
+ "value": 25
3106
+ },
3107
+ {
3108
+ "date": "May",
3109
+ "value": 22
3110
+ },
3111
+ {
3112
+ "date": "Jun",
3113
+ "value": 30
3114
+ }
3115
+ ],
3116
+ "xKey": "date",
3117
+ "yKey": "value",
3118
+ "title": "Trend"
3119
+ },
3120
+ {
3121
+ "type": "chart-legend",
3122
+ "items": [
3123
+ {
3124
+ "label": "Current",
3125
+ "color": "primary"
3126
+ },
3127
+ {
3128
+ "label": "Previous",
3129
+ "color": "muted"
1816
3130
  }
1817
3131
  ]
3132
+ },
3133
+ {
3134
+ "type": "graph-view",
3135
+ "nodes": [
3136
+ {
3137
+ "id": "a",
3138
+ "label": "Start",
3139
+ "x": 50,
3140
+ "y": 100
3141
+ },
3142
+ {
3143
+ "id": "b",
3144
+ "label": "Process",
3145
+ "x": 200,
3146
+ "y": 50
3147
+ },
3148
+ {
3149
+ "id": "c",
3150
+ "label": "End",
3151
+ "x": 350,
3152
+ "y": 100
3153
+ }
3154
+ ],
3155
+ "edges": [
3156
+ {
3157
+ "from": "a",
3158
+ "to": "b"
3159
+ },
3160
+ {
3161
+ "from": "b",
3162
+ "to": "c"
3163
+ }
3164
+ ],
3165
+ "width": 400,
3166
+ "height": 200
1818
3167
  }
1819
3168
  ]
1820
3169
  }
@@ -1838,134 +3187,267 @@
1838
3187
  "render-ui",
1839
3188
  "main",
1840
3189
  {
1841
- "type": "stack",
1842
- "direction": "vertical",
1843
- "gap": "lg",
1844
- "children": [
3190
+ "type": "dashboard-layout",
3191
+ "appName": "API Gateway",
3192
+ "navItems": [
1845
3193
  {
1846
- "type": "stack",
1847
- "direction": "horizontal",
1848
- "gap": "md",
1849
- "justify": "space-between",
1850
- "children": [
1851
- {
1852
- "type": "stack",
1853
- "direction": "horizontal",
1854
- "gap": "md",
1855
- "children": [
1856
- {
1857
- "type": "icon",
1858
- "name": "bar-chart-2",
1859
- "size": "lg"
1860
- },
1861
- {
1862
- "type": "typography",
1863
- "content": "Analytics",
1864
- "variant": "h2"
1865
- }
1866
- ]
1867
- },
1868
- {
1869
- "type": "button",
1870
- "label": "Refresh",
1871
- "event": "REFRESH",
1872
- "variant": "secondary",
1873
- "icon": "refresh-cw"
1874
- }
1875
- ]
3194
+ "label": "Routes",
3195
+ "href": "/routes",
3196
+ "icon": "git-branch"
1876
3197
  },
1877
3198
  {
1878
- "type": "divider"
3199
+ "label": "Backends",
3200
+ "href": "/backends",
3201
+ "icon": "server"
1879
3202
  },
1880
3203
  {
1881
- "type": "simple-grid",
1882
- "columns": 3,
3204
+ "label": "Analytics",
3205
+ "href": "/analytics",
3206
+ "icon": "bar-chart-2"
3207
+ }
3208
+ ],
3209
+ "children": [
3210
+ {
3211
+ "type": "scaled-diagram",
1883
3212
  "children": [
1884
3213
  {
1885
- "type": "card",
3214
+ "type": "stack",
3215
+ "direction": "vertical",
3216
+ "gap": "lg",
1886
3217
  "children": [
1887
3218
  {
1888
- "type": "stack",
1889
- "direction": "vertical",
1890
- "gap": "sm",
1891
- "children": [
3219
+ "type": "breadcrumb",
3220
+ "items": [
1892
3221
  {
1893
- "type": "typography",
1894
- "variant": "caption",
1895
- "content": "TotalRequests"
3222
+ "label": "Home",
3223
+ "href": "/"
1896
3224
  },
1897
3225
  {
1898
- "type": "typography",
1899
- "variant": "h3",
1900
- "content": "@entity.totalRequests"
3226
+ "label": "Analytics"
1901
3227
  }
1902
3228
  ]
1903
- }
1904
- ]
1905
- },
1906
- {
1907
- "type": "card",
1908
- "children": [
3229
+ },
1909
3230
  {
1910
3231
  "type": "stack",
1911
- "direction": "vertical",
1912
- "gap": "sm",
3232
+ "direction": "horizontal",
3233
+ "gap": "md",
3234
+ "justify": "space-between",
1913
3235
  "children": [
1914
3236
  {
1915
- "type": "typography",
1916
- "variant": "caption",
1917
- "content": "ErrorRate"
1918
- },
1919
- {
1920
- "type": "typography",
1921
- "variant": "h3",
1922
- "content": "@entity.errorRate"
1923
- }
3237
+ "type": "stack",
3238
+ "direction": "horizontal",
3239
+ "gap": "md",
3240
+ "children": [
3241
+ {
3242
+ "type": "icon",
3243
+ "name": "bar-chart-2",
3244
+ "size": "lg"
3245
+ },
3246
+ {
3247
+ "type": "typography",
3248
+ "content": "Analytics",
3249
+ "variant": "h2"
3250
+ }
3251
+ ]
3252
+ },
3253
+ {
3254
+ "type": "button",
3255
+ "label": "Refresh",
3256
+ "event": "REFRESH",
3257
+ "variant": "secondary",
3258
+ "icon": "refresh-cw"
3259
+ }
1924
3260
  ]
1925
- }
1926
- ]
1927
- },
1928
- {
1929
- "type": "card",
1930
- "children": [
3261
+ },
1931
3262
  {
1932
- "type": "stack",
1933
- "direction": "vertical",
1934
- "gap": "sm",
3263
+ "type": "divider"
3264
+ },
3265
+ {
3266
+ "type": "box",
3267
+ "padding": "md",
1935
3268
  "children": [
1936
3269
  {
1937
- "type": "typography",
1938
- "variant": "caption",
1939
- "content": "AvgLatency"
3270
+ "type": "simple-grid",
3271
+ "columns": 3,
3272
+ "children": [
3273
+ {
3274
+ "type": "stat-display",
3275
+ "label": "TotalRequests",
3276
+ "value": [
3277
+ "object/get",
3278
+ [
3279
+ "array/first",
3280
+ "@entity"
3281
+ ],
3282
+ "totalRequests"
3283
+ ]
3284
+ },
3285
+ {
3286
+ "type": "stat-display",
3287
+ "label": "ErrorRate",
3288
+ "value": [
3289
+ "object/get",
3290
+ [
3291
+ "array/first",
3292
+ "@entity"
3293
+ ],
3294
+ "errorRate"
3295
+ ]
3296
+ },
3297
+ {
3298
+ "type": "stat-display",
3299
+ "label": "AvgLatency",
3300
+ "value": [
3301
+ "object/get",
3302
+ [
3303
+ "array/first",
3304
+ "@entity"
3305
+ ],
3306
+ "avgLatency"
3307
+ ]
3308
+ },
3309
+ {
3310
+ "type": "card",
3311
+ "children": [
3312
+ {
3313
+ "type": "stack",
3314
+ "direction": "vertical",
3315
+ "gap": "sm",
3316
+ "children": [
3317
+ {
3318
+ "type": "typography",
3319
+ "variant": "caption",
3320
+ "content": "Uptime"
3321
+ },
3322
+ {
3323
+ "type": "typography",
3324
+ "variant": "h3",
3325
+ "content": [
3326
+ "object/get",
3327
+ [
3328
+ "array/first",
3329
+ "@entity"
3330
+ ],
3331
+ "uptime"
3332
+ ]
3333
+ }
3334
+ ]
3335
+ }
3336
+ ]
3337
+ }
3338
+ ]
3339
+ }
3340
+ ]
3341
+ },
3342
+ {
3343
+ "type": "divider"
3344
+ },
3345
+ {
3346
+ "type": "grid",
3347
+ "columns": 2,
3348
+ "gap": "md",
3349
+ "children": [
3350
+ {
3351
+ "type": "card",
3352
+ "children": [
3353
+ {
3354
+ "type": "typography",
3355
+ "variant": "caption",
3356
+ "content": "Chart View"
3357
+ }
3358
+ ]
1940
3359
  },
1941
3360
  {
1942
- "type": "typography",
1943
- "variant": "h3",
1944
- "content": "@entity.avgLatency"
3361
+ "type": "card",
3362
+ "children": [
3363
+ {
3364
+ "type": "typography",
3365
+ "variant": "caption",
3366
+ "content": "Graph View"
3367
+ }
3368
+ ]
1945
3369
  }
1946
3370
  ]
1947
- }
1948
- ]
1949
- },
1950
- {
1951
- "type": "card",
1952
- "children": [
3371
+ },
1953
3372
  {
1954
- "type": "stack",
1955
- "direction": "vertical",
1956
- "gap": "sm",
1957
- "children": [
3373
+ "type": "line-chart",
3374
+ "data": [
1958
3375
  {
1959
- "type": "typography",
1960
- "variant": "caption",
1961
- "content": "Uptime"
3376
+ "date": "Jan",
3377
+ "value": 12
1962
3378
  },
1963
3379
  {
1964
- "type": "typography",
1965
- "variant": "h3",
1966
- "content": "@entity.uptime"
3380
+ "date": "Feb",
3381
+ "value": 19
3382
+ },
3383
+ {
3384
+ "date": "Mar",
3385
+ "value": 15
3386
+ },
3387
+ {
3388
+ "date": "Apr",
3389
+ "value": 25
3390
+ },
3391
+ {
3392
+ "date": "May",
3393
+ "value": 22
3394
+ },
3395
+ {
3396
+ "date": "Jun",
3397
+ "value": 30
3398
+ }
3399
+ ],
3400
+ "xKey": "date",
3401
+ "yKey": "value",
3402
+ "title": "Trend"
3403
+ },
3404
+ {
3405
+ "type": "chart-legend",
3406
+ "items": [
3407
+ {
3408
+ "label": "Current",
3409
+ "color": "primary"
3410
+ },
3411
+ {
3412
+ "label": "Previous",
3413
+ "color": "muted"
1967
3414
  }
1968
3415
  ]
3416
+ },
3417
+ {
3418
+ "type": "graph-view",
3419
+ "nodes": [
3420
+ {
3421
+ "id": "a",
3422
+ "label": "Start",
3423
+ "x": 50,
3424
+ "y": 100
3425
+ },
3426
+ {
3427
+ "id": "b",
3428
+ "label": "Process",
3429
+ "x": 200,
3430
+ "y": 50
3431
+ },
3432
+ {
3433
+ "id": "c",
3434
+ "label": "End",
3435
+ "x": 350,
3436
+ "y": 100
3437
+ }
3438
+ ],
3439
+ "edges": [
3440
+ {
3441
+ "from": "a",
3442
+ "to": "b"
3443
+ },
3444
+ {
3445
+ "from": "b",
3446
+ "to": "c"
3447
+ }
3448
+ ],
3449
+ "width": 400,
3450
+ "height": 200
1969
3451
  }
1970
3452
  ]
1971
3453
  }
@@ -1989,134 +3471,267 @@
1989
3471
  "render-ui",
1990
3472
  "main",
1991
3473
  {
1992
- "type": "stack",
1993
- "direction": "vertical",
1994
- "gap": "lg",
1995
- "children": [
3474
+ "type": "dashboard-layout",
3475
+ "appName": "API Gateway",
3476
+ "navItems": [
1996
3477
  {
1997
- "type": "stack",
1998
- "direction": "horizontal",
1999
- "gap": "md",
2000
- "justify": "space-between",
2001
- "children": [
2002
- {
2003
- "type": "stack",
2004
- "direction": "horizontal",
2005
- "gap": "md",
2006
- "children": [
2007
- {
2008
- "type": "icon",
2009
- "name": "bar-chart-2",
2010
- "size": "lg"
2011
- },
2012
- {
2013
- "type": "typography",
2014
- "content": "Analytics",
2015
- "variant": "h2"
2016
- }
2017
- ]
2018
- },
2019
- {
2020
- "type": "button",
2021
- "label": "Refresh",
2022
- "event": "REFRESH",
2023
- "variant": "secondary",
2024
- "icon": "refresh-cw"
2025
- }
2026
- ]
3478
+ "label": "Routes",
3479
+ "href": "/routes",
3480
+ "icon": "git-branch"
2027
3481
  },
2028
3482
  {
2029
- "type": "divider"
3483
+ "label": "Backends",
3484
+ "href": "/backends",
3485
+ "icon": "server"
2030
3486
  },
2031
3487
  {
2032
- "type": "simple-grid",
2033
- "columns": 3,
3488
+ "label": "Analytics",
3489
+ "href": "/analytics",
3490
+ "icon": "bar-chart-2"
3491
+ }
3492
+ ],
3493
+ "children": [
3494
+ {
3495
+ "type": "scaled-diagram",
2034
3496
  "children": [
2035
3497
  {
2036
- "type": "card",
3498
+ "type": "stack",
3499
+ "direction": "vertical",
3500
+ "gap": "lg",
2037
3501
  "children": [
2038
3502
  {
2039
- "type": "stack",
2040
- "direction": "vertical",
2041
- "gap": "sm",
2042
- "children": [
3503
+ "type": "breadcrumb",
3504
+ "items": [
2043
3505
  {
2044
- "type": "typography",
2045
- "variant": "caption",
2046
- "content": "TotalRequests"
3506
+ "label": "Home",
3507
+ "href": "/"
2047
3508
  },
2048
3509
  {
2049
- "type": "typography",
2050
- "variant": "h3",
2051
- "content": "@entity.totalRequests"
3510
+ "label": "Analytics"
2052
3511
  }
2053
3512
  ]
2054
- }
2055
- ]
2056
- },
2057
- {
2058
- "type": "card",
2059
- "children": [
3513
+ },
2060
3514
  {
2061
3515
  "type": "stack",
2062
- "direction": "vertical",
2063
- "gap": "sm",
3516
+ "direction": "horizontal",
3517
+ "gap": "md",
3518
+ "justify": "space-between",
2064
3519
  "children": [
2065
3520
  {
2066
- "type": "typography",
2067
- "variant": "caption",
2068
- "content": "ErrorRate"
3521
+ "type": "stack",
3522
+ "direction": "horizontal",
3523
+ "gap": "md",
3524
+ "children": [
3525
+ {
3526
+ "type": "icon",
3527
+ "name": "bar-chart-2",
3528
+ "size": "lg"
3529
+ },
3530
+ {
3531
+ "type": "typography",
3532
+ "content": "Analytics",
3533
+ "variant": "h2"
3534
+ }
3535
+ ]
2069
3536
  },
2070
3537
  {
2071
- "type": "typography",
2072
- "variant": "h3",
2073
- "content": "@entity.errorRate"
3538
+ "type": "button",
3539
+ "label": "Refresh",
3540
+ "event": "REFRESH",
3541
+ "variant": "secondary",
3542
+ "icon": "refresh-cw"
2074
3543
  }
2075
3544
  ]
2076
- }
2077
- ]
2078
- },
2079
- {
2080
- "type": "card",
2081
- "children": [
3545
+ },
2082
3546
  {
2083
- "type": "stack",
2084
- "direction": "vertical",
2085
- "gap": "sm",
3547
+ "type": "divider"
3548
+ },
3549
+ {
3550
+ "type": "box",
3551
+ "padding": "md",
2086
3552
  "children": [
2087
3553
  {
2088
- "type": "typography",
2089
- "variant": "caption",
2090
- "content": "AvgLatency"
3554
+ "type": "simple-grid",
3555
+ "columns": 3,
3556
+ "children": [
3557
+ {
3558
+ "type": "stat-display",
3559
+ "label": "TotalRequests",
3560
+ "value": [
3561
+ "object/get",
3562
+ [
3563
+ "array/first",
3564
+ "@entity"
3565
+ ],
3566
+ "totalRequests"
3567
+ ]
3568
+ },
3569
+ {
3570
+ "type": "stat-display",
3571
+ "label": "ErrorRate",
3572
+ "value": [
3573
+ "object/get",
3574
+ [
3575
+ "array/first",
3576
+ "@entity"
3577
+ ],
3578
+ "errorRate"
3579
+ ]
3580
+ },
3581
+ {
3582
+ "type": "stat-display",
3583
+ "label": "AvgLatency",
3584
+ "value": [
3585
+ "object/get",
3586
+ [
3587
+ "array/first",
3588
+ "@entity"
3589
+ ],
3590
+ "avgLatency"
3591
+ ]
3592
+ },
3593
+ {
3594
+ "type": "card",
3595
+ "children": [
3596
+ {
3597
+ "type": "stack",
3598
+ "direction": "vertical",
3599
+ "gap": "sm",
3600
+ "children": [
3601
+ {
3602
+ "type": "typography",
3603
+ "variant": "caption",
3604
+ "content": "Uptime"
3605
+ },
3606
+ {
3607
+ "type": "typography",
3608
+ "variant": "h3",
3609
+ "content": [
3610
+ "object/get",
3611
+ [
3612
+ "array/first",
3613
+ "@entity"
3614
+ ],
3615
+ "uptime"
3616
+ ]
3617
+ }
3618
+ ]
3619
+ }
3620
+ ]
3621
+ }
3622
+ ]
3623
+ }
3624
+ ]
3625
+ },
3626
+ {
3627
+ "type": "divider"
3628
+ },
3629
+ {
3630
+ "type": "grid",
3631
+ "columns": 2,
3632
+ "gap": "md",
3633
+ "children": [
3634
+ {
3635
+ "type": "card",
3636
+ "children": [
3637
+ {
3638
+ "type": "typography",
3639
+ "variant": "caption",
3640
+ "content": "Chart View"
3641
+ }
3642
+ ]
2091
3643
  },
2092
3644
  {
2093
- "type": "typography",
2094
- "variant": "h3",
2095
- "content": "@entity.avgLatency"
3645
+ "type": "card",
3646
+ "children": [
3647
+ {
3648
+ "type": "typography",
3649
+ "variant": "caption",
3650
+ "content": "Graph View"
3651
+ }
3652
+ ]
2096
3653
  }
2097
3654
  ]
2098
- }
2099
- ]
2100
- },
2101
- {
2102
- "type": "card",
2103
- "children": [
3655
+ },
2104
3656
  {
2105
- "type": "stack",
2106
- "direction": "vertical",
2107
- "gap": "sm",
2108
- "children": [
3657
+ "type": "line-chart",
3658
+ "data": [
2109
3659
  {
2110
- "type": "typography",
2111
- "variant": "caption",
2112
- "content": "Uptime"
3660
+ "date": "Jan",
3661
+ "value": 12
2113
3662
  },
2114
3663
  {
2115
- "type": "typography",
2116
- "variant": "h3",
2117
- "content": "@entity.uptime"
3664
+ "date": "Feb",
3665
+ "value": 19
3666
+ },
3667
+ {
3668
+ "date": "Mar",
3669
+ "value": 15
3670
+ },
3671
+ {
3672
+ "date": "Apr",
3673
+ "value": 25
3674
+ },
3675
+ {
3676
+ "date": "May",
3677
+ "value": 22
3678
+ },
3679
+ {
3680
+ "date": "Jun",
3681
+ "value": 30
3682
+ }
3683
+ ],
3684
+ "xKey": "date",
3685
+ "yKey": "value",
3686
+ "title": "Trend"
3687
+ },
3688
+ {
3689
+ "type": "chart-legend",
3690
+ "items": [
3691
+ {
3692
+ "label": "Current",
3693
+ "color": "primary"
3694
+ },
3695
+ {
3696
+ "label": "Previous",
3697
+ "color": "muted"
2118
3698
  }
2119
3699
  ]
3700
+ },
3701
+ {
3702
+ "type": "graph-view",
3703
+ "nodes": [
3704
+ {
3705
+ "id": "a",
3706
+ "label": "Start",
3707
+ "x": 50,
3708
+ "y": 100
3709
+ },
3710
+ {
3711
+ "id": "b",
3712
+ "label": "Process",
3713
+ "x": 200,
3714
+ "y": 50
3715
+ },
3716
+ {
3717
+ "id": "c",
3718
+ "label": "End",
3719
+ "x": 350,
3720
+ "y": 100
3721
+ }
3722
+ ],
3723
+ "edges": [
3724
+ {
3725
+ "from": "a",
3726
+ "to": "b"
3727
+ },
3728
+ {
3729
+ "from": "b",
3730
+ "to": "c"
3731
+ }
3732
+ ],
3733
+ "width": 400,
3734
+ "height": 200
2120
3735
  }
2121
3736
  ]
2122
3737
  }
@@ -2140,134 +3755,267 @@
2140
3755
  "render-ui",
2141
3756
  "main",
2142
3757
  {
2143
- "type": "stack",
2144
- "direction": "vertical",
2145
- "gap": "lg",
2146
- "children": [
3758
+ "type": "dashboard-layout",
3759
+ "appName": "API Gateway",
3760
+ "navItems": [
2147
3761
  {
2148
- "type": "stack",
2149
- "direction": "horizontal",
2150
- "gap": "md",
2151
- "justify": "space-between",
2152
- "children": [
2153
- {
2154
- "type": "stack",
2155
- "direction": "horizontal",
2156
- "gap": "md",
2157
- "children": [
2158
- {
2159
- "type": "icon",
2160
- "name": "bar-chart-2",
2161
- "size": "lg"
2162
- },
2163
- {
2164
- "type": "typography",
2165
- "content": "Analytics",
2166
- "variant": "h2"
2167
- }
2168
- ]
2169
- },
2170
- {
2171
- "type": "button",
2172
- "label": "Refresh",
2173
- "event": "REFRESH",
2174
- "variant": "secondary",
2175
- "icon": "refresh-cw"
2176
- }
2177
- ]
3762
+ "label": "Routes",
3763
+ "href": "/routes",
3764
+ "icon": "git-branch"
2178
3765
  },
2179
3766
  {
2180
- "type": "divider"
3767
+ "label": "Backends",
3768
+ "href": "/backends",
3769
+ "icon": "server"
2181
3770
  },
2182
3771
  {
2183
- "type": "simple-grid",
2184
- "columns": 3,
3772
+ "label": "Analytics",
3773
+ "href": "/analytics",
3774
+ "icon": "bar-chart-2"
3775
+ }
3776
+ ],
3777
+ "children": [
3778
+ {
3779
+ "type": "scaled-diagram",
2185
3780
  "children": [
2186
3781
  {
2187
- "type": "card",
3782
+ "type": "stack",
3783
+ "direction": "vertical",
3784
+ "gap": "lg",
2188
3785
  "children": [
2189
3786
  {
2190
- "type": "stack",
2191
- "direction": "vertical",
2192
- "gap": "sm",
2193
- "children": [
3787
+ "type": "breadcrumb",
3788
+ "items": [
2194
3789
  {
2195
- "type": "typography",
2196
- "variant": "caption",
2197
- "content": "TotalRequests"
3790
+ "label": "Home",
3791
+ "href": "/"
2198
3792
  },
2199
3793
  {
2200
- "type": "typography",
2201
- "variant": "h3",
2202
- "content": "@entity.totalRequests"
3794
+ "label": "Analytics"
2203
3795
  }
2204
3796
  ]
2205
- }
2206
- ]
2207
- },
2208
- {
2209
- "type": "card",
2210
- "children": [
3797
+ },
2211
3798
  {
2212
3799
  "type": "stack",
2213
- "direction": "vertical",
2214
- "gap": "sm",
3800
+ "direction": "horizontal",
3801
+ "gap": "md",
3802
+ "justify": "space-between",
2215
3803
  "children": [
2216
3804
  {
2217
- "type": "typography",
2218
- "variant": "caption",
2219
- "content": "ErrorRate"
3805
+ "type": "stack",
3806
+ "direction": "horizontal",
3807
+ "gap": "md",
3808
+ "children": [
3809
+ {
3810
+ "type": "icon",
3811
+ "name": "bar-chart-2",
3812
+ "size": "lg"
3813
+ },
3814
+ {
3815
+ "type": "typography",
3816
+ "content": "Analytics",
3817
+ "variant": "h2"
3818
+ }
3819
+ ]
2220
3820
  },
2221
3821
  {
2222
- "type": "typography",
2223
- "variant": "h3",
2224
- "content": "@entity.errorRate"
3822
+ "type": "button",
3823
+ "label": "Refresh",
3824
+ "event": "REFRESH",
3825
+ "variant": "secondary",
3826
+ "icon": "refresh-cw"
2225
3827
  }
2226
3828
  ]
2227
- }
2228
- ]
2229
- },
2230
- {
2231
- "type": "card",
2232
- "children": [
3829
+ },
2233
3830
  {
2234
- "type": "stack",
2235
- "direction": "vertical",
2236
- "gap": "sm",
3831
+ "type": "divider"
3832
+ },
3833
+ {
3834
+ "type": "box",
3835
+ "padding": "md",
2237
3836
  "children": [
2238
3837
  {
2239
- "type": "typography",
2240
- "variant": "caption",
2241
- "content": "AvgLatency"
3838
+ "type": "simple-grid",
3839
+ "columns": 3,
3840
+ "children": [
3841
+ {
3842
+ "type": "stat-display",
3843
+ "label": "TotalRequests",
3844
+ "value": [
3845
+ "object/get",
3846
+ [
3847
+ "array/first",
3848
+ "@entity"
3849
+ ],
3850
+ "totalRequests"
3851
+ ]
3852
+ },
3853
+ {
3854
+ "type": "stat-display",
3855
+ "label": "ErrorRate",
3856
+ "value": [
3857
+ "object/get",
3858
+ [
3859
+ "array/first",
3860
+ "@entity"
3861
+ ],
3862
+ "errorRate"
3863
+ ]
3864
+ },
3865
+ {
3866
+ "type": "stat-display",
3867
+ "label": "AvgLatency",
3868
+ "value": [
3869
+ "object/get",
3870
+ [
3871
+ "array/first",
3872
+ "@entity"
3873
+ ],
3874
+ "avgLatency"
3875
+ ]
3876
+ },
3877
+ {
3878
+ "type": "card",
3879
+ "children": [
3880
+ {
3881
+ "type": "stack",
3882
+ "direction": "vertical",
3883
+ "gap": "sm",
3884
+ "children": [
3885
+ {
3886
+ "type": "typography",
3887
+ "variant": "caption",
3888
+ "content": "Uptime"
3889
+ },
3890
+ {
3891
+ "type": "typography",
3892
+ "variant": "h3",
3893
+ "content": [
3894
+ "object/get",
3895
+ [
3896
+ "array/first",
3897
+ "@entity"
3898
+ ],
3899
+ "uptime"
3900
+ ]
3901
+ }
3902
+ ]
3903
+ }
3904
+ ]
3905
+ }
3906
+ ]
3907
+ }
3908
+ ]
3909
+ },
3910
+ {
3911
+ "type": "divider"
3912
+ },
3913
+ {
3914
+ "type": "grid",
3915
+ "columns": 2,
3916
+ "gap": "md",
3917
+ "children": [
3918
+ {
3919
+ "type": "card",
3920
+ "children": [
3921
+ {
3922
+ "type": "typography",
3923
+ "variant": "caption",
3924
+ "content": "Chart View"
3925
+ }
3926
+ ]
2242
3927
  },
2243
3928
  {
2244
- "type": "typography",
2245
- "variant": "h3",
2246
- "content": "@entity.avgLatency"
3929
+ "type": "card",
3930
+ "children": [
3931
+ {
3932
+ "type": "typography",
3933
+ "variant": "caption",
3934
+ "content": "Graph View"
3935
+ }
3936
+ ]
2247
3937
  }
2248
3938
  ]
2249
- }
2250
- ]
2251
- },
2252
- {
2253
- "type": "card",
2254
- "children": [
3939
+ },
2255
3940
  {
2256
- "type": "stack",
2257
- "direction": "vertical",
2258
- "gap": "sm",
2259
- "children": [
3941
+ "type": "line-chart",
3942
+ "data": [
2260
3943
  {
2261
- "type": "typography",
2262
- "variant": "caption",
2263
- "content": "Uptime"
3944
+ "date": "Jan",
3945
+ "value": 12
2264
3946
  },
2265
3947
  {
2266
- "type": "typography",
2267
- "variant": "h3",
2268
- "content": "@entity.uptime"
3948
+ "date": "Feb",
3949
+ "value": 19
3950
+ },
3951
+ {
3952
+ "date": "Mar",
3953
+ "value": 15
3954
+ },
3955
+ {
3956
+ "date": "Apr",
3957
+ "value": 25
3958
+ },
3959
+ {
3960
+ "date": "May",
3961
+ "value": 22
3962
+ },
3963
+ {
3964
+ "date": "Jun",
3965
+ "value": 30
3966
+ }
3967
+ ],
3968
+ "xKey": "date",
3969
+ "yKey": "value",
3970
+ "title": "Trend"
3971
+ },
3972
+ {
3973
+ "type": "chart-legend",
3974
+ "items": [
3975
+ {
3976
+ "label": "Current",
3977
+ "color": "primary"
3978
+ },
3979
+ {
3980
+ "label": "Previous",
3981
+ "color": "muted"
2269
3982
  }
2270
3983
  ]
3984
+ },
3985
+ {
3986
+ "type": "graph-view",
3987
+ "nodes": [
3988
+ {
3989
+ "id": "a",
3990
+ "label": "Start",
3991
+ "x": 50,
3992
+ "y": 100
3993
+ },
3994
+ {
3995
+ "id": "b",
3996
+ "label": "Process",
3997
+ "x": 200,
3998
+ "y": 50
3999
+ },
4000
+ {
4001
+ "id": "c",
4002
+ "label": "End",
4003
+ "x": 350,
4004
+ "y": 100
4005
+ }
4006
+ ],
4007
+ "edges": [
4008
+ {
4009
+ "from": "a",
4010
+ "to": "b"
4011
+ },
4012
+ {
4013
+ "from": "b",
4014
+ "to": "c"
4015
+ }
4016
+ ],
4017
+ "width": 400,
4018
+ "height": 200
2271
4019
  }
2272
4020
  ]
2273
4021
  }