@builder.io/sdk-react 0.5.9 → 0.6.1

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 (322) hide show
  1. package/README.md +0 -4
  2. package/lib/browser/index.cjs +97 -0
  3. package/lib/browser/index.mjs +2598 -0
  4. package/lib/browser/server-entry-2e639417.js +2 -0
  5. package/lib/browser/server-entry-f7504f89.mjs +534 -0
  6. package/lib/browser/server-entry.cjs +1 -0
  7. package/lib/browser/server-entry.mjs +16 -0
  8. package/lib/edge/index.cjs +117 -0
  9. package/lib/edge/index.mjs +5042 -0
  10. package/lib/edge/server-entry-2e639417.js +2 -0
  11. package/lib/edge/server-entry-f7504f89.mjs +534 -0
  12. package/lib/edge/server-entry.cjs +1 -0
  13. package/lib/edge/server-entry.mjs +16 -0
  14. package/lib/node/index.cjs +97 -0
  15. package/lib/node/index.mjs +2598 -0
  16. package/lib/node/server-entry-2e639417.js +2 -0
  17. package/lib/node/server-entry-f7504f89.mjs +534 -0
  18. package/lib/node/server-entry.cjs +1 -0
  19. package/lib/node/server-entry.mjs +16 -0
  20. package/package.json +101 -11
  21. package/types/constants/sdk-version.d.ts +1 -0
  22. package/types/functions/deopt.d.ts +4 -0
  23. package/types/functions/evaluate/edge-runtime/edge-runtime.d.ts +2 -0
  24. package/types/functions/evaluate/edge-runtime/index.d.ts +1 -0
  25. package/types/functions/evaluate/placeholder-runtime.d.ts +2 -0
  26. package/{dist → types}/functions/fetch-builder-props.d.ts +2 -1
  27. package/{dist → types}/functions/get-content/index.d.ts +4 -5
  28. package/types/functions/is-edge-runtime.d.ts +4 -0
  29. package/{dist → types}/index-helpers/blocks-exports.d.ts +2 -2
  30. package/dist/blocks/BaseText.js +0 -9
  31. package/dist/blocks/button/button.js +0 -12
  32. package/dist/blocks/button/component-info.js +0 -34
  33. package/dist/blocks/columns/columns.js +0 -121
  34. package/dist/blocks/columns/component-info.js +0 -219
  35. package/dist/blocks/custom-code/component-info.js +0 -23
  36. package/dist/blocks/custom-code/custom-code.js +0 -51
  37. package/dist/blocks/embed/component-info.js +0 -39
  38. package/dist/blocks/embed/embed.js +0 -42
  39. package/dist/blocks/embed/helpers.js +0 -2
  40. package/dist/blocks/form/component-info.js +0 -232
  41. package/dist/blocks/form/form.js +0 -6
  42. package/dist/blocks/fragment/component-info.js +0 -7
  43. package/dist/blocks/fragment/fragment.js +0 -6
  44. package/dist/blocks/helpers.js +0 -40
  45. package/dist/blocks/image/component-info.js +0 -122
  46. package/dist/blocks/image/image.helpers.js +0 -47
  47. package/dist/blocks/image/image.js +0 -82
  48. package/dist/blocks/img/component-info.js +0 -15
  49. package/dist/blocks/img/img.js +0 -10
  50. package/dist/blocks/input/component-info.js +0 -46
  51. package/dist/blocks/input/input.js +0 -7
  52. package/dist/blocks/raw-text/component-info.js +0 -10
  53. package/dist/blocks/raw-text/raw-text.js +0 -6
  54. package/dist/blocks/section/component-info.js +0 -40
  55. package/dist/blocks/section/section.js +0 -17
  56. package/dist/blocks/select/component-info.js +0 -43
  57. package/dist/blocks/select/select.js +0 -7
  58. package/dist/blocks/submit-button/component-info.js +0 -26
  59. package/dist/blocks/submit-button/submit-button.js +0 -6
  60. package/dist/blocks/symbol/component-info.js +0 -34
  61. package/dist/blocks/symbol/symbol.helpers.js +0 -31
  62. package/dist/blocks/symbol/symbol.js +0 -45
  63. package/dist/blocks/text/component-info.js +0 -19
  64. package/dist/blocks/text/text.js +0 -8
  65. package/dist/blocks/textarea/component-info.js +0 -37
  66. package/dist/blocks/textarea/textarea.js +0 -6
  67. package/dist/blocks/video/component-info.js +0 -82
  68. package/dist/blocks/video/video.js +0 -50
  69. package/dist/components/block/block.helpers.js +0 -69
  70. package/dist/components/block/block.js +0 -94
  71. package/dist/components/block/components/block-styles.js +0 -65
  72. package/dist/components/block/components/block-wrapper.js +0 -36
  73. package/dist/components/block/components/component-ref/component-ref.helpers.js +0 -22
  74. package/dist/components/block/components/component-ref/component-ref.js +0 -23
  75. package/dist/components/block/components/interactive-element.js +0 -20
  76. package/dist/components/block/components/repeated-block.js +0 -11
  77. package/dist/components/block/types.js +0 -1
  78. package/dist/components/blocks/blocks-wrapper.js +0 -38
  79. package/dist/components/blocks/blocks.js +0 -17
  80. package/dist/components/content/components/enable-editor.js +0 -271
  81. package/dist/components/content/components/styles.helpers.js +0 -58
  82. package/dist/components/content/components/styles.js +0 -32
  83. package/dist/components/content/content.helpers.js +0 -30
  84. package/dist/components/content/content.js +0 -85
  85. package/dist/components/content/content.types.js +0 -1
  86. package/dist/components/content/index.js +0 -1
  87. package/dist/components/content/wrap-component-ref.js +0 -6
  88. package/dist/components/content-variants/content-variants.js +0 -52
  89. package/dist/components/content-variants/content-variants.types.js +0 -1
  90. package/dist/components/content-variants/helpers.js +0 -189
  91. package/dist/components/inlined-script.js +0 -6
  92. package/dist/components/inlined-styles.js +0 -6
  93. package/dist/constants/builder-registered-components.js +0 -60
  94. package/dist/constants/device-sizes.js +0 -45
  95. package/dist/constants/sdk-version.d.ts +0 -1
  96. package/dist/constants/sdk-version.js +0 -1
  97. package/dist/constants/target.js +0 -2
  98. package/dist/context/builder.context.js +0 -12
  99. package/dist/context/components.context.js +0 -2
  100. package/dist/context/types.js +0 -1
  101. package/dist/functions/apply-patch-with-mutation.js +0 -54
  102. package/dist/functions/camel-to-kebab-case.js +0 -1
  103. package/dist/functions/evaluate/browser-runtime/browser.js +0 -31
  104. package/dist/functions/evaluate/browser-runtime/index.js +0 -1
  105. package/dist/functions/evaluate/evaluate.js +0 -47
  106. package/dist/functions/evaluate/helpers.js +0 -10
  107. package/dist/functions/evaluate/index.js +0 -1
  108. package/dist/functions/evaluate/node-runtime/index.js +0 -1
  109. package/dist/functions/evaluate/non-node-runtime/acorn-interpreter.js +0 -3111
  110. package/dist/functions/evaluate/non-node-runtime/index.d.ts +0 -1
  111. package/dist/functions/evaluate/non-node-runtime/index.js +0 -2
  112. package/dist/functions/evaluate/non-node-runtime/non-node-runtime.d.ts +0 -2
  113. package/dist/functions/evaluate/non-node-runtime/non-node-runtime.js +0 -83
  114. package/dist/functions/event-handler-name.js +0 -4
  115. package/dist/functions/extract-text-styles.js +0 -22
  116. package/dist/functions/fast-clone.js +0 -4
  117. package/dist/functions/fetch-builder-props.js +0 -25
  118. package/dist/functions/get-block-actions-handler.js +0 -10
  119. package/dist/functions/get-block-actions.js +0 -28
  120. package/dist/functions/get-block-component-options.js +0 -10
  121. package/dist/functions/get-block-properties.js +0 -72
  122. package/dist/functions/get-builder-search-params/index.js +0 -38
  123. package/dist/functions/get-content/generate-content-url.js +0 -33
  124. package/dist/functions/get-content/index.js +0 -100
  125. package/dist/functions/get-content/types.js +0 -1
  126. package/dist/functions/get-fetch.js +0 -11
  127. package/dist/functions/get-global-this.js +0 -15
  128. package/dist/functions/get-processed-block.js +0 -46
  129. package/dist/functions/get-react-native-block-styles.js +0 -17
  130. package/dist/functions/is-browser.js +0 -3
  131. package/dist/functions/is-editing.js +0 -5
  132. package/dist/functions/is-iframe.js +0 -4
  133. package/dist/functions/is-non-node-server.d.ts +0 -4
  134. package/dist/functions/is-non-node-server.js +0 -8
  135. package/dist/functions/is-previewing.js +0 -11
  136. package/dist/functions/on-change.js +0 -28
  137. package/dist/functions/register-component.js +0 -38
  138. package/dist/functions/register.js +0 -27
  139. package/dist/functions/sanitize-react-native-block-styles.js +0 -61
  140. package/dist/functions/set-editor-settings.js +0 -12
  141. package/dist/functions/set.js +0 -14
  142. package/dist/functions/track/helpers.js +0 -51
  143. package/dist/functions/track/index.js +0 -71
  144. package/dist/functions/track/interaction.js +0 -53
  145. package/dist/functions/transform-block-properties.js +0 -5
  146. package/dist/functions/transform-block.js +0 -4
  147. package/dist/helpers/ab-tests.js +0 -122
  148. package/dist/helpers/canTrack.js +0 -2
  149. package/dist/helpers/cookie.js +0 -55
  150. package/dist/helpers/css.js +0 -27
  151. package/dist/helpers/flatten.js +0 -19
  152. package/dist/helpers/localStorage.js +0 -24
  153. package/dist/helpers/logger.js +0 -7
  154. package/dist/helpers/nullable.js +0 -1
  155. package/dist/helpers/preview-lru-cache/get.js +0 -3
  156. package/dist/helpers/preview-lru-cache/helpers.js +0 -0
  157. package/dist/helpers/preview-lru-cache/init.js +0 -6
  158. package/dist/helpers/preview-lru-cache/set.js +0 -5
  159. package/dist/helpers/preview-lru-cache/types.js +0 -0
  160. package/dist/helpers/sessionId.js +0 -30
  161. package/dist/helpers/time.js +0 -2
  162. package/dist/helpers/url.js +0 -15
  163. package/dist/helpers/uuid.js +0 -15
  164. package/dist/helpers/visitorId.js +0 -30
  165. package/dist/index-helpers/blocks-exports.js +0 -19
  166. package/dist/index-helpers/top-of-file.js +0 -4
  167. package/dist/index.js +0 -7
  168. package/dist/scripts/init-editing.js +0 -110
  169. package/dist/server-index.js +0 -10
  170. package/dist/types/api-version.js +0 -1
  171. package/dist/types/builder-block.js +0 -1
  172. package/dist/types/builder-content.js +0 -1
  173. package/dist/types/builder-props.js +0 -1
  174. package/dist/types/can-track.js +0 -1
  175. package/dist/types/components.js +0 -1
  176. package/dist/types/deep-partial.js +0 -1
  177. package/dist/types/element.js +0 -1
  178. package/dist/types/enforced-partials.js +0 -1
  179. package/dist/types/input.js +0 -1
  180. package/dist/types/targets.js +0 -1
  181. package/dist/types/typescript.js +0 -1
  182. /package/{dist → types}/blocks/BaseText.d.ts +0 -0
  183. /package/{dist → types}/blocks/button/button.d.ts +0 -0
  184. /package/{dist → types}/blocks/button/component-info.d.ts +0 -0
  185. /package/{dist → types}/blocks/columns/columns.d.ts +0 -0
  186. /package/{dist → types}/blocks/columns/component-info.d.ts +0 -0
  187. /package/{dist → types}/blocks/custom-code/component-info.d.ts +0 -0
  188. /package/{dist → types}/blocks/custom-code/custom-code.d.ts +0 -0
  189. /package/{dist → types}/blocks/embed/component-info.d.ts +0 -0
  190. /package/{dist → types}/blocks/embed/embed.d.ts +0 -0
  191. /package/{dist → types}/blocks/embed/helpers.d.ts +0 -0
  192. /package/{dist → types}/blocks/form/component-info.d.ts +0 -0
  193. /package/{dist → types}/blocks/form/form.d.ts +0 -0
  194. /package/{dist → types}/blocks/fragment/component-info.d.ts +0 -0
  195. /package/{dist → types}/blocks/fragment/fragment.d.ts +0 -0
  196. /package/{dist → types}/blocks/helpers.d.ts +0 -0
  197. /package/{dist → types}/blocks/image/component-info.d.ts +0 -0
  198. /package/{dist → types}/blocks/image/image.d.ts +0 -0
  199. /package/{dist → types}/blocks/image/image.helpers.d.ts +0 -0
  200. /package/{dist → types}/blocks/img/component-info.d.ts +0 -0
  201. /package/{dist → types}/blocks/img/img.d.ts +0 -0
  202. /package/{dist → types}/blocks/input/component-info.d.ts +0 -0
  203. /package/{dist → types}/blocks/input/input.d.ts +0 -0
  204. /package/{dist → types}/blocks/raw-text/component-info.d.ts +0 -0
  205. /package/{dist → types}/blocks/raw-text/raw-text.d.ts +0 -0
  206. /package/{dist → types}/blocks/section/component-info.d.ts +0 -0
  207. /package/{dist → types}/blocks/section/section.d.ts +0 -0
  208. /package/{dist → types}/blocks/select/component-info.d.ts +0 -0
  209. /package/{dist → types}/blocks/select/select.d.ts +0 -0
  210. /package/{dist → types}/blocks/submit-button/component-info.d.ts +0 -0
  211. /package/{dist → types}/blocks/submit-button/submit-button.d.ts +0 -0
  212. /package/{dist → types}/blocks/symbol/component-info.d.ts +0 -0
  213. /package/{dist → types}/blocks/symbol/symbol.d.ts +0 -0
  214. /package/{dist → types}/blocks/symbol/symbol.helpers.d.ts +0 -0
  215. /package/{dist → types}/blocks/text/component-info.d.ts +0 -0
  216. /package/{dist → types}/blocks/text/text.d.ts +0 -0
  217. /package/{dist → types}/blocks/textarea/component-info.d.ts +0 -0
  218. /package/{dist → types}/blocks/textarea/textarea.d.ts +0 -0
  219. /package/{dist → types}/blocks/video/component-info.d.ts +0 -0
  220. /package/{dist → types}/blocks/video/video.d.ts +0 -0
  221. /package/{dist → types}/components/block/block.d.ts +0 -0
  222. /package/{dist → types}/components/block/block.helpers.d.ts +0 -0
  223. /package/{dist → types}/components/block/components/block-styles.d.ts +0 -0
  224. /package/{dist → types}/components/block/components/block-wrapper.d.ts +0 -0
  225. /package/{dist → types}/components/block/components/component-ref/component-ref.d.ts +0 -0
  226. /package/{dist → types}/components/block/components/component-ref/component-ref.helpers.d.ts +0 -0
  227. /package/{dist → types}/components/block/components/interactive-element.d.ts +0 -0
  228. /package/{dist → types}/components/block/components/repeated-block.d.ts +0 -0
  229. /package/{dist → types}/components/block/types.d.ts +0 -0
  230. /package/{dist → types}/components/blocks/blocks-wrapper.d.ts +0 -0
  231. /package/{dist → types}/components/blocks/blocks.d.ts +0 -0
  232. /package/{dist → types}/components/content/components/enable-editor.d.ts +0 -0
  233. /package/{dist → types}/components/content/components/styles.d.ts +0 -0
  234. /package/{dist → types}/components/content/components/styles.helpers.d.ts +0 -0
  235. /package/{dist → types}/components/content/content.d.ts +0 -0
  236. /package/{dist → types}/components/content/content.helpers.d.ts +0 -0
  237. /package/{dist → types}/components/content/content.types.d.ts +0 -0
  238. /package/{dist → types}/components/content/index.d.ts +0 -0
  239. /package/{dist → types}/components/content/wrap-component-ref.d.ts +0 -0
  240. /package/{dist → types}/components/content-variants/content-variants.d.ts +0 -0
  241. /package/{dist → types}/components/content-variants/content-variants.types.d.ts +0 -0
  242. /package/{dist → types}/components/content-variants/helpers.d.ts +0 -0
  243. /package/{dist → types}/components/inlined-script.d.ts +0 -0
  244. /package/{dist → types}/components/inlined-styles.d.ts +0 -0
  245. /package/{dist → types}/constants/builder-registered-components.d.ts +0 -0
  246. /package/{dist → types}/constants/device-sizes.d.ts +0 -0
  247. /package/{dist → types}/constants/target.d.ts +0 -0
  248. /package/{dist → types}/context/builder.context.d.ts +0 -0
  249. /package/{dist → types}/context/components.context.d.ts +0 -0
  250. /package/{dist → types}/context/types.d.ts +0 -0
  251. /package/{dist → types}/functions/apply-patch-with-mutation.d.ts +0 -0
  252. /package/{dist → types}/functions/camel-to-kebab-case.d.ts +0 -0
  253. /package/{dist → types}/functions/evaluate/browser-runtime/browser.d.ts +0 -0
  254. /package/{dist → types}/functions/evaluate/browser-runtime/index.d.ts +0 -0
  255. /package/{dist/functions/evaluate/non-node-runtime → types/functions/evaluate/edge-runtime}/acorn-interpreter.d.ts +0 -0
  256. /package/{dist → types}/functions/evaluate/evaluate.d.ts +0 -0
  257. /package/{dist → types}/functions/evaluate/helpers.d.ts +0 -0
  258. /package/{dist → types}/functions/evaluate/index.d.ts +0 -0
  259. /package/{dist → types}/functions/evaluate/node-runtime/index.d.ts +0 -0
  260. /package/{dist → types}/functions/event-handler-name.d.ts +0 -0
  261. /package/{dist → types}/functions/extract-text-styles.d.ts +0 -0
  262. /package/{dist → types}/functions/fast-clone.d.ts +0 -0
  263. /package/{dist → types}/functions/get-block-actions-handler.d.ts +0 -0
  264. /package/{dist → types}/functions/get-block-actions.d.ts +0 -0
  265. /package/{dist → types}/functions/get-block-component-options.d.ts +0 -0
  266. /package/{dist → types}/functions/get-block-properties.d.ts +0 -0
  267. /package/{dist → types}/functions/get-builder-search-params/index.d.ts +0 -0
  268. /package/{dist → types}/functions/get-content/generate-content-url.d.ts +0 -0
  269. /package/{dist → types}/functions/get-content/types.d.ts +0 -0
  270. /package/{dist → types}/functions/get-fetch.d.ts +0 -0
  271. /package/{dist → types}/functions/get-global-this.d.ts +0 -0
  272. /package/{dist → types}/functions/get-processed-block.d.ts +0 -0
  273. /package/{dist → types}/functions/get-react-native-block-styles.d.ts +0 -0
  274. /package/{dist → types}/functions/is-browser.d.ts +0 -0
  275. /package/{dist → types}/functions/is-editing.d.ts +0 -0
  276. /package/{dist → types}/functions/is-iframe.d.ts +0 -0
  277. /package/{dist → types}/functions/is-previewing.d.ts +0 -0
  278. /package/{dist → types}/functions/on-change.d.ts +0 -0
  279. /package/{dist → types}/functions/register-component.d.ts +0 -0
  280. /package/{dist → types}/functions/register.d.ts +0 -0
  281. /package/{dist → types}/functions/sanitize-react-native-block-styles.d.ts +0 -0
  282. /package/{dist → types}/functions/set-editor-settings.d.ts +0 -0
  283. /package/{dist → types}/functions/set.d.ts +0 -0
  284. /package/{dist → types}/functions/track/helpers.d.ts +0 -0
  285. /package/{dist → types}/functions/track/index.d.ts +0 -0
  286. /package/{dist → types}/functions/track/interaction.d.ts +0 -0
  287. /package/{dist → types}/functions/transform-block-properties.d.ts +0 -0
  288. /package/{dist → types}/functions/transform-block.d.ts +0 -0
  289. /package/{dist → types}/helpers/ab-tests.d.ts +0 -0
  290. /package/{dist → types}/helpers/canTrack.d.ts +0 -0
  291. /package/{dist → types}/helpers/cookie.d.ts +0 -0
  292. /package/{dist → types}/helpers/css.d.ts +0 -0
  293. /package/{dist → types}/helpers/flatten.d.ts +0 -0
  294. /package/{dist → types}/helpers/localStorage.d.ts +0 -0
  295. /package/{dist → types}/helpers/logger.d.ts +0 -0
  296. /package/{dist → types}/helpers/nullable.d.ts +0 -0
  297. /package/{dist → types}/helpers/preview-lru-cache/get.d.ts +0 -0
  298. /package/{dist → types}/helpers/preview-lru-cache/helpers.d.ts +0 -0
  299. /package/{dist → types}/helpers/preview-lru-cache/init.d.ts +0 -0
  300. /package/{dist → types}/helpers/preview-lru-cache/set.d.ts +0 -0
  301. /package/{dist → types}/helpers/preview-lru-cache/types.d.ts +0 -0
  302. /package/{dist → types}/helpers/sessionId.d.ts +0 -0
  303. /package/{dist → types}/helpers/time.d.ts +0 -0
  304. /package/{dist → types}/helpers/url.d.ts +0 -0
  305. /package/{dist → types}/helpers/uuid.d.ts +0 -0
  306. /package/{dist → types}/helpers/visitorId.d.ts +0 -0
  307. /package/{dist → types}/index-helpers/top-of-file.d.ts +0 -0
  308. /package/{dist → types}/index.d.ts +0 -0
  309. /package/{dist → types}/scripts/init-editing.d.ts +0 -0
  310. /package/{dist → types}/server-index.d.ts +0 -0
  311. /package/{dist → types}/types/api-version.d.ts +0 -0
  312. /package/{dist → types}/types/builder-block.d.ts +0 -0
  313. /package/{dist → types}/types/builder-content.d.ts +0 -0
  314. /package/{dist → types}/types/builder-props.d.ts +0 -0
  315. /package/{dist → types}/types/can-track.d.ts +0 -0
  316. /package/{dist → types}/types/components.d.ts +0 -0
  317. /package/{dist → types}/types/deep-partial.d.ts +0 -0
  318. /package/{dist → types}/types/element.d.ts +0 -0
  319. /package/{dist → types}/types/enforced-partials.d.ts +0 -0
  320. /package/{dist → types}/types/input.d.ts +0 -0
  321. /package/{dist → types}/types/targets.d.ts +0 -0
  322. /package/{dist → types}/types/typescript.d.ts +0 -0
