@webiny/website-builder-sdk 0.0.0-unstable.6844005670 → 0.0.0-unstable.7be00a75a9

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 (169) 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 -122
  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 +33 -22
  16. package/ComponentRegistry.js.map +1 -1
  17. package/ComponentResolver.js +25 -29
  18. package/ComponentResolver.js.map +1 -1
  19. package/ConstraintEvaluator.d.ts +36 -0
  20. package/ConstraintEvaluator.js +288 -0
  21. package/ConstraintEvaluator.js.map +1 -0
  22. package/ConstraintEvaluator.test.d.ts +1 -0
  23. package/ConstraintEvaluator.test.js +1634 -0
  24. package/ConstraintEvaluator.test.js.map +1 -0
  25. package/ContentSdk.js +83 -90
  26. package/ContentSdk.js.map +1 -1
  27. package/DocumentStore.js +47 -59
  28. package/DocumentStore.js.map +1 -1
  29. package/DocumentStoreManager.js +17 -16
  30. package/DocumentStoreManager.js.map +1 -1
  31. package/EditingSdk.js +87 -121
  32. package/EditingSdk.js.map +1 -1
  33. package/ElementFactory.d.ts +2 -3
  34. package/ElementFactory.js +125 -164
  35. package/ElementFactory.js.map +1 -1
  36. package/ElementFactory.test.d.ts +1 -0
  37. package/ElementFactory.test.js +251 -0
  38. package/ElementFactory.test.js.map +1 -0
  39. package/Environment.js +18 -19
  40. package/Environment.js.map +1 -1
  41. package/FunctionConverter.js +8 -7
  42. package/FunctionConverter.js.map +1 -1
  43. package/HashObject.js +11 -12
  44. package/HashObject.js.map +1 -1
  45. package/HotkeyManager.js +40 -47
  46. package/HotkeyManager.js.map +1 -1
  47. package/IBindingsUpdater.js +0 -3
  48. package/IRedirects.js +0 -3
  49. package/InheritanceProcessor.js +99 -139
  50. package/InheritanceProcessor.js.map +1 -1
  51. package/InheritanceProcessor.test.js +178 -179
  52. package/InheritanceProcessor.test.js.map +1 -1
  53. package/InheritedValueResolver.js +15 -20
  54. package/InheritedValueResolver.js.map +1 -1
  55. package/InputBindingsProcessor.js +187 -289
  56. package/InputBindingsProcessor.js.map +1 -1
  57. package/InputsBindingsProcessor.test.js +334 -314
  58. package/InputsBindingsProcessor.test.js.map +1 -1
  59. package/InputsUpdater.d.ts +1 -1
  60. package/InputsUpdater.js +23 -26
  61. package/InputsUpdater.js.map +1 -1
  62. package/LiveSdk.js +12 -13
  63. package/LiveSdk.js.map +1 -1
  64. package/Logger.js +9 -8
  65. package/Logger.js.map +1 -1
  66. package/MouseTracker.js +77 -83
  67. package/MouseTracker.js.map +1 -1
  68. package/NullSdk.d.ts +3 -2
  69. package/NullSdk.js +22 -21
  70. package/NullSdk.js.map +1 -1
  71. package/PreviewDocument.js +27 -30
  72. package/PreviewDocument.js.map +1 -1
  73. package/PreviewSdk.js +16 -17
  74. package/PreviewSdk.js.map +1 -1
  75. package/PreviewViewport.js +51 -63
  76. package/PreviewViewport.js.map +1 -1
  77. package/ResizeObserver.js +24 -31
  78. package/ResizeObserver.js.map +1 -1
  79. package/StylesBindingsProcessor.js +40 -79
  80. package/StylesBindingsProcessor.js.map +1 -1
  81. package/StylesUpdater.d.ts +1 -1
  82. package/StylesUpdater.js +20 -25
  83. package/StylesUpdater.js.map +1 -1
  84. package/Theme.js +29 -25
  85. package/Theme.js.map +1 -1
  86. package/ViewportManager.js +89 -101
  87. package/ViewportManager.js.map +1 -1
  88. package/constants.d.ts +1 -0
  89. package/constants.js +7 -5
  90. package/constants.js.map +1 -1
  91. package/createElement.js +5 -6
  92. package/createElement.js.map +1 -1
  93. package/createInput.js +85 -143
  94. package/createInput.js.map +1 -1
  95. package/createTheme.js +2 -3
  96. package/createTheme.js.map +1 -1
  97. package/dataProviders/ApiClient.js +40 -49
  98. package/dataProviders/ApiClient.js.map +1 -1
  99. package/dataProviders/DefaultDataProvider.js +56 -58
  100. package/dataProviders/DefaultDataProvider.js.map +1 -1
  101. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
  102. package/dataProviders/GET_PAGE_BY_ID.js +3 -1
  103. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  104. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
  105. package/dataProviders/GET_PAGE_BY_PATH.js +3 -1
  106. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  107. package/dataProviders/LIST_PUBLISHED_PAGES.js +2 -1
  108. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  109. package/dataProviders/NullDataProvider.d.ts +4 -3
  110. package/dataProviders/NullDataProvider.js +21 -20
  111. package/dataProviders/NullDataProvider.js.map +1 -1
  112. package/dataProviders/RedirectsProvider.js +24 -27
  113. package/dataProviders/RedirectsProvider.js.map +1 -1
  114. package/defaultBreakpoints.js +23 -22
  115. package/defaultBreakpoints.js.map +1 -1
  116. package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
  117. package/documentOperations/$addElementReferenceToParent.js +30 -26
  118. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  119. package/documentOperations/AddElement.js +8 -7
  120. package/documentOperations/AddElement.js.map +1 -1
  121. package/documentOperations/AddToParent.d.ts +2 -2
  122. package/documentOperations/AddToParent.js +14 -13
  123. package/documentOperations/AddToParent.js.map +1 -1
  124. package/documentOperations/IDocumentOperation.js +0 -3
  125. package/documentOperations/RemoveElement.js +10 -7
  126. package/documentOperations/RemoveElement.js.map +1 -1
  127. package/documentOperations/SetGlobalInputBinding.js +23 -22
  128. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  129. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  130. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  131. package/documentOperations/SetInputBindingOverride.js +30 -29
  132. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  133. package/documentOperations/SetStyleBindingOverride.js +30 -31
  134. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  135. package/documentOperations/index.js +9 -8
  136. package/documentOperations/index.js.map +1 -1
  137. package/findMatchingAstNode.js +11 -13
  138. package/findMatchingAstNode.js.map +1 -1
  139. package/generateElementId.js +2 -1
  140. package/generateElementId.js.map +1 -1
  141. package/headersProvider.js +4 -3
  142. package/headersProvider.js.map +1 -1
  143. package/index.d.ts +1 -0
  144. package/index.js +1 -2
  145. package/jsonPatch.js +5 -9
  146. package/jsonPatch.js.map +1 -1
  147. package/messages.js +12 -11
  148. package/messages.js.map +1 -1
  149. package/messenger/MessageOrigin.js +12 -11
  150. package/messenger/MessageOrigin.js.map +1 -1
  151. package/messenger/Messenger.js +58 -71
  152. package/messenger/Messenger.js.map +1 -1
  153. package/messenger/index.js +0 -2
  154. package/package.json +14 -14
  155. package/registerComponentGroup.js +5 -6
  156. package/registerComponentGroup.js.map +1 -1
  157. package/types/ShorthandCssProperties.js +0 -3
  158. package/types/WebsiteBuilderTheme.d.ts +7 -0
  159. package/types/WebsiteBuilderTheme.js +0 -3
  160. package/types.d.ts +153 -9
  161. package/types.js +0 -3
  162. package/IBindingsUpdater.js.map +0 -1
  163. package/IRedirects.js.map +0 -1
  164. package/documentOperations/IDocumentOperation.js.map +0 -1
  165. package/index.js.map +0 -1
  166. package/messenger/index.js.map +0 -1
  167. package/types/ShorthandCssProperties.js.map +0 -1
  168. package/types/WebsiteBuilderTheme.js.map +0 -1
  169. 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"}