@builder.io/sdk-solid 2.0.31 → 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/lib/node/index.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
 
@@ -581,6 +582,74 @@ function evaluate({
581
582
  }
582
583
  }
583
584
 
585
+ // src/functions/traverse.ts
586
+ function traverse(obj, callback, parent2 = null, key = null, visited = /* @__PURE__ */ new WeakSet()) {
587
+ if (obj == null || typeof obj !== "object") {
588
+ callback(obj, (newValue) => {
589
+ if (parent2 !== null && key !== null) {
590
+ parent2[key] = newValue;
591
+ }
592
+ });
593
+ return;
594
+ }
595
+ if (visited.has(obj)) {
596
+ return;
597
+ }
598
+ visited.add(obj);
599
+ if (Array.isArray(obj)) {
600
+ obj.forEach((item, index) => {
601
+ const update = (newValue) => {
602
+ obj[index] = newValue;
603
+ };
604
+ callback(item, update);
605
+ traverse(item, callback, obj, index, visited);
606
+ });
607
+ } else {
608
+ Object.entries(obj).forEach(([key2, value]) => {
609
+ const update = (newValue) => {
610
+ obj[key2] = newValue;
611
+ };
612
+ callback(value, update);
613
+ traverse(value, callback, obj, key2, visited);
614
+ });
615
+ }
616
+ }
617
+
618
+ // src/functions/extract-localized-values.ts
619
+ function isLocalizedField(value) {
620
+ return value && typeof value === "object" && value["@type"] === "@builder.io/core:LocalizedValue";
621
+ }
622
+ function containsLocalizedValues(data) {
623
+ if (!data || !Object.getOwnPropertyNames(data).length) {
624
+ return false;
625
+ }
626
+ let hasLocalizedValues = false;
627
+ traverse(data, (value) => {
628
+ if (isLocalizedField(value)) {
629
+ hasLocalizedValues = true;
630
+ return;
631
+ }
632
+ });
633
+ return hasLocalizedValues;
634
+ }
635
+ function extractLocalizedValues(data, locale) {
636
+ if (!data || !Object.getOwnPropertyNames(data).length) {
637
+ return {};
638
+ }
639
+ traverse(data, (value, update) => {
640
+ if (isLocalizedField(value)) {
641
+ update(value[locale] ?? void 0);
642
+ }
643
+ });
644
+ return data;
645
+ }
646
+ function resolveLocalizedValues(block, locale) {
647
+ if (block.component?.options && containsLocalizedValues(block.component?.options)) {
648
+ block.component.options = extractLocalizedValues(block.component.options, locale ?? "Default");
649
+ }
650
+ return block;
651
+ }
652
+
584
653
  // src/functions/transform-block.ts
