@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.
@@ -95,7 +95,8 @@ var builder_context_default = createContext({
95
95
  inheritedStyles: {},
96
96
  BlocksWrapper: "div",
97
97
  BlocksWrapperProps: {},
98
- nonce: ""
98
+ nonce: "",
99
+ model: ""
99
100
  });
100
101
 
101
102
  // src/context/components.context.ts
@@ -576,6 +577,76 @@ function evaluate({
576
577
  }
577
578
  }
578
579
 
580
+ // src/functions/traverse.ts
581
+ function traverse(obj, callback, parent2 = null, key = null, visited = /* @__PURE__ */ new WeakSet()) {
582
+ if (obj == null || typeof obj !== "object") {
583
+ callback(obj, (newValue) => {
584
+ if (parent2 !== null && key !== null) {
585
+ parent2[key] = newValue;
586
+ }
587
+ });
588
+ return;
589
+ }
590
+ if (visited.has(obj)) {
591
+ return;
592
+ }
593
+ visited.add(obj);
594
+ if (Array.isArray(obj)) {
595
+ obj.forEach((item, index) => {
596
+ const update = (newValue) => {
597
+ obj[index] = newValue;
598
+ };
599
+ callback(item, update);
600
+ traverse(item, callback, obj, index, visited);
601
+ });
602
+ } else {
603
+ Object.entries(obj).forEach(([key2, value]) => {
604
+ const update = (newValue) => {
605
+ obj[key2] = newValue;
606
+ };
607
+ callback(value, update);
608
+ traverse(value, callback, obj, key2, visited);
609
+ });
610
+ }
611
+ }
612
+
613
+ // src/functions/extract-localized-values.ts
614
+ function isLocalizedField(value) {
615
+ return value && typeof value === "object" && value["@type"] === "@builder.io/core:LocalizedValue";
616
+ }
617
+ function containsLocalizedValues(data) {
618
+ if (!data || !Object.getOwnPropertyNames(data).length) {
619
+ return false;
620
+ }
621
+ let hasLocalizedValues = false;
622
+ traverse(data, (value) => {
623
+ if (isLocalizedField(value)) {
624
+ hasLocalizedValues = true;
625
+ return;
626
+ }
627
+ });
628
+ return hasLocalizedValues;
629
+ }
630
+ function extractLocalizedValues(data, locale) {
631
+ if (!data || !Object.getOwnPropertyNames(data).length) {
632
+ return {};
633
+ }
634
+ traverse(data, (value, update) => {
635
+ if (isLocalizedField(value)) {
636
+ update(value[locale] ?? void 0);
637
+ }
638
+ });
639
+ return data;
640
+ }
641
+ function resolveLocalizedValues(block, locale) {
642
+ if (block.component?.options && containsLocalizedValues(block.component?.options)) {
643
+ if (!locale) {
644
+ }
645
+ block.component.options = extractLocalizedValues(block.component.options, locale ?? "Default");
646
+ }
647
+ return block;
648
+ }
649
+
579
650
  // src/functions/transform-block.ts
