@builder.io/sdk-svelte 2.0.0 → 2.0.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.
Files changed (78) hide show
  1. package/lib/browser/blocks/columns/columns.svelte +5 -1
  2. package/lib/browser/blocks/image/image.svelte +3 -0
  3. package/lib/browser/blocks/symbol/symbol.svelte +1 -0
  4. package/lib/browser/components/block/components/block-styles.svelte +1 -1
  5. package/lib/browser/components/content/components/styles.svelte +2 -1
  6. package/lib/browser/components/content/components/styles.svelte.d.ts +3 -1
  7. package/lib/browser/components/content/content.svelte +24 -4
  8. package/lib/browser/components/content/content.svelte.d.ts +2 -1
  9. package/lib/browser/components/content-variants/content-variants.svelte +11 -3
  10. package/lib/browser/components/content-variants/content-variants.svelte.d.ts +1 -0
  11. package/lib/browser/components/content-variants/content-variants.types.d.ts +4 -0
  12. package/lib/browser/components/inlined-script.svelte +2 -1
  13. package/lib/browser/components/inlined-script.svelte.d.ts +3 -1
  14. package/lib/browser/components/inlined-styles.svelte +2 -1
  15. package/lib/browser/components/inlined-styles.svelte.d.ts +3 -1
  16. package/lib/browser/constants/sdk-version.d.ts +1 -1
  17. package/lib/browser/constants/sdk-version.js +1 -1
  18. package/lib/browser/context/builder.context.d.ts +1 -0
  19. package/lib/browser/context/builder.context.js +1 -0
  20. package/lib/browser/context/types.d.ts +1 -0
  21. package/lib/browser/types/builder-props.d.ts +3 -0
  22. package/lib/edge/blocks/columns/columns.svelte +5 -1
  23. package/lib/edge/blocks/image/image.svelte +3 -0
  24. package/lib/edge/blocks/symbol/symbol.svelte +1 -0
  25. package/lib/edge/components/block/components/block-styles.svelte +1 -1
  26. package/lib/edge/components/content/components/styles.svelte +2 -1
  27. package/lib/edge/components/content/components/styles.svelte.d.ts +3 -1
  28. package/lib/edge/components/content/content.svelte +24 -4
  29. package/lib/edge/components/content/content.svelte.d.ts +2 -1
  30. package/lib/edge/components/content-variants/content-variants.svelte +11 -3
  31. package/lib/edge/components/content-variants/content-variants.svelte.d.ts +1 -0
  32. package/lib/edge/components/content-variants/content-variants.types.d.ts +4 -0
  33. package/lib/edge/components/inlined-script.svelte +2 -1
  34. package/lib/edge/components/inlined-script.svelte.d.ts +3 -1
  35. package/lib/edge/components/inlined-styles.svelte +2 -1
  36. package/lib/edge/components/inlined-styles.svelte.d.ts +3 -1
  37. package/lib/edge/constants/sdk-version.d.ts +1 -1
  38. package/lib/edge/constants/sdk-version.js +1 -1
  39. package/lib/edge/context/builder.context.d.ts +1 -0
  40. package/lib/edge/context/builder.context.js +1 -0
  41. package/lib/edge/context/types.d.ts +1 -0
  42. package/lib/edge/types/builder-props.d.ts +3 -0
  43. package/lib/node/blocks/columns/columns.svelte +5 -1
  44. package/lib/node/blocks/image/image.svelte +3 -0
  45. package/lib/node/blocks/symbol/symbol.svelte +1 -0
  46. package/lib/node/components/block/components/block-styles.svelte +1 -1
  47. package/lib/node/components/content/components/styles.svelte +2 -1
  48. package/lib/node/components/content/components/styles.svelte.d.ts +3 -1
  49. package/lib/node/components/content/content.svelte +24 -4
  50. package/lib/node/components/content/content.svelte.d.ts +2 -1
  51. package/lib/node/components/content-variants/content-variants.svelte +11 -3
  52. package/lib/node/components/content-variants/content-variants.svelte.d.ts +1 -0
  53. package/lib/node/components/content-variants/content-variants.types.d.ts +4 -0
  54. package/lib/node/components/inlined-script.svelte +2 -1
  55. package/lib/node/components/inlined-script.svelte.d.ts +3 -1
  56. package/lib/node/components/inlined-styles.svelte +2 -1
  57. package/lib/node/components/inlined-styles.svelte.d.ts +3 -1
  58. package/lib/node/constants/sdk-version.d.ts +1 -1
  59. package/lib/node/constants/sdk-version.js +1 -1
  60. package/lib/node/context/builder.context.d.ts +1 -0
  61. package/lib/node/context/builder.context.js +1 -0
  62. package/lib/node/context/types.d.ts +1 -0
  63. package/lib/node/types/builder-props.d.ts +3 -0
  64. package/package.json +1 -1
  65. package/src/blocks/columns/columns.svelte +5 -1
  66. package/src/blocks/image/image.svelte +3 -0
  67. package/src/blocks/symbol/symbol.svelte +1 -0
  68. package/src/components/block/components/block-styles.svelte +1 -1
  69. package/src/components/content/components/styles.svelte +4 -2
  70. package/src/components/content/content.svelte +20 -4
  71. package/src/components/content-variants/content-variants.svelte +11 -4
  72. package/src/components/content-variants/content-variants.types.ts +5 -0
  73. package/src/components/inlined-script.svelte +5 -2
  74. package/src/components/inlined-styles.svelte +5 -2
  75. package/src/constants/sdk-version.ts +1 -1
  76. package/src/context/builder.context.ts +1 -0
  77. package/src/context/types.ts +1 -0
  78. package/src/types/builder-props.ts +3 -0
