@webiny/website-builder-sdk 6.3.0 → 6.4.0-beta.0

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 (154) 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 -78
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.js +92 -119
  8. package/BindingsResolver.js.map +1 -1
  9. package/BindingsResolver.test.js +399 -363
  10. package/BindingsResolver.test.js.map +1 -1
  11. package/ComponentInputTraverser.js +28 -49
  12. package/ComponentInputTraverser.js.map +1 -1
  13. package/ComponentManifestToAstConverter.js +20 -21
  14. package/ComponentManifestToAstConverter.js.map +1 -1
  15. package/ComponentRegistry.js +26 -45
  16. package/ComponentRegistry.js.map +1 -1
  17. package/ComponentResolver.js +25 -29
  18. package/ComponentResolver.js.map +1 -1
  19. package/ConstraintEvaluator.js +246 -353
  20. package/ConstraintEvaluator.js.map +1 -1
  21. package/ConstraintEvaluator.test.js +1616 -1438
  22. package/ConstraintEvaluator.test.js.map +1 -1
  23. package/ContentSdk.js +83 -90
  24. package/ContentSdk.js.map +1 -1
  25. package/DocumentStore.js +47 -59
  26. package/DocumentStore.js.map +1 -1
  27. package/DocumentStoreManager.js +17 -16
  28. package/DocumentStoreManager.js.map +1 -1
  29. package/EditingSdk.js +87 -121
  30. package/EditingSdk.js.map +1 -1
  31. package/ElementFactory.js +126 -174
  32. package/ElementFactory.js.map +1 -1
  33. package/ElementFactory.test.js +234 -263
  34. package/ElementFactory.test.js.map +1 -1
  35. package/Environment.js +18 -19
  36. package/Environment.js.map +1 -1
  37. package/FunctionConverter.js +8 -7
  38. package/FunctionConverter.js.map +1 -1
  39. package/HashObject.js +11 -26
  40. package/HashObject.js.map +1 -1
  41. package/HotkeyManager.js +40 -47
  42. package/HotkeyManager.js.map +1 -1
  43. package/IBindingsUpdater.js +0 -3
  44. package/IRedirects.js +0 -3
  45. package/InheritanceProcessor.js +99 -139
  46. package/InheritanceProcessor.js.map +1 -1
  47. package/InheritanceProcessor.test.js +178 -179
  48. package/InheritanceProcessor.test.js.map +1 -1
  49. package/InheritedValueResolver.js +15 -20
  50. package/InheritedValueResolver.js.map +1 -1
  51. package/InputBindingsProcessor.js +187 -307
  52. package/InputBindingsProcessor.js.map +1 -1
  53. package/InputsBindingsProcessor.test.js +334 -315
  54. package/InputsBindingsProcessor.test.js.map +1 -1
  55. package/InputsUpdater.js +23 -26
  56. package/InputsUpdater.js.map +1 -1
  57. package/LiveSdk.js +12 -13
  58. package/LiveSdk.js.map +1 -1
  59. package/Logger.js +9 -8
  60. package/Logger.js.map +1 -1
  61. package/MouseTracker.js +77 -83
  62. package/MouseTracker.js.map +1 -1
  63. package/NullSdk.js +22 -21
  64. package/NullSdk.js.map +1 -1
  65. package/PreviewDocument.js +27 -30
  66. package/PreviewDocument.js.map +1 -1
  67. package/PreviewSdk.js +16 -17
  68. package/PreviewSdk.js.map +1 -1
  69. package/PreviewViewport.js +51 -63
  70. package/PreviewViewport.js.map +1 -1
  71. package/ResizeObserver.js +24 -31
  72. package/ResizeObserver.js.map +1 -1
  73. package/StylesBindingsProcessor.js +40 -79
  74. package/StylesBindingsProcessor.js.map +1 -1
  75. package/StylesUpdater.js +20 -25
  76. package/StylesUpdater.js.map +1 -1
  77. package/Theme.js +28 -25
  78. package/Theme.js.map +1 -1
  79. package/ViewportManager.js +89 -101
  80. package/ViewportManager.js.map +1 -1
  81. package/constants.js +7 -6
  82. package/constants.js.map +1 -1
  83. package/createElement.js +5 -6
  84. package/createElement.js.map +1 -1
  85. package/createInput.js +85 -143
  86. package/createInput.js.map +1 -1
  87. package/createTheme.js +2 -3
  88. package/createTheme.js.map +1 -1
  89. package/dataProviders/ApiClient.js +40 -49
  90. package/dataProviders/ApiClient.js.map +1 -1
  91. package/dataProviders/DefaultDataProvider.js +56 -58
  92. package/dataProviders/DefaultDataProvider.js.map +1 -1
  93. package/dataProviders/GET_PAGE_BY_ID.js +2 -1
  94. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  95. package/dataProviders/GET_PAGE_BY_PATH.js +2 -1
  96. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  97. package/dataProviders/LIST_PUBLISHED_PAGES.js +2 -1
  98. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  99. package/dataProviders/NullDataProvider.js +21 -20
  100. package/dataProviders/NullDataProvider.js.map +1 -1
  101. package/dataProviders/RedirectsProvider.js +24 -27
  102. package/dataProviders/RedirectsProvider.js.map +1 -1
  103. package/defaultBreakpoints.js +23 -22
  104. package/defaultBreakpoints.js.map +1 -1
  105. package/documentOperations/$addElementReferenceToParent.js +29 -32
  106. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  107. package/documentOperations/AddElement.js +8 -7
  108. package/documentOperations/AddElement.js.map +1 -1
  109. package/documentOperations/AddToParent.js +14 -13
  110. package/documentOperations/AddToParent.js.map +1 -1
  111. package/documentOperations/IDocumentOperation.js +0 -3
  112. package/documentOperations/RemoveElement.js +9 -15
  113. package/documentOperations/RemoveElement.js.map +1 -1
  114. package/documentOperations/SetGlobalInputBinding.js +23 -22
  115. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  116. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  117. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  118. package/documentOperations/SetInputBindingOverride.js +30 -29
  119. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  120. package/documentOperations/SetStyleBindingOverride.js +30 -31
  121. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  122. package/documentOperations/index.js +9 -8
  123. package/documentOperations/index.js.map +1 -1
  124. package/findMatchingAstNode.js +11 -13
  125. package/findMatchingAstNode.js.map +1 -1
  126. package/generateElementId.js +2 -1
  127. package/generateElementId.js.map +1 -1
  128. package/headersProvider.js +4 -3
  129. package/headersProvider.js.map +1 -1
  130. package/index.js +0 -2
  131. package/jsonPatch.js +5 -9
  132. package/jsonPatch.js.map +1 -1
  133. package/messages.js +12 -11
  134. package/messages.js.map +1 -1
  135. package/messenger/MessageOrigin.js +12 -11
  136. package/messenger/MessageOrigin.js.map +1 -1
  137. package/messenger/Messenger.js +58 -69
  138. package/messenger/Messenger.js.map +1 -1
  139. package/messenger/index.js +0 -2
  140. package/package.json +5 -5
  141. package/registerComponentGroup.js +5 -6
  142. package/registerComponentGroup.js.map +1 -1
  143. package/types/ShorthandCssProperties.js +0 -3
  144. package/types/WebsiteBuilderTheme.js +0 -3
  145. package/types.d.ts +3 -0
  146. package/types.js +0 -3
  147. package/IBindingsUpdater.js.map +0 -1
  148. package/IRedirects.js.map +0 -1
  149. package/documentOperations/IDocumentOperation.js.map +0 -1
  150. package/index.js.map +0 -1
  151. package/messenger/index.js.map +0 -1
  152. package/types/ShorthandCssProperties.js.map +0 -1
  153. package/types/WebsiteBuilderTheme.js.map +0 -1
  154. package/types.js.map +0 -1
