@builder.io/sdk-svelte 0.8.1 → 0.9.0

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 (81) hide show
  1. package/lib/browser/components/blocks/blocks-wrapper.svelte +8 -4
  2. package/lib/browser/components/blocks/blocks.svelte +8 -1
  3. package/lib/browser/components/content/components/enable-editor.svelte +7 -2
  4. package/lib/browser/components/content/components/enable-editor.svelte.d.ts +3 -1
  5. package/lib/browser/components/content/content.svelte +8 -0
  6. package/lib/browser/components/content/content.svelte.d.ts +4 -0
  7. package/lib/browser/components/content-variants/content-variants.svelte +12 -0
  8. package/lib/browser/components/content-variants/content-variants.svelte.d.ts +4 -0
  9. package/lib/browser/components/content-variants/content-variants.types.d.ts +16 -0
  10. package/lib/browser/constants/sdk-version.d.ts +1 -1
  11. package/lib/browser/constants/sdk-version.js +1 -1
  12. package/lib/browser/context/builder.context.d.ts +2 -0
  13. package/lib/browser/context/builder.context.js +2 -0
  14. package/lib/browser/context/types.d.ts +2 -1
  15. package/lib/browser/functions/get-block-properties.js +5 -9
  16. package/lib/browser/functions/transform-block-properties.d.ts +7 -1
  17. package/lib/browser/functions/transform-block-properties.js +1 -1
  18. package/lib/browser/types/enforced-partials.d.ts +7 -2
  19. package/lib/edge/components/blocks/blocks-wrapper.svelte +8 -4
  20. package/lib/edge/components/blocks/blocks.svelte +8 -1
  21. package/lib/edge/components/content/components/enable-editor.svelte +7 -2
  22. package/lib/edge/components/content/components/enable-editor.svelte.d.ts +3 -1
  23. package/lib/edge/components/content/content.svelte +8 -0
  24. package/lib/edge/components/content/content.svelte.d.ts +4 -0
  25. package/lib/edge/components/content-variants/content-variants.svelte +12 -0
  26. package/lib/edge/components/content-variants/content-variants.svelte.d.ts +4 -0
  27. package/lib/edge/components/content-variants/content-variants.types.d.ts +16 -0
  28. package/lib/edge/constants/sdk-version.d.ts +1 -1
  29. package/lib/edge/constants/sdk-version.js +1 -1
  30. package/lib/edge/context/builder.context.d.ts +2 -0
  31. package/lib/edge/context/builder.context.js +2 -0
  32. package/lib/edge/context/types.d.ts +2 -1
  33. package/lib/edge/functions/get-block-properties.js +5 -9
  34. package/lib/edge/functions/transform-block-properties.d.ts +7 -1
  35. package/lib/edge/functions/transform-block-properties.js +1 -1
  36. package/lib/edge/types/enforced-partials.d.ts +7 -2
  37. package/lib/node/components/blocks/blocks-wrapper.svelte +8 -4
  38. package/lib/node/components/blocks/blocks.svelte +8 -1
  39. package/lib/node/components/content/components/enable-editor.svelte +7 -2
  40. package/lib/node/components/content/components/enable-editor.svelte.d.ts +3 -1
  41. package/lib/node/components/content/content.svelte +8 -0
  42. package/lib/node/components/content/content.svelte.d.ts +4 -0
  43. package/lib/node/components/content-variants/content-variants.svelte +12 -0
  44. package/lib/node/components/content-variants/content-variants.svelte.d.ts +4 -0
  45. package/lib/node/components/content-variants/content-variants.types.d.ts +16 -0
  46. package/lib/node/constants/sdk-version.d.ts +1 -1
  47. package/lib/node/constants/sdk-version.js +1 -1
  48. package/lib/node/context/builder.context.d.ts +2 -0
  49. package/lib/node/context/builder.context.js +2 -0
  50. package/lib/node/context/types.d.ts +2 -1
  51. package/lib/node/functions/get-block-properties.js +5 -9
  52. package/lib/node/functions/transform-block-properties.d.ts +7 -1
  53. package/lib/node/functions/transform-block-properties.js +1 -1
  54. package/lib/node/types/enforced-partials.d.ts +7 -2
  55. package/package.json +1 -1
  56. package/src/components/blocks/blocks-wrapper.svelte +16 -4
  57. package/src/components/blocks/blocks.svelte +11 -2
  58. package/src/components/content/components/enable-editor.svelte +14 -3
  59. package/src/components/content/content.svelte +9 -0
  60. package/src/components/content-variants/content-variants.svelte +15 -0
  61. package/src/components/content-variants/content-variants.types.ts +16 -0
  62. package/src/constants/sdk-version.ts +1 -1
  63. package/src/context/builder.context.ts +2 -0
  64. package/src/context/types.ts +2 -1
  65. package/src/functions/get-block-properties.ts +5 -9
  66. package/src/functions/transform-block-properties.ts +9 -1
  67. package/src/types/enforced-partials.ts +8 -2
  68. package/lib/browser/functions/get-react-native-block-styles.d.ts +0 -7
  69. package/lib/browser/functions/get-react-native-block-styles.js +0 -17
  70. package/lib/browser/functions/sanitize-react-native-block-styles.d.ts +0 -3
  71. package/lib/browser/functions/sanitize-react-native-block-styles.js +0 -61
  72. package/lib/edge/functions/get-react-native-block-styles.d.ts +0 -7
  73. package/lib/edge/functions/get-react-native-block-styles.js +0 -17
  74. package/lib/edge/functions/sanitize-react-native-block-styles.d.ts +0 -3
  75. package/lib/edge/functions/sanitize-react-native-block-styles.js +0 -61
  76. package/lib/node/functions/get-react-native-block-styles.d.ts +0 -7
  77. package/lib/node/functions/get-react-native-block-styles.js +0 -17
  78. package/lib/node/functions/sanitize-react-native-block-styles.d.ts +0 -3
  79. package/lib/node/functions/sanitize-react-native-block-styles.js +0 -61
  80. package/src/functions/get-react-native-block-styles.ts +0 -27
  81. package/src/functions/sanitize-react-native-block-styles.ts +0 -58