580
651
  function transformBlock(block) {
581
652
  return block;
@@ -661,7 +732,8 @@ function getProcessedBlock({
661
732
  rootState,
662
733
  rootSetState
663
734
  }) {
664
- const transformedBlock = transformBlock(block);
735
+ let transformedBlock = resolveLocalizedValues(block, rootState.locale);
736
+ transformedBlock = transformBlock(transformedBlock);
665
737
  if (shouldEvaluateBindings) {
666
738
  return evaluateBindings({
667
739
  block: transformedBlock,
@@ -918,16 +990,24 @@ function mapStyleObjToStrIfNeeded(style) {
918
990
  }
919
991
 
920
992
  // src/components/block/block.helpers.ts
993
+ var checkIsComponentRestricted = (component, model) => {
994
+ if (!component)
995
+ return true;
996
+ if (!model)
997
+ return false;
998
+ return component.models && component.models.length > 0 && !component.models.includes(model);
999
+ };
921
1000
  var getComponent = ({
922
1001
  block,
923
- registeredComponents
1002
+ registeredComponents,
1003
+ model
924
1004
  }) => {
925
1005
  const componentName = block.component?.name;
926
1006
  if (!componentName) {
927
1007
  return null;
928
1008
  }
929
1009
  const ref = registeredComponents[componentName];
930
- if (!ref) {
1010
+ if (!ref || checkIsComponentRestricted(ref, model)) {
931
1011
  return void 0;
932
1012
  } else {
933
1013
  return ref;
@@ -978,11 +1058,15 @@ var provideLinkComponent = (block, linkComponent) => {
978
1058
  };
979
1059
  return {};
980
1060
  };
981
- var provideRegisteredComponents = (block, registeredComponents) => {
982
- if (block?.shouldReceiveBuilderProps?.builderComponents)
1061
+ var provideRegisteredComponents = (block, registeredComponents, model) => {
1062
+ if (block?.shouldReceiveBuilderProps?.builderComponents) {
1063
+ const filteredRegisteredComponents = Object.fromEntries(Object.entries(registeredComponents).filter(([_, component]) => {
1064
+ return !checkIsComponentRestricted(component, model);
1065
+ }));
983
1066
  return {
984
- builderComponents: registeredComponents
1067
+ builderComponents: filteredRegisteredComponents
985
1068
  };
1069
+ }
986
1070
  return {};
987
1071
  };
988
1072
  var provideBuilderBlock = (block, builderBlock) => {
@@ -1386,7 +1470,8 @@ function Block(props) {
1386
1470
  const blockComponent = createMemo5(() => {
1387
1471
  return getComponent({
1388
1472
  block: processedBlock(),
1389
- registeredComponents: props.registeredComponents
1473
+ registeredComponents: props.registeredComponents,
1474
+ model: props.context.model
1390
1475
  });
1391
1476
  });
1392
1477
  const Tag = createMemo5(() => {
@@ -1421,7 +1506,8 @@ function Block(props) {
1421
1506
  ...provideLinkComponent(blockComponent(), props.linkComponent),
1422
1507
  ...provideRegisteredComponents(
1423
1508
  blockComponent(),
1424
- props.registeredComponents
1509
+ props.registeredComponents,
1510
+ props.context.model
1425
1511
  )
1426
1512
  },
1427
1513
  context: props.context,
@@ -1845,7 +1931,7 @@ function Image(props) {
1845
1931
  const url = imageToUse;
1846
1932
  if (!url || // We can auto add srcset for cdn.builder.io and shopify
1847
1933
  // images, otherwise you can supply this prop manually
1848
- !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
1934
+ !(typeof url === "string" && (url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/)))) {
1849
1935
  return props.srcset;
1850
1936
  }
1851
1937
  if (props.noWebp) {
@@ -1885,7 +1971,7 @@ function Image(props) {
1885
1971
  <picture>
1886
1972
  <Show8 when={webpSrcSet()}><source type="image/webp" srcset={webpSrcSet()} /></Show8>
1887
1973
  <img
1888
- class={"builder-image" + (props.className ? " " + props.className : "") + " img-7e6ffddc"}
1974
+ class={"builder-image" + (props.className ? " " + props.className : "") + " img-070d7e88"}
1889
1975
  loading={props.highPriority ? "eager" : "lazy"}
1890
1976
  fetchpriority={props.highPriority ? "high" : "auto"}
1891
1977
  alt={props.altText}
@@ -1903,22 +1989,22 @@ function Image(props) {
1903
1989
  <Show8
1904
1990
  when={props.aspectRatio && !(props.builderBlock?.children?.length && props.fitContent)}
1905
1991
  ><div
1906
- class="builder-image-sizer div-7e6ffddc"
1992
+ class="builder-image-sizer div-070d7e88"
1907
1993
  style={{
1908
1994
  "padding-top": props.aspectRatio * 100 + "%"
1909
1995
  }}
1910
1996
  /></Show8>
1911
1997
  <Show8 when={props.builderBlock?.children?.length && props.fitContent}>{props.children}</Show8>
1912
- <Show8 when={!props.fitContent && props.builderBlock?.children?.length}><div class="div-7e6ffddc-2">{props.children}</div></Show8>
1998
+ <Show8 when={!props.fitContent && props.builderBlock?.children?.length}><div class="div-070d7e88-2">{props.children}</div></Show8>
1913
1999
  </>
1914
- <style>{`.img-7e6ffddc {
2000
+ <style>{`.img-070d7e88 {
1915
2001
  opacity: 1;
1916
2002
  transition: opacity 0.2s ease-in-out;
1917
- }.div-7e6ffddc {
2003
+ }.div-070d7e88 {
1918
2004
  width: 100%;
1919
2005
  pointer-events: none;
1920
2006
  font-size: 0;
1921
- }.div-7e6ffddc-2 {
2007
+ }.div-070d7e88-2 {
1922
2008
  display: flex;
1923
2009
  flex-direction: column;
1924
2010
  align-items: stretch;
@@ -2711,6 +2797,10 @@ var componentInfo4 = {
2711
2797
  noWrap: true
2712
2798
  };
2713
2799
 
2800
+ // src/constants/file-types.ts
2801
+ 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"];
2802
+ 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"];
2803
+
2714
2804
  // src/blocks/image/component-info.ts
2715
2805
  var componentInfo5 = {
2716
2806
  name: "Image",
@@ -2727,7 +2817,7 @@ var componentInfo5 = {
2727
2817
  name: "image",
2728
2818
  type: "file",
2729
2819
  bubble: true,
2730
- allowedFileTypes: ["jpeg", "jpg", "png", "svg", "webp"],
2820
+ allowedFileTypes: IMAGE_FILE_TYPES,
2731
2821
  required: true,
2732
2822
  defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
2733
2823
  onChange: (options) => {
@@ -4084,7 +4174,7 @@ var componentInfo18 = {
4084
4174
  name: "image",
4085
4175
  bubble: true,
4086
4176
  type: "file",
4087
- allowedFileTypes: ["jpeg", "jpg", "png", "svg", "gif", "webp"],
4177
+ allowedFileTypes: IMAGE_FILE_TYPES,
4088
4178
  required: true
4089
4179
  }],
4090
4180
  noWrap: true,
@@ -4119,14 +4209,14 @@ var componentInfo19 = {
4119
4209
  inputs: [{
4120
4210
  name: "video",
4121
4211
  type: "file",
4122
- allowedFileTypes: ["mp4"],
4212
+ allowedFileTypes: VIDEO_FILE_TYPES,
4123
4213
  bubble: true,
4124
4214
  defaultValue: "https://cdn.builder.io/o/assets%2FYJIGb4i01jvw0SRdL5Bt%2Fd27731a526464deba0016216f5f9e570%2Fcompressed?apiKey=YJIGb4i01jvw0SRdL5Bt&token=d27731a526464deba0016216f5f9e570&alt=media&optimized=true",
4125
4215
  required: true
4126
4216
  }, {
4127
4217
  name: "posterImage",
4128
4218
  type: "file",
4129
- allowedFileTypes: ["jpeg", "png"],
4219
+ allowedFileTypes: IMAGE_FILE_TYPES,
4130
4220
  helperText: "Image to show before the video plays"
4131
4221
  }, {
4132
4222
  name: "autoPlay",
@@ -4352,7 +4442,7 @@ var createRegisterComponentMessage = (info) => ({
4352
4442
  var serializeFn = (fnValue) => {
4353
4443
  const fnStr = fnValue.toString().trim();
4354
4444
  const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
4355
- const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4445
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4356
4446
  return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
4357
4447
  };
4358
4448
  function serializeIncludingFunctions(info) {
@@ -4437,7 +4527,7 @@ function getPreviewContent(_searchParams) {
4437
4527
  }
4438
4528
 
4439
4529
  // src/constants/sdk-version.ts
4440
- var SDK_VERSION = "3.0.0";
4530
+ var SDK_VERSION = "3.0.1";
4441
4531
 
4442
4532
  // src/helpers/sdk-headers.ts
4443
4533
  var getSdkHeaders = () => ({
@@ -5149,6 +5239,12 @@ var subscribeToEditor = (model, callback, options) => {
5149
5239
  };
5150
5240
  };
5151
5241
 
5242
+ // src/components/content/components/enable-editor.helpers.ts
5243
+ var SDKS_USING_ELEMENT_REF_APPROACH = ["svelte", "qwik", "vue"];
5244
+ var needsElementRefDivForEditing = () => {
5245
+ return SDKS_USING_ELEMENT_REF_APPROACH.includes(TARGET) && (isEditing() || isPreviewing());
5246
+ };
5247
+
5152
5248
  // src/components/content/components/styles.helpers.ts
5153
5249
  var getCssFromFont = (font) => {
5154
5250
  const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
@@ -5394,8 +5490,10 @@ function EnableEditor(props) {
5394
5490
  Object.values(
5395
5491
  props.builderContextSignal.componentInfos
5396
5492
  ).forEach((registeredComponent) => {
5397
- const message = createRegisterComponentMessage(registeredComponent);
5398
- window.parent?.postMessage(message, "*");
5493
+ if (!props.model || !registeredComponent.models?.length || registeredComponent.models.includes(props.model)) {
5494
+ const message = createRegisterComponentMessage(registeredComponent);
5495
+ window.parent?.postMessage(message, "*");
5496
+ }
5399
5497
  });
5400
5498
  window.addEventListener(
5401
5499
  "builder:component:stateChangeListenerActivated",
@@ -5472,7 +5570,9 @@ function EnableEditor(props) {
5472
5570
  }
5473
5571
  }
5474
5572
  createEffect3(on3(() => [onUpdateFn_3_props_locale()], onUpdateFn_3));
5475
- return <><builder_context_default.Provider value={props.builderContextSignal}><Show13 when={props.builderContextSignal.content}><Dynamic5
5573
+ return <><builder_context_default.Provider value={props.builderContextSignal}><Show13
5574
+ when={props.builderContextSignal.content || needsElementRefDivForEditing()}
5575
+ ><Dynamic5
5476
5576
  class={getWrapperClassName(
5477
5577
  props.content?.testVariationId || props.content?.id
5478
5578
  )}
@@ -5481,6 +5581,9 @@ function EnableEditor(props) {
5481
5581
  onClick={(event) => onClick(event)}
5482
5582
  builder-content-id={props.builderContextSignal.content?.id}
5483
5583
  builder-model={props.model}
5584
+ style={{
5585
+ display: !props.builderContextSignal.content && needsElementRefDivForEditing() ? "none" : void 0
5586
+ }}
5484
5587
  {...{}}
5485
5588
  {...showContentProps()}
5486
5589
  {...props.contentWrapperProps}
@@ -5561,13 +5664,7 @@ function ContentComponent(props) {
5561
5664
  const [registeredComponents, setRegisteredComponents] = createSignal18(
5562
5665
  [
5563
5666
  ...getDefaultRegisteredComponents(),
5564
- ...props.customComponents?.filter(({ models }) => {
5565
- if (!models?.length)
5566
- return true;
5567
- if (!props.model)
5568
- return true;
5569
- return models.includes(props.model);
5570
- }) || []
5667
+ ...props.customComponents || []
5571
5668
  ].reduce(
5572
5669
  (acc, { component, ...info }) => ({
5573
5670
  ...acc,
@@ -5597,13 +5694,7 @@ function ContentComponent(props) {
5597
5694
  apiVersion: props.apiVersion,
5598
5695
  componentInfos: [
5599
5696
  ...getDefaultRegisteredComponents(),
5600
- ...props.customComponents?.filter(({ models }) => {
5601
- if (!models?.length)
5602
- return true;
5603
- if (!props.model)
5604
- return true;
5605
- return models.includes(props.model);
5606
- }) || []
5697
+ ...props.customComponents || []
5607
5698
  ].reduce(
5608
5699
  (acc, { component: _, ...info }) => ({
5609
5700
  ...acc,
@@ -5614,7 +5705,8 @@ function ContentComponent(props) {
5614
5705
  inheritedStyles: {},
5615
5706
  BlocksWrapper: props.blocksWrapper || "div",
5616
5707
  BlocksWrapperProps: props.blocksWrapperProps || {},
5617
- nonce: props.nonce || ""
5708
+ nonce: props.nonce || "",
5709
+ model: props.model || ""
5618
5710
  });
5619
5711
  function contentSetState(newRootState) {
5620
5712
  setBuilderContextSignal((PREVIOUS_VALUE) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@builder.io/sdk-solid",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "description": "",
5
5
  "files": [
6
6
  "dist",