package/BindingsApi.js CHANGED
@@ -1,42 +1,35 @@
1
1
  import { createElement } from "./createElement.js";
2
2
  import { StylesBindingsProcessor } from "./StylesBindingsProcessor.js";
3
3
  import { InputsBindingsProcessor } from "./InputBindingsProcessor.js";
4
- // The BindingsApi class manages the transformation and handling of element bindings,
5
- // including inputs and styles, for a document element within the editor.
6
- export class BindingsApi {
7
- inputs = {};
8
- styles = {};
9
- // TODO: refactor to pass inputs and styles processor instead of their deps.
10
-
11
- // Constructs a new BindingsApi instance for a specific element, providing its
12
- // raw and resolved bindings, the input AST, an element factory, and the current breakpoint.
13
- constructor(elementId, rawBindings, resolvedBindings, inputsAst, elementFactory, breakpoint) {
14
- this.breakpoint = breakpoint;
15
- // TODO: improve handling of breakpoints.
16
- this.breakpoints = ["desktop", "tablet", "mobile"];
17
- this.inputsProcessor = new InputsBindingsProcessor(elementId, inputsAst, this.breakpoints, rawBindings, elementFactory);
18
- this.stylesProcessor = new StylesBindingsProcessor(elementId, this.breakpoints, rawBindings);
19
- this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});
20
- this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});
21
- }
22
-
23
- // Returns the public API for this binding context, exposing deep inputs, styles,
24
- // and a function to create elements.
25
- getPublicApi() {
26
- return {
27
- inputs: this.inputs,
28
- styles: this.styles ?? {},
29
- createElement: params => {
30
- return createElement(params);
31
- }
32
- };
33
- }
34
- applyToDocument(document) {
35
- const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);
36
- const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);
37
- inputs.applyToDocument(document);
38
- styles.applyToDocument(document);
39
- }
4
+ class BindingsApi {
5
+ constructor(elementId, rawBindings, resolvedBindings, inputsAst, elementFactory, breakpoint){
6
+ this.inputs = {};
7
+ this.styles = {};
8
+ this.breakpoint = breakpoint;
9
+ this.breakpoints = [
10
+ "desktop",
11
+ "tablet",
12
+ "mobile"
13
+ ];
14
+ this.inputsProcessor = new InputsBindingsProcessor(elementId, inputsAst, this.breakpoints, rawBindings, elementFactory);
15
+ this.stylesProcessor = new StylesBindingsProcessor(elementId, this.breakpoints, rawBindings);
16
+ this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});
17
+ this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});
18
+ }
19
+ getPublicApi() {
20
+ return {
21
+ inputs: this.inputs,
22
+ styles: this.styles ?? {},
23
+ createElement: (params)=>createElement(params)
24
+ };
25
+ }
26
+ applyToDocument(document) {
27
+ const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);
28
+ const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);
29
+ inputs.applyToDocument(document);
30
+ styles.applyToDocument(document);
31
+ }
40
32
  }
33
+ export { BindingsApi };
41
34
 
