@builder.io/sdk-svelte 0.12.3 → 0.12.5

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 (158) hide show
  1. package/lib/browser/blocks/button/button.svelte +27 -35
  2. package/lib/browser/blocks/button/button.svelte.d.ts +3 -2
  3. package/lib/browser/blocks/button/button.types.d.ts +2 -1
  4. package/lib/browser/blocks/columns/columns.svelte +25 -10
  5. package/lib/browser/blocks/columns/columns.svelte.d.ts +1 -0
  6. package/lib/browser/blocks/columns/columns.types.d.ts +3 -3
  7. package/lib/browser/blocks/symbol/symbol.svelte +4 -1
  8. package/lib/browser/blocks/symbol/symbol.svelte.d.ts +1 -0
  9. package/lib/browser/blocks/symbol/symbol.types.d.ts +2 -2
  10. package/lib/browser/components/block/block.svelte +26 -2
  11. package/lib/browser/components/block/components/block-wrapper.svelte.d.ts +1 -0
  12. package/lib/browser/components/block/components/component-ref/component-ref.helpers.d.ts +2 -2
  13. package/lib/browser/components/block/components/component-ref/component-ref.svelte +3 -1
  14. package/lib/browser/components/block/components/component-ref/component-ref.svelte.d.ts +1 -0
  15. package/lib/browser/components/block/components/repeated-block.svelte +2 -1
  16. package/lib/browser/components/block/components/repeated-block.svelte.d.ts +4 -5
  17. package/lib/browser/components/blocks/blocks.svelte +2 -0
  18. package/lib/browser/components/blocks/blocks.svelte.d.ts +1 -0
  19. package/lib/browser/components/blocks/blocks.types.d.ts +1 -0
  20. package/lib/browser/components/content/content.svelte +3 -0
  21. package/lib/browser/components/content/content.svelte.d.ts +1 -0
  22. package/lib/browser/components/content-variants/content-variants.svelte +3 -0
  23. package/lib/browser/components/content-variants/content-variants.svelte.d.ts +1 -0
  24. package/lib/browser/components/content-variants/content-variants.types.d.ts +6 -2
  25. package/lib/browser/constants/sdk-version.d.ts +1 -1
  26. package/lib/browser/constants/sdk-version.js +1 -1
  27. package/lib/browser/functions/evaluate/choose-eval.js +2 -1
  28. package/lib/browser/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  29. package/lib/browser/functions/evaluate/should-force-browser-runtime-in-node.js +21 -0
  30. package/lib/browser/functions/get-block-properties.d.ts +1 -2
  31. package/lib/browser/functions/get-block-properties.js +7 -22
  32. package/lib/browser/functions/get-class-prop-name.d.ts +1 -0
  33. package/lib/browser/functions/get-class-prop-name.js +14 -0
  34. package/lib/browser/functions/get-style.d.ts +12 -0
  35. package/lib/browser/functions/get-style.js +28 -0
  36. package/lib/browser/functions/is-node-runtime.js +1 -1
  37. package/lib/browser/functions/transform-block-properties.d.ts +2 -2
  38. package/lib/browser/functions/transform-style-property.d.ts +7 -0
  39. package/lib/browser/functions/transform-style-property.js +3 -0
  40. package/lib/browser/helpers/omit.d.ts +1 -0
  41. package/lib/browser/helpers/omit.js +7 -0
  42. package/lib/browser/types/builder-block.d.ts +1 -0
  43. package/lib/browser/types/builder-props.d.ts +3 -0
  44. package/lib/edge/blocks/button/button.svelte +27 -35
  45. package/lib/edge/blocks/button/button.svelte.d.ts +3 -2
  46. package/lib/edge/blocks/button/button.types.d.ts +2 -1
  47. package/lib/edge/blocks/columns/columns.svelte +25 -10
  48. package/lib/edge/blocks/columns/columns.svelte.d.ts +1 -0
  49. package/lib/edge/blocks/columns/columns.types.d.ts +3 -3
  50. package/lib/edge/blocks/symbol/symbol.svelte +4 -1
  51. package/lib/edge/blocks/symbol/symbol.svelte.d.ts +1 -0
  52. package/lib/edge/blocks/symbol/symbol.types.d.ts +2 -2
  53. package/lib/edge/components/block/block.svelte +26 -2
  54. package/lib/edge/components/block/components/block-wrapper.svelte.d.ts +1 -0
  55. package/lib/edge/components/block/components/component-ref/component-ref.helpers.d.ts +2 -2
  56. package/lib/edge/components/block/components/component-ref/component-ref.svelte +3 -1
  57. package/lib/edge/components/block/components/component-ref/component-ref.svelte.d.ts +1 -0
  58. package/lib/edge/components/block/components/repeated-block.svelte +2 -1
  59. package/lib/edge/components/block/components/repeated-block.svelte.d.ts +4 -5
  60. package/lib/edge/components/blocks/blocks.svelte +2 -0
  61. package/lib/edge/components/blocks/blocks.svelte.d.ts +1 -0
  62. package/lib/edge/components/blocks/blocks.types.d.ts +1 -0
  63. package/lib/edge/components/content/content.svelte +3 -0
  64. package/lib/edge/components/content/content.svelte.d.ts +1 -0
  65. package/lib/edge/components/content-variants/content-variants.svelte +3 -0
  66. package/lib/edge/components/content-variants/content-variants.svelte.d.ts +1 -0
  67. package/lib/edge/components/content-variants/content-variants.types.d.ts +6 -2
  68. package/lib/edge/constants/sdk-version.d.ts +1 -1
  69. package/lib/edge/constants/sdk-version.js +1 -1
  70. package/lib/edge/functions/evaluate/choose-eval.js +2 -1
  71. package/lib/edge/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  72. package/lib/edge/functions/evaluate/should-force-browser-runtime-in-node.js +21 -0
  73. package/lib/edge/functions/get-block-properties.d.ts +1 -2
  74. package/lib/edge/functions/get-block-properties.js +7 -22
  75. package/lib/edge/functions/get-class-prop-name.d.ts +1 -0
  76. package/lib/edge/functions/get-class-prop-name.js +14 -0
  77. package/lib/edge/functions/get-style.d.ts +12 -0
  78. package/lib/edge/functions/get-style.js +28 -0
  79. package/lib/edge/functions/is-node-runtime.js +1 -1
  80. package/lib/edge/functions/transform-block-properties.d.ts +2 -2
  81. package/lib/edge/functions/transform-style-property.d.ts +7 -0
  82. package/lib/edge/functions/transform-style-property.js +3 -0
  83. package/lib/edge/helpers/omit.d.ts +1 -0
  84. package/lib/edge/helpers/omit.js +7 -0
  85. package/lib/edge/types/builder-block.d.ts +1 -0
  86. package/lib/edge/types/builder-props.d.ts +3 -0
  87. package/lib/node/blocks/button/button.svelte +27 -35
  88. package/lib/node/blocks/button/button.svelte.d.ts +3 -2
  89. package/lib/node/blocks/button/button.types.d.ts +2 -1
  90. package/lib/node/blocks/columns/columns.svelte +25 -10
  91. package/lib/node/blocks/columns/columns.svelte.d.ts +1 -0
  92. package/lib/node/blocks/columns/columns.types.d.ts +3 -3
  93. package/lib/node/blocks/symbol/symbol.svelte +4 -1
  94. package/lib/node/blocks/symbol/symbol.svelte.d.ts +1 -0
  95. package/lib/node/blocks/symbol/symbol.types.d.ts +2 -2
  96. package/lib/node/components/block/block.svelte +26 -2
  97. package/lib/node/components/block/components/block-wrapper.svelte.d.ts +1 -0
  98. package/lib/node/components/block/components/component-ref/component-ref.helpers.d.ts +2 -2
  99. package/lib/node/components/block/components/component-ref/component-ref.svelte +3 -1
  100. package/lib/node/components/block/components/component-ref/component-ref.svelte.d.ts +1 -0
  101. package/lib/node/components/block/components/repeated-block.svelte +2 -1
  102. package/lib/node/components/block/components/repeated-block.svelte.d.ts +4 -5
  103. package/lib/node/components/blocks/blocks.svelte +2 -0
  104. package/lib/node/components/blocks/blocks.svelte.d.ts +1 -0
  105. package/lib/node/components/blocks/blocks.types.d.ts +1 -0
  106. package/lib/node/components/content/content.svelte +3 -0
  107. package/lib/node/components/content/content.svelte.d.ts +1 -0
  108. package/lib/node/components/content-variants/content-variants.svelte +3 -0
  109. package/lib/node/components/content-variants/content-variants.svelte.d.ts +1 -0
  110. package/lib/node/components/content-variants/content-variants.types.d.ts +6 -2
  111. package/lib/node/constants/sdk-version.d.ts +1 -1
  112. package/lib/node/constants/sdk-version.js +1 -1
  113. package/lib/node/functions/evaluate/choose-eval.js +2 -1
  114. package/lib/node/functions/evaluate/should-force-browser-runtime-in-node.d.ts +1 -0
  115. package/lib/node/functions/evaluate/should-force-browser-runtime-in-node.js +21 -0
  116. package/lib/node/functions/get-block-properties.d.ts +1 -2
  117. package/lib/node/functions/get-block-properties.js +7 -22
  118. package/lib/node/functions/get-class-prop-name.d.ts +1 -0
  119. package/lib/node/functions/get-class-prop-name.js +14 -0
  120. package/lib/node/functions/get-style.d.ts +12 -0
  121. package/lib/node/functions/get-style.js +28 -0
  122. package/lib/node/functions/is-node-runtime.js +1 -1
  123. package/lib/node/functions/transform-block-properties.d.ts +2 -2
  124. package/lib/node/functions/transform-style-property.d.ts +7 -0
  125. package/lib/node/functions/transform-style-property.js +3 -0
  126. package/lib/node/helpers/omit.d.ts +1 -0
  127. package/lib/node/helpers/omit.js +7 -0
  128. package/lib/node/types/builder-block.d.ts +1 -0
  129. package/lib/node/types/builder-props.d.ts +3 -0
  130. package/package.json +1 -1
  131. package/src/blocks/button/button.svelte +27 -34
  132. package/src/blocks/button/button.types.ts +2 -1
  133. package/src/blocks/columns/columns.svelte +26 -10
  134. package/src/blocks/columns/columns.types.ts +3 -3
  135. package/src/blocks/symbol/symbol.svelte +5 -1
  136. package/src/blocks/symbol/symbol.types.ts +2 -2
  137. package/src/components/block/block.svelte +28 -2
  138. package/src/components/block/components/block-wrapper.svelte +1 -0
  139. package/src/components/block/components/component-ref/component-ref.helpers.ts +1 -0
  140. package/src/components/block/components/component-ref/component-ref.svelte +3 -1
  141. package/src/components/block/components/repeated-block.svelte +5 -9
  142. package/src/components/blocks/blocks.svelte +2 -0
  143. package/src/components/blocks/blocks.types.ts +1 -0
  144. package/src/components/content/content.svelte +3 -0
  145. package/src/components/content-variants/content-variants.svelte +3 -0
  146. package/src/components/content-variants/content-variants.types.ts +6 -2
  147. package/src/constants/sdk-version.ts +1 -1
  148. package/src/functions/evaluate/choose-eval.ts +2 -1
  149. package/src/functions/evaluate/should-force-browser-runtime-in-node.ts +22 -0
  150. package/src/functions/get-block-properties.ts +7 -22
  151. package/src/functions/get-class-prop-name.ts +14 -0
  152. package/src/functions/get-style.ts +37 -0
  153. package/src/functions/is-node-runtime.ts +1 -1
  154. package/src/functions/transform-block-properties.ts +2 -2
  155. package/src/functions/transform-style-property.ts +11 -0
  156. package/src/helpers/omit.ts +7 -0
  157. package/src/types/builder-block.ts +1 -0
  158. package/src/types/builder-props.ts +3 -0
