@cloudcrane/app-spec 0.0.0-stage → 0.1.1

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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -2
  3. package/dist/src/a2ui.d.ts +12 -0
  4. package/dist/src/a2ui.js +89 -0
  5. package/dist/src/blueprint.d.ts +27 -0
  6. package/dist/src/blueprint.js +62 -0
  7. package/dist/src/canonical.d.ts +2 -0
  8. package/dist/src/canonical.js +8 -0
  9. package/dist/src/catalog.d.ts +7 -0
  10. package/dist/src/catalog.js +83 -0
  11. package/dist/src/index.d.ts +9 -0
  12. package/dist/src/index.js +11 -0
  13. package/dist/src/jsonschema.d.ts +2 -0
  14. package/dist/src/jsonschema.js +11 -0
  15. package/dist/src/leak.d.ts +3 -0
  16. package/dist/src/leak.js +141 -0
  17. package/dist/src/logic.d.ts +36 -0
  18. package/dist/src/logic.js +197 -0
  19. package/dist/src/schema.d.ts +418 -0
  20. package/dist/src/schema.js +137 -0
  21. package/dist/src/validate.d.ts +6 -0
  22. package/dist/src/validate.js +54 -0
  23. package/dist/vendor/a2ui/v0_9_1/catalogs/basic/catalog.json +1383 -0
  24. package/dist/vendor/a2ui/v0_9_1/common_types.json +305 -0
  25. package/dist/vendor/a2ui/v0_9_1/server_to_client.json +131 -0
  26. package/package.json +78 -3
  27. package/schema/app-spec.v1.json +460 -0
  28. package/vendor/a2ui/v0_9_1/LICENSE +227 -0
  29. package/vendor/a2ui/v0_9_1/VENDOR.json +6 -0
  30. package/vendor/a2ui/v0_9_1/catalogs/basic/catalog.json +1383 -0
  31. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_complex-layout.json +65 -0
  32. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_formatted-text.json +56 -0
  33. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_incremental.json +134 -0
  34. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_interactive-button.json +51 -0
  35. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_row-layout.json +40 -0
  36. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_simple-login-form.json +77 -0
  37. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/00_simple-text.json +27 -0
  38. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/01_flight-status.json +201 -0
  39. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/02_email-compose.json +185 -0
  40. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/03_calendar-day.json +166 -0
  41. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/04_weather-current.json +168 -0
  42. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/05_product-card.json +151 -0
  43. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/06_music-player.json +165 -0
  44. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/07_task-card.json +107 -0
  45. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/08_user-profile.json +190 -0
  46. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/09_login-form.json +214 -0
  47. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/10_notification-permission.json +105 -0
  48. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/11_purchase-complete.json +169 -0
  49. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/12_chat-message.json +144 -0
  50. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/13_coffee-order.json +253 -0
  51. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/14_sports-player.json +177 -0
  52. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/15_account-balance.json +126 -0
  53. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/16_workout-summary.json +160 -0
  54. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/17_event-detail.json +144 -0
  55. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/18_track-list.json +152 -0
  56. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/19_software-purchase.json +194 -0
  57. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/20_restaurant-card.json +140 -0
  58. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/21_shipping-status.json +137 -0
  59. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/22_credit-card.json +117 -0
  60. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/23_step-counter.json +149 -0
  61. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/24_recipe-card.json +204 -0
  62. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/25_contact-card.json +175 -0
  63. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/26_podcast-episode.json +123 -0
  64. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/27_stats-card.json +106 -0
  65. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/28_countdown-timer.json +135 -0
  66. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/29_movie-card.json +156 -0
  67. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/30_live-invitation-builder.json +205 -0
  68. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/31_incremental-dashboard.json +128 -0
  69. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/32_advanced-form-validator.json +166 -0
  70. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/33_financial-data-grid.json +171 -0
  71. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/34_child-list-template.json +80 -0
  72. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/35_markdown-text.json +44 -0
  73. package/vendor/a2ui/v0_9_1/catalogs/basic/examples/36_modal.json +65 -0
  74. package/vendor/a2ui/v0_9_1/client_capabilities.json +89 -0
  75. package/vendor/a2ui/v0_9_1/client_data_model.json +22 -0
  76. package/vendor/a2ui/v0_9_1/client_to_server.json +98 -0
  77. package/vendor/a2ui/v0_9_1/client_to_server_list.json +10 -0
  78. package/vendor/a2ui/v0_9_1/client_to_server_list_wrapper.json +14 -0
  79. package/vendor/a2ui/v0_9_1/common_types.json +305 -0
  80. package/vendor/a2ui/v0_9_1/sample.json +22 -0
  81. package/vendor/a2ui/v0_9_1/server_capabilities.json +26 -0
  82. package/vendor/a2ui/v0_9_1/server_to_client.json +132 -0
  83. package/vendor/a2ui/v0_9_1/server_to_client_list.json +10 -0
  84. package/vendor/a2ui/v0_9_1/server_to_client_list_wrapper.json +14 -0
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "Complex Layout",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-complex-layout",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
10
+ }
11
+ },
12
+ {
13
+ "version": "v0.9",
14
+ "updateComponents": {
15
+ "surfaceId": "gallery-complex-layout",
16
+ "components": [
17
+ {
18
+ "id": "root",
19
+ "component": "Column",
20
+ "children": ["header", "form_row", "footer"],
21
+ "justify": "spaceBetween",
22
+ "align": "stretch"
23
+ },
24
+ {
25
+ "id": "header",
26
+ "component": "Text",
27
+ "text": "User Profile Form",
28
+ "variant": "h1"
29
+ },
30
+ {
31
+ "id": "form_row",
32
+ "component": "Row",
33
+ "children": ["first_name", "last_name"],
34
+ "justify": "start",
35
+ "align": "start"
36
+ },
37
+ {
38
+ "id": "first_name",
39
+ "component": "TextField",
40
+ "label": "First Name",
41
+ "value": {
42
+ "path": "/firstName"
43
+ },
44
+ "weight": 1
45
+ },
46
+ {
47
+ "id": "last_name",
48
+ "component": "TextField",
49
+ "label": "Last Name",
50
+ "value": {
51
+ "path": "/lastName"
52
+ },
53
+ "weight": 1
54
+ },
55
+ {
56
+ "id": "footer",
57
+ "component": "Text",
58
+ "text": "Please fill out all fields.",
59
+ "variant": "caption"
60
+ }
61
+ ]
62
+ }
63
+ }
64
+ ]
65
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "Formatted Text",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-formatted-text",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json",
10
+ "sendDataModel": true
11
+ }
12
+ },
13
+ {
14
+ "version": "v0.9",
15
+ "updateComponents": {
16
+ "surfaceId": "gallery-formatted-text",
17
+ "components": [
18
+ {
19
+ "id": "root",
20
+ "component": "Column",
21
+ "children": ["input_field", "result_label", "result_text"],
22
+ "justify": "start",
23
+ "align": "stretch"
24
+ },
25
+ {
26
+ "id": "input_field",
27
+ "component": "TextField",
28
+ "label": "Type something:",
29
+ "value": {
30
+ "path": "/inputValue"
31
+ },
32
+ "variant": "shortText"
33
+ },
34
+ {
35
+ "id": "result_label",
36
+ "component": "Text",
37
+ "text": "Formatted output:",
38
+ "variant": "caption"
39
+ },
40
+ {
41
+ "id": "result_text",
42
+ "component": "Text",
43
+ "text": {
44
+ "call": "formatString",
45
+ "args": {
46
+ "value": "You typed: ${/inputValue}"
47
+ },
48
+ "returnType": "string"
49
+ },
50
+ "variant": "body"
51
+ }
52
+ ]
53
+ }
54
+ }
55
+ ]
56
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "name": "Incremental",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-incremental",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
10
+ }
11
+ },
12
+ {
13
+ "version": "v0.9",
14
+ "updateDataModel": {
15
+ "surfaceId": "gallery-incremental",
16
+ "path": "/",
17
+ "value": {
18
+ "restaurants": [
19
+ {
20
+ "title": "The Golden Fork",
21
+ "subtitle": "Fine Dining & Spirits",
22
+ "address": "123 Gastronomy Lane"
23
+ },
24
+ {
25
+ "title": "Ocean's Bounty",
26
+ "subtitle": "Fresh Daily Seafood",
27
+ "address": "456 Shoreline Dr"
28
+ },
29
+ {
30
+ "title": "Pizzeria Roma",
31
+ "subtitle": "Authentic Wood-Fired Pizza",
32
+ "address": "789 Napoli Way"
33
+ }
34
+ ]
35
+ }
36
+ }
37
+ },
38
+ {
39
+ "version": "v0.9",
40
+ "updateComponents": {
41
+ "surfaceId": "gallery-incremental",
42
+ "components": [
43
+ {
44
+ "id": "root",
45
+ "component": "Column",
46
+ "children": {
47
+ "path": "/restaurants",
48
+ "componentId": "restaurant_card"
49
+ }
50
+ }
51
+ ]
52
+ }
53
+ },
54
+ {
55
+ "version": "v0.9",
56
+ "updateComponents": {
57
+ "surfaceId": "gallery-incremental",
58
+ "components": [
59
+ {
60
+ "id": "restaurant_card",
61
+ "component": "Column",
62
+ "children": ["rc_title", "rc_subtitle", "rc_address"]
63
+ },
64
+ {
65
+ "id": "rc_title",
66
+ "component": "Text",
67
+ "text": {
68
+ "path": "title"
69
+ }
70
+ },
71
+ {
72
+ "id": "rc_subtitle",
73
+ "component": "Text",
74
+ "text": {
75
+ "path": "subtitle"
76
+ }
77
+ },
78
+ {
79
+ "id": "rc_address",
80
+ "component": "Text",
81
+ "text": {
82
+ "path": "address"
83
+ }
84
+ }
85
+ ]
86
+ }
87
+ },
88
+ {
89
+ "version": "v0.9",
90
+ "updateDataModel": {
91
+ "surfaceId": "gallery-incremental",
92
+ "path": "/restaurants/3",
93
+ "value": {
94
+ "title": "Spice Route",
95
+ "subtitle": "Exotic Flavors from the East",
96
+ "address": "101 Silk Road St"
97
+ }
98
+ }
99
+ },
100
+ {
101
+ "version": "v0.9",
102
+ "updateComponents": {
103
+ "surfaceId": "gallery-incremental",
104
+ "components": [
105
+ {
106
+ "id": "restaurant_card",
107
+ "component": "Column",
108
+ "children": ["rc_title", "rc_subtitle", "rc_address", "rc_button"]
109
+ },
110
+ {
111
+ "id": "rc_button",
112
+ "component": "Button",
113
+ "child": "rc_button_label",
114
+ "action": {
115
+ "event": {
116
+ "name": "book_now",
117
+ "context": {
118
+ "restaurantName": {
119
+ "path": "title"
120
+ }
121
+ }
122
+ }
123
+ }
124
+ },
125
+ {
126
+ "id": "rc_button_label",
127
+ "component": "Text",
128
+ "text": "Book now"
129
+ }
130
+ ]
131
+ }
132
+ }
133
+ ]
134
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "Interactive Button",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-interactive-button",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
10
+ }
11
+ },
12
+ {
13
+ "version": "v0.9",
14
+ "updateComponents": {
15
+ "surfaceId": "gallery-interactive-button",
16
+ "components": [
17
+ {
18
+ "id": "root",
19
+ "component": "Column",
20
+ "children": ["title", "action_button"],
21
+ "justify": "center",
22
+ "align": "center"
23
+ },
24
+ {
25
+ "id": "title",
26
+ "component": "Text",
27
+ "text": "Click the button below",
28
+ "variant": "body"
29
+ },
30
+ {
31
+ "id": "action_button",
32
+ "component": "Button",
33
+ "child": "button_label",
34
+ "variant": "primary",
35
+ "action": {
36
+ "event": {
37
+ "name": "button_clicked",
38
+ "context": {}
39
+ }
40
+ }
41
+ },
42
+ {
43
+ "id": "button_label",
44
+ "component": "Text",
45
+ "text": "Click Me"
46
+ }
47
+ ]
48
+ }
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "Row Layout",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-row-layout",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
10
+ }
11
+ },
12
+ {
13
+ "version": "v0.9",
14
+ "updateComponents": {
15
+ "surfaceId": "gallery-row-layout",
16
+ "components": [
17
+ {
18
+ "id": "root",
19
+ "component": "Row",
20
+ "children": ["left_text", "right_text"],
21
+ "justify": "spaceBetween",
22
+ "align": "center"
23
+ },
24
+ {
25
+ "id": "left_text",
26
+ "component": "Text",
27
+ "text": "Left Content",
28
+ "variant": "body"
29
+ },
30
+ {
31
+ "id": "right_text",
32
+ "component": "Text",
33
+ "text": "Right Content",
34
+ "variant": "caption"
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "Simple Login Form",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-simple-login-form",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json",
10
+ "sendDataModel": true
11
+ }
12
+ },
13
+ {
14
+ "version": "v0.9",
15
+ "updateComponents": {
16
+ "surfaceId": "gallery-simple-login-form",
17
+ "components": [
18
+ {
19
+ "id": "root",
20
+ "component": "Column",
21
+ "children": ["form_title", "username_field", "password_field", "submit_button"],
22
+ "justify": "start",
23
+ "align": "stretch"
24
+ },
25
+ {
26
+ "id": "form_title",
27
+ "component": "Text",
28
+ "text": "Login",
29
+ "variant": "h2"
30
+ },
31
+ {
32
+ "id": "username_field",
33
+ "component": "TextField",
34
+ "label": "Username",
35
+ "value": {
36
+ "path": "/username"
37
+ },
38
+ "variant": "shortText"
39
+ },
40
+ {
41
+ "id": "password_field",
42
+ "component": "TextField",
43
+ "label": "Password",
44
+ "value": {
45
+ "path": "/password"
46
+ },
47
+ "variant": "obscured"
48
+ },
49
+ {
50
+ "id": "submit_button",
51
+ "component": "Button",
52
+ "child": "submit_label",
53
+ "variant": "primary",
54
+ "action": {
55
+ "event": {
56
+ "name": "login_submitted",
57
+ "context": {
58
+ "user": {
59
+ "path": "/username"
60
+ },
61
+ "pass": {
62
+ "path": "/password"
63
+ }
64
+ }
65
+ }
66
+ }
67
+ },
68
+ {
69
+ "id": "submit_label",
70
+ "component": "Text",
71
+ "text": "Sign In"
72
+ }
73
+ ]
74
+ }
75
+ }
76
+ ]
77
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "Simple Text",
3
+ "description": "Simple example demonstrating basic catalog components.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-simple-text",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
10
+ }
11
+ },
12
+ {
13
+ "version": "v0.9",
14
+ "updateComponents": {
15
+ "surfaceId": "gallery-simple-text",
16
+ "components": [
17
+ {
18
+ "id": "root",
19
+ "component": "Text",
20
+ "text": "Hello, Minimal Catalog!",
21
+ "variant": "h1"
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ ]
27
+ }
@@ -0,0 +1,201 @@
1
+ {
2
+ "name": "Flight Status",
3
+ "description": "Example of flight status demonstrating date formatting.",
4
+ "messages": [
5
+ {
6
+ "version": "v0.9",
7
+ "createSurface": {
8
+ "surfaceId": "gallery-flight-status",
9
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json",
10
+ "sendDataModel": true
11
+ }
12
+ },
13
+ {
14
+ "version": "v0.9",
15
+ "updateComponents": {
16
+ "surfaceId": "gallery-flight-status",
17
+ "components": [
18
+ {
19
+ "id": "root",
20
+ "component": "Card",
21
+ "child": "main-column"
22
+ },
23
+ {
24
+ "id": "main-column",
25
+ "component": "Column",
26
+ "children": ["header-row", "route-row", "divider", "times-row"],
27
+ "align": "stretch"
28
+ },
29
+ {
30
+ "id": "header-row",
31
+ "component": "Row",
32
+ "children": ["header-left", "date"],
33
+ "justify": "spaceBetween",
34
+ "align": "center"
35
+ },
36
+ {
37
+ "id": "header-left",
38
+ "component": "Row",
39
+ "children": ["flight-indicator", "flight-number"],
40
+ "align": "center"
41
+ },
42
+ {
43
+ "id": "flight-indicator",
44
+ "component": "Icon",
45
+ "name": "send"
46
+ },
47
+ {
48
+ "id": "flight-number",
49
+ "component": "Text",
50
+ "text": {
51
+ "path": "/flightNumber"
52
+ },
53
+ "variant": "h3"
54
+ },
55
+ {
56
+ "id": "date",
57
+ "component": "Text",
58
+ "text": {
59
+ "call": "formatDate",
60
+ "args": {
61
+ "value": {
62
+ "path": "/date"
63
+ },
64
+ "format": "E, MMM d"
65
+ },
66
+ "returnType": "string"
67
+ },
68
+ "variant": "caption"
69
+ },
70
+ {
71
+ "id": "route-row",
72
+ "component": "Row",
73
+ "children": ["origin", "arrow", "destination"],
74
+ "align": "center"
75
+ },
76
+ {
77
+ "id": "origin",
78
+ "component": "Text",
79
+ "text": {
80
+ "path": "/origin"
81
+ },
82
+ "variant": "h2"
83
+ },
84
+ {
85
+ "id": "arrow",
86
+ "component": "Text",
87
+ "text": "\u2192",
88
+ "variant": "h2"
89
+ },
90
+ {
91
+ "id": "destination",
92
+ "component": "Text",
93
+ "text": {
94
+ "path": "/destination"
95
+ },
96
+ "variant": "h2"
97
+ },
98
+ {
99
+ "id": "divider",
100
+ "component": "Divider"
101
+ },
102
+ {
103
+ "id": "times-row",
104
+ "component": "Row",
105
+ "children": ["departure-col", "status-col", "arrival-col"],
106
+ "justify": "spaceBetween"
107
+ },
108
+ {
109
+ "id": "departure-col",
110
+ "component": "Column",
111
+ "children": ["departure-label", "departure-time"],
112
+ "align": "start"
113
+ },
114
+ {
115
+ "id": "departure-label",
116
+ "component": "Text",
117
+ "text": "Departs",
118
+ "variant": "caption"
119
+ },
120
+ {
121
+ "id": "departure-time",
122
+ "component": "Text",
123
+ "text": {
124
+ "call": "formatDate",
125
+ "args": {
126
+ "value": {
127
+ "path": "/departureTime"
128
+ },
129
+ "format": "h:mm a"
130
+ },
131
+ "returnType": "string"
132
+ },
133
+ "variant": "h3"
134
+ },
135
+ {
136
+ "id": "status-col",
137
+ "component": "Column",
138
+ "children": ["status-label", "status-value"],
139
+ "align": "center"
140
+ },
141
+ {
142
+ "id": "status-label",
143
+ "component": "Text",
144
+ "text": "Status",
145
+ "variant": "caption"
146
+ },
147
+ {
148
+ "id": "status-value",
149
+ "component": "Text",
150
+ "text": {
151
+ "path": "/status"
152
+ },
153
+ "variant": "body"
154
+ },
155
+ {
156
+ "id": "arrival-col",
157
+ "component": "Column",
158
+ "children": ["arrival-label", "arrival-time"],
159
+ "align": "end"
160
+ },
161
+ {
162
+ "id": "arrival-label",
163
+ "component": "Text",
164
+ "text": "Arrives",
165
+ "variant": "caption"
166
+ },
167
+ {
168
+ "id": "arrival-time",
169
+ "component": "Text",
170
+ "text": {
171
+ "call": "formatDate",
172
+ "args": {
173
+ "value": {
174
+ "path": "/arrivalTime"
175
+ },
176
+ "format": "h:mm a"
177
+ },
178
+ "returnType": "string"
179
+ },
180
+ "variant": "h3"
181
+ }
182
+ ]
183
+ }
184
+ },
185
+ {
186
+ "version": "v0.9",
187
+ "updateDataModel": {
188
+ "surfaceId": "gallery-flight-status",
189
+ "value": {
190
+ "flightNumber": "OS 87",
191
+ "date": "2025-12-15",
192
+ "origin": "Vienna",
193
+ "destination": "New York",
194
+ "departureTime": "2025-12-15T10:15:00Z",
195
+ "status": "On Time",
196
+ "arrivalTime": "2025-12-15T14:30:00Z"
197
+ }
198
+ }
199
+ }
200
+ ]
201
+ }