@developer_tribe/react-builder 1.0.8 → 1.0.9

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 (216) hide show
  1. package/dist/build-components/BIcon/BIconProps.generated.d.ts +3 -0
  2. package/dist/build-components/BackgroundImage/BackgroundImageProps.generated.d.ts +1 -0
  3. package/dist/build-components/Button/ButtonProps.generated.d.ts +1 -0
  4. package/dist/build-components/Carousel/CarouselProps.generated.d.ts +5 -0
  5. package/dist/build-components/CarouselButtons/CarouselButtonsProps.generated.d.ts +1 -0
  6. package/dist/build-components/CarouselDots/CarouselDotsProps.generated.d.ts +1 -0
  7. package/dist/build-components/CarouselItem/CarouselItemProps.generated.d.ts +1 -0
  8. package/dist/build-components/CarouselProvider/CarouselProviderProps.generated.d.ts +1 -0
  9. package/dist/build-components/Image/ImageProps.generated.d.ts +1 -0
  10. package/dist/build-components/Main/MainProps.generated.d.ts +1 -1
  11. package/dist/build-components/Onboard/OnboardProps.generated.d.ts +1 -0
  12. package/dist/build-components/OnboardButton/OnboardButtonProps.generated.d.ts +1 -0
  13. package/dist/build-components/OnboardButtons/OnboardButtonsProps.generated.d.ts +1 -0
  14. package/dist/build-components/OnboardDot/OnboardDotProps.generated.d.ts +1 -0
  15. package/dist/build-components/OnboardFooter/OnboardFooterProps.generated.d.ts +3 -0
  16. package/dist/build-components/OnboardImage/OnboardImageProps.generated.d.ts +1 -0
  17. package/dist/build-components/OnboardItem/OnboardItemProps.generated.d.ts +1 -0
  18. package/dist/build-components/OnboardProvider/OnboardProviderProps.generated.d.ts +3 -0
  19. package/dist/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.d.ts +3 -0
  20. package/dist/build-components/OnboardTitle/OnboardTitleProps.generated.d.ts +3 -0
  21. package/dist/build-components/PaywallBackground/PaywallBackgroundProps.generated.d.ts +1 -1
  22. package/dist/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.d.ts +3 -1
  23. package/dist/build-components/PaywallOptions/PaywallOptionsProps.generated.d.ts +1 -1
  24. package/dist/build-components/PaywallProvider/PaywallContext.d.ts +12 -0
  25. package/dist/build-components/PaywallProvider/PaywallProviderProps.generated.d.ts +1 -1
  26. package/dist/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.d.ts +1 -0
  27. package/dist/build-components/RadioButton/RadioButtonProps.generated.d.ts +1 -1
  28. package/dist/build-components/Text/TextProps.generated.d.ts +3 -0
  29. package/dist/build-components/View/ViewProps.generated.d.ts +1 -0
  30. package/dist/build-components/patterns.generated.d.ts +372 -374
  31. package/dist/components/BuilderProvider.d.ts +2 -0
  32. package/dist/components/ParamsProvider.d.ts +5 -0
  33. package/dist/components/RenderErrorBoundary.d.ts +28 -0
  34. package/dist/hooks/useSyncHtmlThemeClass.d.ts +7 -0
  35. package/dist/index.cjs.js +5 -5
  36. package/dist/index.cjs.js.map +1 -1
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.esm.js +3 -3
  39. package/dist/index.esm.js.map +1 -1
  40. package/dist/index.native.cjs.js +4 -4
  41. package/dist/index.native.cjs.js.map +1 -1
  42. package/dist/index.native.d.ts +1 -0
  43. package/dist/index.native.esm.js +4 -4
  44. package/dist/index.native.esm.js.map +1 -1
  45. package/dist/migrations/migratePipe.d.ts +14 -0
  46. package/dist/migrations/migrations/1.1.0_normalize_style_attributes.d.ts +2 -0
  47. package/dist/migrations/semver.d.ts +8 -0
  48. package/dist/migrations/types.d.ts +8 -0
  49. package/dist/mockOS/components/SubscriptionModal.d.ts +7 -0
  50. package/dist/mockOS/context/MockOSContextBase.d.ts +1 -0
  51. package/dist/mockOS/hooks/useMockIap.d.ts +3 -0
  52. package/dist/mockOS/index.d.ts +4 -0
  53. package/dist/mockOS/managers/mockOSIapManager.d.ts +6 -0
  54. package/dist/mockOS/managers/subscriptionManager.d.ts +10 -0
  55. package/dist/pages/ProjectDebug.d.ts +14 -0
  56. package/dist/pages/ProjectMigrationPage.d.ts +23 -0
  57. package/dist/pages/ProjectValidationPage.d.ts +15 -0
  58. package/dist/styles.css +1 -1
  59. package/dist/types/Device.d.ts +5 -0
  60. package/dist/utils/__special_exceptions.d.ts +7 -0
  61. package/dist/utils/getImage.d.ts +23 -0
  62. package/dist/utils/pasteNode.d.ts +15 -0
  63. package/dist/utils/patterns.d.ts +1 -2
  64. package/package.json +6 -2
  65. package/scripts/migrate-patterns-to-v2.mjs +131 -0
  66. package/scripts/migrate-samples-to-current.ts +79 -0
  67. package/scripts/prebuild/utils/createGeneratedProps.js +4 -5
  68. package/scripts/prebuild/utils/validateAllComponentsOrThrow.js +32 -21
  69. package/scripts/prebuild/utils/validatePatternJson.js +12 -10
  70. package/src/.DS_Store +0 -0
  71. package/src/AttributesEditor.tsx +41 -11
  72. package/src/RenderPage.tsx +55 -0
  73. package/src/assets/.DS_Store +0 -0
  74. package/src/assets/devices.json +91 -0
  75. package/src/assets/samples/carousel-sample.json +141 -29
  76. package/src/assets/samples/getSamples.ts +9 -0
  77. package/src/assets/samples/paywall-1.json +119 -71
  78. package/src/assets/samples/simple-1.json +28 -16
  79. package/src/assets/samples/simple-2.json +157 -82
  80. package/src/assets/samples/unmigrated-builder1.json +42 -0
  81. package/src/assets/samples/unvalidated-builder1.json +49 -0
  82. package/src/assets/samples/unvalidated-crash1.json +19 -0
  83. package/src/assets/samples/unvalidated-crashcomponent1.json +16 -0
  84. package/src/assets/samples/vpn-onboard-1.json +91 -51
  85. package/src/assets/samples/vpn-onboard-2.json +318 -278
  86. package/src/assets/samples/vpn-onboard-3.json +286 -252
  87. package/src/assets/samples/vpn-onboard-4.json +286 -252
  88. package/src/assets/samples/vpn-onboard-5.json +434 -374
  89. package/src/assets/samples/vpn-onboard-6.json +290 -250
  90. package/src/attributes-editor/Field.tsx +1 -1
  91. package/src/attributes-editor/LayoutPreviewPicker.tsx +5 -2
  92. package/src/build-components/BIcon/BIconProps.generated.ts +3 -0
  93. package/src/build-components/BIcon/pattern.json +12 -9
  94. package/src/build-components/BackgroundImage/BackgroundImage.tsx +3 -1
  95. package/src/build-components/BackgroundImage/BackgroundImageProps.generated.ts +1 -0
  96. package/src/build-components/BackgroundImage/pattern.json +25 -16
  97. package/src/build-components/Button/Button.tsx +26 -3
  98. package/src/build-components/Button/ButtonProps.generated.ts +1 -0
  99. package/src/build-components/Button/pattern.json +10 -6
  100. package/src/build-components/Carousel/CarouselProps.generated.ts +5 -0
  101. package/src/build-components/Carousel/pattern.json +19 -8
  102. package/src/build-components/CarouselButtons/CarouselButtonsProps.generated.ts +1 -0
  103. package/src/build-components/CarouselButtons/pattern.json +11 -5
  104. package/src/build-components/CarouselDots/CarouselDotsProps.generated.ts +1 -0
  105. package/src/build-components/CarouselDots/pattern.json +5 -4
  106. package/src/build-components/CarouselItem/CarouselItemProps.generated.ts +1 -0
  107. package/src/build-components/CarouselItem/pattern.json +5 -4
  108. package/src/build-components/CarouselProvider/CarouselProvider.tsx +44 -2
  109. package/src/build-components/CarouselProvider/CarouselProviderProps.generated.ts +1 -0
  110. package/src/build-components/Image/Image.tsx +2 -1
  111. package/src/build-components/Image/ImageProps.generated.ts +1 -0
  112. package/src/build-components/Image/pattern.json +11 -5
  113. package/src/build-components/Main/MainProps.generated.ts +1 -1
  114. package/src/build-components/Main/pattern.json +12 -9
  115. package/src/build-components/Onboard/OnboardProps.generated.ts +1 -0
  116. package/src/build-components/Onboard/pattern.json +14 -9
  117. package/src/build-components/OnboardButton/OnboardButtonProps.generated.ts +1 -0
  118. package/src/build-components/OnboardButton/pattern.json +5 -4
  119. package/src/build-components/OnboardButtons/OnboardButtonsProps.generated.ts +1 -0
  120. package/src/build-components/OnboardButtons/pattern.json +5 -4
  121. package/src/build-components/OnboardDot/OnboardDotProps.generated.ts +1 -0
  122. package/src/build-components/OnboardDot/pattern.json +5 -4
  123. package/src/build-components/OnboardFooter/OnboardFooterProps.generated.ts +3 -0
  124. package/src/build-components/OnboardFooter/pattern.json +8 -5
  125. package/src/build-components/OnboardImage/OnboardImageProps.generated.ts +1 -0
  126. package/src/build-components/OnboardImage/pattern.json +7 -4
  127. package/src/build-components/OnboardItem/OnboardItemProps.generated.ts +1 -0
  128. package/src/build-components/OnboardItem/pattern.json +18 -9
  129. package/src/build-components/OnboardProvider/OnboardProviderProps.generated.ts +3 -0
  130. package/src/build-components/OnboardProvider/pattern.json +21 -6
  131. package/src/build-components/OnboardSubtitle/OnboardSubtitleProps.generated.ts +3 -0
  132. package/src/build-components/OnboardSubtitle/pattern.json +10 -6
  133. package/src/build-components/OnboardTitle/OnboardTitleProps.generated.ts +3 -0
  134. package/src/build-components/OnboardTitle/pattern.json +11 -7
  135. package/src/build-components/PaywallBackground/PaywallBackgroundProps.generated.ts +1 -1
  136. package/src/build-components/PaywallBackground/pattern.json +5 -4
  137. package/src/build-components/PaywallCloseButton/PaywallCloseButton.tsx +6 -1
  138. package/src/build-components/PaywallCloseButton/PaywallCloseButtonProps.generated.ts +3 -1
  139. package/src/build-components/PaywallCloseButton/pattern.json +15 -12
  140. package/src/build-components/PaywallOptions/PaywallOptionButton.tsx +0 -1
  141. package/src/build-components/PaywallOptions/PaywallOptions.tsx +3 -2
  142. package/src/build-components/PaywallOptions/PaywallOptionsProps.generated.ts +1 -1
  143. package/src/build-components/PaywallOptions/pattern.json +14 -11
  144. package/src/build-components/PaywallProvider/PaywallContext.ts +25 -0
  145. package/src/build-components/PaywallProvider/PaywallProvider.tsx +102 -5
  146. package/src/build-components/PaywallProvider/PaywallProviderProps.generated.ts +1 -1
  147. package/src/build-components/PaywallProvider/pattern.json +11 -8
  148. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButton.tsx +7 -0
  149. package/src/build-components/PaywallSubscribeButton/PaywallSubscribeButtonProps.generated.ts +1 -0
  150. package/src/build-components/PaywallSubscribeButton/pattern.json +16 -13
  151. package/src/build-components/RadioButton/RadioButtonProps.generated.ts +1 -1
  152. package/src/build-components/RadioButton/pattern.json +5 -4
  153. package/src/build-components/Text/Text.tsx +107 -4
  154. package/src/build-components/Text/TextProps.generated.ts +3 -0
  155. package/src/build-components/Text/pattern.json +19 -4
  156. package/src/build-components/View/ViewProps.generated.ts +1 -0
  157. package/src/build-components/View/pattern.json +28 -13
  158. package/src/build-components/other.tsx +15 -0
  159. package/src/build-components/patterns.generated.ts +340 -235
  160. package/src/build-components/useNode.ts +22 -3
  161. package/src/components/Builder.tsx +20 -6
  162. package/src/components/BuilderButton.tsx +75 -38
  163. package/src/components/BuilderProvider.tsx +22 -2
  164. package/src/components/DeviceButton.tsx +12 -5
  165. package/src/components/EditorHeader.tsx +296 -38
  166. package/src/components/ParamsProvider.tsx +7 -0
  167. package/src/components/RenderErrorBoundary.tsx +200 -0
  168. package/src/hooks/useParams.ts +5 -1
  169. package/src/hooks/useSyncHtmlThemeClass.ts +19 -0
  170. package/src/index.native.ts +7 -0
  171. package/src/index.ts +8 -0
  172. package/src/migrations/migratePipe.ts +59 -0
  173. package/src/migrations/migrations/1.1.0_normalize_style_attributes.ts +80 -0
  174. package/src/migrations/semver.ts +24 -0
  175. package/src/migrations/types.ts +9 -0
  176. package/src/mockOS/components/PermissionModal.tsx +3 -2
  177. package/src/mockOS/components/SubscriptionModal.tsx +400 -0
  178. package/src/mockOS/context/MockOSContext.tsx +61 -10
  179. package/src/mockOS/context/MockOSContextBase.ts +1 -0
  180. package/src/mockOS/hooks/useMockIap.ts +11 -0
  181. package/src/mockOS/index.ts +7 -0
  182. package/src/mockOS/managers/mockOSIapManager.ts +10 -0
  183. package/src/mockOS/managers/subscriptionManager.ts +36 -0
  184. package/src/modals/IconPickerModal.tsx +1 -1
  185. package/src/pages/ProjectDebug.tsx +331 -0
  186. package/src/pages/ProjectMigrationPage.tsx +92 -0
  187. package/src/pages/ProjectPage.tsx +313 -161
  188. package/src/pages/ProjectValidationPage.tsx +54 -0
  189. package/src/styles/base/_global.scss +58 -11
  190. package/src/styles/components/_attributes-editor.scss +1 -1
  191. package/src/styles/components/_bottom-bar.scss +7 -4
  192. package/src/styles/components/_editor-shell.scss +126 -4
  193. package/src/styles/components/_mockos-router.scss +3 -2
  194. package/src/styles/components/_ui-components.scss +10 -5
  195. package/src/styles/foundation/_colors.scss +78 -11
  196. package/src/styles/foundation/_mixins.scss +4 -1
  197. package/src/styles/foundation/_sizes.scss +4 -2
  198. package/src/styles/index.scss +1 -0
  199. package/src/styles/layout/_builder.scss +61 -0
  200. package/src/styles/layout/_project-validation.scss +214 -0
  201. package/src/styles/modals/_add-component.scss +4 -2
  202. package/src/styles/modals/_color-modal.scss +4 -2
  203. package/src/styles/modals/_modal-shell.scss +3 -1
  204. package/src/types/Device.ts +5 -0
  205. package/src/utils/__special_exceptions.ts +88 -0
  206. package/src/utils/analyseNode.ts +8 -2
  207. package/src/utils/analyseNodeByPatterns.ts +43 -9
  208. package/src/utils/extractTextStyle.ts +19 -6
  209. package/src/utils/extractViewStyle.ts +68 -59
  210. package/src/utils/getImage.ts +76 -0
  211. package/src/utils/novaToJson.ts +2 -1
  212. package/src/utils/pasteNode.ts +172 -0
  213. package/src/utils/patterns.ts +4 -3
  214. package/dist/android.svg +0 -43
  215. package/dist/apple.svg +0 -16
  216. package/dist/background.jpg +0 -0
