@webiny/website-builder-sdk 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.e6f0dc8ca7

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 (183) hide show
  1. package/BindingsApi.d.ts +4 -4
  2. package/BindingsApi.js +3 -3
  3. package/BindingsApi.js.map +1 -1
  4. package/BindingsProcessor.d.ts +1 -1
  5. package/BindingsProcessor.js.map +1 -1
  6. package/BindingsProcessor.test.js +2 -1
  7. package/BindingsProcessor.test.js.map +1 -1
  8. package/BindingsResolver.d.ts +2 -2
  9. package/BindingsResolver.js +3 -6
  10. package/BindingsResolver.js.map +1 -1
  11. package/BindingsResolver.test.js +4 -3
  12. package/BindingsResolver.test.js.map +1 -1
  13. package/ComponentInputTraverser.d.ts +1 -1
  14. package/ComponentInputTraverser.js.map +1 -1
  15. package/ComponentManifestToAstConverter.d.ts +1 -1
  16. package/ComponentManifestToAstConverter.js.map +1 -1
  17. package/ComponentRegistry.js +30 -0
  18. package/ComponentRegistry.js.map +1 -1
  19. package/ComponentResolver.d.ts +2 -2
  20. package/ComponentResolver.js +3 -3
  21. package/ComponentResolver.js.map +1 -1
  22. package/ConstraintEvaluator.d.ts +36 -0
  23. package/ConstraintEvaluator.js +395 -0
  24. package/ConstraintEvaluator.js.map +1 -0
  25. package/ConstraintEvaluator.test.d.ts +1 -0
  26. package/ConstraintEvaluator.test.js +1456 -0
  27. package/ConstraintEvaluator.test.js.map +1 -0
  28. package/ContentSdk.d.ts +13 -7
  29. package/ContentSdk.js +26 -10
  30. package/ContentSdk.js.map +1 -1
  31. package/DocumentStore.d.ts +3 -3
  32. package/DocumentStore.js +1 -1
  33. package/DocumentStore.js.map +1 -1
  34. package/DocumentStoreManager.d.ts +2 -2
  35. package/DocumentStoreManager.js +1 -1
  36. package/DocumentStoreManager.js.map +1 -1
  37. package/EditingSdk.d.ts +4 -4
  38. package/EditingSdk.js +12 -15
  39. package/EditingSdk.js.map +1 -1
  40. package/ElementFactory.d.ts +5 -6
  41. package/ElementFactory.js +25 -16
  42. package/ElementFactory.js.map +1 -1
  43. package/ElementFactory.test.d.ts +1 -0
  44. package/ElementFactory.test.js +280 -0
  45. package/ElementFactory.test.js.map +1 -0
  46. package/HashObject.js +14 -0
  47. package/HashObject.js.map +1 -1
  48. package/HotkeyManager.js +1 -1
  49. package/HotkeyManager.js.map +1 -1
  50. package/IBindingsUpdater.d.ts +2 -2
  51. package/IBindingsUpdater.js.map +1 -1
  52. package/IRedirects.d.ts +5 -0
  53. package/IRedirects.js +3 -0
  54. package/IRedirects.js.map +1 -0
  55. package/InheritanceProcessor.d.ts +4 -4
  56. package/InheritanceProcessor.js.map +1 -1
  57. package/InheritanceProcessor.test.js +2 -1
  58. package/InheritanceProcessor.test.js.map +1 -1
  59. package/InheritedValueResolver.d.ts +1 -1
  60. package/InheritedValueResolver.js.map +1 -1
  61. package/InputBindingsProcessor.d.ts +4 -4
  62. package/InputBindingsProcessor.js +29 -11
  63. package/InputBindingsProcessor.js.map +1 -1
  64. package/InputsBindingsProcessor.test.js +4 -2
  65. package/InputsBindingsProcessor.test.js.map +1 -1
  66. package/InputsUpdater.d.ts +5 -5
  67. package/InputsUpdater.js +2 -2
  68. package/InputsUpdater.js.map +1 -1
  69. package/LiveSdk.d.ts +2 -2
  70. package/LiveSdk.js +1 -1
  71. package/LiveSdk.js.map +1 -1
  72. package/Logger.d.ts +2 -1
  73. package/Logger.js +7 -4
  74. package/Logger.js.map +1 -1
  75. package/NullSdk.d.ts +5 -3
  76. package/NullSdk.js +10 -0
  77. package/NullSdk.js.map +1 -1
  78. package/PreviewDocument.js +1 -1
  79. package/PreviewDocument.js.map +1 -1
  80. package/PreviewSdk.d.ts +2 -2
  81. package/PreviewSdk.js +3 -3
  82. package/PreviewSdk.js.map +1 -1
  83. package/PreviewViewport.d.ts +1 -2
  84. package/PreviewViewport.js +1 -21
  85. package/PreviewViewport.js.map +1 -1
  86. package/README.md +10 -2
  87. package/StylesBindingsProcessor.d.ts +2 -2
  88. package/StylesBindingsProcessor.js +4 -4
  89. package/StylesBindingsProcessor.js.map +1 -1
  90. package/StylesUpdater.d.ts +4 -4
  91. package/StylesUpdater.js +2 -2
  92. package/StylesUpdater.js.map +1 -1
  93. package/Theme.d.ts +1 -1
  94. package/Theme.js +6 -11
  95. package/Theme.js.map +1 -1
  96. package/ViewportManager.d.ts +3 -1
  97. package/ViewportManager.js +8 -1
  98. package/ViewportManager.js.map +1 -1
  99. package/constants.d.ts +1 -0
  100. package/constants.js +2 -1
  101. package/constants.js.map +1 -1
  102. package/createElement.d.ts +1 -1
  103. package/createElement.js.map +1 -1
  104. package/createInput.d.ts +124 -16
  105. package/createInput.js +33 -1
  106. package/createInput.js.map +1 -1
  107. package/createTheme.d.ts +2 -1
  108. package/createTheme.js.map +1 -1
  109. package/dataProviders/ApiClient.d.ts +6 -1
  110. package/dataProviders/ApiClient.js +19 -8
  111. package/dataProviders/ApiClient.js.map +1 -1
  112. package/dataProviders/DefaultDataProvider.d.ts +4 -3
  113. package/dataProviders/DefaultDataProvider.js +32 -6
  114. package/dataProviders/DefaultDataProvider.js.map +1 -1
  115. package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
  116. package/dataProviders/GET_PAGE_BY_ID.js +2 -0
  117. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  118. package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
  119. package/dataProviders/GET_PAGE_BY_PATH.js +2 -0
  120. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  121. package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
  122. package/dataProviders/LIST_PUBLISHED_PAGES.js +15 -4
  123. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  124. package/dataProviders/NullDataProvider.d.ts +13 -4
  125. package/dataProviders/NullDataProvider.js +11 -1
  126. package/dataProviders/NullDataProvider.js.map +1 -1
  127. package/dataProviders/RedirectsProvider.d.ts +11 -0
  128. package/dataProviders/RedirectsProvider.js +32 -0
  129. package/dataProviders/RedirectsProvider.js.map +1 -0
  130. package/defaultBreakpoints.d.ts +1 -1
  131. package/defaultBreakpoints.js.map +1 -1
  132. package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
  133. package/documentOperations/$addElementReferenceToParent.js +9 -2
  134. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  135. package/documentOperations/AddElement.d.ts +1 -1
  136. package/documentOperations/AddElement.js.map +1 -1
  137. package/documentOperations/AddToParent.d.ts +3 -3
  138. package/documentOperations/AddToParent.js.map +1 -1
  139. package/documentOperations/RemoveElement.d.ts +1 -1
  140. package/documentOperations/RemoveElement.js +9 -0
  141. package/documentOperations/RemoveElement.js.map +1 -1
  142. package/documentOperations/SetGlobalInputBinding.d.ts +1 -1
  143. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  144. package/documentOperations/SetGlobalStyleBinding.d.ts +1 -1
  145. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  146. package/documentOperations/SetInputBindingOverride.d.ts +1 -1
  147. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  148. package/documentOperations/SetStyleBindingOverride.d.ts +1 -1
  149. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  150. package/documentOperations/index.d.ts +8 -8
  151. package/documentOperations/index.js +7 -7
  152. package/documentOperations/index.js.map +1 -1
  153. package/findMatchingAstNode.d.ts +1 -1
  154. package/findMatchingAstNode.js.map +1 -1
  155. package/generateElementId.d.ts +1 -1
  156. package/generateElementId.js +0 -1
  157. package/generateElementId.js.map +1 -1
  158. package/index.d.ts +3 -3
  159. package/index.js +2 -3
  160. package/index.js.map +1 -1
  161. package/jsonPatch.d.ts +1 -1
  162. package/messenger/Messenger.js +6 -6
  163. package/messenger/Messenger.js.map +1 -1
  164. package/package.json +14 -20
  165. package/registerComponentGroup.d.ts +1 -1
  166. package/registerComponentGroup.js +1 -1
  167. package/registerComponentGroup.js.map +1 -1
  168. package/types/WebsiteBuilderTheme.d.ts +52 -42
  169. package/types/WebsiteBuilderTheme.js.map +1 -1
  170. package/types.d.ts +207 -20
  171. package/types.js.map +1 -1
  172. package/lexical/createDefaultLexicalTheme.d.ts +0 -2
  173. package/lexical/createDefaultLexicalTheme.js +0 -84
  174. package/lexical/createDefaultLexicalTheme.js.map +0 -1
  175. package/lexical/createLexicalTheme.d.ts +0 -2
  176. package/lexical/createLexicalTheme.js +0 -7
  177. package/lexical/createLexicalTheme.js.map +0 -1
  178. package/lexical/deepMerge.d.ts +0 -1
  179. package/lexical/deepMerge.js +0 -23
  180. package/lexical/deepMerge.js.map +0 -1
  181. package/types/LexicalEditorTheme.d.ts +0 -2
  182. package/types/LexicalEditorTheme.js +0 -3
  183. package/types/LexicalEditorTheme.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import type { JsonPatchOperation } from "./jsonPatch";