585
654
  function transformBlock(block) {
586
655
  return block;
@@ -666,7 +735,8 @@ function getProcessedBlock({
666
735
  rootState,
667
736
  rootSetState
668
737
  }) {
669
- const transformedBlock = transformBlock(block);
738
+ let transformedBlock = resolveLocalizedValues(block, rootState.locale);
739
+ transformedBlock = transformBlock(transformedBlock);
670
740
  if (shouldEvaluateBindings) {
671
741
  return evaluateBindings({
672
742
  block: transformedBlock,
@@ -923,16 +993,24 @@ function mapStyleObjToStrIfNeeded(style) {
923
993
  }
924
994
 
925
995
  // src/components/block/block.helpers.ts
996
+ var checkIsComponentRestricted = (component, model) => {
997
+ if (!component)
998
+ return true;
999
+ if (!model)
1000
+ return false;
1001
+ return component.models && component.models.length > 0 && !component.models.includes(model);
1002
+ };
926
1003
  var getComponent = ({
927
1004
  block,
928
- registeredComponents
1005
+ registeredComponents,
1006
+ model
929
1007
  }) => {
930
1008
  const componentName = block.component?.name;
931
1009
  if (!componentName) {
932
1010
  return null;
933
1011
  }
934
1012
  const ref = registeredComponents[componentName];
935
- if (!ref) {
1013
+ if (!ref || checkIsComponentRestricted(ref, model)) {
936
1014
  return void 0;
937
1015
  } else {
938
1016
  return ref;
@@ -983,11 +1061,15 @@ var provideLinkComponent = (block, linkComponent) => {
983
1061
  };
984
1062
  return {};
985
1063
  };
986
- var provideRegisteredComponents = (block, registeredComponents) => {
987
- if (block?.shouldReceiveBuilderProps?.builderComponents)
1064
+ var provideRegisteredComponents = (block, registeredComponents, model) => {
1065
+ if (block?.shouldReceiveBuilderProps?.builderComponents) {
1066
+ const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
1067
+ return !checkIsComponentRestricted(component, model);
1068
+ }));
988
1069
  return {
989
- builderComponents: registeredComponents
1070
+ builderComponents: filteredRegisteredComponents
990
1071
  };
1072
+ }
991
1073
  return {};
992
1074
  };
993
1075
  var provideBuilderBlock = (block, builderBlock) => {
@@ -1449,7 +1531,8 @@ function Block(props) {
1449
1531
  const blockComponent = createMemo(() => {
1450
1532
  return getComponent({
1451
1533
  block: processedBlock(),
1452
- registeredComponents: props.registeredComponents
1534
+ registeredComponents: props.registeredComponents,
1535
+ model: props.context.model
1453
1536
  });
1454
1537
  });
1455
1538
  const Tag = createMemo(() => {
@@ -1482,7 +1565,7 @@ function Block(props) {
1482
1565
  ...provideBuilderBlock(blockComponent(), processedBlock()),
1483
1566
  ...provideBuilderContext(blockComponent(), props.context),
1484
1567
  ...provideLinkComponent(blockComponent(), props.linkComponent),
1485
- ...provideRegisteredComponents(blockComponent(), props.registeredComponents)
1568
+ ...provideRegisteredComponents(blockComponent(), props.registeredComponents, props.context.model)
1486
1569
  },
1487
1570
  context: props.context,
1488
1571
  linkComponent: props.linkComponent,
@@ -2080,16 +2163,16 @@ function getSrcSet(url) {
2080
2163
  // src/blocks/image/image.tsx
2081
2164
  var _tmpl$5 = /* @__PURE__ */ template(`<source type=image/webp>`);
2082
2165
  var _tmpl$23 = /* @__PURE__ */ template(`<picture><img>`);
2083
- var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-7e6ffddc">`);
2084
- var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-7e6ffddc-2>`);
2085
- var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-7e6ffddc {
2166
+ var _tmpl$32 = /* @__PURE__ */ template(`<div class="builder-image-sizer div-070d7e88">`);
2167
+ var _tmpl$42 = /* @__PURE__ */ template(`<div class=div-070d7e88-2>`);
2168
+ var _tmpl$52 = /* @__PURE__ */ template(`<style>.img-070d7e88 {
2086
2169
  opacity: 1;
2087
2170
  transition: opacity 0.2s ease-in-out;
2088
- }.div-7e6ffddc {
2171
+ }.div-070d7e88 {
2089
2172
  width: 100%;
2090
2173
  pointer-events: none;
2091
2174
  font-size: 0;
2092
- }.div-7e6ffddc-2 {
2175
+ }.div-070d7e88-2 {
2093
2176
  display: flex;
2094
2177
  flex-direction: column;
2095
2178
  align-items: stretch;
@@ -2105,7 +2188,7 @@ function Image(props) {
2105
2188
  const url = imageToUse;
2106
2189
  if (!url || // We can auto add srcset for cdn.builder.io and shopify
2107
2190
  // images, otherwise you can supply this prop manually
2108
- !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
2191
+ !(typeof url === "string" && (url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/)))) {
2109
2192
  return props.srcset;
2110
2193
  }
2111
2194
  if (props.noWebp) {
@@ -2153,7 +2236,7 @@ function Image(props) {
2153
2236
  }
2154
2237
  }), _el$3);
2155
2238
  effect((_p$) => {
2156
- const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " img-7e6ffddc", _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 = {
2239
+ 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 = {
2157
2240
  "object-position": props.backgroundPosition || "center",
2158
2241
  "object-fit": props.backgroundSize || "cover",
2159
2242
  ...aspectRatioCss()
@@ -3019,6 +3102,10 @@ var componentInfo4 = {
3019
3102
  noWrap: true
3020
3103
  };
3021
3104
 
3105
+ // src/constants/file-types.ts
3106
+ 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"];
3107
+ 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"];
3108
+
3022
3109
  // src/blocks/image/component-info.ts
3023
3110
  var componentInfo5 = {
3024
3111
  name: "Image",
@@ -3035,7 +3122,7 @@ var componentInfo5 = {
3035
3122
  name: "image",
3036
3123
  type: "file",
3037
3124
  bubble: true,
3038
- allowedFileTypes: ["jpeg", "jpg", "png", "svg", "webp"],
3125
+ allowedFileTypes: IMAGE_FILE_TYPES,
3039
3126
  required: true,
3040
3127
  defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
3041
3128
  onChange: (options) => {
@@ -4564,7 +4651,7 @@ var componentInfo18 = {
4564
4651
  name: "image",
4565
4652
  bubble: true,
4566
4653
  type: "file",
4567
- allowedFileTypes: ["jpeg", "jpg", "png", "svg", "gif", "webp"],
4654
+ allowedFileTypes: IMAGE_FILE_TYPES,
4568
4655
  required: true
4569
4656
  }],
4570
4657
  noWrap: true,
@@ -4608,14 +4695,14 @@ var componentInfo19 = {
4608
4695
  inputs: [{
4609
4696
  name: "video",
4610
4697
  type: "file",
4611
- allowedFileTypes: ["mp4"],
4698
+ allowedFileTypes: VIDEO_FILE_TYPES,
4612
4699
  bubble: true,
4613
4700
  defaultValue: "https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true",
4614
4701
  required: true
4615
4702
  }, {
4616
4703
  name: "posterImage",
4617
4704
  type: "file",
4618
- allowedFileTypes: ["jpeg", "png"],
4705
+ allowedFileTypes: IMAGE_FILE_TYPES,
4619
4706
  helperText: "Image to show before the video plays"
4620
4707
  }, {
4621
4708
  name: "autoPlay",
@@ -4871,7 +4958,7 @@ var createRegisterComponentMessage = (info) => ({
4871
4958
  var serializeFn = (fnValue) => {
4872
4959
  const fnStr = fnValue.toString().trim();
4873
4960
  const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
4874
- const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4961
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4875
4962
  return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
4876
4963
  };
4877
4964
  function serializeIncludingFunctions(info) {
@@ -4954,7 +5041,7 @@ function getPreviewContent(_searchParams) {
4954
5041
  }
4955
5042
 
4956
5043
  // src/constants/sdk-version.ts
4957
- var SDK_VERSION = "2.0.31";
5044
+ var SDK_VERSION = "3.0.1";
4958
5045
 
4959
5046
  // src/helpers/sdk-headers.ts
4960
5047
  var getSdkHeaders = () => ({
@@ -5193,22 +5280,17 @@ var _processContentResult = async (options, content, url = generateContentUrl(op
5193
5280
  return content.results;
5194
5281
  };
5195
5282
  async function fetchEntries(options) {
5196
- try {
5197
- const url = generateContentUrl(options);
5198
- const content = await _fetchContent(options);
5199
- if (!checkContentHasResults(content)) {
5200
- logger.error("Error fetching data. ", {
5201
- url,
5202
- content,
5203
- options
5204
- });
5205
- return null;
5206
- }
5207
- return _processContentResult(options, content);
5208
- } catch (error2) {
5209
- logger.error("Error fetching data. ", error2);
5210
- return null;
5283
+ const url = generateContentUrl(options);
5284
+ const content = await _fetchContent(options);
5285
+ if (!checkContentHasResults(content)) {
5286
+ logger.error("Error fetching data. ", {
5287
+ url,
5288
+ content,
5289
+ options
5290
+ });
5291
+ throw content;
5211
5292
  }
5293
+ return _processContentResult(options, content);
5212
5294
  }
5213
5295
 
5214
5296
  // src/functions/is-previewing.ts
@@ -5671,6 +5753,12 @@ var subscribeToEditor = (model, callback, options) => {
5671
5753
  };
5672
5754
  };
5673
5755
 
5756
+ // src/components/content/components/enable-editor.helpers.ts
5757
+ var SDKS_USING_ELEMENT_REF_APPROACH = ["svelte", "qwik", "vue"];
5758
+ var needsElementRefDivForEditing = () => {
5759
+ return SDKS_USING_ELEMENT_REF_APPROACH.includes(TARGET) && (isEditing() || isPreviewing());
5760
+ };
5761
+
5674
5762
  // src/components/content/components/styles.helpers.ts
5675
5763
  var getCssFromFont = (font) => {
5676
5764
  const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
@@ -5905,8 +5993,10 @@ function EnableEditor(props) {
5905
5993
  } : {}
5906
5994
  });
5907
5995
  Object.values(props.builderContextSignal.componentInfos).forEach((registeredComponent) => {
5908
- const message = createRegisterComponentMessage(registeredComponent);
5909
- window.parent?.postMessage(message, "*");
5996
+ if (!props.model || !registeredComponent.models?.length || registeredComponent.models.includes(props.model)) {
5997
+ const message = createRegisterComponentMessage(registeredComponent);
5998
+ window.parent?.postMessage(message, "*");
5999
+ }
5910
6000
  });
5911
6001
  window.addEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
5912
6002
  }
@@ -5978,7 +6068,7 @@ function EnableEditor(props) {
5978
6068
  get children() {
5979
6069
  return createComponent(Show, {
5980
6070
  get when() {
5981
- return props.builderContextSignal.content;
6071
+ return props.builderContextSignal.content || needsElementRefDivForEditing();
5982
6072
  },
5983
6073
  get children() {
5984
6074
  return createComponent(Dynamic, mergeProps({
@@ -5996,6 +6086,11 @@ function EnableEditor(props) {
5996
6086
  },
5997
6087
  get ["builder-model"]() {
5998
6088
  return props.model;
6089
+ },
6090
+ get style() {
6091
+ return {
6092
+ display: !props.builderContextSignal.content && needsElementRefDivForEditing() ? "none" : void 0
6093
+ };
5999
6094
  }
6000
6095
  }, {}, showContentProps, () => props.contentWrapperProps, {
6001
6096
  get component() {
@@ -6078,15 +6173,7 @@ function ContentComponent(props) {
6078
6173
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
6079
6174
  contentId: props.content?.id
6080
6175
  }));
6081
- const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents?.filter(({
6082
- models
6083
- }) => {
6084
- if (!models?.length)
6085
- return true;
6086
- if (!props.model)
6087
- return true;
6088
- return models.includes(props.model);
6089
- }) || []].reduce((acc, {
6176
+ const [registeredComponents, setRegisteredComponents] = createSignal([...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
6090
6177
  component,
6091
6178
  ...info
6092
6179
  }) => ({
@@ -6112,15 +6199,7 @@ function ContentComponent(props) {
6112
6199
  canTrack: props.canTrack,
6113
6200
  apiKey: props.apiKey,
6114
6201
  apiVersion: props.apiVersion,
6115
- componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents?.filter(({
6116
- models
6117
- }) => {
6118
- if (!models?.length)
6119
- return true;
6120
- if (!props.model)
6121
- return true;
6122
- return models.includes(props.model);
6123
- }) || []].reduce((acc, {
6202
+ componentInfos: [...getDefaultRegisteredComponents(), ...props.customComponents || []].reduce((acc, {
6124
6203
  component: _,
6125
6204
  ...info
6126
6205
  }) => ({
@@ -6130,7 +6209,8 @@ function ContentComponent(props) {
6130
6209
  inheritedStyles: {},
6131
6210
  BlocksWrapper: props.blocksWrapper || "div",
6132
6211
  BlocksWrapperProps: props.blocksWrapperProps || {},
6133
- nonce: props.nonce || ""
6212
+ nonce: props.nonce || "",
6213
+ model: props.model || ""
6134
6214
  });
6135
6215
  function contentSetState(newRootState) {
6136
6216
  setBuilderContextSignal((PREVIOUS_VALUE) => ({