@builder.io/sdk-solid 0.4.4 → 0.5.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 (145) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/package.json +1 -1
  3. package/src/blocks/BaseText.jsx +1 -1
  4. package/src/blocks/button/button.jsx +5 -3
  5. package/src/blocks/button/component-info.js +16 -22
  6. package/src/blocks/columns/columns.jsx +14 -23
  7. package/src/blocks/columns/component-info.js +203 -226
  8. package/src/blocks/custom-code/component-info.js +19 -25
  9. package/src/blocks/embed/component-info.js +31 -37
  10. package/src/blocks/embed/helpers.js +3 -9
  11. package/src/blocks/form/component-info.js +174 -212
  12. package/src/blocks/form/form.jsx +1 -268
  13. package/src/blocks/fragment/component-info.js +1 -3
  14. package/src/blocks/helpers.js +27 -0
  15. package/src/blocks/image/component-info.js +105 -133
  16. package/src/blocks/image/image.helpers.js +3 -5
  17. package/src/blocks/img/component-info.js +8 -12
  18. package/src/blocks/img/img.jsx +2 -0
  19. package/src/blocks/input/component-info.js +29 -57
  20. package/src/blocks/input/input.jsx +2 -0
  21. package/src/blocks/raw-text/component-info.js +7 -11
  22. package/src/blocks/raw-text/raw-text.jsx +2 -2
  23. package/src/blocks/section/component-info.js +24 -31
  24. package/src/blocks/section/section.jsx +3 -0
  25. package/src/blocks/select/component-info.js +34 -48
  26. package/src/blocks/select/select.jsx +2 -0
  27. package/src/blocks/submit-button/component-info.js +6 -10
  28. package/src/blocks/submit-button/submit-button.jsx +3 -1
  29. package/src/blocks/symbol/component-info.js +30 -37
  30. package/src/blocks/symbol/symbol.helpers.js +60 -0
  31. package/src/blocks/symbol/symbol.jsx +32 -66
  32. package/src/blocks/text/component-info.js +10 -13
  33. package/src/blocks/text/text.jsx +1 -1
  34. package/src/blocks/textarea/component-info.js +22 -30
  35. package/src/blocks/textarea/textarea.jsx +3 -0
  36. package/src/blocks/video/component-info.js +74 -96
  37. package/src/blocks/video/video.jsx +1 -0
  38. package/src/components/{render-block/render-block.helpers.js → block/block.helpers.js} +26 -44
  39. package/src/components/{render-block/render-block.jsx → block/block.jsx} +65 -80
  40. package/src/components/{render-block → block/components}/block-styles.jsx +17 -17
  41. package/src/components/block/components/block-wrapper.jsx +50 -0
  42. package/src/components/block/components/component-ref/component-ref.helpers.js +41 -0
  43. package/src/components/block/components/component-ref/component-ref.jsx +58 -0
  44. package/src/components/block/components/interactive-element.jsx +30 -0
  45. package/src/components/block/components/repeated-block.jsx +20 -0
  46. package/src/components/blocks/blocks-wrapper.jsx +66 -0
  47. package/src/components/blocks/blocks.jsx +48 -0
  48. package/src/components/{render-content/render-content.jsx → content/components/enable-editor.jsx} +90 -177
  49. package/src/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +6 -7
  50. package/src/components/{render-content/components/render-styles.jsx → content/components/styles.jsx} +6 -6
  51. package/src/components/{render-content/render-content.helpers.js → content/content.helpers.js} +15 -15
  52. package/src/components/content/content.jsx +129 -0
  53. package/src/components/content/content.types.js +0 -0
  54. package/src/components/content/index.js +2 -0
  55. package/src/components/content/wrap-component-ref.js +2 -0
  56. package/src/components/content-variants/content-variants.jsx +110 -0
  57. package/src/components/{render-content-variants → content-variants}/helpers.js +58 -41
  58. package/src/components/inlined-script.jsx +5 -0
  59. package/src/components/inlined-styles.jsx +5 -0
  60. package/src/constants/builder-registered-components.js +34 -25
  61. package/src/constants/device-sizes.js +6 -6
  62. package/src/constants/sdk-version.js +1 -1
  63. package/src/context/builder.context.js +1 -1
  64. package/src/functions/apply-patch-with-mutation.js +66 -0
  65. package/src/functions/camel-to-kebab-case.js +2 -4
  66. package/src/functions/evaluate/acorn.js +1595 -0
  67. package/src/functions/{evaluate.js → evaluate/evaluate.js} +36 -10
  68. package/src/functions/evaluate/index.js +2 -0
  69. package/src/functions/evaluate/interpreter.js +2801 -0
  70. package/src/functions/evaluate/non-node-runtime.js +92 -0
  71. package/src/functions/evaluate/types.js +0 -0
  72. package/src/functions/event-handler-name.js +2 -4
  73. package/src/functions/extract-text-styles.js +4 -12
  74. package/src/functions/fast-clone.js +2 -4
  75. package/src/functions/get-block-actions-handler.js +3 -5
  76. package/src/functions/get-block-actions.js +15 -4
  77. package/src/functions/get-block-component-options.js +11 -12
  78. package/src/functions/get-block-properties.js +29 -19
  79. package/src/functions/get-builder-search-params/index.js +5 -10
  80. package/src/functions/get-content/generate-content-url.js +17 -19
  81. package/src/functions/get-content/index.js +43 -29
  82. package/src/functions/get-fetch.js +1 -3
  83. package/src/functions/get-global-this.js +1 -3
  84. package/src/functions/get-processed-block.js +12 -13
  85. package/src/functions/get-react-native-block-styles.js +11 -12
  86. package/src/functions/if-target.js +1 -3
  87. package/src/functions/is-browser.js +1 -3
  88. package/src/functions/is-editing.js +1 -3
  89. package/src/functions/is-iframe.js +1 -3
  90. package/src/functions/is-non-node-server.js +9 -0
  91. package/src/functions/is-previewing.js +1 -3
  92. package/src/functions/on-change.js +1 -4
  93. package/src/functions/register-component.js +34 -42
  94. package/src/functions/register.js +1 -3
  95. package/src/functions/sanitize-react-native-block-styles.js +22 -17
  96. package/src/functions/set-editor-settings.js +1 -3
  97. package/src/functions/set.js +1 -3
  98. package/src/functions/track/helpers.js +3 -5
  99. package/src/functions/track/index.js +45 -43
  100. package/src/functions/track/interaction.js +11 -7
  101. package/src/functions/transform-block-properties.js +1 -3
  102. package/src/functions/transform-block.js +1 -3
  103. package/src/helpers/ab-tests.js +46 -26
  104. package/src/helpers/canTrack.js +3 -5
  105. package/src/helpers/cookie.js +15 -24
  106. package/src/helpers/css.js +3 -7
  107. package/src/helpers/flatten.js +15 -18
  108. package/src/helpers/localStorage.js +1 -4
  109. package/src/helpers/logger.js +1 -3
  110. package/src/helpers/nullable.js +2 -4
  111. package/src/helpers/preview-lru-cache/get.js +8 -0
  112. package/src/helpers/preview-lru-cache/helpers.js +10 -0
  113. package/src/helpers/preview-lru-cache/init.js +10 -0
  114. package/src/helpers/preview-lru-cache/set.js +35 -0
  115. package/src/helpers/preview-lru-cache/types.js +0 -0
  116. package/src/helpers/sessionId.js +14 -11
  117. package/src/helpers/time.js +1 -3
  118. package/src/helpers/url.js +2 -4
  119. package/src/helpers/uuid.js +4 -6
  120. package/src/helpers/visitorId.js +8 -7
  121. package/src/index-helpers/blocks-exports.js +3 -14
  122. package/src/index-helpers/top-of-file.js +1 -3
  123. package/src/index.js +2 -17
  124. package/src/scripts/init-editing.js +62 -48
  125. package/src/types/api-version.js +1 -3
  126. package/src/types/builder-props.js +0 -0
  127. package/src/types/enforced-partials.js +0 -0
  128. package/src/blocks/util.js +0 -8
  129. package/src/components/render-block/render-component.jsx +0 -40
  130. package/src/components/render-block/render-repeated-block.jsx +0 -16
  131. package/src/components/render-blocks.jsx +0 -100
  132. package/src/components/render-content/builder-editing.jsx +0 -5
  133. package/src/components/render-content/index.js +0 -4
  134. package/src/components/render-content/wrap-component-ref.js +0 -4
  135. package/src/components/render-content-variants/render-content-variants.jsx +0 -94
  136. package/src/components/render-inlined-styles.jsx +0 -5
  137. package/src/functions/evaluate.test.js +0 -17
  138. package/src/functions/get-builder-search-params/fn.test.js +0 -13
  139. package/src/functions/get-content/generate-content-url.test.js +0 -97
  140. package/src/functions/get-processed-block.test.js +0 -34
  141. package/src/functions/on-change.test.js +0 -19
  142. package/src/functions/set.test.js +0 -16
  143. package/src/helpers/url.test.js +0 -21
  144. /package/src/components/{render-block → block}/types.js +0 -0
  145. /package/src/components/{render-content/render-content.types.js → content-variants/content-variants.types.js} +0 -0