@@ -1,6 +1,5 @@
1
1
  import { TARGET } from '../constants/target.js';
2
2
  import { convertStyleMapToCSSArray } from '../helpers/css.js';
3
- import { getReactNativeBlockStyles } from './get-react-native-block-styles.js';
4
3
  import { transformBlockProperties } from './transform-block-properties.js';
5
4
  const extractRelevantRootBlockProperties = (block) => {
6
5
  // currently we are only spreading the `href` property
@@ -42,14 +41,11 @@ export function getBlockProperties({ block, context }) {
42
41
  style: block.style ? getStyleAttribute(block.style) : undefined,
43
42
  class: [block.id, 'builder-block', block.class, block.properties?.class].filter(Boolean).join(' ')
44
43
  };
45
- if (TARGET === 'reactNative') {
46
- properties.style = getReactNativeBlockStyles({
47
- block,
48
- context,
49
- blockStyles: properties.style
50
- });
51
- }
52
- return transformBlockProperties(properties);
44
+ return transformBlockProperties({
45
+ properties,
46
+ context,
47
+ block
48
+ });
53
49
  }
54
50
  /**
55
51
  * Svelte does not support style attribute as an object so we need to flatten it.
@@ -1 +1,7 @@
1
- export declare function transformBlockProperties<T>(properties: T): T;
1
+ import type { BuilderContextInterface } from '../context/types';
2
+ import type { BuilderBlock } from '../types/builder-block';
3
+ export declare function transformBlockProperties<T>({ properties }: {
4
+ properties: T;
5
+ context: BuilderContextInterface;
6
+ block: BuilderBlock;
7
+ }): T;
@@ -1,3 +1,3 @@
1
- export function transformBlockProperties(properties) {
1
+ export function transformBlockProperties({ properties }) {
2
2
  return properties;
3
3
  }
@@ -1,9 +1,14 @@
1
1
  import type { Prettify } from './typescript.js';
2
+ /**
3
+ * Lol Typescript
4
+ * https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
5
+ */
6
+ type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
2
7
  type OptionalFieldsOnly<T> = {
3
- [K in keyof T as T[K] extends Required<T>[K] ? never : K]: T[K];
8
+ [K in keyof T as T[K] extends Required<T>[K] ? IfAny<T[K], K, never> : K]: T[K];
4
9
  };
5
10
  type RequiredFieldsOnly<T> = {
6
- [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K];
11
+ [K in keyof T as T[K] extends Required<T>[K] ? IfAny<T[K], never, K> : never]: T[K];
7
12
  };
