@webiny/website-builder-sdk 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e

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 (307) hide show
  1. package/BindingsApi.js +29 -36
  2. package/BindingsApi.js.map +1 -1
  3. package/BindingsProcessor.js +34 -43
  4. package/BindingsProcessor.js.map +1 -1
  5. package/BindingsProcessor.test.js +82 -77
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.d.ts +5 -2
  8. package/BindingsResolver.js +99 -122
  9. package/BindingsResolver.js.map +1 -1
  10. package/BindingsResolver.test.js +399 -362
  11. package/BindingsResolver.test.js.map +1 -1
  12. package/ComponentInputTraverser.js +32 -49
  13. package/ComponentInputTraverser.js.map +1 -1
  14. package/ComponentManifestToAstConverter.js +20 -21
  15. package/ComponentManifestToAstConverter.js.map +1 -1
  16. package/ComponentRegistry.d.ts +9 -0
  17. package/ComponentRegistry.js +38 -22
  18. package/ComponentRegistry.js.map +1 -1
  19. package/ComponentResolver.d.ts +3 -2
  20. package/ComponentResolver.js +39 -29
  21. package/ComponentResolver.js.map +1 -1
  22. package/ComponentResolver.test.d.ts +1 -0
  23. package/ComponentResolver.test.js +81 -0
  24. package/ComponentResolver.test.js.map +1 -0
  25. package/ConstraintEvaluator.d.ts +36 -0
  26. package/ConstraintEvaluator.js +288 -0
  27. package/ConstraintEvaluator.js.map +1 -0
  28. package/ConstraintEvaluator.test.d.ts +1 -0
  29. package/ConstraintEvaluator.test.js +1634 -0
  30. package/ConstraintEvaluator.test.js.map +1 -0
  31. package/ContentSdk.d.ts +17 -3
  32. package/ContentSdk.js +113 -90
  33. package/ContentSdk.js.map +1 -1
  34. package/DocumentStore.d.ts +1 -1
  35. package/DocumentStore.js +47 -59
  36. package/DocumentStore.js.map +1 -1
  37. package/DocumentStoreManager.js +17 -16
  38. package/DocumentStoreManager.js.map +1 -1
  39. package/EditingSdk.d.ts +2 -2
  40. package/EditingSdk.js +92 -124
  41. package/EditingSdk.js.map +1 -1
  42. package/ElementFactory.d.ts +2 -3
  43. package/ElementFactory.js +164 -163
  44. package/ElementFactory.js.map +1 -1
  45. package/ElementFactory.objectListDefaults.test.d.ts +1 -0
  46. package/ElementFactory.objectListDefaults.test.js +423 -0
  47. package/ElementFactory.objectListDefaults.test.js.map +1 -0
  48. package/ElementFactory.test.d.ts +1 -0
  49. package/ElementFactory.test.js +353 -0
  50. package/ElementFactory.test.js.map +1 -0
  51. package/Environment.js +18 -19
  52. package/Environment.js.map +1 -1
  53. package/FunctionConverter.js +8 -7
  54. package/FunctionConverter.js.map +1 -1
  55. package/HashObject.js +11 -12
  56. package/HashObject.js.map +1 -1
  57. package/HotkeyManager.js +41 -48
  58. package/HotkeyManager.js.map +1 -1
  59. package/IBindingsUpdater.js +0 -3
  60. package/IRedirects.js +0 -3
  61. package/InheritanceProcessor.d.ts +2 -2
  62. package/InheritanceProcessor.js +99 -139
  63. package/InheritanceProcessor.js.map +1 -1
  64. package/InheritanceProcessor.test.js +178 -178
  65. package/InheritanceProcessor.test.js.map +1 -1
  66. package/InheritedValueResolver.d.ts +18 -1
  67. package/InheritedValueResolver.js +18 -20
  68. package/InheritedValueResolver.js.map +1 -1
  69. package/InputBindingsProcessor.d.ts +23 -2
  70. package/InputBindingsProcessor.js +200 -289
  71. package/InputBindingsProcessor.js.map +1 -1
  72. package/InputBindingsProcessorTokens.test.d.ts +1 -0
  73. package/InputBindingsProcessorTokens.test.js +400 -0
  74. package/InputBindingsProcessorTokens.test.js.map +1 -0
  75. package/InputsBindingsProcessor.test.js +334 -313
  76. package/InputsBindingsProcessor.test.js.map +1 -1
  77. package/InputsUpdater.d.ts +1 -1
  78. package/InputsUpdater.js +23 -26
  79. package/InputsUpdater.js.map +1 -1
  80. package/LiveSdk.d.ts +2 -2
  81. package/LiveSdk.js +12 -13
  82. package/LiveSdk.js.map +1 -1
  83. package/Logger.d.ts +2 -1
  84. package/Logger.js +9 -8
  85. package/Logger.js.map +1 -1
  86. package/MouseTracker.js +77 -83
  87. package/MouseTracker.js.map +1 -1
  88. package/NullSdk.d.ts +4 -3
  89. package/NullSdk.js +22 -14
  90. package/NullSdk.js.map +1 -1
  91. package/PreviewDocument.d.ts +1 -0
  92. package/PreviewDocument.js +30 -30
  93. package/PreviewDocument.js.map +1 -1
  94. package/PreviewSdk.d.ts +4 -3
  95. package/PreviewSdk.js +19 -17
  96. package/PreviewSdk.js.map +1 -1
  97. package/PreviewViewport.d.ts +0 -1
  98. package/PreviewViewport.js +50 -82
  99. package/PreviewViewport.js.map +1 -1
  100. package/README.md +10 -2
  101. package/ResizeObserver.js +24 -31
  102. package/ResizeObserver.js.map +1 -1
  103. package/StylesBindingsProcessor.d.ts +12 -2
  104. package/StylesBindingsProcessor.js +62 -79
  105. package/StylesBindingsProcessor.js.map +1 -1
  106. package/StylesUpdater.d.ts +1 -1
  107. package/StylesUpdater.js +20 -25
  108. package/StylesUpdater.js.map +1 -1
  109. package/Theme.js +30 -32
  110. package/Theme.js.map +1 -1
  111. package/ViewportManager.d.ts +2 -0
  112. package/ViewportManager.js +89 -97
  113. package/ViewportManager.js.map +1 -1
  114. package/assertBindingShapes.d.ts +31 -0
  115. package/assertBindingShapes.js +64 -0
  116. package/assertBindingShapes.js.map +1 -0
  117. package/assertBindingShapes.test.d.ts +1 -0
  118. package/assertBindingShapes.test.js +131 -0
  119. package/assertBindingShapes.test.js.map +1 -0
  120. package/asset/deliveryUrl.d.ts +41 -0
  121. package/asset/deliveryUrl.js +34 -0
  122. package/asset/deliveryUrl.js.map +1 -0
  123. package/asset/deliveryUrl.test.d.ts +1 -0
  124. package/asset/deliveryUrl.test.js +127 -0
  125. package/asset/deliveryUrl.test.js.map +1 -0
  126. package/asset/geometry.d.ts +7 -0
  127. package/asset/geometry.js +10 -0
  128. package/asset/geometry.js.map +1 -0
  129. package/asset/imageSrcSet.d.ts +63 -0
  130. package/asset/imageSrcSet.js +98 -0
  131. package/asset/imageSrcSet.js.map +1 -0
  132. package/asset/imageSrcSet.test.d.ts +1 -0
  133. package/asset/imageSrcSet.test.js +103 -0
  134. package/asset/imageSrcSet.test.js.map +1 -0
  135. package/asset/index.d.ts +5 -0
  136. package/asset/index.js +5 -0
  137. package/asset/normalize.d.ts +24 -0
  138. package/asset/normalize.js +106 -0
  139. package/asset/normalize.js.map +1 -0
  140. package/asset/normalize.test.d.ts +1 -0
  141. package/asset/normalize.test.js +263 -0
  142. package/asset/normalize.test.js.map +1 -0
  143. package/asset/types.d.ts +2 -0
  144. package/asset/types.js +0 -0
  145. package/constants.d.ts +1 -0
  146. package/constants.js +7 -5
  147. package/constants.js.map +1 -1
  148. package/contentEntry/ContentEntryBindingsResolver.d.ts +30 -0
  149. package/contentEntry/ContentEntryBindingsResolver.js +45 -0
  150. package/contentEntry/ContentEntryBindingsResolver.js.map +1 -0
  151. package/contentEntry/ContentEntryCache.d.ts +46 -0
  152. package/contentEntry/ContentEntryCache.js +50 -0
  153. package/contentEntry/ContentEntryCache.js.map +1 -0
  154. package/contentEntry/resolveContentEntry.d.ts +74 -0
  155. package/contentEntry/resolveContentEntry.js +53 -0
  156. package/contentEntry/resolveContentEntry.js.map +1 -0
  157. package/contentEntry/resolveContentEntry.test.d.ts +1 -0
  158. package/contentEntry/resolveContentEntry.test.js +213 -0
  159. package/contentEntry/resolveContentEntry.test.js.map +1 -0
  160. package/createComponent.d.ts +5 -0
  161. package/createComponent.js +32 -0
  162. package/createComponent.js.map +1 -0
  163. package/createElement.js +5 -6
  164. package/createElement.js.map +1 -1
  165. package/createInput.d.ts +132 -16
  166. package/createInput.js +92 -111
  167. package/createInput.js.map +1 -1
  168. package/createTheme.js +2 -3
  169. package/createTheme.js.map +1 -1
  170. package/dataProviders/ApiClient.d.ts +10 -5
  171. package/dataProviders/ApiClient.js +40 -49
  172. package/dataProviders/ApiClient.js.map +1 -1
  173. package/dataProviders/DefaultDataProvider.d.ts +7 -3
  174. package/dataProviders/DefaultDataProvider.js +91 -45
  175. package/dataProviders/DefaultDataProvider.js.map +1 -1
  176. package/dataProviders/GET_EXPERIMENT_PAUSED.d.ts +1 -0
  177. package/dataProviders/GET_EXPERIMENT_PAUSED.js +17 -0
  178. package/dataProviders/GET_EXPERIMENT_PAUSED.js.map +1 -0
  179. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
  180. package/dataProviders/GET_PAGE_BY_ID.js +4 -1
  181. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  182. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
  183. package/dataProviders/GET_PAGE_BY_PATH.js +4 -1
  184. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  185. package/dataProviders/GET_PAGE_EXPERIMENT.d.ts +1 -0
  186. package/dataProviders/GET_PAGE_EXPERIMENT.js +32 -0
  187. package/dataProviders/GET_PAGE_EXPERIMENT.js.map +1 -0
  188. package/dataProviders/GET_VARIANT_CONTENT.d.ts +1 -0
  189. package/dataProviders/GET_VARIANT_CONTENT.js +24 -0
  190. package/dataProviders/GET_VARIANT_CONTENT.js.map +1 -0
  191. package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
  192. package/dataProviders/LIST_PUBLISHED_PAGES.js +17 -5
  193. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  194. package/dataProviders/NullDataProvider.d.ts +16 -4
  195. package/dataProviders/NullDataProvider.js +30 -13
  196. package/dataProviders/NullDataProvider.js.map +1 -1
  197. package/dataProviders/RedirectsProvider.js +24 -27
  198. package/dataProviders/RedirectsProvider.js.map +1 -1
  199. package/defaultBreakpoints.js +43 -22
  200. package/defaultBreakpoints.js.map +1 -1
  201. package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
  202. package/documentOperations/$addElementReferenceToParent.js +30 -26
  203. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  204. package/documentOperations/AddElement.js +8 -7
  205. package/documentOperations/AddElement.js.map +1 -1
  206. package/documentOperations/AddToParent.d.ts +2 -2
  207. package/documentOperations/AddToParent.js +14 -13
  208. package/documentOperations/AddToParent.js.map +1 -1
  209. package/documentOperations/IDocumentOperation.js +0 -3
  210. package/documentOperations/RemoveElement.js +10 -7
  211. package/documentOperations/RemoveElement.js.map +1 -1
  212. package/documentOperations/SetGlobalInputBinding.js +23 -22
  213. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  214. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  215. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  216. package/documentOperations/SetInputBindingOverride.js +30 -29
  217. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  218. package/documentOperations/SetStyleBindingOverride.js +30 -31
  219. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  220. package/documentOperations/index.js +9 -8
  221. package/documentOperations/index.js.map +1 -1
  222. package/experiments/PostHogAnalyticsProvider.d.ts +31 -0
  223. package/experiments/PostHogAnalyticsProvider.js +28 -0
  224. package/experiments/PostHogAnalyticsProvider.js.map +1 -0
  225. package/experiments/analyticsProvider.d.ts +4 -0
  226. package/experiments/analyticsProvider.js +11 -0
  227. package/experiments/analyticsProvider.js.map +1 -0
  228. package/experiments/bucketing.d.ts +27 -0
  229. package/experiments/bucketing.js +91 -0
  230. package/experiments/bucketing.js.map +1 -0
  231. package/experiments/bucketing.test.d.ts +1 -0
  232. package/experiments/bucketing.test.js +183 -0
  233. package/experiments/bucketing.test.js.map +1 -0
  234. package/experiments/index.d.ts +5 -0
  235. package/experiments/index.js +5 -0
  236. package/experiments/render.d.ts +79 -0
  237. package/experiments/render.js +149 -0
  238. package/experiments/render.js.map +1 -0
  239. package/experiments/types.d.ts +108 -0
  240. package/experiments/types.js +4 -0
  241. package/experiments/types.js.map +1 -0
  242. package/findMatchingAstNode.js +11 -13
  243. package/findMatchingAstNode.js.map +1 -1
  244. package/generateElementId.d.ts +1 -1
  245. package/generateElementId.js +2 -2
  246. package/generateElementId.js.map +1 -1
  247. package/headersProvider.js +4 -3
  248. package/headersProvider.js.map +1 -1
  249. package/image/geometry.d.ts +54 -0
  250. package/image/geometry.js +112 -0
  251. package/image/geometry.js.map +1 -0
  252. package/image/geometry.test.d.ts +1 -0
  253. package/image/geometry.test.js +190 -0
  254. package/image/geometry.test.js.map +1 -0
  255. package/image/index.d.ts +3 -0
  256. package/image/index.js +3 -0
  257. package/image/presets.d.ts +6 -0
  258. package/image/presets.js +20 -0
  259. package/image/presets.js.map +1 -0
  260. package/image/types.d.ts +10 -0
  261. package/image/types.js +0 -0
  262. package/index.d.ts +12 -1
  263. package/index.js +11 -3
  264. package/jsonPatch.d.ts +1 -1
  265. package/jsonPatch.js +5 -9
  266. package/jsonPatch.js.map +1 -1
  267. package/messages.js +12 -11
  268. package/messages.js.map +1 -1
  269. package/messenger/MessageOrigin.js +12 -11
  270. package/messenger/MessageOrigin.js.map +1 -1
  271. package/messenger/Messenger.js +59 -70
  272. package/messenger/Messenger.js.map +1 -1
  273. package/messenger/index.js +0 -2
  274. package/package.json +19 -22
  275. package/registerComponentGroup.js +5 -6
  276. package/registerComponentGroup.js.map +1 -1
  277. package/tokenBinding.d.ts +26 -0
  278. package/tokenBinding.js +15 -0
  279. package/tokenBinding.js.map +1 -0
  280. package/tokenBinding.test.d.ts +1 -0
  281. package/tokenBinding.test.js +165 -0
  282. package/tokenBinding.test.js.map +1 -0
  283. package/types/ShorthandCssProperties.js +0 -3
  284. package/types/WebsiteBuilderTheme.d.ts +54 -45
  285. package/types/WebsiteBuilderTheme.js +0 -3
  286. package/types.d.ts +294 -13
  287. package/types.js +0 -3
  288. package/IBindingsUpdater.js.map +0 -1
  289. package/IRedirects.js.map +0 -1
  290. package/documentOperations/IDocumentOperation.js.map +0 -1
  291. package/index.js.map +0 -1
  292. package/lexical/createDefaultLexicalTheme.d.ts +0 -2
  293. package/lexical/createDefaultLexicalTheme.js +0 -84
  294. package/lexical/createDefaultLexicalTheme.js.map +0 -1
  295. package/lexical/createLexicalTheme.d.ts +0 -2
  296. package/lexical/createLexicalTheme.js +0 -7
  297. package/lexical/createLexicalTheme.js.map +0 -1
  298. package/lexical/deepMerge.d.ts +0 -1
  299. package/lexical/deepMerge.js +0 -23
  300. package/lexical/deepMerge.js.map +0 -1
  301. package/messenger/index.js.map +0 -1
  302. package/types/LexicalEditorTheme.d.ts +0 -2
  303. package/types/LexicalEditorTheme.js +0 -3
  304. package/types/LexicalEditorTheme.js.map +0 -1
  305. package/types/ShorthandCssProperties.js.map +0 -1
  306. package/types/WebsiteBuilderTheme.js.map +0 -1
  307. package/types.js.map +0 -1
