@builder.io/sdk-react 0.1.4 → 0.1.5

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 (181) hide show
  1. package/dist/react/blocks/button/button.js +2 -2
  2. package/dist/react/blocks/columns/columns.js +4 -4
  3. package/dist/react/blocks/form/form.js +2 -2
  4. package/dist/react/blocks/image/image.js +6 -6
  5. package/dist/react/components/render-block/render-block.js +18 -1
  6. package/dist/react/components/render-block/render-repeated-block.js +1 -0
  7. package/dist/react/components/render-blocks.js +2 -2
  8. package/dist/react/components/render-content/components/render-styles.helpers.js +51 -0
  9. package/dist/react/components/render-content/components/render-styles.js +12 -54
  10. package/dist/react/components/render-content/render-content.helpers.js +38 -0
  11. package/dist/react/components/render-content/render-content.js +65 -62
  12. package/dist/react/components/render-content/render-content.types.js +1 -0
  13. package/dist/react/constants/builder-registered-components.js +7 -7
  14. package/dist/react/context/builder.context.js +2 -0
  15. package/dist/react/index-helpers/blocks-exports.js +10 -10
  16. package/dist/react/types/input.js +1 -0
  17. package/dist/rsc/blocks/button/button.js +2 -2
  18. package/dist/rsc/blocks/columns/columns.js +4 -4
  19. package/dist/rsc/blocks/form/form.js +2 -2
  20. package/dist/rsc/blocks/image/image.js +6 -6
  21. package/dist/rsc/components/render-block/render-block.js +18 -1
  22. package/dist/rsc/components/render-block/render-repeated-block.js +1 -0
  23. package/dist/rsc/components/render-blocks.js +2 -2
  24. package/dist/rsc/components/render-content/builder-editing.js +47 -4
  25. package/dist/rsc/components/render-content/components/render-styles.helpers.js +51 -0
  26. package/dist/rsc/components/render-content/components/render-styles.js +11 -54
  27. package/dist/rsc/components/render-content/render-content.helpers.js +38 -0
  28. package/dist/rsc/components/render-content/render-content.js +43 -38
  29. package/dist/rsc/components/render-content/render-content.types.js +1 -0
  30. package/dist/rsc/constants/builder-registered-components.js +7 -7
  31. package/dist/rsc/context/builder.context.js +2 -0
  32. package/dist/rsc/index-helpers/blocks-exports.js +10 -10
  33. package/dist/rsc/types/input.js +1 -0
  34. package/package.json +1 -1
  35. package/packages/react/src/blocks/button/button.jsx +2 -2
  36. package/packages/react/src/blocks/columns/columns.jsx +4 -4
  37. package/packages/react/src/blocks/form/form.jsx +2 -2
  38. package/packages/react/src/blocks/image/image.jsx +6 -6
  39. package/packages/react/src/components/render-block/render-block.jsx +22 -1
  40. package/packages/react/src/components/render-block/render-repeated-block.jsx +1 -0
  41. package/packages/react/src/components/render-blocks.jsx +2 -2
  42. package/packages/react/src/components/render-content/components/render-styles.helpers.js +57 -0
  43. package/packages/react/src/components/render-content/components/render-styles.jsx +13 -56
  44. package/packages/react/src/components/render-content/render-content.helpers.js +48 -0
  45. package/packages/react/src/components/render-content/render-content.jsx +76 -67
  46. package/packages/{_rsc/src/components/render-block/types.js → react/src/components/render-content/render-content.types.js} +0 -0
  47. package/packages/react/src/constants/builder-registered-components.js +7 -7
  48. package/packages/react/src/context/builder.context.js +2 -0
  49. package/packages/react/src/index-helpers/blocks-exports.js +18 -18
  50. package/packages/{_rsc/src/context/types.js → react/src/types/input.js} +0 -0
  51. package/packages/rsc/src/blocks/button/button.jsx +2 -2
  52. package/packages/rsc/src/blocks/columns/columns.jsx +4 -4
  53. package/packages/rsc/src/blocks/form/form.jsx +2 -2
  54. package/packages/rsc/src/blocks/image/image.jsx +6 -6
  55. package/packages/rsc/src/components/render-block/render-block.jsx +21 -1
  56. package/packages/rsc/src/components/render-block/render-repeated-block.jsx +1 -0
  57. package/packages/rsc/src/components/render-blocks.jsx +2 -2
  58. package/packages/rsc/src/components/render-content/builder-editing.jsx +61 -4
  59. package/packages/rsc/src/components/render-content/components/render-styles.helpers.js +57 -0
  60. package/packages/rsc/src/components/render-content/components/render-styles.jsx +10 -56
  61. package/packages/rsc/src/components/render-content/render-content.helpers.js +48 -0
  62. package/packages/rsc/src/components/render-content/render-content.jsx +46 -37
  63. package/packages/{_rsc/src/functions/get-content/types.js → rsc/src/components/render-content/render-content.types.js} +0 -0
  64. package/packages/rsc/src/constants/builder-registered-components.js +7 -7
  65. package/packages/rsc/src/context/builder.context.js +2 -0
  66. package/packages/rsc/src/index-helpers/blocks-exports.js +18 -18
  67. package/packages/{_rsc/src/types/builder-block.js → rsc/src/types/input.js} +0 -0
  68. package/packages/_rsc/src/blocks/BaseText.jsx +0 -10
  69. package/packages/_rsc/src/blocks/button/button.jsx +0 -29
  70. package/packages/_rsc/src/blocks/button/component-info.js +0 -41
  71. package/packages/_rsc/src/blocks/columns/columns.jsx +0 -172
  72. package/packages/_rsc/src/blocks/columns/component-info.js +0 -242
  73. package/packages/_rsc/src/blocks/custom-code/component-info.js +0 -31
  74. package/packages/_rsc/src/blocks/custom-code/custom-code.jsx +0 -55
  75. package/packages/_rsc/src/blocks/embed/component-info.js +0 -44
  76. package/packages/_rsc/src/blocks/embed/embed.jsx +0 -43
  77. package/packages/_rsc/src/blocks/embed/helpers.js +0 -9
  78. package/packages/_rsc/src/blocks/form/component-info.js +0 -262
  79. package/packages/_rsc/src/blocks/form/form.jsx +0 -259
  80. package/packages/_rsc/src/blocks/fragment/component-info.js +0 -11
  81. package/packages/_rsc/src/blocks/fragment/fragment.jsx +0 -7
  82. package/packages/_rsc/src/blocks/image/component-info.js +0 -151
  83. package/packages/_rsc/src/blocks/image/image.helpers.js +0 -48
  84. package/packages/_rsc/src/blocks/image/image.jsx +0 -124
  85. package/packages/_rsc/src/blocks/img/component-info.js +0 -20
  86. package/packages/_rsc/src/blocks/img/img.jsx +0 -19
  87. package/packages/_rsc/src/blocks/input/component-info.js +0 -74
  88. package/packages/_rsc/src/blocks/input/input.jsx +0 -21
  89. package/packages/_rsc/src/blocks/raw-text/component-info.js +0 -16
  90. package/packages/_rsc/src/blocks/raw-text/raw-text.jsx +0 -12
  91. package/packages/_rsc/src/blocks/section/component-info.js +0 -49
  92. package/packages/_rsc/src/blocks/section/section.jsx +0 -29
  93. package/packages/_rsc/src/blocks/select/component-info.js +0 -59
  94. package/packages/_rsc/src/blocks/select/select.jsx +0 -22
  95. package/packages/_rsc/src/blocks/submit-button/component-info.js +0 -28
  96. package/packages/_rsc/src/blocks/submit-button/submit-button.jsx +0 -11
  97. package/packages/_rsc/src/blocks/symbol/component-info.js +0 -43
  98. package/packages/_rsc/src/blocks/symbol/symbol.jsx +0 -56
  99. package/packages/_rsc/src/blocks/text/component-info.js +0 -24
  100. package/packages/_rsc/src/blocks/text/text.jsx +0 -12
  101. package/packages/_rsc/src/blocks/textarea/component-info.js +0 -47
  102. package/packages/_rsc/src/blocks/textarea/textarea.jsx +0 -15
  103. package/packages/_rsc/src/blocks/util.js +0 -8
  104. package/packages/_rsc/src/blocks/video/component-info.js +0 -106
  105. package/packages/_rsc/src/blocks/video/video.jsx +0 -61
  106. package/packages/_rsc/src/components/render-block/block-styles.jsx +0 -72
  107. package/packages/_rsc/src/components/render-block/render-block.helpers.js +0 -23
  108. package/packages/_rsc/src/components/render-block/render-block.jsx +0 -251
  109. package/packages/_rsc/src/components/render-block/render-component-with-context.jsx +0 -38
  110. package/packages/_rsc/src/components/render-block/render-component.jsx +0 -37
  111. package/packages/_rsc/src/components/render-block/render-repeated-block.jsx +0 -36
  112. package/packages/_rsc/src/components/render-blocks.jsx +0 -90
  113. package/packages/_rsc/src/components/render-content/builder-editing.jsx +0 -7
  114. package/packages/_rsc/src/components/render-content/components/render-styles.jsx +0 -70
  115. package/packages/_rsc/src/components/render-content/index.js +0 -4
  116. package/packages/_rsc/src/components/render-content/render-content.jsx +0 -259
  117. package/packages/_rsc/src/components/render-inlined-styles.jsx +0 -33
  118. package/packages/_rsc/src/constants/builder-registered-components.js +0 -54
  119. package/packages/_rsc/src/constants/device-sizes.js +0 -48
  120. package/packages/_rsc/src/constants/target.js +0 -4
  121. package/packages/_rsc/src/context/builder.context.js +0 -11
  122. package/packages/_rsc/src/functions/camel-to-kebab-case.js +0 -4
  123. package/packages/_rsc/src/functions/evaluate.js +0 -6
  124. package/packages/_rsc/src/functions/event-handler-name.js +0 -7
  125. package/packages/_rsc/src/functions/extract-text-styles.js +0 -22
  126. package/packages/_rsc/src/functions/fast-clone.js +0 -4
  127. package/packages/_rsc/src/functions/get-block-actions-handler.js +0 -11
  128. package/packages/_rsc/src/functions/get-block-actions.js +0 -18
  129. package/packages/_rsc/src/functions/get-block-component-options.js +0 -28
  130. package/packages/_rsc/src/functions/get-block-properties.js +0 -50
  131. package/packages/_rsc/src/functions/get-block-tag.js +0 -6
  132. package/packages/_rsc/src/functions/get-builder-search-params/fn.test.js +0 -13
  133. package/packages/_rsc/src/functions/get-builder-search-params/index.js +0 -38
  134. package/packages/_rsc/src/functions/get-content/ab-testing.js +0 -99
  135. package/packages/_rsc/src/functions/get-content/generate-content-url.js +0 -55
  136. package/packages/_rsc/src/functions/get-content/generate-content-url.test.js +0 -31
  137. package/packages/_rsc/src/functions/get-content/index.js +0 -65
  138. package/packages/_rsc/src/functions/get-fetch.js +0 -14
  139. package/packages/_rsc/src/functions/get-global-this.js +0 -18
  140. package/packages/_rsc/src/functions/get-processed-block.js +0 -59
  141. package/packages/_rsc/src/functions/get-processed-block.test.js +0 -32
  142. package/packages/_rsc/src/functions/get-react-native-block-styles.js +0 -33
  143. package/packages/_rsc/src/functions/if-target.js +0 -15
  144. package/packages/_rsc/src/functions/is-browser.js +0 -6
  145. package/packages/_rsc/src/functions/is-editing.js +0 -7
  146. package/packages/_rsc/src/functions/is-iframe.js +0 -7
  147. package/packages/_rsc/src/functions/is-previewing.js +0 -14
  148. package/packages/_rsc/src/functions/on-change.js +0 -27
  149. package/packages/_rsc/src/functions/on-change.test.js +0 -19
  150. package/packages/_rsc/src/functions/register-component.js +0 -68
  151. package/packages/_rsc/src/functions/register.js +0 -29
  152. package/packages/_rsc/src/functions/sanitize-react-native-block-styles.js +0 -66
  153. package/packages/_rsc/src/functions/set-editor-settings.js +0 -15
  154. package/packages/_rsc/src/functions/set.js +0 -11
  155. package/packages/_rsc/src/functions/set.test.js +0 -16
  156. package/packages/_rsc/src/functions/track.js +0 -124
  157. package/packages/_rsc/src/functions/transform-block-properties.js +0 -6
  158. package/packages/_rsc/src/functions/transform-block.js +0 -6
  159. package/packages/_rsc/src/helpers/ab-tests.js +0 -16
  160. package/packages/_rsc/src/helpers/cookie.js +0 -81
  161. package/packages/_rsc/src/helpers/css.js +0 -34
  162. package/packages/_rsc/src/helpers/flatten.js +0 -34
  163. package/packages/_rsc/src/helpers/localStorage.js +0 -35
  164. package/packages/_rsc/src/helpers/nullable.js +0 -4
  165. package/packages/_rsc/src/helpers/sessionId.js +0 -52
  166. package/packages/_rsc/src/helpers/time.js +0 -5
  167. package/packages/_rsc/src/helpers/url.js +0 -13
  168. package/packages/_rsc/src/helpers/url.test.js +0 -21
  169. package/packages/_rsc/src/helpers/uuid.js +0 -13
  170. package/packages/_rsc/src/helpers/visitorId.js +0 -34
  171. package/packages/_rsc/src/index-helpers/blocks-exports.js +0 -22
  172. package/packages/_rsc/src/index-helpers/top-of-file.js +0 -2
  173. package/packages/_rsc/src/index.js +0 -14
  174. package/packages/_rsc/src/scripts/init-editing.js +0 -93
  175. package/packages/_rsc/src/types/builder-content.js +0 -0
  176. package/packages/_rsc/src/types/can-track.js +0 -0
  177. package/packages/_rsc/src/types/components.js +0 -0
  178. package/packages/_rsc/src/types/deep-partial.js +0 -0
  179. package/packages/_rsc/src/types/element.js +0 -0
  180. package/packages/_rsc/src/types/targets.js +0 -0
  181. package/packages/_rsc/src/types/typescript.js +0 -0