@@ -1,134 +1,57 @@
1
1
  import { Show, onMount, on, createEffect, createSignal } from "solid-js";
2
2
 
3
- import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
4
- import { evaluate } from "../../functions/evaluate.js";
5
- import { getContent } from "../../functions/get-content/index.js";
6
- import { fetch } from "../../functions/get-fetch.js";
7
- import { isBrowser } from "../../functions/is-browser.js";
8
- import { isEditing } from "../../functions/is-editing.js";
9
- import { isPreviewing } from "../../functions/is-previewing.js";
10
- import {
11
- components,
12
- createRegisterComponentMessage,
13
- } from "../../functions/register-component.js";
14
- import { _track } from "../../functions/track/index.js";
15
- import RenderBlocks from "../render-blocks.jsx";
16
- import RenderContentStyles from "./components/render-styles.jsx";
17
- import builderContext from "../../context/builder.context.js";
3
+ import { evaluate } from "../../../functions/evaluate";
4
+ import { fetch } from "../../../functions/get-fetch.js";
5
+ import { isBrowser } from "../../../functions/is-browser.js";
6
+ import { isEditing } from "../../../functions/is-editing.js";
7
+ import { createRegisterComponentMessage } from "../../../functions/register-component.js";
8
+ import { _track } from "../../../functions/track/index.js";
9
+ import builderContext from "../../../context/builder.context";
18
10
  import {
19
11
  registerInsertMenu,
20
12
  setupBrowserForEditing,
21
- } from "../../scripts/init-editing.js";
22
- import { checkIsDefined } from "../../helpers/nullable.js";
23
- import { getInteractionPropertiesForEvent } from "../../functions/track/interaction.js";
24
- import {
25
- getContentInitialValue,
26
- getContextStateInitialValue,
27
- } from "./render-content.helpers.js";
28
- import { TARGET } from "../../constants/target.js";
29
- import { logger } from "../../helpers/logger.js";
30
- import { getRenderContentScriptString } from "../render-content-variants/helpers.js";
31
- import { wrapComponentRef } from "./wrap-component-ref.js";
32
-
33
- function RenderContent(props) {
34
- const [forceReRenderCount, setForceReRenderCount] = createSignal(0);
35
-
36
- const [overrideContent, setOverrideContent] = createSignal(null);
37
-
38
- const [update, setUpdate] = createSignal(0);
13
+ } from "../../../scripts/init-editing.js";
14
+ import { checkIsDefined } from "../../../helpers/nullable.js";
15
+ import { getInteractionPropertiesForEvent } from "../../../functions/track/interaction.js";
16
+ import { logger } from "../../../helpers/logger.js";
17
+ import { getContent } from "../../../functions/get-content/index.js";
18
+ import { isPreviewing } from "../../../functions/is-previewing.js";
19
+ import { postPreviewContent } from "../../../helpers/preview-lru-cache/set.js";
39
20
 
