@builder.io/sdk-svelte 1.0.35 → 1.1.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.
- package/lib/browser/blocks/accordion/component-info.js +7 -1
- package/lib/browser/blocks/button/component-info.js +7 -1
- package/lib/browser/blocks/columns/component-info.js +7 -1
- package/lib/browser/blocks/custom-code/component-info.js +6 -0
- package/lib/browser/blocks/embed/component-info.js +6 -0
- package/lib/browser/blocks/form/form/component-info.js +7 -1
- package/lib/browser/blocks/form/input/component-info.js +6 -0
- package/lib/browser/blocks/form/select/component-info.js +6 -0
- package/lib/browser/blocks/form/select/select.svelte +2 -0
- package/lib/browser/blocks/form/submit-button/component-info.js +6 -0
- package/lib/browser/blocks/form/textarea/component-info.d.ts +2 -0
- package/lib/{edge/blocks → browser/blocks/form}/textarea/component-info.js +6 -0
- package/lib/browser/blocks/{textarea → form/textarea}/textarea.svelte +4 -2
- package/lib/browser/blocks/fragment/component-info.js +6 -0
- package/lib/browser/blocks/image/component-info.js +7 -1
- package/lib/browser/blocks/img/component-info.js +6 -0
- package/lib/browser/blocks/raw-text/component-info.js +6 -0
- package/lib/browser/blocks/section/component-info.js +6 -0
- package/lib/browser/blocks/slot/component-info.js +7 -1
- package/lib/browser/blocks/symbol/component-info.js +7 -1
- package/lib/browser/blocks/tabs/component-info.js +7 -1
- package/lib/browser/blocks/text/component-info.js +7 -0
- package/lib/browser/blocks/video/component-info.js +7 -1
- package/lib/browser/components/block/block.helpers.d.ts +8 -8
- package/lib/browser/components/block/block.helpers.js +39 -12
- package/lib/browser/components/content-variants/content-variants.svelte +2 -1
- package/lib/browser/components/content-variants/inlined-fns.d.ts +1 -1
- package/lib/browser/components/content-variants/inlined-fns.js +1 -1
- package/lib/browser/constants/extra-components.js +5 -0
- package/lib/browser/constants/sdk-name.d.ts +1 -0
- package/lib/browser/constants/sdk-name.js +12 -0
- package/lib/browser/constants/sdk-version.d.ts +1 -1
- package/lib/browser/constants/sdk-version.js +1 -1
- package/lib/browser/functions/evaluate/choose-eval.js +4 -0
- package/lib/browser/functions/evaluate/node-runtime/node-runtime.js +10 -6
- package/lib/browser/types/components.d.ts +31 -0
- package/lib/edge/blocks/accordion/component-info.js +7 -1
- package/lib/edge/blocks/button/component-info.js +7 -1
- package/lib/edge/blocks/columns/component-info.js +7 -1
- package/lib/edge/blocks/custom-code/component-info.js +6 -0
- package/lib/edge/blocks/embed/component-info.js +6 -0
- package/lib/edge/blocks/form/form/component-info.js +7 -1
- package/lib/edge/blocks/form/input/component-info.js +6 -0
- package/lib/edge/blocks/form/select/component-info.js +6 -0
- package/lib/edge/blocks/form/select/select.svelte +2 -0
- package/lib/edge/blocks/form/submit-button/component-info.js +6 -0
- package/lib/edge/blocks/form/textarea/component-info.d.ts +2 -0
- package/lib/{browser/blocks → edge/blocks/form}/textarea/component-info.js +6 -0
- package/lib/edge/blocks/{textarea → form/textarea}/textarea.svelte +4 -2
- package/lib/edge/blocks/fragment/component-info.js +6 -0
- package/lib/edge/blocks/image/component-info.js +7 -1
- package/lib/edge/blocks/img/component-info.js +6 -0
- package/lib/edge/blocks/raw-text/component-info.js +6 -0
- package/lib/edge/blocks/section/component-info.js +6 -0
- package/lib/edge/blocks/slot/component-info.js +7 -1
- package/lib/edge/blocks/symbol/component-info.js +7 -1
- package/lib/edge/blocks/tabs/component-info.js +7 -1
- package/lib/edge/blocks/text/component-info.js +7 -0
- package/lib/edge/blocks/video/component-info.js +7 -1
- package/lib/edge/components/block/block.helpers.d.ts +8 -8
- package/lib/edge/components/block/block.helpers.js +39 -12
- package/lib/edge/components/content-variants/content-variants.svelte +2 -1
- package/lib/edge/components/content-variants/inlined-fns.d.ts +1 -1
- package/lib/edge/components/content-variants/inlined-fns.js +1 -1
- package/lib/edge/constants/extra-components.js +5 -0
- package/lib/edge/constants/sdk-name.d.ts +1 -0
- package/lib/edge/constants/sdk-name.js +12 -0
- package/lib/edge/constants/sdk-version.d.ts +1 -1
- package/lib/edge/constants/sdk-version.js +1 -1
- package/lib/edge/functions/evaluate/choose-eval.js +4 -0
- package/lib/edge/functions/evaluate/node-runtime/node-runtime.js +10 -6
- package/lib/edge/types/components.d.ts +31 -0
- package/lib/node/blocks/accordion/component-info.js +7 -1
- package/lib/node/blocks/button/component-info.js +7 -1
- package/lib/node/blocks/columns/component-info.js +7 -1
- package/lib/node/blocks/custom-code/component-info.js +6 -0
- package/lib/node/blocks/embed/component-info.js +6 -0
- package/lib/node/blocks/form/form/component-info.js +7 -1
- package/lib/node/blocks/form/input/component-info.js +6 -0
- package/lib/node/blocks/form/select/component-info.js +6 -0
- package/lib/node/blocks/form/select/select.svelte +2 -0
- package/lib/node/blocks/form/submit-button/component-info.js +6 -0
- package/lib/node/blocks/form/textarea/component-info.d.ts +2 -0
- package/lib/node/blocks/{textarea → form/textarea}/component-info.js +6 -0
- package/lib/node/blocks/{textarea → form/textarea}/textarea.svelte +4 -2
- package/lib/node/blocks/fragment/component-info.js +6 -0
- package/lib/node/blocks/image/component-info.js +7 -1
- package/lib/node/blocks/img/component-info.js +6 -0
- package/lib/node/blocks/raw-text/component-info.js +6 -0
- package/lib/node/blocks/section/component-info.js +6 -0
- package/lib/node/blocks/slot/component-info.js +7 -1
- package/lib/node/blocks/symbol/component-info.js +7 -1
- package/lib/node/blocks/tabs/component-info.js +7 -1
- package/lib/node/blocks/text/component-info.js +7 -0
- package/lib/node/blocks/video/component-info.js +7 -1
- package/lib/node/components/block/block.helpers.d.ts +8 -8
- package/lib/node/components/block/block.helpers.js +39 -12
- package/lib/node/components/content-variants/content-variants.svelte +2 -1
- package/lib/node/components/content-variants/inlined-fns.d.ts +1 -1
- package/lib/node/components/content-variants/inlined-fns.js +1 -1
- package/lib/node/constants/extra-components.js +5 -0
- package/lib/node/constants/sdk-name.d.ts +1 -0
- package/lib/node/constants/sdk-name.js +12 -0
- package/lib/node/constants/sdk-version.d.ts +1 -1
- package/lib/node/constants/sdk-version.js +1 -1
- package/lib/node/functions/evaluate/choose-eval.js +4 -0
- package/lib/node/functions/evaluate/node-runtime/node-runtime.js +10 -6
- package/lib/node/types/components.d.ts +31 -0
- package/package.json +1 -1
- package/src/blocks/accordion/component-info.ts +7 -1
- package/src/blocks/button/component-info.ts +7 -1
- package/src/blocks/columns/component-info.ts +7 -1
- package/src/blocks/custom-code/component-info.ts +6 -0
- package/src/blocks/embed/component-info.ts +6 -0
- package/src/blocks/form/form/component-info.ts +7 -1
- package/src/blocks/form/input/component-info.ts +6 -0
- package/src/blocks/form/select/component-info.ts +6 -0
- package/src/blocks/form/select/select.svelte +3 -0
- package/src/blocks/form/submit-button/component-info.ts +6 -0
- package/src/blocks/{textarea → form/textarea}/component-info.ts +7 -1
- package/src/blocks/{textarea → form/textarea}/textarea.svelte +5 -2
- package/src/blocks/fragment/component-info.ts +6 -0
- package/src/blocks/image/component-info.ts +7 -1
- package/src/blocks/img/component-info.ts +6 -0
- package/src/blocks/raw-text/component-info.ts +6 -0
- package/src/blocks/section/component-info.ts +6 -0
- package/src/blocks/slot/component-info.ts +7 -1
- package/src/blocks/symbol/component-info.ts +7 -1
- package/src/blocks/tabs/component-info.ts +7 -1
- package/src/blocks/text/component-info.ts +7 -0
- package/src/blocks/video/component-info.ts +7 -1
- package/src/components/block/block.helpers.ts +32 -12
- package/src/components/content-variants/content-variants.svelte +3 -1
- package/src/components/content-variants/inlined-fns.ts +1 -1
- package/src/constants/extra-components.ts +5 -0
- package/src/constants/sdk-name.ts +12 -0
- package/src/constants/sdk-version.ts +1 -1
- package/src/functions/evaluate/choose-eval.ts +4 -0
- package/src/functions/evaluate/node-runtime/node-runtime.ts +11 -6
- package/src/types/components.ts +35 -0
- package/lib/browser/blocks/textarea/component-info.d.ts +0 -2
- package/lib/edge/blocks/textarea/component-info.d.ts +0 -2
- package/lib/node/blocks/textarea/component-info.d.ts +0 -2
- /package/lib/browser/blocks/{textarea → form/textarea}/index.d.ts +0 -0
- /package/lib/browser/blocks/{textarea → form/textarea}/index.js +0 -0
- /package/lib/edge/blocks/{textarea → form/textarea}/index.d.ts +0 -0
- /package/lib/edge/blocks/{textarea → form/textarea}/index.js +0 -0
- /package/lib/node/blocks/{textarea → form/textarea}/index.d.ts +0 -0
- /package/lib/node/blocks/{textarea → form/textarea}/index.js +0 -0
- /package/src/blocks/{textarea → form/textarea}/index.ts +0 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import type { ComponentInfo } from '
|
|
1
|
+
import type { ComponentInfo } from '../../../types/components';
|
|
2
2
|
export const componentInfo: ComponentInfo = {
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: false,
|
|
5
|
+
builderContext: false,
|
|
6
|
+
builderComponents: false,
|
|
7
|
+
builderLinkComponent: false
|
|
8
|
+
},
|
|
3
9
|
name: 'Form:TextArea',
|
|
4
10
|
image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2Ff74a2f3de58c4c3e939204e5b6b8f6c3',
|
|
5
11
|
inputs: [{
|
|
@@ -9,18 +9,20 @@
|
|
|
9
9
|
value?: string;
|
|
10
10
|
defaultValue?: string;
|
|
11
11
|
placeholder?: string;
|
|
12
|
+
required?: boolean;
|
|
12
13
|
}
|
|
13
14
|
</script>
|
|
14
15
|
|
|
15
16
|
<script lang="ts">
|
|
16
|
-
import { filterAttrs } from "
|
|
17
|
-
import { setAttrs } from "
|
|
17
|
+
import { filterAttrs } from "../../helpers";
|
|
18
|
+
import { setAttrs } from "../../helpers";
|
|
18
19
|
|
|
19
20
|
export let attributes: TextareaProps["attributes"] = undefined;
|
|
20
21
|
export let placeholder: TextareaProps["placeholder"] = undefined;
|
|
21
22
|
export let name: TextareaProps["name"] = undefined;
|
|
22
23
|
export let value: TextareaProps["value"] = undefined;
|
|
23
24
|
export let defaultValue: TextareaProps["defaultValue"] = undefined;
|
|
25
|
+
export let required: TextareaProps["required"] = undefined;
|
|
24
26
|
</script>
|
|
25
27
|
|
|
26
28
|
<textarea
|
|
@@ -29,5 +31,6 @@
|
|
|
29
31
|
{name}
|
|
30
32
|
{value}
|
|
31
33
|
{defaultValue}
|
|
34
|
+
{required}
|
|
32
35
|
use:setAttrs={filterAttrs(attributes, "on:", true)}
|
|
33
36
|
/>
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { ComponentInfo } from '../../types/components';
|
|
2
2
|
export const componentInfo: ComponentInfo = {
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: false,
|
|
5
|
+
builderContext: false,
|
|
6
|
+
builderComponents: false,
|
|
7
|
+
builderLinkComponent: false
|
|
8
|
+
},
|
|
3
9
|
name: 'Fragment',
|
|
4
10
|
static: true,
|
|
5
11
|
hidden: true,
|
|
@@ -125,5 +125,11 @@ export const componentInfo: ComponentInfo = {
|
|
|
125
125
|
helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
|
|
126
126
|
advanced: true,
|
|
127
127
|
defaultValue: 0.7041
|
|
128
|
-
}]
|
|
128
|
+
}],
|
|
129
|
+
shouldReceiveBuilderProps: {
|
|
130
|
+
builderBlock: true,
|
|
131
|
+
builderContext: false,
|
|
132
|
+
builderComponents: false,
|
|
133
|
+
builderLinkComponent: false
|
|
134
|
+
}
|
|
129
135
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { ComponentInfo } from '../../types/components';
|
|
2
2
|
export const componentInfo: ComponentInfo = {
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: false,
|
|
5
|
+
builderContext: false,
|
|
6
|
+
builderComponents: false,
|
|
7
|
+
builderLinkComponent: false
|
|
8
|
+
},
|
|
3
9
|
// friendlyName?
|
|
4
10
|
name: 'Raw:Img',
|
|
5
11
|
hideFromInsertMenu: true,
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { ComponentInfo } from '../../types/components';
|
|
2
2
|
export const componentInfo: ComponentInfo = {
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: false,
|
|
5
|
+
builderContext: false,
|
|
6
|
+
builderComponents: false,
|
|
7
|
+
builderLinkComponent: false
|
|
8
|
+
},
|
|
3
9
|
name: 'Builder:RawText',
|
|
4
10
|
hideFromInsertMenu: true,
|
|
5
11
|
inputs: [{
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { ComponentInfo } from '../../types/components';
|
|
2
2
|
export const componentInfo: ComponentInfo = {
|
|
3
|
+
shouldReceiveBuilderProps: {
|
|
4
|
+
builderBlock: false,
|
|
5
|
+
builderContext: false,
|
|
6
|
+
builderComponents: false,
|
|
7
|
+
builderLinkComponent: false
|
|
8
|
+
},
|
|
3
9
|
name: 'Core:Section',
|
|
4
10
|
static: true,
|
|
5
11
|
image: 'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a',
|
|
@@ -11,5 +11,11 @@ export const componentInfo: ComponentInfo = {
|
|
|
11
11
|
type: 'string',
|
|
12
12
|
required: true,
|
|
13
13
|
defaultValue: 'children'
|
|
14
|
-
}]
|
|
14
|
+
}],
|
|
15
|
+
shouldReceiveBuilderProps: {
|
|
16
|
+
builderBlock: false,
|
|
17
|
+
builderContext: true,
|
|
18
|
+
builderComponents: false,
|
|
19
|
+
builderLinkComponent: false
|
|
20
|
+
}
|
|
15
21
|
}
|
|
@@ -31,5 +31,11 @@ export const componentInfo: ComponentInfo = {
|
|
|
31
31
|
name: 'useChildren',
|
|
32
32
|
hideFromUI: true,
|
|
33
33
|
type: 'boolean'
|
|
34
|
-
}]
|
|
34
|
+
}],
|
|
35
|
+
shouldReceiveBuilderProps: {
|
|
36
|
+
builderBlock: true,
|
|
37
|
+
builderContext: true,
|
|
38
|
+
builderComponents: true,
|
|
39
|
+
builderLinkComponent: true
|
|
40
|
+
}
|
|
35
41
|
}
|
|
@@ -135,5 +135,11 @@ export const componentInfo: ComponentInfo = {
|
|
|
135
135
|
label: 'Right',
|
|
136
136
|
value: 'flex-end'
|
|
137
137
|
}]
|
|
138
|
-
}]
|
|
138
|
+
}],
|
|
139
|
+
shouldReceiveBuilderProps: {
|
|
140
|
+
builderBlock: true,
|
|
141
|
+
builderContext: true,
|
|
142
|
+
builderComponents: true,
|
|
143
|
+
builderLinkComponent: true
|
|
144
|
+
}
|
|
139
145
|
}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { TARGET } from '../../constants/target';
|
|
1
2
|
import type { ComponentInfo } from '../../types/components';
|
|
2
3
|
export const componentInfo: ComponentInfo = {
|
|
4
|
+
shouldReceiveBuilderProps: {
|
|
5
|
+
builderBlock: TARGET === 'reactNative' ? true : false,
|
|
6
|
+
builderContext: false,
|
|
7
|
+
builderComponents: false,
|
|
8
|
+
builderLinkComponent: false
|
|
9
|
+
},
|
|
3
10
|
name: 'Text',
|
|
4
11
|
static: true,
|
|
5
12
|
isRSC: true,
|
|
@@ -79,5 +79,11 @@ export const componentInfo: ComponentInfo = {
|
|
|
79
79
|
helperText: 'Load this video "lazily" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',
|
|
80
80
|
defaultValue: true,
|
|
81
81
|
advanced: true
|
|
82
|
-
}]
|
|
82
|
+
}],
|
|
83
|
+
shouldReceiveBuilderProps: {
|
|
84
|
+
builderBlock: true,
|
|
85
|
+
builderContext: false,
|
|
86
|
+
builderComponents: false,
|
|
87
|
+
builderLinkComponent: false
|
|
88
|
+
}
|
|
83
89
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Writable } from "svelte/store";
|
|
2
|
-
import { TARGET } from '../../constants/target';
|
|
3
2
|
import type { BuilderContextInterface, RegisteredComponent, RegisteredComponents } from '../../context/types';
|
|
4
3
|
import { evaluate } from '../../functions/evaluate/index';
|
|
5
4
|
import { extractTextStyles } from '../../functions/extract-text-styles';
|
|
6
5
|
import { getProcessedBlock } from '../../functions/get-processed-block';
|
|
7
6
|
import { getStyle } from '../../functions/get-style';
|
|
7
|
+
import type { ComponentInfo } from '../../server-index';
|
|
8
8
|
import type { BuilderBlock } from '../../types/builder-block';
|
|
9
9
|
import type { RepeatData } from './types';
|
|
10
10
|
export const getComponent = ({
|
|
@@ -100,26 +100,46 @@ export const getInheritedStyles = ({
|
|
|
100
100
|
}
|
|
101
101
|
return extractTextStyles(style);
|
|
102
102
|
};
|
|
103
|
+
const applyDefaults = (shouldReceiveBuilderProps: ComponentInfo['shouldReceiveBuilderProps']) => {
|
|
104
|
+
return {
|
|
105
|
+
// once we bump to a major version, toggle this to `false`.
|
|
106
|
+
builderBlock: true,
|
|
107
|
+
// once we bump to a major version, toggle this to `false`.
|
|
108
|
+
builderContext: true,
|
|
109
|
+
builderComponents: false,
|
|
110
|
+
builderLinkComponent: false,
|
|
111
|
+
...shouldReceiveBuilderProps
|
|
112
|
+
};
|
|
113
|
+
};
|
|
103
114
|
export const provideLinkComponent = (block: RegisteredComponent | null | undefined, linkComponent: any) => {
|
|
104
|
-
|
|
115
|
+
if (!block) return {};
|
|
116
|
+
const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderLinkComponent;
|
|
117
|
+
if (!shouldReceiveProp) return {};
|
|
118
|
+
return {
|
|
105
119
|
builderLinkComponent: linkComponent
|
|
106
|
-
}
|
|
120
|
+
};
|
|
107
121
|
};
|
|
108
122
|
export const provideRegisteredComponents = (block: RegisteredComponent | null | undefined, registeredComponents: RegisteredComponents) => {
|
|
109
|
-
|
|
123
|
+
if (!block) return {};
|
|
124
|
+
const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderComponents;
|
|
125
|
+
if (!shouldReceiveProp) return {};
|
|
126
|
+
return {
|
|
110
127
|
builderComponents: registeredComponents
|
|
111
|
-
}
|
|
128
|
+
};
|
|
112
129
|
};
|
|
113
130
|
export const provideBuilderBlock = (block: RegisteredComponent | null | undefined, builderBlock: BuilderBlock) => {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return
|
|
131
|
+
if (!block) return {};
|
|
132
|
+
const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderBlock;
|
|
133
|
+
if (!shouldReceiveProp) return {};
|
|
134
|
+
return {
|
|
118
135
|
builderBlock
|
|
119
|
-
}
|
|
136
|
+
};
|
|
120
137
|
};
|
|
121
138
|
export const provideBuilderContext = (block: RegisteredComponent | null | undefined, context: Writable<BuilderContextInterface>) => {
|
|
122
|
-
|
|
139
|
+
if (!block) return {};
|
|
140
|
+
const shouldReceiveProp = applyDefaults(block.shouldReceiveBuilderProps).builderContext;
|
|
141
|
+
if (!shouldReceiveProp) return {};
|
|
142
|
+
return {
|
|
123
143
|
builderContext: context
|
|
124
|
-
}
|
|
144
|
+
};
|
|
125
145
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
</script>
|
|
9
9
|
|
|
10
10
|
<script lang="ts">
|
|
11
|
-
import { onMount } from "svelte";
|
|
11
|
+
import { afterUpdate, onMount } from "svelte";
|
|
12
12
|
|
|
13
13
|
import { TARGET } from "../../constants/target";
|
|
14
14
|
import { handleABTestingSync } from "../../helpers/ab-tests";
|
|
@@ -84,6 +84,8 @@
|
|
|
84
84
|
*/
|
|
85
85
|
shouldRenderVariants = false;
|
|
86
86
|
});
|
|
87
|
+
|
|
88
|
+
afterUpdate(() => {});
|
|
87
89
|
</script>
|
|
88
90
|
|
|
89
91
|
{#if !isNestedRender && TARGET !== "reactNative"}
|
|
@@ -15,7 +15,7 @@ type VariantData = {
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* For more information on how this works,
|
|
18
|
-
* see our [SSR A/B Test Docs](https://github.com/BuilderIO/builder/tree/main/packages/sdks/
|
|
18
|
+
* see our [SSR A/B Test Docs](https://github.com/BuilderIO/builder/tree/main/packages/sdks/docs/SSR_AB_TEST.md)
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
export const UPDATE_COOKIES_AND_STYLES_SCRIPT = "function updateCookiesAndStyles(contentId, variants, isHydrationTarget) {\n function getAndSetVariantId() {\n function setCookie(name, value, days) {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${contentId}`;\n const variantInCookie = getCookie(cookieName);\n const availableIDs = variants.map(vr => vr.id).concat(contentId);\n if (variantInCookie && availableIDs.includes(variantInCookie)) {\n return variantInCookie;\n }\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n return variant.id;\n }\n }\n setCookie(cookieName, contentId);\n return contentId;\n }\n const winningVariantId = getAndSetVariantId();\n const styleEl = document.currentScript?.previousElementSibling;\n if (isHydrationTarget) {\n styleEl.remove();\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n } else {\n const newStyleStr = variants.concat({\n id: contentId\n }).filter(variant => variant.id !== winningVariantId).map(value => {\n return `.variant-${value.id} { display: none; }\n `;\n }).join('');\n styleEl.innerHTML = newStyleStr;\n }\n}";
|
|
@@ -16,6 +16,8 @@ import { componentInfo as formSelectComponentInfo } from '../blocks/form/select/
|
|
|
16
16
|
import { default as FormSelect } from '../blocks/form/select/index';
|
|
17
17
|
import { componentInfo as formSubmitButtonComponentInfo } from '../blocks/form/submit-button/component-info';
|
|
18
18
|
import { default as FormSubmitButton } from '../blocks/form/submit-button/index';
|
|
19
|
+
import { componentInfo as textAreaComponentInfo } from '../blocks/form/textarea/component-info';
|
|
20
|
+
import { default as Textarea } from '../blocks/form/textarea/index';
|
|
19
21
|
import { componentInfo as imgComponentInfo } from '../blocks/img/component-info';
|
|
20
22
|
import { default as Img } from '../blocks/img/index';
|
|
21
23
|
import { componentInfo as videoComponentInfo } from '../blocks/video/component-info';
|
|
@@ -40,6 +42,9 @@ export const getExtraComponents: () => RegisteredComponent[] = () => [{
|
|
|
40
42
|
}, {
|
|
41
43
|
component: FormSelect,
|
|
42
44
|
...formSelectComponentInfo
|
|
45
|
+
}, {
|
|
46
|
+
component: Textarea,
|
|
47
|
+
...textAreaComponentInfo
|
|
43
48
|
}]), {
|
|
44
49
|
component: Img,
|
|
45
50
|
...imgComponentInfo
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { TARGET } from './target';
|
|
2
|
+
const SDK_NAME_FOR_TARGET = (() => {
|
|
3
|
+
switch (TARGET) {
|
|
4
|
+
case 'rsc':
|
|
5
|
+
return 'react-nextjs';
|
|
6
|
+
case 'reactNative':
|
|
7
|
+
return 'react-native';
|
|
8
|
+
default:
|
|
9
|
+
return TARGET;
|
|
10
|
+
}
|
|
11
|
+
})();
|
|
12
|
+
export const SDK_NAME = (`@builder.io/sdk-${SDK_NAME_FOR_TARGET}` as const)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export const SDK_VERSION = "1.0
|
|
1
|
+
export const SDK_VERSION = "1.1.0"
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* THIS FILE IS EXPECTED TO EXIST WITH THIS EXACT NAME BY SUBSEQUENT BUNDLE STEPS THAT TRANSFORM IT.
|
|
3
|
+
* DO NOT RENAME THIS FILE.
|
|
4
|
+
*/
|
|
1
5
|
import { isBrowser } from '../is-browser';
|
|
2
6
|
import { runInBrowser } from './browser-runtime/browser';
|
|
3
7
|
import type { ExecutorArgs } from './helpers';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context, IsolateOptions } from 'isolated-vm';
|
|
2
|
+
import { SDK_NAME } from '../../../constants/sdk-name';
|
|
2
3
|
import { MSG_PREFIX, logger } from '../../../helpers/logger';
|
|
3
4
|
import { fastClone } from '../../fast-clone';
|
|
4
5
|
import { set } from '../../set';
|
|
@@ -77,6 +78,9 @@ export const setIvm = (ivm: IsolatedVMImport, options: IsolateOptions = {}) => {
|
|
|
77
78
|
IVM_INSTANCE = ivm;
|
|
78
79
|
setIsolateContext(options);
|
|
79
80
|
};
|
|
81
|
+
|
|
82
|
+
// only mention the script for SDKs that have it.
|
|
83
|
+
const SHOULD_MENTION_INITIALIZE_SCRIPT = SDK_NAME === '@builder.io/sdk-react-nextjs' || SDK_NAME === '@builder.io/sdk-react';
|
|
80
84
|
const getIvm = (): IsolatedVMImport => {
|
|
81
85
|
try {
|
|
82
86
|
if (IVM_INSTANCE) return IVM_INSTANCE;
|
|
@@ -85,14 +89,15 @@ const getIvm = (): IsolatedVMImport => {
|
|
|
85
89
|
} catch (error) {
|
|
86
90
|
logger.error('isolated-vm import error.', error);
|
|
87
91
|
}
|
|
88
|
-
|
|
92
|
+
const ERROR_MESSAGE = `${MSG_PREFIX}could not import \`isolated-vm\` module for safe script execution on a Node server.
|
|
89
93
|
|
|
90
|
-
In
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
SOLUTION: In a server-only execution path within your application, do one of the following:
|
|
95
|
+
|
|
96
|
+
${SHOULD_MENTION_INITIALIZE_SCRIPT ? '- import and call `initializeNodeRuntime()` from "${SDK_NAME}/node/init".' : ''}
|
|
97
|
+
- add the following import: \`await import('isolated-vm')\`.
|
|
93
98
|
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
For more information, visit https://builder.io/c/docs/integration-tips#enabling-data-bindings-in-node-environments`;
|
|
100
|
+
throw new Error(ERROR_MESSAGE);
|
|
96
101
|
};
|
|
97
102
|
function setIsolateContext(options: IsolateOptions = {
|
|
98
103
|
memoryLimit: 128
|
package/src/types/components.ts
CHANGED
|
@@ -115,5 +115,40 @@ export interface ComponentInfo {
|
|
|
115
115
|
|
|
116
116
|
// TO-DO: is this used?
|
|
117
117
|
hidden?: boolean;
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Whether or not the component should receive SDK-related props.
|
|
121
|
+
*/
|
|
122
|
+
shouldReceiveBuilderProps?: {
|
|
123
|
+
/**
|
|
124
|
+
* Whether or not the component should receive the `builderBlock` prop, containing the current Builder block being rendered.
|
|
125
|
+
*
|
|
126
|
+
* Defaults to `true`.
|
|
127
|
+
*/
|
|
128
|
+
builderBlock?: boolean;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Whether or not the component should receive the `builderContext` prop, containing the current context.
|
|
132
|
+
* The Builder Context contains a lot of data relevant to the current `Content` render.
|
|
133
|
+
* You can see more information [here](https://github.com/BuilderIO/builder/blob/main/packages/sdks/src/context/types.ts).
|
|
134
|
+
*
|
|
135
|
+
* Defaults to `true`.
|
|
136
|
+
*/
|
|
137
|
+
builderContext?: boolean;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Whether or not the component should receive the `builderComponents` array, containing the all registered components (custom and built-in).
|
|
141
|
+
*
|
|
142
|
+
* Defaults to `false`.
|
|
143
|
+
*/
|
|
144
|
+
builderComponents?: boolean;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Whether or not the component should receive the `builderLinkComponent` prop, containing the custom link component provided to `Content`.
|
|
148
|
+
*
|
|
149
|
+
* Defaults to `false`.
|
|
150
|
+
*/
|
|
151
|
+
builderLinkComponent?: boolean;
|
|
152
|
+
};
|
|
118
153
|
}
|
|
119
154
|
type Permission = 'read' | 'publish' | 'editCode' | 'editDesigns' | 'admin' | 'create'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|