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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/BindingsApi.js +29 -36
  2. package/BindingsApi.js.map +1 -1
  3. package/BindingsProcessor.js +34 -43
  4. package/BindingsProcessor.js.map +1 -1
  5. package/BindingsProcessor.test.js +82 -78
  6. package/BindingsProcessor.test.js.map +1 -1
  7. package/BindingsResolver.js +92 -119
  8. package/BindingsResolver.js.map +1 -1
  9. package/BindingsResolver.test.js +399 -363
  10. package/BindingsResolver.test.js.map +1 -1
  11. package/ComponentInputTraverser.js +28 -49
  12. package/ComponentInputTraverser.js.map +1 -1
  13. package/ComponentManifestToAstConverter.js +20 -21
  14. package/ComponentManifestToAstConverter.js.map +1 -1
  15. package/ComponentRegistry.js +26 -45
  16. package/ComponentRegistry.js.map +1 -1
  17. package/ComponentResolver.js +25 -29
  18. package/ComponentResolver.js.map +1 -1
  19. package/ConstraintEvaluator.js +246 -353
  20. package/ConstraintEvaluator.js.map +1 -1
  21. package/ConstraintEvaluator.test.js +1616 -1438
  22. package/ConstraintEvaluator.test.js.map +1 -1
  23. package/ContentSdk.js +83 -90
  24. package/ContentSdk.js.map +1 -1
  25. package/DocumentStore.js +47 -59
  26. package/DocumentStore.js.map +1 -1
  27. package/DocumentStoreManager.js +17 -16
  28. package/DocumentStoreManager.js.map +1 -1
  29. package/EditingSdk.js +87 -121
  30. package/EditingSdk.js.map +1 -1
  31. package/ElementFactory.js +126 -174
  32. package/ElementFactory.js.map +1 -1
  33. package/ElementFactory.test.js +234 -263
  34. package/ElementFactory.test.js.map +1 -1
  35. package/Environment.js +18 -19
  36. package/Environment.js.map +1 -1
  37. package/FunctionConverter.js +8 -7
  38. package/FunctionConverter.js.map +1 -1
  39. package/HashObject.js +11 -26
  40. package/HashObject.js.map +1 -1
  41. package/HotkeyManager.js +40 -47
  42. package/HotkeyManager.js.map +1 -1
  43. package/IBindingsUpdater.js +0 -3
  44. package/IRedirects.js +0 -3
  45. package/InheritanceProcessor.js +99 -139
  46. package/InheritanceProcessor.js.map +1 -1
  47. package/InheritanceProcessor.test.js +178 -179
  48. package/InheritanceProcessor.test.js.map +1 -1
  49. package/InheritedValueResolver.js +15 -20
  50. package/InheritedValueResolver.js.map +1 -1
  51. package/InputBindingsProcessor.js +187 -307
  52. package/InputBindingsProcessor.js.map +1 -1
  53. package/InputsBindingsProcessor.test.js +334 -315
  54. package/InputsBindingsProcessor.test.js.map +1 -1
  55. package/InputsUpdater.js +23 -26
  56. package/InputsUpdater.js.map +1 -1
  57. package/LiveSdk.js +12 -13
  58. package/LiveSdk.js.map +1 -1
  59. package/Logger.js +9 -8
  60. package/Logger.js.map +1 -1
  61. package/MouseTracker.js +77 -83
  62. package/MouseTracker.js.map +1 -1
  63. package/NullSdk.js +22 -21
  64. package/NullSdk.js.map +1 -1
  65. package/PreviewDocument.js +27 -30
  66. package/PreviewDocument.js.map +1 -1
  67. package/PreviewSdk.js +16 -17
  68. package/PreviewSdk.js.map +1 -1
  69. package/PreviewViewport.js +51 -63
  70. package/PreviewViewport.js.map +1 -1
  71. package/ResizeObserver.js +24 -31
  72. package/ResizeObserver.js.map +1 -1
  73. package/StylesBindingsProcessor.js +40 -79
  74. package/StylesBindingsProcessor.js.map +1 -1
  75. package/StylesUpdater.js +20 -25
  76. package/StylesUpdater.js.map +1 -1
  77. package/Theme.js +28 -25
  78. package/Theme.js.map +1 -1
  79. package/ViewportManager.js +89 -101
  80. package/ViewportManager.js.map +1 -1
  81. package/constants.js +7 -6
  82. package/constants.js.map +1 -1
  83. package/createElement.js +5 -6
  84. package/createElement.js.map +1 -1
  85. package/createInput.js +85 -143
  86. package/createInput.js.map +1 -1
  87. package/createTheme.js +2 -3
  88. package/createTheme.js.map +1 -1
  89. package/dataProviders/ApiClient.js +40 -49
  90. package/dataProviders/ApiClient.js.map +1 -1
  91. package/dataProviders/DefaultDataProvider.js +56 -58
  92. package/dataProviders/DefaultDataProvider.js.map +1 -1
  93. package/dataProviders/GET_PAGE_BY_ID.js +2 -1
  94. package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
  95. package/dataProviders/GET_PAGE_BY_PATH.js +2 -1
  96. package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
  97. package/dataProviders/LIST_PUBLISHED_PAGES.js +2 -1
  98. package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
  99. package/dataProviders/NullDataProvider.js +21 -20
  100. package/dataProviders/NullDataProvider.js.map +1 -1
  101. package/dataProviders/RedirectsProvider.js +24 -27
  102. package/dataProviders/RedirectsProvider.js.map +1 -1
  103. package/defaultBreakpoints.js +23 -22
  104. package/defaultBreakpoints.js.map +1 -1
  105. package/documentOperations/$addElementReferenceToParent.js +29 -32
  106. package/documentOperations/$addElementReferenceToParent.js.map +1 -1
  107. package/documentOperations/AddElement.js +8 -7
  108. package/documentOperations/AddElement.js.map +1 -1
  109. package/documentOperations/AddToParent.js +14 -13
  110. package/documentOperations/AddToParent.js.map +1 -1
  111. package/documentOperations/IDocumentOperation.js +0 -3
  112. package/documentOperations/RemoveElement.js +9 -15
  113. package/documentOperations/RemoveElement.js.map +1 -1
  114. package/documentOperations/SetGlobalInputBinding.js +23 -22
  115. package/documentOperations/SetGlobalInputBinding.js.map +1 -1
  116. package/documentOperations/SetGlobalStyleBinding.js +23 -23
  117. package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
  118. package/documentOperations/SetInputBindingOverride.js +30 -29
  119. package/documentOperations/SetInputBindingOverride.js.map +1 -1
  120. package/documentOperations/SetStyleBindingOverride.js +30 -31
  121. package/documentOperations/SetStyleBindingOverride.js.map +1 -1
  122. package/documentOperations/index.js +9 -8
  123. package/documentOperations/index.js.map +1 -1
  124. package/findMatchingAstNode.js +11 -13
  125. package/findMatchingAstNode.js.map +1 -1
  126. package/generateElementId.js +2 -1
  127. package/generateElementId.js.map +1 -1
  128. package/headersProvider.js +4 -3
  129. package/headersProvider.js.map +1 -1
  130. package/index.js +0 -2
  131. package/jsonPatch.js +5 -9
  132. package/jsonPatch.js.map +1 -1
  133. package/messages.js +12 -11
  134. package/messages.js.map +1 -1
  135. package/messenger/MessageOrigin.js +12 -11
  136. package/messenger/MessageOrigin.js.map +1 -1
  137. package/messenger/Messenger.js +58 -69
  138. package/messenger/Messenger.js.map +1 -1
  139. package/messenger/index.js +0 -2
  140. package/package.json +5 -5
  141. package/registerComponentGroup.js +5 -6
  142. package/registerComponentGroup.js.map +1 -1
  143. package/types/ShorthandCssProperties.js +0 -3
  144. package/types/WebsiteBuilderTheme.js +0 -3
  145. package/types.d.ts +3 -0
  146. package/types.js +0 -3
  147. package/IBindingsUpdater.js.map +0 -1
  148. package/IRedirects.js.map +0 -1
  149. package/documentOperations/IDocumentOperation.js.map +0 -1
  150. package/index.js.map +0 -1
  151. package/messenger/index.js.map +0 -1
  152. package/types/ShorthandCssProperties.js.map +0 -1
  153. package/types/WebsiteBuilderTheme.js.map +0 -1
  154. package/types.js.map +0 -1