42
35
  //# sourceMappingURL=BindingsApi.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createElement","StylesBindingsProcessor","InputsBindingsProcessor","BindingsApi","inputs","styles","constructor","elementId","rawBindings","resolvedBindings","inputsAst","elementFactory","breakpoint","breakpoints","inputsProcessor","stylesProcessor","toDeepInputs","toDeepStyles","getPublicApi","params","applyToDocument","document","createUpdate"],"sources":["BindingsApi.ts"],"sourcesContent":["import type { ElementFactory } from \"~/ElementFactory.js\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings, Document } from \"~/types.js\";\nimport { createElement, type CreateElementParams } from \"./createElement.js\";\nimport { StylesBindingsProcessor } from \"~/StylesBindingsProcessor.js\";\nimport { InputsBindingsProcessor } from \"~/InputBindingsProcessor.js\";\n\nexport type FlatBindings = Record<string, Record<string, any>>;\ntype DeepBindings = Record<string, any>;\n\n// The BindingsApi class manages the transformation and handling of element bindings,\n// including inputs and styles, for a document element within the editor.\nexport class BindingsApi {\n public inputs: DeepBindings = {};\n public styles: DeepBindings = {};\n private inputsProcessor: InputsBindingsProcessor;\n private stylesProcessor: StylesBindingsProcessor;\n private breakpoint: string;\n private breakpoints: string[];\n\n // TODO: refactor to pass inputs and styles processor instead of their deps.\n\n // Constructs a new BindingsApi instance for a specific element, providing its\n // raw and resolved bindings, the input AST, an element factory, and the current breakpoint.\n constructor(\n elementId: string,\n rawBindings: DocumentElementBindings,\n resolvedBindings: DocumentElementBindings,\n inputsAst: InputAstNode[],\n elementFactory: ElementFactory,\n breakpoint: string\n ) {\n this.breakpoint = breakpoint;\n // TODO: improve handling of breakpoints.\n this.breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n this.inputsProcessor = new InputsBindingsProcessor(\n elementId,\n inputsAst,\n this.breakpoints,\n rawBindings,\n elementFactory\n );\n this.stylesProcessor = new StylesBindingsProcessor(\n elementId,\n this.breakpoints,\n rawBindings\n );\n this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});\n this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});\n }\n\n // Returns the public API for this binding context, exposing deep inputs, styles,\n // and a function to create elements.\n public getPublicApi() {\n return {\n inputs: this.inputs,\n styles: this.styles ?? {},\n createElement: (params: CreateElementParams) => {\n return createElement(params);\n }\n };\n }\n\n public applyToDocument(document: Document) {\n const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);\n const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);\n\n inputs.applyToDocument(document);\n styles.applyToDocument(document);\n }\n}\n"],"mappings":"AAGA,SAASA,aAAa;AACtB,SAASC,uBAAuB;AAChC,SAASC,uBAAuB;AAKhC;AACA;AACA,OAAO,MAAMC,WAAW,CAAC;EACdC,MAAM,GAAiB,CAAC,CAAC;EACzBC,MAAM,GAAiB,CAAC,CAAC;EAMhC;;EAEA;EACA;EACAC,WAAWA,CACPC,SAAiB,EACjBC,WAAoC,EACpCC,gBAAyC,EACzCC,SAAyB,EACzBC,cAA8B,EAC9BC,UAAkB,EACpB;IACE,IAAI,CAACA,UAAU,GAAGA,UAAU;IAC5B;IACA,IAAI,CAACC,WAAW,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAClD,IAAI,CAACC,eAAe,GAAG,IAAIZ,uBAAuB,CAC9CK,SAAS,EACTG,SAAS,EACT,IAAI,CAACG,WAAW,EAChBL,WAAW,EACXG,cACJ,CAAC;IACD,IAAI,CAACI,eAAe,GAAG,IAAId,uBAAuB,CAC9CM,SAAS,EACT,IAAI,CAACM,WAAW,EAChBL,WACJ,CAAC;IACD,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACP,gBAAgB,CAACL,MAAM,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,CAACC,MAAM,GAAG,IAAI,CAACU,eAAe,CAACE,YAAY,CAACR,gBAAgB,CAACJ,MAAM,IAAI,CAAC,CAAC,CAAC;EAClF;;EAEA;EACA;EACOa,YAAYA,CAAA,EAAG;IAClB,OAAO;MACHd,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,MAAM,EAAE,IAAI,CAACA,MAAM,IAAI,CAAC,CAAC;MACzBL,aAAa,EAAGmB,MAA2B,IAAK;QAC5C,OAAOnB,aAAa,CAACmB,MAAM,CAAC;MAChC;IACJ,CAAC;EACL;EAEOC,eAAeA,CAACC,QAAkB,EAAE;IACvC,MAAMjB,MAAM,GAAG,IAAI,CAACU,eAAe,CAACQ,YAAY,CAAC,IAAI,CAAClB,MAAM,EAAE,IAAI,CAACQ,UAAU,CAAC;IAC9E,MAAMP,MAAM,GAAG,IAAI,CAACU,eAAe,CAACO,YAAY,CAAC,IAAI,CAACjB,MAAM,EAAE,IAAI,CAACO,UAAU,CAAC;IAE9ER,MAAM,CAACgB,eAAe,CAACC,QAAQ,CAAC;IAChChB,MAAM,CAACe,eAAe,CAACC,QAAQ,CAAC;EACpC;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"BindingsApi.js","sources":["../src/BindingsApi.ts"],"sourcesContent":["import type { ElementFactory } from \"~/ElementFactory.js\";\nimport type { InputAstNode } from \"./ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings, Document } from \"~/types.js\";\nimport { createElement, type CreateElementParams } from \"./createElement.js\";\nimport { StylesBindingsProcessor } from \"~/StylesBindingsProcessor.js\";\nimport { InputsBindingsProcessor } from \"~/InputBindingsProcessor.js\";\n\nexport type FlatBindings = Record<string, Record<string, any>>;\ntype DeepBindings = Record<string, any>;\n\n// The BindingsApi class manages the transformation and handling of element bindings,\n// including inputs and styles, for a document element within the editor.\nexport class BindingsApi {\n public inputs: DeepBindings = {};\n public styles: DeepBindings = {};\n private inputsProcessor: InputsBindingsProcessor;\n private stylesProcessor: StylesBindingsProcessor;\n private breakpoint: string;\n private breakpoints: string[];\n\n // TODO: refactor to pass inputs and styles processor instead of their deps.\n\n // Constructs a new BindingsApi instance for a specific element, providing its\n // raw and resolved bindings, the input AST, an element factory, and the current breakpoint.\n constructor(\n elementId: string,\n rawBindings: DocumentElementBindings,\n resolvedBindings: DocumentElementBindings,\n inputsAst: InputAstNode[],\n elementFactory: ElementFactory,\n breakpoint: string\n ) {\n this.breakpoint = breakpoint;\n // TODO: improve handling of breakpoints.\n this.breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n this.inputsProcessor = new InputsBindingsProcessor(\n elementId,\n inputsAst,\n this.breakpoints,\n rawBindings,\n elementFactory\n );\n this.stylesProcessor = new StylesBindingsProcessor(\n elementId,\n this.breakpoints,\n rawBindings\n );\n this.inputs = this.inputsProcessor.toDeepInputs(resolvedBindings.inputs || {});\n this.styles = this.stylesProcessor.toDeepStyles(resolvedBindings.styles || {});\n }\n\n // Returns the public API for this binding context, exposing deep inputs, styles,\n // and a function to create elements.\n public getPublicApi() {\n return {\n inputs: this.inputs,\n styles: this.styles ?? {},\n createElement: (params: CreateElementParams) => {\n return createElement(params);\n }\n };\n }\n\n public applyToDocument(document: Document) {\n const inputs = this.inputsProcessor.createUpdate(this.inputs, this.breakpoint);\n const styles = this.stylesProcessor.createUpdate(this.styles, this.breakpoint);\n\n inputs.applyToDocument(document);\n styles.applyToDocument(document);\n }\n}\n"],"names":["BindingsApi","elementId","rawBindings","resolvedBindings","inputsAst","elementFactory","breakpoint","InputsBindingsProcessor","StylesBindingsProcessor","params","createElement","document","inputs","styles"],"mappings":";;;AAYO,MAAMA;IAYT,YACIC,SAAiB,EACjBC,WAAoC,EACpCC,gBAAyC,EACzCC,SAAyB,EACzBC,cAA8B,EAC9BC,UAAkB,CACpB;aAlBK,MAAM,GAAiB,CAAC;aACxB,MAAM,GAAiB,CAAC;QAkB3B,IAAI,CAAC,UAAU,GAAGA;QAElB,IAAI,CAAC,WAAW,GAAG;YAAC;YAAW;YAAU;SAAS;QAClD,IAAI,CAAC,eAAe,GAAG,IAAIC,wBACvBN,WACAG,WACA,IAAI,CAAC,WAAW,EAChBF,aACAG;QAEJ,IAAI,CAAC,eAAe,GAAG,IAAIG,wBACvBP,WACA,IAAI,CAAC,WAAW,EAChBC;QAEJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAACC,iBAAiB,MAAM,IAAI,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAACA,iBAAiB,MAAM,IAAI,CAAC;IAChF;IAIO,eAAe;QAClB,OAAO;YACH,QAAQ,IAAI,CAAC,MAAM;YACnB,QAAQ,IAAI,CAAC,MAAM,IAAI,CAAC;YACxB,eAAe,CAACM,SACLC,cAAcD;QAE7B;IACJ;IAEO,gBAAgBE,QAAkB,EAAE;QACvC,MAAMC,SAAS,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU;QAC7E,MAAMC,SAAS,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU;QAE7ED,OAAO,eAAe,CAACD;QACvBE,OAAO,eAAe,CAACF;IAC3B;AACJ"}
