@builder.io/sdk-svelte 0.12.3 → 0.12.4

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 (143) 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/get-block-properties.d.ts +1 -2
  28. package/lib/browser/functions/get-block-properties.js +7 -22
  29. package/lib/browser/functions/get-class-prop-name.d.ts +1 -0
  30. package/lib/browser/functions/get-class-prop-name.js +14 -0
  31. package/lib/browser/functions/get-style.d.ts +12 -0
  32. package/lib/browser/functions/get-style.js +28 -0
  33. package/lib/browser/functions/transform-block-properties.d.ts +2 -2
  34. package/lib/browser/functions/transform-style-property.d.ts +7 -0
  35. package/lib/browser/functions/transform-style-property.js +3 -0
  36. package/lib/browser/helpers/omit.d.ts +1 -0
  37. package/lib/browser/helpers/omit.js +7 -0
  38. package/lib/browser/types/builder-block.d.ts +1 -0
  39. package/lib/browser/types/builder-props.d.ts +3 -0
  40. package/lib/edge/blocks/button/button.svelte +27 -35
  41. package/lib/edge/blocks/button/button.svelte.d.ts +3 -2
  42. package/lib/edge/blocks/button/button.types.d.ts +2 -1
  43. package/lib/edge/blocks/columns/columns.svelte +25 -10
  44. package/lib/edge/blocks/columns/columns.svelte.d.ts +1 -0
  45. package/lib/edge/blocks/columns/columns.types.d.ts +3 -3
  46. package/lib/edge/blocks/symbol/symbol.svelte +4 -1
  47. package/lib/edge/blocks/symbol/symbol.svelte.d.ts +1 -0
  48. package/lib/edge/blocks/symbol/symbol.types.d.ts +2 -2
  49. package/lib/edge/components/block/block.svelte +26 -2
  50. package/lib/edge/components/block/components/block-wrapper.svelte.d.ts +1 -0
  51. package/lib/edge/components/block/components/component-ref/component-ref.helpers.d.ts +2 -2
  52. package/lib/edge/components/block/components/component-ref/component-ref.svelte +3 -1
  53. package/lib/edge/components/block/components/component-ref/component-ref.svelte.d.ts +1 -0
  54. package/lib/edge/components/block/components/repeated-block.svelte +2 -1
  55. package/lib/edge/components/block/components/repeated-block.svelte.d.ts +4 -5
  56. package/lib/edge/components/blocks/blocks.svelte +2 -0
  57. package/lib/edge/components/blocks/blocks.svelte.d.ts +1 -0
  58. package/lib/edge/components/blocks/blocks.types.d.ts +1 -0
  59. package/lib/edge/components/content/content.svelte +3 -0
  60. package/lib/edge/components/content/content.svelte.d.ts +1 -0
  61. package/lib/edge/components/content-variants/content-variants.svelte +3 -0
  62. package/lib/edge/components/content-variants/content-variants.svelte.d.ts +1 -0
  63. package/lib/edge/components/content-variants/content-variants.types.d.ts +6 -2
  64. package/lib/edge/constants/sdk-version.d.ts +1 -1
  65. package/lib/edge/constants/sdk-version.js +1 -1
  66. package/lib/edge/functions/get-block-properties.d.ts +1 -2
  67. package/lib/edge/functions/get-block-properties.js +7 -22
  68. package/lib/edge/functions/get-class-prop-name.d.ts +1 -0
  69. package/lib/edge/functions/get-class-prop-name.js +14 -0
  70. package/lib/edge/functions/get-style.d.ts +12 -0
  71. package/lib/edge/functions/get-style.js +28 -0
  72. package/lib/edge/functions/transform-block-properties.d.ts +2 -2
  73. package/lib/edge/functions/transform-style-property.d.ts +7 -0
  74. package/lib/edge/functions/transform-style-property.js +3 -0
  75. package/lib/edge/helpers/omit.d.ts +1 -0
  76. package/lib/edge/helpers/omit.js +7 -0
  77. package/lib/edge/types/builder-block.d.ts +1 -0
  78. package/lib/edge/types/builder-props.d.ts +3 -0
  79. package/lib/node/blocks/button/button.svelte +27 -35
  80. package/lib/node/blocks/button/button.svelte.d.ts +3 -2
  81. package/lib/node/blocks/button/button.types.d.ts +2 -1
  82. package/lib/node/blocks/columns/columns.svelte +25 -10
  83. package/lib/node/blocks/columns/columns.svelte.d.ts +1 -0
  84. package/lib/node/blocks/columns/columns.types.d.ts +3 -3
  85. package/lib/node/blocks/symbol/symbol.svelte +4 -1
  86. package/lib/node/blocks/symbol/symbol.svelte.d.ts +1 -0
  87. package/lib/node/blocks/symbol/symbol.types.d.ts +2 -2
  88. package/lib/node/components/block/block.svelte +26 -2
  89. package/lib/node/components/block/components/block-wrapper.svelte.d.ts +1 -0
  90. package/lib/node/components/block/components/component-ref/component-ref.helpers.d.ts +2 -2
  91. package/lib/node/components/block/components/component-ref/component-ref.svelte +3 -1
  92. package/lib/node/components/block/components/component-ref/component-ref.svelte.d.ts +1 -0
  93. package/lib/node/components/block/components/repeated-block.svelte +2 -1
  94. package/lib/node/components/block/components/repeated-block.svelte.d.ts +4 -5
  95. package/lib/node/components/blocks/blocks.svelte +2 -0
  96. package/lib/node/components/blocks/blocks.svelte.d.ts +1 -0
  97. package/lib/node/components/blocks/blocks.types.d.ts +1 -0
  98. package/lib/node/components/content/content.svelte +3 -0
  99. package/lib/node/components/content/content.svelte.d.ts +1 -0
  100. package/lib/node/components/content-variants/content-variants.svelte +3 -0
  101. package/lib/node/components/content-variants/content-variants.svelte.d.ts +1 -0
  102. package/lib/node/components/content-variants/content-variants.types.d.ts +6 -2
  103. package/lib/node/constants/sdk-version.d.ts +1 -1
  104. package/lib/node/constants/sdk-version.js +1 -1
  105. package/lib/node/functions/get-block-properties.d.ts +1 -2
  106. package/lib/node/functions/get-block-properties.js +7 -22
  107. package/lib/node/functions/get-class-prop-name.d.ts +1 -0
  108. package/lib/node/functions/get-class-prop-name.js +14 -0
  109. package/lib/node/functions/get-style.d.ts +12 -0
  110. package/lib/node/functions/get-style.js +28 -0
  111. package/lib/node/functions/transform-block-properties.d.ts +2 -2
  112. package/lib/node/functions/transform-style-property.d.ts +7 -0
  113. package/lib/node/functions/transform-style-property.js +3 -0
  114. package/lib/node/helpers/omit.d.ts +1 -0
  115. package/lib/node/helpers/omit.js +7 -0
  116. package/lib/node/types/builder-block.d.ts +1 -0
  117. package/lib/node/types/builder-props.d.ts +3 -0
  118. package/package.json +1 -1
  119. package/src/blocks/button/button.svelte +27 -34
  120. package/src/blocks/button/button.types.ts +2 -1
  121. package/src/blocks/columns/columns.svelte +26 -10
  122. package/src/blocks/columns/columns.types.ts +3 -3
  123. package/src/blocks/symbol/symbol.svelte +5 -1
  124. package/src/blocks/symbol/symbol.types.ts +2 -2
  125. package/src/components/block/block.svelte +28 -2
  126. package/src/components/block/components/block-wrapper.svelte +1 -0
  127. package/src/components/block/components/component-ref/component-ref.helpers.ts +1 -0
  128. package/src/components/block/components/component-ref/component-ref.svelte +3 -1
  129. package/src/components/block/components/repeated-block.svelte +5 -9
  130. package/src/components/blocks/blocks.svelte +2 -0
  131. package/src/components/blocks/blocks.types.ts +1 -0
  132. package/src/components/content/content.svelte +3 -0
  133. package/src/components/content-variants/content-variants.svelte +3 -0
  134. package/src/components/content-variants/content-variants.types.ts +6 -2
  135. package/src/constants/sdk-version.ts +1 -1
  136. package/src/functions/get-block-properties.ts +7 -22
  137. package/src/functions/get-class-prop-name.ts +14 -0
  138. package/src/functions/get-style.ts +37 -0
  139. package/src/functions/transform-block-properties.ts +2 -2
  140. package/src/functions/transform-style-property.ts +11 -0
  141. package/src/helpers/omit.ts +7 -0
  142. package/src/types/builder-block.ts +1 -0
  143. package/src/types/builder-props.ts +3 -0
