@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@builder.io/sdk-react-native",
3
3
  "description": "Builder.io SDK for React Native",
4
- "version": "0.0.14",
4
+ "version": "0.0.15",
5
5
  "main": "src/index.js",
6
6
  "files": [
7
7
  "src"
@@ -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
- }, (_a = props.columns) == null ? void 0 : _a.map((column, index) => /* @__PURE__ */ React.createElement(View, {
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", alignItems: "stretch" },
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: props.maxWidth && typeof props.maxWidth === "number" ? {
26
- maxWidth: props.maxWidth
27
- } : void 0
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
- const [className, setClassName] = useState(() => "builder-symbol");
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
- return __spreadValues(__spreadValues({}, getBlockProperties(useBlock())), TARGET === "reactNative" ? {
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 { isEditing } from "./is-editing.js";
21
- import { findDOMNode } from "react-dom";
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
- return __spreadProps(__spreadValues({}, block.properties), {
24
- ref: (ref) => {
25
- if (isEditing()) {
26
- const el = findDOMNode(ref);
27
- if (el) {
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
+ };
@@ -1,19 +1,23 @@
1
1
  import { camelToKebabCase } from "../functions/camel-to-kebab-case.js";
2
- const convertStyleMaptoCSS = (style) => {
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.join("\n");
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
- ${convertStyleMaptoCSS(styles)}
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
  };