8
13
  type Enforced<T> = {
9
14
  [K in keyof T]-?: T[K];
@@ -1,10 +1,12 @@
1
1
  <script context="module"></script>
2
2
 
3
3
  <script>import { isEditing } from "../../functions/is-editing.js";
4
+ export let BlocksWrapper;
4
5
  export let blocks;
5
6
  export let parent;
6
7
  export let path;
7
8
  export let styleProp;
9
+ export let BlocksWrapperProps;
8
10
  function mitosis_styling(node, vars) {
9
11
  Object.entries(vars || {}).forEach(([p, v]) => {
10
12
  if (p.startsWith("--")) {
@@ -42,9 +44,10 @@ $: className = () => {
42
44
  };
43
45
  </script>
44
46
 
45
- <div
47
+ <svelte:element
48
+ this={BlocksWrapper}
46
49
  use:mitosis_styling={styleProp}
47
- class={className() + " div"}
50
+ class={className() + " svelte-element"}
48
51
  builder-path={path}
49
52
  builder-parent-id={parent}
50
53
  {...{}}
@@ -57,12 +60,13 @@ $: className = () => {
57
60
  on:keypress={(event) => {
58
61
  onClick();
59
62
  }}
63
+ {...BlocksWrapperProps}
60
64
  >
61
65
  <slot />
62
- </div>
66
+ </svelte:element>
63
67
 
64
68
  <style>
65
- .div {
69
+ .svelte-element {
66
70
  display: flex;
67
71
  flex-direction: column;
68
72
  align-items: stretch;
@@ -16,7 +16,14 @@ let builderContext = getContext(BuilderContext.key);
16
16
  let componentsContext = getContext(ComponentsContext.key);
17
17
  </script>
18
18
 
19
- <BlocksWrapper {blocks} {parent} {path} {styleProp}>
19
+ <BlocksWrapper
20
+ {blocks}
21
+ {parent}
22
+ {path}
23
+ {styleProp}
24
+ BlocksWrapper={$context?.BlocksWrapper}
25
+ BlocksWrapperProps={$context?.BlocksWrapperProps}
26
+ >
20
27
  {#if blocks}
21
28
  {#each blocks as block ("render-block-" + block.id)}
22
29
  <Block
@@ -17,6 +17,7 @@ import { logger } from "../../../helpers/logger.js";
17
17
  import "../../../helpers/preview-lru-cache/set.js";
18
18
  import { registerInsertMenu, setupBrowserForEditing, } from "../../../scripts/init-editing.js";
19
19
  export let builderContextSignal;
20
+ export let contentWrapper = undefined;
20
21
  export let model = undefined;
21
22
  export let context = undefined;
22
23
  export let canTrack = undefined;
@@ -26,6 +27,7 @@ export let includeRefs = undefined;
26
27
  export let enrich = undefined;
27
28
  export let content = undefined;
28
29
  export let showContent;
30
+ export let contentWrapperProps = undefined;
29
31
  function mergeNewContent(newContent) {
30
32
  const newContentValue = {
31
33
  ...$builderContextSignal.content,
@@ -217,6 +219,7 @@ let elementRef;
217
219
  let forceReRenderCount = 0;
218
220
  let lastUpdated = 0;
219
221
  let shouldSendResetCookie = false;
222
+ let ContentWrapper = contentWrapper || "div";
220
223
  let httpReqsData = {};
221
224
  let clicked = false;
222
225
  onMount(() => {
@@ -284,7 +287,8 @@ onDestroy(() => {
284
287
  </script>
285
288
 
286
289
  {#if $builderContextSignal.content}
287
- <div
290
+ <svelte:element
291
+ this={ContentWrapper}
288
292
  {...{}}
289
293
  key={forceReRenderCount}
290
294
  bind:this={elementRef}
@@ -300,6 +304,7 @@ onDestroy(() => {
300
304
  hidden: true,
301
305
  "aria-hidden": true,
302
306
  }}
307
+ {...contentWrapperProps}
303
308
  class={`variant-${content?.testVariationId || content?.id}`}
304
309
  on:initeditingbldr={(event) => {
305
310
  elementRef_onIniteditingbldr(event);
@@ -309,5 +314,5 @@ onDestroy(() => {
309
314
  }}
310
315
  >
311
316
  <slot />
312
- </div>
317
+ </svelte:element>
313
318
  {/if}
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
- type BuilderEditorProps = Omit<ContentProps, "customComponents" | "data" | "apiVersion" | "isSsrAbTest"> & {
2
+ type BuilderEditorProps = Omit<ContentProps, "customComponents" | "data" | "apiVersion" | "isSsrAbTest" | "blocksWrapper" | "blocksWrapperProps"> & {
3
3
  builderContextSignal: Writable<BuilderContextInterface>;
4
4
  setBuilderContextSignal?: (signal: any) => any;
5
5
  children?: any;
@@ -10,6 +10,7 @@ import type { Writable } from "svelte/store";
10
10
  declare const __propDef: {
11
11
  props: {
12
12
  builderContextSignal: BuilderEditorProps["builderContextSignal"];
13
+ contentWrapper?: BuilderEditorProps["contentWrapper"];
13
14
  model?: BuilderEditorProps["model"];
14
15
  context?: BuilderEditorProps["context"];
15
16
  canTrack?: BuilderEditorProps["canTrack"];
@@ -19,6 +20,7 @@ declare const __propDef: {
19
20
  enrich?: BuilderEditorProps["enrich"];
20
21
  content?: BuilderEditorProps["content"];
21
22
  showContent: BuilderEditorProps["showContent"];
23
+ contentWrapperProps?: BuilderEditorProps["contentWrapperProps"];
22
24
  };
23
25
  events: {
24
26
  [evt: string]: CustomEvent<any>;
@@ -18,11 +18,15 @@ export let locale = undefined;
18
18
  export let context = undefined;
19
19
  export let apiKey;
20
20
  export let apiVersion = undefined;
21
+ export let blocksWrapper = undefined;
22
+ export let blocksWrapperProps = undefined;
21
23
  export let model = undefined;
22
24
  export let canTrack = undefined;
23
25
  export let includeRefs = undefined;
24
26
  export let enrich = undefined;
25
27
  export let showContent;
28
+ export let contentWrapper = undefined;
29
+ export let contentWrapperProps = undefined;
26
30
  export let isSsrAbTest;
27
31
  function contentSetState(newRootState) {
28
32
  $builderContextSignal.rootState = newRootState;
@@ -78,6 +82,8 @@ let builderContextSignal = writable({
78
82
  [info.name]: serializeComponentInfo(info),
79
83
  }), {}),
80
84
  inheritedStyles: {},
85
+ BlocksWrapper: blocksWrapper || "div",
86
+ BlocksWrapperProps: blocksWrapperProps || {},
81
87
  });
82
88
  setContext(ComponentsContext.key, {
83
89
  registeredComponents: registeredComponents,
@@ -95,6 +101,8 @@ setContext(ComponentsContext.key, {
95
101
  {enrich}
96
102
  {showContent}
97
103
  {builderContextSignal}
104
+ {contentWrapper}
105
+ {contentWrapperProps}
98
106
  {...{}}
99
107
  >
100
108
  {#if isSsrAbTest}
@@ -9,11 +9,15 @@ declare const __propDef: {
9
9
  context?: ContentProps["context"];
10
10
  apiKey: ContentProps["apiKey"];
11
11
  apiVersion?: ContentProps["apiVersion"];
12
+ blocksWrapper?: ContentProps["blocksWrapper"];
13
+ blocksWrapperProps?: ContentProps["blocksWrapperProps"];
12
14
  model?: ContentProps["model"];
13
15
  canTrack?: ContentProps["canTrack"];
14
16
  includeRefs?: ContentProps["includeRefs"];
15
17
  enrich?: ContentProps["enrich"];
16
18
  showContent: ContentProps["showContent"];
19
+ contentWrapper?: ContentProps["contentWrapper"];
20
+ contentWrapperProps?: ContentProps["contentWrapperProps"];
17
21
  isSsrAbTest: ContentProps["isSsrAbTest"];
18
22
  };
19
23
  events: {
@@ -20,6 +20,10 @@ export let customComponents = undefined;
20
20
  export let locale = undefined;
21
21
  export let includeRefs = undefined;
22
22
  export let enrich = undefined;
23
+ export let blocksWrapper = undefined;
24
+ export let blocksWrapperProps = undefined;
25
+ export let contentWrapper = undefined;
26
+ export let contentWrapperProps = undefined;
23
27
  $: updateCookieAndStylesScriptStr = () => {
24
28
  return getUpdateCookieAndStylesScript(getVariants(content).map((value) => ({
25
29
  id: value.testVariationId,
@@ -81,6 +85,10 @@ onMount(() => {
81
85
  {includeRefs}
82
86
  {enrich}
83
87
  isSsrAbTest={shouldRenderVariants}
88
+ {blocksWrapper}
89
+ {blocksWrapperProps}
90
+ {contentWrapper}
91
+ {contentWrapperProps}
84
92
  />
85
93
  {/each}
86
94
  {/if}
@@ -100,4 +108,8 @@ onMount(() => {
100
108
  {includeRefs}
101
109
  {enrich}
102
110
  isSsrAbTest={shouldRenderVariants}
111
+ {blocksWrapper}
112
+ {blocksWrapperProps}
113
+ {contentWrapper}
114
+ {contentWrapperProps}
103
115
  />
@@ -20,6 +20,10 @@ declare const __propDef: {
20
20
  locale?: VariantsProviderProps["locale"];
21
21
  includeRefs?: VariantsProviderProps["includeRefs"];
22
22
  enrich?: VariantsProviderProps["enrich"];
23
+ blocksWrapper?: VariantsProviderProps["blocksWrapper"];
24
+ blocksWrapperProps?: VariantsProviderProps["blocksWrapperProps"];
25
+ contentWrapper?: VariantsProviderProps["contentWrapper"];
26
+ contentWrapperProps?: VariantsProviderProps["contentWrapperProps"];
23
27
  };
24
28
  events: {
25
29
  [evt: string]: CustomEvent<any>;
@@ -17,4 +17,20 @@ export interface ContentVariantsPrps {
17
17
  /** @deprecated use `enrich` instead **/
18
18
  includeRefs?: boolean;
19
19
  enrich?: boolean;
20
+ /**
21
+ * The element that wraps your content. Defaults to `div` ('ScrollView' in React Native).
22
+ */
23
+ contentWrapper?: any;
24
+ /**
25
+ * Additonal props to pass to `contentWrapper`. Defaults to `{}`.
26
+ */
27
+ contentWrapperProps?: any;
28
+ /**
29
+ * The element that wraps your blocks. Defaults to `div` ('ScrollView' in React Native).
30
+ */
31
+ blocksWrapper?: any;
32
+ /**
33
+ * Additonal props to pass to `blocksWrapper`. Defaults to `{}`.
34
+ */
35
+ blocksWrapperProps?: any;
20
36
  }
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.8.1";
1
+ export declare const SDK_VERSION = "0.9.0";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.8.1";
1
+ export const SDK_VERSION = "0.9.0";
@@ -10,6 +10,8 @@ declare const _default: {
10
10
  apiVersion: undefined;
11
11
  componentInfos: {};
12
12
  inheritedStyles: {};
13
+ BlocksWrapper: string;
14
+ BlocksWrapperProps: {};
13
15
  }>;
14
16
  key: symbol;
15
17
  };
@@ -11,6 +11,8 @@ export default {
11
11
  apiVersion: undefined,
12
12
  componentInfos: {},
13
13
  inheritedStyles: {},
14
+ BlocksWrapper: "div",
15
+ BlocksWrapperProps: {},
14
16
  }),
15
17
  key,
16
18
  };
@@ -1,3 +1,4 @@
1
+ import type { BlocksWrapperProps } from '../components/blocks/blocks-wrapper.svelte';
1
2
  import type { ApiVersion } from '../types/api-version.js';
2
3
  import type { BuilderContent } from '../types/builder-content.js';
3
4
  import type { ComponentInfo } from '../types/components.js';
@@ -8,7 +9,7 @@ export type RegisteredComponent = ComponentInfo & {
8
9
  export type RegisteredComponents = Dictionary<RegisteredComponent>;
9
10
  export type BuilderRenderState = Record<string, unknown>;
10
11
  export type BuilderRenderContext = Record<string, unknown>;
11
- export interface BuilderContextInterface {
12
+ export interface BuilderContextInterface extends Pick<BlocksWrapperProps, 'BlocksWrapper' | 'BlocksWrapperProps'> {
12
13
  content: Nullable<BuilderContent>;
13
14
  context: BuilderRenderContext;
14
15
  /**
@@ -1,6 +1,5 @@
1
1
  import { TARGET } from '../constants/target.js';
2
2
  import { convertStyleMapToCSSArray } from '../helpers/css.js';
3
- import { getReactNativeBlockStyles } from './get-react-native-block-styles.js';
4
3
  import { transformBlockProperties } from './transform-block-properties.js';
5
4
  const extractRelevantRootBlockProperties = (block) => {
6
5
  // currently we are only spreading the `href` property
@@ -42,14 +41,11 @@ export function getBlockProperties({ block, context }) {
42
41
  style: block.style ? getStyleAttribute(block.style) : undefined,
43
42
  class: [block.id, 'builder-block', block.class, block.properties?.class].filter(Boolean).join(' ')
44
43
  };
45
- if (TARGET === 'reactNative') {
46
- properties.style = getReactNativeBlockStyles({
47
- block,
48
- context,
49
- blockStyles: properties.style
50
- });
51
- }
52
- return transformBlockProperties(properties);
44
+ return transformBlockProperties({
45
+ properties,
46
+ context,
47
+ block
48
+ });
53
49
  }
54
50
  /**
55
51
  * Svelte does not support style attribute as an object so we need to flatten it.
@@ -1 +1,7 @@
1
- export declare function transformBlockProperties<T>(properties: T): T;
1
+ import type { BuilderContextInterface } from '../context/types';
2
+ import type { BuilderBlock } from '../types/builder-block';
3
+ export declare function transformBlockProperties<T>({ properties }: {
4
+ properties: T;
5
+ context: BuilderContextInterface;
6
+ block: BuilderBlock;
7
+ }): T;
@@ -1,3 +1,3 @@
1
- export function transformBlockProperties(properties) {
1
+ export function transformBlockProperties({ properties }) {
2
2
  return properties;
3
3
  }
@@ -1,9 +1,14 @@
1
1
  import type { Prettify } from './typescript.js';
2
+ /**
3
+ * Lol Typescript
4
+ * https://stackoverflow.com/questions/49927523/disallow-call-with-any/49928360#49928360
5
+ */
6
+ type IfAny<T, Y, N> = 0 extends 1 & T ? Y : N;
2
7
  type OptionalFieldsOnly<T> = {
3
- [K in keyof T as T[K] extends Required<T>[K] ? never : K]: T[K];
8
+ [K in keyof T as T[K] extends Required<T>[K] ? IfAny<T[K], K, never> : K]: T[K];
4
9
  };
5
10
  type RequiredFieldsOnly<T> = {
6
- [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K];
11
+ [K in keyof T as T[K] extends Required<T>[K] ? IfAny<T[K], never, K> : never]: T[K];
7
12
  };
8
13
  type Enforced<T> = {
9
14
  [K in keyof T]-?: T[K];
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": "0.8.1",
4
+ "version": "0.9.0",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "lib",
@@ -4,6 +4,14 @@
4
4
  parent: string | undefined;
5
5
  path: string | undefined;
6
6
  styleProp: Record<string, any> | undefined;
7
+ /**
8
+ * The element that wraps each list of blocks. Defaults to a `div` element ('ScrollView' in React Native).
9
+ */
10
+ BlocksWrapper: any;
11
+ /**
12
+ * Additonal props to pass to `blocksWrapper`. Defaults to `{}`.
13
+ */
14
+ BlocksWrapperProps: any;
7
15
  };
8
16
  </script>
9
17
 
@@ -12,10 +20,12 @@
12
20
  import type { BuilderBlock } from "../../types/builder-block.js";
13
21
  import type { PropsWithChildren } from "../../types/typescript.js";
14
22
 
23
+ export let BlocksWrapper: PropsWithChildren<BlocksWrapperProps>["BlocksWrapper"];
15
24
  export let blocks: PropsWithChildren<BlocksWrapperProps>["blocks"];
16
25
  export let parent: PropsWithChildren<BlocksWrapperProps>["parent"];
17
26
  export let path: PropsWithChildren<BlocksWrapperProps>["path"];
18
27
  export let styleProp: PropsWithChildren<BlocksWrapperProps>["styleProp"];
28
+ export let BlocksWrapperProps: PropsWithChildren<BlocksWrapperProps>["BlocksWrapperProps"];
19
29
 
20
30
  function mitosis_styling(node, vars) {
21
31
  Object.entries(vars || {}).forEach(([p, v]) => {
@@ -60,9 +70,10 @@
60
70
  };
61
71
  </script>
62
72
 
63
- <div
73
+ <svelte:element
74
+ this={BlocksWrapper}
64
75
  use:mitosis_styling={styleProp}
65
- class={className() + " div"}
76
+ class={className() + " svelte-element"}
66
77
  builder-path={path}
67
78
  builder-parent-id={parent}
68
79
  {...{}}
@@ -75,12 +86,13 @@
75
86
  on:keypress={(event) => {
76
87
  onClick();
77
88
  }}
89
+ {...BlocksWrapperProps}
78
90
  >
79
91
  <slot />
80
- </div>
92
+ </svelte:element>
81
93
 
82
94
  <style>
83
- .div {
95
+ .svelte-element {
84
96
  display: flex;
85
97
  flex-direction: column;
86
98
  align-items: stretch;
@@ -1,5 +1,7 @@
1
1
  <script context="module" lang="ts">
2
- export type BlocksProps = Partial<BlocksWrapperProps> & {
2
+ export type BlocksProps = Partial<
3
+ Omit<BlocksWrapperProps, "BlocksWrapper" | "BlocksWrapperProps">
4
+ > & {
3
5
  context?: Writable<BuilderContextInterface>;
4
6
  registeredComponents?: RegisteredComponents;
5
7
  };
@@ -32,7 +34,14 @@
32
34
  let componentsContext = getContext(ComponentsContext.key);
33
35
  </script>
34
36
 
35
- <BlocksWrapper {blocks} {parent} {path} {styleProp}>
37
+ <BlocksWrapper
38
+ {blocks}
39
+ {parent}
40
+ {path}
41
+ {styleProp}
42
+ BlocksWrapper={$context?.BlocksWrapper}
43
+ BlocksWrapperProps={$context?.BlocksWrapperProps}
44
+ >
36
45
  {#if blocks}
37
46
  {#each blocks as block ("render-block-" + block.id)}
38
47
  <Block
@@ -1,7 +1,12 @@
1
1
  <script context="module" lang="ts">
2
2
  type BuilderEditorProps = Omit<
3
3
  ContentProps,
4
- "customComponents" | "data" | "apiVersion" | "isSsrAbTest"
4
+ | "customComponents"
5
+ | "data"
6
+ | "apiVersion"
7
+ | "isSsrAbTest"
8
+ | "blocksWrapper"
9
+ | "blocksWrapperProps"
5
10
  > & {
6
11
  builderContextSignal: Writable<BuilderContextInterface>;
7
12
  setBuilderContextSignal?: (signal: any) => any;
@@ -40,6 +45,7 @@
40
45
  import type { Writable } from "svelte/store";
41
46
 
42
47
  export let builderContextSignal: BuilderEditorProps["builderContextSignal"];
48
+ export let contentWrapper: BuilderEditorProps["contentWrapper"] = undefined;
43
49
  export let model: BuilderEditorProps["model"] = undefined;
44
50
  export let context: BuilderEditorProps["context"] = undefined;
45
51
  export let canTrack: BuilderEditorProps["canTrack"] = undefined;
@@ -49,6 +55,8 @@
49
55
  export let enrich: BuilderEditorProps["enrich"] = undefined;
50
56
  export let content: BuilderEditorProps["content"] = undefined;
51
57
  export let showContent: BuilderEditorProps["showContent"];
58
+ export let contentWrapperProps: BuilderEditorProps["contentWrapperProps"] =
59
+ undefined;
52
60
 
53
61
  function mergeNewContent(newContent: BuilderContent) {
54
62
  const newContentValue = {
@@ -265,6 +273,7 @@
265
273
  let forceReRenderCount = 0;
266
274
  let lastUpdated = 0;
267
275
  let shouldSendResetCookie = false;
276
+ let ContentWrapper = contentWrapper || "div";
268
277
  let httpReqsData = {};
269
278
  let clicked = false;
270
279
 
@@ -345,7 +354,8 @@
345
354
  </script>
346
355
 
347
356
  {#if $builderContextSignal.content}
348
- <div
357
+ <svelte:element
358
+ this={ContentWrapper}
349
359
  {...{}}
350
360
  key={forceReRenderCount}
351
361
  bind:this={elementRef}
@@ -361,6 +371,7 @@
361
371
  hidden: true,
362
372
  "aria-hidden": true,
363
373
  }}
374
+ {...contentWrapperProps}
364
375
  class={`variant-${content?.testVariationId || content?.id}`}
365
376
  on:initeditingbldr={(event) => {
366
377
  elementRef_onIniteditingbldr(event);
@@ -370,5 +381,5 @@
370
381
  }}
371
382
  >
372
383
  <slot />
373
- </div>
384
+ </svelte:element>
374
385
  {/if}
@@ -35,11 +35,16 @@
35
35
  export let context: ContentProps["context"] = undefined;
36
36
  export let apiKey: ContentProps["apiKey"];
37
37
  export let apiVersion: ContentProps["apiVersion"] = undefined;
38
+ export let blocksWrapper: ContentProps["blocksWrapper"] = undefined;
39
+ export let blocksWrapperProps: ContentProps["blocksWrapperProps"] = undefined;
38
40
  export let model: ContentProps["model"] = undefined;
39
41
  export let canTrack: ContentProps["canTrack"] = undefined;
40
42
  export let includeRefs: ContentProps["includeRefs"] = undefined;
41
43
  export let enrich: ContentProps["enrich"] = undefined;
42
44
  export let showContent: ContentProps["showContent"];
45
+ export let contentWrapper: ContentProps["contentWrapper"] = undefined;
46
+ export let contentWrapperProps: ContentProps["contentWrapperProps"] =
47
+ undefined;
43
48
  export let isSsrAbTest: ContentProps["isSsrAbTest"];
44
49
 
45
50
  function contentSetState(newRootState: BuilderRenderState) {
@@ -103,6 +108,8 @@
103
108
  {}
104
109
  ),
105
110
  inheritedStyles: {},
111
+ BlocksWrapper: blocksWrapper || "div",
112
+ BlocksWrapperProps: blocksWrapperProps || {},
106
113
  });
107
114
 
108
115
  setContext(ComponentsContext.key, {
@@ -121,6 +128,8 @@
121
128
  {enrich}
122
129
  {showContent}
123
130
  {builderContextSignal}
131
+ {contentWrapper}
132
+ {contentWrapperProps}
124
133
  {...{}}
125
134
  >
126
135
  {#if isSsrAbTest}
@@ -38,6 +38,13 @@
38
38
  export let locale: VariantsProviderProps["locale"] = undefined;
39
39
  export let includeRefs: VariantsProviderProps["includeRefs"] = undefined;
40
40
  export let enrich: VariantsProviderProps["enrich"] = undefined;
41
+ export let blocksWrapper: VariantsProviderProps["blocksWrapper"] = undefined;
42
+ export let blocksWrapperProps: VariantsProviderProps["blocksWrapperProps"] =
43
+ undefined;
44
+ export let contentWrapper: VariantsProviderProps["contentWrapper"] =
45
+ undefined;
46
+ export let contentWrapperProps: VariantsProviderProps["contentWrapperProps"] =
47
+ undefined;
41
48
 
42
49
  $: updateCookieAndStylesScriptStr = () => {
43
50
  return getUpdateCookieAndStylesScript(
@@ -105,6 +112,10 @@
105
112
  {includeRefs}
106
113
  {enrich}
107
114
  isSsrAbTest={shouldRenderVariants}
115
+ {blocksWrapper}
116
+ {blocksWrapperProps}
117
+ {contentWrapper}
118
+ {contentWrapperProps}
108
119
  />
109
120
  {/each}
110
121
  {/if}
@@ -124,4 +135,8 @@
124
135
  {includeRefs}
125
136
  {enrich}
126
137
  isSsrAbTest={shouldRenderVariants}
138
+ {blocksWrapper}
139
+ {blocksWrapperProps}
140
+ {contentWrapper}
141
+ {contentWrapperProps}
127
142
  />
@@ -17,4 +17,20 @@ export interface ContentVariantsPrps {
17
17
  /** @deprecated use `enrich` instead **/
18
18
  includeRefs?: boolean;
19
19
  enrich?: boolean;
20
+ /**
21
+ * The element that wraps your content. Defaults to `div` ('ScrollView' in React Native).
22
+ */
23
+ contentWrapper?: any;
24
+ /**
25
+ * Additonal props to pass to `contentWrapper`. Defaults to `{}`.
26
+ */
27
+ contentWrapperProps?: any;
28
+ /**
29
+ * The element that wraps your blocks. Defaults to `div` ('ScrollView' in React Native).
30
+ */
31
+ blocksWrapper?: any;
32
+ /**
33
+ * Additonal props to pass to `blocksWrapper`. Defaults to `{}`.
34
+ */
35
+ blocksWrapperProps?: any;
20
36
  }
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.8.1"
1
+ export const SDK_VERSION = "0.9.0"