@builder.io/sdk-svelte 0.4.0 → 0.4.2
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 +1 -1
- package/package/CHANGELOG.md +10 -0
- package/package/blocks/BaseText.svelte +3 -1
- package/package/blocks/columns/columns.svelte +1 -1
- package/package/blocks/embed/embed.svelte +1 -1
- package/package/blocks/img/component-info.js +1 -1
- package/package/blocks/symbol/symbol.svelte +9 -9
- package/package/components/render-block/render-block.svelte +18 -39
- package/package/components/render-block/render-block.svelte.d.ts +2 -1
- package/package/components/render-block/render-component.svelte +1 -1
- package/package/components/render-block/render-component.svelte.d.ts +2 -1
- package/package/components/render-block/render-repeated-block.svelte +5 -13
- package/package/components/render-block/render-repeated-block.svelte.d.ts +1 -1
- package/package/components/render-blocks.svelte +4 -1
- package/package/components/render-content/render-content.svelte +83 -95
- package/package/components/render-content/render-content.svelte.d.ts +5 -5
- package/package/constants/sdk-version.d.ts +1 -1
- package/package/constants/sdk-version.js +1 -1
- package/package/context/builder.context.d.ts +2 -2
- package/package/context/builder.context.js +3 -2
- package/package/functions/get-builder-search-params/index.d.ts +6 -0
- package/package/functions/get-builder-search-params/index.js +6 -0
- package/package/index.d.ts +1 -0
- package/package/index.js +1 -0
- package/package.json +1 -1
- package/src/blocks/BaseText.svelte +3 -1
- package/src/blocks/columns/columns.svelte +1 -1
- package/src/blocks/embed/embed.svelte +1 -1
- package/src/blocks/img/component-info.ts +1 -1
- package/src/blocks/symbol/symbol.svelte +9 -9
- package/src/components/render-block/render-block.svelte +19 -40
- package/src/components/render-block/render-component.svelte +3 -2
- package/src/components/render-block/render-repeated-block.svelte +6 -13
- package/src/components/render-blocks.svelte +4 -1
- package/src/components/render-content/render-content.svelte +94 -103
- package/src/constants/sdk-version.ts +1 -1
- package/src/context/builder.context.ts +3 -2
- package/src/functions/get-builder-search-params/index.ts +6 -0
- package/src/index.ts +2 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onDestroy, onMount, setContext } from "svelte";
|
|
3
|
+
import { writable } from "svelte/store";
|
|
3
4
|
|
|
4
5
|
import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
|
|
5
6
|
import type {
|
|
@@ -74,49 +75,50 @@
|
|
|
74
75
|
};
|
|
75
76
|
};
|
|
76
77
|
|
|
77
|
-
export let content: RenderContentProps["content"];
|
|
78
|
-
export let data: RenderContentProps["data"];
|
|
79
78
|
export let canTrack: RenderContentProps["canTrack"];
|
|
80
|
-
export let locale: RenderContentProps["locale"];
|
|
81
|
-
export let customComponents: RenderContentProps["customComponents"];
|
|
82
79
|
export let model: RenderContentProps["model"];
|
|
83
80
|
export let context: RenderContentProps["context"];
|
|
84
81
|
export let apiKey: RenderContentProps["apiKey"];
|
|
82
|
+
export let content: RenderContentProps["content"];
|
|
85
83
|
export let parentContentId: RenderContentProps["parentContentId"];
|
|
84
|
+
export let data: RenderContentProps["data"];
|
|
85
|
+
export let locale: RenderContentProps["locale"];
|
|
86
|
+
export let apiVersion: RenderContentProps["apiVersion"];
|
|
87
|
+
export let customComponents: RenderContentProps["customComponents"];
|
|
86
88
|
export let hideContent: RenderContentProps["hideContent"];
|
|
87
89
|
export let classNameProp: RenderContentProps["classNameProp"];
|
|
88
90
|
export let isSsrAbTest: RenderContentProps["isSsrAbTest"];
|
|
89
91
|
export let includeRefs: RenderContentProps["includeRefs"];
|
|
90
92
|
export let enrich: RenderContentProps["enrich"];
|
|
91
|
-
export let apiVersion: RenderContentProps["apiVersion"];
|
|
92
93
|
|
|
93
94
|
function mergeNewContent(newContent: BuilderContent) {
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
$builderContextSignal.content = {
|
|
96
|
+
...$builderContextSignal.content,
|
|
96
97
|
...newContent,
|
|
97
98
|
data: {
|
|
98
|
-
|
|
99
|
+
...$builderContextSignal.content?.data,
|
|
99
100
|
...newContent?.data,
|
|
100
101
|
},
|
|
101
102
|
meta: {
|
|
102
|
-
|
|
103
|
+
...$builderContextSignal.content?.meta,
|
|
103
104
|
...newContent?.meta,
|
|
104
105
|
breakpoints:
|
|
105
|
-
newContent?.meta?.breakpoints ||
|
|
106
|
+
newContent?.meta?.breakpoints ||
|
|
107
|
+
$builderContextSignal.content?.meta?.breakpoints,
|
|
106
108
|
},
|
|
107
109
|
};
|
|
108
110
|
}
|
|
109
111
|
function setBreakpoints(breakpoints: Breakpoints) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
+
$builderContextSignal.content = {
|
|
113
|
+
...$builderContextSignal.content,
|
|
112
114
|
meta: {
|
|
113
|
-
|
|
115
|
+
...$builderContextSignal.content?.meta,
|
|
114
116
|
breakpoints,
|
|
115
117
|
},
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
120
|
function contentSetState(newRootState: BuilderRenderState) {
|
|
119
|
-
|
|
121
|
+
$builderContextSignal.rootState = newRootState;
|
|
120
122
|
}
|
|
121
123
|
function processMessage(event: MessageEvent) {
|
|
122
124
|
const { data } = event;
|
|
@@ -125,7 +127,7 @@
|
|
|
125
127
|
case "builder.configureSdk": {
|
|
126
128
|
const messageContent = data.data;
|
|
127
129
|
const { breakpoints, contentId } = messageContent;
|
|
128
|
-
if (!contentId || contentId !==
|
|
130
|
+
if (!contentId || contentId !== $builderContextSignal.content?.id) {
|
|
129
131
|
return;
|
|
130
132
|
}
|
|
131
133
|
if (breakpoints) {
|
|
@@ -158,21 +160,21 @@
|
|
|
158
160
|
}
|
|
159
161
|
function evaluateJsCode() {
|
|
160
162
|
// run any dynamic JS code attached to content
|
|
161
|
-
const jsCode =
|
|
163
|
+
const jsCode = $builderContextSignal.content?.data?.jsCode;
|
|
162
164
|
if (jsCode) {
|
|
163
165
|
evaluate({
|
|
164
166
|
code: jsCode,
|
|
165
167
|
context: context || {},
|
|
166
168
|
localState: undefined,
|
|
167
|
-
rootState:
|
|
169
|
+
rootState: $builderContextSignal.rootState,
|
|
168
170
|
rootSetState: contentSetState,
|
|
169
171
|
});
|
|
170
172
|
}
|
|
171
173
|
}
|
|
172
174
|
function onClick(event: any) {
|
|
173
|
-
if (
|
|
174
|
-
const variationId =
|
|
175
|
-
const contentId =
|
|
175
|
+
if ($builderContextSignal.content) {
|
|
176
|
+
const variationId = $builderContextSignal.content?.testVariationId;
|
|
177
|
+
const contentId = $builderContextSignal.content?.id;
|
|
176
178
|
_track({
|
|
177
179
|
type: "click",
|
|
178
180
|
canTrack: canTrackToUse,
|
|
@@ -193,7 +195,7 @@
|
|
|
193
195
|
code: group,
|
|
194
196
|
context: context || {},
|
|
195
197
|
localState: undefined,
|
|
196
|
-
rootState:
|
|
198
|
+
rootState: $builderContextSignal.rootState,
|
|
197
199
|
rootSetState: contentSetState,
|
|
198
200
|
})
|
|
199
201
|
);
|
|
@@ -203,7 +205,7 @@
|
|
|
203
205
|
.then((response) => response.json())
|
|
204
206
|
.then((json) => {
|
|
205
207
|
const newState = {
|
|
206
|
-
|
|
208
|
+
...$builderContextSignal.rootState,
|
|
207
209
|
[key]: json,
|
|
208
210
|
};
|
|
209
211
|
contentSetState(newState);
|
|
@@ -215,7 +217,7 @@
|
|
|
215
217
|
function runHttpRequests() {
|
|
216
218
|
const requests: {
|
|
217
219
|
[key: string]: string;
|
|
218
|
-
} =
|
|
220
|
+
} = $builderContextSignal.content?.data?.httpRequests ?? {};
|
|
219
221
|
Object.entries(requests).forEach(([key, url]) => {
|
|
220
222
|
if (url && (!httpReqsData[key] || isEditing())) {
|
|
221
223
|
const evaluatedUrl = evalExpression(url);
|
|
@@ -233,7 +235,7 @@
|
|
|
233
235
|
"builder:component:stateChange",
|
|
234
236
|
{
|
|
235
237
|
detail: {
|
|
236
|
-
state:
|
|
238
|
+
state: $builderContextSignal.rootState,
|
|
237
239
|
ref: {
|
|
238
240
|
name: model,
|
|
239
241
|
},
|
|
@@ -248,36 +250,8 @@
|
|
|
248
250
|
|
|
249
251
|
let forceReRenderCount = 0;
|
|
250
252
|
let overrideContent = null;
|
|
251
|
-
let useContent = getContentInitialValue({
|
|
252
|
-
content: content,
|
|
253
|
-
data: data,
|
|
254
|
-
});
|
|
255
253
|
let update = 0;
|
|
256
254
|
let canTrackToUse = checkIsDefined(canTrack) ? canTrack : true;
|
|
257
|
-
let contentState = getContextStateInitialValue({
|
|
258
|
-
content: content,
|
|
259
|
-
data: data,
|
|
260
|
-
locale: locale,
|
|
261
|
-
});
|
|
262
|
-
let allRegisteredComponents = [
|
|
263
|
-
...getDefaultRegisteredComponents(),
|
|
264
|
-
// While this `components` object is deprecated, we must maintain support for it.
|
|
265
|
-
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
266
|
-
// existing usage.
|
|
267
|
-
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
268
|
-
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
269
|
-
...components,
|
|
270
|
-
...(customComponents || []),
|
|
271
|
-
].reduce(
|
|
272
|
-
(acc, { component, ...curr }) => ({
|
|
273
|
-
...acc,
|
|
274
|
-
[curr.name]: {
|
|
275
|
-
component: TARGET === "vue3" ? wrapComponentRef(component) : component,
|
|
276
|
-
...curr,
|
|
277
|
-
},
|
|
278
|
-
}),
|
|
279
|
-
{} as RegisteredComponents
|
|
280
|
-
);
|
|
281
255
|
let httpReqsData = {};
|
|
282
256
|
let clicked = false;
|
|
283
257
|
let scriptStr = getRenderContentScriptString({
|
|
@@ -285,6 +259,43 @@
|
|
|
285
259
|
contentId: content?.id!,
|
|
286
260
|
parentContentId: parentContentId!,
|
|
287
261
|
});
|
|
262
|
+
let builderContextSignal = writable({
|
|
263
|
+
content: getContentInitialValue({
|
|
264
|
+
content: content,
|
|
265
|
+
data: data,
|
|
266
|
+
}),
|
|
267
|
+
localState: undefined,
|
|
268
|
+
rootState: getContextStateInitialValue({
|
|
269
|
+
content: content,
|
|
270
|
+
data: data,
|
|
271
|
+
locale: locale,
|
|
272
|
+
}),
|
|
273
|
+
rootSetState: contentSetState,
|
|
274
|
+
context: context || {},
|
|
275
|
+
apiKey: apiKey,
|
|
276
|
+
apiVersion: apiVersion,
|
|
277
|
+
registeredComponents: [
|
|
278
|
+
...getDefaultRegisteredComponents(),
|
|
279
|
+
// While this `components` object is deprecated, we must maintain support for it.
|
|
280
|
+
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
281
|
+
// existing usage.
|
|
282
|
+
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
283
|
+
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
284
|
+
...components,
|
|
285
|
+
...(customComponents || []),
|
|
286
|
+
].reduce(
|
|
287
|
+
(acc, { component, ...curr }) => ({
|
|
288
|
+
...acc,
|
|
289
|
+
[curr.name]: {
|
|
290
|
+
component:
|
|
291
|
+
TARGET === "vue3" ? wrapComponentRef(component) : component,
|
|
292
|
+
...curr,
|
|
293
|
+
},
|
|
294
|
+
}),
|
|
295
|
+
{} as RegisteredComponents
|
|
296
|
+
),
|
|
297
|
+
inheritedStyles: {},
|
|
298
|
+
});
|
|
288
299
|
|
|
289
300
|
onMount(() => {
|
|
290
301
|
if (!apiKey) {
|
|
@@ -313,21 +324,21 @@
|
|
|
313
324
|
}
|
|
314
325
|
: {}),
|
|
315
326
|
});
|
|
316
|
-
Object.values<RegisteredComponent>(
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
);
|
|
327
|
+
Object.values<RegisteredComponent>(
|
|
328
|
+
$builderContextSignal.registeredComponents
|
|
329
|
+
).forEach((registeredComponent) => {
|
|
330
|
+
const message = createRegisterComponentMessage(registeredComponent);
|
|
331
|
+
window.parent?.postMessage(message, "*");
|
|
332
|
+
});
|
|
322
333
|
window.addEventListener("message", processMessage);
|
|
323
334
|
window.addEventListener(
|
|
324
335
|
"builder:component:stateChangeListenerActivated",
|
|
325
336
|
emitStateUpdate
|
|
326
337
|
);
|
|
327
338
|
}
|
|
328
|
-
if (
|
|
329
|
-
const variationId =
|
|
330
|
-
const contentId =
|
|
339
|
+
if ($builderContextSignal.content) {
|
|
340
|
+
const variationId = $builderContextSignal.content?.testVariationId;
|
|
341
|
+
const contentId = $builderContextSignal.content?.id;
|
|
331
342
|
_track({
|
|
332
343
|
type: "impression",
|
|
333
344
|
canTrack: canTrackToUse,
|
|
@@ -378,54 +389,31 @@
|
|
|
378
389
|
}
|
|
379
390
|
});
|
|
380
391
|
|
|
381
|
-
function onUpdateFn_0() {
|
|
392
|
+
function onUpdateFn_0(..._args: any[]) {
|
|
382
393
|
if (content) {
|
|
383
394
|
mergeNewContent(content);
|
|
384
395
|
}
|
|
385
396
|
}
|
|
386
397
|
$: onUpdateFn_0(...[content]);
|
|
387
|
-
function onUpdateFn_1() {
|
|
398
|
+
function onUpdateFn_1(..._args: any[]) {
|
|
388
399
|
evaluateJsCode();
|
|
389
400
|
}
|
|
390
|
-
$: onUpdateFn_1(
|
|
391
|
-
|
|
401
|
+
$: onUpdateFn_1(
|
|
402
|
+
...[
|
|
403
|
+
$builderContextSignal.content?.data?.jsCode,
|
|
404
|
+
$builderContextSignal.rootState,
|
|
405
|
+
]
|
|
406
|
+
);
|
|
407
|
+
function onUpdateFn_2(..._args: any[]) {
|
|
392
408
|
runHttpRequests();
|
|
393
409
|
}
|
|
394
|
-
$: onUpdateFn_2(...[
|
|
395
|
-
function onUpdateFn_3() {
|
|
410
|
+
$: onUpdateFn_2(...[$builderContextSignal.content?.data?.httpRequests]);
|
|
411
|
+
function onUpdateFn_3(..._args: any[]) {
|
|
396
412
|
emitStateUpdate();
|
|
397
413
|
}
|
|
398
|
-
$: onUpdateFn_3(...[
|
|
414
|
+
$: onUpdateFn_3(...[$builderContextSignal.rootState]);
|
|
399
415
|
|
|
400
|
-
setContext(builderContext.key,
|
|
401
|
-
get content() {
|
|
402
|
-
return useContent;
|
|
403
|
-
},
|
|
404
|
-
get localState() {
|
|
405
|
-
return undefined;
|
|
406
|
-
},
|
|
407
|
-
get rootState() {
|
|
408
|
-
return contentState;
|
|
409
|
-
},
|
|
410
|
-
get rootSetState() {
|
|
411
|
-
return TARGET === "qwik" ? undefined : contentSetState;
|
|
412
|
-
},
|
|
413
|
-
get context() {
|
|
414
|
-
return context || {};
|
|
415
|
-
},
|
|
416
|
-
get apiKey() {
|
|
417
|
-
return apiKey;
|
|
418
|
-
},
|
|
419
|
-
get apiVersion() {
|
|
420
|
-
return apiVersion;
|
|
421
|
-
},
|
|
422
|
-
get registeredComponents() {
|
|
423
|
-
return allRegisteredComponents;
|
|
424
|
-
},
|
|
425
|
-
get inheritedStyles() {
|
|
426
|
-
return {};
|
|
427
|
-
},
|
|
428
|
-
});
|
|
416
|
+
setContext(builderContext.key, builderContextSignal);
|
|
429
417
|
|
|
430
418
|
onDestroy(() => {
|
|
431
419
|
if (isBrowser()) {
|
|
@@ -438,13 +426,13 @@
|
|
|
438
426
|
});
|
|
439
427
|
</script>
|
|
440
428
|
|
|
441
|
-
{#if
|
|
429
|
+
{#if $builderContextSignal.content}
|
|
442
430
|
<div
|
|
443
431
|
bind:this={elementRef}
|
|
444
432
|
on:click={(event) => {
|
|
445
433
|
onClick(event);
|
|
446
434
|
}}
|
|
447
|
-
builder-content-id={
|
|
435
|
+
builder-content-id={$builderContextSignal.content?.id}
|
|
448
436
|
builder-model={model}
|
|
449
437
|
{...filterAttrs(
|
|
450
438
|
TARGET === "reactNative"
|
|
@@ -484,11 +472,14 @@
|
|
|
484
472
|
|
|
485
473
|
{#if TARGET !== "reactNative"}
|
|
486
474
|
<RenderContentStyles
|
|
487
|
-
contentId={
|
|
488
|
-
cssCode={
|
|
489
|
-
customFonts={
|
|
475
|
+
contentId={$builderContextSignal.content?.id}
|
|
476
|
+
cssCode={$builderContextSignal.content?.data?.cssCode}
|
|
477
|
+
customFonts={$builderContextSignal.content?.data?.customFonts}
|
|
490
478
|
/>
|
|
491
479
|
{/if}
|
|
492
|
-
<RenderBlocks
|
|
480
|
+
<RenderBlocks
|
|
481
|
+
blocks={$builderContextSignal.content?.data?.blocks}
|
|
482
|
+
key={forceReRenderCount}
|
|
483
|
+
/>
|
|
493
484
|
</div>
|
|
494
485
|
{/if}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SDK_VERSION = "0.4.
|
|
1
|
+
export const SDK_VERSION = "0.4.2"
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const key = Symbol();
|
|
2
|
+
import { writable } from "svelte/store";
|
|
2
3
|
|
|
3
4
|
export default {
|
|
4
|
-
Builder: {
|
|
5
|
+
Builder: writable({
|
|
5
6
|
content: null,
|
|
6
7
|
context: {},
|
|
7
8
|
localState: undefined,
|
|
@@ -11,6 +12,6 @@ export default {
|
|
|
11
12
|
apiVersion: undefined,
|
|
12
13
|
registeredComponents: {},
|
|
13
14
|
inheritedStyles: {},
|
|
14
|
-
},
|
|
15
|
+
}),
|
|
15
16
|
key,
|
|
16
17
|
};
|
|
@@ -14,6 +14,12 @@ export const convertSearchParamsToQueryObject = (
|
|
|
14
14
|
return options;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Receives a `URLSearchParams` object or a regular query object, and returns the subset of query params that are
|
|
19
|
+
* relevant to the Builder SDK.
|
|
20
|
+
*
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
17
23
|
export const getBuilderSearchParams = (
|
|
18
24
|
_options: QueryObject | URLSearchParams | undefined
|
|
19
25
|
) => {
|
package/src/index.ts
CHANGED
|
@@ -17,6 +17,8 @@ export {
|
|
|
17
17
|
processContentResult,
|
|
18
18
|
} from './functions/get-content/index.js';
|
|
19
19
|
|
|
20
|
+
export { getBuilderSearchParams } from './functions/get-builder-search-params/index.js';
|
|
21
|
+
|
|
20
22
|
export { track } from './functions/track/index.js';
|
|
21
23
|
|
|
22
24
|
export type { RegisteredComponent } from './context/types';
|