@@ -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.4";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.12.3";
1
+ export const SDK_VERSION = "0.12.4";
@@ -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,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.4",
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;
@@ -4,11 +4,14 @@
4
4
 
5
5
  <script lang="ts">
6
6
  import Blocks from "../../components/blocks/blocks.svelte";
7
+ import DynamicRenderer from "../../components/dynamic-renderer/dynamic-renderer.svelte";
7
8
  import InlinedStyles from "../../components/inlined-styles.svelte";
8
9
  import type { SizeName } from "../../constants/device-sizes.js";
9
10
  import { getSizesForBreakpoints } from "../../constants/device-sizes.js";
10
11
  import { TARGET } from "../../constants/target.js";
11
12
  import { deoptSignal } from "../../functions/deopt.js";
13
+ import { getClassPropName } from "../../functions/get-class-prop-name.js";
14
+ import { mapStyleObjToStrIfNeeded } from "../../functions/get-style.js";
12
15
  import type { PropsWithBuilderData } from "../../types/builder-props.js";
13
16
  import type { Dictionary } from "../../types/typescript.js";
14
17
  import type { ColumnProps } from "./columns.types.js";
@@ -22,6 +25,8 @@
22
25
  undefined;
23
26
  export let builderContext: PropsWithBuilderData<ColumnProps>["builderContext"];