@@ -1 +1 @@
1
- export const SDK_VERSION = "2.0.0";
1
+ export const SDK_VERSION = "2.0.2";
@@ -12,6 +12,7 @@ declare const _default: {
12
12
  inheritedStyles: {};
13
13
  BlocksWrapper: string;
14
14
  BlocksWrapperProps: {};
15
+ nonce: string;
15
16
  }>;
16
17
  key: symbol;
17
18
  };
@@ -13,6 +13,7 @@ export default {
13
13
  inheritedStyles: {},
14
14
  BlocksWrapper: "div",
15
15
  BlocksWrapperProps: {},
16
+ nonce: "",
16
17
  }),
17
18
  key,
18
19
  };
@@ -33,5 +33,6 @@ export interface BuilderContextInterface extends Pick<BlocksWrapperProps, 'Block
33
33
  apiVersion: ApiVersion | undefined;
34
34
  componentInfos: Dictionary<ComponentInfo>;
35
35
  inheritedStyles: Record<string, unknown>;
36
+ nonce: string;
36
37
  canTrack?: boolean;
37
38
  }
@@ -12,3 +12,6 @@ export type BuilderComponentsProp = {
12
12
  export type BuilderLinkComponentProp = {
13
13
  builderLinkComponent?: any;
14
14
  };
15
+ export type BuilderNonceProp = {
16
+ nonce: string;
17
+ };
@@ -147,7 +147,11 @@ let flexDir = stackColumnsAt === "never"
147
147
  {...{}}
148
148
  >
149
149
  {#if TARGET !== "reactNative"}
150
- <InlinedStyles id="builderio-columns" styles={columnsStyles()} />
150
+ <InlinedStyles
151
+ id="builderio-columns"
152
+ styles={columnsStyles()}
153
+ nonce={$builderContext.nonce}
154
+ />
151
155
  {/if}
152
156
  {#each columns as column, index (index)}
153
157
  <DynamicRenderer
@@ -31,6 +31,9 @@ $: srcSetToUse = () => {
31
31
  !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
32
32
  return srcset;
33
33
  }
34
+ if (noWebp) {
35
+ return undefined; // no need to add srcset to svg images
36
+ }
34
37
  if (srcset && image?.includes("builder.io/api/v1/image")) {
35
38
  if (!srcset.includes(image.split("?")[0])) {
36
39
  console.debug("Removed given srcset");
@@ -57,6 +57,7 @@ $: onUpdateFn_0(...[symbol]);
57
57
  use:setAttrs={filterAttrs(attributes, "on:", true)}
58
58
  >
59
59
  <ContentVariants
60
+ nonce={$builderContext.nonce}
60
61
  isNestedRender={true}
61
62
  apiVersion={$builderContext.apiVersion}
62
63
  apiKey={$builderContext.apiKey}
@@ -93,5 +93,5 @@ $: css = () => {
93
93
  </script>
94
94
 
95
95
  {#if TARGET !== "reactNative" && css() && canShowBlock()}
96
- <InlinedStyles id="builderio-block" styles={css()} />
96
+ <InlinedStyles id="builderio-block" styles={css()} nonce={context.nonce} />
97
97
  {/if}
@@ -6,6 +6,7 @@ export let cssCode = undefined;
6
6
  export let contentId = undefined;
7
7
  export let customFonts = undefined;
8
8
  export let isNestedRender = undefined;
9
+ export let nonce;
9
10
  let injectedStyles = `
10
11
  ${getCss({
11
12
  cssCode: cssCode,
@@ -18,4 +19,4 @@ ${getDefaultStyles(isNestedRender)}
18
19
  `.trim();
19
20
  </script>
20
21
 
21
- <InlinedStyles id="builderio-content" styles={injectedStyles} />
22
+ <InlinedStyles id="builderio-content" styles={injectedStyles} {nonce} />
@@ -1,10 +1,11 @@
1
1
  import { SvelteComponent } from "svelte";
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  cssCode?: string;
4
4
  customFonts?: CustomFont[];
5
5
  contentId?: string;
6
6
  isNestedRender?: boolean;
7
7
  }
8
+ import type { BuilderNonceProp } from "../../../types/builder-props";
8
9
  import type { CustomFont } from "./styles.helpers";
9
10
  declare const __propDef: {
10
11
  props: {
@@ -12,6 +13,7 @@ declare const __propDef: {
12
13
  contentId?: Props["contentId"];
13
14
  customFonts?: Props["customFonts"];
14
15
  isNestedRender?: Props["isNestedRender"];
16
+ nonce: Props["nonce"];
15
17
  };
16
18
  events: {
17
19
  [evt: string]: CustomEvent<any>;
@@ -14,6 +14,7 @@ import { getContentInitialValue, getRootStateInitialValue, } from "./content.hel
14
14
  import "./wrap-component-ref";
15
15
  export let content = undefined;
16
16
  export let customComponents = undefined;
17
+ export let model = undefined;
17
18
  export let data = undefined;
18
19
  export let locale = undefined;
19
20
  export let context = undefined;
@@ -22,7 +23,7 @@ export let apiKey;
22
23
  export let apiVersion = undefined;
23
24
  export let blocksWrapper = undefined;
24
25
  export let blocksWrapperProps = undefined;
25
- export let model = undefined;
26
+ export let nonce = undefined;
26
27
  export let enrich = undefined;
27
28
  export let showContent;
28
29
  export let contentWrapper = undefined;
@@ -42,7 +43,13 @@ let scriptStr = getUpdateVariantVisibilityScript({
42
43
  });
43
44
  let registeredComponents = [
44
45
  ...getDefaultRegisteredComponents(),
45
- ...(customComponents || []),
46
+ ...(customComponents?.filter(({ models }) => {
47
+ if (!models?.length)
48
+ return true;
49
+ if (!model)
50
+ return true;
51
+ return models.includes(model);
52
+ }) || []),
46
53
  ].reduce((acc, { component, ...info }) => ({
47
54
  ...acc,
48
55
  [info.name]: {
@@ -68,7 +75,13 @@ let builderContextSignal = writable({
68
75
  apiVersion: apiVersion,
69
76
  componentInfos: [
70
77
  ...getDefaultRegisteredComponents(),
71
- ...(customComponents || []),
78
+ ...(customComponents?.filter(({ models }) => {
79
+ if (!models?.length)
80
+ return true;
81
+ if (!model)
82
+ return true;
83
+ return models.includes(model);
84
+ }) || []),
72
85
  ].reduce((acc, { component: _, ...info }) => ({
73
86
  ...acc,
74
87
  [info.name]: serializeComponentInfo(info),
@@ -76,6 +89,7 @@ let builderContextSignal = writable({
76
89
  inheritedStyles: {},
77
90
  BlocksWrapper: blocksWrapper || "div",
78
91
  BlocksWrapperProps: blocksWrapperProps || {},
92
+ nonce: nonce || "",
79
93
  });
80
94
  setContext(ComponentsContext.key, {
81
95
  registeredComponents: registeredComponents,
@@ -83,6 +97,7 @@ setContext(ComponentsContext.key, {
83
97
  </script>
84
98
 
85
99
  <EnableEditor
100
+ {nonce}
86
101
  {content}
87
102
  {data}
88
103
  {model}
@@ -99,10 +114,15 @@ setContext(ComponentsContext.key, {
99
114
  {...{}}
100
115
  >
101
116
  {#if isSsrAbTest}
102
- <InlinedScript id="builderio-variant-visibility" {scriptStr} />
117
+ <InlinedScript
118
+ id="builderio-variant-visibility"
119
+ {scriptStr}
120
+ nonce={nonce || ""}
121
+ />
103
122
  {/if}
104
123
  {#if TARGET !== "reactNative"}
105
124
  <ContentStyles
125
+ nonce={nonce || ""}
106
126
  {isNestedRender}
107
127
  contentId={$builderContextSignal.content?.id}
108
128
  cssCode={$builderContextSignal.content?.data?.cssCode}
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  props: {
5
5
  content?: ContentProps["content"];
6
6
  customComponents?: ContentProps["customComponents"];
7
+ model?: ContentProps["model"];
7
8
  data?: ContentProps["data"];
8
9
  locale?: ContentProps["locale"];
9
10
  context?: ContentProps["context"];
@@ -12,7 +13,7 @@ declare const __propDef: {
12
13
  apiVersion?: ContentProps["apiVersion"];
13
14
  blocksWrapper?: ContentProps["blocksWrapper"];
14
15
  blocksWrapperProps?: ContentProps["blocksWrapperProps"];
15
- model?: ContentProps["model"];
16
+ nonce?: ContentProps["nonce"];
16
17
  enrich?: ContentProps["enrich"];
17
18
  showContent: ContentProps["showContent"];
18
19
  contentWrapper?: ContentProps["contentWrapper"];
@@ -1,6 +1,6 @@
1
1
  <script context="module"></script>
2
2
 
3
- <script>import { afterUpdate, onMount } from "svelte";
3
+ <script>import { onMount } from "svelte";
4
4
  import { TARGET } from "../../constants/target";
5
5
  import { handleABTestingSync } from "../../helpers/ab-tests";
6
6
  import { getDefaultCanTrack } from "../../helpers/canTrack";
@@ -11,6 +11,7 @@ import { checkShouldRenderVariants, getInitVariantsFnsScriptString, getUpdateCoo
11
11
  export let canTrack = undefined;
12
12
  export let content = undefined;
13
13
  export let isNestedRender = undefined;
14
+ export let nonce = undefined;
14
15
  export let model = undefined;
15
16
  export let data = undefined;
16
17
  export let context = undefined;
@@ -57,26 +58,32 @@ onMount(() => {
57
58
  */
58
59
  shouldRenderVariants = false;
59
60
  });
60
- afterUpdate(() => { });
61
61
  </script>
62
62
 
63
63
  {#if !isNestedRender && TARGET !== "reactNative"}
64
64
  <InlinedScript
65
65
  id="builderio-init-variants-fns"
66
66
  scriptStr={getInitVariantsFnsScriptString()}
67
+ nonce={nonce || ""}
67
68
  />
68
69
  {/if}
69
70
 
70
71
  {#if shouldRenderVariants}
71
- <InlinedStyles id="builderio-variants" styles={hideVariantsStyleString()} />
72
+ <InlinedStyles
73
+ id="builderio-variants"
74
+ styles={hideVariantsStyleString()}
75
+ nonce={nonce || ""}
76
+ />
72
77
  <InlinedScript
73
78
  id="builderio-variants-visibility"
74
79
  scriptStr={updateCookieAndStylesScriptStr()}
80
+ nonce={nonce || ""}
75
81
  />
76
82
 
77
83
  {#each getVariants(content) as variant (variant.testVariationId)}
78
84
  <ContentComponent
79
85
  {isNestedRender}
86
+ {nonce}
80
87
  content={variant}
81
88
  showContent={false}
82
89
  {model}
@@ -99,6 +106,7 @@ afterUpdate(() => { });
99
106
  {/each}
100
107
  {/if}
101
108
  <ContentComponent
109
+ {nonce}
102
110
  {isNestedRender}
103
111
  {...{}}
104
112
  content={defaultContent()}
@@ -11,6 +11,7 @@ declare const __propDef: {
11
11
  canTrack?: VariantsProviderProps["canTrack"];
12
12
  content?: VariantsProviderProps["content"];
13
13
  isNestedRender?: VariantsProviderProps["isNestedRender"];
14
+ nonce?: VariantsProviderProps["nonce"];
14
15
  model?: VariantsProviderProps["model"];
15
16
  data?: VariantsProviderProps["data"];
16
17
  context?: VariantsProviderProps["context"];
@@ -68,4 +68,8 @@ export interface ContentVariantsPrps {
68
68
  * List of hosts to allow editing content from.
69
69
  */
70
70
  trustedHosts?: string[];
71
+ /**
72
+ * A CSP nonce to use for the SDK's inlined `<script>` and `<style>` tags.
73
+ */
74
+ nonce?: string;
71
75
  }
@@ -2,6 +2,7 @@
2
2
 
3
3
  <script>export let scriptStr;
4
4
  export let id;
5
+ export let nonce;
5
6
  </script>
6
7
 
7
- {@html `<script data-id=${id}>${scriptStr}</script>`}
8
+ {@html `<script data-id=${id} nonce=${nonce || ""}>${scriptStr}</script>`}
@@ -1,12 +1,14 @@
1
1
  import { SvelteComponent } from "svelte";
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  scriptStr: string;
4
4
  id: string;
5
5
  }
6
+ import type { BuilderNonceProp } from "../types/builder-props";
6
7
  declare const __propDef: {
7
8
  props: {
8
9
  scriptStr: Props["scriptStr"];
9
10
  id: Props["id"];
11
+ nonce: Props["nonce"];
10
12
  };
11
13
  events: {
12
14
  [evt: string]: CustomEvent<any>;
@@ -2,6 +2,7 @@
2
2
 
3
3
  <script>export let styles;
4
4
  export let id;
5
+ export let nonce;
5
6
  </script>
6
7
 
7
- {@html `<${"style"} data-id=${id} >${styles}<${"/style"}>`}
8
+ {@html `<${"style"} data-id=${id} nonce=${nonce} >${styles}<${"/style"}>`}
@@ -1,12 +1,14 @@
1
1
  import { SvelteComponent } from "svelte";
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  styles: string;
4
4
  id: string;
5
5
  }
6
+ import type { BuilderNonceProp } from "../types/builder-props";
6
7
  declare const __propDef: {
7
8
  props: {
8
9
  styles: Props["styles"];
9
10
  id: Props["id"];
11
+ nonce: Props["nonce"];
10
12
  };
11
13
  events: {
12
14
  [evt: string]: CustomEvent<any>;
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "2.0.0";
1
+ export declare const SDK_VERSION = "2.0.2";
@@ -1 +1 @@
1
- export const SDK_VERSION = "2.0.0";
1
+ export const SDK_VERSION = "2.0.2";
@@ -12,6 +12,7 @@ declare const _default: {
12
12
  inheritedStyles: {};
13
13
  BlocksWrapper: string;
14
14
  BlocksWrapperProps: {};
15
+ nonce: string;
15
16
  }>;
16
17
  key: symbol;
17
18
  };
@@ -13,6 +13,7 @@ export default {
13
13
  inheritedStyles: {},
14
14
  BlocksWrapper: "div",
15
15
  BlocksWrapperProps: {},
16
+ nonce: "",
16
17
  }),
17
18
  key,
18
19
  };
@@ -33,5 +33,6 @@ export interface BuilderContextInterface extends Pick<BlocksWrapperProps, 'Block
33
33
  apiVersion: ApiVersion | undefined;
34
34
  componentInfos: Dictionary<ComponentInfo>;
35
35
  inheritedStyles: Record<string, unknown>;
36
+ nonce: string;
36
37
  canTrack?: boolean;
37
38
  }
@@ -12,3 +12,6 @@ export type BuilderComponentsProp = {
12
12
  export type BuilderLinkComponentProp = {
13
13
  builderLinkComponent?: any;
14
14
  };
15
+ export type BuilderNonceProp = {
16
+ nonce: string;
17
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@builder.io/sdk-svelte",
3
3
  "description": "Builder.io SDK for Svelte",
4
- "version": "2.0.0",
4
+ "version": "2.0.2",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "lib",
@@ -173,7 +173,11 @@
173
173
  {...{}}
174
174
  >
175
175
  {#if TARGET !== "reactNative"}
176
- <InlinedStyles id="builderio-columns" styles={columnsStyles()} />
176
+ <InlinedStyles
177
+ id="builderio-columns"
178
+ styles={columnsStyles()}
179
+ nonce={$builderContext.nonce}
180
+ />
177
181
  {/if}
178
182
  {#each columns as column, index (index)}
179
183
  <DynamicRenderer
@@ -38,6 +38,9 @@
38
38
  ) {
39
39
  return srcset;
40
40
  }
41
+ if (noWebp) {
42
+ return undefined; // no need to add srcset to svg images
43
+ }
41
44
  if (srcset && image?.includes("builder.io/api/v1/image")) {
42
45
  if (!srcset.includes(image.split("?")[0])) {
43
46
  console.debug("Removed given srcset");
@@ -68,6 +68,7 @@
68
68
  use:setAttrs={filterAttrs(attributes, "on:", true)}
69
69
  >
70
70
  <ContentVariants
71
+ nonce={$builderContext.nonce}
71
72
  isNestedRender={true}
72
73
  apiVersion={$builderContext.apiVersion}
73
74
  apiKey={$builderContext.apiKey}
@@ -117,5 +117,5 @@
117
117
  </script>
118
118
 
119
119
  {#if TARGET !== "reactNative" && css() && canShowBlock()}
120
- <InlinedStyles id="builderio-block" styles={css()} />
120
+ <InlinedStyles id="builderio-block" styles={css()} nonce={context.nonce} />
121
121
  {/if}
@@ -1,5 +1,5 @@
1
1
  <script context="module" lang="ts">
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  cssCode?: string;
4
4
  customFonts?: CustomFont[];
5
5
  contentId?: string;
@@ -8,6 +8,7 @@
8
8
  </script>
9
9
 
10
10
  <script lang="ts">
11
+ import type { BuilderNonceProp } from "../../../types/builder-props";
11
12
  import InlinedStyles from "../../inlined-styles.svelte";
12
13
  import type { CustomFont } from "./styles.helpers";
13
14
  import { getCss, getDefaultStyles, getFontCss } from "./styles.helpers";
@@ -16,6 +17,7 @@
16
17
  export let contentId: Props["contentId"] = undefined;
17
18
  export let customFonts: Props["customFonts"] = undefined;
18
19
  export let isNestedRender: Props["isNestedRender"] = undefined;
20
+ export let nonce: Props["nonce"];
19
21
 
20
22
  let injectedStyles = `
21
23
  ${getCss({
@@ -29,4 +31,4 @@ ${getDefaultStyles(isNestedRender)}
29
31
  `.trim();
30
32
  </script>
31
33
 
32
- <InlinedStyles id="builderio-content" styles={injectedStyles} />
34
+ <InlinedStyles id="builderio-content" styles={injectedStyles} {nonce} />
@@ -28,6 +28,7 @@
28
28
 
29
29
  export let content: ContentProps["content"] = undefined;
30
30
  export let customComponents: ContentProps["customComponents"] = undefined;
31
+ export let model: ContentProps["model"] = undefined;
31
32
  export let data: ContentProps["data"] = undefined;
32
33
  export let locale: ContentProps["locale"] = undefined;
33
34
  export let context: ContentProps["context"] = undefined;
@@ -36,7 +37,7 @@
36
37
  export let apiVersion: ContentProps["apiVersion"] = undefined;
37
38
  export let blocksWrapper: ContentProps["blocksWrapper"] = undefined;
38
39
  export let blocksWrapperProps: ContentProps["blocksWrapperProps"] = undefined;
39
- export let model: ContentProps["model"] = undefined;
40
+ export let nonce: ContentProps["nonce"] = undefined;
40
41
  export let enrich: ContentProps["enrich"] = undefined;
41
42
  export let showContent: ContentProps["showContent"];
42
43
  export let contentWrapper: ContentProps["contentWrapper"] = undefined;
@@ -59,7 +60,11 @@
59
60
  });
60
61
  let registeredComponents = [
61
62
  ...getDefaultRegisteredComponents(),
62
- ...(customComponents || []),
63
+ ...(customComponents?.filter(({ models }) => {
64
+ if (!models?.length) return true;
65
+ if (!model) return true;
66
+ return models.includes(model);
67
+ }) || []),
63
68
  ].reduce<RegisteredComponents>(
64
69
  (acc, { component, ...info }) => ({
65
70
  ...acc,
@@ -88,7 +93,11 @@
88
93
  apiVersion: apiVersion,
89
94
  componentInfos: [
90
95
  ...getDefaultRegisteredComponents(),
91
- ...(customComponents || []),
96
+ ...(customComponents?.filter(({ models }) => {
97
+ if (!models?.length) return true;
98
+ if (!model) return true;
99
+ return models.includes(model);
100
+ }) || []),
92
101
  ].reduce<Dictionary<ComponentInfo>>(
93
102
  (acc, { component: _, ...info }) => ({
94
103
  ...acc,
@@ -99,6 +108,7 @@
99
108
  inheritedStyles: {},
100
109
  BlocksWrapper: blocksWrapper || "div",
101
110
  BlocksWrapperProps: blocksWrapperProps || {},
111
+ nonce: nonce || "",
102
112
  });
103
113
 
104
114
  setContext(ComponentsContext.key, {
@@ -107,6 +117,7 @@
107
117
  </script>
108
118
 
109
119
  <EnableEditor
120
+ {nonce}
110
121
  {content}
111
122
  {data}
112
123
  {model}
@@ -123,10 +134,15 @@
123
134
  {...{}}
124
135
  >
125
136
  {#if isSsrAbTest}
126
- <InlinedScript id="builderio-variant-visibility" {scriptStr} />
137
+ <InlinedScript
138
+ id="builderio-variant-visibility"
139
+ {scriptStr}
140
+ nonce={nonce || ""}
141
+ />
127
142
  {/if}
128
143
  {#if TARGET !== "reactNative"}
129
144
  <ContentStyles
145
+ nonce={nonce || ""}
130
146
  {isNestedRender}
131
147
  contentId={$builderContextSignal.content?.id}
132
148
  cssCode={$builderContextSignal.content?.data?.cssCode}
@@ -8,7 +8,7 @@
8
8
  </script>
9
9
 
10
10
  <script lang="ts">
11
- import { afterUpdate, onMount } from "svelte";
11
+ import { onMount } from "svelte";
12
12
 
13
13
  import { TARGET } from "../../constants/target";
14
14
  import { handleABTestingSync } from "../../helpers/ab-tests";
@@ -28,6 +28,7 @@
28
28
  export let content: VariantsProviderProps["content"] = undefined;
29
29
  export let isNestedRender: VariantsProviderProps["isNestedRender"] =
30
30
  undefined;
31
+ export let nonce: VariantsProviderProps["nonce"] = undefined;
31
32
  export let model: VariantsProviderProps["model"] = undefined;
32
33
  export let data: VariantsProviderProps["data"] = undefined;
33
34
  export let context: VariantsProviderProps["context"] = undefined;
@@ -84,27 +85,32 @@
84
85
  */
85
86
  shouldRenderVariants = false;
86
87
  });
87
-
88
- afterUpdate(() => {});
89
88
  </script>
90
89
 
91
90
  {#if !isNestedRender && TARGET !== "reactNative"}
92
91
  <InlinedScript
93
92
  id="builderio-init-variants-fns"
94
93
  scriptStr={getInitVariantsFnsScriptString()}
94
+ nonce={nonce || ""}
95
95
  />
96
96
  {/if}
97
97
 
98
98
  {#if shouldRenderVariants}
99
- <InlinedStyles id="builderio-variants" styles={hideVariantsStyleString()} />
99
+ <InlinedStyles
100
+ id="builderio-variants"
101
+ styles={hideVariantsStyleString()}
102
+ nonce={nonce || ""}
103
+ />
100
104
  <InlinedScript
101
105
  id="builderio-variants-visibility"
102
106
  scriptStr={updateCookieAndStylesScriptStr()}
107
+ nonce={nonce || ""}
103
108
  />
104
109
 
105
110
  {#each getVariants(content) as variant (variant.testVariationId)}
106
111
  <ContentComponent
107
112
  {isNestedRender}
113
+ {nonce}
108
114
  content={variant}
109
115
  showContent={false}
110
116
  {model}
@@ -127,6 +133,7 @@
127
133
  {/each}
128
134
  {/if}
129
135
  <ContentComponent
136
+ {nonce}
130
137
  {isNestedRender}
131
138
  {...{}}
132
139
  content={defaultContent()}
@@ -81,4 +81,9 @@ export interface ContentVariantsPrps {
81
81
  * List of hosts to allow editing content from.
82
82
  */
83
83
  trustedHosts?: string[];
84
+
85
+ /**
86
+ * A CSP nonce to use for the SDK's inlined `<script>` and `<style>` tags.
87
+ */
88
+ nonce?: string;
84
89
  }
@@ -1,13 +1,16 @@
1
1
  <script context="module" lang="ts">
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  scriptStr: string;
4
4
  id: string;
5
5
  }
6
6
  </script>
7
7
 
8
8
  <script lang="ts">
9
+ import type { BuilderNonceProp } from "../types/builder-props";
10
+
9
11
  export let scriptStr: Props["scriptStr"];
10
12
  export let id: Props["id"];
13
+ export let nonce: Props["nonce"];
11
14
  </script>
12
15
 
13
- {@html `<script data-id=${id}>${scriptStr}</script>`}
16
+ {@html `<script data-id=${id} nonce=${nonce || ""}>${scriptStr}</script>`}
@@ -1,13 +1,16 @@
1
1
  <script context="module" lang="ts">
2
- interface Props {
2
+ interface Props extends BuilderNonceProp {
3
3
  styles: string;
4
4
  id: string;
5
5
  }
6
6
  </script>
7
7
 
8
8
  <script lang="ts">
9
+ import type { BuilderNonceProp } from "../types/builder-props";
10
+
9
11
  export let styles: Props["styles"];
10
12
  export let id: Props["id"];
13
+ export let nonce: Props["nonce"];
11
14
  </script>
12
15
 
13
- {@html `<${"style"} data-id=${id} >${styles}<${"/style"}>`}
16
+ {@html `<${"style"} data-id=${id} nonce=${nonce} >${styles}<${"/style"}>`}
@@ -1 +1 @@
1
- export const SDK_VERSION = "2.0.0"
1
+ export const SDK_VERSION = "2.0.2"