@builder.io/sdk-svelte 0.2.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/--package.json +10 -5
- package/package/CHANGELOG.md +17 -0
- package/package/blocks/columns/columns.svelte +1 -1
- package/package/blocks/symbol/symbol.svelte +1 -1
- package/package/components/render-block/block-styles.svelte +3 -1
- package/package/components/render-block/render-block.helpers.d.ts +0 -1
- package/package/components/render-block/render-block.helpers.js +8 -20
- package/package/components/render-block/render-block.svelte +25 -19
- package/package/components/render-block/render-repeated-block.svelte +3 -2
- package/package/components/render-content/components/render-styles.svelte +1 -1
- package/package/components/render-content/render-content.svelte +99 -10
- package/package/components/render-content/render-content.svelte.d.ts +5 -0
- package/package/components/render-content/render-content.types.d.ts +11 -2
- package/package/components/render-content/wrap-component-ref.d.ts +6 -0
- package/package/components/render-content/wrap-component-ref.js +6 -0
- package/package/components/render-content-variants/helpers.d.ts +17 -0
- package/package/components/render-content-variants/helpers.js +182 -0
- package/package/components/render-content-variants/render-content-variants.svelte +70 -0
- package/package/components/render-content-variants/render-content-variants.svelte.d.ts +23 -0
- package/package/components/render-inlined-styles.svelte +3 -15
- package/package/components/render-inlined-styles.svelte.d.ts +2 -0
- package/package/constants/sdk-version.d.ts +1 -0
- package/package/constants/sdk-version.js +1 -0
- package/package/context/builder.context.d.ts +3 -2
- package/package/context/builder.context.js +3 -2
- package/package/context/types.d.ts +17 -2
- package/package/functions/evaluate.d.ts +4 -3
- package/package/functions/evaluate.js +23 -2
- package/package/functions/evaluate.test.d.ts +1 -0
- package/package/functions/evaluate.test.js +17 -0
- package/package/functions/get-block-actions-handler.d.ts +1 -1
- package/package/functions/get-block-actions-handler.js +3 -1
- package/package/functions/get-block-actions.d.ts +1 -1
- package/package/functions/get-content/generate-content-url.js +2 -2
- package/package/functions/get-content/generate-content-url.test.js +15 -0
- package/package/functions/get-content/index.d.ts +7 -2
- package/package/functions/get-content/index.js +43 -20
- package/package/functions/get-content/types.d.ts +6 -0
- package/package/functions/get-processed-block.d.ts +2 -2
- package/package/functions/get-processed-block.js +16 -4
- package/package/functions/get-processed-block.test.js +3 -1
- package/package/helpers/ab-tests.d.ts +8 -7
- package/package/helpers/ab-tests.js +103 -4
- package/package/helpers/canTrack.d.ts +1 -0
- package/package/helpers/canTrack.js +2 -0
- package/package/helpers/cookie.d.ts +7 -3
- package/package/helpers/cookie.js +9 -6
- package/package/helpers/logger.d.ts +1 -0
- package/package/helpers/logger.js +1 -0
- package/package/index-helpers/blocks-exports.d.ts +1 -1
- package/package/index-helpers/blocks-exports.js +1 -1
- package/package/index.d.ts +8 -7
- package/package/index.js +6 -7
- package/package/scripts/init-editing.d.ts +1 -0
- package/package/scripts/init-editing.js +2 -0
- package/package/types/builder-content.d.ts +1 -3
- package/package.json +4 -8
- package/src/blocks/columns/columns.svelte +1 -5
- package/src/blocks/symbol/symbol.svelte +1 -1
- package/src/components/render-block/block-styles.svelte +3 -1
- package/src/components/render-block/render-block.helpers.ts +9 -31
- package/src/components/render-block/render-block.svelte +24 -19
- package/src/components/render-block/render-repeated-block.svelte +3 -2
- package/src/components/render-content/components/render-styles.svelte +1 -1
- package/src/components/render-content/render-content.svelte +101 -10
- package/src/components/render-content/render-content.types.ts +11 -2
- package/src/components/render-content/wrap-component-ref.ts +6 -0
- package/src/components/render-content-variants/helpers.ts +245 -0
- package/src/components/render-content-variants/render-content-variants.svelte +83 -0
- package/src/components/render-inlined-styles.svelte +3 -16
- package/src/constants/sdk-version.ts +1 -0
- package/src/context/builder.context.ts +3 -2
- package/src/context/types.ts +17 -2
- package/src/functions/evaluate.test.ts +21 -0
- package/src/functions/evaluate.ts +46 -4
- package/src/functions/get-block-actions-handler.ts +7 -2
- package/src/functions/get-block-actions.ts +4 -1
- package/src/functions/get-content/generate-content-url.test.ts +17 -0
- package/src/functions/get-content/generate-content-url.ts +2 -1
- package/src/functions/get-content/index.ts +57 -26
- package/src/functions/get-content/types.ts +7 -0
- package/src/functions/get-processed-block.test.ts +3 -1
- package/src/functions/get-processed-block.ts +28 -6
- package/src/helpers/ab-tests.ts +164 -11
- package/src/helpers/canTrack.ts +4 -0
- package/src/helpers/cookie.ts +16 -11
- package/src/helpers/logger.ts +1 -0
- package/src/index-helpers/blocks-exports.ts +1 -1
- package/src/index.ts +17 -8
- package/src/scripts/init-editing.ts +3 -0
- package/src/types/builder-content.ts +1 -3
- package/package/functions/get-content/ab-testing.d.ts +0 -5
- package/package/functions/get-content/ab-testing.js +0 -78
- package/src/functions/get-content/ab-testing.ts +0 -132
package/package/--package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builder.io/sdk-svelte",
|
|
3
3
|
"description": "Builder.io SDK for Svelte",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"package",
|
|
@@ -78,13 +78,18 @@
|
|
|
78
78
|
"./components/render-content/render-content.helpers": "./components/render-content/render-content.helpers.js",
|
|
79
79
|
"./components/render-content/render-content.svelte": "./components/render-content/render-content.svelte",
|
|
80
80
|
"./components/render-content/render-content.types": "./components/render-content/render-content.types.js",
|
|
81
|
+
"./components/render-content/wrap-component-ref": "./components/render-content/wrap-component-ref.js",
|
|
82
|
+
"./components/render-content-variants/helpers": "./components/render-content-variants/helpers.js",
|
|
83
|
+
"./components/render-content-variants/render-content-variants.svelte": "./components/render-content-variants/render-content-variants.svelte",
|
|
81
84
|
"./components/render-inlined-styles.svelte": "./components/render-inlined-styles.svelte",
|
|
82
85
|
"./constants/builder-registered-components": "./constants/builder-registered-components.js",
|
|
83
86
|
"./constants/device-sizes": "./constants/device-sizes.js",
|
|
87
|
+
"./constants/sdk-version": "./constants/sdk-version.js",
|
|
84
88
|
"./constants/target": "./constants/target.js",
|
|
85
89
|
"./context/builder.context": "./context/builder.context.js",
|
|
86
90
|
"./context/types": "./context/types.js",
|
|
87
91
|
"./functions/camel-to-kebab-case": "./functions/camel-to-kebab-case.js",
|
|
92
|
+
"./functions/evaluate.test": "./functions/evaluate.test.js",
|
|
88
93
|
"./functions/evaluate": "./functions/evaluate.js",
|
|
89
94
|
"./functions/event-handler-name": "./functions/event-handler-name.js",
|
|
90
95
|
"./functions/extract-text-styles": "./functions/extract-text-styles.js",
|
|
@@ -95,7 +100,6 @@
|
|
|
95
100
|
"./functions/get-block-properties": "./functions/get-block-properties.js",
|
|
96
101
|
"./functions/get-builder-search-params/fn.test": "./functions/get-builder-search-params/fn.test.js",
|
|
97
102
|
"./functions/get-builder-search-params": "./functions/get-builder-search-params/index.js",
|
|
98
|
-
"./functions/get-content/ab-testing": "./functions/get-content/ab-testing.js",
|
|
99
103
|
"./functions/get-content/generate-content-url.test": "./functions/get-content/generate-content-url.test.js",
|
|
100
104
|
"./functions/get-content/generate-content-url": "./functions/get-content/generate-content-url.js",
|
|
101
105
|
"./functions/get-content": "./functions/get-content/index.js",
|
|
@@ -124,6 +128,7 @@
|
|
|
124
128
|
"./functions/transform-block-properties": "./functions/transform-block-properties.js",
|
|
125
129
|
"./functions/transform-block": "./functions/transform-block.js",
|
|
126
130
|
"./helpers/ab-tests": "./helpers/ab-tests.js",
|
|
131
|
+
"./helpers/canTrack": "./helpers/canTrack.js",
|
|
127
132
|
"./helpers/cookie": "./helpers/cookie.js",
|
|
128
133
|
"./helpers/css": "./helpers/css.js",
|
|
129
134
|
"./helpers/flatten": "./helpers/flatten.js",
|
|
@@ -153,10 +158,10 @@
|
|
|
153
158
|
"types": "./package/index.d.ts",
|
|
154
159
|
"devDependencies": {
|
|
155
160
|
"@sveltejs/adapter-auto": "1.0.0-next.71",
|
|
156
|
-
"@sveltejs/kit": "^1.
|
|
161
|
+
"@sveltejs/kit": "^1.16.2",
|
|
157
162
|
"@sveltejs/package": "1.0.0-next.1",
|
|
158
|
-
"svelte": "^3.
|
|
159
|
-
"svelte-check": "^
|
|
163
|
+
"svelte": "^3.59.1",
|
|
164
|
+
"svelte-check": "^3.3.2",
|
|
160
165
|
"svelte-preprocess": "^4.10.6",
|
|
161
166
|
"tslib": "^2.3.1",
|
|
162
167
|
"typescript": "^4",
|
package/package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
### 0.4.0
|
|
2
|
+
|
|
3
|
+
- Feature: A/B tests are now rendered correctly during server-side rendering (SSR) when applicable. This behaviour is backwards compatible with previous versions.
|
|
4
|
+
|
|
5
|
+
### 0.3.1
|
|
6
|
+
|
|
7
|
+
- Feature: Added SDK version to data sent to visual editor for improved debugging.
|
|
8
|
+
- Fix: Columns block: removed redundant margin-left in first column.
|
|
9
|
+
|
|
10
|
+
### 0.3.0
|
|
11
|
+
|
|
12
|
+
- No Changes.
|
|
13
|
+
|
|
14
|
+
### 0.2.3
|
|
15
|
+
|
|
16
|
+
- No Changes.
|
|
17
|
+
|
|
1
18
|
### 0.2.2
|
|
2
19
|
|
|
3
20
|
- Fix: dynamic bindings for Link URLs.
|
|
@@ -104,7 +104,7 @@ $: onUpdateFn_0(...[symbol]);
|
|
|
104
104
|
customComponents={Object.values(builderContext.registeredComponents)}
|
|
105
105
|
data={{
|
|
106
106
|
...symbol?.data,
|
|
107
|
-
...builderContext.
|
|
107
|
+
...builderContext.localState,
|
|
108
108
|
...contentToUse?.data?.state,
|
|
109
109
|
}}
|
|
110
110
|
model={symbol?.model}
|
|
@@ -11,7 +11,9 @@ export let context;
|
|
|
11
11
|
$: useBlock = () => {
|
|
12
12
|
return getProcessedBlock({
|
|
13
13
|
block: block,
|
|
14
|
-
|
|
14
|
+
localState: context.localState,
|
|
15
|
+
rootState: context.rootState,
|
|
16
|
+
rootSetState: context.rootSetState,
|
|
15
17
|
context: context.context,
|
|
16
18
|
shouldEvaluateBindings: true,
|
|
17
19
|
});
|
|
@@ -27,7 +27,9 @@ export const isEmptyHtmlElement = (tagName) => {
|
|
|
27
27
|
export const getComponent = ({ block, context, }) => {
|
|
28
28
|
const componentName = getProcessedBlock({
|
|
29
29
|
block,
|
|
30
|
-
|
|
30
|
+
localState: context.localState,
|
|
31
|
+
rootState: context.rootState,
|
|
32
|
+
rootSetState: context.rootSetState,
|
|
31
33
|
context: context.context,
|
|
32
34
|
shouldEvaluateBindings: false,
|
|
33
35
|
}).component?.name;
|
|
@@ -57,7 +59,9 @@ export const getRepeatItemData = ({ block, context, }) => {
|
|
|
57
59
|
}
|
|
58
60
|
const itemsArray = evaluate({
|
|
59
61
|
code: repeat.collection,
|
|
60
|
-
|
|
62
|
+
localState: context.localState,
|
|
63
|
+
rootState: context.rootState,
|
|
64
|
+
rootSetState: context.rootSetState,
|
|
61
65
|
context: context.context,
|
|
62
66
|
});
|
|
63
67
|
if (!Array.isArray(itemsArray)) {
|
|
@@ -68,8 +72,8 @@ export const getRepeatItemData = ({ block, context, }) => {
|
|
|
68
72
|
const repeatArray = itemsArray.map((item, index) => ({
|
|
69
73
|
context: {
|
|
70
74
|
...context,
|
|
71
|
-
|
|
72
|
-
...context.
|
|
75
|
+
localState: {
|
|
76
|
+
...context.localState,
|
|
73
77
|
$index: index,
|
|
74
78
|
$item: item,
|
|
75
79
|
[itemNameToUse]: item,
|
|
@@ -80,19 +84,3 @@ export const getRepeatItemData = ({ block, context, }) => {
|
|
|
80
84
|
}));
|
|
81
85
|
return repeatArray;
|
|
82
86
|
};
|
|
83
|
-
export const getProxyState = (context) => {
|
|
84
|
-
if (typeof Proxy === 'undefined') {
|
|
85
|
-
console.error('no Proxy available in this environment, cannot proxy state.');
|
|
86
|
-
return context.state;
|
|
87
|
-
}
|
|
88
|
-
const useState = new Proxy(context.state, {
|
|
89
|
-
set: (obj, prop, value) => {
|
|
90
|
-
// set the value on the state object, so that the event handler instantly gets the update.
|
|
91
|
-
obj[prop] = value;
|
|
92
|
-
// set the value in the context, so that the rest of the app gets the update.
|
|
93
|
-
context.setState?.(obj);
|
|
94
|
-
return true;
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
return useState;
|
|
98
|
-
};
|
|
@@ -5,7 +5,7 @@ import { getBlockComponentOptions } from "../../functions/get-block-component-op
|
|
|
5
5
|
import { getBlockProperties } from "../../functions/get-block-properties.js";
|
|
6
6
|
import { getProcessedBlock } from "../../functions/get-processed-block.js";
|
|
7
7
|
import BlockStyles from "./block-styles.svelte";
|
|
8
|
-
import { getComponent,
|
|
8
|
+
import { getComponent, getRepeatItemData, isEmptyHtmlElement, } from "./render-block.helpers.js";
|
|
9
9
|
import RenderRepeatedBlock from "./render-repeated-block.svelte";
|
|
10
10
|
import { TARGET } from "../../constants/target.js";
|
|
11
11
|
import { extractTextStyles } from "../../functions/extract-text-styles.js";
|
|
@@ -29,12 +29,20 @@ const setAttrs = (node, attrs = {}) => {
|
|
|
29
29
|
};
|
|
30
30
|
export let block;
|
|
31
31
|
export let context;
|
|
32
|
+
$: repeatItem = () => {
|
|
33
|
+
return getRepeatItemData({
|
|
34
|
+
block: block,
|
|
35
|
+
context: context,
|
|
36
|
+
});
|
|
37
|
+
};
|
|
32
38
|
$: useBlock = () => {
|
|
33
|
-
return
|
|
39
|
+
return repeatItem()
|
|
34
40
|
? block
|
|
35
41
|
: getProcessedBlock({
|
|
36
42
|
block: block,
|
|
37
|
-
|
|
43
|
+
localState: context.localState,
|
|
44
|
+
rootState: context.rootState,
|
|
45
|
+
rootSetState: context.rootSetState,
|
|
38
46
|
context: context.context,
|
|
39
47
|
shouldEvaluateBindings: true,
|
|
40
48
|
});
|
|
@@ -51,7 +59,9 @@ $: canShowBlock = () => {
|
|
|
51
59
|
$: actions = () => {
|
|
52
60
|
return getBlockActions({
|
|
53
61
|
block: useBlock(),
|
|
54
|
-
|
|
62
|
+
rootState: context.rootState,
|
|
63
|
+
rootSetState: context.rootSetState,
|
|
64
|
+
localState: context.localState,
|
|
55
65
|
context: context.context,
|
|
56
66
|
});
|
|
57
67
|
};
|
|
@@ -77,7 +87,7 @@ $: childrenWithoutParentComponent = () => {
|
|
|
77
87
|
* NOTE: We make sure not to render this if `repeatItemData` is non-null, because that means we are rendering an array of
|
|
78
88
|
* blocks, and the children will be repeated within those blocks.
|
|
79
89
|
*/
|
|
80
|
-
const shouldRenderChildrenOutsideRef = !component?.component && !
|
|
90
|
+
const shouldRenderChildrenOutsideRef = !component?.component && !repeatItem();
|
|
81
91
|
return shouldRenderChildrenOutsideRef ? useBlock().children ?? [] : [];
|
|
82
92
|
};
|
|
83
93
|
$: childrenContext = () => {
|
|
@@ -94,10 +104,11 @@ $: childrenContext = () => {
|
|
|
94
104
|
return {
|
|
95
105
|
apiKey: context.apiKey,
|
|
96
106
|
apiVersion: context.apiVersion,
|
|
97
|
-
|
|
107
|
+
localState: context.localState,
|
|
108
|
+
rootState: context.rootState,
|
|
109
|
+
rootSetState: context.rootSetState,
|
|
98
110
|
content: context.content,
|
|
99
111
|
context: context.context,
|
|
100
|
-
setState: context.setState,
|
|
101
112
|
registeredComponents: context.registeredComponents,
|
|
102
113
|
inheritedStyles: getInheritedTextStyles(),
|
|
103
114
|
};
|
|
@@ -128,28 +139,23 @@ let component = getComponent({
|
|
|
128
139
|
block: block,
|
|
129
140
|
context: context,
|
|
130
141
|
});
|
|
131
|
-
let
|
|
132
|
-
block: block,
|
|
133
|
-
context: context,
|
|
134
|
-
});
|
|
135
|
-
let tag = block.tagName || "div";
|
|
136
|
-
let proxyState = getProxyState(context);
|
|
142
|
+
let Tag = block.tagName || "div";
|
|
137
143
|
</script>
|
|
138
144
|
|
|
139
145
|
{#if canShowBlock()}
|
|
140
146
|
{#if !component?.noWrap}
|
|
141
|
-
{#if isEmptyHtmlElement(
|
|
142
|
-
<svelte:element this={
|
|
147
|
+
{#if isEmptyHtmlElement(Tag)}
|
|
148
|
+
<svelte:element this={Tag} {...attributes()} use:setAttrs={actions()} />
|
|
143
149
|
{/if}
|
|
144
150
|
|
|
145
|
-
{#if !isEmptyHtmlElement(
|
|
146
|
-
{#each
|
|
151
|
+
{#if !isEmptyHtmlElement(Tag) && repeatItem()}
|
|
152
|
+
{#each repeatItem() as data, index (index)}
|
|
147
153
|
<RenderRepeatedBlock repeatContext={data.context} block={data.block} />
|
|
148
154
|
{/each}
|
|
149
155
|
{/if}
|
|
150
156
|
|
|
151
|
-
{#if !isEmptyHtmlElement(
|
|
152
|
-
<svelte:element this={
|
|
157
|
+
{#if !isEmptyHtmlElement(Tag) && !repeatItem()}
|
|
158
|
+
<svelte:element this={Tag} {...attributes()} use:setAttrs={actions()}>
|
|
153
159
|
<RenderComponent {...renderComponentProps()} />
|
|
154
160
|
|
|
155
161
|
{#each childrenWithoutParentComponent() as child ("render-block-" + child.id)}
|
|
@@ -16,8 +16,9 @@ export let block;
|
|
|
16
16
|
export let repeatContext;
|
|
17
17
|
setContext(BuilderContext.key, {
|
|
18
18
|
content: repeatContext.content,
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
localState: repeatContext.localState,
|
|
20
|
+
rootState: repeatContext.rootState,
|
|
21
|
+
rootSetState: repeatContext.rootSetState,
|
|
21
22
|
context: repeatContext.context,
|
|
22
23
|
apiKey: repeatContext.apiKey,
|
|
23
24
|
registeredComponents: repeatContext.registeredComponents,
|
|
@@ -17,6 +17,35 @@ import { getInteractionPropertiesForEvent } from "../../functions/track/interact
|
|
|
17
17
|
import { getContentInitialValue, getContextStateInitialValue, } from "./render-content.helpers.js";
|
|
18
18
|
import { TARGET } from "../../constants/target.js";
|
|
19
19
|
import { logger } from "../../helpers/logger.js";
|
|
20
|
+
import { getRenderContentScriptString } from "../render-content-variants/helpers.js";
|
|
21
|
+
import { wrapComponentRef } from "./wrap-component-ref.js";
|
|
22
|
+
const isEvent = (attr) => attr.startsWith("on:");
|
|
23
|
+
const isNonEvent = (attr) => !attr.startsWith("on:");
|
|
24
|
+
const filterAttrs = (attrs = {}, filter) => {
|
|
25
|
+
const validAttr = {};
|
|
26
|
+
Object.keys(attrs).forEach((attr) => {
|
|
27
|
+
if (filter(attr)) {
|
|
28
|
+
validAttr[attr] = attrs[attr];
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
return validAttr;
|
|
32
|
+
};
|
|
33
|
+
const setAttrs = (node, attrs = {}) => {
|
|
34
|
+
const attrKeys = Object.keys(attrs);
|
|
35
|
+
const setup = (attr) => node.addEventListener(attr.substr(3), attrs[attr]);
|
|
36
|
+
const teardown = (attr) => node.removeEventListener(attr.substr(3), attrs[attr]);
|
|
37
|
+
attrKeys.map(setup);
|
|
38
|
+
return {
|
|
39
|
+
update(attrs = {}) {
|
|
40
|
+
const attrKeys = Object.keys(attrs);
|
|
41
|
+
attrKeys.map(teardown);
|
|
42
|
+
attrKeys.map(setup);
|
|
43
|
+
},
|
|
44
|
+
destroy() {
|
|
45
|
+
attrKeys.map(teardown);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
20
49
|
export let content;
|
|
21
50
|
export let data;
|
|
22
51
|
export let canTrack;
|
|
@@ -25,7 +54,12 @@ export let customComponents;
|
|
|
25
54
|
export let model;
|
|
26
55
|
export let context;
|
|
27
56
|
export let apiKey;
|
|
57
|
+
export let parentContentId;
|
|
58
|
+
export let hideContent;
|
|
59
|
+
export let classNameProp;
|
|
60
|
+
export let isSsrAbTest;
|
|
28
61
|
export let includeRefs;
|
|
62
|
+
export let enrich;
|
|
29
63
|
export let apiVersion;
|
|
30
64
|
function mergeNewContent(newContent) {
|
|
31
65
|
useContent = {
|
|
@@ -51,8 +85,8 @@ function setBreakpoints(breakpoints) {
|
|
|
51
85
|
},
|
|
52
86
|
};
|
|
53
87
|
}
|
|
54
|
-
function
|
|
55
|
-
contentState =
|
|
88
|
+
function contentSetState(newRootState) {
|
|
89
|
+
contentState = newRootState;
|
|
56
90
|
}
|
|
57
91
|
function processMessage(event) {
|
|
58
92
|
const { data } = event;
|
|
@@ -97,7 +131,9 @@ function evaluateJsCode() {
|
|
|
97
131
|
evaluate({
|
|
98
132
|
code: jsCode,
|
|
99
133
|
context: context || {},
|
|
100
|
-
|
|
134
|
+
localState: undefined,
|
|
135
|
+
rootState: contentState,
|
|
136
|
+
rootSetState: contentSetState,
|
|
101
137
|
});
|
|
102
138
|
}
|
|
103
139
|
}
|
|
@@ -123,7 +159,9 @@ function evalExpression(expression) {
|
|
|
123
159
|
return expression.replace(/{{([^}]+)}}/g, (_match, group) => evaluate({
|
|
124
160
|
code: group,
|
|
125
161
|
context: context || {},
|
|
126
|
-
|
|
162
|
+
localState: undefined,
|
|
163
|
+
rootState: contentState,
|
|
164
|
+
rootSetState: contentSetState,
|
|
127
165
|
}));
|
|
128
166
|
}
|
|
129
167
|
function handleRequest({ url, key }) {
|
|
@@ -134,7 +172,7 @@ function handleRequest({ url, key }) {
|
|
|
134
172
|
...contentState,
|
|
135
173
|
[key]: json,
|
|
136
174
|
};
|
|
137
|
-
|
|
175
|
+
contentSetState(newState);
|
|
138
176
|
})
|
|
139
177
|
.catch((err) => {
|
|
140
178
|
console.error("error fetching dynamic data", url, err);
|
|
@@ -187,12 +225,20 @@ let allRegisteredComponents = [
|
|
|
187
225
|
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
188
226
|
...components,
|
|
189
227
|
...(customComponents || []),
|
|
190
|
-
].reduce((acc, curr) => ({
|
|
228
|
+
].reduce((acc, { component, ...curr }) => ({
|
|
191
229
|
...acc,
|
|
192
|
-
[curr.name]:
|
|
230
|
+
[curr.name]: {
|
|
231
|
+
component: TARGET === "vue3" ? wrapComponentRef(component) : component,
|
|
232
|
+
...curr,
|
|
233
|
+
},
|
|
193
234
|
}), {});
|
|
194
235
|
let httpReqsData = {};
|
|
195
236
|
let clicked = false;
|
|
237
|
+
let scriptStr = getRenderContentScriptString({
|
|
238
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
239
|
+
contentId: content?.id,
|
|
240
|
+
parentContentId: parentContentId,
|
|
241
|
+
});
|
|
196
242
|
onMount(() => {
|
|
197
243
|
if (!apiKey) {
|
|
198
244
|
logger.error("No API key provided to `RenderContent` component. This can cause issues. Please provide an API key using the `apiKey` prop.");
|
|
@@ -212,6 +258,11 @@ onMount(() => {
|
|
|
212
258
|
includeRefs: includeRefs,
|
|
213
259
|
}
|
|
214
260
|
: {}),
|
|
261
|
+
...(enrich
|
|
262
|
+
? {
|
|
263
|
+
enrich: enrich,
|
|
264
|
+
}
|
|
265
|
+
: {}),
|
|
215
266
|
});
|
|
216
267
|
Object.values(allRegisteredComponents).forEach((registeredComponent) => {
|
|
217
268
|
const message = createRegisterComponentMessage(registeredComponent);
|
|
@@ -287,11 +338,14 @@ setContext(builderContext.key, {
|
|
|
287
338
|
get content() {
|
|
288
339
|
return useContent;
|
|
289
340
|
},
|
|
290
|
-
get
|
|
341
|
+
get localState() {
|
|
342
|
+
return undefined;
|
|
343
|
+
},
|
|
344
|
+
get rootState() {
|
|
291
345
|
return contentState;
|
|
292
346
|
},
|
|
293
|
-
get
|
|
294
|
-
return
|
|
347
|
+
get rootSetState() {
|
|
348
|
+
return TARGET === "qwik" ? undefined : contentSetState;
|
|
295
349
|
},
|
|
296
350
|
get context() {
|
|
297
351
|
return context || {};
|
|
@@ -325,7 +379,42 @@ onDestroy(() => {
|
|
|
325
379
|
}}
|
|
326
380
|
builder-content-id={useContent?.id}
|
|
327
381
|
builder-model={model}
|
|
382
|
+
{...filterAttrs(
|
|
383
|
+
TARGET === "reactNative"
|
|
384
|
+
? {
|
|
385
|
+
dataSet: {
|
|
386
|
+
// currently, we can't set the actual ID here.
|
|
387
|
+
// we don't need it right now, we just need to identify content divs for testing.
|
|
388
|
+
"builder-content-id": "",
|
|
389
|
+
},
|
|
390
|
+
}
|
|
391
|
+
: {},
|
|
392
|
+
isNonEvent
|
|
393
|
+
)}
|
|
394
|
+
{...hideContent
|
|
395
|
+
? {
|
|
396
|
+
hidden: true,
|
|
397
|
+
"aria-hidden": true,
|
|
398
|
+
}
|
|
399
|
+
: {}}
|
|
400
|
+
class={classNameProp}
|
|
401
|
+
use:setAttrs={filterAttrs(
|
|
402
|
+
TARGET === "reactNative"
|
|
403
|
+
? {
|
|
404
|
+
dataSet: {
|
|
405
|
+
// currently, we can't set the actual ID here.
|
|
406
|
+
// we don't need it right now, we just need to identify content divs for testing.
|
|
407
|
+
"builder-content-id": "",
|
|
408
|
+
},
|
|
409
|
+
}
|
|
410
|
+
: {},
|
|
411
|
+
isEvent
|
|
412
|
+
)}
|
|
328
413
|
>
|
|
414
|
+
{#if isSsrAbTest}
|
|
415
|
+
<svelte:element this={"script"}>{@html scriptStr}</svelte:element>
|
|
416
|
+
{/if}
|
|
417
|
+
|
|
329
418
|
{#if TARGET !== "reactNative"}
|
|
330
419
|
<RenderContentStyles
|
|
331
420
|
contentId={useContent?.id}
|
|
@@ -10,7 +10,12 @@ declare const __propDef: {
|
|
|
10
10
|
model: RenderContentProps["model"];
|
|
11
11
|
context: RenderContentProps["context"];
|
|
12
12
|
apiKey: RenderContentProps["apiKey"];
|
|
13
|
+
parentContentId: RenderContentProps["parentContentId"];
|
|
14
|
+
hideContent: RenderContentProps["hideContent"];
|
|
15
|
+
classNameProp: RenderContentProps["classNameProp"];
|
|
16
|
+
isSsrAbTest: RenderContentProps["isSsrAbTest"];
|
|
13
17
|
includeRefs: RenderContentProps["includeRefs"];
|
|
18
|
+
enrich: RenderContentProps["enrich"];
|
|
14
19
|
apiVersion: RenderContentProps["apiVersion"];
|
|
15
20
|
};
|
|
16
21
|
events: {
|
|
@@ -2,7 +2,7 @@ import type { BuilderRenderContext, RegisteredComponent, BuilderRenderState } fr
|
|
|
2
2
|
import type { BuilderContent } from '../../types/builder-content';
|
|
3
3
|
import type { Nullable } from '../../types/typescript';
|
|
4
4
|
import type { ApiVersion } from '../../types/api-version';
|
|
5
|
-
export
|
|
5
|
+
export interface RenderContentProps {
|
|
6
6
|
content?: Nullable<BuilderContent>;
|
|
7
7
|
model?: string;
|
|
8
8
|
data?: {
|
|
@@ -14,8 +14,17 @@ export type RenderContentProps = {
|
|
|
14
14
|
customComponents?: RegisteredComponent[];
|
|
15
15
|
canTrack?: boolean;
|
|
16
16
|
locale?: string;
|
|
17
|
+
/** @deprecated use `enrich` instead **/
|
|
17
18
|
includeRefs?: boolean;
|
|
18
|
-
|
|
19
|
+
enrich?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* TO-DO: improve qwik generator to not remap this name for non-HTML tags, then name it `className`
|
|
22
|
+
*/
|
|
23
|
+
classNameProp?: string;
|
|
24
|
+
hideContent?: boolean;
|
|
25
|
+
parentContentId?: string;
|
|
26
|
+
isSsrAbTest?: boolean;
|
|
27
|
+
}
|
|
19
28
|
export interface BuilderComponentStateChange {
|
|
20
29
|
state: BuilderRenderState;
|
|
21
30
|
ref: {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Nullable } from '../../helpers/nullable';
|
|
2
|
+
import type { BuilderContent } from '../../types/builder-content';
|
|
3
|
+
export declare const getVariants: (content: Nullable<BuilderContent>) => import("../../types/builder-content").BuilderContentVariation[];
|
|
4
|
+
export declare const checkShouldRunVariants: ({ canTrack, content, }: {
|
|
5
|
+
canTrack: Nullable<boolean>;
|
|
6
|
+
content: Nullable<BuilderContent>;
|
|
7
|
+
}) => boolean;
|
|
8
|
+
type VariantData = {
|
|
9
|
+
id: string;
|
|
10
|
+
testRatio?: number;
|
|
11
|
+
};
|
|
12
|
+
export declare const getVariantsScriptString: (variants: VariantData[], contentId: string) => string;
|
|
13
|
+
export declare const getRenderContentScriptString: ({ parentContentId, contentId, }: {
|
|
14
|
+
contentId: string;
|
|
15
|
+
parentContentId: string;
|
|
16
|
+
}) => string;
|
|
17
|
+
export {};
|