24
27
  export let builderBlock: PropsWithBuilderData<ColumnProps>["builderBlock"];
28
+ export let builderLinkComponent: PropsWithBuilderData<ColumnProps>["builderLinkComponent"] =
29
+ undefined;
25
30
  export let builderComponents: PropsWithBuilderData<ColumnProps>["builderComponents"];
26
31
 
27
32
  function mitosis_styling(node, vars) {
@@ -66,7 +71,13 @@
66
71
  const mobileWidth = "100%";
67
72
  const mobileMarginLeft = 0;
68
73
  const marginLeftKey = "margin-left";
74
+ const sharedStyles = {
75
+ display: "flex",
76
+ flexDirection: "column",
77
+ alignItems: "stretch",
78
+ };
69
79
  return {
80
+ ...sharedStyles,
70
81
  width,
71
82
  [marginLeftKey]: gutterPixels,
72
83
  "--column-width-mobile": getMobileStyle({
@@ -151,10 +162,19 @@
151
162
  {/if}
152
163
 
153
164
  {#each columns as column, index (index)}
154
- <div
155
- use:mitosis_styling={columnCssVars(index)}
156
- class="builder-column div-2"
157
- {...{}}
165
+ <DynamicRenderer
166
+ TagName={column.link ? builderLinkComponent || "a" : "div"}
167
+ actionAttributes={{}}
168
+ attributes={{
169
+ ...{},
170
+ ...(column.link
171
+ ? {
172
+ href: column.link,
173
+ }
174
+ : {}),
175
+ [getClassPropName()]: "builder-column",
176
+ style: mapStyleObjToStrIfNeeded(columnCssVars(index)),
177
+ }}
158
178
  >
159
179
  <Blocks
160
180
  path={`component.options.columns.${index}.blocks`}
@@ -164,9 +184,10 @@
164
184
  }}
165
185
  context={builderContext}
166
186
  registeredComponents={builderComponents}
187
+ linkComponent={builderLinkComponent}
167
188
  blocks={column.blocks}
168
189
  />
169
- </div>
190
+ </DynamicRenderer>
170
191
  {/each}
171
192
  </div>
172
193
 
@@ -175,9 +196,4 @@
175
196
  display: flex;
176
197
  line-height: normal;
177
198
  }
178
- .div-2 {
179
- display: flex;
180
- flex-direction: column;
181
- align-items: stretch;
182
- }
183
199
  </style>
@@ -1,13 +1,13 @@
1
1
  import type { BuilderBlock } from '../../types/builder-block.js';
2
- import type { BuilderComponentsProp } from '../../types/builder-props.js';
2
+ import type { BuilderComponentsProp, BuilderLinkComponentProp } from '../../types/builder-props.js';
3
3
  type Column = {
4
4
  blocks: BuilderBlock[];
5
5
  width?: number;
6
+ link?: string;
6
7
  };
7
8
  type StackColumnsAt = 'tablet' | 'mobile' | 'never';
8
- export interface ColumnProps extends BuilderComponentsProp {
9
+ export interface ColumnProps extends BuilderComponentsProp, BuilderLinkComponentProp {
9
10
  columns?: Column[];
10
- builderBlock: BuilderBlock;
11
11
  space?: number;
12
12
  stackColumnsAt?: StackColumnsAt;
13
13
  reverseColumnsWhenStacked?: boolean;
@@ -5,6 +5,7 @@
5
5
  import type { BuilderContent } from "../../types/builder-content.js";
6
6
  import type { PropsWithBuilderData } from "../../types/builder-props.js";
7
7
  import { filterAttrs } from "../helpers.js";
8
+ import { getClassPropName } from "../../functions/get-class-prop-name.js";
8
9
  import type { Nullable } from "../../types/typescript.js";
9
10
  import { setAttrs } from "../helpers.js";
10
11
  import { fetchSymbolContent } from "./symbol.helpers.js";
@@ -18,6 +19,8 @@
18
19
  export let builderContext: PropsWithBuilderData<SymbolProps>["builderContext"];
19
20
  export let builderBlock: PropsWithBuilderData<SymbolProps>["builderBlock"];
20
21
  export let builderComponents: PropsWithBuilderData<SymbolProps>["builderComponents"];
22
+ export let builderLinkComponent: PropsWithBuilderData<SymbolProps>["builderLinkComponent"] =
23
+ undefined;
21
24
 
22
25
  function setContent() {
23
26
  if (contentToUse) return;
@@ -32,7 +35,7 @@
32
35
  }
33
36
  $: className = () => {
34
37
  return [
35
- ...[attributes.class],
38
+ ...[attributes[getClassPropName()]],
36
39
  "builder-symbol",
37
40
  symbol?.inline ? "builder-inline-symbol" : undefined,
38
41
  symbol?.dynamic || dynamic ? "builder-dynamic-symbol" : undefined,
@@ -75,5 +78,6 @@
75
78
  }}
76
79
  model={symbol?.model}
77
80
  content={contentToUse}
81
+ linkComponent={builderLinkComponent}
78
82
  />
79
83
  </div>
@@ -1,5 +1,5 @@
1
1
  import type { BuilderContent } from '../../types/builder-content.js';
2
- import type { BuilderComponentsProp } from '../../types/builder-props.js';
2
+ import type { BuilderComponentsProp, BuilderLinkComponentProp } from '../../types/builder-props.js';
3
3
  interface SymbolInfo {
4
4
  model?: string;
5
5
  entry?: string;
@@ -8,7 +8,7 @@ interface SymbolInfo {
8
8
  inline?: boolean;
9
9
  dynamic?: boolean;
10
10
  }
11
- export interface SymbolProps extends BuilderComponentsProp {
11
+ export interface SymbolProps extends BuilderComponentsProp, BuilderLinkComponentProp {
12
12
  symbol?: SymbolInfo;
13
13
  dataOnly?: boolean;
14
14
  dynamic?: boolean;
@@ -3,6 +3,7 @@
3
3
  block: BuilderBlock;
4
4
  context: Writable<BuilderContextInterface>;
5
5
  registeredComponents: RegisteredComponents;
6
+ linkComponent: any;
6
7
  };
7
8
  </script>
8
9
 
@@ -15,8 +16,8 @@
15
16
  } from "../../context/types.js";
16
17
  import { extractTextStyles } from "../../functions/extract-text-styles.js";
17
18
  import { getBlockComponentOptions } from "../../functions/get-block-component-options.js";
18
- import { getBlockProperties } from "../../functions/get-block-properties.js";
19
19
  import { getProcessedBlock } from "../../functions/get-processed-block.js";
20
+ import { getStyle } from "../../functions/get-style.js";
20
21
  import type { BuilderBlock } from "../../types/builder-block.js";
21
22
  import { getComponent, getRepeatItemData } from "./block.helpers.js";
22
23
  import BlockStyles from "./components/block-styles.svelte";
@@ -29,6 +30,7 @@
29
30
  export let block: BlockProps["block"];
30
31
  export let context: BlockProps["context"];
31
32
  export let registeredComponents: BlockProps["registeredComponents"];
33
+ export let linkComponent: BlockProps["linkComponent"];
32
34
 
33
35
  $: blockComponent = () => {
34
36
  return getComponent({
@@ -56,6 +58,13 @@
56
58
  });
57
59
  };
58
60
  $: Tag = () => {
61
+ const shouldUseLink =
62
+ block.tagName === "a" ||
63
+ processedBlock().properties?.href ||
64
+ processedBlock().href;
65
+ if (shouldUseLink) {
66
+ return linkComponent || "a";
67
+ }
59
68
  return block.tagName || "div";
60
69
  };
61
70
  $: canShowBlock = () => {
@@ -89,6 +98,13 @@
89
98
  componentOptions: {
90
99
  ...getBlockComponentOptions(processedBlock()),
91
100
  builderContext: context,
101
+ ...(blockComponent?.()?.name === "Core:Button" ||
102
+ blockComponent?.()?.name === "Symbol" ||
103
+ blockComponent?.()?.name === "Columns"
104
+ ? {
105
+ builderLinkComponent: linkComponent,
106
+ }
107
+ : {}),
92
108
  ...(blockComponent?.()?.name === "Symbol" ||
93
109
  blockComponent?.()?.name === "Columns"
94
110
  ? {
@@ -97,6 +113,7 @@
97
113
  : {}),
98
114
  },
99
115
  context: childrenContext,
116
+ linkComponent: linkComponent,
100
117
  registeredComponents: registeredComponents,
101
118
  builderBlock: processedBlock(),
102
119
  includeBlockProps: blockComponent?.()?.noWrap === true,
@@ -112,13 +129,19 @@
112
129
 
113
130
  {#if !blockComponent?.()?.noWrap}
114
131
  {#if !repeatItem()}
115
- <BlockWrapper Wrapper={Tag()} block={processedBlock()} {context}>
132
+ <BlockWrapper
133
+ Wrapper={Tag()}
134
+ block={processedBlock()}
135
+ {context}
136
+ {linkComponent}
137
+ >
116
138
  <ComponentRef
117
139
  componentRef={componentRefProps().componentRef}
118
140
  componentOptions={componentRefProps().componentOptions}
119
141
  blockChildren={componentRefProps().blockChildren}
120
142
  context={componentRefProps().context}
121
143
  registeredComponents={componentRefProps().registeredComponents}
144
+ linkComponent={componentRefProps().linkComponent}
122
145
  builderBlock={componentRefProps().builderBlock}
123
146
  includeBlockProps={componentRefProps().includeBlockProps}
124
147
  isInteractive={componentRefProps().isInteractive}
@@ -129,6 +152,7 @@
129
152
  block={child}
130
153
  context={childrenContext}
131
154
  {registeredComponents}
155
+ {linkComponent}
132
156
  />
133
157
  {/each}
134
158
  </BlockWrapper>
@@ -138,6 +162,7 @@
138
162
  repeatContext={data.context}
139
163
  block={data.block}
140
164
  {registeredComponents}
165
+ {linkComponent}
141
166
  />
142
167
  {/each}
143
168
  {/if}
@@ -148,6 +173,7 @@
148
173
  blockChildren={componentRefProps().blockChildren}
149
174
  context={componentRefProps().context}
150
175
  registeredComponents={componentRefProps().registeredComponents}
176
+ linkComponent={componentRefProps().linkComponent}
151
177
  builderBlock={componentRefProps().builderBlock}
152
178
  includeBlockProps={componentRefProps().includeBlockProps}
153
179
  isInteractive={componentRefProps().isInteractive}
@@ -3,6 +3,7 @@
3
3
  Wrapper: string;
4
4
  block: BuilderBlock;
5
5
  context: Writable<BuilderContextInterface>;
6
+ linkComponent: any;
6
7
  };
7
8
 
8
9
  /**