@@ -1,49 +1,40 @@
1
- export class BindingsProcessor {
2
- constructor(breakpoints) {
3
- this.breakpoints = breakpoints;
4
- }
5
- getBindings(bindings, breakpoint) {
6
- const result = {
7
- $repeat: bindings.$repeat,
8
- inputs: {
9
- ...(bindings.inputs || {})
10
- },
11
- styles: {
12
- ...(bindings.styles || {})
13
- }
14
- };
15
- const overrides = bindings.overrides ?? {};
16
- let upTo = this.breakpoints.indexOf(breakpoint);
17
- if (upTo === -1) {
18
- upTo = 0;
1
+ class BindingsProcessor {
2
+ constructor(breakpoints){
3
+ this.breakpoints = breakpoints;
19
4
  }
20
- for (let i = 0; i <= upTo; i++) {
21
- const bp = this.breakpoints[i];
22
- const override = overrides[bp];
23
- if (!override) {
24
- continue;
25
- }
26
- if (override.inputs) {
27
- for (const key in override.inputs) {
28
- result.inputs[key] = {
29
- ...(result.inputs[key] || {}),
30
- ...override.inputs[key]
31
- };
5
+ getBindings(bindings, breakpoint) {
6
+ const result = {
7
+ $repeat: bindings.$repeat,
8
+ inputs: {
9
+ ...bindings.inputs || {}
10
+ },
11
+ styles: {
12
+ ...bindings.styles || {}
13
+ }
14
+ };
15
+ const overrides = bindings.overrides ?? {};
16
+ let upTo = this.breakpoints.indexOf(breakpoint);
17
+ if (-1 === upTo) upTo = 0;
18
+ for(let i = 0; i <= upTo; i++){
19
+ const bp = this.breakpoints[i];
20
+ const override = overrides[bp];
21
+ if (override) {
22
+ if (override.inputs) for(const key in override.inputs)result.inputs[key] = {
23
+ ...result.inputs[key] || {},
24
+ ...override.inputs[key]
25
+ };
26
+ if (override.styles) for(const styleKey in override.styles){
27
+ const key = styleKey;
28
+ result.styles[key] = {
29
+ ...result.styles[key] || {},
30
+ ...override.styles[key]
31
+ };
32
+ }
33
+ }
32
34
  }
33
- }
34
- if (override.styles) {
35
- for (const styleKey in override.styles) {
36
- const key = styleKey;
37
- // @ts-expect-error It's hard to make CSS properties happy.
38
- result.styles[key] = {
39
- ...(result.styles[key] || {}),
40
- ...override.styles[key]
41
- };
42
- }
43
- }
35
+ return result;
44
36
  }
45
- return result;
46
- }
47
37
  }
38
+ export { BindingsProcessor };
48
39
 
49
40
  //# sourceMappingURL=BindingsProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["BindingsProcessor","constructor","breakpoints","getBindings","bindings","breakpoint","result","$repeat","inputs","styles","overrides","upTo","indexOf","i","bp","override","key","styleKey"],"sources":["BindingsProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings, CssProperties } from \"~/types.js\";\n\ntype RequiredBindings<T extends DocumentElementBindings> = T & {\n inputs: NonNullable<T[\"inputs\"]>;\n styles: NonNullable<T[\"styles\"]>;\n};\n\nexport class BindingsProcessor {\n private readonly breakpoints: string[];\n\n constructor(breakpoints: string[]) {\n this.breakpoints = breakpoints;\n }\n\n public getBindings(bindings: DocumentElementBindings, breakpoint: string) {\n const result: RequiredBindings<DocumentElementBindings> = {\n $repeat: bindings.$repeat,\n inputs: { ...(bindings.inputs || {}) },\n styles: { ...(bindings.styles || {}) }\n };\n\n const overrides = bindings.overrides ?? {};\n\n let upTo = this.breakpoints.indexOf(breakpoint);\n if (upTo === -1) {\n upTo = 0;\n }\n\n for (let i = 0; i <= upTo; i++) {\n const bp = this.breakpoints[i];\n const override = overrides[bp];\n if (!override) {\n continue;\n }\n\n if (override.inputs) {\n for (const key in override.inputs) {\n result.inputs[key] = {\n ...(result.inputs![key] || {}),\n ...override.inputs[key]\n };\n }\n }\n\n if (override.styles) {\n for (const styleKey in override.styles) {\n const key = styleKey as keyof CssProperties;\n // @ts-expect-error It's hard to make CSS properties happy.\n result.styles[key] = {\n ...(result.styles[key] || {}),\n ...override.styles[key]\n };\n }\n }\n }\n\n return result;\n }\n}\n"],"mappings":"AAOA,OAAO,MAAMA,iBAAiB,CAAC;EAG3BC,WAAWA,CAACC,WAAqB,EAAE;IAC/B,IAAI,CAACA,WAAW,GAAGA,WAAW;EAClC;EAEOC,WAAWA,CAACC,QAAiC,EAAEC,UAAkB,EAAE;IACtE,MAAMC,MAAiD,GAAG;MACtDC,OAAO,EAAEH,QAAQ,CAACG,OAAO;MACzBC,MAAM,EAAE;QAAE,IAAIJ,QAAQ,CAACI,MAAM,IAAI,CAAC,CAAC;MAAE,CAAC;MACtCC,MAAM,EAAE;QAAE,IAAIL,QAAQ,CAACK,MAAM,IAAI,CAAC,CAAC;MAAE;IACzC,CAAC;IAED,MAAMC,SAAS,GAAGN,QAAQ,CAACM,SAAS,IAAI,CAAC,CAAC;IAE1C,IAAIC,IAAI,GAAG,IAAI,CAACT,WAAW,CAACU,OAAO,CAACP,UAAU,CAAC;IAC/C,IAAIM,IAAI,KAAK,CAAC,CAAC,EAAE;MACbA,IAAI,GAAG,CAAC;IACZ;IAEA,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIF,IAAI,EAAEE,CAAC,EAAE,EAAE;MAC5B,MAAMC,EAAE,GAAG,IAAI,CAACZ,WAAW,CAACW,CAAC,CAAC;MAC9B,MAAME,QAAQ,GAAGL,SAAS,CAACI,EAAE,CAAC;MAC9B,IAAI,CAACC,QAAQ,EAAE;QACX;MACJ;MAEA,IAAIA,QAAQ,CAACP,MAAM,EAAE;QACjB,KAAK,MAAMQ,GAAG,IAAID,QAAQ,CAACP,MAAM,EAAE;UAC/BF,MAAM,CAACE,MAAM,CAACQ,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACE,MAAM,CAAEQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9B,GAAGD,QAAQ,CAACP,MAAM,CAACQ,GAAG;UAC1B,CAAC;QACL;MACJ;MAEA,IAAID,QAAQ,CAACN,MAAM,EAAE;QACjB,KAAK,MAAMQ,QAAQ,IAAIF,QAAQ,CAACN,MAAM,EAAE;UACpC,MAAMO,GAAG,GAAGC,QAA+B;UAC3C;UACAX,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,GAAG;YACjB,IAAIV,MAAM,CAACG,MAAM,CAACO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7B,GAAGD,QAAQ,CAACN,MAAM,CAACO,GAAG;UAC1B,CAAC;QACL;MACJ;IACJ;IAEA,OAAOV,MAAM;EACjB;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"BindingsProcessor.js","sources":["../src/BindingsProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings, CssProperties } from \"~/types.js\";\n\ntype RequiredBindings<T extends DocumentElementBindings> = T & {\n inputs: NonNullable<T[\"inputs\"]>;\n styles: NonNullable<T[\"styles\"]>;\n};\n\nexport class BindingsProcessor {\n private readonly breakpoints: string[];\n\n constructor(breakpoints: string[]) {\n this.breakpoints = breakpoints;\n }\n\n public getBindings(bindings: DocumentElementBindings, breakpoint: string) {\n const result: RequiredBindings<DocumentElementBindings> = {\n $repeat: bindings.$repeat,\n inputs: { ...(bindings.inputs || {}) },\n styles: { ...(bindings.styles || {}) }\n };\n\n const overrides = bindings.overrides ?? {};\n\n let upTo = this.breakpoints.indexOf(breakpoint);\n if (upTo === -1) {\n upTo = 0;\n }\n\n for (let i = 0; i <= upTo; i++) {\n const bp = this.breakpoints[i];\n const override = overrides[bp];\n if (!override) {\n continue;\n }\n\n if (override.inputs) {\n for (const key in override.inputs) {\n result.inputs[key] = {\n ...(result.inputs![key] || {}),\n ...override.inputs[key]\n };\n }\n }\n\n if (override.styles) {\n for (const styleKey in override.styles) {\n const key = styleKey as keyof CssProperties;\n // @ts-expect-error It's hard to make CSS properties happy.\n result.styles[key] = {\n ...(result.styles[key] || {}),\n ...override.styles[key]\n };\n }\n }\n }\n\n return result;\n }\n}\n"],"names":["BindingsProcessor","breakpoints","bindings","breakpoint","result","overrides","upTo","i","bp","override","key","styleKey"],"mappings":"AAOO,MAAMA;IAGT,YAAYC,WAAqB,CAAE;QAC/B,IAAI,CAAC,WAAW,GAAGA;IACvB;IAEO,YAAYC,QAAiC,EAAEC,UAAkB,EAAE;QACtE,MAAMC,SAAoD;YACtD,SAASF,SAAS,OAAO;YACzB,QAAQ;gBAAE,GAAIA,SAAS,MAAM,IAAI,CAAC,CAAC;YAAE;YACrC,QAAQ;gBAAE,GAAIA,SAAS,MAAM,IAAI,CAAC,CAAC;YAAE;QACzC;QAEA,MAAMG,YAAYH,SAAS,SAAS,IAAI,CAAC;QAEzC,IAAII,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAACH;QACpC,IAAIG,AAAS,OAATA,MACAA,OAAO;QAGX,IAAK,IAAIC,IAAI,GAAGA,KAAKD,MAAMC,IAAK;YAC5B,MAAMC,KAAK,IAAI,CAAC,WAAW,CAACD,EAAE;YAC9B,MAAME,WAAWJ,SAAS,CAACG,GAAG;YAC9B,IAAKC;gBAIL,IAAIA,SAAS,MAAM,EACf,IAAK,MAAMC,OAAOD,SAAS,MAAM,CAC7BL,OAAO,MAAM,CAACM,IAAI,GAAG;oBACjB,GAAIN,OAAO,MAAO,CAACM,IAAI,IAAI,CAAC,CAAC;oBAC7B,GAAGD,SAAS,MAAM,CAACC,IAAI;gBAC3B;gBAIR,IAAID,SAAS,MAAM,EACf,IAAK,MAAME,YAAYF,SAAS,MAAM,CAAE;oBACpC,MAAMC,MAAMC;oBAEZP,OAAO,MAAM,CAACM,IAAI,GAAG;wBACjB,GAAIN,OAAO,MAAM,CAACM,IAAI,IAAI,CAAC,CAAC;wBAC5B,GAAGD,SAAS,MAAM,CAACC,IAAI;oBAC3B;gBACJ;;QAER;QAEA,OAAON;IACX;AACJ"}
@@ -1,87 +1,91 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { BindingsProcessor } from "./BindingsProcessor.js";
3
- describe("BindingsProcessor", () => {
4
- const breakpoints = ["desktop", "tablet", "mobile"];
5
- const processor = new BindingsProcessor(breakpoints);
6
- const bindings = {
7
- inputs: {
8
- title: {
9
- id: "title",
10
- static: "Hello",
11
- type: "text"
12
- },
13
- count: {
14
- id: "count",
15
- static: 1,
16
- type: "number",
17
- expression: "$state.count"
18
- }
19
- },
20
- styles: {
21
- paddingTop: {
22
- static: "10px"
23
- },
24
- backgroundColor: {
25
- static: "white"
26
- }
27
- },
28
- overrides: {
29
- tablet: {
3
+ describe("BindingsProcessor", ()=>{
4
+ const breakpoints = [
5
+ "desktop",
6
+ "tablet",
7
+ "mobile"
8
+ ];
9
+ const processor = new BindingsProcessor(breakpoints);
10
+ const bindings = {
30
11
  inputs: {
31
- title: {
32
- id: "title",
33
- static: "Hello Tablet",
34
- type: "text"
35
- }
12
+ title: {
13
+ id: "title",
14
+ static: "Hello",
15
+ type: "text"
16
+ },
17
+ count: {
18
+ id: "count",
19
+ static: 1,
20
+ type: "number",
21
+ expression: "$state.count"
22
+ }
36
23
  },
37
24
  styles: {
38
- backgroundColor: {
39
- static: "gray"
40
- }
41
- }
42
- },
43
- mobile: {
44
- inputs: {
45
- count: {
46
- id: "count",
47
- static: 3,
48
- type: "number"
49
- }
25
+ paddingTop: {
26
+ static: "10px"
27
+ },
28
+ backgroundColor: {
29
+ static: "white"
30
+ }
50
31
  },
51
- styles: {
52
- paddingTop: {
53
- static: "5px"
54
- }
32
+ overrides: {
33
+ tablet: {
34
+ inputs: {
35
+ title: {
36
+ id: "title",
37
+ static: "Hello Tablet",
38
+ type: "text"
39
+ }
40
+ },
41
+ styles: {
42
+ backgroundColor: {
43
+ static: "gray"
44
+ }
45
+ }
46
+ },
47
+ mobile: {
48
+ inputs: {
49
+ count: {
50
+ id: "count",
51
+ static: 3,
52
+ type: "number"
53
+ }
54
+ },
55
+ styles: {
56
+ paddingTop: {
57
+ static: "5px"
58
+ }
59
+ }
60
+ }
55
61
  }
56
- }
57
- }
58
- };
59
- it("should return unmodified bindings when base breakpoint is specified", () => {
60
- const result = processor.getBindings(bindings, "desktop");
61
- expect(result.inputs).toEqual(bindings.inputs);
62
- expect(result.styles).toEqual(bindings.styles);
63
- });
64
- it("should merge tablet overrides", () => {
65
- const result = processor.getBindings(bindings, "tablet");
66
- expect(result.inputs?.title.static).toBe("Hello Tablet");
67
- expect(result.inputs?.count.static).toBe(1);
68
- expect(result.inputs?.count.expression).toBe("$state.count");
69
- expect(result.styles?.backgroundColor?.static).toBe("gray");
70
- expect(result.styles?.paddingTop?.static).toBe("10px");
71
- });
72
- it("should merge mobile and tablet overrides", () => {
73
- const result = processor.getBindings(bindings, "mobile");
74
- expect(result.inputs?.title.static).toBe("Hello Tablet");
75
- expect(result.inputs?.count.static).toBe(3);
76
- expect(result.inputs?.count.expression).toBe("$state.count");
77
- expect(result.styles?.backgroundColor?.static).toBe("gray");
78
- expect(result.styles?.paddingTop?.static).toBe("5px");
79
- });
80
- it("should ignore unknown breakpoints", () => {
81
- const result = processor.getBindings(bindings, "unknown");
82
- expect(result.inputs).toEqual(bindings.inputs);
83
- expect(result.styles).toEqual(bindings.styles);
84
- });
62
+ };
63
+ it("should return unmodified bindings when base breakpoint is specified", ()=>{
64
+ const result = processor.getBindings(bindings, "desktop");
65
+ expect(result.inputs).toEqual(bindings.inputs);
66
+ expect(result.styles).toEqual(bindings.styles);
67
+ });
68
+ it("should merge tablet overrides", ()=>{
69
+ const result = processor.getBindings(bindings, "tablet");
70
+ expect(result.inputs?.title.static).toBe("Hello Tablet");
71
+ expect(result.inputs?.count.static).toBe(1);
72
+ expect(result.inputs?.count.expression).toBe("$state.count");
73
+ expect(result.styles?.backgroundColor?.static).toBe("gray");
74
+ expect(result.styles?.paddingTop?.static).toBe("10px");
75
+ });
76
+ it("should merge mobile and tablet overrides", ()=>{
77
+ const result = processor.getBindings(bindings, "mobile");
78
+ expect(result.inputs?.title.static).toBe("Hello Tablet");
79
+ expect(result.inputs?.count.static).toBe(3);
80
+ expect(result.inputs?.count.expression).toBe("$state.count");
81
+ expect(result.styles?.backgroundColor?.static).toBe("gray");
82
+ expect(result.styles?.paddingTop?.static).toBe("5px");
83
+ });
84
+ it("should ignore unknown breakpoints", ()=>{
85
+ const result = processor.getBindings(bindings, "unknown");
86
+ expect(result.inputs).toEqual(bindings.inputs);
87
+ expect(result.styles).toEqual(bindings.styles);
88
+ });
85
89
  });
86
90
 
87
91
  //# sourceMappingURL=BindingsProcessor.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","it","expect","BindingsProcessor","breakpoints","processor","bindings","inputs","title","id","static","type","count","expression","styles","paddingTop","backgroundColor","overrides","tablet","mobile","result","getBindings","toEqual","toBe"],"sources":["BindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { BindingsProcessor } from \"./BindingsProcessor.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\n\ndescribe(\"BindingsProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new BindingsProcessor(breakpoints);\n\n const bindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Hello\", type: \"text\" },\n count: { id: \"count\", static: 1, type: \"number\", expression: \"$state.count\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n backgroundColor: { static: \"white\" }\n },\n overrides: {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Hello Tablet\", type: \"text\" }\n },\n styles: {\n backgroundColor: { static: \"gray\" }\n }\n },\n mobile: {\n inputs: {\n count: { id: \"count\", static: 3, type: \"number\" }\n },\n styles: {\n paddingTop: { static: \"5px\" }\n }\n }\n }\n };\n\n it(\"should return unmodified bindings when base breakpoint is specified\", () => {\n const result = processor.getBindings(bindings, \"desktop\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n\n it(\"should merge tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"tablet\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(1);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"10px\");\n });\n\n it(\"should merge mobile and tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"mobile\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(3);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"5px\");\n });\n\n it(\"should ignore unknown breakpoints\", () => {\n const result = processor.getBindings(bindings, \"unknown\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"BindingsProcessor.test.js","sources":["../src/BindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { BindingsProcessor } from \"./BindingsProcessor.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\n\ndescribe(\"BindingsProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new BindingsProcessor(breakpoints);\n\n const bindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Hello\", type: \"text\" },\n count: { id: \"count\", static: 1, type: \"number\", expression: \"$state.count\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n backgroundColor: { static: \"white\" }\n },\n overrides: {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Hello Tablet\", type: \"text\" }\n },\n styles: {\n backgroundColor: { static: \"gray\" }\n }\n },\n mobile: {\n inputs: {\n count: { id: \"count\", static: 3, type: \"number\" }\n },\n styles: {\n paddingTop: { static: \"5px\" }\n }\n }\n }\n };\n\n it(\"should return unmodified bindings when base breakpoint is specified\", () => {\n const result = processor.getBindings(bindings, \"desktop\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n\n it(\"should merge tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"tablet\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(1);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"10px\");\n });\n\n it(\"should merge mobile and tablet overrides\", () => {\n const result = processor.getBindings(bindings, \"mobile\");\n expect(result.inputs?.title.static).toBe(\"Hello Tablet\");\n expect(result.inputs?.count.static).toBe(3);\n expect(result.inputs?.count.expression).toBe(\"$state.count\");\n expect(result.styles?.backgroundColor?.static).toBe(\"gray\");\n expect(result.styles?.paddingTop?.static).toBe(\"5px\");\n });\n\n it(\"should ignore unknown breakpoints\", () => {\n const result = processor.getBindings(bindings, \"unknown\");\n expect(result.inputs).toEqual(bindings.inputs);\n expect(result.styles).toEqual(bindings.styles);\n });\n});\n"],"names":["describe","breakpoints","processor","BindingsProcessor","bindings","it","result","expect"],"mappings":";;AAIAA,SAAS,qBAAqB;IAC1B,MAAMC,cAAc;QAAC;QAAW;QAAU;KAAS;IACnD,MAAMC,YAAY,IAAIC,kBAAkBF;IAExC,MAAMG,WAAoC;QACtC,QAAQ;YACJ,OAAO;gBAAE,IAAI;gBAAS,QAAQ;gBAAS,MAAM;YAAO;YACpD,OAAO;gBAAE,IAAI;gBAAS,QAAQ;gBAAG,MAAM;gBAAU,YAAY;YAAe;QAChF;QACA,QAAQ;YACJ,YAAY;gBAAE,QAAQ;YAAO;YAC7B,iBAAiB;gBAAE,QAAQ;YAAQ;QACvC;QACA,WAAW;YACP,QAAQ;gBACJ,QAAQ;oBACJ,OAAO;wBAAE,IAAI;wBAAS,QAAQ;wBAAgB,MAAM;oBAAO;gBAC/D;gBACA,QAAQ;oBACJ,iBAAiB;wBAAE,QAAQ;oBAAO;gBACtC;YACJ;YACA,QAAQ;gBACJ,QAAQ;oBACJ,OAAO;wBAAE,IAAI;wBAAS,QAAQ;wBAAG,MAAM;oBAAS;gBACpD;gBACA,QAAQ;oBACJ,YAAY;wBAAE,QAAQ;oBAAM;gBAChC;YACJ;QACJ;IACJ;IAEAC,GAAG,uEAAuE;QACtE,MAAMC,SAASJ,UAAU,WAAW,CAACE,UAAU;QAC/CG,OAAOD,OAAO,MAAM,EAAE,OAAO,CAACF,SAAS,MAAM;QAC7CG,OAAOD,OAAO,MAAM,EAAE,OAAO,CAACF,SAAS,MAAM;IACjD;IAEAC,GAAG,iCAAiC;QAChC,MAAMC,SAASJ,UAAU,WAAW,CAACE,UAAU;QAC/CG,OAAOD,OAAO,MAAM,EAAE,MAAM,QAAQ,IAAI,CAAC;QACzCC,OAAOD,OAAO,MAAM,EAAE,MAAM,QAAQ,IAAI,CAAC;QACzCC,OAAOD,OAAO,MAAM,EAAE,MAAM,YAAY,IAAI,CAAC;QAC7CC,OAAOD,OAAO,MAAM,EAAE,iBAAiB,QAAQ,IAAI,CAAC;QACpDC,OAAOD,OAAO,MAAM,EAAE,YAAY,QAAQ,IAAI,CAAC;IACnD;IAEAD,GAAG,4CAA4C;QAC3C,MAAMC,SAASJ,UAAU,WAAW,CAACE,UAAU;QAC/CG,OAAOD,OAAO,MAAM,EAAE,MAAM,QAAQ,IAAI,CAAC;QACzCC,OAAOD,OAAO,MAAM,EAAE,MAAM,QAAQ,IAAI,CAAC;QACzCC,OAAOD,OAAO,MAAM,EAAE,MAAM,YAAY,IAAI,CAAC;QAC7CC,OAAOD,OAAO,MAAM,EAAE,iBAAiB,QAAQ,IAAI,CAAC;QACpDC,OAAOD,OAAO,MAAM,EAAE,YAAY,QAAQ,IAAI,CAAC;IACnD;IAEAD,GAAG,qCAAqC;QACpC,MAAMC,SAASJ,UAAU,WAAW,CAACE,UAAU;QAC/CG,OAAOD,OAAO,MAAM,EAAE,OAAO,CAACF,SAAS,MAAM;QAC7CG,OAAOD,OAAO,MAAM,EAAE,OAAO,CAACF,SAAS,MAAM;IACjD;AACJ"}