@@ -3,8 +3,8 @@
3
3
  <script>import { writable } from "svelte/store";
4
4
  import "../../functions/extract-text-styles.js";
5
5
  import { getBlockComponentOptions } from "../../functions/get-block-component-options.js";
6
- import "../../functions/get-block-properties.js";
7
6
  import { getProcessedBlock } from "../../functions/get-processed-block.js";
7
+ import "../../functions/get-style.js";
8
8
  import { getComponent, getRepeatItemData } from "./block.helpers.js";
9
9
  import BlockStyles from "./components/block-styles.svelte";
10
10
  import BlockWrapper from "./components/block-wrapper.svelte";
@@ -13,6 +13,7 @@ import RepeatedBlock from "./components/repeated-block.svelte";
13
13
  export let block;
14
14
  export let context;
15
15
  export let registeredComponents;
16
+ export let linkComponent;
16
17
  $: blockComponent = () => {
17
18
  return getComponent({
18
19
  block: block,
@@ -39,6 +40,12 @@ $: processedBlock = () => {
39
40
  });
40
41
  };
41
42
  $: Tag = () => {
43
+ const shouldUseLink = block.tagName === "a" ||
44
+ processedBlock().properties?.href ||
45
+ processedBlock().href;
46
+ if (shouldUseLink) {
47
+ return linkComponent || "a";
48
+ }
42
49
  return block.tagName || "div";
43
50
  };
44
51
  $: canShowBlock = () => {
@@ -70,6 +77,13 @@ $: componentRefProps = () => {
70
77
  componentOptions: {
71
78
  ...getBlockComponentOptions(processedBlock()),
72
79
  builderContext: context,
80
+ ...(blockComponent?.()?.name === "Core:Button" ||
81
+ blockComponent?.()?.name === "Symbol" ||
82
+ blockComponent?.()?.name === "Columns"
83
+ ? {
84
+ builderLinkComponent: linkComponent,
85
+ }
86
+ : {}),
73
87
  ...(blockComponent?.()?.name === "Symbol" ||
74
88
  blockComponent?.()?.name === "Columns"
75
89
  ? {
@@ -78,6 +92,7 @@ $: componentRefProps = () => {
78
92
  : {}),
79
93
  },
80
94
  context: childrenContext,
95
+ linkComponent: linkComponent,
81
96
  registeredComponents: registeredComponents,
82
97
  builderBlock: processedBlock(),
83
98
  includeBlockProps: blockComponent?.()?.noWrap === true,
@@ -92,13 +107,19 @@ let childrenContext = writable($context);
92
107
 
93
108
  {#if !blockComponent?.()?.noWrap}
94
109
  {#if !repeatItem()}
95
- <BlockWrapper Wrapper={Tag()} block={processedBlock()} {context}>
110
+ <BlockWrapper
111
+ Wrapper={Tag()}
112
+ block={processedBlock()}
113
+ {context}
114
+ {linkComponent}
115
+ >
96
116
  <ComponentRef
97
117
  componentRef={componentRefProps().componentRef}
98
118
  componentOptions={componentRefProps().componentOptions}
99
119
  blockChildren={componentRefProps().blockChildren}
100
120
  context={componentRefProps().context}
101
121
  registeredComponents={componentRefProps().registeredComponents}
122
+ linkComponent={componentRefProps().linkComponent}
102
123
  builderBlock={componentRefProps().builderBlock}
103
124
  includeBlockProps={componentRefProps().includeBlockProps}
104
125
  isInteractive={componentRefProps().isInteractive}
@@ -109,6 +130,7 @@ let childrenContext = writable($context);
109
130
  block={child}
110
131
  context={childrenContext}
111
132
  {registeredComponents}
133
+ {linkComponent}
112
134
  />
113
135
  {/each}
114
136
  </BlockWrapper>
@@ -118,6 +140,7 @@ let childrenContext = writable($context);
118
140
  repeatContext={data.context}
119
141
  block={data.block}
120
142
  {registeredComponents}
143
+ {linkComponent}
121
144
  />
122
145
  {/each}
123
146
  {/if}
@@ -128,6 +151,7 @@ let childrenContext = writable($context);
128
151
  blockChildren={componentRefProps().blockChildren}
129
152
  context={componentRefProps().context}
130
153
  registeredComponents={componentRefProps().registeredComponents}
154
+ linkComponent={componentRefProps().linkComponent}
131
155
  builderBlock={componentRefProps().builderBlock}
132
156
  includeBlockProps={componentRefProps().includeBlockProps}
133
157
  isInteractive={componentRefProps().isInteractive}
@@ -3,6 +3,7 @@ type BlockWrapperProps = {
3
3
  Wrapper: string;
4
4
  block: BuilderBlock;
5
5
  context: Writable<BuilderContextInterface>;
6
+ linkComponent: any;
6
7
  };
7
8
  import type { BuilderContextInterface } from "../../../context/types.js";
8
9
  import type { BuilderBlock } from "../../../types/builder-block.js";
@@ -16,6 +16,7 @@ export interface ComponentProps {
16
16
  blockChildren: BuilderBlock[];
17
17
  context: Writable<BuilderContextInterface>;
18
18
  registeredComponents: RegisteredComponents;
19
+ linkComponent: any;
19
20
  builderBlock: BuilderBlock;
20
21
  includeBlockProps: boolean;
21
22
  isInteractive: boolean | undefined;
@@ -25,8 +26,7 @@ export declare const getWrapperProps: ({ componentOptions, builderBlock, context
25
26
  }) => InteractiveElementProps | {
26
27
  attributes?: {
27
28
  'builder-id': string | undefined;
28
- style: string | Partial<CSSStyleDeclaration> | undefined;
29
- class: string;
29
+ style: string | Partial<CSSStyleDeclaration>;
30
30
  href: any;
31
31
  } | {
32
32
  [index: string]: any;
@@ -7,6 +7,7 @@ export let componentRef;
7
7
  export let componentOptions;
8
8
  export let builderBlock;
9
9
  export let context;
10
+ export let linkComponent;
10
11
  export let includeBlockProps;
11
12
  export let blockChildren;
12
13
  export let registeredComponents;
@@ -21,13 +22,14 @@ let Wrapper = isInteractive ? InteractiveElement : componentRef;
21
22
  builderBlock: builderBlock,
22
23
  context: context,
23
24
  componentRef: componentRef,
25
+ linkComponent: linkComponent,
24
26
  includeBlockProps: includeBlockProps,
25
27
  isInteractive: isInteractive,
26
28
  contextValue: $context,
27
29
  })}
28
30
  >
29
31
  {#each blockChildren as child (child.id)}
30
- <Block block={child} {context} {registeredComponents} />
32
+ <Block block={child} {context} {registeredComponents} {linkComponent} />
31
33
  {/each}
32
34
  </svelte:component>
33
35
  {/if}
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  componentOptions: ComponentProps["componentOptions"];
8
8
  builderBlock: ComponentProps["builderBlock"];
9
9
  context: ComponentProps["context"];
10
+ linkComponent: ComponentProps["linkComponent"];
10
11
  includeBlockProps: ComponentProps["includeBlockProps"];
11
12
  blockChildren: ComponentProps["blockChildren"];
12
13
  registeredComponents: ComponentProps["registeredComponents"];
@@ -7,8 +7,9 @@ import Block from "../block.svelte";
7
7
  export let repeatContext;
8
8
  export let block;
9
9
  export let registeredComponents;
10
+ export let linkComponent;
10
11
  let store = writable(repeatContext);
11
12
  setContext(BuilderContext.key, store);
12
13
  </script>
13
14
 
14
- <Block {block} context={store} {registeredComponents} />
15
+ <Block {block} context={store} {registeredComponents} {linkComponent} />
@@ -1,16 +1,15 @@
1
1
  import { SvelteComponent } from "svelte";
2
- type Props = {
3
- block: BuilderBlock;
2
+ type Props = Omit<BlockProps, "context"> & {
4
3
  repeatContext: BuilderContextInterface;
5
- registeredComponents: RegisteredComponents;
6
4
  };
7
- import type { BuilderContextInterface, RegisteredComponents } from "../../../context/types.js";
8
- import type { BuilderBlock } from "../../../types/builder-block.js";
5
+ import type { BuilderContextInterface } from "../../../context/types.js";
6
+ import type { BlockProps } from "../block.svelte";
9
7
  declare const __propDef: {
10
8
  props: {
11
9
  repeatContext: Props["repeatContext"];
12
10
  block: Props["block"];
13
11
  registeredComponents: Props["registeredComponents"];
12
+ linkComponent: Props["linkComponent"];
14
13
  };
15
14
  events: {
16
15
  [evt: string]: CustomEvent<any>;
@@ -8,6 +8,7 @@ export let parent;
8
8
  export let path;
9
9
  export let styleProp;
10
10
  export let context = undefined;
11
+ export let linkComponent = undefined;
11
12
  export let registeredComponents = undefined;
12
13
  let builderContext = getContext(BuilderContext.key);
13
14
  let componentsContext = getContext(ComponentsContext.key);
@@ -25,6 +26,7 @@ let componentsContext = getContext(ComponentsContext.key);
25
26
  {#each blocks as block (block.id)}
26
27
  <Block
27
28
  {block}
29
+ {linkComponent}
28
30
  context={context || builderContext}
29
31
  registeredComponents={registeredComponents ||
30
32
  componentsContext.registeredComponents}
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  path: BlocksProps["path"];
8
8
  styleProp: BlocksProps["styleProp"];
9
9
  context?: BlocksProps["context"];
10
+ linkComponent?: BlocksProps["linkComponent"];
10
11
  registeredComponents?: BlocksProps["registeredComponents"];
11
12
  };
12
13
  events: {
@@ -5,4 +5,5 @@ import type { BlocksWrapperProps } from './blocks-wrapper.svelte';
5
5
  export type BlocksProps = Partial<Omit<BlocksWrapperProps, 'BlocksWrapper' | 'BlocksWrapperProps'>> & {
6
6
  context?: Writable<BuilderContextInterface>;
7
7
  registeredComponents?: RegisteredComponents;
8
+ linkComponent?: any;
8
9
  };
@@ -27,6 +27,7 @@ export let enrich = undefined;
27
27
  export let showContent;
28
28
  export let contentWrapper = undefined;
29
29
  export let contentWrapperProps = undefined;
30
+ export let linkComponent = undefined;
30
31
  export let trustedHosts = undefined;
31
32
  export let isSsrAbTest;
32
33
  function contentSetState(newRootState) {
@@ -105,6 +106,7 @@ setContext(ComponentsContext.key, {
105
106
  {builderContextSignal}
106
107
  {contentWrapper}
107
108
  {contentWrapperProps}
109
+ {linkComponent}
108
110
  {trustedHosts}
109
111
  {...{}}
110
112
  >
@@ -123,5 +125,6 @@ setContext(ComponentsContext.key, {
123
125
  blocks={$builderContextSignal.content?.data?.blocks}
124
126
  context={builderContextSignal}
125
127
  {registeredComponents}
128
+ {linkComponent}
126
129
  />
127
130
  </EnableEditor>
@@ -18,6 +18,7 @@ declare const __propDef: {
18
18
  showContent: ContentProps["showContent"];
19
19
  contentWrapper?: ContentProps["contentWrapper"];
20
20
  contentWrapperProps?: ContentProps["contentWrapperProps"];
21
+ linkComponent?: ContentProps["linkComponent"];
21
22
  trustedHosts?: ContentProps["trustedHosts"];
22
23
  isSsrAbTest: ContentProps["isSsrAbTest"];
23
24
  };
@@ -17,6 +17,7 @@ export let context = undefined;
17
17
  export let apiKey;
18
18
  export let apiVersion = undefined;
19
19
  export let customComponents = undefined;
20
+ export let linkComponent = undefined;
20
21
  export let locale = undefined;
21
22
  export let includeRefs = undefined;
22
23
  export let enrich = undefined;
@@ -81,6 +82,7 @@ onMount(() => {
81
82
  {apiKey}
82
83
  {apiVersion}
83
84
  {customComponents}
85
+ {linkComponent}
84
86
  {canTrack}
85
87
  {locale}
86
88
  {includeRefs}
@@ -105,6 +107,7 @@ onMount(() => {
105
107
  {apiKey}
106
108
  {apiVersion}
107
109
  {customComponents}
110
+ {linkComponent}
108
111
  {canTrack}
109
112
  {locale}
110
113
  {includeRefs}
@@ -17,6 +17,7 @@ declare const __propDef: {
17
17
  apiKey: VariantsProviderProps["apiKey"];
18
18
  apiVersion?: VariantsProviderProps["apiVersion"];
19
19
  customComponents?: VariantsProviderProps["customComponents"];
20
+ linkComponent?: VariantsProviderProps["linkComponent"];
20
21
  locale?: VariantsProviderProps["locale"];
21
22
  includeRefs?: VariantsProviderProps["includeRefs"];
22
23
  enrich?: VariantsProviderProps["enrich"];
@@ -30,6 +30,10 @@ export interface ContentVariantsPrps {
30
30
  * An array of custom components to register (optional).
31
31
  */
32
32
  customComponents?: RegisteredComponent[];
33
+ /**
34
+ * The component to use for rendering links. Defaults to anchor element `<a>`.
35
+ */
36
+ linkComponent?: any;
33
37
  /**
34
38
  * A boolean to enable or disable tracking (optional). Defaults to `true`.
35
39
  */
@@ -47,7 +51,7 @@ export interface ContentVariantsPrps {
47
51
  */
48
52
  enrich?: boolean;
49
53
  /**
50
- * The element that wraps your content. Defaults to `div` ('ScrollView' in React Native).
54
+ * The element that wraps your content. Defaults to `<div>` ('ScrollView' in React Native).
51
55
  */
52
56
  contentWrapper?: any;
53
57
  /**
@@ -55,7 +59,7 @@ export interface ContentVariantsPrps {
55
59
  */
56
60
  contentWrapperProps?: any;
57
61
  /**
58
- * The element that wraps your blocks. Defaults to `div` ('ScrollView' in React Native).
62
+ * The element that wraps your blocks. Defaults to `<div>` ('ScrollView' in React Native).
59
63
  */
60
64
  blocksWrapper?: any;
61
65
  /**
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.12.3";
1
+ export declare const SDK_VERSION = "0.12.5";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.3";
1
+ export const SDK_VERSION = "0.12.5";
@@ -12,8 +12,9 @@ import { runInBrowser } from './browser-runtime/browser.js';
12
12
  * types can be resolved correctly.
13
13
  */
14
14
  import { evaluator } from '../../../node/functions/evaluate/node-runtime/index.js';
15
+ import { shouldForceBrowserRuntimeInNode } from './should-force-browser-runtime-in-node.js';
15
16
  /**
16
17
  * Even though we have separate runtimes for browser/node/edge, sometimes frameworks will
17
18
  * end up sending the server runtime code to the browser (most notably in dev mode).
18
19
  */
19
- export const chooseBrowserOrServerEval = (args) => isBrowser() ? runInBrowser(args) : evaluator(args);
20
+ export const chooseBrowserOrServerEval = (args) => isBrowser() || shouldForceBrowserRuntimeInNode() ? runInBrowser(args) : evaluator(args);
@@ -0,0 +1 @@
1
+ export declare const shouldForceBrowserRuntimeInNode: () => boolean;
@@ -0,0 +1,21 @@
1
+ import { logger } from '../../helpers/logger.js';
2
+ import { isNodeRuntime } from '../is-node-runtime.js';
3
+ export const shouldForceBrowserRuntimeInNode = () => {
4
+ if (!isNodeRuntime())
5
+ return false;
6
+ const isArm64 = process.arch === 'arm64';
7
+ const isNode20 = process.version.startsWith('v20');
8
+ // if the user passed this node option, then the `isolated-vm` package will work
9
+ const hasNoNodeSnapshotNodeOption = process.env.NODE_OPTIONS?.includes('--no-node-snapshot');
10
+ /**
11
+ * https://github.com/laverdet/isolated-vm/issues/424
12
+ */
13
+ if (isArm64 && isNode20 && !hasNoNodeSnapshotNodeOption) {
14
+ logger.log(`Skipping usage of \`isolated-vm\` to avoid crashes in Node v20 on an arm64 machine.
15
+ If you would like to use the \`isolated-vm\` package on this machine, please provide the \`NODE_OPTIONS=--no-node-snapshot\` config to your Node process.
16
+ See https://github.com/BuilderIO/builder/blob/main/packages/sdks/README.md#node-v20--m1-macs-apple-silicon-support for more information.
17
+ `);
18
+ return true;
19
+ }
20
+ return false;
21
+ };
@@ -5,7 +5,6 @@ export declare function getBlockProperties({ block, context }: {
5
5
  context: BuilderContextInterface;
6
6
  }): {
7
7
  'builder-id': string | undefined;
8
- style: string | Partial<CSSStyleDeclaration> | undefined;
9
- class: string;
8
+ style: string | Partial<CSSStyleDeclaration>;
10
9
  href: any;
11
10
  };
@@ -1,5 +1,5 @@
1
- import { TARGET } from '../constants/target.js';
2
- import { convertStyleMapToCSSArray } from '../helpers/css.js';
1
+ import { getClassPropName } from './get-class-prop-name.js';
2
+ import { getStyle } from './get-style.js';
3
3
  import { transformBlockProperties } from './transform-block-properties.js';
4
4
  const extractRelevantRootBlockProperties = (block) => {
5
5
  // currently we are only spreading the `href` property
@@ -38,8 +38,11 @@ export function getBlockProperties({ block, context }) {
38
38
  ...extractRelevantRootBlockProperties(block),
39
39
  ...block.properties,
40
40
  'builder-id': block.id,
41
- style: block.style ? getStyleAttribute(block.style) : undefined,
42
- class: [block.id, 'builder-block', block.class, block.properties?.class].filter(Boolean).join(' ')
41
+ style: getStyle({
42
+ block,
43
+ context
44
+ }),
45
+ [getClassPropName()]: [block.id, 'builder-block', block.class, block.properties?.class].filter(Boolean).join(' ')
43
46
  };
44
47
  return transformBlockProperties({
45
48
  properties,
@@ -47,21 +50,3 @@ export function getBlockProperties({ block, context }) {
47
50
  block
48
51
  });
49
52
  }
50
- /**
51
- * Svelte does not support style attribute as an object so we need to flatten it.
52
- *
53
- * Additionally, Svelte, Vue and other frameworks use kebab-case styles, so we need to convert them.
54
- */
55
- function getStyleAttribute(style) {
56
- switch (TARGET) {
57
- case 'svelte':
58
- case 'vue':
59
- case 'solid':
60
- return convertStyleMapToCSSArray(style).join(' ');
61
- case 'qwik':
62
- case 'reactNative':
63
- case 'react':
64
- case 'rsc':
65
- return style;
66
- }
67
- }
@@ -0,0 +1 @@
1
+ export declare const getClassPropName: () => "className" | "class";
@@ -0,0 +1,14 @@
1
+ import { TARGET } from '../constants/target.js';
2
+ export const getClassPropName = () => {
3
+ switch (TARGET) {
4
+ case 'react':
5
+ case 'reactNative':
6
+ case 'rsc':
7
+ return 'className';
8
+ case 'svelte':
9
+ case 'vue':
10
+ case 'solid':
11
+ case 'qwik':
12
+ return 'class';
13
+ }
14
+ };
@@ -0,0 +1,12 @@
1
+ import type { BuilderContextInterface } from '../context/types.js';
2
+ import type { BuilderBlock } from '../types/builder-block.js';
3
+ export declare const getStyle: ({ block, context }: {
4
+ block: BuilderBlock;
5
+ context: BuilderContextInterface;
6
+ }) => string | Partial<CSSStyleDeclaration>;
7
+ /**
8
+ * Svelte does not support style attribute as an object so we need to flatten it.
9
+ *
10
+ * Additionally, Svelte, Vue and other frameworks use kebab-case styles, so we need to convert them.
11
+ */
12
+ export declare function mapStyleObjToStrIfNeeded(style: Partial<CSSStyleDeclaration>): string | Partial<CSSStyleDeclaration>;
@@ -0,0 +1,28 @@
1
+ import { TARGET } from '../constants/target.js';
2
+ import { convertStyleMapToCSSArray } from '../helpers/css.js';
3
+ import { transformStyleProperty } from './transform-style-property.js';
4
+ export const getStyle = ({ block, context }) => {
5
+ return mapStyleObjToStrIfNeeded(transformStyleProperty({
6
+ style: block.style || {},
7
+ context,
8
+ block
9
+ }));
10
+ };
11
+ /**
12
+ * Svelte does not support style attribute as an object so we need to flatten it.
13
+ *
14
+ * Additionally, Svelte, Vue and other frameworks use kebab-case styles, so we need to convert them.
15
+ */
16
+ export function mapStyleObjToStrIfNeeded(style) {
17
+ switch (TARGET) {
18
+ case 'svelte':
19
+ case 'vue':
20
+ case 'solid':
21
+ return convertStyleMapToCSSArray(style).join(' ');
22
+ case 'qwik':
23
+ case 'reactNative':
24
+ case 'react':
25
+ case 'rsc':
26
+ return style;
27
+ }
28
+ }
@@ -1,4 +1,4 @@
1
- import { checkIsDefined } from '../helpers/nullable';
1
+ import { checkIsDefined } from '../helpers/nullable.js';
2
2
  /**
3
3
  * Identifies node runtime
4
4
  */
@@ -1,5 +1,5 @@
1
- import type { BuilderContextInterface } from '../context/types';
2
- import type { BuilderBlock } from '../types/builder-block';
1
+ import type { BuilderContextInterface } from '../context/types.js';
2
+ import type { BuilderBlock } from '../types/builder-block.js';
3
3
  export declare function transformBlockProperties<T>({ properties }: {
4
4
  properties: T;
5
5
  context: BuilderContextInterface;
@@ -0,0 +1,7 @@
1
+ import type { BuilderContextInterface } from '../context/types.js';
2
+ import type { BuilderBlock } from '../types/builder-block.js';
3
+ export declare function transformStyleProperty({ style }: {
4
+ style: Partial<CSSStyleDeclaration>;
5
+ context: BuilderContextInterface;
6
+ block: BuilderBlock;
7
+ }): Partial<CSSStyleDeclaration>;
@@ -0,0 +1,3 @@
1
+ export function transformStyleProperty({ style }) {
2
+ return style;
3
+ }
@@ -0,0 +1 @@
1
+ export declare function omit<T extends object>(obj: T, ...values: (keyof T)[]): Partial<T>;
@@ -0,0 +1,7 @@
1
+ export function omit(obj, ...values) {
2
+ const newObject = Object.assign({}, obj);
3
+ for (const key of values) {
4
+ delete newObject[key];
5
+ }
6
+ return newObject;
7
+ }
@@ -54,6 +54,7 @@ export interface BuilderBlock {
54
54
  } | null;
55
55
  animations?: any[];
56
56
  style?: Partial<CSSStyleDeclaration>;
57
+ href?: string;
57
58
  /**
58
59
  * generated by the "Hide If" binding
59
60
  */
@@ -9,3 +9,6 @@ export type PropsWithBuilderData<T> = T & {
9
9
  export type BuilderComponentsProp = {
10
10
  builderComponents: RegisteredComponents;
11
11
  };
12
+ export type BuilderLinkComponentProp = {
13
+ builderLinkComponent?: any;
14
+ };
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.12.3",
4
+ "version": "0.12.5",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "lib",
@@ -1,42 +1,35 @@
1
1
  <script lang="ts">
2
+ import DynamicRenderer from "../../components/dynamic-renderer/dynamic-renderer.svelte";
3
+ import { getClassPropName } from "../../functions/get-class-prop-name.js";
2
4
  import { filterAttrs } from "../helpers.js";
3
- import { setAttrs } from "../helpers.js";
4
5
  import type { ButtonProps } from "./button.types.js";
5
6
 
6
- export let attributes: ButtonProps["attributes"] = undefined;
7
- export let text: ButtonProps["text"] = undefined;
8
7
  export let link: ButtonProps["link"] = undefined;
8
+ export let builderLinkComponent: ButtonProps["builderLinkComponent"] =
9
+ undefined;
10
+ export let attributes: ButtonProps["attributes"] = undefined;
9
11
  export let openLinkInNewTab: ButtonProps["openLinkInNewTab"] = undefined;
10
-
11
- function mitosis_styling(node, vars) {
12
- Object.entries(vars || {}).forEach(([p, v]) => {
13
- if (p.startsWith("--")) {
14
- node.style.setProperty(p, v);
15
- } else {
16
- node.style[p] = v;
17
- }
18
- });
19
- }
12
+ export let text: ButtonProps["text"] = undefined;
20
13
  </script>
21
14
 
22
- {#if link}
23
- <a
24
- {...filterAttrs(attributes, "on:", false)}
25
- href={link}
26
- target={openLinkInNewTab ? "_blank" : undefined}
27
- role={"button"}
28
- use:setAttrs={filterAttrs(attributes, "on:", true)}
29
- >
30
- {text}
31
- </a>
32
- {:else}
33
- <button
34
- use:mitosis_styling={attributes.style}
35
- role="button"
36
- {...filterAttrs(attributes, "on:", false)}
37
- class={`builder-button ${attributes.class}`}
38
- use:setAttrs={filterAttrs(attributes, "on:", true)}
39
- >
40
- {text}
41
- </button>
42
- {/if}
15
+ <DynamicRenderer
16
+ TagName={link ? builderLinkComponent || "a" : "button"}
17
+ attributes={{
18
+ ...filterAttrs(attributes, "on:", false),
19
+ [getClassPropName()]: `${link ? "" : "builder-button"} ${
20
+ attributes[getClassPropName()] || ""
21
+ }`,
22
+ ...(link
23
+ ? {
24
+ href: link,
25
+ target: openLinkInNewTab ? "_blank" : undefined,
26
+ role: "link",
27
+ }
28
+ : {
29
+ role: "button",
30
+ }),
31
+ }}
32
+ actionAttributes={filterAttrs(attributes, "on:", true)}
33
+ >
34
+ {text}
35
+ </DynamicRenderer>
@@ -1,4 +1,5 @@
1
- export interface ButtonProps {
1
+ import type { BuilderLinkComponentProp } from '../../types/builder-props.js';
2
+ export interface ButtonProps extends BuilderLinkComponentProp {
2
3
  attributes?: any;
3
4
  text?: string;
4
5
  link?: string;