@builder.io/sdk-react-native 0.2.3 → 0.4.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.
Files changed (88) hide show
  1. package/dist/blocks/button/button.js +1 -0
  2. package/dist/blocks/columns/columns.js +2 -1
  3. package/dist/blocks/custom-code/custom-code.js +1 -0
  4. package/dist/blocks/embed/embed.js +1 -0
  5. package/dist/blocks/form/form.js +1 -0
  6. package/dist/blocks/fragment/fragment.js +1 -0
  7. package/dist/blocks/img/img.js +1 -0
  8. package/dist/blocks/input/input.js +1 -0
  9. package/dist/blocks/raw-text/raw-text.js +1 -0
  10. package/dist/blocks/section/section.js +1 -0
  11. package/dist/blocks/select/select.js +1 -0
  12. package/dist/blocks/submit-button/submit-button.js +1 -0
  13. package/dist/blocks/symbol/symbol.js +2 -1
  14. package/dist/blocks/textarea/textarea.js +1 -0
  15. package/dist/components/render-block/block-styles.js +4 -1
  16. package/dist/components/render-block/render-block.helpers.js +8 -20
  17. package/dist/components/render-block/render-block.js +28 -21
  18. package/dist/components/render-block/render-component.js +4 -3
  19. package/dist/components/render-block/render-repeated-block.js +4 -2
  20. package/dist/components/render-blocks.js +1 -0
  21. package/dist/components/render-content/builder-editing.js +1 -0
  22. package/dist/components/render-content/components/render-styles.js +2 -1
  23. package/dist/components/render-content/render-content.js +48 -10
  24. package/dist/components/render-content/wrap-component-ref.js +5 -0
  25. package/dist/components/render-content-variants/helpers.js +137 -0
  26. package/dist/components/render-content-variants/render-content-variants.js +73 -0
  27. package/dist/components/render-inlined-styles.js +2 -12
  28. package/dist/constants/sdk-version.js +4 -0
  29. package/dist/context/builder.context.js +3 -2
  30. package/dist/functions/evaluate.js +25 -3
  31. package/dist/functions/evaluate.test.js +19 -0
  32. package/dist/functions/get-block-actions-handler.js +3 -1
  33. package/dist/functions/get-content/generate-content-url.js +2 -2
  34. package/dist/functions/get-content/generate-content-url.test.js +15 -0
  35. package/dist/functions/get-content/index.js +36 -19
  36. package/dist/functions/get-processed-block.js +16 -4
  37. package/dist/functions/get-processed-block.test.js +3 -1
  38. package/dist/helpers/ab-tests.js +123 -6
  39. package/dist/helpers/canTrack.js +6 -0
  40. package/dist/helpers/cookie.js +9 -2
  41. package/dist/helpers/logger.js +2 -1
  42. package/dist/index.js +17 -10
  43. package/dist/scripts/init-editing.js +2 -0
  44. package/package.json +2 -5
  45. package/src/blocks/button/button.jsx +1 -0
  46. package/src/blocks/columns/columns.jsx +2 -1
  47. package/src/blocks/custom-code/custom-code.jsx +1 -0
  48. package/src/blocks/embed/embed.jsx +1 -0
  49. package/src/blocks/form/form.jsx +1 -0
  50. package/src/blocks/fragment/fragment.jsx +1 -0
  51. package/src/blocks/img/img.jsx +1 -0
  52. package/src/blocks/input/input.jsx +1 -0
  53. package/src/blocks/raw-text/raw-text.jsx +1 -0
  54. package/src/blocks/section/section.jsx +1 -0
  55. package/src/blocks/select/select.jsx +1 -0
  56. package/src/blocks/submit-button/submit-button.jsx +1 -0
  57. package/src/blocks/symbol/symbol.jsx +2 -1
  58. package/src/blocks/textarea/textarea.jsx +1 -0
  59. package/src/components/render-block/block-styles.jsx +4 -1
  60. package/src/components/render-block/render-block.helpers.js +7 -19
  61. package/src/components/render-block/render-block.jsx +24 -23
  62. package/src/components/render-block/render-component.jsx +5 -5
  63. package/src/components/render-block/render-repeated-block.jsx +4 -2
  64. package/src/components/render-blocks.jsx +1 -0
  65. package/src/components/render-content/builder-editing.jsx +1 -0
  66. package/src/components/render-content/components/render-styles.jsx +4 -3
  67. package/src/components/render-content/render-content.jsx +54 -9
  68. package/src/components/render-content/wrap-component-ref.js +4 -0
  69. package/src/components/render-content-variants/helpers.js +139 -0
  70. package/src/components/render-content-variants/render-content-variants.jsx +101 -0
  71. package/src/components/render-inlined-styles.jsx +2 -22
  72. package/src/constants/sdk-version.js +1 -0
  73. package/src/context/builder.context.js +3 -2
  74. package/src/functions/evaluate.js +27 -3
  75. package/src/functions/evaluate.test.js +17 -0
  76. package/src/functions/get-block-actions-handler.js +3 -1
  77. package/src/functions/get-content/generate-content-url.js +2 -1
  78. package/src/functions/get-content/generate-content-url.test.js +15 -0
  79. package/src/functions/get-content/index.js +35 -18
  80. package/src/functions/get-processed-block.js +20 -4
  81. package/src/functions/get-processed-block.test.js +3 -1
  82. package/src/helpers/ab-tests.js +132 -10
  83. package/src/helpers/canTrack.js +5 -0
  84. package/src/helpers/cookie.js +9 -2
  85. package/src/helpers/logger.js +2 -1
  86. package/src/index.js +18 -7
  87. package/src/scripts/init-editing.js +2 -0
  88. package/src/functions/get-content/ab-testing.js +0 -99
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -80,7 +81,7 @@ function Columns(props) {
80
81
  };