2
- import type { Document, DocumentElementBindings } from "./types";
1
+ import type { JsonPatchOperation } from "./jsonPatch.js";
2
+ import type { Document, DocumentElementBindings } from "./types.js";
3
3
  export interface IBindingsUpdater {
4
4
  applyToDocument(document: Document): void;
5
5
  createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["IBindingsUpdater.ts"],"sourcesContent":["import type { JsonPatchOperation } from \"~/jsonPatch\";\nimport type { Document, DocumentElementBindings } from \"~/types\";\n\nexport interface IBindingsUpdater {\n applyToDocument(document: Document): void;\n createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["IBindingsUpdater.ts"],"sourcesContent":["import type { JsonPatchOperation } from \"~/jsonPatch.js\";\nimport type { Document, DocumentElementBindings } from \"~/types.js\";\n\nexport interface IBindingsUpdater {\n applyToDocument(document: Document): void;\n createJsonPatch(bindings: DocumentElementBindings): JsonPatchOperation[];\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import type { PublicRedirect } from "./types.js";
2
+ export interface IRedirects {
3
+ getAllRedirects(): Promise<Map<string, PublicRedirect>>;
4
+ getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;
5
+ }
package/IRedirects.js ADDED
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=IRedirects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["IRedirects.ts"],"sourcesContent":["import type { PublicRedirect } from \"~/types.js\";\n\nexport interface IRedirects {\n getAllRedirects(): Promise<Map<string, PublicRedirect>>;\n getRedirectByPath(path: string): Promise<PublicRedirect | undefined>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,5 +1,5 @@
1
- import type { DocumentElementBindings } from "./types";
2
- import type { InputAstNode } from "./ComponentManifestToAstConverter";
1
+ import type { DocumentElementBindings } from "./types.js";
2
+ import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
3
3
  export type InheritanceInfo = {
4
4
  inputs: Record<string, {
5
5
  overridden: boolean;
@@ -17,11 +17,11 @@ export declare class InheritanceProcessor {
17
17
  getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string): {
18
18
  inputs: Record<string, {
19
19
  overridden: boolean;
20
- inheritedFrom?: string | undefined;
20
+ inheritedFrom?: string;
21
21
  }>;
22
22
  styles: Record<string, {
23
23
  overridden: boolean;
24
- inheritedFrom?: string | undefined;
24
+ inheritedFrom?: string;
25
25
  }>;
26
26
  };
27
27
  private normalizeBindingKey;
@@ -1 +1 @@
1
- {"version":3,"names":["InheritanceProcessor","constructor","breakpoints","inputsAst","responsiveInputPaths","getResponsiveInputPaths","getInheritanceMap","bindings","breakpoint","overrides","inputs","styles","upTo","Math","max","indexOf","currentBpIndex","overriddenInputsMap","Map","overriddenStylesMap","i","bp","override","key","has","set","Set","get","add","inputsInheritance","Object","keys","normalizedKey","normalizeBindingKey","isResponsive","lookupKey","overrideIndices","lastOverrideIndex","idx","overridden","inheritedFromIndex","j","inheritedFrom","undefined","stylesInheritance","Array","from","path","replace","responsivePaths","traverse","nodes","prefix","node","currentPath","name","join","input","responsive","children","length"],"sources":["InheritanceProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings } from \"~/types\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter\";\n\nexport type InheritanceInfo = {\n inputs: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n styles: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n};\n\nexport class InheritanceProcessor {\n private breakpoints: string[];\n private responsiveInputPaths: Set<string>;\n\n constructor(breakpoints: string[], inputsAst: InputAstNode[]) {\n this.breakpoints = breakpoints;\n this.responsiveInputPaths = this.getResponsiveInputPaths(inputsAst);\n }\n\n public getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string) {\n const overrides = bindings.overrides ?? {};\n const inputs = bindings.inputs ?? {};\n const styles = bindings.styles ?? {};\n\n const upTo = Math.max(this.breakpoints.indexOf(breakpoint), 0);\n const currentBpIndex = this.breakpoints.indexOf(breakpoint);\n\n // Maps now store sets of all override indices per key for correct ancestor lookup\n const overriddenInputsMap = new Map<string, Set<number>>();\n const overriddenStylesMap = new Map<string, Set<number>>();\n\n // 1) Merge overrides and track all override indices for inputs and styles\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 if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set());\n }\n overriddenInputsMap.get(key)!.add(i);\n }\n }\n if (override.styles) {\n for (const key in override.styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set());\n }\n overriddenStylesMap.get(key)!.add(i);\n }\n }\n }\n\n // Also consider base bindings as overrides at index 0 if not already present\n for (const key in inputs) {\n if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set([0]));\n } else {\n overriddenInputsMap.get(key)!.add(0);\n }\n }\n for (const key in styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set([0]));\n } else {\n overriddenStylesMap.get(key)!.add(0);\n }\n }\n\n // 2) Compute inheritance info for inputs\n const inputsInheritance: InheritanceInfo[\"inputs\"] = {};\n for (const key of Object.keys(inputs)) {\n const normalizedKey = this.normalizeBindingKey(key);\n const isResponsive = this.responsiveInputPaths.has(normalizedKey);\n // Skip non-responsive input keys\n if (!isResponsive) {\n continue;\n }\n\n // If responsive, normalize key to ignore indexes for inheritance checks\n const lookupKey = isResponsive ? normalizedKey : key;\n\n // Find the greatest index <= currentBpIndex where key is overridden\n const overrideIndices = overriddenInputsMap.get(lookupKey) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n // Find nearest ancestor breakpoint less than currentBpIndex\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n inputsInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n // 3) Compute inheritance info for styles\n const stylesInheritance: InheritanceInfo[\"styles\"] = {};\n const keys = new Set([...Object.keys(styles), ...Array.from(overriddenStylesMap.keys())]);\n\n for (const key of keys) {\n const overrideIndices = overriddenStylesMap.get(key) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n stylesInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n return {\n inputs: inputsInheritance,\n styles: stylesInheritance\n };\n }\n\n private normalizeBindingKey(path: string): string {\n return path.replace(/\\[\\d+\\]/g, \"\");\n }\n\n private getResponsiveInputPaths(inputsAst: InputAstNode[]): Set<string> {\n const responsivePaths = new Set<string>();\n\n const traverse = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const currentPath = [...prefix, node.name].join(\"/\");\n if (node.input?.responsive) {\n responsivePaths.add(currentPath);\n }\n if (node.children.length) {\n traverse(node.children, [...prefix, node.name]);\n }\n }\n };\n\n traverse(inputsAst, []);\n return responsivePaths;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["InheritanceProcessor","constructor","breakpoints","inputsAst","responsiveInputPaths","getResponsiveInputPaths","getInheritanceMap","bindings","breakpoint","overrides","inputs","styles","upTo","Math","max","indexOf","currentBpIndex","overriddenInputsMap","Map","overriddenStylesMap","i","bp","override","key","has","set","Set","get","add","inputsInheritance","Object","keys","normalizedKey","normalizeBindingKey","isResponsive","lookupKey","overrideIndices","lastOverrideIndex","idx","overridden","inheritedFromIndex","j","inheritedFrom","undefined","stylesInheritance","Array","from","path","replace","responsivePaths","traverse","nodes","prefix","node","currentPath","name","join","input","responsive","children","length"],"sources":["InheritanceProcessor.ts"],"sourcesContent":["import type { DocumentElementBindings } from \"~/types.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\n\nexport type InheritanceInfo = {\n inputs: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n styles: Record<\n string,\n {\n overridden: boolean;\n inheritedFrom?: string;\n }\n >;\n};\n\nexport class InheritanceProcessor {\n private breakpoints: string[];\n private responsiveInputPaths: Set<string>;\n\n constructor(breakpoints: string[], inputsAst: InputAstNode[]) {\n this.breakpoints = breakpoints;\n this.responsiveInputPaths = this.getResponsiveInputPaths(inputsAst);\n }\n\n public getInheritanceMap(bindings: DocumentElementBindings, breakpoint: string) {\n const overrides = bindings.overrides ?? {};\n const inputs = bindings.inputs ?? {};\n const styles = bindings.styles ?? {};\n\n const upTo = Math.max(this.breakpoints.indexOf(breakpoint), 0);\n const currentBpIndex = this.breakpoints.indexOf(breakpoint);\n\n // Maps now store sets of all override indices per key for correct ancestor lookup\n const overriddenInputsMap = new Map<string, Set<number>>();\n const overriddenStylesMap = new Map<string, Set<number>>();\n\n // 1) Merge overrides and track all override indices for inputs and styles\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 if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set());\n }\n overriddenInputsMap.get(key)!.add(i);\n }\n }\n if (override.styles) {\n for (const key in override.styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set());\n }\n overriddenStylesMap.get(key)!.add(i);\n }\n }\n }\n\n // Also consider base bindings as overrides at index 0 if not already present\n for (const key in inputs) {\n if (!overriddenInputsMap.has(key)) {\n overriddenInputsMap.set(key, new Set([0]));\n } else {\n overriddenInputsMap.get(key)!.add(0);\n }\n }\n for (const key in styles) {\n if (!overriddenStylesMap.has(key)) {\n overriddenStylesMap.set(key, new Set([0]));\n } else {\n overriddenStylesMap.get(key)!.add(0);\n }\n }\n\n // 2) Compute inheritance info for inputs\n const inputsInheritance: InheritanceInfo[\"inputs\"] = {};\n for (const key of Object.keys(inputs)) {\n const normalizedKey = this.normalizeBindingKey(key);\n const isResponsive = this.responsiveInputPaths.has(normalizedKey);\n // Skip non-responsive input keys\n if (!isResponsive) {\n continue;\n }\n\n // If responsive, normalize key to ignore indexes for inheritance checks\n const lookupKey = isResponsive ? normalizedKey : key;\n\n // Find the greatest index <= currentBpIndex where key is overridden\n const overrideIndices = overriddenInputsMap.get(lookupKey) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n // Find nearest ancestor breakpoint less than currentBpIndex\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n inputsInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n // 3) Compute inheritance info for styles\n const stylesInheritance: InheritanceInfo[\"styles\"] = {};\n const keys = new Set([...Object.keys(styles), ...Array.from(overriddenStylesMap.keys())]);\n\n for (const key of keys) {\n const overrideIndices = overriddenStylesMap.get(key) ?? new Set();\n\n let lastOverrideIndex = -1;\n for (const idx of overrideIndices) {\n if (idx <= currentBpIndex && idx > lastOverrideIndex) {\n lastOverrideIndex = idx;\n }\n }\n\n const overridden = lastOverrideIndex === currentBpIndex;\n\n let inheritedFromIndex = 0; // Use `desktop` as fallback.\n for (let j = currentBpIndex - 1; j >= 0; j--) {\n if (overrideIndices.has(j)) {\n inheritedFromIndex = j;\n break;\n }\n }\n\n const inheritedFrom =\n inheritedFromIndex >= 0 ? this.breakpoints[inheritedFromIndex] : undefined;\n\n stylesInheritance[key] = {\n overridden,\n inheritedFrom: breakpoint === inheritedFrom ? undefined : inheritedFrom\n };\n }\n\n return {\n inputs: inputsInheritance,\n styles: stylesInheritance\n };\n }\n\n private normalizeBindingKey(path: string): string {\n return path.replace(/\\[\\d+\\]/g, \"\");\n }\n\n private getResponsiveInputPaths(inputsAst: InputAstNode[]): Set<string> {\n const responsivePaths = new Set<string>();\n\n const traverse = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const currentPath = [...prefix, node.name].join(\"/\");\n if (node.input?.responsive) {\n responsivePaths.add(currentPath);\n }\n if (node.children.length) {\n traverse(node.children, [...prefix, node.name]);\n }\n }\n };\n\n traverse(inputsAst, []);\n return responsivePaths;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,5 @@
1
- import { InheritanceProcessor } from "./InheritanceProcessor";
1
+ import { describe, it, expect } from "vitest";
2
+ import { InheritanceProcessor } from "./InheritanceProcessor.js";
2
3
  // Mock AST for inputs
3
4
  const inputsAst = [{
4
5
  name: "rowGap",
@@ -1 +1 @@
1
- {"version":3,"names":["InheritanceProcessor","inputsAst","name","type","list","path","children","input","responsive","describe","breakpoints","processor","it","bindings","inputs","rowGap","static","title","styles","paddingTop","color","overrides","tablet","mobile","desktopResult","getInheritanceMap","expect","toEqual","overridden","inheritedFrom","undefined","toBeUndefined","tabletResult","mobileResult","result","backgroundColor","marginTop"],"sources":["InheritanceProcessor.test.ts"],"sourcesContent":["import { InheritanceProcessor } from \"./InheritanceProcessor\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter\";\n\n// Mock AST for inputs\nconst inputsAst: InputAstNode[] = [\n {\n name: \"rowGap\",\n type: \"text\",\n list: false,\n path: \"rowGap\",\n children: [],\n input: { type: \"text\", responsive: true, name: \"rowGap\" }\n },\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: { type: \"text\", responsive: false, name: \"title\" }\n }\n];\n\ndescribe(\"InheritanceProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new InheritanceProcessor(breakpoints, inputsAst);\n\n it(\"should correctly compute inheritance info for responsive inputs and styles\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" },\n title: { static: \"Default Title\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n color: { static: \"red\" }\n },\n overrides: {\n tablet: {\n styles: {\n paddingTop: { static: \"5px\" }\n }\n },\n mobile: {\n inputs: {\n rowGap: { static: \"10px\" }\n },\n styles: {\n paddingTop: { static: \"2px\" },\n color: { static: \"blue\" }\n }\n }\n }\n };\n\n // desktop breakpoint\n const desktopResult = processor.getInheritanceMap(bindings as any, \"desktop\");\n\n expect(desktopResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.inputs[\"title\"]).toBeUndefined(); // not responsive\n expect(desktopResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n\n // tablet breakpoint\n const tabletResult = processor.getInheritanceMap(bindings as any, \"tablet\");\n\n expect(tabletResult.inputs[\"rowGap\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"color\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n\n // mobile breakpoint\n const mobileResult = processor.getInheritanceMap(bindings as any, \"mobile\");\n\n expect(mobileResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(mobileResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"tablet\"\n });\n expect(mobileResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should skip non-responsive inputs in inheritance info\", () => {\n const bindings = {\n inputs: {\n title: { static: \"Static Title\" }\n },\n styles: {},\n overrides: {}\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"desktop\");\n expect(result.inputs[\"title\"]).toBeUndefined();\n });\n\n it(\"should handle missing overrides gracefully\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" }\n },\n styles: {\n paddingTop: { static: \"10px\" }\n }\n // no overrides\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.inputs[\"rowGap\"]).toEqual({ overridden: false, inheritedFrom: \"desktop\" });\n expect(result.styles[\"paddingTop\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should handle missing ancestor values gracefully\", () => {\n const bindings = {\n inputs: {},\n styles: {\n backgroundColor: {\n static: \"#ec8787\"\n }\n },\n overrides: {\n tablet: {\n styles: {}\n },\n mobile: {\n styles: {\n backgroundColor: {\n static: \"#50e3c2\"\n },\n marginTop: {\n static: \"122px\"\n }\n }\n }\n }\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.styles[\"backgroundColor\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n\n expect(result.styles[\"marginTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","it","expect","InheritanceProcessor","inputsAst","name","type","list","path","children","input","responsive","breakpoints","processor","bindings","inputs","rowGap","static","title","styles","paddingTop","color","overrides","tablet","mobile","desktopResult","getInheritanceMap","toEqual","overridden","inheritedFrom","undefined","toBeUndefined","tabletResult","mobileResult","result","backgroundColor","marginTop"],"sources":["InheritanceProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { InheritanceProcessor } from \"./InheritanceProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\n\n// Mock AST for inputs\nconst inputsAst: InputAstNode[] = [\n {\n name: \"rowGap\",\n type: \"text\",\n list: false,\n path: \"rowGap\",\n children: [],\n input: { type: \"text\", responsive: true, name: \"rowGap\" }\n },\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: { type: \"text\", responsive: false, name: \"title\" }\n }\n];\n\ndescribe(\"InheritanceProcessor\", () => {\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n const processor = new InheritanceProcessor(breakpoints, inputsAst);\n\n it(\"should correctly compute inheritance info for responsive inputs and styles\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" },\n title: { static: \"Default Title\" }\n },\n styles: {\n paddingTop: { static: \"10px\" },\n color: { static: \"red\" }\n },\n overrides: {\n tablet: {\n styles: {\n paddingTop: { static: \"5px\" }\n }\n },\n mobile: {\n inputs: {\n rowGap: { static: \"10px\" }\n },\n styles: {\n paddingTop: { static: \"2px\" },\n color: { static: \"blue\" }\n }\n }\n }\n };\n\n // desktop breakpoint\n const desktopResult = processor.getInheritanceMap(bindings as any, \"desktop\");\n\n expect(desktopResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.inputs[\"title\"]).toBeUndefined(); // not responsive\n expect(desktopResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n expect(desktopResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: undefined\n });\n\n // tablet breakpoint\n const tabletResult = processor.getInheritanceMap(bindings as any, \"tablet\");\n\n expect(tabletResult.inputs[\"rowGap\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(tabletResult.styles[\"color\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n\n // mobile breakpoint\n const mobileResult = processor.getInheritanceMap(bindings as any, \"mobile\");\n\n expect(mobileResult.inputs[\"rowGap\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n expect(mobileResult.styles[\"paddingTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"tablet\"\n });\n expect(mobileResult.styles[\"color\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should skip non-responsive inputs in inheritance info\", () => {\n const bindings = {\n inputs: {\n title: { static: \"Static Title\" }\n },\n styles: {},\n overrides: {}\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"desktop\");\n expect(result.inputs[\"title\"]).toBeUndefined();\n });\n\n it(\"should handle missing overrides gracefully\", () => {\n const bindings = {\n inputs: {\n rowGap: { static: \"20px\" }\n },\n styles: {\n paddingTop: { static: \"10px\" }\n }\n // no overrides\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.inputs[\"rowGap\"]).toEqual({ overridden: false, inheritedFrom: \"desktop\" });\n expect(result.styles[\"paddingTop\"]).toEqual({\n overridden: false,\n inheritedFrom: \"desktop\"\n });\n });\n\n it(\"should handle missing ancestor values gracefully\", () => {\n const bindings = {\n inputs: {},\n styles: {\n backgroundColor: {\n static: \"#ec8787\"\n }\n },\n overrides: {\n tablet: {\n styles: {}\n },\n mobile: {\n styles: {\n backgroundColor: {\n static: \"#50e3c2\"\n },\n marginTop: {\n static: \"122px\"\n }\n }\n }\n }\n };\n\n const result = processor.getInheritanceMap(bindings as any, \"mobile\");\n expect(result.styles[\"backgroundColor\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n\n expect(result.styles[\"marginTop\"]).toEqual({\n overridden: true,\n inheritedFrom: \"desktop\"\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import type { ValueBinding } from "./types";
1
+ import type { ValueBinding } from "./types.js";
2
2
  export interface GetBreakpointBindings {
3
3
  (breakpoint: string): Record<string, ValueBinding> | undefined;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"names":["InheritedValueResolver","constructor","breakpoints","getBindings","getInheritedValue","key","breakpoint","currentIndex","indexOf","i","bp","bindings","value","static","undefined"],"sources":["InheritedValueResolver.ts"],"sourcesContent":["import type { ValueBinding } from \"~/types\";\n\nexport interface GetBreakpointBindings {\n (breakpoint: string): Record<string, ValueBinding> | undefined;\n}\n\nexport class InheritedValueResolver {\n private readonly breakpoints: string[];\n private readonly getBindings: GetBreakpointBindings;\n\n constructor(breakpoints: string[], getBindings: GetBreakpointBindings) {\n this.breakpoints = breakpoints;\n this.getBindings = getBindings;\n }\n\n getInheritedValue(key: string, breakpoint: string): ValueBinding | undefined {\n const currentIndex = this.breakpoints.indexOf(breakpoint);\n // Walk backwards from currentIndex - 1 to 0\n for (let i = currentIndex - 1; i >= 0; i--) {\n const bp = this.breakpoints[i];\n const bindings = this.getBindings(bp);\n\n if (!bindings) {\n continue;\n }\n\n const value = bindings[key]?.static;\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n }\n}\n"],"mappings":"AAMA,OAAO,MAAMA,sBAAsB,CAAC;EAIhCC,WAAWA,CAACC,WAAqB,EAAEC,WAAkC,EAAE;IACnE,IAAI,CAACD,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,WAAW,GAAGA,WAAW;EAClC;EAEAC,iBAAiBA,CAACC,GAAW,EAAEC,UAAkB,EAA4B;IACzE,MAAMC,YAAY,GAAG,IAAI,CAACL,WAAW,CAACM,OAAO,CAACF,UAAU,CAAC;IACzD;IACA,KAAK,IAAIG,CAAC,GAAGF,YAAY,GAAG,CAAC,EAAEE,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MACxC,MAAMC,EAAE,GAAG,IAAI,CAACR,WAAW,CAACO,CAAC,CAAC;MAC9B,MAAME,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACO,EAAE,CAAC;MAErC,IAAI,CAACC,QAAQ,EAAE;QACX;MACJ;MAEA,MAAMC,KAAK,GAAGD,QAAQ,CAACN,GAAG,CAAC,EAAEQ,MAAM;MACnC,IAAID,KAAK,KAAKE,SAAS,EAAE;QACrB,OAAOF,KAAK;MAChB;IACJ;IACA,OAAOE,SAAS;EACpB;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["InheritedValueResolver","constructor","breakpoints","getBindings","getInheritedValue","key","breakpoint","currentIndex","indexOf","i","bp","bindings","value","static","undefined"],"sources":["InheritedValueResolver.ts"],"sourcesContent":["import type { ValueBinding } from \"~/types.js\";\n\nexport interface GetBreakpointBindings {\n (breakpoint: string): Record<string, ValueBinding> | undefined;\n}\n\nexport class InheritedValueResolver {\n private readonly breakpoints: string[];\n private readonly getBindings: GetBreakpointBindings;\n\n constructor(breakpoints: string[], getBindings: GetBreakpointBindings) {\n this.breakpoints = breakpoints;\n this.getBindings = getBindings;\n }\n\n getInheritedValue(key: string, breakpoint: string): ValueBinding | undefined {\n const currentIndex = this.breakpoints.indexOf(breakpoint);\n // Walk backwards from currentIndex - 1 to 0\n for (let i = currentIndex - 1; i >= 0; i--) {\n const bp = this.breakpoints[i];\n const bindings = this.getBindings(bp);\n\n if (!bindings) {\n continue;\n }\n\n const value = bindings[key]?.static;\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n }\n}\n"],"mappings":"AAMA,OAAO,MAAMA,sBAAsB,CAAC;EAIhCC,WAAWA,CAACC,WAAqB,EAAEC,WAAkC,EAAE;IACnE,IAAI,CAACD,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,WAAW,GAAGA,WAAW;EAClC;EAEAC,iBAAiBA,CAACC,GAAW,EAAEC,UAAkB,EAA4B;IACzE,MAAMC,YAAY,GAAG,IAAI,CAACL,WAAW,CAACM,OAAO,CAACF,UAAU,CAAC;IACzD;IACA,KAAK,IAAIG,CAAC,GAAGF,YAAY,GAAG,CAAC,EAAEE,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MACxC,MAAMC,EAAE,GAAG,IAAI,CAACR,WAAW,CAACO,CAAC,CAAC;MAC9B,MAAME,QAAQ,GAAG,IAAI,CAACR,WAAW,CAACO,EAAE,CAAC;MAErC,IAAI,CAACC,QAAQ,EAAE;QACX;MACJ;MAEA,MAAMC,KAAK,GAAGD,QAAQ,CAACN,GAAG,CAAC,EAAEQ,MAAM;MACnC,IAAID,KAAK,KAAKE,SAAS,EAAE;QACrB,OAAOF,KAAK;MAChB;IACJ;IACA,OAAOE,SAAS;EACpB;AACJ","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import type { DocumentElementBindings, DocumentElementInputBindings } from "./types";
2
- import type { InputAstNode } from "./ComponentManifestToAstConverter";
3
- import type { ElementFactory } from "./ElementFactory";
4
- import { InputsUpdater } from "./InputsUpdater";
1
+ import type { DocumentElementBindings, DocumentElementInputBindings } from "./types.js";
2
+ import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
3
+ import type { ElementFactory } from "./ElementFactory.js";
4
+ import { InputsUpdater } from "./InputsUpdater.js";
5
5
  type DeepBindings = Record<string, any>;
6
6
  export type ElementInputsBindings = {
7
7
  inputs: DocumentElementInputBindings;
@@ -1,9 +1,9 @@
1
1
  import deepEqual from "deep-equal";
2
- import set from "lodash/set";
3
- import { InheritedValueResolver } from "./InheritedValueResolver";
4
- import { DocumentOperations } from "./documentOperations";
5
- import { InputsUpdater } from "./InputsUpdater";
6
- import { generateElementId } from "./generateElementId";
2
+ import set from "lodash/set.js";
3
+ import { InheritedValueResolver } from "./InheritedValueResolver.js";
4
+ import { DocumentOperations } from "./documentOperations/index.js";
5
+ import { InputsUpdater } from "./InputsUpdater.js";
6
+ import { generateElementId } from "./generateElementId.js";
7
7
  /**
8
8
  * Handles deep-to-flat and flat-to-deep conversion of input bindings,
9
9
  * with breakpoint inheritance awareness.
@@ -163,7 +163,7 @@ export class InputsBindingsProcessor {
163
163
  // Leaf node (primitive or slot) processing
164
164
 
165
165
  // Get current new value from deep inputs
166
- const newValue = getValue(inputs, flatKey);
166
+ let newValue = getValue(inputs, flatKey);
167
167
 
168
168
  // Get original binding entry for this path
169
169
  const originalEntry = originalInputs[flatKey];
@@ -172,8 +172,26 @@ export class InputsBindingsProcessor {
172
172
  if (newValue === undefined && !originalEntry) {
173
173
  continue;
174
174
  }
175
- if (typeof newValue === "object" && newValue?.action === "CreateElement") {
176
- // Handle CreateElement action by generating element and operations
175
+
176
+ // For list slots, process CreateElement items within the array.
177
+ if (node.list && Array.isArray(newValue)) {
178
+ newValue = newValue.map(item => {
179
+ if (typeof item === "object" && item !== null && item.action === "CreateElement") {
180
+ const newElement = this.elementFactory.createElementFromComponent({
181
+ componentName: item.params.component,
182
+ parentId: this.elementId,
183
+ slot: flatKey,
184
+ bindings: item.params
185
+ });
186
+ // Skip AddToParent — this processor manages the binding array.
187
+ operations.push(...newElement.operations.filter(op => !(op instanceof DocumentOperations.AddToParent)));
188
+ return newElement.element.id;
189
+ }
190
+ return item;
191
+ });
192
+ }
193
+ if (!Array.isArray(newValue) && typeof newValue === "object" && newValue?.action === "CreateElement") {
194
+ // Handle single (non-list) CreateElement action
177
195
  const newElement = this.elementFactory.createElementFromComponent({
178
196
  componentName: newValue.params.component,
179
197
  parentId: this.elementId,
@@ -189,7 +207,7 @@ export class InputsBindingsProcessor {
189
207
 
190
208
  // Build binding for the new element id(s)
191
209
  const binding = {
192
- static: node.list ? [createdId] : createdId,
210
+ static: createdId,
193
211
  type: node.type,
194
212
  list: node.list,
195
213
  id: idToUse
@@ -221,8 +239,8 @@ export class InputsBindingsProcessor {
221
239
  rebuilt.inputs[flatKey] = binding;
222
240
  }
223
241
 
224
- // Add generated operations for this element creation
225
- operations.push(...newElement.operations);
242
+ // Skip AddToParent this processor manages the binding directly.
243
+ operations.push(...newElement.operations.filter(op => !(op instanceof DocumentOperations.AddToParent)));
226
244
  } else {
227
245
  // Normal value update
228
246
  const isResponsive = node.input?.responsive && !this.isBaseBreakpoint(breakpoint);
@@ -1 +1 @@
1
- {"version":3,"names":["deepEqual","set","InheritedValueResolver","DocumentOperations","InputsUpdater","generateElementId","InputsBindingsProcessor","constructor","elementId","inputsAst","breakpoints","rawBindings","elementFactory","elementReferences","getElementReferences","inputs","toDeepInputs","flat","result","assignValue","path","value","current","i","length","key","nextKey","isNextIndex","Array","isArray","Error","push","walk","nodes","prefix","node","pathParts","name","flatKey","join","entry","staticValue","static","children","list","pattern","RegExp","indexes","Object","keys","reduce","acc","match","parseInt","uniqueIndexes","from","Set","sort","a","b","undefined","part","Number","createUpdate","breakpoint","operations","originalInputs","rebuilt","overrides","bp","entries","structuredClone","seenPaths","valueResolver","isBaseBreakpoint","getValue","obj","segments","split","flatMap","segment","map","test","compareAndCollect","add","slice","newValue","originalEntry","action","newElement","createElementFromComponent","componentName","params","component","parentId","slot","index","bindings","createdId","element","id","existingId","idToUse","binding","type","input","responsive","inheritedValue","getInheritedValue","isResponsive","usedSlotIds","has","RemoveElement","references","forEach","indexOf"],"sources":["InputBindingsProcessor.ts"],"sourcesContent":["import deepEqual from \"deep-equal\";\nimport set from \"lodash/set\";\nimport type { DocumentElementBindings, DocumentElementInputBindings } from \"~/types\";\nimport { InheritedValueResolver } from \"~/InheritedValueResolver\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter\";\nimport { DocumentOperations, type IDocumentOperation } from \"~/documentOperations\";\nimport type { ElementFactory } from \"~/ElementFactory\";\nimport { InputsUpdater } from \"~/InputsUpdater\";\nimport { generateElementId } from \"./generateElementId\";\ntype DeepBindings = Record<string, any>;\n\nexport type ElementInputsBindings = {\n inputs: DocumentElementInputBindings;\n overrides: {\n [breakpoint: string]: {\n inputs: DocumentElementInputBindings;\n };\n };\n};\n\n/**\n * Handles deep-to-flat and flat-to-deep conversion of input bindings,\n * with breakpoint inheritance awareness.\n */\nexport class InputsBindingsProcessor {\n private breakpoints: string[];\n private rawBindings: DocumentElementBindings;\n private elementFactory: ElementFactory;\n private elementId: string;\n private inputsAst: InputAstNode[];\n private elementReferences: Set<string>;\n\n constructor(\n elementId: string,\n inputsAst: InputAstNode[],\n breakpoints: string[],\n rawBindings: DocumentElementBindings,\n elementFactory: ElementFactory\n ) {\n this.elementId = elementId;\n this.inputsAst = inputsAst;\n this.breakpoints = breakpoints;\n this.rawBindings = rawBindings;\n this.elementFactory = elementFactory;\n this.elementReferences = this.getElementReferences(rawBindings.inputs);\n }\n\n /**\n * Converts flat input bindings into deep inputs object (removes `.static` wrappers).\n */\n public toDeepInputs(flat: NonNullable<DocumentElementBindings[\"inputs\"]>): DeepBindings {\n const result: DeepBindings = {};\n\n // Assigns a value to a nested path within the result object, creating arrays/objects as needed.\n const assignValue = (path: (string | number)[], value: any) => {\n let current = result;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n const nextKey = path[i + 1];\n const isNextIndex = typeof nextKey === \"number\";\n\n if (typeof key === \"number\") {\n if (!Array.isArray(current)) {\n throw new Error(\"Expected array in path assignment.\");\n }\n while (current.length <= key) {\n current.push(isNextIndex ? [] : {});\n }\n if (typeof current[key] !== \"object\") {\n current[key] = isNextIndex ? [] : {};\n }\n current = current[key];\n } else {\n if (!(key in current) || typeof current[key] !== \"object\") {\n current[key] = isNextIndex ? [] : {};\n }\n current = current[key];\n }\n }\n current[path[path.length - 1]] = value;\n };\n\n // Recursively walks the AST and assigns values from flat bindings to the nested result.\n const walk = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const flatKey = pathParts.join(\"/\");\n const entry = flat[flatKey];\n const staticValue = entry?.static;\n\n if (node.children.length > 0) {\n if (node.list) {\n const pattern = new RegExp(`^${flatKey}\\\\/(\\\\d+)\\\\/`);\n const indexes = Object.keys(flat).reduce((acc: number[], key) => {\n const match = key.match(pattern);\n if (match) {\n acc.push(parseInt(match[1], 10));\n }\n return acc;\n }, []);\n\n const uniqueIndexes = Array.from(new Set(indexes)).sort((a, b) => a - b);\n\n for (const i of uniqueIndexes) {\n walk(node.children, [...prefix, `${node.name}/${i}`]);\n }\n } else {\n walk(node.children, pathParts);\n }\n } else if (staticValue !== undefined) {\n const path = pathParts.reduce<(string | number)[]>((acc, part) => {\n const match = part.match(/(.*?)\\/(\\d+)/);\n if (match) {\n acc.push(match[1], Number(match[2]));\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n assignValue(path, staticValue);\n }\n }\n };\n\n walk(this.inputsAst, []);\n return result;\n }\n\n /**\n * Flattens deep inputs object into flat bindings with `.static` wrappers,\n * skipping overrides that match inherited parent breakpoint values.\n */\n public createUpdate(inputs: DeepBindings, breakpoint: string) {\n const operations: IDocumentOperation[] = [];\n const originalInputs = this.rawBindings.inputs ?? {};\n\n const rebuilt: ElementInputsBindings = { inputs: {}, overrides: {} };\n\n // Clone existing overrides if present, to avoid losing breakpoint overrides\n if (this.rawBindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.rawBindings.overrides)) {\n if (overrides.inputs) {\n set(\n rebuilt,\n `overrides.${bp}.inputs`,\n structuredClone(this.rawBindings.overrides[bp].inputs)\n );\n }\n }\n }\n\n // Set to track which flat binding paths we've processed during traversal\n const seenPaths = new Set<string>();\n const valueResolver = new InheritedValueResolver(this.breakpoints, bp => {\n if (this.isBaseBreakpoint(bp)) {\n return this.rawBindings.inputs;\n }\n return this.rawBindings.overrides?.[bp]?.inputs;\n });\n\n // Extracts a nested value from an object based on a flat string path.\n // Supports array indexes like 'rows/0/columns/1/children'.\n const getValue = (obj: any, path: string): any => {\n const segments = path.split(\"/\");\n const keys = segments.flatMap(segment => {\n return segment.split(\".\").map(part => {\n return /^\\d+$/.test(part) ? parseInt(part, 10) : part;\n });\n });\n return keys.reduce((acc, key) => (acc ? acc[key] : undefined), obj);\n };\n\n // Recursively traverses the AST nodes, comparing new input values with original bindings.\n // Collects changed values into 'rebuilt' and generates operations for new elements.\n const compareAndCollect = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const flatKey = pathParts.join(\"/\");\n\n // Mark this path as seen\n seenPaths.add(flatKey);\n\n if (node.children.length) {\n if (node.list) {\n // For list nodes, process each indexed item separately\n const list = getValue(inputs, flatKey);\n if (Array.isArray(list)) {\n for (let i = 0; i < list.length; i++) {\n // Recurse with indexed path like 'rows[0]', 'rows[1]'\n compareAndCollect(node.children, [\n ...pathParts.slice(0, -1),\n `${node.name}/${i}`\n ]);\n }\n }\n } else {\n // For single object nodes, recurse normally\n compareAndCollect(node.children, pathParts);\n }\n } else {\n // Leaf node (primitive or slot) processing\n\n // Get current new value from deep inputs\n const newValue = getValue(inputs, flatKey);\n\n // Get original binding entry for this path\n const originalEntry = originalInputs[flatKey];\n\n // Skip if newValue is undefined and no original entry\n if (newValue === undefined && !originalEntry) {\n continue;\n }\n\n if (typeof newValue === \"object\" && newValue?.action === \"CreateElement\") {\n // Handle CreateElement action by generating element and operations\n const newElement = this.elementFactory.createElementFromComponent({\n componentName: newValue.params.component,\n parentId: this.elementId,\n slot: flatKey,\n index: -1,\n bindings: newValue.params\n });\n\n const createdId = newElement.element.id;\n\n // Assign or generate a stable unique id for the binding\n const existingId = originalEntry?.id;\n const idToUse = existingId ?? generateElementId();\n\n // Build binding for the new element id(s)\n const binding = {\n static: node.list ? [createdId] : createdId,\n type: node.type,\n list: node.list,\n id: idToUse\n };\n\n if (node.input?.responsive && !this.isBaseBreakpoint(breakpoint)) {\n const inheritedValue = valueResolver.getInheritedValue(\n flatKey,\n breakpoint\n );\n\n if (binding.static === undefined) {\n // Unset override\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n } else if (\n inheritedValue === undefined ||\n !deepEqual(inheritedValue, binding.static)\n ) {\n if (!rebuilt.overrides[breakpoint]) {\n rebuilt.overrides[breakpoint] = { inputs: {} };\n }\n rebuilt.overrides[breakpoint].inputs[flatKey] = binding;\n } else {\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n }\n\n if (originalEntry) {\n rebuilt.inputs[flatKey] = originalEntry;\n }\n } else {\n // Normal case: update base inputs\n rebuilt.inputs[flatKey] = binding;\n }\n\n // Add generated operations for this element creation\n operations.push(...newElement.operations);\n } else {\n // Normal value update\n const isResponsive =\n node.input?.responsive && !this.isBaseBreakpoint(breakpoint);\n\n // Assign or generate a stable unique id for the binding\n const existingId = originalEntry?.id;\n const idToUse = existingId ?? generateElementId();\n\n // Merge existing original entry data with updated static value\n const binding = {\n ...(originalEntry ?? {}),\n static: newValue,\n type: node.type,\n list: node.list,\n id: idToUse\n };\n\n if (isResponsive) {\n const inheritedValue = valueResolver.getInheritedValue(\n flatKey,\n breakpoint\n );\n\n if (binding.static === undefined) {\n // Unset override\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n } else if (\n inheritedValue === undefined ||\n !deepEqual(inheritedValue, binding.static)\n ) {\n if (!rebuilt.overrides[breakpoint]) {\n rebuilt.overrides[breakpoint] = { inputs: {} };\n }\n rebuilt.overrides[breakpoint].inputs[flatKey] = binding;\n } else {\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n }\n\n if (originalEntry) {\n rebuilt.inputs[flatKey] = originalEntry;\n }\n } else {\n // Base binding update\n rebuilt.inputs[flatKey] = binding;\n }\n }\n }\n }\n };\n\n // Start the AST traversal and collection.\n compareAndCollect(this.inputsAst, []);\n\n // Identify elements referenced in slots that were removed since last state,\n // and queue their removal.\n const usedSlotIds = this.getElementReferences(rebuilt.inputs);\n for (const id of this.elementReferences) {\n if (!usedSlotIds.has(id)) {\n operations.push(new DocumentOperations.RemoveElement(id));\n }\n }\n\n return new InputsUpdater(this.elementId, rebuilt, operations);\n }\n\n // Returns a set of element IDs referenced in slot bindings within the provided inputs.\n private getElementReferences(inputs: DocumentElementBindings[\"inputs\"] = {}) {\n const references = new Set<string>();\n\n for (const [, binding] of Object.entries(inputs)) {\n if (binding.type === \"slot\") {\n if (Array.isArray(binding.static)) {\n ((binding.static ?? []) as string[]).forEach(id => references.add(id));\n } else if (typeof binding.static === \"string\") {\n references.add(binding.static);\n }\n }\n }\n\n return references;\n }\n\n private isBaseBreakpoint(name: string): boolean {\n return this.breakpoints.indexOf(name) === 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["deepEqual","set","InheritedValueResolver","DocumentOperations","InputsUpdater","generateElementId","InputsBindingsProcessor","constructor","elementId","inputsAst","breakpoints","rawBindings","elementFactory","elementReferences","getElementReferences","inputs","toDeepInputs","flat","result","assignValue","path","value","current","i","length","key","nextKey","isNextIndex","Array","isArray","Error","push","walk","nodes","prefix","node","pathParts","name","flatKey","join","entry","staticValue","static","children","list","pattern","RegExp","indexes","Object","keys","reduce","acc","match","parseInt","uniqueIndexes","from","Set","sort","a","b","undefined","part","Number","createUpdate","breakpoint","operations","originalInputs","rebuilt","overrides","bp","entries","structuredClone","seenPaths","valueResolver","isBaseBreakpoint","getValue","obj","segments","split","flatMap","segment","map","test","compareAndCollect","add","slice","newValue","originalEntry","item","action","newElement","createElementFromComponent","componentName","params","component","parentId","slot","bindings","filter","op","AddToParent","element","id","index","createdId","existingId","idToUse","binding","type","input","responsive","inheritedValue","getInheritedValue","isResponsive","usedSlotIds","has","RemoveElement","references","forEach","indexOf"],"sources":["InputBindingsProcessor.ts"],"sourcesContent":["import deepEqual from \"deep-equal\";\nimport set from \"lodash/set.js\";\nimport type { DocumentElementBindings, DocumentElementInputBindings } from \"~/types.js\";\nimport { InheritedValueResolver } from \"~/InheritedValueResolver.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport { DocumentOperations, type IDocumentOperation } from \"~/documentOperations/index.js\";\nimport type { ElementFactory } from \"~/ElementFactory.js\";\nimport { InputsUpdater } from \"~/InputsUpdater.js\";\nimport { generateElementId } from \"./generateElementId.js\";\ntype DeepBindings = Record<string, any>;\n\nexport type ElementInputsBindings = {\n inputs: DocumentElementInputBindings;\n overrides: {\n [breakpoint: string]: {\n inputs: DocumentElementInputBindings;\n };\n };\n};\n\n/**\n * Handles deep-to-flat and flat-to-deep conversion of input bindings,\n * with breakpoint inheritance awareness.\n */\nexport class InputsBindingsProcessor {\n private breakpoints: string[];\n private rawBindings: DocumentElementBindings;\n private elementFactory: ElementFactory;\n private elementId: string;\n private inputsAst: InputAstNode[];\n private elementReferences: Set<string>;\n\n constructor(\n elementId: string,\n inputsAst: InputAstNode[],\n breakpoints: string[],\n rawBindings: DocumentElementBindings,\n elementFactory: ElementFactory\n ) {\n this.elementId = elementId;\n this.inputsAst = inputsAst;\n this.breakpoints = breakpoints;\n this.rawBindings = rawBindings;\n this.elementFactory = elementFactory;\n this.elementReferences = this.getElementReferences(rawBindings.inputs);\n }\n\n /**\n * Converts flat input bindings into deep inputs object (removes `.static` wrappers).\n */\n public toDeepInputs(flat: NonNullable<DocumentElementBindings[\"inputs\"]>): DeepBindings {\n const result: DeepBindings = {};\n\n // Assigns a value to a nested path within the result object, creating arrays/objects as needed.\n const assignValue = (path: (string | number)[], value: any) => {\n let current = result;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n const nextKey = path[i + 1];\n const isNextIndex = typeof nextKey === \"number\";\n\n if (typeof key === \"number\") {\n if (!Array.isArray(current)) {\n throw new Error(\"Expected array in path assignment.\");\n }\n while (current.length <= key) {\n current.push(isNextIndex ? [] : {});\n }\n if (typeof current[key] !== \"object\") {\n current[key] = isNextIndex ? [] : {};\n }\n current = current[key];\n } else {\n if (!(key in current) || typeof current[key] !== \"object\") {\n current[key] = isNextIndex ? [] : {};\n }\n current = current[key];\n }\n }\n current[path[path.length - 1]] = value;\n };\n\n // Recursively walks the AST and assigns values from flat bindings to the nested result.\n const walk = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const flatKey = pathParts.join(\"/\");\n const entry = flat[flatKey];\n const staticValue = entry?.static;\n\n if (node.children.length > 0) {\n if (node.list) {\n const pattern = new RegExp(`^${flatKey}\\\\/(\\\\d+)\\\\/`);\n const indexes = Object.keys(flat).reduce((acc: number[], key) => {\n const match = key.match(pattern);\n if (match) {\n acc.push(parseInt(match[1], 10));\n }\n return acc;\n }, []);\n\n const uniqueIndexes = Array.from(new Set(indexes)).sort((a, b) => a - b);\n\n for (const i of uniqueIndexes) {\n walk(node.children, [...prefix, `${node.name}/${i}`]);\n }\n } else {\n walk(node.children, pathParts);\n }\n } else if (staticValue !== undefined) {\n const path = pathParts.reduce<(string | number)[]>((acc, part) => {\n const match = part.match(/(.*?)\\/(\\d+)/);\n if (match) {\n acc.push(match[1], Number(match[2]));\n } else {\n acc.push(part);\n }\n return acc;\n }, []);\n assignValue(path, staticValue);\n }\n }\n };\n\n walk(this.inputsAst, []);\n return result;\n }\n\n /**\n * Flattens deep inputs object into flat bindings with `.static` wrappers,\n * skipping overrides that match inherited parent breakpoint values.\n */\n public createUpdate(inputs: DeepBindings, breakpoint: string) {\n const operations: IDocumentOperation[] = [];\n const originalInputs = this.rawBindings.inputs ?? {};\n\n const rebuilt: ElementInputsBindings = { inputs: {}, overrides: {} };\n\n // Clone existing overrides if present, to avoid losing breakpoint overrides\n if (this.rawBindings.overrides) {\n for (const [bp, overrides] of Object.entries(this.rawBindings.overrides)) {\n if (overrides.inputs) {\n set(\n rebuilt,\n `overrides.${bp}.inputs`,\n structuredClone(this.rawBindings.overrides[bp].inputs)\n );\n }\n }\n }\n\n // Set to track which flat binding paths we've processed during traversal\n const seenPaths = new Set<string>();\n const valueResolver = new InheritedValueResolver(this.breakpoints, bp => {\n if (this.isBaseBreakpoint(bp)) {\n return this.rawBindings.inputs;\n }\n return this.rawBindings.overrides?.[bp]?.inputs;\n });\n\n // Extracts a nested value from an object based on a flat string path.\n // Supports array indexes like 'rows/0/columns/1/children'.\n const getValue = (obj: any, path: string): any => {\n const segments = path.split(\"/\");\n const keys = segments.flatMap(segment => {\n return segment.split(\".\").map(part => {\n return /^\\d+$/.test(part) ? parseInt(part, 10) : part;\n });\n });\n return keys.reduce((acc, key) => (acc ? acc[key] : undefined), obj);\n };\n\n // Recursively traverses the AST nodes, comparing new input values with original bindings.\n // Collects changed values into 'rebuilt' and generates operations for new elements.\n const compareAndCollect = (nodes: InputAstNode[], prefix: string[]) => {\n for (const node of nodes) {\n const pathParts = [...prefix, node.name];\n const flatKey = pathParts.join(\"/\");\n\n // Mark this path as seen\n seenPaths.add(flatKey);\n\n if (node.children.length) {\n if (node.list) {\n // For list nodes, process each indexed item separately\n const list = getValue(inputs, flatKey);\n if (Array.isArray(list)) {\n for (let i = 0; i < list.length; i++) {\n // Recurse with indexed path like 'rows[0]', 'rows[1]'\n compareAndCollect(node.children, [\n ...pathParts.slice(0, -1),\n `${node.name}/${i}`\n ]);\n }\n }\n } else {\n // For single object nodes, recurse normally\n compareAndCollect(node.children, pathParts);\n }\n } else {\n // Leaf node (primitive or slot) processing\n\n // Get current new value from deep inputs\n let newValue = getValue(inputs, flatKey);\n\n // Get original binding entry for this path\n const originalEntry = originalInputs[flatKey];\n\n // Skip if newValue is undefined and no original entry\n if (newValue === undefined && !originalEntry) {\n continue;\n }\n\n // For list slots, process CreateElement items within the array.\n if (node.list && Array.isArray(newValue)) {\n newValue = newValue.map(item => {\n if (\n typeof item === \"object\" &&\n item !== null &&\n item.action === \"CreateElement\"\n ) {\n const newElement = this.elementFactory.createElementFromComponent({\n componentName: item.params.component,\n parentId: this.elementId,\n slot: flatKey,\n bindings: item.params\n });\n // Skip AddToParent — this processor manages the binding array.\n operations.push(\n ...newElement.operations.filter(\n op => !(op instanceof DocumentOperations.AddToParent)\n )\n );\n return newElement.element.id;\n }\n return item;\n });\n }\n\n if (\n !Array.isArray(newValue) &&\n typeof newValue === \"object\" &&\n newValue?.action === \"CreateElement\"\n ) {\n // Handle single (non-list) CreateElement action\n const newElement = this.elementFactory.createElementFromComponent({\n componentName: newValue.params.component,\n parentId: this.elementId,\n slot: flatKey,\n index: -1,\n bindings: newValue.params\n });\n\n const createdId = newElement.element.id;\n\n // Assign or generate a stable unique id for the binding\n const existingId = originalEntry?.id;\n const idToUse = existingId ?? generateElementId();\n\n // Build binding for the new element id(s)\n const binding = {\n static: createdId,\n type: node.type,\n list: node.list,\n id: idToUse\n };\n\n if (node.input?.responsive && !this.isBaseBreakpoint(breakpoint)) {\n const inheritedValue = valueResolver.getInheritedValue(\n flatKey,\n breakpoint\n );\n\n if (binding.static === undefined) {\n // Unset override\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n } else if (\n inheritedValue === undefined ||\n !deepEqual(inheritedValue, binding.static)\n ) {\n if (!rebuilt.overrides[breakpoint]) {\n rebuilt.overrides[breakpoint] = { inputs: {} };\n }\n rebuilt.overrides[breakpoint].inputs[flatKey] = binding;\n } else {\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n }\n\n if (originalEntry) {\n rebuilt.inputs[flatKey] = originalEntry;\n }\n } else {\n // Normal case: update base inputs\n rebuilt.inputs[flatKey] = binding;\n }\n\n // Skip AddToParent — this processor manages the binding directly.\n operations.push(\n ...newElement.operations.filter(\n op => !(op instanceof DocumentOperations.AddToParent)\n )\n );\n } else {\n // Normal value update\n const isResponsive =\n node.input?.responsive && !this.isBaseBreakpoint(breakpoint);\n\n // Assign or generate a stable unique id for the binding\n const existingId = originalEntry?.id;\n const idToUse = existingId ?? generateElementId();\n\n // Merge existing original entry data with updated static value\n const binding = {\n ...(originalEntry ?? {}),\n static: newValue,\n type: node.type,\n list: node.list,\n id: idToUse\n };\n\n if (isResponsive) {\n const inheritedValue = valueResolver.getInheritedValue(\n flatKey,\n breakpoint\n );\n\n if (binding.static === undefined) {\n // Unset override\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n } else if (\n inheritedValue === undefined ||\n !deepEqual(inheritedValue, binding.static)\n ) {\n if (!rebuilt.overrides[breakpoint]) {\n rebuilt.overrides[breakpoint] = { inputs: {} };\n }\n rebuilt.overrides[breakpoint].inputs[flatKey] = binding;\n } else {\n if (rebuilt.overrides[breakpoint]?.inputs?.[flatKey]) {\n delete rebuilt.overrides[breakpoint].inputs[flatKey];\n }\n }\n\n if (originalEntry) {\n rebuilt.inputs[flatKey] = originalEntry;\n }\n } else {\n // Base binding update\n rebuilt.inputs[flatKey] = binding;\n }\n }\n }\n }\n };\n\n // Start the AST traversal and collection.\n compareAndCollect(this.inputsAst, []);\n\n // Identify elements referenced in slots that were removed since last state,\n // and queue their removal.\n const usedSlotIds = this.getElementReferences(rebuilt.inputs);\n for (const id of this.elementReferences) {\n if (!usedSlotIds.has(id)) {\n operations.push(new DocumentOperations.RemoveElement(id));\n }\n }\n\n return new InputsUpdater(this.elementId, rebuilt, operations);\n }\n\n // Returns a set of element IDs referenced in slot bindings within the provided inputs.\n private getElementReferences(inputs: DocumentElementBindings[\"inputs\"] = {}) {\n const references = new Set<string>();\n\n for (const [, binding] of Object.entries(inputs)) {\n if (binding.type === \"slot\") {\n if (Array.isArray(binding.static)) {\n ((binding.static ?? []) as string[]).forEach(id => references.add(id));\n } else if (typeof binding.static === \"string\") {\n references.add(binding.static);\n }\n }\n }\n\n return references;\n }\n\n private isBaseBreakpoint(name: string): boolean {\n return this.breakpoints.indexOf(name) === 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
- import { InputsBindingsProcessor } from "./InputBindingsProcessor";
2
- import { ElementFactory } from "./ElementFactory";
1
+ import { describe, it, expect } from "vitest";
2
+ import { InputsBindingsProcessor } from "./InputBindingsProcessor.js";
3
+ import { ElementFactory } from "./ElementFactory.js";
3
4
  describe("InputsBindingsProcessor", () => {
4
5
  // Example simple AST (you can expand as needed)
5
6
  const simpleAst = [{
@@ -104,6 +105,7 @@ describe("InputsBindingsProcessor", () => {
104
105
  "Webiny/GridColumn": {
105
106
  name: "Webiny/GridColumn",
106
107
  label: "Column",
108
+ tags: [],
107
109
  acceptsChildren: true,
108
110
  inputs: [{
109
111
  type: "slot",
@@ -1 +1 @@
1
- {"version":3,"names":["InputsBindingsProcessor","ElementFactory","describe","simpleAst","name","type","list","path","children","input","label","fields","withSlotAst","breakpoints","baseBindings","inputs","title","id","static","styles","overrides","tablet","mobile","getInputsBindingsProcessor","bindings","ast","elementFactory","acceptsChildren","renderer","defaultValue","processor","it","deep","toDeepInputs","expect","toEqual","items","newInputs","updater","createUpdate","rebuilt","elementId","applyToDocument","elementBindings","toBe","toBeUndefined","rawBindings","patch","createJsonPatch","arrayContaining","objectContaining","op","value","deepInputs","push","action","params","component","elements","toMatchObject","any","String"],"sources":["InputsBindingsProcessor.test.ts"],"sourcesContent":["import { InputsBindingsProcessor } from \"./InputBindingsProcessor\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter\";\nimport type { DocumentElementBindings } from \"~/types\";\nimport { ElementFactory } from \"~/ElementFactory\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","it","expect","InputsBindingsProcessor","ElementFactory","simpleAst","name","type","list","path","children","input","label","fields","withSlotAst","breakpoints","baseBindings","inputs","title","id","static","styles","overrides","tablet","mobile","getInputsBindingsProcessor","bindings","ast","elementFactory","tags","acceptsChildren","renderer","defaultValue","processor","deep","toDeepInputs","toEqual","items","newInputs","updater","createUpdate","rebuilt","elementId","applyToDocument","elementBindings","toBe","toBeUndefined","rawBindings","patch","createJsonPatch","arrayContaining","objectContaining","op","value","deepInputs","push","action","params","component","elements","toMatchObject","any","String"],"sources":["InputsBindingsProcessor.test.ts"],"sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { InputsBindingsProcessor } from \"./InputBindingsProcessor.js\";\nimport type { InputAstNode } from \"~/ComponentManifestToAstConverter.js\";\nimport type { DocumentElementBindings } from \"~/types.js\";\nimport { ElementFactory } from \"~/ElementFactory.js\";\n\ndescribe(\"InputsBindingsProcessor\", () => {\n // Example simple AST (you can expand as needed)\n const simpleAst: InputAstNode[] = [\n {\n name: \"title\",\n type: \"text\",\n list: false,\n path: \"title\",\n children: [],\n input: {\n type: \"text\",\n name: \"title\",\n label: \"Title\"\n }\n },\n {\n name: \"items\",\n type: \"object\",\n list: true,\n path: \"items\",\n children: [\n {\n name: \"label\",\n type: \"text\",\n list: false,\n path: \"items.label\",\n children: [],\n input: {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n }\n ],\n input: {\n type: \"object\",\n name: \"items\",\n list: true,\n fields: [\n {\n type: \"text\",\n name: \"label\",\n label: \"Label\"\n }\n ]\n }\n }\n ];\n\n const withSlotAst: InputAstNode[] = [\n {\n path: \"children\",\n children: [],\n name: \"children\",\n type: \"slot\",\n list: false,\n input: {\n type: \"slot\",\n name: \"children\",\n label: \"Children\"\n }\n }\n ];\n\n const breakpoints = [\"desktop\", \"tablet\", \"mobile\"];\n\n const baseBindings: DocumentElementBindings = {\n inputs: {\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n }\n },\n styles: {}\n };\n\n const overrides: DocumentElementBindings[\"overrides\"] = {\n tablet: {\n inputs: {\n title: { id: \"title\", static: \"Tablet Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Tablet Label 1\",\n type: \"text\"\n }\n }\n },\n mobile: {\n inputs: {\n title: { id: \"title\", static: \"Mobile Title\", type: \"text\" }\n }\n }\n };\n\n const getInputsBindingsProcessor = (\n bindings: DocumentElementBindings = baseBindings,\n ast = simpleAst\n ) => {\n const elementFactory = new ElementFactory({\n \"Webiny/GridColumn\": {\n name: \"Webiny/GridColumn\",\n label: \"Column\",\n tags: [],\n acceptsChildren: true,\n inputs: [\n {\n type: \"slot\",\n list: true,\n renderer: \"Webiny/Slot\",\n name: \"children\",\n defaultValue: []\n }\n ]\n }\n });\n const processor = new InputsBindingsProcessor(\n \"elementId\",\n ast,\n breakpoints,\n bindings,\n elementFactory\n );\n\n return { processor, bindings };\n };\n\n it(\"toDeep should convert flat bindings to nested object\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const deep = processor.toDeepInputs(baseBindings.inputs ?? {});\n expect(deep).toEqual({\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n });\n });\n\n it(\"applyInputs should assign base breakpoint inputs correctly\", () => {\n const { processor } = getInputsBindingsProcessor();\n\n const newInputs = {\n title: \"New Base Title\",\n items: [{ label: \"New Label 1\" }, { label: \"New Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"New Base Title\");\n expect(elementBindings.inputs[\"items/0/label\"].static).toBe(\"New Label 1\");\n expect(elementBindings.inputs[\"items/1/label\"].static).toBe(\"New Label 2\");\n expect(elementBindings.overrides).toBeUndefined();\n });\n\n it(\"applyInputs should assign overrides correctly, skipping inherited values\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Mobile Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs.title.static).toBe(\"Mobile Title\");\n // Items are same as base, so should not be in overrides\n expect(elementBindings.overrides?.mobile.inputs?.[\"items/0/label\"]).toBeUndefined();\n });\n\n it(\"createPatch should create correct json patch for input changes\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor, bindings } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Changed Title\",\n items: [{ label: \"Changed Label 1\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const patch = updater.createJsonPatch(bindings);\n\n // You're seeing the weird `~1` delimiter because that's what fast-json-patch does with indexes.\n expect(patch).toEqual(\n expect.arrayContaining([\n expect.objectContaining({\n op: \"remove\",\n path: \"/inputs/items~11~1label\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/title/static\",\n value: \"Changed Title\"\n }),\n expect.objectContaining({\n op: \"replace\",\n path: \"/inputs/items~10~1label/static\",\n value: \"Changed Label 1\"\n })\n ])\n );\n });\n\n it(\"applyInputs removes keys missing in new inputs\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: {\n ...baseBindings.inputs,\n \"some/key\": { id: \"someKey\", static: \"toRemove\", type: \"text\" }\n },\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings);\n\n const newInputs = {\n title: \"Base Title\",\n items: [{ label: \"Base Label 1\" }, { label: \"Base Label 2\" }]\n };\n\n const updater = processor.createUpdate(newInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } } };\n updater.applyToDocument(rebuilt);\n\n const elementBindings = rebuilt.bindings.elementId;\n\n expect(elementBindings.inputs[\"some/key\"]).toBeUndefined();\n });\n\n it(\"createUpdate should apply correct changes to the document\", () => {\n const rawBindings: DocumentElementBindings = {\n inputs: baseBindings.inputs,\n overrides,\n styles: {}\n };\n const { processor } = getInputsBindingsProcessor(rawBindings, [\n ...simpleAst,\n ...withSlotAst\n ]);\n\n const deepInputs = processor.toDeepInputs(rawBindings.inputs!);\n\n deepInputs.items.push({ label: \"New Label 1\" });\n deepInputs.children = {\n action: \"CreateElement\",\n params: {\n component: \"Webiny/GridColumn\"\n }\n };\n\n const updater = processor.createUpdate(deepInputs, \"mobile\");\n const rebuilt: any = { bindings: { elementId: { inputs: {}, styles: {} } }, elements: {} };\n updater.applyToDocument(rebuilt);\n\n expect(rebuilt.bindings.elementId.inputs).toMatchObject({\n title: { id: \"title\", static: \"Base Title\", type: \"text\" },\n \"items/0/label\": {\n id: \"label0\",\n static: \"Base Label 1\",\n type: \"text\"\n },\n \"items/1/label\": {\n id: \"label1\",\n static: \"Base Label 2\",\n type: \"text\"\n },\n \"items/2/label\": {\n id: expect.any(String),\n static: \"New Label 1\",\n type: \"text\"\n },\n children: {\n id: expect.any(String),\n static: expect.any(String),\n type: \"slot\"\n }\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,12 @@
1
- import type { Document, DocumentElementBindings } from "./types";
2
- import type { IBindingsUpdater } from "./IBindingsUpdater";
3
- import type { ElementInputsBindings } from "./InputBindingsProcessor";
4
- import type { IDocumentOperation } from "./documentOperations";
1
+ import type { Document, DocumentElementBindings } from "./types.js";
2
+ import type { IBindingsUpdater } from "./IBindingsUpdater.js";
3
+ import type { ElementInputsBindings } from "./InputBindingsProcessor.js";
4
+ import type { IDocumentOperation } from "./documentOperations/index.js";
5
5
  export declare class InputsUpdater implements IBindingsUpdater {
6
6
  private readonly bindings;
7
7
  private operations;
8
8
  private elementId;
9
9
  constructor(elementId: string, bindings: ElementInputsBindings, operations: IDocumentOperation[]);
10
10
  applyToDocument(document: Document): void;
11
- createJsonPatch(bindings: DocumentElementBindings): import("./jsonPatch").JsonPatchOperation[];
11
+ createJsonPatch(bindings: DocumentElementBindings): import("fast-json-patch").Operation[];
12
12
  }
package/InputsUpdater.js CHANGED
@@ -1,5 +1,5 @@
1
- import { jsonPatch } from "./jsonPatch";
2
- import set from "lodash/set";
1
+ import { jsonPatch } from "./jsonPatch.js";
2
+ import set from "lodash/set.js";
3
3
  export class InputsUpdater {
4
4
  constructor(elementId, bindings, operations) {
5
5
  this.elementId = elementId;