@almadar/std 3.1.0 → 3.1.2

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