81
82
  }
82
83
  const width = getColumnCssWidth(index);
83
- const gutterPixels = `${gutterSize}px`;
84
+ const gutterPixels = `${gutter}px`;
84
85
  const mobileWidth = "100%";
85
86
  const mobileMarginLeft = 0;
86
87
  return {
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -98,7 +99,7 @@ function Symbol(props) {
98
99
  } },
99
100
  React.createElement(render_content_1.default, { apiVersion: builderContext.apiVersion, apiKey: builderContext.apiKey, context: builderContext.context, customComponents: Object.values(builderContext.registeredComponents), data: {
100
101
  ...(_a = props.symbol) === null || _a === void 0 ? void 0 : _a.data,
101
- ...builderContext.state,
102
+ ...builderContext.localState,
102
103
  ...(_b = contentToUse === null || contentToUse === void 0 ? void 0 : contentToUse.data) === null || _b === void 0 ? void 0 : _b.state,
103
104
  }, model: (_c = props.symbol) === null || _c === void 0 ? void 0 : _c.model, content: contentToUse })));
104
105
  }
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -38,7 +39,9 @@ function BlockStyles(props) {
38
39
  function useBlock() {
39
40
  return (0, get_processed_block_js_1.getProcessedBlock)({
40
41
  block: props.block,
41
- state: props.context.state,
42
+ localState: props.context.localState,
43
+ rootState: props.context.rootState,
44
+ rootSetState: props.context.rootSetState,
42
45
  context: props.context.context,
43
46
  shouldEvaluateBindings: true,
44
47
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isEmptyHtmlElement = exports.getRepeatItemData = exports.getProxyState = exports.getComponent = void 0;
3
+ exports.isEmptyHtmlElement = exports.getRepeatItemData = exports.getComponent = void 0;
4
4
  var __defProp = Object.defineProperty;
5
5
  var __defProps = Object.defineProperties;
6
6
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
@@ -59,7 +59,9 @@ const getComponent = ({ block, context }) => {
59
59
  var _a;
60
60
  const componentName = (_a = (0, get_processed_block_1.getProcessedBlock)({
61
61
  block,
62
- state: context.state,
62
+ localState: context.localState,
63
+ rootState: context.rootState,
64
+ rootSetState: context.rootSetState,
63
65
  context: context.context,
64
66
  shouldEvaluateBindings: false
65
67
  }).component) == null ? void 0 : _a.name;
@@ -85,7 +87,9 @@ const getRepeatItemData = ({ block, context }) => {
85
87
  }
86
88
  const itemsArray = (0, evaluate_1.evaluate)({
87
89
  code: repeat.collection,
88
- state: context.state,
90
+ localState: context.localState,
91
+ rootState: context.rootState,
92
+ rootSetState: context.rootSetState,
89
93
  context: context.context
90
94
  });
91
95
  if (!Array.isArray(itemsArray)) {
@@ -95,7 +99,7 @@ const getRepeatItemData = ({ block, context }) => {
95
99
  const itemNameToUse = repeat.itemName || (collectionName ? collectionName + "Item" : "item");
96
100
  const repeatArray = itemsArray.map((item, index) => ({
97
101
  context: __spreadProps(__spreadValues({}, context), {
98
- state: __spreadProps(__spreadValues({}, context.state), {
102
+ localState: __spreadProps(__spreadValues({}, context.localState), {
99
103
  $index: index,
100
104
  $item: item,
101
105
  [itemNameToUse]: item,
@@ -107,19 +111,3 @@ const getRepeatItemData = ({ block, context }) => {
107
111
  return repeatArray;
108
112
  };
109
113
  exports.getRepeatItemData = getRepeatItemData;
110
- const getProxyState = (context) => {
111
- if (typeof Proxy === "undefined") {
112
- console.error("no Proxy available in this environment, cannot proxy state.");
113
- return context.state;
114
- }
115
- const useState = new Proxy(context.state, {
116
- set: (obj, prop, value) => {
117
- var _a;
118
- obj[prop] = value;
119
- (_a = context.setState) == null ? void 0 : _a.call(context, obj);
120
- return true;
121
- }
122
- });
123
- return useState;
124
- };
125
- exports.getProxyState = getProxyState;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -41,26 +42,30 @@ const extract_text_styles_js_1 = require("../../functions/extract-text-styles.js
41
42
  const render_component_1 = __importDefault(require("./render-component"));
42
43
  const get_react_native_block_styles_js_1 = require("../../functions/get-react-native-block-styles.js");
43
44
  function RenderBlock(props) {
44
- var _a, _b;
45
+ var _a, _b, _c;
45
46
  const [component, setComponent] = (0, react_1.useState)(() => (0, render_block_helpers_js_1.getComponent)({
46
47
  block: props.block,
47
48
  context: props.context,
48
49
  }));
49
- const [repeatItemData, setRepeatItemData] = (0, react_1.useState)(() => (0, render_block_helpers_js_1.getRepeatItemData)({
50
- block: props.block,
51
- context: props.context,
52
- }));
50
+ function repeatItem() {
51
+ return (0, render_block_helpers_js_1.getRepeatItemData)({
52
+ block: props.block,
53
+ context: props.context,
54
+ });
55
+ }
53
56
  function useBlock() {
54
- return repeatItemData
57
+ return repeatItem()
55
58
  ? props.block
56
59
  : (0, get_processed_block_js_1.getProcessedBlock)({
57
60
  block: props.block,
58
- state: props.context.state,
61
+ localState: props.context.localState,
62
+ rootState: props.context.rootState,
63
+ rootSetState: props.context.rootSetState,
59
64
  context: props.context.context,
60
65
  shouldEvaluateBindings: true,
61
66
  });
62
67
  }
63
- const [tag, setTag] = (0, react_1.useState)(() => props.block.tagName || "div");
68
+ const [Tag, setTag] = (0, react_1.useState)(() => props.block.tagName || "div");
64
69
  function canShowBlock() {
65
70
  if ("hide" in useBlock()) {
66
71
  return !useBlock().hide;
@@ -70,11 +75,12 @@ function RenderBlock(props) {
70
75
  }
71
76
  return true;
72
77
  }
73
- const [proxyState, setProxyState] = (0, react_1.useState)(() => (0, render_block_helpers_js_1.getProxyState)(props.context));
74
78
  function actions() {
75
79
  return (0, get_block_actions_js_1.getBlockActions)({
76
80
  block: useBlock(),
77
- state: target_js_1.TARGET === "qwik" ? props.context.state : proxyState,
81
+ rootState: props.context.rootState,
82
+ rootSetState: props.context.rootSetState,
83
+ localState: props.context.localState,
78
84
  context: props.context.context,
79
85
  });
80
86
  }
@@ -101,7 +107,7 @@ function RenderBlock(props) {
101
107
  * NOTE: We make sure not to render this if `repeatItemData` is non-null, because that means we are rendering an array of
102
108
  * blocks, and the children will be repeated within those blocks.
103
109
  */
104
- const shouldRenderChildrenOutsideRef = !(component === null || component === void 0 ? void 0 : component.component) && !repeatItemData;
110
+ const shouldRenderChildrenOutsideRef = !(component === null || component === void 0 ? void 0 : component.component) && !repeatItem();
105
111
  return shouldRenderChildrenOutsideRef ? (_a = useBlock().children) !== null && _a !== void 0 ? _a : [] : [];
106
112
  }
107
113
  function childrenContext() {
@@ -118,10 +124,11 @@ function RenderBlock(props) {
118
124
  return {
119
125
  apiKey: props.context.apiKey,
120
126
  apiVersion: props.context.apiVersion,
121
- state: props.context.state,
127
+ localState: props.context.localState,
128
+ rootState: props.context.rootState,
129
+ rootSetState: props.context.rootSetState,
122
130
  content: props.context.content,
123
131
  context: props.context.context,
124
- setState: props.context.setState,
125
132
  registeredComponents: props.context.registeredComponents,
126
133
  inheritedStyles: getInheritedTextStyles(),
127
134
  };
@@ -150,14 +157,14 @@ function RenderBlock(props) {
150
157
  };
151
158
  }
152
159
  return (React.createElement(React.Fragment, null, canShowBlock() ? (React.createElement(React.Fragment, null, !(component === null || component === void 0 ? void 0 : component.noWrap) ? (React.createElement(React.Fragment, null,
153
- (0, render_block_helpers_js_1.isEmptyHtmlElement)(tag) ? (React.createElement(React.Fragment, null,
154
- React.createElement(react_native_1.View, { ...attributes(), ...actions() }))) : null,
155
- !(0, render_block_helpers_js_1.isEmptyHtmlElement)(tag) && repeatItemData ? (React.createElement(React.Fragment, null, repeatItemData === null || repeatItemData === void 0 ? void 0 : repeatItemData.map((data, index) => (React.createElement(render_repeated_block_1.default, { key: index, repeatContext: data.context, block: data.block }))))) : null,
156
- !(0, render_block_helpers_js_1.isEmptyHtmlElement)(tag) && !repeatItemData ? (React.createElement(React.Fragment, null,
157
- React.createElement(react_native_1.View, { ...attributes(), ...actions() },
158
- React.createElement(render_component_1.default, { ...renderComponentProps() }), (_a = childrenWithoutParentComponent()) === null || _a === void 0 ? void 0 :
159
- _a.map((child) => (React.createElement(RenderBlock, { key: "render-block-" + child.id, block: child, context: childrenContext() }))), (_b = childrenWithoutParentComponent()) === null || _b === void 0 ? void 0 :
160
- _b.map((child) => (React.createElement(block_styles_1.default, { key: "block-style-" + child.id, block: child, context: childrenContext() })))))) : null)) : (React.createElement(React.Fragment, null,
160
+ (0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) ? (React.createElement(React.Fragment, null,
161
+ React.createElement(Tag, { ...attributes(), ...actions() }))) : null,
162
+ !(0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) && repeatItem() ? (React.createElement(React.Fragment, null, (_a = repeatItem()) === null || _a === void 0 ? void 0 : _a.map((data, index) => (React.createElement(render_repeated_block_1.default, { key: index, repeatContext: data.context, block: data.block }))))) : null,
163
+ !(0, render_block_helpers_js_1.isEmptyHtmlElement)(Tag) && !repeatItem() ? (React.createElement(React.Fragment, null,
164
+ React.createElement(Tag, { ...attributes(), ...actions() },
165
+ React.createElement(render_component_1.default, { ...renderComponentProps() }), (_b = childrenWithoutParentComponent()) === null || _b === void 0 ? void 0 :
166
+ _b.map((child) => (React.createElement(RenderBlock, { key: "render-block-" + child.id, block: child, context: childrenContext() }))), (_c = childrenWithoutParentComponent()) === null || _c === void 0 ? void 0 :
167
+ _c.map((child) => (React.createElement(block_styles_1.default, { key: "block-style-" + child.id, block: child, context: childrenContext() })))))) : null)) : (React.createElement(React.Fragment, null,
161
168
  React.createElement(render_component_1.default, { ...renderComponentProps() }))))) : null));
162
169
  }
163
170
  exports.default = RenderBlock;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -34,17 +35,17 @@ const render_block_1 = __importDefault(require("./render-block"));
34
35
  const builder_context_js_1 = __importDefault(require("../../context/builder.context.js"));
35
36
  function RenderComponent(props) {
36
37
  var _a, _b;
37
- const ComponentRefRef = props.componentRef;
38
38
  return (React.createElement(builder_context_js_1.default.Provider, { value: {
39
39
  content: props.context.content,
40
- state: props.context.state,
40
+ rootState: props.context.rootState,
41
+ localState: props.context.localState,
41
42
  context: props.context.context,
42
43
  apiKey: props.context.apiKey,
43
44
  registeredComponents: props.context.registeredComponents,
44
45
  inheritedStyles: props.context.inheritedStyles,
45
46
  apiVersion: props.context.apiVersion,
46
47
  } }, props.componentRef ? (React.createElement(React.Fragment, null,
47
- React.createElement(ComponentRefRef, { ...props.componentOptions }, (_a = props.blockChildren) === null || _a === void 0 ? void 0 :
48
+ React.createElement(props.componentRef, { ...props.componentOptions }, (_a = props.blockChildren) === null || _a === void 0 ? void 0 :
48
49
  _a.map((child) => (React.createElement(render_block_1.default, { key: "render-block-" + child.id, block: child, context: props.context }))), (_b = props.blockChildren) === null || _b === void 0 ? void 0 :
49
50
  _b.map((child) => (React.createElement(block_styles_1.default, { key: "block-style-" + child.id, block: child, context: props.context })))))) : null));
50
51
  }
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -34,8 +35,9 @@ const render_block_1 = __importDefault(require("./render-block"));
34
35
  function RenderRepeatedBlock(props) {
35
36
  return (React.createElement(builder_context_js_1.default.Provider, { value: {
36
37
  content: props.repeatContext.content,
37
- state: props.repeatContext.state,
38
- setState: props.repeatContext.setState,
38
+ localState: props.repeatContext.localState,
39
+ rootState: props.repeatContext.rootState,
40
+ rootSetState: props.repeatContext.rootSetState,
39
41
  context: props.repeatContext.context,
40
42
  apiKey: props.repeatContext.apiKey,
41
43
  registeredComponents: props.repeatContext.registeredComponents,
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -54,7 +55,7 @@ ${(0, render_styles_helpers_2.getFontCss)({
54
55
  text-align: inherit;
55
56
  font-family: inherit;
56
57
  }
57
- `);
58
+ `.trim());
58
59
  return React.createElement(render_inlined_styles_1.default, { styles: injectedStyles });
59
60
  }
60
61
  exports.default = RenderContentStyles;
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ 'use client';
2
3
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
4
  if (k2 === undefined) k2 = k;
4
5
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -47,6 +48,8 @@ const interaction_js_1 = require("../../functions/track/interaction.js");
47
48
  const render_content_helpers_js_1 = require("./render-content.helpers.js");
48
49
  const target_js_1 = require("../../constants/target.js");
49
50
  const logger_js_1 = require("../../helpers/logger.js");
51
+ const helpers_js_1 = require("../render-content-variants/helpers.js");
52
+ const wrap_component_ref_js_1 = require("./wrap-component-ref.js");
50
53
  function RenderContent(props) {
51
54
  var _a, _b, _c, _d, _e;
52
55
  const elementRef = (0, react_1.useRef)(null);
@@ -88,8 +91,8 @@ function RenderContent(props) {
88
91
  data: props.data,
89
92
  locale: props.locale,
90
93
  }));
91
- function setContextState(newState) {
92
- setContentState(newState);
94
+ function contentSetState(newRootState) {
95
+ setContentState(newRootState);
93
96
  }
94
97
  const [allRegisteredComponents, setAllRegisteredComponents] = (0, react_1.useState)(() => [
95
98
  ...(0, builder_registered_components_js_1.getDefaultRegisteredComponents)(),
@@ -100,9 +103,12 @@ function RenderContent(props) {
100
103
  // which is the new standard way of providing custom components, and must therefore take precedence.
101
104
  ...register_component_js_1.components,
102
105
  ...(props.customComponents || []),
103
- ].reduce((acc, curr) => ({
106
+ ].reduce((acc, { component, ...curr }) => ({
104
107
  ...acc,
105
- [curr.name]: curr,
108
+ [curr.name]: {
109
+ component: target_js_1.TARGET === "vue3" ? (0, wrap_component_ref_js_1.wrapComponentRef)(component) : component,
110
+ ...curr,
111
+ },
106
112
  }), {}));
107
113
  function processMessage(event) {
108
114
  const { data } = event;
@@ -148,7 +154,9 @@ function RenderContent(props) {
148
154
  (0, evaluate_js_1.evaluate)({
149
155
  code: jsCode,
150
156
  context: props.context || {},
151
- state: contentState,
157
+ localState: undefined,
158
+ rootState: contentState,
159
+ rootSetState: contentSetState,
152
160
  });
153
161
  }
154
162
  }
@@ -176,7 +184,9 @@ function RenderContent(props) {
176
184
  return expression.replace(/{{([^}]+)}}/g, (_match, group) => (0, evaluate_js_1.evaluate)({
177
185
  code: group,
178
186
  context: props.context || {},
179
- state: contentState,
187
+ localState: undefined,
188
+ rootState: contentState,
189
+ rootSetState: contentSetState,
180
190
  }));
181
191
  }
182
192
  function handleRequest({ url, key }) {
@@ -187,7 +197,7 @@ function RenderContent(props) {
187
197
  ...contentState,
188
198
  [key]: json,
189
199
  };
190
- setContextState(newState);
200
+ contentSetState(newState);
191
201
  })
192
202
  .catch((err) => {
193
203
  console.error("error fetching dynamic data", url, err);
@@ -218,6 +228,14 @@ function RenderContent(props) {
218
228
  }));
219
229
  }
220
230
  }
231
+ const [scriptStr, setScriptStr] = (0, react_1.useState)(() => {
232
+ var _a;
233
+ return (0, helpers_js_1.getRenderContentScriptString)({
234
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
235
+ contentId: (_a = props.content) === null || _a === void 0 ? void 0 : _a.id,
236
+ parentContentId: props.parentContentId,
237
+ });
238
+ });
221
239
  (0, react_1.useEffect)(() => {
222
240
  if (!props.apiKey) {
223
241
  logger_js_1.logger.error("No API key provided to `RenderContent` component. This can cause issues. Please provide an API key using the `apiKey` prop.");
@@ -237,6 +255,11 @@ function RenderContent(props) {
237
255
  includeRefs: props.includeRefs,
238
256
  }
239
257
  : {}),
258
+ ...(props.enrich
259
+ ? {
260
+ enrich: props.enrich,
261
+ }
262
+ : {}),
240
263
  });
241
264
  Object.values(allRegisteredComponents).forEach((registeredComponent) => {
242
265
  var _a;
@@ -313,15 +336,30 @@ function RenderContent(props) {
313
336
  }, []);
314
337
  return (React.createElement(builder_context_js_1.default.Provider, { value: {
315
338
  content: useContent,
316
- state: contentState,
317
- setState: setContextState,
339
+ localState: undefined,
340
+ rootState: contentState,
341
+ rootSetState: target_js_1.TARGET === "qwik" ? undefined : contentSetState,
318
342
  context: props.context || {},
319
343
  apiKey: props.apiKey,
320
344
  apiVersion: props.apiVersion,
321
345
  registeredComponents: allRegisteredComponents,
322
346
  inheritedStyles: {},
323
347
  } }, useContent ? (React.createElement(React.Fragment, null,
324
- React.createElement(react_native_1.ScrollView, { ref: elementRef, onClick: (event) => onClick(event), "builder-content-id": useContent === null || useContent === void 0 ? void 0 : useContent.id, "builder-model": props.model },
348
+ React.createElement(react_native_1.ScrollView, { ref: elementRef, onClick: (event) => onClick(event), "builder-content-id": useContent === null || useContent === void 0 ? void 0 : useContent.id, "builder-model": props.model, ...(target_js_1.TARGET === "reactNative"
349
+ ? {
350
+ dataSet: {
351
+ // currently, we can't set the actual ID here. // we don't need it right now, we just need to identify content divs for testing.
352
+ "builder-content-id": "",
353
+ },
354
+ }
355
+ : {}), ...(props.hideContent
356
+ ? {
357
+ hidden: true,
358
+ "aria-hidden": true,
359
+ }
360
+ : {}) },
361
+ props.isSsrAbTest ? (React.createElement(React.Fragment, null,
362
+ React.createElement(react_native_1.ScrollView, { dangerouslySetInnerHTML: { __html: scriptStr } }))) : null,
325
363
  target_js_1.TARGET !== "reactNative" ? (React.createElement(React.Fragment, null,
326
364
  React.createElement(render_styles_1.default, { contentId: useContent === null || useContent === void 0 ? void 0 : useContent.id, cssCode: (_c = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _c === void 0 ? void 0 : _c.cssCode, customFonts: (_d = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _d === void 0 ? void 0 : _d.customFonts }))) : null,
327
365
  React.createElement(render_blocks_1.default, { blocks: (_e = useContent === null || useContent === void 0 ? void 0 : useContent.data) === null || _e === void 0 ? void 0 : _e.blocks, key: forceReRenderCount })))) : null));
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapComponentRef = void 0;
4
+ const wrapComponentRef = (component) => component;
5
+ exports.wrapComponentRef = wrapComponentRef;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getVariantsScriptString = exports.getVariants = exports.getRenderContentScriptString = exports.checkShouldRunVariants = void 0;
4
+ const is_browser_1 = require("../../functions/is-browser");
5
+ const getVariants = (content) => Object.values((content == null ? void 0 : content.variations) || {});
6
+ exports.getVariants = getVariants;
7
+ const checkShouldRunVariants = ({ canTrack, content }) => {
8
+ const hasVariants = getVariants(content).length > 0;
9
+ if (!hasVariants) {
10
+ return false;
11
+ }
12
+ if (!canTrack) {
13
+ return false;
14
+ }
15
+ if ((0, is_browser_1.isBrowser)()) {
16
+ return false;
17
+ }
18
+ return true;
19
+ };
20
+ exports.checkShouldRunVariants = checkShouldRunVariants;
21
+ function bldrAbTest(contentId, variants, isHydrationTarget2) {
22
+ function getAndSetVariantId() {
23
+ function setCookie(name, value, days) {
24
+ let expires = "";
25
+ if (days) {
26
+ const date = new Date();
27
+ date.setTime(date.getTime() + days * 24 * 60 * 60 * 1e3);
28
+ expires = "; expires=" + date.toUTCString();
29
+ }
30
+ document.cookie = name + "=" + (value || "") + expires + "; path=/; Secure; SameSite=None";
31
+ }
32
+ function getCookie(name) {
33
+ const nameEQ = name + "=";
34
+ const ca = document.cookie.split(";");
35
+ for (let i = 0; i < ca.length; i++) {
36
+ let c = ca[i];
37
+ while (c.charAt(0) === " ")
38
+ c = c.substring(1, c.length);
39
+ if (c.indexOf(nameEQ) === 0)
40
+ return c.substring(nameEQ.length, c.length);
41
+ }
42
+ return null;
43
+ }
44
+ const cookieName = `builder.tests.${contentId}`;
45
+ const variantInCookie = getCookie(cookieName);
46
+ const availableIDs = variants.map((vr) => vr.id).concat(contentId);
47
+ if (variantInCookie && availableIDs.includes(variantInCookie)) {
48
+ return variantInCookie;
49
+ }
50
+ let n = 0;
51
+ const random = Math.random();
52
+ for (let i = 0; i < variants.length; i++) {
53
+ const variant = variants[i];
54
+ const testRatio = variant.testRatio;
55
+ n += testRatio;
56
+ if (random < n) {
57
+ setCookie(cookieName, variant.id);
58
+ return variant.id;
59
+ }
60
+ }
61
+ setCookie(cookieName, contentId);
62
+ return contentId;
63
+ }
64
+ const winningVariantId = getAndSetVariantId();
65
+ const styleEl = document.getElementById(`variants-styles-${contentId}`);
66
+ if (isHydrationTarget2) {
67
+ styleEl.remove();
68
+ const thisScriptEl = document.getElementById(`variants-script-${contentId}`);
69
+ thisScriptEl == null ? void 0 : thisScriptEl.remove();
70
+ }
71
+ else {
72
+ const newStyleStr = variants.concat({ id: contentId }).filter((variant) => variant.id !== winningVariantId).map((value) => {
73
+ return `.variant-${value.id} { display: none; }
74
+ `;
75
+ }).join("");
76
+ styleEl.innerHTML = newStyleStr;
77
+ }
78
+ }
79
+ function bldrCntntScrpt(variantContentId, defaultContentId, isHydrationTarget2) {
80
+ if (!navigator.cookieEnabled) {
81
+ return;
82
+ }
83
+ function getCookie(name) {
84
+ const nameEQ = name + "=";
85
+ const ca = document.cookie.split(";");
86
+ for (let i = 0; i < ca.length; i++) {
87
+ let c = ca[i];
88
+ while (c.charAt(0) === " ")
89
+ c = c.substring(1, c.length);
90
+ if (c.indexOf(nameEQ) === 0)
91
+ return c.substring(nameEQ.length, c.length);
92
+ }
93
+ return null;
94
+ }
95
+ const cookieName = `builder.tests.${defaultContentId}`;
96
+ const variantId = getCookie(cookieName);
97
+ const parentDiv = document.querySelector(`[builder-content-id="${variantContentId}"]`);
98
+ const variantIsDefaultContent = variantContentId === defaultContentId;
99
+ if (variantId === variantContentId) {
100
+ if (variantIsDefaultContent) {
101
+ return;
102
+ }
103
+ parentDiv == null ? void 0 : parentDiv.removeAttribute("hidden");
104
+ parentDiv == null ? void 0 : parentDiv.removeAttribute("aria-hidden");
105
+ }
106
+ else {
107
+ if (variantIsDefaultContent) {
108
+ if (isHydrationTarget2) {
109
+ parentDiv == null ? void 0 : parentDiv.remove();
110
+ }
111
+ else {
112
+ parentDiv == null ? void 0 : parentDiv.setAttribute("hidden", "true");
113
+ parentDiv == null ? void 0 : parentDiv.setAttribute("aria-hidden", "true");
114
+ }
115
+ }
116
+ return;
117
+ }
118
+ return;
119
+ }
120
+ const isHydrationTarget = (target) => target === "react" || target === "reactNative" || target === "vue3" || target === "vue2";
121
+ const AB_TEST_FN_NAME = "bldrAbTest";
122
+ const CONTENT_FN_NAME = "bldrCntntScrpt";
123
+ const getVariantsScriptString = (variants, contentId) => {
124
+ const fnStr = bldrAbTest.toString().replace(/\s+/g, " ");
125
+ const fnStr2 = bldrCntntScrpt.toString().replace(/\s+/g, " ");
126
+ return `
127
+ const ${AB_TEST_FN_NAME} = ${fnStr}
128
+ const ${CONTENT_FN_NAME} = ${fnStr2}
129
+ ${AB_TEST_FN_NAME}("${contentId}", ${JSON.stringify(variants)}, ${isHydrationTarget})
130
+ `;
131
+ };
132
+ exports.getVariantsScriptString = getVariantsScriptString;
133
+ const getRenderContentScriptString = ({ parentContentId, contentId }) => {
134
+ return `
135
+ ${CONTENT_FN_NAME}("${contentId}", "${parentContentId}", ${isHydrationTarget})`;
136
+ };
137
+ exports.getRenderContentScriptString = getRenderContentScriptString;