@@ -1,61 +1,88 @@
1
1
  {
2
2
  "name": "hello-world-2-advanced",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "type": "other",
5
5
  "appConfig": {
6
6
  "theme": "light",
7
7
  "isRtl": false,
8
8
  "screenStyle": {
9
- "light": { "backgroundColor": "#FDFDFD", "color": "#161827" },
10
- "dark": { "backgroundColor": "#12131A", "color": "#E9EBF9" }
9
+ "light": {
10
+ "backgroundColor": "#FDFDFD",
11
+ "color": "#161827"
12
+ },
13
+ "dark": {
14
+ "backgroundColor": "#12131A",
15
+ "color": "#E9EBF9"
16
+ }
11
17
  },
12
18
  "defaultLanguage": "en"
13
19
  },
14
20
  "data": {
15
21
  "type": "view",
16
22
  "attributes": {
17
- "scrollable": true,
18
- "flexDirection": "column",
19
- "alignItems": "stretch",
20
- "justifyContent": "flex-start",
21
- "gap": 16,
22
- "padding": 16,
23
- "backgroundColor": "#F3F4F6"
23
+ "style": {
24
+ "scrollable": true,
25
+ "flexDirection": "column",
26
+ "alignItems": "stretch",
27
+ "justifyContent": "flex-start",
28
+ "gap": 16,
29
+ "padding": 16,
30
+ "backgroundColor": "#F3F4F6"
31
+ }
24
32
  },
25
33
  "children": [
26
34
  {
27
35
  "type": "view",
28
36
  "attributes": {
29
- "flexDirection": "row",
30
- "alignItems": "center",
31
- "justifyContent": "space-between",
32
- "padding": 12,
33
- "backgroundColor": "#111827",
34
- "borderRadius": 12
37
+ "style": {
38
+ "flexDirection": "row",
39
+ "alignItems": "center",
40
+ "justifyContent": "space-between",
41
+ "padding": 12,
42
+ "backgroundColor": "#111827",
43
+ "borderRadius": 12
44
+ }
35
45
  },
36
46
  "children": [
37
47
  {
38
48
  "type": "text",
39
49
  "children": "Dashboard",
40
50
  "attributes": {
41
- "color": "#FFFFFF",
42
- "fontSize": 20,
43
- "fontWeight": "600"
51
+ "style": {
52
+ "color": "#FFFFFF",
53
+ "fontSize": 20,
54
+ "fontWeight": "600"
55
+ }
44
56
  }
45
57
  },
46
58
  {
47
59
  "type": "view",
48
- "attributes": { "flexDirection": "row", "gap": 8 },
60
+ "attributes": {
61
+ "style": {
62
+ "flexDirection": "row",
63
+ "gap": 8
64
+ }
65
+ },
49
66
  "children": [
50
67
  {
51
68
  "type": "text",
52
69
  "children": "Help",
53
- "attributes": { "color": "#D1D5DB", "fontSize": 14 }
70
+ "attributes": {
71
+ "style": {
72
+ "color": "#D1D5DB",
73
+ "fontSize": 14
74
+ }
75
+ }
54
76
  },
55
77
  {
56
78
  "type": "text",
57
79
  "children": "Profile",
58
- "attributes": { "color": "#D1D5DB", "fontSize": 14 }
80
+ "attributes": {
81
+ "style": {
82
+ "color": "#D1D5DB",
83
+ "fontSize": 14
84
+ }
85
+ }
59
86
  }
60
87
  ]
61
88
  }
@@ -65,73 +92,92 @@
65
92
  "type": "image",
66
93
  "attributes": {
67
94
  "src": "https://picsum.photos/720/320",
68
- "width": 358,
69
- "height": 160,
70
- "borderRadius": 12,
71
- "resizeMode": "cover"
95
+ "resizeMode": "cover",
96
+ "style": {
97
+ "width": 358,
98
+ "height": 160,
99
+ "borderRadius": 12
100
+ }
72
101
  },
73
102
  "children": null
74
103
  },
75
104
  {
76
105
  "type": "view",
77
106
  "attributes": {
78
- "flexDirection": "column",
79
- "gap": 8,
80
- "padding": 12,
81
- "backgroundColor": "#FFFFFF",
82
- "borderRadius": 12
107
+ "style": {
108
+ "flexDirection": "column",
109
+ "gap": 8,
110
+ "padding": 12,
111
+ "backgroundColor": "#FFFFFF",
112
+ "borderRadius": 12
113
+ }
83
114
  },
84
115
  "children": [
85
116
  {
86
117
  "type": "text",
87
118
  "children": "Welcome back!",
88
119
  "attributes": {
89
- "color": "#111827",
90
- "fontSize": 18,
91
- "fontWeight": "600"
120
+ "style": {
121
+ "color": "#111827",
122
+ "fontSize": 18,
123
+ "fontWeight": "600"
124
+ }
92
125
  }
93
126
  },
94
127
  {
95
128
  "type": "text",
96
129
  "children": "Here's what's new today.",
97
- "attributes": { "color": "#6B7280", "fontSize": 14 }
130
+ "attributes": {
131
+ "style": {
132
+ "color": "#6B7280",
133
+ "fontSize": 14
134
+ }
135
+ }
98
136
  }
99
137
  ]
100
138
  },
101
139
  {
102
140
  "type": "view",
103
141
  "attributes": {
104
- "flexDirection": "column",
105
- "gap": 12
142
+ "style": {
143
+ "flexDirection": "column",
144
+ "gap": 12
145
+ }
106
146
  },
107
147
  "children": [
108
148
  {
109
149
  "type": "view",
110
150
  "attributes": {
111
- "flexDirection": "row",
112
- "alignItems": "center",
113
- "justifyContent": "space-between",
114
- "padding": 12,
115
- "backgroundColor": "#FFFFFF",
116
- "borderRadius": 8
151
+ "style": {
152
+ "flexDirection": "row",
153
+ "alignItems": "center",
154
+ "justifyContent": "space-between",
155
+ "padding": 12,
156
+ "backgroundColor": "#FFFFFF",
157
+ "borderRadius": 8
158
+ }
117
159
  },
118
160
  "children": [
119
161
  {
120
162
  "type": "text",
121
163
  "children": "Task 1",
122
164
  "attributes": {
123
- "color": "#111827",
124
- "fontSize": 16,
125
- "fontWeight": "500"
165
+ "style": {
166
+ "color": "#111827",
167
+ "fontSize": 16,
168
+ "fontWeight": "500"
169
+ }
126
170
  }
127
171
  },
128
172
  {
129
173
  "type": "text",
130
174
  "children": "Due today",
131
175
  "attributes": {
132
- "color": "#059669",
133
- "fontSize": 12,
134
- "fontWeight": "600"
176
+ "style": {
177
+ "color": "#059669",
178
+ "fontSize": 12,
179
+ "fontWeight": "600"
180
+ }
135
181
  }
136
182
  }
137
183
  ]
@@ -139,30 +185,36 @@
139
185
  {
140
186
  "type": "view",
141
187
  "attributes": {
142
- "flexDirection": "row",
143
- "alignItems": "center",
144
- "justifyContent": "space-between",
145
- "padding": 12,
146
- "backgroundColor": "#FFFFFF",
147
- "borderRadius": 8
188
+ "style": {
189
+ "flexDirection": "row",
190
+ "alignItems": "center",
191
+ "justifyContent": "space-between",
192
+ "padding": 12,
193
+ "backgroundColor": "#FFFFFF",
194
+ "borderRadius": 8
195
+ }
148
196
  },
149
197
  "children": [
150
198
  {
151
199
  "type": "text",
152
200
  "children": "Task 2",
153
201
  "attributes": {
154
- "color": "#111827",
155
- "fontSize": 16,
156
- "fontWeight": "500"
202
+ "style": {
203
+ "color": "#111827",
204
+ "fontSize": 16,
205
+ "fontWeight": "500"
206
+ }
157
207
  }
158
208
  },
159
209
  {
160
210
  "type": "text",
161
211
  "children": "2 days left",
162
212
  "attributes": {
163
- "color": "#D97706",
164
- "fontSize": 12,
165
- "fontWeight": "600"
213
+ "style": {
214
+ "color": "#D97706",
215
+ "fontSize": 12,
216
+ "fontWeight": "600"
217
+ }
166
218
  }
167
219
  }
168
220
  ]
@@ -170,30 +222,36 @@
170
222
  {
171
223
  "type": "view",
172
224
  "attributes": {
173
- "flexDirection": "row",
174
- "alignItems": "center",
175
- "justifyContent": "space-between",
176
- "padding": 12,
177
- "backgroundColor": "#FFFFFF",
178
- "borderRadius": 8
225
+ "style": {
226
+ "flexDirection": "row",
227
+ "alignItems": "center",
228
+ "justifyContent": "space-between",
229
+ "padding": 12,
230
+ "backgroundColor": "#FFFFFF",
231
+ "borderRadius": 8
232
+ }
179
233
  },
180
234
  "children": [
181
235
  {
182
236
  "type": "text",
183
237
  "children": "Task 3",
184
238
  "attributes": {
185
- "color": "#111827",
186
- "fontSize": 16,
187
- "fontWeight": "500"
239
+ "style": {
240
+ "color": "#111827",
241
+ "fontSize": 16,
242
+ "fontWeight": "500"
243
+ }
188
244
  }
189
245
  },
190
246
  {
191
247
  "type": "text",
192
248
  "children": "Completed",
193
249
  "attributes": {
194
- "color": "#6B7280",
195
- "fontSize": 12,
196
- "fontWeight": "600"
250
+ "style": {
251
+ "color": "#6B7280",
252
+ "fontSize": 12,
253
+ "fontWeight": "600"
254
+ }
197
255
  }
198
256
  }
199
257
  ]
@@ -203,28 +261,45 @@
203
261
  {
204
262
  "type": "view",
205
263
  "attributes": {
206
- "flexDirection": "row",
207
- "alignItems": "center",
208
- "justifyContent": "space-around",
209
- "padding": 12,
210
- "backgroundColor": "#111827",
211
- "borderRadius": 12
264
+ "style": {
265
+ "flexDirection": "row",
266
+ "alignItems": "center",
267
+ "justifyContent": "space-around",
268
+ "padding": 12,
269
+ "backgroundColor": "#111827",
270
+ "borderRadius": 12
271
+ }
212
272
  },
213
273
  "children": [
214
274
  {
215
275
  "type": "text",
216
276
  "children": "Home",
217
- "attributes": { "color": "#FFFFFF", "fontSize": 14 }
277
+ "attributes": {
278
+ "style": {
279
+ "color": "#FFFFFF",
280
+ "fontSize": 14
281
+ }
282
+ }
218
283
  },
219
284
  {
220
285
  "type": "text",
221
286
  "children": "Search",
222
- "attributes": { "color": "#9CA3AF", "fontSize": 14 }
287
+ "attributes": {
288
+ "style": {
289
+ "color": "#9CA3AF",
290
+ "fontSize": 14
291
+ }
292
+ }
223
293
  },
224
294
  {
225
295
  "type": "text",
226
296
  "children": "Settings",
227
- "attributes": { "color": "#9CA3AF", "fontSize": 14 }
297
+ "attributes": {
298
+ "style": {
299
+ "color": "#9CA3AF",
300
+ "fontSize": 14
301
+ }
302
+ }
228
303
  }
229
304
  ]
230
305
  }
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "unmigrated-builder1",
3
+ "version": "1.0.0",
4
+ "type": "other",
5
+ "appConfig": {
6
+ "theme": "light"
7
+ },
8
+ "data": {
9
+ "type": "view",
10
+ "attributes": {
11
+ "scrollable": true,
12
+ "flexDirection": "column",
13
+ "alignItems": "center",
14
+ "justifyContent": "center",
15
+ "gap": 12,
16
+ "padding": 24,
17
+ "backgroundColor": "#F5F7FA"
18
+ },
19
+ "children": [
20
+ {
21
+ "type": "text",
22
+ "attributes": {
23
+ "fontSize": 22,
24
+ "fontWeight": "700",
25
+ "color": "#111827",
26
+ "textAlign": "center"
27
+ },
28
+ "children": "Intentionally unmigrated sample"
29
+ },
30
+ {
31
+ "type": "text",
32
+ "attributes": {
33
+ "fontSize": 14,
34
+ "color": "#6B7280",
35
+ "textAlign": "center",
36
+ "paddingHorizontal": 8
37
+ },
38
+ "children": "This project has version 1.0.0 so the Migration page should appear. Click “Migrate now” to normalize legacy flat style keys into attributes.style (1.1.0)."
39
+ }
40
+ ]
41
+ }
42
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "unvalidated-builder1",
3
+ "version": "1.1.0",
4
+ "type": "other",
5
+ "appConfig": {
6
+ "theme": "light"
7
+ },
8
+ "data": {
9
+ "type": "view",
10
+ "attributes": {
11
+ "style": {
12
+ "scrollable": true,
13
+ "flexDirection": "column",
14
+ "alignItems": "center",
15
+ "justifyContent": "center",
16
+ "gap": 12,
17
+ "padding": 24,
18
+ "backgroundColor": "#F5F7FA"
19
+ },
20
+ "foo": 1
21
+ },
22
+ "children": [
23
+ {
24
+ "type": "text",
25
+ "attributes": {
26
+ "style": {
27
+ "fontSize": 22,
28
+ "fontWeight": "700",
29
+ "color": "#111827",
30
+ "textAlign": "center"
31
+ }
32
+ },
33
+ "children": "Intentionally unvalidated sample"
34
+ },
35
+ {
36
+ "type": "text",
37
+ "attributes": {
38
+ "style": {
39
+ "fontSize": 14,
40
+ "color": "#6B7280",
41
+ "textAlign": "center",
42
+ "paddingHorizontal": 8
43
+ }
44
+ },
45
+ "children": "This project should fail validation (unknown attribute: foo). In the UI, choose “Continue without validation” to load it anyway."
46
+ }
47
+ ]
48
+ }
49
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "unvalidated-crash1",
3
+ "version": "1.1.0",
4
+ "type": "other",
5
+ "appConfig": {
6
+ "theme": "light"
7
+ },
8
+ "data": {
9
+ "type": "OnboardFooter",
10
+ "attributes": {
11
+ "textLocalizationKey": 123,
12
+ "style": {
13
+ "paddingHorizontal": 24,
14
+ "paddingVertical": 16
15
+ }
16
+ },
17
+ "children": null
18
+ }
19
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "unvalidated-crashcomponent1",
3
+ "version": "1.1.0",
4
+ "type": "other",
5
+ "appConfig": {
6
+ "theme": "light"
7
+ },
8
+ "data": {
9
+ "type": "CrashComponent",
10
+ "attributes": {
11
+ "reason": "Intentional crash for GUI testing",
12
+ "note": "This component is not in the Add Component modal; it only exists via JSON."
13
+ },
14
+ "children": null
15
+ }
16
+ }