@@ -1,327 +1,348 @@
1
+ import { describe, expect, it } from "vitest";
1
2
  import { InputsBindingsProcessor } from "./InputBindingsProcessor.js";
2
3
  import { ElementFactory } from "./ElementFactory.js";
3
- describe("InputsBindingsProcessor", () => {
4
- // Example simple AST (you can expand as needed)
5
- const simpleAst = [{
6
- name: "title",
7
- type: "text",
8
- list: false,
9
- path: "title",
10
- children: [],
11
- input: {
12
- type: "text",
13
- name: "title",
14
- label: "Title"
15
- }
16
- }, {
17
- name: "items",
18
- type: "object",
19
- list: true,
20
- path: "items",
21
- children: [{
22
- name: "label",
23
- type: "text",
24
- list: false,
25
- path: "items.label",
26
- children: [],
27
- input: {
28
- type: "text",
29
- name: "label",
30
- label: "Label"
31
- }
32
- }],
33
- input: {
34
- type: "object",
35
- name: "items",
36
- list: true,
37
- fields: [{
38
- type: "text",
39
- name: "label",
40
- label: "Label"
41
- }]
42
- }
43
- }];
44
- const withSlotAst = [{
45
- path: "children",
46
- children: [],
47
- name: "children",
48
- type: "slot",
49
- list: false,
50
- input: {
51
- type: "slot",
52
- name: "children",
53
- label: "Children"
54
- }
55
- }];
56
- const breakpoints = ["desktop", "tablet", "mobile"];
57
- const baseBindings = {
58
- inputs: {
59
- title: {
60
- id: "title",
61
- static: "Base Title",
62
- type: "text"
63
- },
64
- "items/0/label": {
65
- id: "label0",
66
- static: "Base Label 1",
67
- type: "text"
68
- },
69
- "items/1/label": {
70
- id: "label1",
71
- static: "Base Label 2",
72
- type: "text"
73
- }
74
- },
75
- styles: {}
76
- };
77
- const overrides = {
78
- tablet: {
79
- inputs: {
80
- title: {
81
- id: "title",
82
- static: "Tablet Title",
83
- type: "text"
4
+ describe("InputsBindingsProcessor", ()=>{
5
+ const simpleAst = [
6
+ {
7
+ name: "title",
8
+ type: "text",
9
+ list: false,
10
+ path: "title",
11
+ children: [],
12
+ input: {
13
+ type: "text",
14
+ name: "title",
15
+ label: "Title"
16
+ }
84
17
  },
85
- "items/0/label": {
86
- id: "label0",
87
- static: "Tablet Label 1",
88
- type: "text"
18
+ {
19
+ name: "items",
20
+ type: "object",
21
+ list: true,
22
+ path: "items",
23
+ children: [
24
+ {
25
+ name: "label",
26
+ type: "text",
27
+ list: false,
28
+ path: "items.label",
29
+ children: [],
30
+ input: {
31
+ type: "text",
32
+ name: "label",
33
+ label: "Label"
34
+ }
35
+ }
36
+ ],
37
+ input: {
38
+ type: "object",
39
+ name: "items",
40
+ list: true,
41
+ fields: [
42
+ {
43
+ type: "text",
44
+ name: "label",
45
+ label: "Label"
46
+ }
47
+ ]
48
+ }
89
49
  }
90
- }
91
- },
92
- mobile: {
93
- inputs: {
94
- title: {
95
- id: "title",
96
- static: "Mobile Title",
97
- type: "text"
50
+ ];
51
+ const withSlotAst = [
52
+ {
53
+ path: "children",
54
+ children: [],
55
+ name: "children",
56
+ type: "slot",
57
+ list: false,
58
+ input: {
59
+ type: "slot",
60
+ name: "children",
61
+ label: "Children"
62
+ }
98
63
  }
99
- }
100
- }
101
- };
102
- const getInputsBindingsProcessor = (bindings = baseBindings, ast = simpleAst) => {
103
- const elementFactory = new ElementFactory({
104
- "Webiny/GridColumn": {
105
- name: "Webiny/GridColumn",
106
- label: "Column",
107
- acceptsChildren: true,
108
- inputs: [{
109
- type: "slot",
110
- list: true,
111
- renderer: "Webiny/Slot",
112
- name: "children",
113
- defaultValue: []
114
- }]
115
- }
116
- });
117
- const processor = new InputsBindingsProcessor("elementId", ast, breakpoints, bindings, elementFactory);
118
- return {
119
- processor,
120
- bindings
121
- };
122
- };
123
- it("toDeep should convert flat bindings to nested object", () => {
124
- const {
125
- processor
126
- } = getInputsBindingsProcessor();
127
- const deep = processor.toDeepInputs(baseBindings.inputs ?? {});
128
- expect(deep).toEqual({
129
- title: "Base Title",
130
- items: [{
131
- label: "Base Label 1"
132
- }, {
133
- label: "Base Label 2"
134
- }]
135
- });
136
- });
137
- it("applyInputs should assign base breakpoint inputs correctly", () => {
138
- const {
139
- processor
140
- } = getInputsBindingsProcessor();
141
- const newInputs = {
142
- title: "New Base Title",
143
- items: [{
144
- label: "New Label 1"
145
- }, {
146
- label: "New Label 2"
147
- }]
148
- };
149
- const updater = processor.createUpdate(newInputs, "mobile");
150
- const rebuilt = {
151
- bindings: {
152
- elementId: {
153
- inputs: {},
154
- styles: {}
155
- }
156
- }
157
- };
158
- updater.applyToDocument(rebuilt);
159
- const elementBindings = rebuilt.bindings.elementId;
160
- expect(elementBindings.inputs.title.static).toBe("New Base Title");
161
- expect(elementBindings.inputs["items/0/label"].static).toBe("New Label 1");
162
- expect(elementBindings.inputs["items/1/label"].static).toBe("New Label 2");
163
- expect(elementBindings.overrides).toBeUndefined();
164
- });
165
- it("applyInputs should assign overrides correctly, skipping inherited values", () => {
166
- const rawBindings = {
167
- inputs: baseBindings.inputs,
168
- overrides,
169
- styles: {}
170
- };
171
- const {
172
- processor
173
- } = getInputsBindingsProcessor(rawBindings);
174
- const newInputs = {
175
- title: "Mobile Title",
176
- items: [{
177
- label: "Base Label 1"
178
- }, {
179
- label: "Base Label 2"
180
- }]
181
- };
182
- const updater = processor.createUpdate(newInputs, "mobile");
183
- const rebuilt = {
184
- bindings: {
185
- elementId: {
186
- inputs: {},
187
- styles: {}
188
- }
189
- }
190
- };
191
- updater.applyToDocument(rebuilt);
192
- const elementBindings = rebuilt.bindings.elementId;
193
- expect(elementBindings.inputs.title.static).toBe("Mobile Title");
194
- // Items are same as base, so should not be in overrides
195
- expect(elementBindings.overrides?.mobile.inputs?.["items/0/label"]).toBeUndefined();
196
- });
197
- it("createPatch should create correct json patch for input changes", () => {
198
- const rawBindings = {
199
- inputs: baseBindings.inputs,
200
- overrides,
201
- styles: {}
202
- };
203
- const {
204
- processor,
205
- bindings
206
- } = getInputsBindingsProcessor(rawBindings);
207
- const newInputs = {
208
- title: "Changed Title",
209
- items: [{
210
- label: "Changed Label 1"
211
- }]
212
- };
213
- const updater = processor.createUpdate(newInputs, "mobile");
214
- const patch = updater.createJsonPatch(bindings);
215
-
216
- // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.
217
- expect(patch).toEqual(expect.arrayContaining([expect.objectContaining({
218
- op: "remove",
219
- path: "/inputs/items~11~1label"
220
- }), expect.objectContaining({
221
- op: "replace",
222
- path: "/inputs/title/static",
223
- value: "Changed Title"
224
- }), expect.objectContaining({
225
- op: "replace",
226
- path: "/inputs/items~10~1label/static",
227
- value: "Changed Label 1"
228
- })]));
229
- });
230
- it("applyInputs removes keys missing in new inputs", () => {
231
- const rawBindings = {
232
- inputs: {
233
- ...baseBindings.inputs,
234
- "some/key": {
235
- id: "someKey",
236
- static: "toRemove",
237
- type: "text"
238
- }
239
- },
240
- overrides,
241
- styles: {}
242
- };
243
- const {
244
- processor
245
- } = getInputsBindingsProcessor(rawBindings);
246
- const newInputs = {
247
- title: "Base Title",
248
- items: [{
249
- label: "Base Label 1"
250
- }, {
251
- label: "Base Label 2"
252
- }]
64
+ ];
65
+ const breakpoints = [
66
+ "desktop",
67
+ "tablet",
68
+ "mobile"
69
+ ];
70
+ const baseBindings = {
71
+ inputs: {
72
+ title: {
73
+ id: "title",
74
+ static: "Base Title",
75
+ type: "text"
76
+ },
77
+ "items/0/label": {
78
+ id: "label0",
79
+ static: "Base Label 1",
80
+ type: "text"
81
+ },
82
+ "items/1/label": {
83
+ id: "label1",
84
+ static: "Base Label 2",
85
+ type: "text"
86
+ }
87
+ },
88
+ styles: {}
253
89
  };
254
- const updater = processor.createUpdate(newInputs, "mobile");
255
- const rebuilt = {
256
- bindings: {
257
- elementId: {
258
- inputs: {},
259
- styles: {}
90
+ const overrides = {
91
+ tablet: {
92
+ inputs: {
93
+ title: {
94
+ id: "title",
95
+ static: "Tablet Title",
96
+ type: "text"
97
+ },
98
+ "items/0/label": {
99
+ id: "label0",
100
+ static: "Tablet Label 1",
101
+ type: "text"
102
+ }
103
+ }
104
+ },
105
+ mobile: {
106
+ inputs: {
107
+ title: {
108
+ id: "title",
109
+ static: "Mobile Title",
110
+ type: "text"
111
+ }
112
+ }
260
113
  }
261
- }
262
114
  };
263
- updater.applyToDocument(rebuilt);
264
- const elementBindings = rebuilt.bindings.elementId;
265
- expect(elementBindings.inputs["some/key"]).toBeUndefined();
266
- });
267
- it("createUpdate should apply correct changes to the document", () => {
268
- const rawBindings = {
269
- inputs: baseBindings.inputs,
270
- overrides,
271
- styles: {}
115
+ const getInputsBindingsProcessor = (bindings = baseBindings, ast = simpleAst)=>{
116
+ const elementFactory = new ElementFactory({
117
+ "Webiny/GridColumn": {
118
+ name: "Webiny/GridColumn",
119
+ label: "Column",
120
+ tags: [],
121
+ acceptsChildren: true,
122
+ inputs: [
123
+ {
124
+ type: "slot",
125
+ list: true,
126
+ renderer: "Webiny/Slot",
127
+ name: "children",
128
+ defaultValue: []
129
+ }
130
+ ]
131
+ }
132
+ });
133
+ const processor = new InputsBindingsProcessor("elementId", ast, breakpoints, bindings, elementFactory);
134
+ return {
135
+ processor,
136
+ bindings
137
+ };
272
138
  };
273
- const {
274
- processor
275
- } = getInputsBindingsProcessor(rawBindings, [...simpleAst, ...withSlotAst]);
276
- const deepInputs = processor.toDeepInputs(rawBindings.inputs);
277
- deepInputs.items.push({
278
- label: "New Label 1"
139
+ it("toDeep should convert flat bindings to nested object", ()=>{
140
+ const { processor } = getInputsBindingsProcessor();
141
+ const deep = processor.toDeepInputs(baseBindings.inputs ?? {});
142
+ expect(deep).toEqual({
143
+ title: "Base Title",
144
+ items: [
145
+ {
146
+ label: "Base Label 1"
147
+ },
148
+ {
149
+ label: "Base Label 2"
150
+ }
151
+ ]
152
+ });
279
153
  });
280
- deepInputs.children = {
281
- action: "CreateElement",
282
- params: {
283
- component: "Webiny/GridColumn"
284
- }
285
- };
286
- const updater = processor.createUpdate(deepInputs, "mobile");
287
- const rebuilt = {
288
- bindings: {
289
- elementId: {
290
- inputs: {},
291
- styles: {}
292
- }
293
- },
294
- elements: {}
295
- };
296
- updater.applyToDocument(rebuilt);
297
- expect(rebuilt.bindings.elementId.inputs).toMatchObject({
298
- title: {
299
- id: "title",
300
- static: "Base Title",
301
- type: "text"
302
- },
303
- "items/0/label": {
304
- id: "label0",
305
- static: "Base Label 1",
306
- type: "text"
307
- },
308
- "items/1/label": {
309
- id: "label1",
310
- static: "Base Label 2",
311
- type: "text"
312
- },
313
- "items/2/label": {
314
- id: expect.any(String),
315
- static: "New Label 1",
316
- type: "text"
317
- },
318
- children: {
319
- id: expect.any(String),
320
- static: expect.any(String),
321
- type: "slot"
322
- }
154
+ it("applyInputs should assign base breakpoint inputs correctly", ()=>{
155
+ const { processor } = getInputsBindingsProcessor();
156
+ const newInputs = {
157
+ title: "New Base Title",
158
+ items: [
159
+ {
160
+ label: "New Label 1"
161
+ },
162
+ {
163
+ label: "New Label 2"
164
+ }
165
+ ]
166
+ };
167
+ const updater = processor.createUpdate(newInputs, "mobile");
168
+ const rebuilt = {
169
+ bindings: {
170
+ elementId: {
171
+ inputs: {},
172
+ styles: {}
173
+ }
174
+ }
175
+ };
176
+ updater.applyToDocument(rebuilt);
177
+ const elementBindings = rebuilt.bindings.elementId;
178
+ expect(elementBindings.inputs.title.static).toBe("New Base Title");
179
+ expect(elementBindings.inputs["items/0/label"].static).toBe("New Label 1");
180
+ expect(elementBindings.inputs["items/1/label"].static).toBe("New Label 2");
181
+ expect(elementBindings.overrides).toBeUndefined();
182
+ });
183
+ it("applyInputs should assign overrides correctly, skipping inherited values", ()=>{
184
+ const rawBindings = {
185
+ inputs: baseBindings.inputs,
186
+ overrides,
187
+ styles: {}
188
+ };
189
+ const { processor } = getInputsBindingsProcessor(rawBindings);
190
+ const newInputs = {
191
+ title: "Mobile Title",
192
+ items: [
193
+ {
194
+ label: "Base Label 1"
195
+ },
196
+ {
197
+ label: "Base Label 2"
198
+ }
199
+ ]
200
+ };
201
+ const updater = processor.createUpdate(newInputs, "mobile");
202
+ const rebuilt = {
203
+ bindings: {
204
+ elementId: {
205
+ inputs: {},
206
+ styles: {}
207
+ }
208
+ }
209
+ };
210
+ updater.applyToDocument(rebuilt);
211
+ const elementBindings = rebuilt.bindings.elementId;
212
+ expect(elementBindings.inputs.title.static).toBe("Mobile Title");
213
+ expect(elementBindings.overrides?.mobile.inputs?.["items/0/label"]).toBeUndefined();
214
+ });
215
+ it("createPatch should create correct json patch for input changes", ()=>{
216
+ const rawBindings = {
217
+ inputs: baseBindings.inputs,
218
+ overrides,
219
+ styles: {}
220
+ };
221
+ const { processor, bindings } = getInputsBindingsProcessor(rawBindings);
222
+ const newInputs = {
223
+ title: "Changed Title",
224
+ items: [
225
+ {
226
+ label: "Changed Label 1"
227
+ }
228
+ ]
229
+ };
230
+ const updater = processor.createUpdate(newInputs, "mobile");
231
+ const patch = updater.createJsonPatch(bindings);
232
+ expect(patch).toEqual(expect.arrayContaining([
233
+ expect.objectContaining({
234
+ op: "remove",
235
+ path: "/inputs/items~11~1label"
236
+ }),
237
+ expect.objectContaining({
238
+ op: "replace",
239
+ path: "/inputs/title/static",
240
+ value: "Changed Title"
241
+ }),
242
+ expect.objectContaining({
243
+ op: "replace",
244
+ path: "/inputs/items~10~1label/static",
245
+ value: "Changed Label 1"
246
+ })
247
+ ]));
248
+ });
249
+ it("applyInputs removes keys missing in new inputs", ()=>{
250
+ const rawBindings = {
251
+ inputs: {
252
+ ...baseBindings.inputs,
253
+ "some/key": {
254
+ id: "someKey",
255
+ static: "toRemove",
256
+ type: "text"
257
+ }
258
+ },
259
+ overrides,
260
+ styles: {}
261
+ };
262
+ const { processor } = getInputsBindingsProcessor(rawBindings);
263
+ const newInputs = {
264
+ title: "Base Title",
265
+ items: [
266
+ {
267
+ label: "Base Label 1"
268
+ },
269
+ {
270
+ label: "Base Label 2"
271
+ }
272
+ ]
273
+ };
274
+ const updater = processor.createUpdate(newInputs, "mobile");
275
+ const rebuilt = {
276
+ bindings: {
277
+ elementId: {
278
+ inputs: {},
279
+ styles: {}
280
+ }
281
+ }
282
+ };
283
+ updater.applyToDocument(rebuilt);
284
+ const elementBindings = rebuilt.bindings.elementId;
285
+ expect(elementBindings.inputs["some/key"]).toBeUndefined();
286
+ });
287
+ it("createUpdate should apply correct changes to the document", ()=>{
288
+ const rawBindings = {
289
+ inputs: baseBindings.inputs,
290
+ overrides,
291
+ styles: {}
292
+ };
293
+ const { processor } = getInputsBindingsProcessor(rawBindings, [
294
+ ...simpleAst,
295
+ ...withSlotAst
296
+ ]);
297
+ const deepInputs = processor.toDeepInputs(rawBindings.inputs);
298
+ deepInputs.items.push({
299
+ label: "New Label 1"
300
+ });
301
+ deepInputs.children = {
302
+ action: "CreateElement",
303
+ params: {
304
+ component: "Webiny/GridColumn"
305
+ }
306
+ };
307
+ const updater = processor.createUpdate(deepInputs, "mobile");
308
+ const rebuilt = {
309
+ bindings: {
310
+ elementId: {
311
+ inputs: {},
312
+ styles: {}
313
+ }
314
+ },
315
+ elements: {}
316
+ };
317
+ updater.applyToDocument(rebuilt);
318
+ expect(rebuilt.bindings.elementId.inputs).toMatchObject({
319
+ title: {
320
+ id: "title",
321
+ static: "Base Title",
322
+ type: "text"
323
+ },
324
+ "items/0/label": {
325
+ id: "label0",
326
+ static: "Base Label 1",
327
+ type: "text"
328
+ },
329
+ "items/1/label": {
330
+ id: "label1",
331
+ static: "Base Label 2",
332
+ type: "text"
333
+ },
334
+ "items/2/label": {
335
+ id: expect.any(String),
336
+ static: "New Label 1",
337
+ type: "text"
338
+ },
339
+ children: {
340
+ id: expect.any(String),
341
+ static: expect.any(String),
342
+ type: "slot"
343
+ }
344
+ });
323
345
  });
324
- });
325
346
  });
326
347
 
327
348
  //# sourceMappingURL=InputsBindingsProcessor.test.js.map