@@ -66,7 +66,7 @@ export default function Image(props) {
66
66
  className={
67
67
  "builder-image" +
68
68
  (props.className ? " " + props.className : "") +
69
- " img-72859b6f"
69
+ " img-54289eda"
70
70
  }
71
71
  src={props.image}
72
72
  srcSet={srcSetToUse()}
@@ -78,7 +78,7 @@ export default function Image(props) {
78
78
  !(props.builderBlock?.children?.length && props.fitContent) ? (
79
79
  <>
80
80
  <div
81
- className="builder-image-sizer div-72859b6f"
81
+ className="builder-image-sizer div-54289eda"
82
82
  style={{
83
83
  paddingTop:
84
84
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
@@ -94,18 +94,18 @@ export default function Image(props) {
94
94
 
95
95
  {!props.fitContent && props.children ? (
96
96
  <>
97
- <div className="div-72859b6f-2">{props.children}</div>
97
+ <div className="div-54289eda-2">{props.children}</div>
98
98
  </>
99
99
  ) : null}
100
100
  </>
101
- <style>{`.img-72859b6f {
101
+ <style>{`.img-54289eda {
102
102
  opacity: 1;
103
103
  transition: opacity 0.2s ease-in-out;
104
- }.div-72859b6f {
104
+ }.div-54289eda {
105
105
  width: 100%;
106
106
  pointer-events: none;
107
107
  font-size: 0;
108
- }.div-72859b6f-2 {
108
+ }.div-54289eda-2 {
109
109
  display: flex;
110
110
  flex-direction: column;
111
111
  align-items: stretch;
@@ -40,10 +40,30 @@ export default function RenderBlock(props) {
40
40
  });
41
41
  }
42
42
 
43
+ function proxyState() {
44
+ if (typeof Proxy === "undefined") {
45
+ console.error(
46
+ "no Proxy available in this environment, cannot proxy state."
47
+ );
48
+ return props.context.state;
49
+ }
50
+ const useState = new Proxy(props.context.state, {
51
+ set: (obj, prop, value) => {
52
+ // set the value on the state object, so that the event handler instantly gets the update.
53
+ obj[prop] = value;
54
+
55
+ // set the value in the context, so that the rest of the app gets the update.
56
+ props.context.setState?.(obj);
57
+ return true;
58
+ },
59
+ });
60
+ return useState;
61
+ }
62
+
43
63
  function actions() {
44
64
  return getBlockActions({
45
65
  block: useBlock(),
46
- state: props.context.state,
66
+ state: proxyState(),
47
67
  context: props.context.context,
48
68
  });
49
69
  }
@@ -125,6 +145,7 @@ export default function RenderBlock(props) {
125
145
  state: props.context.state,
126
146
  content: props.context.content,
127
147
  context: props.context.context,
148
+ setState: props.context.setState,
128
149
  registeredComponents: props.context.registeredComponents,
129
150
  inheritedStyles: getInheritedTextStyles(),
130
151
  };
@@ -9,6 +9,7 @@ export default function RenderRepeatedBlock(props) {
9
9
  value={{
10
10
  content: props.repeatContext.content,
11
11
  state: props.repeatContext.state,
12
+ setState: props.repeatContext.setState,
12
13
  context: props.repeatContext.context,
13
14
  apiKey: props.repeatContext.apiKey,
14
15
  registeredComponents: props.repeatContext.registeredComponents,
@@ -45,7 +45,7 @@ export default function RenderBlocks(props) {
45
45
  return (
46
46
  <>
47
47
  <div
48
- className={className() + " div-05727d92"}
48
+ className={className() + " div-297c34fa"}
49
49
  builder-path={props.path}
50
50
  builder-parent-id={props.parent}
51
51
  dataSet={{
@@ -79,7 +79,7 @@ export default function RenderBlocks(props) {
79
79
  </>
80
80
  ) : null}
81
81
  </div>
82
- <style>{`.div-05727d92 {
82
+ <style>{`.div-297c34fa {
83
83
  display: flex;
84
84
  flex-direction: column;
85
85
  align-items: stretch;
@@ -0,0 +1,57 @@
1
+ const getCssFromFont = (font) => {
2
+ var _a, _b;
3
+ const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
4
+ const name = family.split(",")[0];
5
+ const url = (_b = font.fileUrl) != null ? _b : (_a = font == null ? void 0 : font.files) == null ? void 0 : _a.regular;
6
+ let str = "";
7
+ if (url && family && name) {
8
+ str += `
9
+ @font-face {
10
+ font-family: "${family}";
11
+ src: local("${name}"), url('${url}') format('woff2');
12
+ font-display: fallback;
13
+ font-weight: 400;
14
+ }
15
+ `.trim();
16
+ }
17
+ if (font.files) {
18
+ for (const weight in font.files) {
19
+ const isNumber = String(Number(weight)) === weight;
20
+ if (!isNumber) {
21
+ continue;
22
+ }
23
+ const weightUrl = font.files[weight];
24
+ if (weightUrl && weightUrl !== url) {
25
+ str += `
26
+ @font-face {
27
+ font-family: "${family}";
28
+ src: url('${weightUrl}') format('woff2');
29
+ font-display: fallback;
30
+ font-weight: ${weight};
31
+ }
32
+ `.trim();
33
+ }
34
+ }
35
+ }
36
+ return str;
37
+ };
38
+ const getFontCss = ({ customFonts }) => {
39
+ var _a;
40
+ return ((_a = customFonts == null ? void 0 : customFonts.map((font) => getCssFromFont(font))) == null ? void 0 : _a.join(" ")) || "";
41
+ };
42
+ const getCss = ({
43
+ cssCode,
44
+ contentId
45
+ }) => {
46
+ if (!cssCode) {
47
+ return "";
48
+ }
49
+ if (!contentId) {
50
+ return cssCode;
51
+ }
52
+ return (cssCode == null ? void 0 : cssCode.replace(/&/g, `div[builder-content-id="${contentId}"]`)) || "";
53
+ };
54
+ export {
55
+ getCss,
56
+ getFontCss
57
+ };
@@ -1,64 +1,21 @@
1
1
  import * as React from "react";
2
+ import { useState } from "react";
2
3
  import RenderInlinedStyles from "../../render-inlined-styles";
4
+ import { getCss } from "./render-styles.helpers";
5
+ import { getFontCss } from "./render-styles.helpers";
3
6
 
4
7
  export default function RenderContentStyles(props) {
5
- function getCssFromFont(font) {
6
- // TODO: compute what font sizes are used and only load those.......
7
- const family =
8
- font.family +
9
- (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
10
- const name = family.split(",")[0];
11
- const url = font.fileUrl ?? font?.files?.regular;
12
- let str = "";
13
- if (url && family && name) {
14
- str += `
15
- @font-face {
16
- font-family: "${family}";
17
- src: local("${name}"), url('${url}') format('woff2');
18
- font-display: fallback;
19
- font-weight: 400;
20
- }
21
- `.trim();
22
- }
23
- if (font.files) {
24
- for (const weight in font.files) {
25
- const isNumber = String(Number(weight)) === weight;
26
- if (!isNumber) {
27
- continue;
28
- }
29
- // TODO: maybe limit number loaded
30
- const weightUrl = font.files[weight];
31
- if (weightUrl && weightUrl !== url) {
32
- str += `
33
- @font-face {
34
- font-family: "${family}";
35
- src: url('${weightUrl}') format('woff2');
36
- font-display: fallback;
37
- font-weight: ${weight};
38
- }
39
- `.trim();
40
- }
41
- }
42
- }
43
- return str;
44
- }
45
-
46
- function getFontCss({ customFonts }) {
47
- // TODO: flag for this
48
- // if (!builder.allowCustomFonts) {
49
- // return '';
50
- // }
51
- // TODO: separate internal data from external
52
- return customFonts?.map((font) => getCssFromFont(font))?.join(" ") || "";
53
- }
54
-
55
- function injectedStyles() {
56
- return `
57
- ${props.cssCode || ""}
8
+ const [injectedStyles, setInjectedStyles] = useState(
9
+ () => `
10
+ ${getCss({
11
+ cssCode: props.cssCode,
12
+ contentId: props.contentId,
13
+ })}
58
14
  ${getFontCss({
59
15
  customFonts: props.customFonts,
60
- })}`;
61
- }
16
+ })}
17
+ `
18
+ );
62
19
 
63
- return <RenderInlinedStyles styles={injectedStyles()} />;
20
+ return <RenderInlinedStyles styles={injectedStyles} />;
64
21
  }
@@ -0,0 +1,48 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const getContextStateInitialValue = ({
21
+ content,
22
+ data,
23
+ locale
24
+ }) => {
25
+ var _a, _b, _c;
26
+ const defaultValues = {};
27
+ (_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach((input) => {
28
+ var _a2;
29
+ if (input.name && input.defaultValue !== void 0 && ((_a2 = content == null ? void 0 : content.data) == null ? void 0 : _a2.state) && content.data.state[input.name] === void 0) {
30
+ defaultValues[input.name] = input.defaultValue;
31
+ }
32
+ });
33
+ const stateToUse = __spreadValues(__spreadValues(__spreadValues({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? { locale } : {});
34
+ return __spreadValues(__spreadValues({}, defaultValues), stateToUse);
35
+ };
36
+ const getContentInitialValue = ({
37
+ content,
38
+ data
39
+ }) => {
40
+ return !content ? void 0 : __spreadProps(__spreadValues({}, content), {
41
+ data: __spreadValues(__spreadValues({}, content == null ? void 0 : content.data), data),
42
+ meta: content == null ? void 0 : content.meta
43
+ });
44
+ };
45
+ export {
46
+ getContentInitialValue,
47
+ getContextStateInitialValue
48
+ };
@@ -22,6 +22,10 @@ import {
22
22
  } from "../../scripts/init-editing.js";
23
23
  import { checkIsDefined } from "../../helpers/nullable.js";
24
24
  import { getInteractionPropertiesForEvent } from "../../functions/track/interaction.js";
25
+ import {
26
+ getContentInitialValue,
27
+ getContextStateInitialValue,
28
+ } from "./render-content.helpers.js";
25
29
 
26
30
  export default function RenderContent(props) {
27
31
  const elementRef = useRef(null);
@@ -29,56 +33,58 @@ export default function RenderContent(props) {
29
33
 
30
34
  const [overrideContent, setOverrideContent] = useState(() => null);
31
35
 
32
- function useContent() {
33
- if (!props.content && !overrideContent) {
34
- return undefined;
35
- }
36
- return {
37
- ...props.content,
38
- ...overrideContent,
36
+ const [useContent, setUseContent] = useState(() =>
37
+ getContentInitialValue({
38
+ content: props.content,
39
+ data: props.data,
40
+ })
41
+ );
42
+
43
+ function mergeNewContent(newContent) {
44
+ setUseContent({
45
+ ...useContent,
46
+ ...newContent,
39
47
  data: {
40
- ...props.content?.data,
41
- ...props.data,
42
- ...overrideContent?.data,
48
+ ...useContent?.data,
49
+ ...newContent?.data,
43
50
  },
44
51
  meta: {
45
- ...props.content?.meta,
46
- ...overrideContent?.meta,
52
+ ...useContent?.meta,
53
+ ...newContent?.meta,
47
54
  breakpoints:
48
- useBreakpoints ||
49
- overrideContent?.meta?.breakpoints ||
50
- props.content?.meta?.breakpoints,
55
+ newContent?.meta?.breakpoints || useContent?.meta?.breakpoints,
51
56
  },
52
- };
57
+ });
53
58
  }
54
59
 
55
- const [update, setUpdate] = useState(() => 0);
60
+ function setBreakpoints(breakpoints) {
61
+ setUseContent({
62
+ ...useContent,
63
+ meta: {
64
+ ...useContent?.meta,
65
+ breakpoints,
66
+ },
67
+ });
68
+ }
56
69
 
57
- const [useBreakpoints, setUseBreakpoints] = useState(() => null);
70
+ const [update, setUpdate] = useState(() => 0);
58
71
 
59
72
  const [canTrackToUse, setCanTrackToUse] = useState(() =>
60
73
  checkIsDefined(props.canTrack) ? props.canTrack : true
61
74
  );
62
75
 
63
- const [overrideState, setOverrideState] = useState(() => ({}));
76
+ const [contentState, setContentState] = useState(() =>
77
+ getContextStateInitialValue({
78
+ content: props.content,
79
+ data: props.data,
80
+ locale: props.locale,
81
+ })
82
+ );
64
83
 
65
- function contentState() {
66
- return {
67
- ...props.content?.data?.state,
68
- ...props.data,
69
- ...(props.locale
70
- ? {
71
- locale: props.locale,
72
- }
73
- : {}),
74
- ...overrideState,
75
- };
84
+ function setContextState(newState) {
85
+ setContentState(newState);
76
86
  }
77
87
 
78
- const [contextContext, setContextContext] = useState(
79
- () => props.context || {}
80
- );
81
-
82
88
  const [allRegisteredComponents, setAllRegisteredComponents] = useState(() =>
83
89
  [
84
90
  ...getDefaultRegisteredComponents(),
@@ -105,10 +111,12 @@ export default function RenderContent(props) {
105
111
  case "builder.configureSdk": {
106
112
  const messageContent = data.data;
107
113
  const { breakpoints, contentId } = messageContent;
108
- if (!contentId || contentId !== useContent?.()?.id) {
114
+ if (!contentId || contentId !== useContent?.id) {
109
115
  return;
110
116
  }
111
- setUseBreakpoints(breakpoints);
117
+ if (breakpoints) {
118
+ setBreakpoints(breakpoints);
119
+ }
112
120
  setForceReRenderCount(forceReRenderCount + 1); // This is a hack to force Qwik to re-render.
113
121
  break;
114
122
  }
@@ -121,7 +129,7 @@ export default function RenderContent(props) {
121
129
  messageContent.modelName;
122
130
  const contentData = messageContent.data;
123
131
  if (key === props.model) {
124
- setOverrideContent(contentData);
132
+ mergeNewContent(contentData);
125
133
  setForceReRenderCount(forceReRenderCount + 1); // This is a hack to force Qwik to re-render.
126
134
  }
127
135
 
@@ -137,12 +145,12 @@ export default function RenderContent(props) {
137
145
 
138
146
  function evaluateJsCode() {
139
147
  // run any dynamic JS code attached to content
140
- const jsCode = useContent?.()?.data?.jsCode;
148
+ const jsCode = useContent?.data?.jsCode;
141
149
  if (jsCode) {
142
150
  evaluate({
143
151
  code: jsCode,
144
- context: contextContext,
145
- state: contentState(),
152
+ context: props.context || {},
153
+ state: contentState,
146
154
  });
147
155
  }
148
156
  }
@@ -152,9 +160,9 @@ export default function RenderContent(props) {
152
160
  const [clicked, setClicked] = useState(() => false);
153
161
 
154
162
  function onClick(event) {
155
- if (useContent()) {
156
- const variationId = useContent?.()?.testVariationId;
157
- const contentId = useContent?.()?.id;
163
+ if (useContent) {
164
+ const variationId = useContent?.testVariationId;
165
+ const contentId = useContent?.id;
158
166
  _track({
159
167
  type: "click",
160
168
  canTrack: canTrackToUse,
@@ -174,8 +182,8 @@ export default function RenderContent(props) {
174
182
  return expression.replace(/{{([^}]+)}}/g, (_match, group) =>
175
183
  evaluate({
176
184
  code: group,
177
- context: contextContext,
178
- state: contentState(),
185
+ context: props.context || {},
186
+ state: contentState,
179
187
  })
180
188
  );
181
189
  }
@@ -184,11 +192,11 @@ export default function RenderContent(props) {
184
192
  fetch(url)
185
193
  .then((response) => response.json())
186
194
  .then((json) => {
187
- const newOverrideState = {
188
- ...overrideState,
195
+ const newState = {
196
+ ...contentState,
189
197
  [key]: json,
190
198
  };
191
- setOverrideState(newOverrideState);
199
+ setContextState(newState);
192
200
  })
193
201
  .catch((err) => {
194
202
  console.log("error fetching dynamic data", url, err);
@@ -196,7 +204,7 @@ export default function RenderContent(props) {
196
204
  }
197
205
 
198
206
  function runHttpRequests() {
199
- const requests = useContent?.()?.data?.httpRequests ?? {};
207
+ const requests = useContent?.data?.httpRequests ?? {};
200
208
  Object.entries(requests).forEach(([key, url]) => {
201
209
  if (url && (!httpReqsData[key] || isEditing())) {
202
210
  const evaluatedUrl = evalExpression(url);
@@ -213,7 +221,7 @@ export default function RenderContent(props) {
213
221
  window.dispatchEvent(
214
222
  new CustomEvent("builder:component:stateChange", {
215
223
  detail: {
216
- state: contentState(),
224
+ state: contentState,
217
225
  ref: {
218
226
  name: props.model,
219
227
  },
@@ -225,8 +233,7 @@ export default function RenderContent(props) {
225
233
 
226
234
  function shouldRenderContentStyles() {
227
235
  return Boolean(
228
- (useContent?.()?.data?.cssCode ||
229
- useContent?.()?.data?.customFonts?.length) &&
236
+ (useContent?.data?.cssCode || useContent?.data?.customFonts?.length) &&
230
237
  TARGET !== "reactNative"
231
238
  );
232
239
  }
@@ -265,9 +272,9 @@ export default function RenderContent(props) {
265
272
  emitStateUpdate
266
273
  );
267
274
  }
268
- if (useContent()) {
269
- const variationId = useContent?.()?.testVariationId;
270
- const contentId = useContent?.()?.id;
275
+ if (useContent) {
276
+ const variationId = useContent?.testVariationId;
277
+ const contentId = useContent?.id;
271
278
  _track({
272
279
  type: "impression",
273
280
  canTrack: canTrackToUse,
@@ -302,7 +309,7 @@ export default function RenderContent(props) {
302
309
  apiKey: props.apiKey,
303
310
  }).then((content) => {
304
311
  if (content) {
305
- setOverrideContent(content);
312
+ mergeNewContent(content);
306
313
  }
307
314
  });
308
315
  }
@@ -315,13 +322,13 @@ export default function RenderContent(props) {
315
322
 
316
323
  useEffect(() => {
317
324
  evaluateJsCode();
318
- }, [useContent?.()?.data?.jsCode, contentState()]);
325
+ }, [useContent?.data?.jsCode, contentState]);
319
326
  useEffect(() => {
320
327
  runHttpRequests();
321
- }, [useContent?.()?.data?.httpRequests]);
328
+ }, [useContent?.data?.httpRequests]);
322
329
  useEffect(() => {
323
330
  emitStateUpdate();
324
- }, [contentState()]);
331
+ }, [contentState]);
325
332
 
326
333
  useEffect(() => {
327
334
  return () => {
@@ -338,30 +345,32 @@ export default function RenderContent(props) {
338
345
  return (
339
346
  <builderContext.Provider
340
347
  value={{
341
- content: useContent(),
342
- state: contentState(),
343
- context: contextContext,
348
+ content: useContent,
349
+ state: contentState,
350
+ setState: setContextState,
351
+ context: props.context || {},
344
352
  apiKey: props.apiKey,
345
353
  registeredComponents: allRegisteredComponents,
346
354
  }}
347
355
  >
348
- {useContent() ? (
356
+ {useContent ? (
349
357
  <>
350
358
  <div
351
359
  ref={elementRef}
352
360
  onClick={(event) => onClick(event)}
353
- builder-content-id={useContent?.()?.id}
361
+ builder-content-id={useContent?.id}
354
362
  builder-model={props.model}
355
363
  >
356
364
  {shouldRenderContentStyles() ? (
357
365
  <RenderContentStyles
358
- cssCode={useContent?.()?.data?.cssCode}
359
- customFonts={useContent?.()?.data?.customFonts}
366
+ contentId={useContent?.id}
367
+ cssCode={useContent?.data?.cssCode}
368
+ customFonts={useContent?.data?.customFonts}
360
369
  />
361
370
  ) : null}
362
371
 
363
372
  <RenderBlocks
364
- blocks={useContent?.()?.data?.blocks}
373
+ blocks={useContent?.data?.blocks}
365
374
  key={forceReRenderCount}
366
375
  />
367
376
  </div>
@@ -37,17 +37,17 @@ import { componentInfo as imgComponentInfo } from "../blocks/img/component-info.
37
37
  import { default as customCode } from "../blocks/custom-code/custom-code";
38
38
  import { componentInfo as customCodeInfo } from "../blocks/custom-code/component-info.js";
39
39
  const getDefaultRegisteredComponents = () => [
40
+ __spreadValues({ component: Button }, buttonComponentInfo),
40
41
  __spreadValues({ component: Columns }, columnsComponentInfo),
42
+ __spreadValues({ component: customCode }, customCodeInfo),
43
+ __spreadValues({ component: embed }, embedComponentInfo),
44
+ __spreadValues({ component: Fragment }, fragmentComponentInfo),
41
45
  __spreadValues({ component: Image }, imageComponentInfo),
42
46
  __spreadValues({ component: Img }, imgComponentInfo),
43
- __spreadValues({ component: Text }, textComponentInfo),
44
- __spreadValues({ component: Video }, videoComponentInfo),
45
- __spreadValues({ component: Symbol }, symbolComponentInfo),
46
- __spreadValues({ component: Button }, buttonComponentInfo),
47
47
  __spreadValues({ component: Section }, sectionComponentInfo),
48
- __spreadValues({ component: Fragment }, fragmentComponentInfo),
49
- __spreadValues({ component: embed }, embedComponentInfo),
50
- __spreadValues({ component: customCode }, customCodeInfo)
48
+ __spreadValues({ component: Symbol }, symbolComponentInfo),
49
+ __spreadValues({ component: Text }, textComponentInfo),
50
+ __spreadValues({ component: Video }, videoComponentInfo)
51
51
  ];
52
52
  export {
53
53
  getDefaultRegisteredComponents
@@ -3,6 +3,8 @@ var stdin_default = createContext({
3
3
  content: null,
4
4
  context: {},
5
5
  state: {},
6
+ setState() {
7
+ },
6
8
  apiKey: null,
7
9
  registeredComponents: {},
8
10
  inheritedStyles: {}
@@ -1,22 +1,22 @@
1
- import { default as default2 } from "../blocks/columns/columns";
2
- import { default as default3 } from "../blocks/image/image";
3
- import { default as default4 } from "../blocks/text/text";
4
- import { default as default5 } from "../blocks/video/video";
5
- import { default as default6 } from "../blocks/symbol/symbol";
6
- import { default as default7 } from "../blocks/button/button";
1
+ import { default as default2 } from "../blocks/button/button";
2
+ import { default as default3 } from "../blocks/columns/columns";
3
+ import { default as default4 } from "../blocks/fragment/fragment";
4
+ import { default as default5 } from "../blocks/image/image";
5
+ import { default as default6 } from "../components/render-blocks";
6
+ import { default as default7 } from "../components/render-content/render-content";
7
7
  import { default as default8 } from "../blocks/section/section";
8
- import { default as default9 } from "../blocks/fragment/fragment";
9
- import { default as default10 } from "../components/render-content/render-content";
10
- import { default as default11 } from "../components/render-blocks";
8
+ import { default as default9 } from "../blocks/symbol/symbol";
9
+ import { default as default10 } from "../blocks/text/text";
10
+ import { default as default11 } from "../blocks/video/video";
11
11
  export {
12
- default7 as Button,
13
- default2 as Columns,
14
- default9 as Fragment,
15
- default3 as Image,
16
- default11 as RenderBlocks,
17
- default10 as RenderContent,
12
+ default2 as Button,
13
+ default3 as Columns,
14
+ default4 as Fragment,
15
+ default5 as Image,
16
+ default6 as RenderBlocks,
17
+ default7 as RenderContent,
18
18
  default8 as Section,
19
- default6 as Symbol,
20
- default4 as Text,
21
- default5 as Video
19
+ default9 as Symbol,
20
+ default10 as Text,
21
+ default11 as Video
22
22
  };
@@ -17,11 +17,11 @@ export default function Button(props) {
17
17
  </a>
18
18
  </>
19
19
  ) : (
20
- <button className="button-12870b9c" {...props.attributes}>
20
+ <button className="button-b25d5310" {...props.attributes}>
21
21
  {props.text}
22
22
  </button>
23
23
  )}
24
- <style>{`.button-12870b9c {
24
+ <style>{`.button-b25d5310 {
25
25
  all: unset;
26
26
  }`}</style>
27
27
  </>