21
+ function EnableEditor(props) {
40
22
  const [canTrackToUse, setCanTrackToUse] = createSignal(
41
23
  checkIsDefined(props.canTrack) ? props.canTrack : true
42
24
  );
43
25
 
44
- const [httpReqsData, setHttpReqsData] = createSignal({});
26
+ const [forceReRenderCount, setForceReRenderCount] = createSignal(0);
45
27
 
46
- const [clicked, setClicked] = createSignal(false);
28
+ const [lastUpdated, setLastUpdated] = createSignal(0);
47
29
 
48
- const [scriptStr, setScriptStr] = createSignal(
49
- getRenderContentScriptString({
50
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
51
- contentId: props.content?.id,
52
- parentContentId: props.parentContentId,
53
- })
54
- );
30
+ const [shouldSendResetCookie, setShouldSendResetCookie] = createSignal(false);
55
31
 
56
- const [builderContextSignal, setBuilderContextSignal] = createSignal({
57
- content: getContentInitialValue({
58
- content: props.content,
59
- data: props.data,
60
- }),
61
- localState: undefined,
62
- rootState: getContextStateInitialValue({
63
- content: props.content,
64
- data: props.data,
65
- locale: props.locale,
66
- }),
67
- rootSetState: contentSetState,
68
- context: props.context || {},
69
- apiKey: props.apiKey,
70
- apiVersion: props.apiVersion,
71
- registeredComponents: [
72
- ...getDefaultRegisteredComponents(),
73
- // While this `components` object is deprecated, we must maintain support for it.
74
- // Since users are able to override our default components, we need to make sure that we do not break such
75
- // existing usage.
76
- // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
77
- // which is the new standard way of providing custom components, and must therefore take precedence.
78
- ...components,
79
- ...(props.customComponents || []),
80
- ].reduce(
81
- (acc, { component, ...curr }) => ({
82
- ...acc,
83
- [curr.name]: {
84
- component:
85
- TARGET === "vue3" ? wrapComponentRef(component) : component,
86
- ...curr,
87
- },
88
- }),
89
- {}
90
- ),
91
- inheritedStyles: {},
92
- });
32
+ const [httpReqsData, setHttpReqsData] = createSignal({});
33
+
34
+ const [clicked, setClicked] = createSignal(false);
93
35
 
94
36
  function mergeNewContent(newContent) {
95
- setBuilderContextSignal((PREVIOUS_VALUE) => ({
96
- ...PREVIOUS_VALUE,
97
- content: {
98
- ...builderContextSignal().content,
99
- ...newContent,
100
- data: {
101
- ...builderContextSignal().content?.data,
102
- ...newContent?.data,
103
- },
104
- meta: {
105
- ...builderContextSignal().content?.meta,
106
- ...newContent?.meta,
107
- breakpoints:
108
- newContent?.meta?.breakpoints ||
109
- builderContextSignal().content?.meta?.breakpoints,
110
- },
37
+ const newContentValue = {
38
+ ...props.builderContextSignal.content,
39
+ ...newContent,
40
+ data: {
41
+ ...props.builderContextSignal.content?.data,
42
+ ...newContent?.data,
111
43
  },
112
- }));
113
- }
114
-
115
- function setBreakpoints(breakpoints) {
116
- setBuilderContextSignal((PREVIOUS_VALUE) => ({
117
- ...PREVIOUS_VALUE,
118
- content: {
119
- ...builderContextSignal().content,
120
- meta: {
121
- ...builderContextSignal().content?.meta,
122
- breakpoints,
123
- },
44
+ meta: {
45
+ ...props.builderContextSignal.content?.meta,
46
+ ...newContent?.meta,
47
+ breakpoints:
48
+ newContent?.meta?.breakpoints ||
49
+ props.builderContextSignal.content?.meta?.breakpoints,
124
50
  },
125
- }));
126
- }
127
-
128
- function contentSetState(newRootState) {
129
- setBuilderContextSignal((PREVIOUS_VALUE) => ({
51
+ };
52
+ props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
130
53
  ...PREVIOUS_VALUE,
131
- rootState: newRootState,
54
+ content: newContentValue,
132
55
  }));
133
56
  }
134
57
 
@@ -139,11 +62,18 @@ function RenderContent(props) {
139
62
  case "builder.configureSdk": {
140
63
  const messageContent = data.data;
141
64
  const { breakpoints, contentId } = messageContent;
142
- if (!contentId || contentId !== builderContextSignal().content?.id) {
65
+ if (
66
+ !contentId ||
67
+ contentId !== props.builderContextSignal.content?.id
68
+ ) {
143
69
  return;
144
70
  }
145
71
  if (breakpoints) {
146
- setBreakpoints(breakpoints);
72
+ mergeNewContent({
73
+ meta: {
74
+ breakpoints,
75
+ },
76
+ });
147
77
  }
148
78
  setForceReRenderCount(forceReRenderCount() + 1); // This is a hack to force Qwik to re-render.
149
79
  break;
@@ -163,32 +93,28 @@ function RenderContent(props) {
163
93
 
164
94
  break;
165
95
  }
166
- case "builder.patchUpdates": {
167
- // TODO
168
- break;
169
- }
170
96
  }
171
97
  }
172
98
  }
173
99
 
174
100
  function evaluateJsCode() {
175
101
  // run any dynamic JS code attached to content
176
- const jsCode = builderContextSignal().content?.data?.jsCode;
102
+ const jsCode = props.builderContextSignal.content?.data?.jsCode;
177
103
  if (jsCode) {
178
104
  evaluate({
179
105
  code: jsCode,
180
106
  context: props.context || {},
181
107
  localState: undefined,
182
- rootState: builderContextSignal().rootState,
183
- rootSetState: contentSetState,
108
+ rootState: props.builderContextSignal.rootState,
109
+ rootSetState: props.builderContextSignal.rootSetState,
184
110
  });
185
111
  }
186
112
  }
187
113
 
188
114
  function onClick(event) {
189
- if (builderContextSignal().content) {
190
- const variationId = builderContextSignal().content?.testVariationId;
191
- const contentId = builderContextSignal().content?.id;
115
+ if (props.builderContextSignal.content) {
116
+ const variationId = props.builderContextSignal.content?.testVariationId;
117
+ const contentId = props.builderContextSignal.content?.id;
192
118
  _track({
193
119
  type: "click",
194
120
  canTrack: canTrackToUse(),
@@ -210,8 +136,8 @@ function RenderContent(props) {
210
136
  code: group,
211
137
  context: props.context || {},
212
138
  localState: undefined,
213
- rootState: builderContextSignal().rootState,
214
- rootSetState: contentSetState,
139
+ rootState: props.builderContextSignal.rootState,
140
+ rootSetState: props.builderContextSignal.rootSetState,
215
141
  })
216
142
  );
217
143
  }
@@ -221,10 +147,11 @@ function RenderContent(props) {
221
147
  .then((response) => response.json())
222
148
  .then((json) => {
223
149
  const newState = {
224
- ...builderContextSignal().rootState,
150
+ ...props.builderContextSignal.rootState,
225
151
  [key]: json,
226
152
  };
227
- contentSetState(newState);
153
+ props.builderContextSignal.rootSetState?.(newState);
154
+ httpReqsData()[key] = true;
228
155
  })
229
156
  .catch((err) => {
230
157
  console.error("error fetching dynamic data", url, err);
@@ -232,7 +159,8 @@ function RenderContent(props) {
232
159
  }
233
160
 
234
161
  function runHttpRequests() {
235
- const requests = builderContextSignal().content?.data?.httpRequests ?? {};
162
+ const requests =
163
+ props.builderContextSignal.content?.data?.httpRequests ?? {};
236
164
  Object.entries(requests).forEach(([key, url]) => {
237
165
  if (url && (!httpReqsData()[key] || isEditing())) {
238
166
  const evaluatedUrl = evalExpression(url);
@@ -249,7 +177,7 @@ function RenderContent(props) {
249
177
  window.dispatchEvent(
250
178
  new CustomEvent("builder:component:stateChange", {
251
179
  detail: {
252
- state: builderContextSignal().rootState,
180
+ state: props.builderContextSignal.rootState,
253
181
  ref: {
254
182
  name: props.model,
255
183
  },
@@ -270,6 +198,7 @@ function RenderContent(props) {
270
198
  if (isBrowser()) {
271
199
  if (isEditing()) {
272
200
  setForceReRenderCount(forceReRenderCount() + 1);
201
+ window.addEventListener("message", processMessage);
273
202
  registerInsertMenu();
274
203
  setupBrowserForEditing({
275
204
  ...(props.locale
@@ -288,21 +217,20 @@ function RenderContent(props) {
288
217
  }
289
218
  : {}),
290
219
  });
291
- Object.values(builderContextSignal().registeredComponents).forEach(
220
+ Object.values(props.builderContextSignal.componentInfos).forEach(
292
221
  (registeredComponent) => {
293
222
  const message = createRegisterComponentMessage(registeredComponent);
294
223
  window.parent?.postMessage(message, "*");
295
224
  }
296
225
  );
297
- window.addEventListener("message", processMessage);
298
226
  window.addEventListener(
299
227
  "builder:component:stateChangeListenerActivated",
300
228
  emitStateUpdate
301
229
  );
302
230
  }
303
- if (builderContextSignal().content) {
304
- const variationId = builderContextSignal().content?.testVariationId;
305
- const contentId = builderContextSignal().content?.id;
231
+ if (props.builderContextSignal.content) {
232
+ const variationId = props.builderContextSignal.content?.testVariationId;
233
+ const contentId = props.builderContextSignal.content?.id;
306
234
  _track({
307
235
  type: "impression",
308
236
  canTrack: canTrackToUse(),
@@ -311,7 +239,6 @@ function RenderContent(props) {
311
239
  variationId: variationId !== contentId ? variationId : undefined,
312
240
  });
313
241
  }
314
-
315
242
  // override normal content in preview mode
316
243
  if (isPreviewing()) {
317
244
  const searchParams = new URL(location.href).searchParams;
@@ -339,7 +266,7 @@ function RenderContent(props) {
339
266
  getContent({
340
267
  model: props.model,
341
268
  apiKey: props.apiKey,
342
- apiVersion: props.apiVersion,
269
+ apiVersion: props.builderContextSignal.apiVersion,
343
270
  }).then((content) => {
344
271
  if (content) {
345
272
  mergeNewContent(content);
@@ -360,74 +287,60 @@ function RenderContent(props) {
360
287
  }
361
288
  createEffect(on(() => [props.content], onUpdateFn_0));
362
289
 
363
- function onUpdateFn_1() {
290
+ function onUpdateFn_1() {}
291
+ createEffect(on(() => [shouldSendResetCookie()], onUpdateFn_1));
292
+
293
+ function onUpdateFn_2() {
364
294
  evaluateJsCode();
365
295
  }
366
296
  createEffect(
367
297
  on(
368
298
  () => [
369
- builderContextSignal().content?.data?.jsCode,
370
- builderContextSignal().rootState,
299
+ props.builderContextSignal.content?.data?.jsCode,
300
+ props.builderContextSignal.rootState,
371
301
  ],
372
- onUpdateFn_1
302
+ onUpdateFn_2
373
303
  )
374
304
  );
375
305
 
376
- function onUpdateFn_2() {
306
+ function onUpdateFn_3() {
377
307
  runHttpRequests();
378
308
  }
379
309
  createEffect(
380
- on(() => [builderContextSignal().content?.data?.httpRequests], onUpdateFn_2)
310
+ on(
311
+ () => [props.builderContextSignal.content?.data?.httpRequests],
312
+ onUpdateFn_3
313
+ )
381
314
  );
382
315
 
383
- function onUpdateFn_3() {
316
+ function onUpdateFn_4() {
384
317
  emitStateUpdate();
385
318
  }
386
- createEffect(on(() => [builderContextSignal().rootState], onUpdateFn_3));
319
+ createEffect(on(() => [props.builderContextSignal.rootState], onUpdateFn_4));
387
320
 
388
321
  return (
389
- <builderContext.Provider value={builderContextSignal()}>
390
- <Show when={builderContextSignal().content}>
322
+ <builderContext.Provider value={props.builderContextSignal}>
323
+ <Show when={props.builderContextSignal.content}>
391
324
  <div
392
325
  class={props.classNameProp}
326
+ key={forceReRenderCount()}
393
327
  ref={elementRef}
394
328
  onClick={(event) => onClick(event)}
395
- builder-content-id={builderContextSignal().content?.id}
329
+ builder-content-id={props.builderContextSignal.content?.id}
396
330
  builder-model={props.model}
397
- {...(TARGET === "reactNative"
398
- ? {
399
- dataSet: {
400
- // currently, we can't set the actual ID here.
401
- // we don't need it right now, we just need to identify content divs for testing.
402
- "builder-content-id": "",
403
- },
404
- }
405
- : {})}
406
- {...(props.hideContent
407
- ? {
331
+ {...{}}
332
+ {...(props.showContent
333
+ ? {}
334
+ : {
408
335
  hidden: true,
409
336
  "aria-hidden": true,
410
- }
411
- : {})}
337
+ })}
412
338
  >
413
- <Show when={props.isSsrAbTest}>
414
- <script innerHTML={scriptStr()}></script>
415
- </Show>
416
- <Show when={TARGET !== "reactNative"}>
417
- <RenderContentStyles
418
- contentId={builderContextSignal().content?.id}
419
- cssCode={builderContextSignal().content?.data?.cssCode}
420
- customFonts={builderContextSignal().content?.data?.customFonts}
421
- ></RenderContentStyles>
422
- </Show>
423
- <RenderBlocks
424
- blocks={builderContextSignal().content?.data?.blocks}
425
- key={forceReRenderCount()}
426
- ></RenderBlocks>
339
+ {props.children}
427
340
  </div>
428
341
  </Show>
429
342
  </builderContext.Provider>
430
343
  );
431
344
  }
432
345
 
433
- export default RenderContent;
346
+ export default EnableEditor;
@@ -1,4 +1,4 @@
1
- const getCssFromFont = (font) => {
1
+ const getCssFromFont = font => {
2
2
  var _a, _b;
3
3
  const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
4
4
  const name = family.split(",")[0];
@@ -35,9 +35,11 @@ font-weight: ${weight};
35
35
  }
36
36
  return str;
37
37
  };
38
- const getFontCss = ({ customFonts }) => {
38
+ const getFontCss = ({
39
+ customFonts
40
+ }) => {
39
41
  var _a;
40
- return ((_a = customFonts == null ? void 0 : customFonts.map((font) => getCssFromFont(font))) == null ? void 0 : _a.join(" ")) || "";
42
+ return ((_a = customFonts == null ? void 0 : customFonts.map(font => getCssFromFont(font))) == null ? void 0 : _a.join(" ")) || "";
41
43
  };
42
44
  const getCss = ({
43
45
  cssCode,
@@ -51,7 +53,4 @@ const getCss = ({
51
53
  }
52
54
  return (cssCode == null ? void 0 : cssCode.replace(/&/g, `div[builder-content-id="${contentId}"]`)) || "";
53
55
  };
54
- export {
55
- getCss,
56
- getFontCss
57
- };
56
+ export { getCss, getFontCss }
@@ -1,10 +1,10 @@
1
1
  import { createSignal } from "solid-js";
2
2
 
3
- import RenderInlinedStyles from "../../render-inlined-styles.jsx";
4
- import { getCss } from "./render-styles.helpers";
5
- import { getFontCss } from "./render-styles.helpers";
3
+ import InlinedStyles from "../../inlined-styles.jsx";
4
+ import { getCss } from "./styles.helpers.js";
5
+ import { getFontCss } from "./styles.helpers.js";
6
6
 
7
- function RenderContentStyles(props) {
7
+ function ContentStyles(props) {
8
8
  const [injectedStyles, setInjectedStyles] = createSignal(
9
9
  `
10
10
  ${getCss({
@@ -30,7 +30,7 @@ ${getFontCss({
30
30
  `.trim()
31
31
  );
32
32
 
33
- return <RenderInlinedStyles styles={injectedStyles()}></RenderInlinedStyles>;
33
+ return <InlinedStyles styles={injectedStyles()}></InlinedStyles>;
34
34
  }
35
35
 
36
- export default RenderContentStyles;
36
+ export default ContentStyles;
@@ -4,16 +4,17 @@ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
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;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value
12
+ }) : obj[key] = value;
8
13
  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
- }
14
+ for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]);
17
+ }
17
18
  return a;
18
19
  };
19
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
@@ -24,13 +25,15 @@ const getContextStateInitialValue = ({
24
25
  }) => {
25
26
  var _a, _b, _c;
26
27
  const defaultValues = {};
27
- (_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach((input) => {
28
+ (_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach(input => {
28
29
  var _a2;
29
30
  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
31
  defaultValues[input.name] = input.defaultValue;
31
32
  }
32
33
  });
33
- const stateToUse = __spreadValues(__spreadValues(__spreadValues({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? { locale } : {});
34
+ const stateToUse = __spreadValues(__spreadValues(__spreadValues({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? {
35
+ locale
36
+ } : {});
34
37
  return __spreadValues(__spreadValues({}, defaultValues), stateToUse);
35
38
  };
36
39
  const getContentInitialValue = ({
@@ -42,7 +45,4 @@ const getContentInitialValue = ({
42
45
  meta: content == null ? void 0 : content.meta
43
46
  });
44
47
  };
45
- export {
46
- getContentInitialValue,
47
- getContextStateInitialValue
48
- };
48
+ export { getContentInitialValue, getContextStateInitialValue }
@@ -0,0 +1,129 @@
1
+ import { Show, createSignal } from "solid-js";
2
+
3
+ import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
4
+ import {
5
+ components,
6
+ serializeComponentInfo,
7
+ } from "../../functions/register-component.js";
8
+ import Blocks from "../blocks/blocks.jsx";
9
+ import ContentStyles from "./components/styles.jsx";
10
+ import {
11
+ getContentInitialValue,
12
+ getContextStateInitialValue,
13
+ } from "./content.helpers.js";
14
+ import { TARGET } from "../../constants/target.js";
15
+ import { getRenderContentScriptString } from "../content-variants/helpers.js";
16
+ import EnableEditor from "./components/enable-editor.jsx";
17
+ import InlinedScript from "../inlined-script.jsx";
18
+ import { wrapComponentRef } from "./wrap-component-ref.js";
19
+
20
+ function ContentComponent(props) {
21
+ const [scriptStr, setScriptStr] = createSignal(
22
+ getRenderContentScriptString({
23
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
24
+ variationId: props.content?.testVariationId,
25
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
26
+ contentId: props.content?.id,
27
+ })
28
+ );
29
+
30
+ const [registeredComponents, setRegisteredComponents] = createSignal(
31
+ [
32
+ ...getDefaultRegisteredComponents(),
33
+ // While this `components` object is deprecated, we must maintain support for it.
34
+ // Since users are able to override our default components, we need to make sure that we do not break such
35
+ // existing usage.
36
+ // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
37
+ // which is the new standard way of providing custom components, and must therefore take precedence.
38
+ ...components,
39
+ ...(props.customComponents || []),
40
+ ].reduce(
41
+ (acc, { component, ...info }) => ({
42
+ ...acc,
43
+ [info.name]: {
44
+ component: component,
45
+ ...serializeComponentInfo(info),
46
+ },
47
+ }),
48
+ {}
49
+ )
50
+ );
51
+
52
+ const [builderContextSignal, setBuilderContextSignal] = createSignal({
53
+ content: getContentInitialValue({
54
+ content: props.content,
55
+ data: props.data,
56
+ }),
57
+ localState: undefined,
58
+ rootState: getContextStateInitialValue({
59
+ content: props.content,
60
+ data: props.data,
61
+ locale: props.locale,
62
+ }),
63
+ rootSetState: contentSetState,
64
+ context: props.context || {},
65
+ apiKey: props.apiKey,
66
+ apiVersion: props.apiVersion,
67
+ componentInfos: [
68
+ ...getDefaultRegisteredComponents(),
69
+ // While this `components` object is deprecated, we must maintain support for it.
70
+ // Since users are able to override our default components, we need to make sure that we do not break such
71
+ // existing usage.
72
+ // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
73
+ // which is the new standard way of providing custom components, and must therefore take precedence.
74
+ ...components,
75
+ ...(props.customComponents || []),
76
+ ].reduce(
77
+ (acc, { component: _, ...info }) => ({
78
+ ...acc,
79
+ [info.name]: serializeComponentInfo(info),
80
+ }),
81
+ {}
82
+ ),
83
+ inheritedStyles: {},
84
+ });
85
+
86
+ function contentSetState(newRootState) {
87
+ setBuilderContextSignal((PREVIOUS_VALUE) => ({
88
+ ...PREVIOUS_VALUE,
89
+ rootState: newRootState,
90
+ }));
91
+ }
92
+
93
+ return (
94
+ <EnableEditor
95
+ content={props.content}
96
+ model={props.model}
97
+ context={props.context}
98
+ apiKey={props.apiKey}
99
+ canTrack={props.canTrack}
100
+ locale={props.locale}
101
+ includeRefs={props.includeRefs}
102
+ enrich={props.enrich}
103
+ classNameProp={props.classNameProp}
104
+ showContent={props.showContent}
105
+ builderContextSignal={builderContextSignal()}
106
+ {...{
107
+ setBuilderContextSignal: setBuilderContextSignal,
108
+ }}
109
+ >
110
+ <Show when={props.isSsrAbTest}>
111
+ <InlinedScript scriptStr={scriptStr()}></InlinedScript>
112
+ </Show>
113
+ <Show when={TARGET !== "reactNative"}>
114
+ <ContentStyles
115
+ contentId={builderContextSignal().content?.id}
116
+ cssCode={builderContextSignal().content?.data?.cssCode}
117
+ customFonts={builderContextSignal().content?.data?.customFonts}
118
+ ></ContentStyles>
119
+ </Show>
120
+ <Blocks
121
+ blocks={builderContextSignal().content?.data?.blocks}
122
+ context={builderContextSignal()}
123
+ registeredComponents={registeredComponents()}
124
+ ></Blocks>
125
+ </EnableEditor>
126
+ );
127
+ }
128
+
129
+ export default ContentComponent;
File without changes
@@ -0,0 +1,2 @@
1
+ import { default as default2 } from "./content";
2
+ export { default2 as default }
@@ -0,0 +1,2 @@
1
+ const wrapComponentRef = component => component;
2
+ export { wrapComponentRef }