@webiny/website-builder-sdk 0.0.0-unstable.eb196ccd2f → 0.0.0-unstable.eb81deee7e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BindingsApi.js +29 -36
- package/BindingsApi.js.map +1 -1
- package/BindingsProcessor.js +34 -43
- package/BindingsProcessor.js.map +1 -1
- package/BindingsProcessor.test.js +82 -77
- package/BindingsProcessor.test.js.map +1 -1
- package/BindingsResolver.d.ts +5 -2
- package/BindingsResolver.js +99 -122
- package/BindingsResolver.js.map +1 -1
- package/BindingsResolver.test.js +399 -362
- package/BindingsResolver.test.js.map +1 -1
- package/ComponentInputTraverser.js +32 -49
- package/ComponentInputTraverser.js.map +1 -1
- package/ComponentManifestToAstConverter.js +20 -21
- package/ComponentManifestToAstConverter.js.map +1 -1
- package/ComponentRegistry.d.ts +9 -0
- package/ComponentRegistry.js +38 -22
- package/ComponentRegistry.js.map +1 -1
- package/ComponentResolver.d.ts +3 -2
- package/ComponentResolver.js +39 -29
- package/ComponentResolver.js.map +1 -1
- package/ComponentResolver.test.d.ts +1 -0
- package/ComponentResolver.test.js +81 -0
- package/ComponentResolver.test.js.map +1 -0
- package/ConstraintEvaluator.d.ts +36 -0
- package/ConstraintEvaluator.js +288 -0
- package/ConstraintEvaluator.js.map +1 -0
- package/ConstraintEvaluator.test.d.ts +1 -0
- package/ConstraintEvaluator.test.js +1634 -0
- package/ConstraintEvaluator.test.js.map +1 -0
- package/ContentSdk.d.ts +17 -3
- package/ContentSdk.js +113 -90
- package/ContentSdk.js.map +1 -1
- package/DocumentStore.d.ts +1 -1
- package/DocumentStore.js +47 -59
- package/DocumentStore.js.map +1 -1
- package/DocumentStoreManager.js +17 -16
- package/DocumentStoreManager.js.map +1 -1
- package/EditingSdk.d.ts +2 -2
- package/EditingSdk.js +92 -124
- package/EditingSdk.js.map +1 -1
- package/ElementFactory.d.ts +2 -3
- package/ElementFactory.js +164 -163
- package/ElementFactory.js.map +1 -1
- package/ElementFactory.objectListDefaults.test.d.ts +1 -0
- package/ElementFactory.objectListDefaults.test.js +423 -0
- package/ElementFactory.objectListDefaults.test.js.map +1 -0
- package/ElementFactory.test.d.ts +1 -0
- package/ElementFactory.test.js +353 -0
- package/ElementFactory.test.js.map +1 -0
- package/Environment.js +18 -19
- package/Environment.js.map +1 -1
- package/FunctionConverter.js +8 -7
- package/FunctionConverter.js.map +1 -1
- package/HashObject.js +11 -12
- package/HashObject.js.map +1 -1
- package/HotkeyManager.js +41 -48
- package/HotkeyManager.js.map +1 -1
- package/IBindingsUpdater.js +0 -3
- package/IRedirects.js +0 -3
- package/InheritanceProcessor.d.ts +2 -2
- package/InheritanceProcessor.js +99 -139
- package/InheritanceProcessor.js.map +1 -1
- package/InheritanceProcessor.test.js +178 -178
- package/InheritanceProcessor.test.js.map +1 -1
- package/InheritedValueResolver.d.ts +18 -1
- package/InheritedValueResolver.js +18 -20
- package/InheritedValueResolver.js.map +1 -1
- package/InputBindingsProcessor.d.ts +23 -2
- package/InputBindingsProcessor.js +200 -289
- package/InputBindingsProcessor.js.map +1 -1
- package/InputBindingsProcessorTokens.test.d.ts +1 -0
- package/InputBindingsProcessorTokens.test.js +400 -0
- package/InputBindingsProcessorTokens.test.js.map +1 -0
- package/InputsBindingsProcessor.test.js +334 -313
- package/InputsBindingsProcessor.test.js.map +1 -1
- package/InputsUpdater.d.ts +1 -1
- package/InputsUpdater.js +23 -26
- package/InputsUpdater.js.map +1 -1
- package/LiveSdk.d.ts +2 -2
- package/LiveSdk.js +12 -13
- package/LiveSdk.js.map +1 -1
- package/Logger.d.ts +2 -1
- package/Logger.js +9 -8
- package/Logger.js.map +1 -1
- package/MouseTracker.js +77 -83
- package/MouseTracker.js.map +1 -1
- package/NullSdk.d.ts +4 -3
- package/NullSdk.js +22 -14
- package/NullSdk.js.map +1 -1
- package/PreviewDocument.d.ts +1 -0
- package/PreviewDocument.js +30 -30
- package/PreviewDocument.js.map +1 -1
- package/PreviewSdk.d.ts +4 -3
- package/PreviewSdk.js +19 -17
- package/PreviewSdk.js.map +1 -1
- package/PreviewViewport.d.ts +0 -1
- package/PreviewViewport.js +50 -82
- package/PreviewViewport.js.map +1 -1
- package/README.md +10 -2
- package/ResizeObserver.js +24 -31
- package/ResizeObserver.js.map +1 -1
- package/StylesBindingsProcessor.d.ts +12 -2
- package/StylesBindingsProcessor.js +62 -79
- package/StylesBindingsProcessor.js.map +1 -1
- package/StylesUpdater.d.ts +1 -1
- package/StylesUpdater.js +20 -25
- package/StylesUpdater.js.map +1 -1
- package/Theme.js +30 -32
- package/Theme.js.map +1 -1
- package/ViewportManager.d.ts +2 -0
- package/ViewportManager.js +89 -97
- package/ViewportManager.js.map +1 -1
- package/assertBindingShapes.d.ts +31 -0
- package/assertBindingShapes.js +64 -0
- package/assertBindingShapes.js.map +1 -0
- package/assertBindingShapes.test.d.ts +1 -0
- package/assertBindingShapes.test.js +131 -0
- package/assertBindingShapes.test.js.map +1 -0
- package/asset/deliveryUrl.d.ts +41 -0
- package/asset/deliveryUrl.js +34 -0
- package/asset/deliveryUrl.js.map +1 -0
- package/asset/deliveryUrl.test.d.ts +1 -0
- package/asset/deliveryUrl.test.js +127 -0
- package/asset/deliveryUrl.test.js.map +1 -0
- package/asset/geometry.d.ts +7 -0
- package/asset/geometry.js +10 -0
- package/asset/geometry.js.map +1 -0
- package/asset/imageSrcSet.d.ts +63 -0
- package/asset/imageSrcSet.js +98 -0
- package/asset/imageSrcSet.js.map +1 -0
- package/asset/imageSrcSet.test.d.ts +1 -0
- package/asset/imageSrcSet.test.js +103 -0
- package/asset/imageSrcSet.test.js.map +1 -0
- package/asset/index.d.ts +5 -0
- package/asset/index.js +5 -0
- package/asset/normalize.d.ts +24 -0
- package/asset/normalize.js +106 -0
- package/asset/normalize.js.map +1 -0
- package/asset/normalize.test.d.ts +1 -0
- package/asset/normalize.test.js +263 -0
- package/asset/normalize.test.js.map +1 -0
- package/asset/types.d.ts +2 -0
- package/asset/types.js +0 -0
- package/constants.d.ts +1 -0
- package/constants.js +7 -5
- package/constants.js.map +1 -1
- package/contentEntry/ContentEntryBindingsResolver.d.ts +30 -0
- package/contentEntry/ContentEntryBindingsResolver.js +45 -0
- package/contentEntry/ContentEntryBindingsResolver.js.map +1 -0
- package/contentEntry/ContentEntryCache.d.ts +46 -0
- package/contentEntry/ContentEntryCache.js +50 -0
- package/contentEntry/ContentEntryCache.js.map +1 -0
- package/contentEntry/resolveContentEntry.d.ts +74 -0
- package/contentEntry/resolveContentEntry.js +53 -0
- package/contentEntry/resolveContentEntry.js.map +1 -0
- package/contentEntry/resolveContentEntry.test.d.ts +1 -0
- package/contentEntry/resolveContentEntry.test.js +213 -0
- package/contentEntry/resolveContentEntry.test.js.map +1 -0
- package/createComponent.d.ts +5 -0
- package/createComponent.js +32 -0
- package/createComponent.js.map +1 -0
- package/createElement.js +5 -6
- package/createElement.js.map +1 -1
- package/createInput.d.ts +132 -16
- package/createInput.js +92 -111
- package/createInput.js.map +1 -1
- package/createTheme.js +2 -3
- package/createTheme.js.map +1 -1
- package/dataProviders/ApiClient.d.ts +10 -5
- package/dataProviders/ApiClient.js +40 -49
- package/dataProviders/ApiClient.js.map +1 -1
- package/dataProviders/DefaultDataProvider.d.ts +7 -3
- package/dataProviders/DefaultDataProvider.js +91 -45
- package/dataProviders/DefaultDataProvider.js.map +1 -1
- package/dataProviders/GET_EXPERIMENT_PAUSED.d.ts +1 -0
- package/dataProviders/GET_EXPERIMENT_PAUSED.js +17 -0
- package/dataProviders/GET_EXPERIMENT_PAUSED.js.map +1 -0
- package/dataProviders/GET_PAGE_BY_ID.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_ID.js +4 -1
- package/dataProviders/GET_PAGE_BY_ID.js.map +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.d.ts +1 -1
- package/dataProviders/GET_PAGE_BY_PATH.js +4 -1
- package/dataProviders/GET_PAGE_BY_PATH.js.map +1 -1
- package/dataProviders/GET_PAGE_EXPERIMENT.d.ts +1 -0
- package/dataProviders/GET_PAGE_EXPERIMENT.js +32 -0
- package/dataProviders/GET_PAGE_EXPERIMENT.js.map +1 -0
- package/dataProviders/GET_VARIANT_CONTENT.d.ts +1 -0
- package/dataProviders/GET_VARIANT_CONTENT.js +24 -0
- package/dataProviders/GET_VARIANT_CONTENT.js.map +1 -0
- package/dataProviders/LIST_PUBLISHED_PAGES.d.ts +1 -1
- package/dataProviders/LIST_PUBLISHED_PAGES.js +17 -5
- package/dataProviders/LIST_PUBLISHED_PAGES.js.map +1 -1
- package/dataProviders/NullDataProvider.d.ts +16 -4
- package/dataProviders/NullDataProvider.js +30 -13
- package/dataProviders/NullDataProvider.js.map +1 -1
- package/dataProviders/RedirectsProvider.js +24 -27
- package/dataProviders/RedirectsProvider.js.map +1 -1
- package/defaultBreakpoints.js +43 -22
- package/defaultBreakpoints.js.map +1 -1
- package/documentOperations/$addElementReferenceToParent.d.ts +1 -1
- package/documentOperations/$addElementReferenceToParent.js +30 -26
- package/documentOperations/$addElementReferenceToParent.js.map +1 -1
- package/documentOperations/AddElement.js +8 -7
- package/documentOperations/AddElement.js.map +1 -1
- package/documentOperations/AddToParent.d.ts +2 -2
- package/documentOperations/AddToParent.js +14 -13
- package/documentOperations/AddToParent.js.map +1 -1
- package/documentOperations/IDocumentOperation.js +0 -3
- package/documentOperations/RemoveElement.js +10 -7
- package/documentOperations/RemoveElement.js.map +1 -1
- package/documentOperations/SetGlobalInputBinding.js +23 -22
- package/documentOperations/SetGlobalInputBinding.js.map +1 -1
- package/documentOperations/SetGlobalStyleBinding.js +23 -23
- package/documentOperations/SetGlobalStyleBinding.js.map +1 -1
- package/documentOperations/SetInputBindingOverride.js +30 -29
- package/documentOperations/SetInputBindingOverride.js.map +1 -1
- package/documentOperations/SetStyleBindingOverride.js +30 -31
- package/documentOperations/SetStyleBindingOverride.js.map +1 -1
- package/documentOperations/index.js +9 -8
- package/documentOperations/index.js.map +1 -1
- package/experiments/PostHogAnalyticsProvider.d.ts +31 -0
- package/experiments/PostHogAnalyticsProvider.js +28 -0
- package/experiments/PostHogAnalyticsProvider.js.map +1 -0
- package/experiments/analyticsProvider.d.ts +4 -0
- package/experiments/analyticsProvider.js +11 -0
- package/experiments/analyticsProvider.js.map +1 -0
- package/experiments/bucketing.d.ts +27 -0
- package/experiments/bucketing.js +91 -0
- package/experiments/bucketing.js.map +1 -0
- package/experiments/bucketing.test.d.ts +1 -0
- package/experiments/bucketing.test.js +183 -0
- package/experiments/bucketing.test.js.map +1 -0
- package/experiments/index.d.ts +5 -0
- package/experiments/index.js +5 -0
- package/experiments/render.d.ts +79 -0
- package/experiments/render.js +149 -0
- package/experiments/render.js.map +1 -0
- package/experiments/types.d.ts +108 -0
- package/experiments/types.js +4 -0
- package/experiments/types.js.map +1 -0
- package/findMatchingAstNode.js +11 -13
- package/findMatchingAstNode.js.map +1 -1
- package/generateElementId.d.ts +1 -1
- package/generateElementId.js +2 -2
- package/generateElementId.js.map +1 -1
- package/headersProvider.js +4 -3
- package/headersProvider.js.map +1 -1
- package/image/geometry.d.ts +54 -0
- package/image/geometry.js +112 -0
- package/image/geometry.js.map +1 -0
- package/image/geometry.test.d.ts +1 -0
- package/image/geometry.test.js +190 -0
- package/image/geometry.test.js.map +1 -0
- package/image/index.d.ts +3 -0
- package/image/index.js +3 -0
- package/image/presets.d.ts +6 -0
- package/image/presets.js +20 -0
- package/image/presets.js.map +1 -0
- package/image/types.d.ts +10 -0
- package/image/types.js +0 -0
- package/index.d.ts +12 -1
- package/index.js +11 -3
- package/jsonPatch.d.ts +1 -1
- package/jsonPatch.js +5 -9
- package/jsonPatch.js.map +1 -1
- package/messages.js +12 -11
- package/messages.js.map +1 -1
- package/messenger/MessageOrigin.js +12 -11
- package/messenger/MessageOrigin.js.map +1 -1
- package/messenger/Messenger.js +59 -70
- package/messenger/Messenger.js.map +1 -1
- package/messenger/index.js +0 -2
- package/package.json +19 -22
- package/registerComponentGroup.js +5 -6
- package/registerComponentGroup.js.map +1 -1
- package/tokenBinding.d.ts +26 -0
- package/tokenBinding.js +15 -0
- package/tokenBinding.js.map +1 -0
- package/tokenBinding.test.d.ts +1 -0
- package/tokenBinding.test.js +165 -0
- package/tokenBinding.test.js.map +1 -0
- package/types/ShorthandCssProperties.js +0 -3
- package/types/WebsiteBuilderTheme.d.ts +54 -45
- package/types/WebsiteBuilderTheme.js +0 -3
- package/types.d.ts +294 -13
- package/types.js +0 -3
- package/IBindingsUpdater.js.map +0 -1
- package/IRedirects.js.map +0 -1
- package/documentOperations/IDocumentOperation.js.map +0 -1
- package/index.js.map +0 -1
- package/lexical/createDefaultLexicalTheme.d.ts +0 -2
- package/lexical/createDefaultLexicalTheme.js +0 -84
- package/lexical/createDefaultLexicalTheme.js.map +0 -1
- package/lexical/createLexicalTheme.d.ts +0 -2
- package/lexical/createLexicalTheme.js +0 -7
- package/lexical/createLexicalTheme.js.map +0 -1
- package/lexical/deepMerge.d.ts +0 -1
- package/lexical/deepMerge.js +0 -23
- package/lexical/deepMerge.js.map +0 -1
- package/messenger/index.js.map +0 -1
- package/types/LexicalEditorTheme.d.ts +0 -2
- package/types/LexicalEditorTheme.js +0 -3
- package/types/LexicalEditorTheme.js.map +0 -1
- package/types/ShorthandCssProperties.js.map +0 -1
- package/types/WebsiteBuilderTheme.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1,192 +1,192 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
1
2
|
import { InheritanceProcessor } from "./InheritanceProcessor.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
}, {
|
|
15
|
-
name: "title",
|
|
16
|
-
type: "text",
|
|
17
|
-
list: false,
|
|
18
|
-
path: "title",
|
|
19
|
-
children: [],
|
|
20
|
-
input: {
|
|
21
|
-
type: "text",
|
|
22
|
-
responsive: false,
|
|
23
|
-
name: "title"
|
|
24
|
-
}
|
|
25
|
-
}];
|
|
26
|
-
describe("InheritanceProcessor", () => {
|
|
27
|
-
const breakpoints = ["desktop", "tablet", "mobile"];
|
|
28
|
-
const processor = new InheritanceProcessor(breakpoints, inputsAst);
|
|
29
|
-
it("should correctly compute inheritance info for responsive inputs and styles", () => {
|
|
30
|
-
const bindings = {
|
|
31
|
-
inputs: {
|
|
32
|
-
rowGap: {
|
|
33
|
-
static: "20px"
|
|
34
|
-
},
|
|
35
|
-
title: {
|
|
36
|
-
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"
|
|
37
14
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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"
|
|
45
26
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
+
}
|
|
64
53
|
},
|
|
65
|
-
|
|
66
|
-
|
|
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
|
+
}
|
|
67
77
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
});
|
|
110
|
-
expect(mobileResult.styles["paddingTop"]).toEqual({
|
|
111
|
-
overridden: true,
|
|
112
|
-
inheritedFrom: "tablet"
|
|
113
|
-
});
|
|
114
|
-
expect(mobileResult.styles["color"]).toEqual({
|
|
115
|
-
overridden: true,
|
|
116
|
-
inheritedFrom: "desktop"
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
it("should skip non-responsive inputs in inheritance info", () => {
|
|
120
|
-
const bindings = {
|
|
121
|
-
inputs: {
|
|
122
|
-
title: {
|
|
123
|
-
static: "Static Title"
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
styles: {},
|
|
127
|
-
overrides: {}
|
|
128
|
-
};
|
|
129
|
-
const result = processor.getInheritanceMap(bindings, "desktop");
|
|
130
|
-
expect(result.inputs["title"]).toBeUndefined();
|
|
131
|
-
});
|
|
132
|
-
it("should handle missing overrides gracefully", () => {
|
|
133
|
-
const bindings = {
|
|
134
|
-
inputs: {
|
|
135
|
-
rowGap: {
|
|
136
|
-
static: "20px"
|
|
137
|
-
}
|
|
138
|
-
},
|
|
139
|
-
styles: {
|
|
140
|
-
paddingTop: {
|
|
141
|
-
static: "10px"
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// no overrides
|
|
145
|
-
};
|
|
146
|
-
const result = processor.getInheritanceMap(bindings, "mobile");
|
|
147
|
-
expect(result.inputs["rowGap"]).toEqual({
|
|
148
|
-
overridden: false,
|
|
149
|
-
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
|
+
});
|
|
150
119
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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();
|
|
154
132
|
});
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
static: "#ec8787"
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
overrides: {
|
|
165
|
-
tablet: {
|
|
166
|
-
styles: {}
|
|
167
|
-
},
|
|
168
|
-
mobile: {
|
|
169
|
-
styles: {
|
|
170
|
-
backgroundColor: {
|
|
171
|
-
static: "#50e3c2"
|
|
133
|
+
it("should handle missing overrides gracefully", ()=>{
|
|
134
|
+
const bindings = {
|
|
135
|
+
inputs: {
|
|
136
|
+
rowGap: {
|
|
137
|
+
static: "20px"
|
|
138
|
+
}
|
|
172
139
|
},
|
|
173
|
-
|
|
174
|
-
|
|
140
|
+
styles: {
|
|
141
|
+
paddingTop: {
|
|
142
|
+
static: "10px"
|
|
143
|
+
}
|
|
175
144
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
+
});
|
|
184
155
|
});
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
+
});
|
|
188
189
|
});
|
|
189
|
-
});
|
|
190
190
|
});
|
|
191
191
|
|
|
192
192
|
//# sourceMappingURL=InheritanceProcessor.test.js.map
|
|
@@ -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.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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"}
|
|
@@ -6,5 +6,22 @@ export declare class InheritedValueResolver {
|
|
|
6
6
|
private readonly breakpoints;
|
|
7
7
|
private readonly getBindings;
|
|
8
8
|
constructor(breakpoints: string[], getBindings: GetBreakpointBindings);
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The literal inherited from the nearest ancestor breakpoint.
|
|
11
|
+
*
|
|
12
|
+
* Returns the `static` value, not a binding — the declared return type used to say `ValueBinding`,
|
|
13
|
+
* which was simply wrong and made the token work below look impossible when it is not.
|
|
14
|
+
*/
|
|
15
|
+
getInheritedValue(key: string, breakpoint: string): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* The whole binding inherited from the nearest ancestor breakpoint.
|
|
18
|
+
*
|
|
19
|
+
* Needed because a token reference has no `static` value: read through `getInheritedValue` alone, a
|
|
20
|
+
* property whose parent breakpoint holds a token looks unset, so an override would be written even
|
|
21
|
+
* when it matches what it inherits — and the theme would then stop reaching that breakpoint.
|
|
22
|
+
*
|
|
23
|
+
* A binding counts as present if it carries either a literal or a token, which is exactly the
|
|
24
|
+
* invariant `ValueBinding` maintains: one or the other, never both.
|
|
25
|
+
*/
|
|
26
|
+
getInheritedBinding(key: string, breakpoint: string): ValueBinding | undefined;
|
|
10
27
|
}
|
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
1
|
+
class InheritedValueResolver {
|
|
2
|
+
constructor(breakpoints, getBindings){
|
|
3
|
+
this.breakpoints = breakpoints;
|
|
4
|
+
this.getBindings = getBindings;
|
|
5
|
+
}
|
|
6
|
+
getInheritedValue(key, breakpoint) {
|
|
7
|
+
return this.getInheritedBinding(key, breakpoint)?.static;
|
|
8
|
+
}
|
|
9
|
+
getInheritedBinding(key, breakpoint) {
|
|
10
|
+
const currentIndex = this.breakpoints.indexOf(breakpoint);
|
|
11
|
+
for(let i = currentIndex - 1; i >= 0; i--){
|
|
12
|
+
const bp = this.breakpoints[i];
|
|
13
|
+
const bindings = this.getBindings(bp);
|
|
14
|
+
if (!bindings) continue;
|
|
15
|
+
const binding = bindings[key];
|
|
16
|
+
if (binding?.static !== void 0 || binding?.token !== void 0) return binding;
|
|
17
|
+
}
|
|
19
18
|
}
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
19
|
}
|
|
20
|
+
export { InheritedValueResolver };
|
|
23
21
|
|
|
24
22
|
//# sourceMappingURL=InheritedValueResolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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 /**\n * The literal inherited from the nearest ancestor breakpoint.\n *\n * Returns the `static` value, not a binding — the declared return type used to say `ValueBinding`,\n * which was simply wrong and made the token work below look impossible when it is not.\n */\n getInheritedValue(key: string, breakpoint: string): unknown {\n return this.getInheritedBinding(key, breakpoint)?.static;\n }\n\n /**\n * The whole binding inherited from the nearest ancestor breakpoint.\n *\n * Needed because a token reference has no `static` value: read through `getInheritedValue` alone, a\n * property whose parent breakpoint holds a token looks unset, so an override would be written even\n * when it matches what it inherits — and the theme would then stop reaching that breakpoint.\n *\n * A binding counts as present if it carries either a literal or a token, which is exactly the\n * invariant `ValueBinding` maintains: one or the other, never both.\n */\n getInheritedBinding(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 binding = bindings[key];\n if (binding?.static !== undefined || binding?.token !== undefined) {\n return binding;\n }\n }\n return undefined;\n }\n}\n"],"names":["InheritedValueResolver","breakpoints","getBindings","key","breakpoint","currentIndex","i","bp","bindings","binding","undefined"],"mappings":"AAMO,MAAMA;IAIT,YAAYC,WAAqB,EAAEC,WAAkC,CAAE;QACnE,IAAI,CAAC,WAAW,GAAGD;QACnB,IAAI,CAAC,WAAW,GAAGC;IACvB;IAQA,kBAAkBC,GAAW,EAAEC,UAAkB,EAAW;QACxD,OAAO,IAAI,CAAC,mBAAmB,CAACD,KAAKC,aAAa;IACtD;IAYA,oBAAoBD,GAAW,EAAEC,UAAkB,EAA4B;QAC3E,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,UAAUD,QAAQ,CAACL,IAAI;YAC7B,IAAIM,SAAS,WAAWC,UAAaD,SAAS,UAAUC,QACpD,OAAOD;QAEf;IAEJ;AACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DocumentElementBindings, DocumentElementInputBindings } from "./types.js";
|
|
1
|
+
import type { DocumentElementBindings, DocumentElementInputBindings, TokenReference } from "./types.js";
|
|
2
2
|
import type { InputAstNode } from "./ComponentManifestToAstConverter.js";
|
|
3
3
|
import type { ElementFactory } from "./ElementFactory.js";
|
|
4
4
|
import { InputsUpdater } from "./InputsUpdater.js";
|
|
@@ -23,15 +23,36 @@ export declare class InputsBindingsProcessor {
|
|
|
23
23
|
private inputsAst;
|
|
24
24
|
private elementReferences;
|
|
25
25
|
constructor(elementId: string, inputsAst: InputAstNode[], breakpoints: string[], rawBindings: DocumentElementBindings, elementFactory: ElementFactory);
|
|
26
|
+
/**
|
|
27
|
+
* The token references among these bindings, keyed by flat binding path.
|
|
28
|
+
*
|
|
29
|
+
* The counterpart to {@link toDeepInputs}: that resolves a reference to the CSS value so the preview
|
|
30
|
+
* renders it, this reports *that it was a reference* so a picker can show which token is selected and
|
|
31
|
+
* so {@link createUpdate} can write it back as one.
|
|
32
|
+
*
|
|
33
|
+
* Callers must seed their token map from this before editing. `createUpdate` treats an absent key as
|
|
34
|
+
* "make this a literal", which is what clears a reference when someone picks a free value — so an
|
|
35
|
+
* incomplete map silently converts every other token on the element into a frozen literal.
|
|
36
|
+
*/
|
|
37
|
+
toTokenMap(flat?: NonNullable<DocumentElementBindings["inputs"]>): Record<string, TokenReference>;
|
|
26
38
|
/**
|
|
27
39
|
* Converts flat input bindings into deep inputs object (removes `.static` wrappers).
|
|
40
|
+
*
|
|
41
|
+
* A token reference yields its `var(--wby-…)` form, so an input bound to a theme colour renders the
|
|
42
|
+
* themed value in the editor exactly as it will on the site. Use {@link toTokenMap} alongside this
|
|
43
|
+
* when you need to know a value came from a token rather than a literal.
|
|
28
44
|
*/
|
|
29
45
|
toDeepInputs(flat: NonNullable<DocumentElementBindings["inputs"]>): DeepBindings;
|
|
30
46
|
/**
|
|
31
47
|
* Flattens deep inputs object into flat bindings with `.static` wrappers,
|
|
32
48
|
* skipping overrides that match inherited parent breakpoint values.
|
|
49
|
+
*
|
|
50
|
+
* @param tokens Flat binding paths in this map are written as token references instead of literals.
|
|
51
|
+
* A path absent from it is written as `static`, which is what clears a reference when
|
|
52
|
+
* someone picks a free value over a token — so callers must seed the map from
|
|
53
|
+
* {@link toTokenMap} rather than passing only the path they changed.
|
|
33
54
|
*/
|
|
34
|
-
createUpdate(inputs: DeepBindings, breakpoint: string): InputsUpdater;
|
|
55
|
+
createUpdate(inputs: DeepBindings, breakpoint: string, tokens?: Record<string, TokenReference>): InputsUpdater;
|
|
35
56
|
private getElementReferences;
|
|
36
57
|
private isBaseBreakpoint;
|
|
37
58
|
}
|