@builder.io/sdk-vue 0.0.1-41 → 0.0.1-45
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/README.md +18 -0
- package/nuxt.js +1 -1
- package/nuxt2/src/blocks/button.vue +21 -20
- package/nuxt2/src/blocks/columns.vue +119 -119
- package/nuxt2/src/blocks/custom-code.vue +22 -22
- package/nuxt2/src/blocks/embed.vue +17 -17
- package/nuxt2/src/blocks/form.vue +145 -145
- package/nuxt2/src/blocks/fragment.vue +3 -3
- package/nuxt2/src/blocks/image.vue +71 -63
- package/nuxt2/src/blocks/img.vue +13 -13
- package/nuxt2/src/blocks/input.vue +52 -52
- package/nuxt2/src/blocks/raw-text.vue +12 -7
- package/nuxt2/src/blocks/section.vue +19 -19
- package/nuxt2/src/blocks/select.vue +17 -17
- package/nuxt2/src/blocks/submit-button.vue +15 -15
- package/nuxt2/src/blocks/symbol.vue +9 -9
- package/nuxt2/src/blocks/text.vue +11 -11
- package/nuxt2/src/blocks/textarea.vue +19 -19
- package/nuxt2/src/blocks/video.vue +61 -63
- package/nuxt2/src/components/error-boundary.vue +3 -1
- package/nuxt2/src/components/render-block.vue +21 -18
- package/nuxt2/src/components/render-blocks.vue +18 -13
- package/nuxt2/src/components/render-content.vue +47 -29
- package/nuxt2/src/constants/device-sizes.js +10 -9
- package/nuxt2/src/context/builder.context.js +3 -2
- package/nuxt2/src/functions/evaluate.js +42 -12
- package/{nuxt/src/context/builder.context.js → nuxt2/src/functions/event-handler-name.js} +4 -3
- package/nuxt2/src/functions/get-block-actions.js +37 -16
- package/nuxt2/src/functions/get-block-component-options.js +18 -8
- package/nuxt2/src/functions/get-block-properties.js +26 -10
- package/nuxt2/src/functions/get-block-styles.js +3 -2
- package/nuxt2/src/functions/get-block-tag.js +4 -3
- package/nuxt2/src/functions/get-content.js +80 -27
- package/nuxt2/src/functions/get-content.test.js +95 -0
- package/nuxt2/src/functions/get-fetch.js +29 -10
- package/nuxt2/src/functions/get-global-this.js +7 -6
- package/nuxt2/src/functions/get-processed-block.js +43 -16
- package/nuxt2/src/functions/get-processed-block.test.js +45 -20
- package/nuxt2/src/functions/get-target.js +4 -3
- package/nuxt2/src/functions/if-target.js +3 -2
- package/nuxt2/src/functions/is-browser.js +31 -8
- package/nuxt2/src/functions/is-editing.js +30 -8
- package/nuxt2/src/functions/is-iframe.js +26 -7
- package/nuxt2/src/functions/is-previewing.js +28 -9
- package/nuxt2/src/functions/is-react-native.js +4 -3
- package/nuxt2/src/functions/macro-eval.js +4 -4
- package/nuxt2/src/functions/name-event-handlers.js +15 -0
- package/nuxt2/src/functions/on-change.js +6 -5
- package/nuxt2/src/functions/on-change.test.js +50 -19
- package/nuxt2/src/functions/previewing-model-name.js +27 -8
- package/nuxt2/src/functions/register-component.js +62 -29
- package/nuxt2/src/functions/register.js +32 -13
- package/nuxt2/src/functions/set-editor-settings.js +29 -10
- package/nuxt2/src/functions/set.js +16 -4
- package/nuxt2/src/functions/set.test.js +38 -19
- package/nuxt2/src/functions/track.js +34 -12
- package/{nuxt/src/functions/get-block-styles.js → nuxt2/src/functions/transform-block.js} +5 -4
- package/nuxt2/src/index.js +31 -11
- package/nuxt2/src/scripts/init-editing.js +88 -43
- package/nuxt2/src/types/builder-block.js +2 -1
- package/nuxt2/src/types/builder-content.js +2 -1
- package/nuxt2/src/types/deep-partial.js +2 -1
- package/package.json +1 -1
- package/vue2/src/components/error-boundary.vue +3 -1
- package/vue2/src/constants/device-sizes.js +10 -9
- package/vue2/src/context/builder.context.js +3 -2
- package/vue2/src/functions/evaluate.js +42 -12
- package/{nuxt/src/functions/get-block-tag.js → vue2/src/functions/event-handler-name.js} +4 -5
- package/vue2/src/functions/get-block-actions.js +37 -16
- package/vue2/src/functions/get-block-component-options.js +18 -8
- package/vue2/src/functions/get-block-properties.js +26 -10
- package/vue2/src/functions/get-block-styles.js +3 -2
- package/vue2/src/functions/get-block-tag.js +4 -3
- package/vue2/src/functions/get-content.js +80 -27
- package/vue2/src/functions/get-content.test.js +95 -0
- package/vue2/src/functions/get-fetch.js +29 -10
- package/vue2/src/functions/get-global-this.js +7 -6
- package/vue2/src/functions/get-processed-block.js +43 -16
- package/vue2/src/functions/get-processed-block.test.js +45 -20
- package/vue2/src/functions/get-target.js +4 -3
- package/vue2/src/functions/if-target.js +3 -2
- package/vue2/src/functions/is-browser.js +31 -8
- package/vue2/src/functions/is-editing.js +30 -8
- package/vue2/src/functions/is-iframe.js +26 -7
- package/vue2/src/functions/is-previewing.js +28 -9
- package/vue2/src/functions/is-react-native.js +4 -3
- package/vue2/src/functions/macro-eval.js +4 -4
- package/vue2/src/functions/name-event-handlers.js +15 -0
- package/vue2/src/functions/on-change.js +6 -5
- package/vue2/src/functions/on-change.test.js +50 -19
- package/vue2/src/functions/previewing-model-name.js +27 -8
- package/vue2/src/functions/register-component.js +62 -29
- package/vue2/src/functions/register.js +32 -13
- package/vue2/src/functions/set-editor-settings.js +29 -10
- package/vue2/src/functions/set.js +16 -4
- package/vue2/src/functions/set.test.js +38 -19
- package/vue2/src/functions/track.js +34 -12
- package/{nuxt/src/functions/macro-eval.js → vue2/src/functions/transform-block.js} +5 -3
- package/vue2/src/index.js +31 -11
- package/vue2/src/scripts/init-editing.js +88 -43
- package/vue2/src/types/builder-block.js +2 -1
- package/vue2/src/types/builder-content.js +2 -1
- package/vue2/src/types/deep-partial.js +2 -1
- package/vue3/src/components/error-boundary.vue +3 -1
- package/vue3/src/constants/device-sizes.js +10 -9
- package/vue3/src/context/builder.context.js +3 -2
- package/vue3/src/functions/evaluate.js +42 -12
- package/vue3/src/functions/event-handler-name.js +12 -0
- package/vue3/src/functions/get-block-actions.js +37 -16
- package/vue3/src/functions/get-block-component-options.js +18 -8
- package/vue3/src/functions/get-block-properties.js +26 -10
- package/vue3/src/functions/get-block-styles.js +3 -2
- package/vue3/src/functions/get-block-tag.js +4 -3
- package/vue3/src/functions/get-content.js +80 -27
- package/vue3/src/functions/get-content.test.js +95 -0
- package/vue3/src/functions/get-fetch.js +29 -10
- package/vue3/src/functions/get-global-this.js +7 -6
- package/vue3/src/functions/get-processed-block.js +43 -16
- package/vue3/src/functions/get-processed-block.test.js +45 -20
- package/vue3/src/functions/get-target.js +4 -3
- package/vue3/src/functions/if-target.js +3 -2
- package/vue3/src/functions/is-browser.js +31 -8
- package/vue3/src/functions/is-editing.js +30 -8
- package/vue3/src/functions/is-iframe.js +26 -7
- package/vue3/src/functions/is-previewing.js +28 -9
- package/vue3/src/functions/is-react-native.js +4 -3
- package/vue3/src/functions/macro-eval.js +4 -4
- package/vue3/src/functions/name-event-handlers.js +15 -0
- package/vue3/src/functions/on-change.js +6 -5
- package/vue3/src/functions/on-change.test.js +50 -19
- package/vue3/src/functions/previewing-model-name.js +27 -8
- package/vue3/src/functions/register-component.js +62 -29
- package/vue3/src/functions/register.js +32 -13
- package/vue3/src/functions/set-editor-settings.js +29 -10
- package/vue3/src/functions/set.js +16 -4
- package/vue3/src/functions/set.test.js +38 -19
- package/vue3/src/functions/track.js +34 -12
- package/{nuxt/src/functions/get-target.js → vue3/src/functions/transform-block.js} +5 -4
- package/vue3/src/index.js +31 -11
- package/vue3/src/scripts/init-editing.js +88 -43
- package/vue3/src/types/builder-block.js +2 -1
- package/vue3/src/types/builder-content.js +2 -1
- package/vue3/src/types/deep-partial.js +2 -1
- package/nuxt/src/blocks/button.vue +0 -18
- package/nuxt/src/blocks/columns.vue +0 -54
- package/nuxt/src/blocks/custom-code.vue +0 -79
- package/nuxt/src/blocks/embed.vue +0 -60
- package/nuxt/src/blocks/form.vue +0 -314
- package/nuxt/src/blocks/fragment.vue +0 -10
- package/nuxt/src/blocks/image.vue +0 -100
- package/nuxt/src/blocks/img.vue +0 -29
- package/nuxt/src/blocks/input.vue +0 -31
- package/nuxt/src/blocks/raw-text.vue +0 -27
- package/nuxt/src/blocks/section.vue +0 -21
- package/nuxt/src/blocks/select.vue +0 -28
- package/nuxt/src/blocks/submit-button.vue +0 -12
- package/nuxt/src/blocks/symbol.vue +0 -24
- package/nuxt/src/blocks/text.vue +0 -10
- package/nuxt/src/blocks/textarea.vue +0 -16
- package/nuxt/src/blocks/video.vue +0 -39
- package/nuxt/src/components/block-styles.vue +0 -34
- package/nuxt/src/components/error-boundary.vue +0 -15
- package/nuxt/src/components/render-block.vue +0 -116
- package/nuxt/src/components/render-blocks.vue +0 -75
- package/nuxt/src/components/render-content.vue +0 -212
- package/nuxt/src/constants/device-sizes.js +0 -46
- package/nuxt/src/functions/evaluate.js +0 -42
- package/nuxt/src/functions/get-block-actions.js +0 -45
- package/nuxt/src/functions/get-block-component-options.js +0 -29
- package/nuxt/src/functions/get-block-properties.js +0 -46
- package/nuxt/src/functions/get-content.js +0 -139
- package/nuxt/src/functions/get-fetch.js +0 -35
- package/nuxt/src/functions/get-global-this.js +0 -25
- package/nuxt/src/functions/get-processed-block.js +0 -65
- package/nuxt/src/functions/get-processed-block.test.js +0 -44
- package/nuxt/src/functions/if-target.js +0 -13
- package/nuxt/src/functions/is-browser.js +0 -30
- package/nuxt/src/functions/is-editing.js +0 -30
- package/nuxt/src/functions/is-iframe.js +0 -30
- package/nuxt/src/functions/is-previewing.js +0 -37
- package/nuxt/src/functions/is-react-native.js +0 -13
- package/nuxt/src/functions/on-change.js +0 -34
- package/nuxt/src/functions/on-change.test.js +0 -38
- package/nuxt/src/functions/previewing-model-name.js +0 -34
- package/nuxt/src/functions/register-component.js +0 -73
- package/nuxt/src/functions/register.js +0 -52
- package/nuxt/src/functions/set-editor-settings.js +0 -38
- package/nuxt/src/functions/set.js +0 -18
- package/nuxt/src/functions/set.test.js +0 -35
- package/nuxt/src/functions/track.js +0 -41
- package/nuxt/src/index.js +0 -27
- package/nuxt/src/scripts/init-editing.js +0 -77
- package/nuxt/src/types/builder-block.js +0 -3
- package/nuxt/src/types/builder-content.js +0 -3
- package/nuxt/src/types/deep-partial.js +0 -3
package/README.md
CHANGED
|
@@ -15,3 +15,21 @@ Add to your `nuxt.config.js`:
|
|
|
15
15
|
```js
|
|
16
16
|
buildModules: ['@builder.io/sdk-vue/nuxt'];
|
|
17
17
|
```
|
|
18
|
+
|
|
19
|
+
Then register built in and custom components as seen [here](/examples/vue-nuxt/scripts/register-builder-components.js)
|
|
20
|
+
|
|
21
|
+
You can see a full example of using Builder.io + Nuxt [here](/examples/vue-nuxt)
|
|
22
|
+
|
|
23
|
+
## Status
|
|
24
|
+
|
|
25
|
+
This SDK is currently in beta
|
|
26
|
+
|
|
27
|
+
Left to implement:
|
|
28
|
+
|
|
29
|
+
- SSR (Nuxt currently can't find the custom components on the server, looking into)
|
|
30
|
+
- Stacking columns on breakpoints
|
|
31
|
+
- "View current draft" logic
|
|
32
|
+
- "+ add block" button when starting a page (for now just drag your first block to the "layers" tab)
|
|
33
|
+
- Symbols
|
|
34
|
+
- Server side a/b testing
|
|
35
|
+
- "animations" tab and "data" tab
|
package/nuxt.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<a
|
|
3
3
|
v-bind="attributes"
|
|
4
|
+
role="button"
|
|
4
5
|
v-if="link"
|
|
5
6
|
:href="link"
|
|
6
7
|
:target="openLinkInNewTab ? '_blank' : undefined"
|
|
@@ -10,39 +11,39 @@
|
|
|
10
11
|
<span v-bind="attributes" v-else="">{{ text }}</span>
|
|
11
12
|
</template>
|
|
12
13
|
<script>
|
|
13
|
-
import { registerComponent } from
|
|
14
|
+
import { registerComponent } from '../functions/register-component';
|
|
14
15
|
|
|
15
16
|
export default registerComponent(
|
|
16
17
|
{
|
|
17
|
-
name:
|
|
18
|
+
name: 'builder-button',
|
|
18
19
|
|
|
19
|
-
props: [
|
|
20
|
+
props: ['attributes', 'text', 'link', 'openLinkInNewTab'],
|
|
20
21
|
},
|
|
21
22
|
{
|
|
22
|
-
name:
|
|
23
|
+
name: 'Core:Button',
|
|
23
24
|
builtIn: true,
|
|
24
25
|
image:
|
|
25
|
-
|
|
26
|
+
'https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13',
|
|
26
27
|
defaultStyles: {
|
|
27
|
-
appearance:
|
|
28
|
-
paddingTop:
|
|
29
|
-
paddingBottom:
|
|
30
|
-
paddingLeft:
|
|
31
|
-
paddingRight:
|
|
32
|
-
backgroundColor:
|
|
33
|
-
color:
|
|
34
|
-
borderRadius:
|
|
35
|
-
textAlign:
|
|
36
|
-
cursor:
|
|
28
|
+
appearance: 'none',
|
|
29
|
+
paddingTop: '15px',
|
|
30
|
+
paddingBottom: '15px',
|
|
31
|
+
paddingLeft: '25px',
|
|
32
|
+
paddingRight: '25px',
|
|
33
|
+
backgroundColor: '#000000',
|
|
34
|
+
color: 'white',
|
|
35
|
+
borderRadius: '4px',
|
|
36
|
+
textAlign: 'center',
|
|
37
|
+
cursor: 'pointer',
|
|
37
38
|
},
|
|
38
39
|
inputs: [
|
|
39
|
-
{ name:
|
|
40
|
-
{ name:
|
|
40
|
+
{ name: 'text', type: 'text', defaultValue: 'Click me!', bubble: true },
|
|
41
|
+
{ name: 'link', type: 'url', bubble: true },
|
|
41
42
|
{
|
|
42
|
-
name:
|
|
43
|
-
type:
|
|
43
|
+
name: 'openLinkInNewTab',
|
|
44
|
+
type: 'boolean',
|
|
44
45
|
defaultValue: false,
|
|
45
|
-
friendlyName:
|
|
46
|
+
friendlyName: 'Open link in new tab',
|
|
46
47
|
},
|
|
47
48
|
],
|
|
48
49
|
static: true,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="builder-columns div-
|
|
2
|
+
<div class="builder-columns div-38o6qlysr38">
|
|
3
3
|
<div
|
|
4
|
-
class="builder-column div-
|
|
4
|
+
class="builder-column div-38o6qlysr38-2"
|
|
5
5
|
v-for="(column, index) in columns"
|
|
6
6
|
:style="{
|
|
7
7
|
width: getColumnCssWidth(index),
|
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
</div>
|
|
15
15
|
</template>
|
|
16
16
|
<script>
|
|
17
|
-
import RenderBlocks from
|
|
17
|
+
import RenderBlocks from '../components/render-blocks';
|
|
18
18
|
|
|
19
|
-
import { registerComponent } from
|
|
19
|
+
import { registerComponent } from '../functions/register-component';
|
|
20
20
|
|
|
21
21
|
export default registerComponent(
|
|
22
22
|
{
|
|
23
|
-
name:
|
|
24
|
-
components: {
|
|
25
|
-
props: [
|
|
23
|
+
name: 'builder-columns',
|
|
24
|
+
components: { 'render-blocks': async () => RenderBlocks },
|
|
25
|
+
props: ['space', 'columns'],
|
|
26
26
|
|
|
27
27
|
methods: {
|
|
28
28
|
getGutterSize() {
|
|
29
|
-
return typeof this.space ===
|
|
29
|
+
return typeof this.space === 'number' ? this.space || 0 : 20;
|
|
30
30
|
},
|
|
31
31
|
getColumns() {
|
|
32
32
|
return this.columns || [];
|
|
@@ -45,133 +45,133 @@ export default registerComponent(
|
|
|
45
45
|
},
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
name:
|
|
48
|
+
name: 'Columns',
|
|
49
49
|
builtIn: true,
|
|
50
50
|
inputs: [
|
|
51
51
|
{
|
|
52
|
-
name:
|
|
53
|
-
type:
|
|
52
|
+
name: 'columns',
|
|
53
|
+
type: 'array',
|
|
54
54
|
broadcast: true,
|
|
55
55
|
subFields: [
|
|
56
56
|
{
|
|
57
|
-
name:
|
|
58
|
-
type:
|
|
57
|
+
name: 'blocks',
|
|
58
|
+
type: 'array',
|
|
59
59
|
hideFromUI: true,
|
|
60
60
|
defaultValue: [
|
|
61
61
|
{
|
|
62
|
-
|
|
62
|
+
'@type': '@builder.io/sdk:Element',
|
|
63
63
|
responsiveStyles: {
|
|
64
64
|
large: {
|
|
65
|
-
display:
|
|
66
|
-
flexDirection:
|
|
67
|
-
alignItems:
|
|
68
|
-
flexShrink:
|
|
69
|
-
position:
|
|
70
|
-
marginTop:
|
|
71
|
-
textAlign:
|
|
72
|
-
lineHeight:
|
|
73
|
-
height:
|
|
74
|
-
minHeight:
|
|
75
|
-
minWidth:
|
|
76
|
-
overflow:
|
|
65
|
+
display: 'flex',
|
|
66
|
+
flexDirection: 'column',
|
|
67
|
+
alignItems: 'stretch',
|
|
68
|
+
flexShrink: '0',
|
|
69
|
+
position: 'relative',
|
|
70
|
+
marginTop: '30px',
|
|
71
|
+
textAlign: 'center',
|
|
72
|
+
lineHeight: 'normal',
|
|
73
|
+
height: 'auto',
|
|
74
|
+
minHeight: '20px',
|
|
75
|
+
minWidth: '20px',
|
|
76
|
+
overflow: 'hidden',
|
|
77
77
|
},
|
|
78
78
|
},
|
|
79
79
|
component: {
|
|
80
|
-
name:
|
|
80
|
+
name: 'Image',
|
|
81
81
|
options: {
|
|
82
82
|
image:
|
|
83
|
-
|
|
84
|
-
backgroundPosition:
|
|
85
|
-
backgroundSize:
|
|
83
|
+
'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
|
|
84
|
+
backgroundPosition: 'center',
|
|
85
|
+
backgroundSize: 'cover',
|
|
86
86
|
aspectRatio: 0.7004048582995948,
|
|
87
87
|
},
|
|
88
88
|
},
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
|
-
|
|
91
|
+
'@type': '@builder.io/sdk:Element',
|
|
92
92
|
responsiveStyles: {
|
|
93
93
|
large: {
|
|
94
|
-
display:
|
|
95
|
-
flexDirection:
|
|
96
|
-
alignItems:
|
|
97
|
-
flexShrink:
|
|
98
|
-
position:
|
|
99
|
-
marginTop:
|
|
100
|
-
textAlign:
|
|
101
|
-
lineHeight:
|
|
102
|
-
height:
|
|
94
|
+
display: 'flex',
|
|
95
|
+
flexDirection: 'column',
|
|
96
|
+
alignItems: 'stretch',
|
|
97
|
+
flexShrink: '0',
|
|
98
|
+
position: 'relative',
|
|
99
|
+
marginTop: '30px',
|
|
100
|
+
textAlign: 'center',
|
|
101
|
+
lineHeight: 'normal',
|
|
102
|
+
height: 'auto',
|
|
103
103
|
},
|
|
104
104
|
},
|
|
105
105
|
component: {
|
|
106
|
-
name:
|
|
107
|
-
options: { text:
|
|
106
|
+
name: 'Text',
|
|
107
|
+
options: { text: '<p>Enter some text...</p>' },
|
|
108
108
|
},
|
|
109
109
|
},
|
|
110
110
|
],
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
name:
|
|
114
|
-
type:
|
|
113
|
+
name: 'width',
|
|
114
|
+
type: 'number',
|
|
115
115
|
hideFromUI: true,
|
|
116
|
-
helperText:
|
|
116
|
+
helperText: 'Width %, e.g. set to 50 to fill half of the space',
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
|
-
name:
|
|
120
|
-
type:
|
|
119
|
+
name: 'link',
|
|
120
|
+
type: 'url',
|
|
121
121
|
helperText:
|
|
122
|
-
|
|
122
|
+
'Optionally set a url that clicking this column will link to',
|
|
123
123
|
},
|
|
124
124
|
],
|
|
125
125
|
defaultValue: [
|
|
126
126
|
{
|
|
127
127
|
blocks: [
|
|
128
128
|
{
|
|
129
|
-
|
|
129
|
+
'@type': '@builder.io/sdk:Element',
|
|
130
130
|
responsiveStyles: {
|
|
131
131
|
large: {
|
|
132
|
-
display:
|
|
133
|
-
flexDirection:
|
|
134
|
-
alignItems:
|
|
135
|
-
flexShrink:
|
|
136
|
-
position:
|
|
137
|
-
marginTop:
|
|
138
|
-
textAlign:
|
|
139
|
-
lineHeight:
|
|
140
|
-
height:
|
|
141
|
-
minHeight:
|
|
142
|
-
minWidth:
|
|
143
|
-
overflow:
|
|
132
|
+
display: 'flex',
|
|
133
|
+
flexDirection: 'column',
|
|
134
|
+
alignItems: 'stretch',
|
|
135
|
+
flexShrink: '0',
|
|
136
|
+
position: 'relative',
|
|
137
|
+
marginTop: '30px',
|
|
138
|
+
textAlign: 'center',
|
|
139
|
+
lineHeight: 'normal',
|
|
140
|
+
height: 'auto',
|
|
141
|
+
minHeight: '20px',
|
|
142
|
+
minWidth: '20px',
|
|
143
|
+
overflow: 'hidden',
|
|
144
144
|
},
|
|
145
145
|
},
|
|
146
146
|
component: {
|
|
147
|
-
name:
|
|
147
|
+
name: 'Image',
|
|
148
148
|
options: {
|
|
149
149
|
image:
|
|
150
|
-
|
|
151
|
-
backgroundPosition:
|
|
152
|
-
backgroundSize:
|
|
150
|
+
'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
|
|
151
|
+
backgroundPosition: 'center',
|
|
152
|
+
backgroundSize: 'cover',
|
|
153
153
|
aspectRatio: 0.7004048582995948,
|
|
154
154
|
},
|
|
155
155
|
},
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
|
-
|
|
158
|
+
'@type': '@builder.io/sdk:Element',
|
|
159
159
|
responsiveStyles: {
|
|
160
160
|
large: {
|
|
161
|
-
display:
|
|
162
|
-
flexDirection:
|
|
163
|
-
alignItems:
|
|
164
|
-
flexShrink:
|
|
165
|
-
position:
|
|
166
|
-
marginTop:
|
|
167
|
-
textAlign:
|
|
168
|
-
lineHeight:
|
|
169
|
-
height:
|
|
161
|
+
display: 'flex',
|
|
162
|
+
flexDirection: 'column',
|
|
163
|
+
alignItems: 'stretch',
|
|
164
|
+
flexShrink: '0',
|
|
165
|
+
position: 'relative',
|
|
166
|
+
marginTop: '30px',
|
|
167
|
+
textAlign: 'center',
|
|
168
|
+
lineHeight: 'normal',
|
|
169
|
+
height: 'auto',
|
|
170
170
|
},
|
|
171
171
|
},
|
|
172
172
|
component: {
|
|
173
|
-
name:
|
|
174
|
-
options: { text:
|
|
173
|
+
name: 'Text',
|
|
174
|
+
options: { text: '<p>Enter some text...</p>' },
|
|
175
175
|
},
|
|
176
176
|
},
|
|
177
177
|
],
|
|
@@ -179,52 +179,52 @@ export default registerComponent(
|
|
|
179
179
|
{
|
|
180
180
|
blocks: [
|
|
181
181
|
{
|
|
182
|
-
|
|
182
|
+
'@type': '@builder.io/sdk:Element',
|
|
183
183
|
responsiveStyles: {
|
|
184
184
|
large: {
|
|
185
|
-
display:
|
|
186
|
-
flexDirection:
|
|
187
|
-
alignItems:
|
|
188
|
-
flexShrink:
|
|
189
|
-
position:
|
|
190
|
-
marginTop:
|
|
191
|
-
textAlign:
|
|
192
|
-
lineHeight:
|
|
193
|
-
height:
|
|
194
|
-
minHeight:
|
|
195
|
-
minWidth:
|
|
196
|
-
overflow:
|
|
185
|
+
display: 'flex',
|
|
186
|
+
flexDirection: 'column',
|
|
187
|
+
alignItems: 'stretch',
|
|
188
|
+
flexShrink: '0',
|
|
189
|
+
position: 'relative',
|
|
190
|
+
marginTop: '30px',
|
|
191
|
+
textAlign: 'center',
|
|
192
|
+
lineHeight: 'normal',
|
|
193
|
+
height: 'auto',
|
|
194
|
+
minHeight: '20px',
|
|
195
|
+
minWidth: '20px',
|
|
196
|
+
overflow: 'hidden',
|
|
197
197
|
},
|
|
198
198
|
},
|
|
199
199
|
component: {
|
|
200
|
-
name:
|
|
200
|
+
name: 'Image',
|
|
201
201
|
options: {
|
|
202
202
|
image:
|
|
203
|
-
|
|
204
|
-
backgroundPosition:
|
|
205
|
-
backgroundSize:
|
|
203
|
+
'https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d',
|
|
204
|
+
backgroundPosition: 'center',
|
|
205
|
+
backgroundSize: 'cover',
|
|
206
206
|
aspectRatio: 0.7004048582995948,
|
|
207
207
|
},
|
|
208
208
|
},
|
|
209
209
|
},
|
|
210
210
|
{
|
|
211
|
-
|
|
211
|
+
'@type': '@builder.io/sdk:Element',
|
|
212
212
|
responsiveStyles: {
|
|
213
213
|
large: {
|
|
214
|
-
display:
|
|
215
|
-
flexDirection:
|
|
216
|
-
alignItems:
|
|
217
|
-
flexShrink:
|
|
218
|
-
position:
|
|
219
|
-
marginTop:
|
|
220
|
-
textAlign:
|
|
221
|
-
lineHeight:
|
|
222
|
-
height:
|
|
214
|
+
display: 'flex',
|
|
215
|
+
flexDirection: 'column',
|
|
216
|
+
alignItems: 'stretch',
|
|
217
|
+
flexShrink: '0',
|
|
218
|
+
position: 'relative',
|
|
219
|
+
marginTop: '30px',
|
|
220
|
+
textAlign: 'center',
|
|
221
|
+
lineHeight: 'normal',
|
|
222
|
+
height: 'auto',
|
|
223
223
|
},
|
|
224
224
|
},
|
|
225
225
|
component: {
|
|
226
|
-
name:
|
|
227
|
-
options: { text:
|
|
226
|
+
name: 'Text',
|
|
227
|
+
options: { text: '<p>Enter some text...</p>' },
|
|
228
228
|
},
|
|
229
229
|
},
|
|
230
230
|
],
|
|
@@ -234,27 +234,27 @@ export default registerComponent(
|
|
|
234
234
|
" function clearWidths() { columns.forEach(col => { col.delete('width'); }); } const columns = options.get('columns') as Array<map<string, any>>; if (Array.isArray(columns)) { const containsColumnWithWidth = !!columns.find(col => col.get('width')); if (containsColumnWithWidth) { const containsColumnWithoutWidth = !!columns.find(col => !col.get('width')); if (containsColumnWithoutWidth) { clearWidths(); } else { const sumWidths = columns.reduce((memo, col) => { return memo + col.get('width'); }, 0); const widthsDontAddUp = sumWidths !== 100; if (widthsDontAddUp) { clearWidths(); } } } } ",
|
|
235
235
|
},
|
|
236
236
|
{
|
|
237
|
-
name:
|
|
238
|
-
type:
|
|
237
|
+
name: 'space',
|
|
238
|
+
type: 'number',
|
|
239
239
|
defaultValue: 20,
|
|
240
|
-
helperText:
|
|
240
|
+
helperText: 'Size of gap between columns',
|
|
241
241
|
advanced: true,
|
|
242
242
|
},
|
|
243
243
|
{
|
|
244
|
-
name:
|
|
245
|
-
type:
|
|
246
|
-
defaultValue:
|
|
244
|
+
name: 'stackColumnsAt',
|
|
245
|
+
type: 'string',
|
|
246
|
+
defaultValue: 'tablet',
|
|
247
247
|
helperText:
|
|
248
|
-
|
|
249
|
-
enum: [
|
|
248
|
+
'Convert horizontal columns to vertical at what device size',
|
|
249
|
+
enum: ['tablet', 'mobile', 'never'],
|
|
250
250
|
advanced: true,
|
|
251
251
|
},
|
|
252
252
|
{
|
|
253
|
-
name:
|
|
254
|
-
type:
|
|
253
|
+
name: 'reverseColumnsWhenStacked',
|
|
254
|
+
type: 'boolean',
|
|
255
255
|
defaultValue: false,
|
|
256
256
|
helperText:
|
|
257
|
-
|
|
257
|
+
'When stacking columns for mobile devices, reverse the ordering',
|
|
258
258
|
advanced: true,
|
|
259
259
|
},
|
|
260
260
|
],
|
|
@@ -262,12 +262,12 @@ export default registerComponent(
|
|
|
262
262
|
);
|
|
263
263
|
</script>
|
|
264
264
|
<style scoped>
|
|
265
|
-
.div-
|
|
265
|
+
.div-38o6qlysr38 {
|
|
266
266
|
display: flex;
|
|
267
267
|
align-items: stretch;
|
|
268
268
|
line-height: normal;
|
|
269
269
|
}
|
|
270
|
-
.div-
|
|
270
|
+
.div-38o6qlysr38-2 {
|
|
271
271
|
flex-grow: 1;
|
|
272
272
|
}
|
|
273
273
|
</style>
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
></div>
|
|
11
11
|
</template>
|
|
12
12
|
<script>
|
|
13
|
-
import { registerComponent } from
|
|
13
|
+
import { registerComponent } from '../functions/register-component';
|
|
14
14
|
|
|
15
15
|
export default registerComponent(
|
|
16
16
|
{
|
|
17
|
-
name:
|
|
17
|
+
name: 'builder-custom-code',
|
|
18
18
|
|
|
19
|
-
props: [
|
|
19
|
+
props: ['replaceNodes', 'code'],
|
|
20
20
|
|
|
21
21
|
data: () => ({ scriptsInserted: [], scriptsRun: [] }),
|
|
22
22
|
|
|
@@ -27,9 +27,9 @@ export default registerComponent(
|
|
|
27
27
|
methods: {
|
|
28
28
|
findAndRunScripts() {
|
|
29
29
|
// TODO: Move this function to standalone one in '@builder.io/utils'
|
|
30
|
-
if (this.$refs.elem && typeof window !==
|
|
30
|
+
if (this.$refs.elem && typeof window !== 'undefined') {
|
|
31
31
|
/** @type {HTMLScriptElement[]} */
|
|
32
|
-
const scripts = this.$refs.elem.getElementsByTagName(
|
|
32
|
+
const scripts = this.$refs.elem.getElementsByTagName('script');
|
|
33
33
|
|
|
34
34
|
for (let i = 0; i < scripts.length; i++) {
|
|
35
35
|
const script = scripts[i];
|
|
@@ -40,16 +40,16 @@ export default registerComponent(
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
this.scriptsInserted.push(script.src);
|
|
43
|
-
const newScript = document.createElement(
|
|
43
|
+
const newScript = document.createElement('script');
|
|
44
44
|
newScript.async = true;
|
|
45
45
|
newScript.src = script.src;
|
|
46
46
|
document.head.appendChild(newScript);
|
|
47
47
|
} else if (
|
|
48
48
|
!script.type ||
|
|
49
49
|
[
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
'text/javascript',
|
|
51
|
+
'application/javascript',
|
|
52
|
+
'application/ecmascript',
|
|
53
53
|
].includes(script.type)
|
|
54
54
|
) {
|
|
55
55
|
if (this.scriptsRun.includes(script.innerText)) {
|
|
@@ -60,7 +60,7 @@ export default registerComponent(
|
|
|
60
60
|
this.scriptsRun.push(script.innerText);
|
|
61
61
|
new Function(script.innerText)();
|
|
62
62
|
} catch (error) {
|
|
63
|
-
console.warn(
|
|
63
|
+
console.warn('`CustomCode`: Error running script:', error);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -68,7 +68,7 @@ export default registerComponent(
|
|
|
68
68
|
},
|
|
69
69
|
_classStringToObject(str) {
|
|
70
70
|
const obj = {};
|
|
71
|
-
if (typeof str !==
|
|
71
|
+
if (typeof str !== 'string') {
|
|
72
72
|
return obj;
|
|
73
73
|
}
|
|
74
74
|
const classNames = str.trim().split(/\s+/);
|
|
@@ -80,30 +80,30 @@ export default registerComponent(
|
|
|
80
80
|
},
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
|
-
name:
|
|
83
|
+
name: 'Custom Code',
|
|
84
84
|
static: true,
|
|
85
85
|
builtIn: true,
|
|
86
|
-
requiredPermissions: [
|
|
86
|
+
requiredPermissions: ['editCode'],
|
|
87
87
|
inputs: [
|
|
88
88
|
{
|
|
89
|
-
name:
|
|
90
|
-
type:
|
|
89
|
+
name: 'code',
|
|
90
|
+
type: 'html',
|
|
91
91
|
required: true,
|
|
92
|
-
defaultValue:
|
|
92
|
+
defaultValue: '<p>Hello there, I am custom HTML code!</p>',
|
|
93
93
|
code: true,
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
|
-
name:
|
|
97
|
-
type:
|
|
98
|
-
helperText:
|
|
96
|
+
name: 'replaceNodes',
|
|
97
|
+
type: 'boolean',
|
|
98
|
+
helperText: 'Preserve server rendered dom nodes',
|
|
99
99
|
advanced: true,
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
|
-
name:
|
|
103
|
-
type:
|
|
102
|
+
name: 'scriptsClientOnly',
|
|
103
|
+
type: 'boolean',
|
|
104
104
|
defaultValue: false,
|
|
105
105
|
helperText:
|
|
106
|
-
|
|
106
|
+
'Only print and run scripts on the client. Important when scripts influence DOM that could be replaced when client loads',
|
|
107
107
|
advanced: true,
|
|
108
108
|
},
|
|
109
109
|
],
|