@builder.io/sdk-solid 3.0.0 → 3.0.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.
- package/dist/index.d.ts +5 -0
- package/lib/browser/dev.js +132 -44
- package/lib/browser/dev.jsx +133 -40
- package/lib/browser/index.js +129 -44
- package/lib/browser/index.jsx +132 -40
- package/lib/edge/dev.js +132 -44
- package/lib/edge/dev.jsx +133 -40
- package/lib/edge/index.js +129 -44
- package/lib/edge/index.jsx +132 -40
- package/lib/node/dev.js +132 -44
- package/lib/node/dev.jsx +133 -40
- package/lib/node/index.js +129 -44
- package/lib/node/index.jsx +132 -40
- package/package.json +1 -1
package/lib/edge/dev.jsx
CHANGED
|
@@ -103,7 +103,8 @@ var builder_context_default = createContext({
|
|
|
103
103
|
inheritedStyles: {},
|
|
104
104
|
BlocksWrapper: "div",
|
|
105
105
|
BlocksWrapperProps: {},
|
|
106
|
-
nonce: ""
|
|
106
|
+
nonce: "",
|
|
107
|
+
model: ""
|
|
107
108
|
});
|
|
108
109
|
|
|
109
110
|
// src/context/components.context.ts
|
|
@@ -3579,6 +3580,77 @@ function evaluate({
|
|
|
3579
3580
|
}
|
|
3580
3581
|
}
|
|
3581
3582
|
|
|
3583
|
+
// src/functions/traverse.ts
|
|
3584
|
+
function traverse(obj, callback, parent2 = null, key = null, visited = /* @__PURE__ */ new WeakSet()) {
|
|
3585
|
+
if (obj == null || typeof obj !== "object") {
|
|
3586
|
+
callback(obj, (newValue) => {
|
|
3587
|
+
if (parent2 !== null && key !== null) {
|
|
3588
|
+
parent2[key] = newValue;
|
|
3589
|
+
}
|
|
3590
|
+
});
|
|
3591
|
+
return;
|
|
3592
|
+
}
|
|
3593
|
+
if (visited.has(obj)) {
|
|
3594
|
+
return;
|
|
3595
|
+
}
|
|
3596
|
+
visited.add(obj);
|
|
3597
|
+
if (Array.isArray(obj)) {
|
|
3598
|
+
obj.forEach((item, index) => {
|
|
3599
|
+
const update = (newValue) => {
|
|
3600
|
+
obj[index] = newValue;
|
|
3601
|
+
};
|
|
3602
|
+
callback(item, update);
|
|
3603
|
+
traverse(item, callback, obj, index, visited);
|
|
3604
|
+
});
|
|
3605
|
+
} else {
|
|
3606
|
+
Object.entries(obj).forEach(([key2, value]) => {
|
|
3607
|
+
const update = (newValue) => {
|
|
3608
|
+
obj[key2] = newValue;
|
|
3609
|
+
};
|
|
3610
|
+
callback(value, update);
|
|
3611
|
+
traverse(value, callback, obj, key2, visited);
|
|
3612
|
+
});
|
|
3613
|
+
}
|
|
3614
|
+
}
|
|
3615
|
+
|
|
3616
|
+
// src/functions/extract-localized-values.ts
|
|
3617
|
+
function isLocalizedField(value) {
|
|
3618
|
+
return value && typeof value === "object" && value["@type"] === "@builder.io/core:LocalizedValue";
|
|
3619
|
+
}
|
|
3620
|
+
function containsLocalizedValues(data) {
|
|
3621
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
3622
|
+
return false;
|
|
3623
|
+
}
|
|
3624
|
+
let hasLocalizedValues = false;
|
|
3625
|
+
traverse(data, (value) => {
|
|
3626
|
+
if (isLocalizedField(value)) {
|
|
3627
|
+
hasLocalizedValues = true;
|
|
3628
|
+
return;
|
|
3629
|
+
}
|
|
3630
|
+
});
|
|
3631
|
+
return hasLocalizedValues;
|
|
3632
|
+
}
|
|
3633
|
+
function extractLocalizedValues(data, locale) {
|
|
3634
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
3635
|
+
return {};
|
|
3636
|
+
}
|
|
3637
|
+
traverse(data, (value, update) => {
|
|
3638
|
+
if (isLocalizedField(value)) {
|
|
3639
|
+
update(value[locale] ?? void 0);
|
|
3640
|
+
}
|
|
3641
|
+
});
|
|
3642
|
+
return data;
|
|
3643
|
+
}
|
|
3644
|
+
function resolveLocalizedValues(block, locale) {
|
|
3645
|
+
if (block.component?.options && containsLocalizedValues(block.component?.options)) {
|
|
3646
|
+
if (!locale) {
|
|
3647
|
+
console.warn("[Builder.io] In order to use localized fields in Builder, you must pass a locale prop to the BuilderComponent or to options object while fetching the content to resolve localized fields. Learn more: https://www.builder.io/c/docs/localization-inline#targeting-and-inline-localization");
|
|
3648
|
+
}
|
|
3649
|
+
block.component.options = extractLocalizedValues(block.component.options, locale ?? "Default");
|
|
3650
|
+
}
|
|
3651
|
+
return block;
|
|
3652
|
+
}
|
|
3653
|
+
|
|
3582
3654
|
// src/functions/fast-clone.ts
|
|
3583
3655
|
var fastClone = (obj) => JSON.parse(JSON.stringify(obj));
|
|
3584
3656
|
|
|
@@ -3677,7 +3749,8 @@ function getProcessedBlock({
|
|
|
3677
3749
|
rootState,
|
|
3678
3750
|
rootSetState
|
|
3679
3751
|
}) {
|
|
3680
|
-
|
|
3752
|
+
let transformedBlock = resolveLocalizedValues(block, rootState.locale);
|
|
3753
|
+
transformedBlock = transformBlock(transformedBlock);
|
|
3681
3754
|
if (shouldEvaluateBindings) {
|
|
3682
3755
|
return evaluateBindings({
|
|
3683
3756
|
block: transformedBlock,
|
|
@@ -3935,16 +4008,24 @@ function mapStyleObjToStrIfNeeded(style) {
|
|
|
3935
4008
|
}
|
|
3936
4009
|
|
|
3937
4010
|
// src/components/block/block.helpers.ts
|
|
4011
|
+
var checkIsComponentRestricted = (component, model) => {
|
|
4012
|
+
if (!component)
|
|
4013
|
+
return true;
|
|
4014
|
+
if (!model)
|
|
4015
|
+
return false;
|
|
4016
|
+
return component.models && component.models.length > 0 && !component.models.includes(model);
|
|
4017
|
+
};
|
|
3938
4018
|
var getComponent = ({
|
|
3939
4019
|
block,
|
|
3940
|
-
registeredComponents
|
|
4020
|
+
registeredComponents,
|
|
4021
|
+
model
|
|
3941
4022
|
}) => {
|
|
3942
4023
|
const componentName = block.component?.name;
|
|
3943
4024
|
if (!componentName) {
|
|
3944
4025
|
return null;
|
|
3945
4026
|
}
|
|
3946
4027
|
const ref = registeredComponents[componentName];
|
|
3947
|
-
if (!ref) {
|
|
4028
|
+
if (!ref || checkIsComponentRestricted(ref, model)) {
|
|
3948
4029
|
console.warn(`
|
|
3949
4030
|
Could not find a registered component named "${componentName}".
|
|
3950
4031
|
If you registered it, is the file that registered it imported by the file that needs to render it?`);
|
|
@@ -3998,11 +4079,15 @@ var provideLinkComponent = (block, linkComponent) => {
|
|
|
3998
4079
|
};
|
|
3999
4080
|
return {};
|
|
4000
4081
|
};
|
|
4001
|
-
var provideRegisteredComponents = (block, registeredComponents) => {
|
|
4002
|
-
if (block?.shouldReceiveBuilderProps?.builderComponents)
|
|
4082
|
+
var provideRegisteredComponents = (block, registeredComponents, model) => {
|
|
4083
|
+
if (block?.shouldReceiveBuilderProps?.builderComponents) {
|
|
4084
|
+
const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
|
|
4085
|
+
return !checkIsComponentRestricted(component, model);
|
|
4086
|
+
}));
|
|
4003
4087
|
return {
|
|
4004
|
-
builderComponents:
|
|
4088
|
+
builderComponents: filteredRegisteredComponents
|
|
4005
4089
|
};
|
|
4090
|
+
}
|
|
4006
4091
|
return {};
|
|
4007
4092
|
};
|
|
4008
4093
|
var provideBuilderBlock = (block, builderBlock) => {
|
|
@@ -4406,7 +4491,8 @@ function Block(props) {
|
|
|
4406
4491
|
const blockComponent = createMemo5(() => {
|
|
4407
4492
|
return getComponent({
|
|
4408
4493
|
block: processedBlock(),
|
|
4409
|
-
registeredComponents: props.registeredComponents
|
|
4494
|
+
registeredComponents: props.registeredComponents,
|
|
4495
|
+
model: props.context.model
|
|
4410
4496
|
});
|
|
4411
4497
|
});
|
|
4412
4498
|
const Tag = createMemo5(() => {
|
|
@@ -4441,7 +4527,8 @@ function Block(props) {
|
|
|
4441
4527
|
...provideLinkComponent(blockComponent(), props.linkComponent),
|
|
4442
4528
|
...provideRegisteredComponents(
|
|
4443
4529
|
blockComponent(),
|
|
4444
|
-
props.registeredComponents
|
|
4530
|
+
props.registeredComponents,
|
|
4531
|
+
props.context.model
|
|
4445
4532
|
)
|
|
4446
4533
|
},
|
|
4447
4534
|
context: props.context,
|
|
@@ -4865,7 +4952,7 @@ function Image(props) {
|
|
|
4865
4952
|
const url = imageToUse;
|
|
4866
4953
|
if (!url || // We can auto add srcset for cdn.builder.io and shopify
|
|
4867
4954
|
// images, otherwise you can supply this prop manually
|
|
4868
|
-
!(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
|
|
4955
|
+
!(typeof url === "string" && (url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/)))) {
|
|
4869
4956
|
return props.srcset;
|
|
4870
4957
|
}
|
|
4871
4958
|
if (props.noWebp) {
|
|
@@ -4906,7 +4993,7 @@ function Image(props) {
|
|
|
4906
4993
|
<picture>
|
|
4907
4994
|
<Show8 when={webpSrcSet()}><source type="image/webp" srcset={webpSrcSet()} /></Show8>
|
|
4908
4995
|
<img
|
|
4909
|
-
class={"builder-image" + (props.className ? " " + props.className : "") + " img-
|
|
4996
|
+
class={"builder-image" + (props.className ? " " + props.className : "") + " img-070d7e88"}
|
|
4910
4997
|
loading={props.highPriority ? "eager" : "lazy"}
|
|
4911
4998
|
fetchpriority={props.highPriority ? "high" : "auto"}
|
|
4912
4999
|
alt={props.altText}
|
|
@@ -4924,22 +5011,22 @@ function Image(props) {
|
|
|
4924
5011
|
<Show8
|
|
4925
5012
|
when={props.aspectRatio && !(props.builderBlock?.children?.length && props.fitContent)}
|
|
4926
5013
|
><div
|
|
4927
|
-
class="builder-image-sizer div-
|
|
5014
|
+
class="builder-image-sizer div-070d7e88"
|
|
4928
5015
|
style={{
|
|
4929
5016
|
"padding-top": props.aspectRatio * 100 + "%"
|
|
4930
5017
|
}}
|
|
4931
5018
|
/></Show8>
|
|
4932
5019
|
<Show8 when={props.builderBlock?.children?.length && props.fitContent}>{props.children}</Show8>
|
|
4933
|
-
<Show8 when={!props.fitContent && props.builderBlock?.children?.length}><div class="div-
|
|
5020
|
+
<Show8 when={!props.fitContent && props.builderBlock?.children?.length}><div class="div-070d7e88-2">{props.children}</div></Show8>
|
|
4934
5021
|
</>
|
|
4935
|
-
<style>{`.img-
|
|
5022
|
+
<style>{`.img-070d7e88 {
|
|
4936
5023
|
opacity: 1;
|
|
4937
5024
|
transition: opacity 0.2s ease-in-out;
|
|
4938
|
-
}.div-
|
|
5025
|
+
}.div-070d7e88 {
|
|
4939
5026
|
width: 100%;
|
|
4940
5027
|
pointer-events: none;
|
|
4941
5028
|
font-size: 0;
|
|
4942
|
-
}.div-
|
|
5029
|
+
}.div-070d7e88-2 {
|
|
4943
5030
|
display: flex;
|
|
4944
5031
|
flex-direction: column;
|
|
4945
5032
|
align-items: stretch;
|
|
@@ -5732,6 +5819,10 @@ var componentInfo4 = {
|
|
|
5732
5819
|
noWrap: true
|
|
5733
5820
|
};
|
|
5734
5821
|
|
|
5822
|
+
// src/constants/file-types.ts
|
|
5823
|
+
var IMAGE_FILE_TYPES = ["jpeg", "jpg", "png", "svg", "webp", "gif", "jfif", "pjpeg", "pjp", "apng", "avif", "tif", "tiff", "heif", "bmp", "eps", "raw", "cr2", "nef", "orf", "sr2", "psd", "heic", "dib", "ai"];
|
|
5824
|
+
var VIDEO_FILE_TYPES = ["mp4", "webm", "mkv", "flv", "vob", "ogv", "ogg", "drc", "gif", "gifv", "mng", "avi", "mov", "qt", "mts", "m2ts", "ts", "wmv", "yuv", "rm", "rmvb", "viv", "asf", "amv", "m4p", "mpeg", "mpe", "m2v", "m4v", "svi", "3gp", "3g2", "mxf", "roq", "nsv", "f4v", "f4p", "f4a", "f4b"];
|
|
5825
|
+
|
|
5735
5826
|
// src/blocks/image/component-info.ts
|
|
5736
5827
|
var componentInfo5 = {
|
|
5737
5828
|
name: "Image",
|
|
@@ -5748,7 +5839,7 @@ var componentInfo5 = {
|
|
|
5748
5839
|
name: "image",
|
|
5749
5840
|
type: "file",
|
|
5750
5841
|
bubble: true,
|
|
5751
|
-
allowedFileTypes:
|
|
5842
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
5752
5843
|
required: true,
|
|
5753
5844
|
defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
|
|
5754
5845
|
onChange: (options) => {
|
|
@@ -7108,7 +7199,7 @@ var componentInfo18 = {
|
|
|
7108
7199
|
name: "image",
|
|
7109
7200
|
bubble: true,
|
|
7110
7201
|
type: "file",
|
|
7111
|
-
allowedFileTypes:
|
|
7202
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
7112
7203
|
required: true
|
|
7113
7204
|
}],
|
|
7114
7205
|
noWrap: true,
|
|
@@ -7143,14 +7234,14 @@ var componentInfo19 = {
|
|
|
7143
7234
|
inputs: [{
|
|
7144
7235
|
name: "video",
|
|
7145
7236
|
type: "file",
|
|
7146
|
-
allowedFileTypes:
|
|
7237
|
+
allowedFileTypes: VIDEO_FILE_TYPES,
|
|
7147
7238
|
bubble: true,
|
|
7148
7239
|
defaultValue: "https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true",
|
|
7149
7240
|
required: true
|
|
7150
7241
|
}, {
|
|
7151
7242
|
name: "posterImage",
|
|
7152
7243
|
type: "file",
|
|
7153
|
-
allowedFileTypes:
|
|
7244
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
7154
7245
|
helperText: "Image to show before the video plays"
|
|
7155
7246
|
}, {
|
|
7156
7247
|
name: "autoPlay",
|
|
@@ -7376,7 +7467,7 @@ var createRegisterComponentMessage = (info) => ({
|
|
|
7376
7467
|
var serializeFn = (fnValue) => {
|
|
7377
7468
|
const fnStr = fnValue.toString().trim();
|
|
7378
7469
|
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
7379
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
7470
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
7380
7471
|
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
7381
7472
|
};
|
|
7382
7473
|
function serializeIncludingFunctions(info) {
|
|
@@ -7461,7 +7552,7 @@ function getPreviewContent(_searchParams) {
|
|
|
7461
7552
|
}
|
|
7462
7553
|
|
|
7463
7554
|
// src/constants/sdk-version.ts
|
|
7464
|
-
var SDK_VERSION = "3.0.
|
|
7555
|
+
var SDK_VERSION = "3.0.1";
|
|
7465
7556
|
|
|
7466
7557
|
// src/helpers/sdk-headers.ts
|
|
7467
7558
|
var getSdkHeaders = () => ({
|
|
@@ -8179,6 +8270,12 @@ var subscribeToEditor = (model, callback, options) => {
|
|
|
8179
8270
|
};
|
|
8180
8271
|
};
|
|
8181
8272
|
|
|
8273
|
+
// src/components/content/components/enable-editor.helpers.ts
|
|
8274
|
+
var SDKS_USING_ELEMENT_REF_APPROACH = ["svelte", "qwik", "vue"];
|
|
8275
|
+
var needsElementRefDivForEditing = () => {
|
|
8276
|
+
return SDKS_USING_ELEMENT_REF_APPROACH.includes(TARGET) && (isEditing() || isPreviewing());
|
|
8277
|
+
};
|
|
8278
|
+
|
|
8182
8279
|
// src/components/content/components/styles.helpers.ts
|
|
8183
8280
|
var getCssFromFont = (font) => {
|
|
8184
8281
|
const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
|
|
@@ -8425,8 +8522,10 @@ function EnableEditor(props) {
|
|
|
8425
8522
|
Object.values(
|
|
8426
8523
|
props.builderContextSignal.componentInfos
|
|
8427
8524
|
).forEach((registeredComponent) => {
|
|
8428
|
-
|
|
8429
|
-
|
|
8525
|
+
if (!props.model || !registeredComponent.models?.length || registeredComponent.models.includes(props.model)) {
|
|
8526
|
+
const message = createRegisterComponentMessage(registeredComponent);
|
|
8527
|
+
window.parent?.postMessage(message, "*");
|
|
8528
|
+
}
|
|
8430
8529
|
});
|
|
8431
8530
|
window.addEventListener(
|
|
8432
8531
|
"builder:component:stateChangeListenerActivated",
|
|
@@ -8503,7 +8602,9 @@ function EnableEditor(props) {
|
|
|
8503
8602
|
}
|
|
8504
8603
|
}
|
|
8505
8604
|
createEffect3(on3(() => [onUpdateFn_3_props_locale()], onUpdateFn_3));
|
|
8506
|
-
return <><builder_context_default.Provider value={props.builderContextSignal}><Show13
|
|
8605
|
+
return <><builder_context_default.Provider value={props.builderContextSignal}><Show13
|
|
8606
|
+
when={props.builderContextSignal.content || needsElementRefDivForEditing()}
|
|
8607
|
+
><Dynamic5
|
|
8507
8608
|
class={getWrapperClassName(
|
|
8508
8609
|
props.content?.testVariationId || props.content?.id
|
|
8509
8610
|
)}
|
|
@@ -8512,6 +8613,9 @@ function EnableEditor(props) {
|
|
|
8512
8613
|
onClick={(event) => onClick(event)}
|
|
8513
8614
|
builder-content-id={props.builderContextSignal.content?.id}
|
|
8514
8615
|
builder-model={props.model}
|
|
8616
|
+
style={{
|
|
8617
|
+
display: !props.builderContextSignal.content && needsElementRefDivForEditing() ? "none" : void 0
|
|
8618
|
+
}}
|
|
8515
8619
|
{...{}}
|
|
8516
8620
|
{...showContentProps()}
|
|
8517
8621
|
{...props.contentWrapperProps}
|
|
@@ -8592,13 +8696,7 @@ function ContentComponent(props) {
|
|
|
8592
8696
|
const [registeredComponents, setRegisteredComponents] = createSignal18(
|
|
8593
8697
|
[
|
|
8594
8698
|
...getDefaultRegisteredComponents(),
|
|
8595
|
-
...props.customComponents
|
|
8596
|
-
if (!models?.length)
|
|
8597
|
-
return true;
|
|
8598
|
-
if (!props.model)
|
|
8599
|
-
return true;
|
|
8600
|
-
return models.includes(props.model);
|
|
8601
|
-
}) || []
|
|
8699
|
+
...props.customComponents || []
|
|
8602
8700
|
].reduce(
|
|
8603
8701
|
(acc, { component, ...info }) => ({
|
|
8604
8702
|
...acc,
|
|
@@ -8628,13 +8726,7 @@ function ContentComponent(props) {
|
|
|
8628
8726
|
apiVersion: props.apiVersion,
|
|
8629
8727
|
componentInfos: [
|
|
8630
8728
|
...getDefaultRegisteredComponents(),
|
|
8631
|
-
...props.customComponents
|
|
8632
|
-
if (!models?.length)
|
|
8633
|
-
return true;
|
|
8634
|
-
if (!props.model)
|
|
8635
|
-
return true;
|
|
8636
|
-
return models.includes(props.model);
|
|
8637
|
-
}) || []
|
|
8729
|
+
...props.customComponents || []
|
|
8638
8730
|
].reduce(
|
|
8639
8731
|
(acc, { component: _, ...info }) => ({
|
|
8640
8732
|
...acc,
|
|
@@ -8645,7 +8737,8 @@ function ContentComponent(props) {
|
|
|
8645
8737
|
inheritedStyles: {},
|
|
8646
8738
|
BlocksWrapper: props.blocksWrapper || "div",
|
|
8647
8739
|
BlocksWrapperProps: props.blocksWrapperProps || {},
|
|
8648
|
-
nonce: props.nonce || ""
|
|
8740
|
+
nonce: props.nonce || "",
|
|
8741
|
+
model: props.model || ""
|
|
8649
8742
|
});
|
|
8650
8743
|
function contentSetState(newRootState) {
|
|
8651
8744
|
setBuilderContextSignal((PREVIOUS_VALUE) => ({
|