@@ -1,271 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { useState, useRef, useEffect } from "react";
4
- import { evaluate } from "../../../functions/evaluate/index.js";
5
- import { fetch } from "../../../functions/get-fetch.js";
6
- import { isBrowser } from "../../../functions/is-browser.js";
7
- import { isEditing } from "../../../functions/is-editing.js";
8
- import { createRegisterComponentMessage } from "../../../functions/register-component.js";
9
- import { _track } from "../../../functions/track/index.js";
10
- import builderContext from "../../../context/builder.context.js";
11
- import { registerInsertMenu, setupBrowserForEditing, } from "../../../scripts/init-editing.js";
12
- import { checkIsDefined } from "../../../helpers/nullable.js";
13
- import { getInteractionPropertiesForEvent } from "../../../functions/track/interaction.js";
14
- import { logger } from "../../../helpers/logger.js";
15
- import { fetchOneEntry } from "../../../functions/get-content/index.js";
16
- import { isPreviewing } from "../../../functions/is-previewing.js";
17
- import { fastClone } from "../../../functions/fast-clone.js";
18
- function EnableEditor(props) {
19
- const elementRef = useRef(null);
20
- const [canTrackToUse, setCanTrackToUse] = useState(() => checkIsDefined(props.canTrack) ? props.canTrack : true);
21
- const [forceReRenderCount, setForceReRenderCount] = useState(() => 0);
22
- function mergeNewContent(newContent) {
23
- const newContentValue = {
24
- ...props.builderContextSignal.content,
25
- ...newContent,
26
- data: {
27
- ...props.builderContextSignal.content?.data,
28
- ...newContent?.data,
29
- },
30
- meta: {
31
- ...props.builderContextSignal.content?.meta,
32
- ...newContent?.meta,
33
- breakpoints: newContent?.meta?.breakpoints ||
34
- props.builderContextSignal.content?.meta?.breakpoints,
35
- },
36
- };
37
- props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
38
- ...PREVIOUS_VALUE,
39
- content: newContentValue,
40
- }));
41
- }
42
- const [lastUpdated, setLastUpdated] = useState(() => 0);
43
- const [shouldSendResetCookie, setShouldSendResetCookie] = useState(() => false);
44
- function processMessage(event) {
45
- const { data } = event;
46
- if (data) {
47
- switch (data.type) {
48
- case "builder.configureSdk": {
49
- const messageContent = data.data;
50
- const { breakpoints, contentId } = messageContent;
51
- if (!contentId ||
52
- contentId !== props.builderContextSignal.content?.id) {
53
- return;
54
- }
55
- if (breakpoints) {
56
- mergeNewContent({
57
- meta: {
58
- breakpoints,
59
- },
60
- });
61
- }
62
- setForceReRenderCount(forceReRenderCount + 1); // This is a hack to force Qwik to re-render.
63
- break;
64
- }
65
- case "builder.contentUpdate": {
66
- const messageContent = data.data;
67
- const key = messageContent.key ||
68
- messageContent.alias ||
69
- messageContent.entry ||
70
- messageContent.modelName;
71
- const contentData = messageContent.data;
72
- if (key === props.model) {
73
- mergeNewContent(contentData);
74
- setForceReRenderCount(forceReRenderCount + 1); // This is a hack to force Qwik to re-render.
75
- }
76
- break;
77
- }
78
- }
79
- }
80
- }
81
- function evaluateJsCode() {
82
- // run any dynamic JS code attached to content
83
- const jsCode = props.builderContextSignal.content?.data?.jsCode;
84
- if (jsCode) {
85
- evaluate({
86
- code: jsCode,
87
- context: props.context || {},
88
- localState: undefined,
89
- rootState: props.builderContextSignal.rootState,
90
- rootSetState: props.builderContextSignal.rootSetState,
91
- });
92
- }
93
- }
94
- const [httpReqsData, setHttpReqsData] = useState(() => ({}));
95
- const [clicked, setClicked] = useState(() => false);
96
- function onClick(event) {
97
- if (props.builderContextSignal.content) {
98
- const variationId = props.builderContextSignal.content?.testVariationId;
99
- const contentId = props.builderContextSignal.content?.id;
100
- _track({
101
- type: "click",
102
- canTrack: canTrackToUse,
103
- contentId,
104
- apiKey: props.apiKey,
105
- variationId: variationId !== contentId ? variationId : undefined,
106
- ...getInteractionPropertiesForEvent(event),
107
- unique: !clicked,
108
- });
109
- }
110
- if (!clicked) {
111
- setClicked(true);
112
- }
113
- }
114
- function evalExpression(expression) {
115
- return expression.replace(/{{([^}]+)}}/g, (_match, group) => evaluate({
116
- code: group,
117
- context: props.context || {},
118
- localState: undefined,
119
- rootState: props.builderContextSignal.rootState,
120
- rootSetState: props.builderContextSignal.rootSetState,
121
- }));
122
- }
123
- function handleRequest({ url, key }) {
124
- fetch(url)
125
- .then((response) => response.json())
126
- .then((json) => {
127
- const newState = {
128
- ...props.builderContextSignal.rootState,
129
- [key]: json,
130
- };
131
- props.builderContextSignal.rootSetState?.(newState);
132
- httpReqsData[key] = true;
133
- })
134
- .catch((err) => {
135
- console.error("error fetching dynamic data", url, err);
136
- });
137
- }
138
- function runHttpRequests() {
139
- const requests = props.builderContextSignal.content?.data?.httpRequests ?? {};
140
- Object.entries(requests).forEach(([key, url]) => {
141
- if (url && (!httpReqsData[key] || isEditing())) {
142
- const evaluatedUrl = evalExpression(url);
143
- handleRequest({
144
- url: evaluatedUrl,
145
- key,
146
- });
147
- }
148
- });
149
- }
150
- function emitStateUpdate() {
151
- if (isEditing()) {
152
- window.dispatchEvent(new CustomEvent("builder:component:stateChange", {
153
- detail: {
154
- state: fastClone(props.builderContextSignal.rootState),
155
- ref: {
156
- name: props.model,
157
- },
158
- },
159
- }));
160
- }
161
- }
162
- useEffect(() => {
163
- if (!props.apiKey) {
164
- logger.error("No API key provided to `RenderContent` component. This can cause issues. Please provide an API key using the `apiKey` prop.");
165
- }
166
- if (isBrowser()) {
167
- if (isEditing()) {
168
- setForceReRenderCount(forceReRenderCount + 1);
169
- window.addEventListener("message", processMessage);
170
- registerInsertMenu();
171
- setupBrowserForEditing({
172
- ...(props.locale
173
- ? {
174
- locale: props.locale,
175
- }
176
- : {}),
177
- ...(props.includeRefs
178
- ? {
179
- includeRefs: props.includeRefs,
180
- }
181
- : {}),
182
- ...(props.enrich
183
- ? {
184
- enrich: props.enrich,
185
- }
186
- : {}),
187
- });
188
- Object.values(props.builderContextSignal.componentInfos).forEach((registeredComponent) => {
189
- const message = createRegisterComponentMessage(registeredComponent);
190
- window.parent?.postMessage(message, "*");
191
- });
192
- window.addEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
193
- }
194
- if (props.builderContextSignal.content) {
195
- const variationId = props.builderContextSignal.content?.testVariationId;
196
- const contentId = props.builderContextSignal.content?.id;
197
- _track({
198
- type: "impression",
199
- canTrack: canTrackToUse,
200
- contentId,
201
- apiKey: props.apiKey,
202
- variationId: variationId !== contentId ? variationId : undefined,
203
- });
204
- }
205
- // override normal content in preview mode
206
- if (isPreviewing()) {
207
- const searchParams = new URL(location.href).searchParams;
208
- const searchParamPreviewModel = searchParams.get("builder.preview");
209
- const searchParamPreviewId = searchParams.get(`builder.preview.${searchParamPreviewModel}`);
210
- const previewApiKey = searchParams.get("apiKey") || searchParams.get("builder.space");
211
- /**
212
- * Make sure that:
213
- * - the preview model name is the same as the one we're rendering, since there can be multiple models rendered * at the same time, e.g. header/page/footer. * - the API key is the same, since we don't want to preview content from other organizations.
214
- * - if there is content, that the preview ID is the same as that of the one we receive.
215
- *
216
- * TO-DO: should we only update the state when there is a change?
217
- **/
218
- if (searchParamPreviewModel === props.model &&
219
- previewApiKey === props.apiKey &&
220
- (!props.content || searchParamPreviewId === props.content.id)) {
221
- fetchOneEntry({
222
- model: props.model,
223
- apiKey: props.apiKey,
224
- apiVersion: props.builderContextSignal.apiVersion,
225
- }).then((content) => {
226
- if (content) {
227
- mergeNewContent(content);
228
- }
229
- });
230
- }
231
- }
232
- evaluateJsCode();
233
- runHttpRequests();
234
- emitStateUpdate();
235
- }
236
- }, []);
237
- useEffect(() => {
238
- if (props.content) {
239
- mergeNewContent(props.content);
240
- }
241
- }, [props.content]);
242
- useEffect(() => { }, [shouldSendResetCookie]);
243
- useEffect(() => {
244
- evaluateJsCode();
245
- }, [
246
- props.builderContextSignal.content?.data?.jsCode,
247
- props.builderContextSignal.rootState,
248
- ]);
249
- useEffect(() => {
250
- runHttpRequests();
251
- }, [props.builderContextSignal.content?.data?.httpRequests]);
252
- useEffect(() => {
253
- emitStateUpdate();
254
- }, [props.builderContextSignal.rootState]);
255
- useEffect(() => {
256
- return () => {
257
- if (isBrowser()) {
258
- window.removeEventListener("message", processMessage);
259
- window.removeEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
260
- }
261
- };
262
- }, []);
263
- return (React.createElement(builderContext.Provider, { value: props.builderContextSignal }, props.builderContextSignal.content ? (React.createElement(React.Fragment, null,
264
- React.createElement("div", { key: forceReRenderCount, ref: elementRef, onClick: (event) => onClick(event), "builder-content-id": props.builderContextSignal.content?.id, "builder-model": props.model, ...{}, ...(props.showContent
265
- ? {}
266
- : {
267
- hidden: true,
268
- "aria-hidden": true,
269
- }), className: props.classNameProp }, props.children))) : null));
270
- }
271
- export default EnableEditor;
@@ -1,58 +0,0 @@
1
- const getCssFromFont = (font) => {
2
- // TODO: compute what font sizes are used and only load those.......
3
- const family = font.family + (font.kind && !font.kind.includes('#') ? ', ' + font.kind : '');
4
- const name = family.split(',')[0];
5
- const url = font.fileUrl ?? font?.files?.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
- // TODO: maybe limit number loaded
24
- const weightUrl = font.files[weight];
25
- if (weightUrl && weightUrl !== url) {
26
- str += `
27
- @font-face {
28
- font-family: "${family}";
29
- src: url('${weightUrl}') format('woff2');
30
- font-display: fallback;
31
- font-weight: ${weight};
32
- }
33
- `.trim();
34
- }
35
- }
36
- }
37
- return str;
38
- };
39
- export const getFontCss = ({ customFonts }) => {
40
- // TODO: flag for this
41
- // if (!this.builder.allowCustomFonts) {
42
- // return '';
43
- // }
44
- // TODO: separate internal data from external
45
- return customFonts?.map(font => getCssFromFont(font))?.join(' ') || '';
46
- };
47
- export const getCss = ({ cssCode, contentId }) => {
48
- if (!cssCode) {
49
- return '';
50
- }
51
- if (!contentId) {
52
- return cssCode;
53
- }
54
- // Allow using `&` in custom CSS code like @emotion
55
- // E.g. `& .foobar { ... }` to scope CSS
56
- // TODO: handle if '&' is within a string like `content: "&"`
57
- return cssCode?.replace(/&/g, `div[builder-content-id="${contentId}"]`) || '';
58
- };
@@ -1,32 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { useState } from "react";
4
- import InlinedStyles from "../../inlined-styles";
5
- import { getCss } from "./styles.helpers.js";
6
- import { getFontCss } from "./styles.helpers.js";
7
- function ContentStyles(props) {
8
- const [injectedStyles, setInjectedStyles] = useState(() => `
9
- ${getCss({
10
- cssCode: props.cssCode,
11
- contentId: props.contentId,
12
- })}
13
- ${getFontCss({
14
- customFonts: props.customFonts,
15
- })}
16
-
17
- .builder-text > p:first-of-type, .builder-text > .builder-paragraph:first-of-type {
18
- margin: 0;
19
- }
20
- .builder-text > p, .builder-text > .builder-paragraph {
21
- color: inherit;
22
- line-height: inherit;
23
- letter-spacing: inherit;
24
- font-weight: inherit;
25
- font-size: inherit;
26
- text-align: inherit;
27
- font-family: inherit;
28
- }
29
- `.trim());
30
- return React.createElement(InlinedStyles, { styles: injectedStyles });
31
- }
32
- export default ContentStyles;
@@ -1,30 +0,0 @@
1
- export const getContextStateInitialValue = ({ content, data, locale }) => {
2
- const defaultValues = {};
3
- // set default values for content state inputs
4
- content?.data?.inputs?.forEach(input => {
5
- if (input.name && input.defaultValue !== undefined && content?.data?.state && content.data.state[input.name] === undefined) {
6
- defaultValues[input.name] = input.defaultValue;
7
- }
8
- });
9
- const stateToUse = {
10
- ...content?.data?.state,
11
- ...data,
12
- ...(locale ? {
13
- locale
14
- } : {})
15
- };
16
- return {
17
- ...defaultValues,
18
- ...stateToUse
19
- };
20
- };
21
- export const getContentInitialValue = ({ content, data }) => {
22
- return !content ? undefined : {
23
- ...content,
24
- data: {
25
- ...content?.data,
26
- ...data
27
- },
28
- meta: content?.meta
29
- };
30
- };
@@ -1,85 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { useState } from "react";
4
- import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
5
- import { components, serializeComponentInfo, } from "../../functions/register-component.js";
6
- import Blocks from "../blocks/blocks";
7
- import ContentStyles from "./components/styles";
8
- import { getContentInitialValue, getContextStateInitialValue, } from "./content.helpers.js";
9
- import { TARGET } from "../../constants/target.js";
10
- import { getRenderContentScriptString } from "../content-variants/helpers.js";
11
- import EnableEditor from "./components/enable-editor";
12
- import InlinedScript from "../inlined-script";
13
- import ComponentsContext from "../../context/components.context.js";
14
- function ContentComponent(props) {
15
- const [scriptStr, setScriptStr] = useState(() => getRenderContentScriptString({
16
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
17
- variationId: props.content?.testVariationId,
18
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
19
- contentId: props.content?.id,
20
- }));
21
- function contentSetState(newRootState) {
22
- setBuilderContextSignal((PREVIOUS_VALUE) => ({
23
- ...PREVIOUS_VALUE,
24
- rootState: newRootState,
25
- }));
26
- }
27
- const [registeredComponents, setRegisteredComponents] = useState(() => [
28
- ...getDefaultRegisteredComponents(),
29
- // While this `components` object is deprecated, we must maintain support for it.
30
- // Since users are able to override our default components, we need to make sure that we do not break such
31
- // existing usage.
32
- // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
33
- // which is the new standard way of providing custom components, and must therefore take precedence.
34
- ...components,
35
- ...(props.customComponents || []),
36
- ].reduce((acc, { component, ...info }) => ({
37
- ...acc,
38
- [info.name]: {
39
- component: component,
40
- ...serializeComponentInfo(info),
41
- },
42
- }), {}));
43
- const [builderContextSignal, setBuilderContextSignal] = useState(() => ({
44
- content: getContentInitialValue({
45
- content: props.content,
46
- data: props.data,
47
- }),
48
- localState: undefined,
49
- rootState: getContextStateInitialValue({
50
- content: props.content,
51
- data: props.data,
52
- locale: props.locale,
53
- }),
54
- rootSetState: contentSetState,
55
- context: props.context || {},
56
- apiKey: props.apiKey,
57
- apiVersion: props.apiVersion,
58
- componentInfos: [
59
- ...getDefaultRegisteredComponents(),
60
- // While this `components` object is deprecated, we must maintain support for it.
61
- // Since users are able to override our default components, we need to make sure that we do not break such
62
- // existing usage.
63
- // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
64
- // which is the new standard way of providing custom components, and must therefore take precedence.
65
- ...components,
66
- ...(props.customComponents || []),
67
- ].reduce((acc, { component: _, ...info }) => ({
68
- ...acc,
69
- [info.name]: serializeComponentInfo(info),
70
- }), {}),
71
- inheritedStyles: {},
72
- }));
73
- return (React.createElement(ComponentsContext.Provider, { value: {
74
- registeredComponents: registeredComponents,
75
- } },
76
- React.createElement(EnableEditor, { content: props.content, model: props.model, context: props.context, apiKey: props.apiKey, canTrack: props.canTrack, locale: props.locale, includeRefs: props.includeRefs, enrich: props.enrich, classNameProp: props.classNameProp, showContent: props.showContent, builderContextSignal: builderContextSignal, ...{
77
- setBuilderContextSignal: setBuilderContextSignal,
78
- } },
79
- props.isSsrAbTest ? (React.createElement(React.Fragment, null,
80
- React.createElement(InlinedScript, { scriptStr: scriptStr }))) : null,
81
- TARGET !== "reactNative" ? (React.createElement(React.Fragment, null,
82
- React.createElement(ContentStyles, { contentId: builderContextSignal.content?.id, cssCode: builderContextSignal.content?.data?.cssCode, customFonts: builderContextSignal.content?.data?.customFonts }))) : null,
83
- React.createElement(Blocks, { blocks: builderContextSignal.content?.data?.blocks, context: builderContextSignal, registeredComponents: registeredComponents }))));
84
- }
85
- export default ContentComponent;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export { default } from './content';
@@ -1,6 +0,0 @@
1
- /**
2
- * Apply target-specific transformations to the component reference.
3
- *
4
- * See overrides/* for examples.
5
- */
6
- export const wrapComponentRef = (component) => component;
@@ -1,52 +0,0 @@
1
- "use client";
2
- import * as React from "react";
3
- import { useState, useEffect } from "react";
4
- import { checkShouldRunVariants, getScriptString, getVariants, getVariantsScriptString, } from "./helpers.js";
5
- import ContentComponent from "../content/content";
6
- import { getDefaultCanTrack } from "../../helpers/canTrack.js";
7
- import InlinedStyles from "../inlined-styles";
8
- import { handleABTestingSync } from "../../helpers/ab-tests.js";
9
- import InlinedScript from "../inlined-script";
10
- import { TARGET } from "../../constants/target.js";
11
- function ContentVariants(props) {
12
- const [shouldRenderVariants, setShouldRenderVariants] = useState(() => checkShouldRunVariants({
13
- canTrack: getDefaultCanTrack(props.canTrack),
14
- content: props.content,
15
- }));
16
- function variantScriptStr() {
17
- return getVariantsScriptString(getVariants(props.content).map((value) => ({
18
- id: value.testVariationId,
19
- testRatio: value.testRatio,
20
- })), props.content?.id || "");
21
- }
22
- function hideVariantsStyleString() {
23
- return getVariants(props.content)
24
- .map((value) => `.variant-${value.testVariationId} { display: none; } `)
25
- .join("");
26
- }
27
- function defaultContent() {
28
- return shouldRenderVariants
29
- ? {
30
- ...props.content,
31
- testVariationId: props.content?.id,
32
- }
33
- : handleABTestingSync({
34
- item: props.content,
35
- canTrack: getDefaultCanTrack(props.canTrack),
36
- });
37
- }
38
- useEffect(() => {
39
- /**
40
- * We unmount the non-winning variants post-hydration in Vue.
41
- */
42
- }, []);
43
- return (React.createElement(React.Fragment, null,
44
- !props.__isNestedRender && TARGET !== "reactNative" ? (React.createElement(React.Fragment, null,
45
- React.createElement(InlinedScript, { scriptStr: getScriptString() }))) : null,
46
- shouldRenderVariants ? (React.createElement(React.Fragment, null,
47
- React.createElement(InlinedStyles, { id: `variants-styles-${props.content?.id}`, styles: hideVariantsStyleString() }),
48
- React.createElement(InlinedScript, { scriptStr: variantScriptStr() }),
49
- getVariants(props.content)?.map((variant) => (React.createElement(ContentComponent, { key: variant.testVariationId, content: variant, showContent: false, classNameProp: undefined, model: props.model, data: props.data, context: props.context, apiKey: props.apiKey, apiVersion: props.apiVersion, customComponents: props.customComponents, canTrack: props.canTrack, locale: props.locale, includeRefs: props.includeRefs, enrich: props.enrich, isSsrAbTest: shouldRenderVariants }))))) : null,
50
- React.createElement(ContentComponent, { ...{}, content: defaultContent(), classNameProp: `variant-${props.content?.id}`, showContent: true, model: props.model, data: props.data, context: props.context, apiKey: props.apiKey, apiVersion: props.apiVersion, customComponents: props.customComponents, canTrack: props.canTrack, locale: props.locale, includeRefs: props.includeRefs, enrich: props.enrich, isSsrAbTest: shouldRenderVariants })));
51
- }
52
- export default ContentVariants;