@@ -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.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
+ {"version":3,"file":"InheritanceProcessor.js","sources":["../src/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"],"names":["InheritanceProcessor","breakpoints","inputsAst","bindings","breakpoint","overrides","inputs","styles","upTo","Math","currentBpIndex","overriddenInputsMap","Map","overriddenStylesMap","i","bp","override","key","Set","inputsInheritance","Object","normalizedKey","isResponsive","lookupKey","overrideIndices","lastOverrideIndex","idx","overridden","inheritedFromIndex","j","inheritedFrom","undefined","stylesInheritance","keys","Array","path","responsivePaths","traverse","nodes","prefix","node","currentPath"],"mappings":"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"}
@@ -1,193 +1,192 @@
1
- import { describe, it, expect } from "vitest";
1
+ import { describe, expect, it } from "vitest";
2
2
  import { InheritanceProcessor } from "./InheritanceProcessor.js";
3
- // Mock AST for inputs
4
- const inputsAst = [{
5
- name: "rowGap",
6
- type: "text",
7
- list: false,
8
- path: "rowGap",
9
- children: [],
10
- input: {
11
- type: "text",
12
- responsive: true,
13
- name: "rowGap"
14
- }
15
- }, {
16
- name: "title",
17
- type: "text",
18
- list: false,
19
- path: "title",
20
- children: [],
21
- input: {
22
- type: "text",
23
- responsive: false,
24
- name: "title"
25
- }
26
- }];
27
- describe("InheritanceProcessor", () => {
28
- const breakpoints = ["desktop", "tablet", "mobile"];
29
- const processor = new InheritanceProcessor(breakpoints, inputsAst);
30
- it("should correctly compute inheritance info for responsive inputs and styles", () => {
31
- const bindings = {
32
- inputs: {
33
- rowGap: {
34
- static: "20px"
35
- },
36
- title: {
37
- static: "Default Title"
3
+ const inputsAst = [
4
+ {
5
+ name: "rowGap",
6
+ type: "text",
7
+ list: false,
8
+ path: "rowGap",
9
+ children: [],
10
+ input: {
11
+ type: "text",
12
+ responsive: true,
13
+ name: "rowGap"
38
14
  }
39
- },
40
- styles: {
41
- paddingTop: {
42
- static: "10px"
43
- },
44
- color: {
45
- static: "red"
15
+ },
16
+ {
17
+ name: "title",
18
+ type: "text",
19
+ list: false,
20
+ path: "title",
21
+ children: [],
22
+ input: {
23
+ type: "text",
24
+ responsive: false,
25
+ name: "title"
46
26
  }
47
- },
48
- overrides: {
49
- tablet: {
50
- styles: {
51
- paddingTop: {
52
- static: "5px"
53
- }
54
- }
55
- },
56
- mobile: {
57
- inputs: {
58
- rowGap: {
59
- static: "10px"
60
- }
61
- },
62
- styles: {
63
- paddingTop: {
64
- static: "2px"
27
+ }
28
+ ];
29
+ describe("InheritanceProcessor", ()=>{
30
+ const breakpoints = [
31
+ "desktop",
32
+ "tablet",
33
+ "mobile"
34
+ ];
35
+ const processor = new InheritanceProcessor(breakpoints, inputsAst);
36
+ it("should correctly compute inheritance info for responsive inputs and styles", ()=>{
37
+ const bindings = {
38
+ inputs: {
39
+ rowGap: {
40
+ static: "20px"
41
+ },
42
+ title: {
43
+ static: "Default Title"
44
+ }
45
+ },
46
+ styles: {
47
+ paddingTop: {
48
+ static: "10px"
49
+ },
50
+ color: {
51
+ static: "red"
52
+ }
65
53
  },
66
- color: {
67
- static: "blue"
54
+ overrides: {
55
+ tablet: {
56
+ styles: {
57
+ paddingTop: {
58
+ static: "5px"
59
+ }
60
+ }
61
+ },
62
+ mobile: {
63
+ inputs: {
64
+ rowGap: {
65
+ static: "10px"
66
+ }
67
+ },
68
+ styles: {
69
+ paddingTop: {
70
+ static: "2px"
71
+ },
72
+ color: {
73
+ static: "blue"
74
+ }
75
+ }
76
+ }
68
77
  }
69
- }
70
- }
71
- }
72
- };
73
-
74
- // desktop breakpoint
75
- const desktopResult = processor.getInheritanceMap(bindings, "desktop");
76
- expect(desktopResult.inputs["rowGap"]).toEqual({
77
- overridden: true,
78
- inheritedFrom: undefined
79
- });
80
- expect(desktopResult.inputs["title"]).toBeUndefined(); // not responsive
81
- expect(desktopResult.styles["paddingTop"]).toEqual({
82
- overridden: true,
83
- inheritedFrom: undefined
84
- });
85
- expect(desktopResult.styles["color"]).toEqual({
86
- overridden: true,
87
- inheritedFrom: undefined
88
- });
89
-
90
- // tablet breakpoint
91
- const tabletResult = processor.getInheritanceMap(bindings, "tablet");
92
- expect(tabletResult.inputs["rowGap"]).toEqual({
93
- overridden: false,
94
- inheritedFrom: "desktop"
95
- });
96
- expect(tabletResult.styles["paddingTop"]).toEqual({
97
- overridden: true,
98
- inheritedFrom: "desktop"
99
- });
100
- expect(tabletResult.styles["color"]).toEqual({
101
- overridden: false,
102
- inheritedFrom: "desktop"
103
- });
104
-
105
- // mobile breakpoint
106
- const mobileResult = processor.getInheritanceMap(bindings, "mobile");
107
- expect(mobileResult.inputs["rowGap"]).toEqual({
108
- overridden: true,
109
- inheritedFrom: "desktop"
110
- });
111
- expect(mobileResult.styles["paddingTop"]).toEqual({
112
- overridden: true,
113
- inheritedFrom: "tablet"
114
- });
115
- expect(mobileResult.styles["color"]).toEqual({
116
- overridden: true,
117
- inheritedFrom: "desktop"
118
- });
119
- });
120
- it("should skip non-responsive inputs in inheritance info", () => {
121
- const bindings = {
122
- inputs: {
123
- title: {
124
- static: "Static Title"
125
- }
126
- },
127
- styles: {},
128
- overrides: {}
129
- };
130
- const result = processor.getInheritanceMap(bindings, "desktop");
131
- expect(result.inputs["title"]).toBeUndefined();
132
- });
133
- it("should handle missing overrides gracefully", () => {
134
- const bindings = {
135
- inputs: {
136
- rowGap: {
137
- static: "20px"
138
- }
139
- },
140
- styles: {
141
- paddingTop: {
142
- static: "10px"
143
- }
144
- }
145
- // no overrides
146
- };
147
- const result = processor.getInheritanceMap(bindings, "mobile");
148
- expect(result.inputs["rowGap"]).toEqual({
149
- overridden: false,
150
- inheritedFrom: "desktop"
78
+ };
79
+ const desktopResult = processor.getInheritanceMap(bindings, "desktop");
80
+ expect(desktopResult.inputs["rowGap"]).toEqual({
81
+ overridden: true,
82
+ inheritedFrom: void 0
83
+ });
84
+ expect(desktopResult.inputs["title"]).toBeUndefined();
85
+ expect(desktopResult.styles["paddingTop"]).toEqual({
86
+ overridden: true,
87
+ inheritedFrom: void 0
88
+ });
89
+ expect(desktopResult.styles["color"]).toEqual({
90
+ overridden: true,
91
+ inheritedFrom: void 0
92
+ });
93
+ const tabletResult = processor.getInheritanceMap(bindings, "tablet");
94
+ expect(tabletResult.inputs["rowGap"]).toEqual({
95
+ overridden: false,
96
+ inheritedFrom: "desktop"
97
+ });
98
+ expect(tabletResult.styles["paddingTop"]).toEqual({
99
+ overridden: true,
100
+ inheritedFrom: "desktop"
101
+ });
102
+ expect(tabletResult.styles["color"]).toEqual({
103
+ overridden: false,
104
+ inheritedFrom: "desktop"
105
+ });
106
+ const mobileResult = processor.getInheritanceMap(bindings, "mobile");
107
+ expect(mobileResult.inputs["rowGap"]).toEqual({
108
+ overridden: true,
109
+ inheritedFrom: "desktop"
110
+ });
111
+ expect(mobileResult.styles["paddingTop"]).toEqual({
112
+ overridden: true,
113
+ inheritedFrom: "tablet"
114
+ });
115
+ expect(mobileResult.styles["color"]).toEqual({
116
+ overridden: true,
117
+ inheritedFrom: "desktop"
118
+ });
151
119
  });
152
- expect(result.styles["paddingTop"]).toEqual({
153
- overridden: false,
154
- inheritedFrom: "desktop"
120
+ it("should skip non-responsive inputs in inheritance info", ()=>{
121
+ const bindings = {
122
+ inputs: {
123
+ title: {
124
+ static: "Static Title"
125
+ }
126
+ },
127
+ styles: {},
128
+ overrides: {}
129
+ };
130
+ const result = processor.getInheritanceMap(bindings, "desktop");
131
+ expect(result.inputs["title"]).toBeUndefined();
155
132
  });
156
- });
157
- it("should handle missing ancestor values gracefully", () => {
158
- const bindings = {
159
- inputs: {},
160
- styles: {
161
- backgroundColor: {
162
- static: "#ec8787"
163
- }
164
- },
165
- overrides: {
166
- tablet: {
167
- styles: {}
168
- },
169
- mobile: {
170
- styles: {
171
- backgroundColor: {
172
- static: "#50e3c2"
133
+ it("should handle missing overrides gracefully", ()=>{
134
+ const bindings = {
135
+ inputs: {
136
+ rowGap: {
137
+ static: "20px"
138
+ }
173
139
  },
174
- marginTop: {
175
- static: "122px"
140
+ styles: {
141
+ paddingTop: {
142
+ static: "10px"
143
+ }
176
144
  }
177
- }
178
- }
179
- }
180
- };
181
- const result = processor.getInheritanceMap(bindings, "mobile");
182
- expect(result.styles["backgroundColor"]).toEqual({
183
- overridden: true,
184
- inheritedFrom: "desktop"
145
+ };
146
+ const result = processor.getInheritanceMap(bindings, "mobile");
147
+ expect(result.inputs["rowGap"]).toEqual({
148
+ overridden: false,
149
+ inheritedFrom: "desktop"
150
+ });
151
+ expect(result.styles["paddingTop"]).toEqual({
152
+ overridden: false,
153
+ inheritedFrom: "desktop"
154
+ });
185
155
  });
186
- expect(result.styles["marginTop"]).toEqual({
187
- overridden: true,
188
- inheritedFrom: "desktop"
156
+ it("should handle missing ancestor values gracefully", ()=>{
157
+ const bindings = {
158
+ inputs: {},
159
+ styles: {
160
+ backgroundColor: {
161
+ static: "#ec8787"
162
+ }
163
+ },
164
+ overrides: {
165
+ tablet: {
166
+ styles: {}
167
+ },
168
+ mobile: {
169
+ styles: {
170
+ backgroundColor: {
171
+ static: "#50e3c2"
172
+ },
173
+ marginTop: {
174
+ static: "122px"
175
+ }
176
+ }
177
+ }
178
+ }
179
+ };
180
+ const result = processor.getInheritanceMap(bindings, "mobile");
181
+ expect(result.styles["backgroundColor"]).toEqual({
182
+ overridden: true,
183
+ inheritedFrom: "desktop"
184
+ });
185
+ expect(result.styles["marginTop"]).toEqual({
186
+ overridden: true,
187
+ inheritedFrom: "desktop"
188
+ });
189
189
  });
190
- });
191
190
  });
192
191
 
193
192
  //# sourceMappingURL=InheritanceProcessor.test.js.map
@@ -1 +1 @@
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
+ {"version":3,"file":"InheritanceProcessor.test.js","sources":["../src/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"],"names":["inputsAst","describe","breakpoints","processor","InheritanceProcessor","it","bindings","desktopResult","expect","undefined","tabletResult","mobileResult","result"],"mappings":"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"}
@@ -1,24 +1,19 @@
1
- export class InheritedValueResolver {
2
- constructor(breakpoints, getBindings) {
3
- this.breakpoints = breakpoints;
4
- this.getBindings = getBindings;
5
- }
6
- getInheritedValue(key, breakpoint) {
7
- const currentIndex = this.breakpoints.indexOf(breakpoint);
8
- // Walk backwards from currentIndex - 1 to 0
9
- for (let i = currentIndex - 1; i >= 0; i--) {
10
- const bp = this.breakpoints[i];
11
- const bindings = this.getBindings(bp);
12
- if (!bindings) {
13
- continue;
14
- }
15
- const value = bindings[key]?.static;
16
- if (value !== undefined) {
17
- return value;
18
- }
1
+ class InheritedValueResolver {
2
+ constructor(breakpoints, getBindings){
3
+ this.breakpoints = breakpoints;
4
+ this.getBindings = getBindings;
5
+ }
6
+ getInheritedValue(key, breakpoint) {
7
+ const currentIndex = this.breakpoints.indexOf(breakpoint);
8
+ for(let i = currentIndex - 1; i >= 0; i--){
9
+ const bp = this.breakpoints[i];
10
+ const bindings = this.getBindings(bp);
11
+ if (!bindings) continue;
12
+ const value = bindings[key]?.static;
13
+ if (void 0 !== value) return value;
14
+ }
19
15
  }
20
- return undefined;
21
- }
22
16
  }
17
+ export { InheritedValueResolver };
23
18
 
24
19
  //# sourceMappingURL=InheritedValueResolver.js.map
@@ -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.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
+ {"version":3,"file":"InheritedValueResolver.js","sources":["../src/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"],"names":["InheritedValueResolver","breakpoints","getBindings","key","breakpoint","currentIndex","i","bp","bindings","value","undefined"],"mappings":"AAMO,MAAMA;IAIT,YAAYC,WAAqB,EAAEC,WAAkC,CAAE;QACnE,IAAI,CAAC,WAAW,GAAGD;QACnB,IAAI,CAAC,WAAW,GAAGC;IACvB;IAEA,kBAAkBC,GAAW,EAAEC,UAAkB,EAA4B;QACzE,MAAMC,eAAe,IAAI,CAAC,WAAW,CAAC,OAAO,CAACD;QAE9C,IAAK,IAAIE,IAAID,eAAe,GAAGC,KAAK,GAAGA,IAAK;YACxC,MAAMC,KAAK,IAAI,CAAC,WAAW,CAACD,EAAE;YAC9B,MAAME,WAAW,IAAI,CAAC,WAAW,CAACD;YAElC,IAAI,CAACC,UACD;YAGJ,MAAMC,QAAQD,QAAQ,CAACL,IAAI,EAAE;YAC7B,IAAIM,AAAUC,WAAVD,OACA,OAAOA;QAEf;IAEJ;AACJ"}