@builder.io/sdk-react-native 0.0.14 → 0.0.15
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/package.json +1 -1
- package/src/blocks/columns/columns.js +65 -2
- package/src/blocks/section/section.js +12 -3
- package/src/blocks/symbol/symbol.js +11 -2
- package/src/components/render-block/render-block.js +10 -5
- package/src/components/render-content/render-content.js +18 -3
- package/src/functions/get-block-properties.js +25 -16
- package/src/functions/get-react-native-block-styles.js +3 -2
- package/src/functions/transform-block-properties.js +17 -0
- package/src/helpers/css.js +9 -3
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { View, StyleSheet } from "react-native";
|
|
3
3
|
import RenderBlocks from "../../components/render-blocks.js";
|
|
4
|
+
import { getSizesForBreakpoints } from "../../constants/device-sizes";
|
|
5
|
+
import RenderInlinedStyles from "../../components/render-inlined-styles.js";
|
|
6
|
+
import { TARGET } from "../../constants/target.js";
|
|
7
|
+
import { convertStyleMapToCSS } from "../../helpers/css";
|
|
4
8
|
function Columns(props) {
|
|
5
9
|
var _a;
|
|
6
10
|
function getGutterSize() {
|
|
@@ -41,9 +45,68 @@ function Columns(props) {
|
|
|
41
45
|
"--column-margin-left-tablet": maybeApplyForTablet(marginLeft)
|
|
42
46
|
};
|
|
43
47
|
}
|
|
48
|
+
function getWidthForBreakpointSize(size) {
|
|
49
|
+
const breakpointSizes = getSizesForBreakpoints(props.customBreakpoints || {});
|
|
50
|
+
return breakpointSizes[size].max;
|
|
51
|
+
}
|
|
52
|
+
function columnStyleObjects() {
|
|
53
|
+
return {
|
|
54
|
+
columns: {
|
|
55
|
+
small: {
|
|
56
|
+
flexDirection: "var(--flex-dir)",
|
|
57
|
+
alignItems: "stretch"
|
|
58
|
+
},
|
|
59
|
+
medium: {
|
|
60
|
+
flexDirection: "var(--flex-dir-tablet)",
|
|
61
|
+
alignItems: "stretch"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
column: {
|
|
65
|
+
small: {
|
|
66
|
+
width: "var(--column-width) !important",
|
|
67
|
+
marginLeft: "var(--column-margin-left) !important"
|
|
68
|
+
},
|
|
69
|
+
medium: {
|
|
70
|
+
width: "var(--column-width-tablet) !important",
|
|
71
|
+
marginLeft: "var(--column-margin-left-tablet) !important"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function columnsStyles() {
|
|
77
|
+
return `
|
|
78
|
+
@media (max-width: ${getWidthForBreakpointSize("medium")}px) {
|
|
79
|
+
.${props.builderBlock.id}-breakpoints {
|
|
80
|
+
${convertStyleMapToCSS(columnStyleObjects().columns.medium)}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.${props.builderBlock.id}-breakpoints > .builder-column {
|
|
84
|
+
${convertStyleMapToCSS(columnStyleObjects().column.medium)}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@media (max-width: ${getWidthForBreakpointSize("small")}px) {
|
|
89
|
+
.${props.builderBlock.id}-breakpoints {
|
|
90
|
+
${convertStyleMapToCSS(columnStyleObjects().columns.small)}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.${props.builderBlock.id}-breakpoints > .builder-column {
|
|
94
|
+
${convertStyleMapToCSS(columnStyleObjects().column.small)}
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
function reactNativeColumnsStyles() {
|
|
100
|
+
return columnStyleObjects.columns.small;
|
|
101
|
+
}
|
|
102
|
+
function reactNativeColumnStyles() {
|
|
103
|
+
return columnStyleObjects.column.small;
|
|
104
|
+
}
|
|
44
105
|
return /* @__PURE__ */ React.createElement(View, {
|
|
45
106
|
style: styles.view1
|
|
46
|
-
},
|
|
107
|
+
}, TARGET !== "reactNative" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(RenderInlinedStyles, {
|
|
108
|
+
styles: columnsStyles()
|
|
109
|
+
})) : null, (_a = props.columns) == null ? void 0 : _a.map((column, index) => /* @__PURE__ */ React.createElement(View, {
|
|
47
110
|
style: styles.view2,
|
|
48
111
|
key: index
|
|
49
112
|
}, /* @__PURE__ */ React.createElement(RenderBlocks, {
|
|
@@ -56,7 +119,7 @@ function Columns(props) {
|
|
|
56
119
|
}))));
|
|
57
120
|
}
|
|
58
121
|
const styles = StyleSheet.create({
|
|
59
|
-
view1: { display: "flex"
|
|
122
|
+
view1: { display: "flex" },
|
|
60
123
|
view2: { display: "flex", flexDirection: "column", alignItems: "stretch" }
|
|
61
124
|
});
|
|
62
125
|
export {
|
|
@@ -22,9 +22,18 @@ import * as React from "react";
|
|
|
22
22
|
import { View } from "react-native";
|
|
23
23
|
function SectionComponent(props) {
|
|
24
24
|
return /* @__PURE__ */ React.createElement(View, __spreadProps(__spreadValues({}, props.attributes), {
|
|
25
|
-
style:
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
style: {
|
|
26
|
+
width: "100%",
|
|
27
|
+
alignSelf: "stretch",
|
|
28
|
+
flexGrow: "1",
|
|
29
|
+
boxSizing: "border-box",
|
|
30
|
+
maxWidth: `${props.maxWidth && typeof props.maxWidth === "number" ? props.maxWidth : 1200}px`,
|
|
31
|
+
display: "flex",
|
|
32
|
+
flexDirection: "column",
|
|
33
|
+
alignItems: "stretch",
|
|
34
|
+
marginLeft: "auto",
|
|
35
|
+
marginRight: "auto"
|
|
36
|
+
}
|
|
28
37
|
}), /* @__PURE__ */ React.createElement(BaseText, null, props.children));
|
|
29
38
|
}
|
|
30
39
|
export {
|
|
@@ -23,9 +23,18 @@ import { useState, useContext, useEffect } from "react";
|
|
|
23
23
|
import RenderContent from "../../components/render-content/render-content.js";
|
|
24
24
|
import BuilderContext from "../../context/builder.context.js";
|
|
25
25
|
import { getContent } from "../../functions/get-content/index.js";
|
|
26
|
+
import { TARGET } from "../../constants/target";
|
|
26
27
|
function Symbol(props) {
|
|
27
28
|
var _a, _b, _c, _d, _e;
|
|
28
|
-
|
|
29
|
+
function className() {
|
|
30
|
+
var _a2, _b2;
|
|
31
|
+
return [
|
|
32
|
+
...TARGET === "vue2" || TARGET === "vue3" ? Object.keys(props.attributes.class) : [props.attributes.class],
|
|
33
|
+
"builder-symbol",
|
|
34
|
+
((_a2 = props.symbol) == null ? void 0 : _a2.inline) ? "builder-inline-symbol" : void 0,
|
|
35
|
+
((_b2 = props.symbol) == null ? void 0 : _b2.dynamic) || props.dynamic ? "builder-dynamic-symbol" : void 0
|
|
36
|
+
].filter(Boolean).join(" ");
|
|
37
|
+
}
|
|
29
38
|
const [fetchedContent, setFetchedContent] = useState(() => null);
|
|
30
39
|
function contentToUse() {
|
|
31
40
|
var _a2;
|
|
@@ -48,7 +57,7 @@ function Symbol(props) {
|
|
|
48
57
|
}, [props.symbol, fetchedContent]);
|
|
49
58
|
return /* @__PURE__ */ React.createElement(View, __spreadProps(__spreadValues({}, props.attributes), {
|
|
50
59
|
dataSet: {
|
|
51
|
-
class: className
|
|
60
|
+
class: className()
|
|
52
61
|
}
|
|
53
62
|
}), /* @__PURE__ */ React.createElement(RenderContent, {
|
|
54
63
|
apiKey: builderContext.apiKey,
|
|
@@ -88,10 +88,12 @@ function RenderBlock(props) {
|
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
function attributes() {
|
|
91
|
-
|
|
91
|
+
const blockProperties = getBlockProperties(useBlock());
|
|
92
|
+
return __spreadValues(__spreadValues({}, blockProperties), TARGET === "reactNative" ? {
|
|
92
93
|
style: getReactNativeBlockStyles({
|
|
93
94
|
block: useBlock(),
|
|
94
|
-
context: props.context
|
|
95
|
+
context: props.context,
|
|
96
|
+
blockStyles: blockProperties.style
|
|
95
97
|
})
|
|
96
98
|
} : {});
|
|
97
99
|
}
|
|
@@ -100,12 +102,14 @@ function RenderBlock(props) {
|
|
|
100
102
|
return !((_a2 = component == null ? void 0 : component()) == null ? void 0 : _a2.noWrap);
|
|
101
103
|
}
|
|
102
104
|
function renderComponentProps() {
|
|
103
|
-
var _a2;
|
|
105
|
+
var _a2, _b2, _c2, _d;
|
|
104
106
|
return {
|
|
105
107
|
blockChildren: useChildren(),
|
|
106
108
|
componentRef: (_a2 = component == null ? void 0 : component()) == null ? void 0 : _a2.component,
|
|
107
|
-
componentOptions: __spreadValues(__spreadValues({}, getBlockComponentOptions(useBlock())), shouldWrap() ? {} : {
|
|
109
|
+
componentOptions: __spreadProps(__spreadValues(__spreadValues({}, getBlockComponentOptions(useBlock())), shouldWrap() ? {} : {
|
|
108
110
|
attributes: __spreadValues(__spreadValues({}, attributes()), actions())
|
|
111
|
+
}), {
|
|
112
|
+
customBreakpoints: (_d = (_c2 = (_b2 = childrenContext == null ? void 0 : childrenContext()) == null ? void 0 : _b2.content) == null ? void 0 : _c2.meta) == null ? void 0 : _d.breakpoints
|
|
109
113
|
}),
|
|
110
114
|
context: childrenContext()
|
|
111
115
|
};
|
|
@@ -153,7 +157,8 @@ function RenderBlock(props) {
|
|
|
153
157
|
}
|
|
154
158
|
const styles = getReactNativeBlockStyles({
|
|
155
159
|
block: useBlock(),
|
|
156
|
-
context: props.context
|
|
160
|
+
context: props.context,
|
|
161
|
+
blockStyles: attributes().style
|
|
157
162
|
});
|
|
158
163
|
return extractTextStyles(styles);
|
|
159
164
|
}
|
|
@@ -44,18 +44,22 @@ function RenderContent(props) {
|
|
|
44
44
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
|
|
45
45
|
const elementRef = useRef(null);
|
|
46
46
|
const [forceReRenderCount, setForceReRenderCount] = useState(() => 0);
|
|
47
|
+
const [overrideContent, setOverrideContent] = useState(() => null);
|
|
47
48
|
function useContent() {
|
|
48
|
-
var _a2;
|
|
49
|
+
var _a2, _b2, _c2, _d2, _e2;
|
|
49
50
|
if (!props.content && !overrideContent) {
|
|
50
51
|
return void 0;
|
|
51
52
|
}
|
|
52
53
|
const mergedContent = __spreadProps(__spreadValues(__spreadValues({}, props.content), overrideContent), {
|
|
53
|
-
data: __spreadValues(__spreadValues(__spreadValues({}, (_a2 = props.content) == null ? void 0 : _a2.data), props.data), overrideContent == null ? void 0 : overrideContent.data)
|
|
54
|
+
data: __spreadValues(__spreadValues(__spreadValues({}, (_a2 = props.content) == null ? void 0 : _a2.data), props.data), overrideContent == null ? void 0 : overrideContent.data),
|
|
55
|
+
meta: __spreadProps(__spreadValues(__spreadValues({}, (_b2 = props.content) == null ? void 0 : _b2.meta), overrideContent == null ? void 0 : overrideContent.meta), {
|
|
56
|
+
breakpoints: useBreakpoints || ((_c2 = overrideContent == null ? void 0 : overrideContent.meta) == null ? void 0 : _c2.breakpoints) || ((_e2 = (_d2 = props.content) == null ? void 0 : _d2.meta) == null ? void 0 : _e2.breakpoints)
|
|
57
|
+
})
|
|
54
58
|
});
|
|
55
59
|
return mergedContent;
|
|
56
60
|
}
|
|
57
|
-
const [overrideContent, setOverrideContent] = useState(() => null);
|
|
58
61
|
const [update, setUpdate] = useState(() => 0);
|
|
62
|
+
const [useBreakpoints, setUseBreakpoints] = useState(() => null);
|
|
59
63
|
function canTrackToUse() {
|
|
60
64
|
return props.canTrack || true;
|
|
61
65
|
}
|
|
@@ -81,9 +85,20 @@ function RenderContent(props) {
|
|
|
81
85
|
return allComponents;
|
|
82
86
|
}
|
|
83
87
|
function processMessage(event) {
|
|
88
|
+
var _a2;
|
|
84
89
|
const { data } = event;
|
|
85
90
|
if (data) {
|
|
86
91
|
switch (data.type) {
|
|
92
|
+
case "builder.configureSdk": {
|
|
93
|
+
const messageContent = data.data;
|
|
94
|
+
const { breakpoints, contentId } = messageContent;
|
|
95
|
+
if (!contentId || contentId !== ((_a2 = useContent == null ? void 0 : useContent()) == null ? void 0 : _a2.id)) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
setUseBreakpoints(breakpoints);
|
|
99
|
+
setForceReRenderCount(forceReRenderCount + 1);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
87
102
|
case "builder.contentUpdate": {
|
|
88
103
|
const messageContent = data.data;
|
|
89
104
|
const key = messageContent.key || messageContent.alias || messageContent.entry || messageContent.modelName;
|
|
@@ -17,24 +17,33 @@ var __spreadValues = (a, b) => {
|
|
|
17
17
|
return a;
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { TARGET } from "../constants/target.js";
|
|
21
|
+
import { convertStyleMapToCSSArray } from "../helpers/css.js";
|
|
22
|
+
import { transformBlockProperties } from "./transform-block-properties.js";
|
|
22
23
|
function getBlockProperties(block) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
el.setAttribute("builder-id", block.id);
|
|
29
|
-
el.classList.add(block.id);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
dataSet: {
|
|
34
|
-
"builder-id": block.id,
|
|
35
|
-
class: [block.id, "builder-block", block.class].filter(Boolean).join(" ")
|
|
36
|
-
}
|
|
24
|
+
var _a;
|
|
25
|
+
const properties = __spreadProps(__spreadValues({}, block.properties), {
|
|
26
|
+
"builder-id": block.id,
|
|
27
|
+
style: getStyleAttribute(block.style),
|
|
28
|
+
class: [block.id, "builder-block", block.class, (_a = block.properties) == null ? void 0 : _a.class].filter(Boolean).join(" ")
|
|
37
29
|
});
|
|
30
|
+
return transformBlockProperties(properties);
|
|
31
|
+
}
|
|
32
|
+
function getStyleAttribute(style) {
|
|
33
|
+
if (!style) {
|
|
34
|
+
return void 0;
|
|
35
|
+
}
|
|
36
|
+
switch (TARGET) {
|
|
37
|
+
case "svelte":
|
|
38
|
+
case "vue2":
|
|
39
|
+
case "vue3":
|
|
40
|
+
case "solid":
|
|
41
|
+
return convertStyleMapToCSSArray(style).join(" ");
|
|
42
|
+
case "qwik":
|
|
43
|
+
case "reactNative":
|
|
44
|
+
case "react":
|
|
45
|
+
return style;
|
|
46
|
+
}
|
|
38
47
|
}
|
|
39
48
|
export {
|
|
40
49
|
getBlockProperties
|
|
@@ -17,13 +17,14 @@ var __spreadValues = (a, b) => {
|
|
|
17
17
|
import { sanitizeReactNativeBlockStyles } from "./sanitize-react-native-block-styles.js";
|
|
18
18
|
function getReactNativeBlockStyles({
|
|
19
19
|
block,
|
|
20
|
-
context
|
|
20
|
+
context,
|
|
21
|
+
blockStyles
|
|
21
22
|
}) {
|
|
22
23
|
const responsiveStyles = block.responsiveStyles;
|
|
23
24
|
if (!responsiveStyles) {
|
|
24
25
|
return {};
|
|
25
26
|
}
|
|
26
|
-
const styles = __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, context.inheritedStyles), responsiveStyles.large || {}), responsiveStyles.medium || {}), responsiveStyles.small || {});
|
|
27
|
+
const styles = __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, context.inheritedStyles), responsiveStyles.large || {}), responsiveStyles.medium || {}), responsiveStyles.small || {}), blockStyles);
|
|
27
28
|
const newStyles = sanitizeReactNativeBlockStyles(styles);
|
|
28
29
|
return newStyles;
|
|
29
30
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { isEditing } from "./is-editing.js";
|
|
2
|
+
import { findDOMNode } from "react-dom";
|
|
3
|
+
function transformBlockProperties(block) {
|
|
4
|
+
block.ref = (ref) => {
|
|
5
|
+
if (isEditing()) {
|
|
6
|
+
const el = findDOMNode(ref);
|
|
7
|
+
if (el) {
|
|
8
|
+
el.setAttribute("builder-id", block.id);
|
|
9
|
+
el.classList.add(block.id);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
return block;
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
transformBlockProperties
|
|
17
|
+
};
|
package/src/helpers/css.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { camelToKebabCase } from "../functions/camel-to-kebab-case.js";
|
|
2
|
-
|
|
2
|
+
import { checkIsDefined } from "./nullable.js";
|
|
3
|
+
const convertStyleMapToCSSArray = (style) => {
|
|
3
4
|
const cssProps = Object.entries(style).map(([key, value]) => {
|
|
4
5
|
if (typeof value === "string") {
|
|
5
6
|
return `${camelToKebabCase(key)}: ${value};`;
|
|
7
|
+
} else {
|
|
8
|
+
return void 0;
|
|
6
9
|
}
|
|
7
10
|
});
|
|
8
|
-
return cssProps.
|
|
11
|
+
return cssProps.filter(checkIsDefined);
|
|
9
12
|
};
|
|
13
|
+
const convertStyleMapToCSS = (style) => convertStyleMapToCSSArray(style).join("\n");
|
|
10
14
|
const createCssClass = ({
|
|
11
15
|
mediaQuery,
|
|
12
16
|
className,
|
|
13
17
|
styles
|
|
14
18
|
}) => {
|
|
15
19
|
const cssClass = `.${className} {
|
|
16
|
-
${
|
|
20
|
+
${convertStyleMapToCSS(styles)}
|
|
17
21
|
}`;
|
|
18
22
|
if (mediaQuery) {
|
|
19
23
|
return `${mediaQuery} {
|
|
@@ -24,5 +28,7 @@ const createCssClass = ({
|
|
|
24
28
|
}
|
|
25
29
|
};
|
|
26
30
|
export {
|
|
31
|
+
convertStyleMapToCSS,
|
|
32
|
+
convertStyleMapToCSSArray,
|
|
27
33
|
createCssClass
|
|
28
34
|
};
|