@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/node/dev.js
CHANGED
|
@@ -115,7 +115,8 @@ var builder_context_default = createContext({
|
|
|
115
115
|
inheritedStyles: {},
|
|
116
116
|
BlocksWrapper: "div",
|
|
117
117
|
BlocksWrapperProps: {},
|
|
118
|
-
nonce: ""
|
|
118
|
+
nonce: "",
|
|
119
|
+
model: ""
|
|
119
120
|
});
|
|
120
121
|
var components_context_default = createContext({ registeredComponents: {} });
|
|
121
122
|
|
|
@@ -583,6 +584,77 @@ function evaluate({
|
|
|
583
584
|
}
|
|
584
585
|
}
|
|
585
586
|
|
|
587
|
+
// src/functions/traverse.ts
|
|
588
|
+
function traverse(obj, callback, parent2 = null, key = null, visited = /* @__PURE__ */ new WeakSet()) {
|
|
589
|
+
if (obj == null || typeof obj !== "object") {
|
|
590
|
+
callback(obj, (newValue) => {
|
|
591
|
+
if (parent2 !== null && key !== null) {
|
|
592
|
+
parent2[key] = newValue;
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
if (visited.has(obj)) {
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
visited.add(obj);
|
|
601
|
+
if (Array.isArray(obj)) {
|
|
602
|
+
obj.forEach((item, index) => {
|
|
603
|
+
const update = (newValue) => {
|
|
604
|
+
obj[index] = newValue;
|
|
605
|
+
};
|
|
606
|
+
callback(item, update);
|
|
607
|
+
traverse(item, callback, obj, index, visited);
|
|
608
|
+
});
|
|
609
|
+
} else {
|
|
610
|
+
Object.entries(obj).forEach(([key2, value]) => {
|
|
611
|
+
const update = (newValue) => {
|
|
612
|
+
obj[key2] = newValue;
|
|
613
|
+
};
|
|
614
|
+
callback(value, update);
|
|
615
|
+
traverse(value, callback, obj, key2, visited);
|
|
616
|
+
});
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
// src/functions/extract-localized-values.ts
|
|
621
|
+
function isLocalizedField(value) {
|
|
622
|
+
return value && typeof value === "object" && value["@type"] === "@builder.io/core:LocalizedValue";
|
|
623
|
+
}
|
|
624
|
+
function containsLocalizedValues(data) {
|
|
625
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
let hasLocalizedValues = false;
|
|
629
|
+
traverse(data, (value) => {
|
|
630
|
+
if (isLocalizedField(value)) {
|
|
631
|
+
hasLocalizedValues = true;
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
});
|
|
635
|
+
return hasLocalizedValues;
|
|
636
|
+
}
|
|
637
|
+
function extractLocalizedValues(data, locale) {
|
|
638
|
+
if (!data || !Object.getOwnPropertyNames(data).length) {
|
|
639
|
+
return {};
|
|
640
|
+
}
|
|
641
|
+
traverse(data, (value, update) => {
|
|
642
|
+
if (isLocalizedField(value)) {
|
|
643
|
+
update(value[locale] ?? void 0);
|
|
644
|
+
}
|
|
645
|
+
});
|
|
646
|
+
return data;
|
|
647
|
+
}
|
|
648
|
+
function resolveLocalizedValues(block, locale) {
|
|
649
|
+
if (block.component?.options && containsLocalizedValues(block.component?.options)) {
|
|
650
|
+
if (!locale) {
|
|
651
|
+
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");
|
|
652
|
+
}
|
|
653
|
+
block.component.options = extractLocalizedValues(block.component.options, locale ?? "Default");
|
|
654
|
+
}
|
|
655
|
+
return block;
|
|
656
|
+
}
|
|
657
|
+
|
|
586
658
|
// src/functions/transform-block.ts
|
|
587
659
|
function transformBlock(block) {
|
|
588
660
|
return block;
|
|
@@ -668,7 +740,8 @@ function getProcessedBlock({
|
|
|
668
740
|
rootState,
|
|
669
741
|
rootSetState
|
|
670
742
|
}) {
|
|
671
|
-
|
|
743
|
+
let transformedBlock = resolveLocalizedValues(block, rootState.locale);
|
|
744
|
+
transformedBlock = transformBlock(transformedBlock);
|
|
672
745
|
if (shouldEvaluateBindings) {
|
|
673
746
|
return evaluateBindings({
|
|
674
747
|
block: transformedBlock,
|
|
@@ -926,16 +999,24 @@ function mapStyleObjToStrIfNeeded(style) {
|
|
|
926
999
|
}
|
|
927
1000
|
|
|
928
1001
|
// src/components/block/block.helpers.ts
|
|
1002
|
+
var checkIsComponentRestricted = (component, model) => {
|
|
1003
|
+
if (!component)
|
|
1004
|
+
return true;
|
|
1005
|
+
if (!model)
|
|
1006
|
+
return false;
|
|
1007
|
+
return component.models && component.models.length > 0 && !component.models.includes(model);
|
|
1008
|
+
};
|
|
929
1009
|
var getComponent = ({
|
|
930
1010
|
block,
|
|
931
|
-
registeredComponents
|
|
1011
|
+
registeredComponents,
|
|
1012
|
+
model
|
|
932
1013
|
}) => {
|
|
933
1014
|
const componentName = block.component?.name;
|
|
934
1015
|
if (!componentName) {
|
|
935
1016
|
return null;
|
|
936
1017
|
}
|
|
937
1018
|
const ref = registeredComponents[componentName];
|
|
938
|
-
if (!ref) {
|
|
1019
|
+
if (!ref || checkIsComponentRestricted(ref, model)) {
|
|
939
1020
|
console.warn(`
|
|
940
1021
|
Could not find a registered component named "${componentName}".
|
|
941
1022
|
If you registered it, is the file that registered it imported by the file that needs to render it?`);
|
|
@@ -989,11 +1070,15 @@ var provideLinkComponent = (block, linkComponent) => {
|
|
|
989
1070
|
};
|
|
990
1071
|
return {};
|
|
991
1072
|
};
|
|
992
|
-
var provideRegisteredComponents = (block, registeredComponents) => {
|
|
993
|
-
if (block?.shouldReceiveBuilderProps?.builderComponents)
|
|
1073
|
+
var provideRegisteredComponents = (block, registeredComponents, model) => {
|
|
1074
|
+
if (block?.shouldReceiveBuilderProps?.builderComponents) {
|
|
1075
|
+
const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
|
|
1076
|
+
return !checkIsComponentRestricted(component, model);
|
|
1077
|
+
}));
|
|
994
1078
|
return {
|
|
995
|
-
builderComponents:
|
|
1079
|
+
builderComponents: filteredRegisteredComponents
|
|
996
1080
|
};
|
|
1081
|
+
}
|
|
997
1082
|
return {};
|
|
998
1083
|
};
|
|
999
1084
|
var provideBuilderBlock = (block, builderBlock) => {
|
|
@@ -1455,7 +1540,8 @@ function Block(props) {
|
|
|
1455
1540
|
const blockComponent = createMemo(() => {
|
|
1456
1541
|
return getComponent({
|
|
1457
1542
|
block: processedBlock(),
|
|
1458
|
-
registeredComponents: props.registeredComponents
|
|
1543
|
+
registeredComponents: props.registeredComponents,
|
|
1544
|
+
model: props.context.model
|
|
1459
1545
|
});
|
|
1460
1546
|
});
|
|
1461
1547
|
const Tag = createMemo(() => {
|
|
@@ -1488,7 +1574,7 @@ function Block(props) {
|
|
|
1488
1574
|
...provideBuilderBlock(blockComponent(), processedBlock()),
|
|
1489
1575
|
...provideBuilderContext(blockComponent(), props.context),
|
|
1490
1576
|
...provideLinkComponent(blockComponent(), props.linkComponent),
|
|
1491
|
-
...provideRegisteredComponents(blockComponent(), props.registeredComponents)
|
|
1577
|
+
...provideRegisteredComponents(blockComponent(), props.registeredComponents, props.context.model)
|
|
1492
1578
|
},
|
|
1493
1579
|
context: props.context,
|
|
1494
1580
|
linkComponent: props.linkComponent,
|
|
@@ -2086,16 +2172,16 @@ function getSrcSet(url) {
|
|
|
2086
2172
|
// src/blocks/image/image.tsx
|
|
2087
2173
|
var _tmpl$5 = /* @__PURE__ */ template(`<source type=image/webp>`);
|
|
2088
2174
|
var _tmpl$23 = /* @__PURE__ */ template(`<picture><img>`);
|
|
2089
|
-
var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-
|
|
2090
|
-
var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-
|
|
2091
|
-
var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-
|
|
2175
|
+
var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-070d7e88">`);
|
|
2176
|
+
var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-070d7e88-2>`);
|
|
2177
|
+
var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-070d7e88 {
|
|
2092
2178
|
opacity: 1;
|
|
2093
2179
|
transition: opacity 0.2s ease-in-out;
|
|
2094
|
-
}.div-
|
|
2180
|
+
}.div-070d7e88 {
|
|
2095
2181
|
width: 100%;
|
|
2096
2182
|
pointer-events: none;
|
|
2097
2183
|
font-size: 0;
|
|
2098
|
-
}.div-
|
|
2184
|
+
}.div-070d7e88-2 {
|
|
2099
2185
|
display: flex;
|
|
2100
2186
|
flex-direction: column;
|
|
2101
2187
|
align-items: stretch;
|
|
@@ -2111,7 +2197,7 @@ function Image(props) {
|
|
|
2111
2197
|
const url = imageToUse;
|
|
2112
2198
|
if (!url || // We can auto add srcset for cdn.builder.io and shopify
|
|
2113
2199
|
// images, otherwise you can supply this prop manually
|
|
2114
|
-
!(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
|
|
2200
|
+
!(typeof url === "string" && (url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/)))) {
|
|
2115
2201
|
return props.srcset;
|
|
2116
2202
|
}
|
|
2117
2203
|
if (props.noWebp) {
|
|
@@ -2160,7 +2246,7 @@ function Image(props) {
|
|
|
2160
2246
|
}
|
|
2161
2247
|
}), _el$3);
|
|
2162
2248
|
effect((_p$) => {
|
|
2163
|
-
const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " img-
|
|
2249
|
+
const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " img-070d7e88", _v$2 = props.highPriority ? "eager" : "lazy", _v$3 = props.highPriority ? "high" : "auto", _v$4 = props.altText, _v$5 = props.altText ? void 0 : "presentation", _v$6 = {
|
|
2164
2250
|
"object-position": props.backgroundPosition || "center",
|
|
2165
2251
|
"object-fit": props.backgroundSize || "cover",
|
|
2166
2252
|
...aspectRatioCss()
|
|
@@ -3026,6 +3112,10 @@ var componentInfo4 = {
|
|
|
3026
3112
|
noWrap: true
|
|
3027
3113
|
};
|
|
3028
3114
|
|
|
3115
|
+
// src/constants/file-types.ts
|
|
3116
|
+
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"];
|
|
3117
|
+
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"];
|
|
3118
|
+
|
|
3029
3119
|
// src/blocks/image/component-info.ts
|
|
3030
3120
|
var componentInfo5 = {
|
|
3031
3121
|
name: "Image",
|
|
@@ -3042,7 +3132,7 @@ var componentInfo5 = {
|
|
|
3042
3132
|
name: "image",
|
|
3043
3133
|
type: "file",
|
|
3044
3134
|
bubble: true,
|
|
3045
|
-
allowedFileTypes:
|
|
3135
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
3046
3136
|
required: true,
|
|
3047
3137
|
defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
|
|
3048
3138
|
onChange: (options) => {
|
|
@@ -4574,7 +4664,7 @@ var componentInfo18 = {
|
|
|
4574
4664
|
name: "image",
|
|
4575
4665
|
bubble: true,
|
|
4576
4666
|
type: "file",
|
|
4577
|
-
allowedFileTypes:
|
|
4667
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
4578
4668
|
required: true
|
|
4579
4669
|
}],
|
|
4580
4670
|
noWrap: true,
|
|
@@ -4618,14 +4708,14 @@ var componentInfo19 = {
|
|
|
4618
4708
|
inputs: [{
|
|
4619
4709
|
name: "video",
|
|
4620
4710
|
type: "file",
|
|
4621
|
-
allowedFileTypes:
|
|
4711
|
+
allowedFileTypes: VIDEO_FILE_TYPES,
|
|
4622
4712
|
bubble: true,
|
|
4623
4713
|
defaultValue: "https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true",
|
|
4624
4714
|
required: true
|
|
4625
4715
|
}, {
|
|
4626
4716
|
name: "posterImage",
|
|
4627
4717
|
type: "file",
|
|
4628
|
-
allowedFileTypes:
|
|
4718
|
+
allowedFileTypes: IMAGE_FILE_TYPES,
|
|
4629
4719
|
helperText: "Image to show before the video plays"
|
|
4630
4720
|
}, {
|
|
4631
4721
|
name: "autoPlay",
|
|
@@ -4881,7 +4971,7 @@ var createRegisterComponentMessage = (info) => ({
|
|
|
4881
4971
|
var serializeFn = (fnValue) => {
|
|
4882
4972
|
const fnStr = fnValue.toString().trim();
|
|
4883
4973
|
const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
|
|
4884
|
-
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4974
|
+
const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
|
|
4885
4975
|
return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
|
|
4886
4976
|
};
|
|
4887
4977
|
function serializeIncludingFunctions(info) {
|
|
@@ -4964,7 +5054,7 @@ function getPreviewContent(_searchParams) {
|
|
|
4964
5054
|
}
|
|
4965
5055
|
|
|
4966
5056
|
// src/constants/sdk-version.ts
|
|
4967
|
-
var SDK_VERSION = "3.0.
|
|
5057
|
+
var SDK_VERSION = "3.0.1";
|
|
4968
5058
|
|
|
4969
5059
|
// src/helpers/sdk-headers.ts
|
|
4970
5060
|
var getSdkHeaders = () => ({
|
|
@@ -5682,6 +5772,12 @@ var subscribeToEditor = (model, callback, options) => {
|
|
|
5682
5772
|
};
|
|
5683
5773
|
};
|
|
5684
5774
|
|
|
5775
|
+
// src/components/content/components/enable-editor.helpers.ts
|
|
5776
|
+
var SDKS_USING_ELEMENT_REF_APPROACH = ["svelte", "qwik", "vue"];
|
|
5777
|
+
var needsElementRefDivForEditing = () => {
|
|
5778
|
+
return SDKS_USING_ELEMENT_REF_APPROACH.includes(TARGET) && (isEditing() || isPreviewing());
|
|
5779
|
+
};
|
|
5780
|
+
|
|
5685
5781
|
// src/components/content/components/styles.helpers.ts
|
|
5686
5782
|
var getCssFromFont = (font) => {
|
|
5687
5783
|
const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
|
|
@@ -5917,8 +6013,10 @@ function EnableEditor(props) {
|
|
|
5917
6013
|
} : {}
|
|
5918
6014
|
});
|
|
5919
6015
|
Object.values(props.builderContextSignal.componentInfos).forEach((registeredComponent) => {
|
|
5920
|
-
|
|
5921
|
-
|
|
6016
|
+
if (!props.model || !registeredComponent.models?.length || registeredComponent.models.includes(props.model)) {
|
|
6017
|
+
const message = createRegisterComponentMessage(registeredComponent);
|
|
6018
|
+
window.parent?.postMessage(message, "*");
|
|
6019
|
+
}
|
|
5922
6020
|
});
|
|
5923
6021
|
window.addEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
|
|
5924
6022
|
}
|
|
@@ -5990,7 +6088,7 @@ function EnableEditor(props) {
|
|
|
5990
6088
|
get children() {
|
|
5991
6089
|
return createComponent(Show, {
|
|
5992
6090
|
get when() {
|
|
5993
|
-
return props.builderContextSignal.content;
|
|
6091
|
+
return props.builderContextSignal.content || needsElementRefDivForEditing();
|
|
5994
6092
|
},
|
|
5995
6093
|
get children() {
|
|
5996
6094
|
return createComponent(Dynamic, mergeProps({
|
|
@@ -6008,6 +6106,11 @@ function EnableEditor(props) {
|
|
|
6008
6106
|
},
|
|
6009
6107
|
get ["builder-model"]() {
|
|
6010
6108
|
return props.model;
|
|
6109
|
+
},
|
|
6110
|
+
get style() {
|
|
6111
|
+
return {
|
|
6112
|
+
display: !props.builderContextSignal.content && needsElementRefDivForEditing() ? "none" : void 0
|
|
6113
|
+
};
|
|
6011
6114
|
}
|
|
6012
6115
|
}, {}, showContentProps, () => props.contentWrapperProps, {
|
|
6013
6116
|
get component() {
|
|
@@ -6090,15 +6193,7 @@ function ContentComponent(props) {
|
|
|
6090
6193
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
6091
6194
|
contentId: props.content?.id
|
|
6092
6195
|
}));
|
|
6093
|
-
const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents
|
|
6094
|
-
models
|
|
6095
|
-
}) => {
|
|
6096
|
-
if (!models?.length)
|
|
6097
|
-
return true;
|
|
6098
|
-
if (!props.model)
|
|
6099
|
-
return true;
|
|
6100
|
-
return models.includes(props.model);
|
|
6101
|
-
}) || []].reduce((acc, {
|
|
6196
|
+
const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
|
|
6102
6197
|
component,
|
|
6103
6198
|
...info
|
|
6104
6199
|
}) => ({
|
|
@@ -6124,15 +6219,7 @@ function ContentComponent(props) {
|
|
|
6124
6219
|
canTrack: props.canTrack,
|
|
6125
6220
|
apiKey: props.apiKey,
|
|
6126
6221
|
apiVersion: props.apiVersion,
|
|
6127
|
-
componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents
|
|
6128
|
-
models
|
|
6129
|
-
}) => {
|
|
6130
|
-
if (!models?.length)
|
|
6131
|
-
return true;
|
|
6132
|
-
if (!props.model)
|
|
6133
|
-
return true;
|
|
6134
|
-
return models.includes(props.model);
|
|
6135
|
-
}) || []].reduce((acc, {
|
|
6222
|
+
componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
|
|
6136
6223
|
component: _,
|
|
6137
6224
|
...info
|
|
6138
6225
|
}) => ({
|
|
@@ -6142,7 +6229,8 @@ function ContentComponent(props) {
|
|
|
6142
6229
|
inheritedStyles: {},
|
|
6143
6230
|
BlocksWrapper: props.blocksWrapper || "div",
|
|
6144
6231
|
BlocksWrapperProps: props.blocksWrapperProps || {},
|
|
6145
|
-
nonce: props.nonce || ""
|
|
6232
|
+
nonce: props.nonce || "",
|
|
6233
|
+
model: props.model || ""
|
|
6146
6234
|
});
|
|
6147
6235
|
function contentSetState(newRootState) {
|
|
6148
6236
|
setBuilderContextSignal((PREVIOUS_VALUE) => ({
|