@builder.io/sdk-react-native 1.0.31-0 → 1.0.31

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 (261) hide show
  1. package/lib/browser/commonjs/blocks/symbol/symbol.js +1 -0
  2. package/lib/browser/commonjs/blocks/symbol/symbol.js.map +1 -1
  3. package/lib/browser/commonjs/components/content/content.js +1 -0
  4. package/lib/browser/commonjs/components/content/content.js.map +1 -1
  5. package/lib/browser/commonjs/constants/sdk-version.js +1 -1
  6. package/lib/browser/module/blocks/symbol/symbol.js +1 -0
  7. package/lib/browser/module/blocks/symbol/symbol.js.map +1 -1
  8. package/lib/browser/module/components/content/content.js +1 -0
  9. package/lib/browser/module/components/content/content.js.map +1 -1
  10. package/lib/browser/module/constants/sdk-version.js +1 -1
  11. package/lib/browser/typescript/blocks/symbol/symbol.d.ts.map +1 -1
  12. package/lib/browser/typescript/components/content/content.d.ts.map +1 -1
  13. package/lib/browser/typescript/constants/sdk-version.d.ts +1 -1
  14. package/lib/browser/typescript/context/types.d.ts +1 -0
  15. package/lib/browser/typescript/context/types.d.ts.map +1 -1
  16. package/lib/edge/commonjs/blocks/symbol/symbol.js +1 -0
  17. package/lib/edge/commonjs/blocks/symbol/symbol.js.map +1 -1
  18. package/lib/edge/commonjs/components/content/content.js +1 -0
  19. package/lib/edge/commonjs/components/content/content.js.map +1 -1
  20. package/lib/edge/commonjs/constants/sdk-version.js +1 -1
  21. package/lib/edge/module/blocks/symbol/symbol.js +1 -0
  22. package/lib/edge/module/blocks/symbol/symbol.js.map +1 -1
  23. package/lib/edge/module/components/content/content.js +1 -0
  24. package/lib/edge/module/components/content/content.js.map +1 -1
  25. package/lib/edge/module/constants/sdk-version.js +1 -1
  26. package/lib/edge/typescript/blocks/symbol/symbol.d.ts.map +1 -1
  27. package/lib/edge/typescript/components/content/content.d.ts.map +1 -1
  28. package/lib/edge/typescript/constants/sdk-version.d.ts +1 -1
  29. package/lib/edge/typescript/context/types.d.ts +1 -0
  30. package/lib/edge/typescript/context/types.d.ts.map +1 -1
  31. package/lib/node/commonjs/blocks/symbol/symbol.js +1 -0
  32. package/lib/node/commonjs/blocks/symbol/symbol.js.map +1 -1
  33. package/lib/node/commonjs/components/content/content.js +1 -0
  34. package/lib/node/commonjs/components/content/content.js.map +1 -1
  35. package/lib/node/commonjs/constants/sdk-version.js +1 -1
  36. package/lib/node/module/blocks/symbol/symbol.js +1 -0
  37. package/lib/node/module/blocks/symbol/symbol.js.map +1 -1
  38. package/lib/node/module/components/content/content.js +1 -0
  39. package/lib/node/module/components/content/content.js.map +1 -1
  40. package/lib/node/module/constants/sdk-version.js +1 -1
  41. package/lib/node/typescript/blocks/symbol/symbol.d.ts.map +1 -1
  42. package/lib/node/typescript/components/content/content.d.ts.map +1 -1
  43. package/lib/node/typescript/constants/sdk-version.d.ts +1 -1
  44. package/lib/node/typescript/context/types.d.ts +1 -0
  45. package/lib/node/typescript/context/types.d.ts.map +1 -1
  46. package/package.json +5 -9
  47. package/lib/node/index.cjs +0 -6910
  48. package/lib/node/index.mjs +0 -7477
  49. package/src/blocks/BaseText.tsx +0 -17
  50. package/src/blocks/accordion/accordion.tsx +0 -181
  51. package/src/blocks/accordion/accordion.types.ts +0 -12
  52. package/src/blocks/accordion/component-info.ts +0 -124
  53. package/src/blocks/accordion/helpers.ts +0 -3
  54. package/src/blocks/accordion/index.ts +0 -1
  55. package/src/blocks/button/button.tsx +0 -56
  56. package/src/blocks/button/button.types.ts +0 -7
  57. package/src/blocks/button/component-info.ts +0 -35
  58. package/src/blocks/button/index.ts +0 -1
  59. package/src/blocks/columns/columns.tsx +0 -199
  60. package/src/blocks/columns/columns.types.ts +0 -14
  61. package/src/blocks/columns/component-info.ts +0 -219
  62. package/src/blocks/columns/helpers.ts +0 -3
  63. package/src/blocks/columns/index.ts +0 -1
  64. package/src/blocks/custom-code/component-info.ts +0 -24
  65. package/src/blocks/custom-code/custom-code.tsx +0 -71
  66. package/src/blocks/custom-code/index.ts +0 -1
  67. package/src/blocks/embed/component-info.ts +0 -38
  68. package/src/blocks/embed/embed.tsx +0 -62
  69. package/src/blocks/embed/helpers.ts +0 -2
  70. package/src/blocks/embed/index.ts +0 -1
  71. package/src/blocks/form/form/component-info.ts +0 -233
  72. package/src/blocks/form/form/form.tsx +0 -324
  73. package/src/blocks/form/form/index.ts +0 -1
  74. package/src/blocks/form/input/component-info.ts +0 -47
  75. package/src/blocks/form/input/index.ts +0 -1
  76. package/src/blocks/form/input/input.tsx +0 -49
  77. package/src/blocks/form/select/component-info.ts +0 -44
  78. package/src/blocks/form/select/index.ts +0 -1
  79. package/src/blocks/form/select/select.tsx +0 -54
  80. package/src/blocks/form/submit-button/component-info.ts +0 -27
  81. package/src/blocks/form/submit-button/index.ts +0 -1
  82. package/src/blocks/form/submit-button/submit-button.tsx +0 -34
  83. package/src/blocks/fragment/component-info.ts +0 -8
  84. package/src/blocks/fragment/fragment.tsx +0 -18
  85. package/src/blocks/fragment/fragment.types.ts +0 -5
  86. package/src/blocks/fragment/index.ts +0 -1
  87. package/src/blocks/helpers.ts +0 -43
  88. package/src/blocks/image/component-info.ts +0 -124
  89. package/src/blocks/image/image.helpers.ts +0 -47
  90. package/src/blocks/image/image.tsx +0 -65
  91. package/src/blocks/image/image.types.ts +0 -19
  92. package/src/blocks/image/index.ts +0 -1
  93. package/src/blocks/img/component-info.ts +0 -16
  94. package/src/blocks/img/img.tsx +0 -55
  95. package/src/blocks/img/index.ts +0 -1
  96. package/src/blocks/raw-text/component-info.ts +0 -11
  97. package/src/blocks/raw-text/index.ts +0 -1
  98. package/src/blocks/raw-text/raw-text.tsx +0 -1
  99. package/src/blocks/section/component-info.ts +0 -41
  100. package/src/blocks/section/index.ts +0 -1
  101. package/src/blocks/section/section.tsx +0 -39
  102. package/src/blocks/section/section.types.ts +0 -6
  103. package/src/blocks/slot/component-info.ts +0 -15
  104. package/src/blocks/slot/index.ts +0 -1
  105. package/src/blocks/slot/slot.tsx +0 -42
  106. package/src/blocks/symbol/component-info.ts +0 -35
  107. package/src/blocks/symbol/index.ts +0 -1
  108. package/src/blocks/symbol/symbol.helpers.ts +0 -47
  109. package/src/blocks/symbol/symbol.tsx +0 -99
  110. package/src/blocks/symbol/symbol.types.ts +0 -17
  111. package/src/blocks/tabs/component-info.ts +0 -139
  112. package/src/blocks/tabs/index.ts +0 -1
  113. package/src/blocks/tabs/tabs.tsx +0 -79
  114. package/src/blocks/tabs/tabs.types.ts +0 -13
  115. package/src/blocks/text/component-info.ts +0 -20
  116. package/src/blocks/text/index.ts +0 -1
  117. package/src/blocks/text/text.tsx +0 -105
  118. package/src/blocks/text/text.types.ts +0 -4
  119. package/src/blocks/textarea/component-info.ts +0 -38
  120. package/src/blocks/textarea/index.ts +0 -1
  121. package/src/blocks/textarea/textarea.tsx +0 -41
  122. package/src/blocks/video/component-info.ts +0 -83
  123. package/src/blocks/video/index.ts +0 -1
  124. package/src/blocks/video/video.tsx +0 -70
  125. package/src/blocks/video/video.types.ts +0 -21
  126. package/src/components/block/animator.ts +0 -220
  127. package/src/components/block/block.helpers.ts +0 -106
  128. package/src/components/block/block.tsx +0 -235
  129. package/src/components/block/components/block-styles.tsx +0 -136
  130. package/src/components/block/components/block-wrapper.tsx +0 -53
  131. package/src/components/block/components/component-ref/component-ref.helpers.ts +0 -55
  132. package/src/components/block/components/component-ref/component-ref.tsx +0 -66
  133. package/src/components/block/components/interactive-element.tsx +0 -53
  134. package/src/components/block/components/repeated-block.tsx +0 -37
  135. package/src/components/block/types.ts +0 -6
  136. package/src/components/blocks/blocks-wrapper.tsx +0 -93
  137. package/src/components/blocks/blocks.tsx +0 -57
  138. package/src/components/blocks/blocks.types.ts +0 -7
  139. package/src/components/blocks/index.ts +0 -1
  140. package/src/components/content/components/enable-editor.tsx +0 -471
  141. package/src/components/content/components/styles.helpers.ts +0 -101
  142. package/src/components/content/components/styles.tsx +0 -42
  143. package/src/components/content/content.helpers.ts +0 -40
  144. package/src/components/content/content.tsx +0 -150
  145. package/src/components/content/content.types.ts +0 -13
  146. package/src/components/content/contentProps.types.ts +0 -17
  147. package/src/components/content/index.ts +0 -1
  148. package/src/components/content/wrap-component-ref.ts +0 -6
  149. package/src/components/content-variants/content-variants.tsx +0 -146
  150. package/src/components/content-variants/content-variants.types.ts +0 -84
  151. package/src/components/content-variants/helpers.ts +0 -72
  152. package/src/components/content-variants/index.ts +0 -1
  153. package/src/components/content-variants/inlined-fns.ts +0 -22
  154. package/src/components/dynamic-div.tsx +0 -30
  155. package/src/components/dynamic-renderer/dynamic-renderer.helpers.ts +0 -7
  156. package/src/components/dynamic-renderer/dynamic-renderer.tsx +0 -47
  157. package/src/components/error-boundary.tsx +0 -38
  158. package/src/components/inlined-script.tsx +0 -10
  159. package/src/components/inlined-styles.tsx +0 -10
  160. package/src/constants/builder-registered-components.ts +0 -59
  161. package/src/constants/device-sizes.ts +0 -59
  162. package/src/constants/extra-components.ts +0 -1
  163. package/src/constants/sdk-version.ts +0 -1
  164. package/src/constants/target.ts +0 -3
  165. package/src/context/builder.context.ts +0 -15
  166. package/src/context/components.context.ts +0 -3
  167. package/src/context/index.ts +0 -1
  168. package/src/context/types.ts +0 -37
  169. package/src/functions/apply-patch-with-mutation.ts +0 -61
  170. package/src/functions/camel-to-kebab-case.ts +0 -1
  171. package/src/functions/deopt.ts +0 -6
  172. package/src/functions/evaluate/browser-runtime/browser.ts +0 -61
  173. package/src/functions/evaluate/browser-runtime/index.ts +0 -1
  174. package/src/functions/evaluate/choose-eval.ts +0 -23
  175. package/src/functions/evaluate/edge-runtime/acorn-interpreter.ts +0 -2891
  176. package/src/functions/evaluate/edge-runtime/edge-runtime.ts +0 -96
  177. package/src/functions/evaluate/edge-runtime/index.ts +0 -1
  178. package/src/functions/evaluate/evaluate.ts +0 -76
  179. package/src/functions/evaluate/helpers.ts +0 -56
  180. package/src/functions/evaluate/index.ts +0 -1
  181. package/src/functions/evaluate/node-runtime/index.ts +0 -1
  182. package/src/functions/evaluate/node-runtime/init.ts +0 -33
  183. package/src/functions/evaluate/node-runtime/node-runtime.ts +0 -176
  184. package/src/functions/evaluate/node-runtime/safeDynamicRequire.ts +0 -24
  185. package/src/functions/evaluate/placeholder-runtime.ts +0 -4
  186. package/src/functions/evaluate/should-force-browser-runtime-in-node.ts +0 -16
  187. package/src/functions/event-handler-name.ts +0 -4
  188. package/src/functions/extract-text-styles.ts +0 -24
  189. package/src/functions/fast-clone.ts +0 -4
  190. package/src/functions/fetch-builder-props.ts +0 -75
  191. package/src/functions/get-block-actions-handler.ts +0 -17
  192. package/src/functions/get-block-actions.ts +0 -35
  193. package/src/functions/get-block-component-options.ts +0 -11
  194. package/src/functions/get-block-properties.ts +0 -62
  195. package/src/functions/get-builder-search-params/index.ts +0 -33
  196. package/src/functions/get-class-prop-name.ts +0 -15
  197. package/src/functions/get-content/generate-content-url.ts +0 -88
  198. package/src/functions/get-content/index.ts +0 -99
  199. package/src/functions/get-content/types.ts +0 -157
  200. package/src/functions/get-env.ts +0 -5
  201. package/src/functions/get-fetch.ts +0 -11
  202. package/src/functions/get-global-this.ts +0 -16
  203. package/src/functions/get-processed-block.ts +0 -70
  204. package/src/functions/get-style.ts +0 -38
  205. package/src/functions/get.ts +0 -4
  206. package/src/functions/is-browser.ts +0 -3
  207. package/src/functions/is-edge-runtime.ts +0 -9
  208. package/src/functions/is-editing.ts +0 -8
  209. package/src/functions/is-from-trusted-host.ts +0 -8
  210. package/src/functions/is-iframe.ts +0 -4
  211. package/src/functions/is-node-runtime.ts +0 -8
  212. package/src/functions/is-previewing.ts +0 -16
  213. package/src/functions/on-change.ts +0 -29
  214. package/src/functions/register-component.ts +0 -30
  215. package/src/functions/register.ts +0 -44
  216. package/src/functions/set-editor-settings.ts +0 -15
  217. package/src/functions/set.ts +0 -14
  218. package/src/functions/track/helpers.ts +0 -51
  219. package/src/functions/track/index.ts +0 -131
  220. package/src/functions/track/interaction.ts +0 -63
  221. package/src/functions/transform-block-properties.ts +0 -33
  222. package/src/functions/transform-block.ts +0 -30
  223. package/src/functions/transform-style-property.ts +0 -296
  224. package/src/helpers/ab-tests.ts +0 -166
  225. package/src/helpers/canTrack.ts +0 -2
  226. package/src/helpers/cookie.ts +0 -97
  227. package/src/helpers/css.ts +0 -33
  228. package/src/helpers/flatten.ts +0 -41
  229. package/src/helpers/localStorage.ts +0 -36
  230. package/src/helpers/logger.ts +0 -7
  231. package/src/helpers/nullable.ts +0 -2
  232. package/src/helpers/omit.ts +0 -7
  233. package/src/helpers/preview-lru-cache/get.ts +0 -4
  234. package/src/helpers/preview-lru-cache/helpers.ts +0 -1
  235. package/src/helpers/preview-lru-cache/init.ts +0 -7
  236. package/src/helpers/preview-lru-cache/set.ts +0 -12
  237. package/src/helpers/preview-lru-cache/types.ts +0 -1
  238. package/src/helpers/search/search.ts +0 -18
  239. package/src/helpers/sessionId.ts +0 -37
  240. package/src/helpers/subscribe-to-editor.ts +0 -95
  241. package/src/helpers/time.ts +0 -2
  242. package/src/helpers/url.ts +0 -15
  243. package/src/helpers/uuid.ts +0 -17
  244. package/src/helpers/visitorId.ts +0 -37
  245. package/src/index-helpers/blocks-exports.ts +0 -16
  246. package/src/index-helpers/top-of-file.ts +0 -2
  247. package/src/index.ts +0 -15
  248. package/src/scripts/init-editing.ts +0 -119
  249. package/src/server-index.ts +0 -43
  250. package/src/types/api-version.ts +0 -2
  251. package/src/types/builder-block.ts +0 -89
  252. package/src/types/builder-content.ts +0 -47
  253. package/src/types/builder-props.ts +0 -12
  254. package/src/types/can-track.ts +0 -3
  255. package/src/types/components.ts +0 -119
  256. package/src/types/deep-partial.ts +0 -1
  257. package/src/types/element.ts +0 -57
  258. package/src/types/enforced-partials.ts +0 -19
  259. package/src/types/input.ts +0 -123
  260. package/src/types/targets.ts +0 -1
  261. package/src/types/typescript.ts +0 -9
@@ -1,471 +0,0 @@
1
- import * as React from "react";
2
- import {
3
- FlatList,
4
- ScrollView,
5
- View,
6
- StyleSheet,
7
- Image,
8
- Text,
9
- Pressable,
10
- TextInput,
11
- } from "react-native";
12
- import { useState, useContext, useRef, useEffect } from "react";
13
-
14
- type BuilderEditorProps = Omit<
15
- ContentProps,
16
- | "customComponents"
17
- | "apiVersion"
18
- | "isSsrAbTest"
19
- | "blocksWrapper"
20
- | "blocksWrapperProps"
21
- | "isNestedRender"
22
- > & {
23
- builderContextSignal: BuilderContextInterface;
24
- setBuilderContextSignal?: (signal: any) => any;
25
- children?: any;
26
- };
27
- import builderContext from "../../../context/builder.context";
28
- import type { BuilderContextInterface } from "../../../context/types";
29
- import { evaluate } from "../../../functions/evaluate/index";
30
- import { fastClone } from "../../../functions/fast-clone";
31
- import { fetchOneEntry } from "../../../functions/get-content/index";
32
- import { fetch } from "../../../functions/get-fetch";
33
- import { isBrowser } from "../../../functions/is-browser";
34
- import { isEditing } from "../../../functions/is-editing";
35
- import { isPreviewing } from "../../../functions/is-previewing";
36
- import { createRegisterComponentMessage } from "../../../functions/register-component";
37
- import { _track } from "../../../functions/track/index";
38
- import { getInteractionPropertiesForEvent } from "../../../functions/track/interaction";
39
- import { getDefaultCanTrack } from "../../../helpers/canTrack";
40
- import { logger } from "../../../helpers/logger";
41
- import { postPreviewContent } from "../../../helpers/preview-lru-cache/set";
42
- import { createEditorListener } from "../../../helpers/subscribe-to-editor";
43
- import {
44
- registerInsertMenu,
45
- setupBrowserForEditing,
46
- } from "../../../scripts/init-editing";
47
- import type { BuilderContent } from "../../../types/builder-content";
48
- import type { ComponentInfo } from "../../../types/components";
49
- import type { Dictionary } from "../../../types/typescript";
50
- import { triggerAnimation } from "../../block/animator";
51
- import DynamicDiv from "../../dynamic-div";
52
- import type {
53
- BuilderComponentStateChange,
54
- ContentProps,
55
- } from "../content.types";
56
- import { getWrapperClassName } from "./styles.helpers";
57
-
58
- function EnableEditor(props: BuilderEditorProps) {
59
- const elementRef = useRef<HTMLDivElement>(null);
60
- function mergeNewRootState(newData: Dictionary<any>) {
61
- const combinedState = {
62
- ...props.builderContextSignal.rootState,
63
- ...newData,
64
- };
65
- if (props.builderContextSignal.rootSetState) {
66
- props.builderContextSignal.rootSetState?.(combinedState);
67
- } else {
68
- props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
69
- ...PREVIOUS_VALUE,
70
- rootState: combinedState,
71
- }));
72
- }
73
- }
74
-
75
- function mergeNewContent(newContent: BuilderContent) {
76
- const newContentValue = {
77
- ...props.builderContextSignal.content,
78
- ...newContent,
79
- data: {
80
- ...props.builderContextSignal.content?.data,
81
- ...newContent?.data,
82
- },
83
- meta: {
84
- ...props.builderContextSignal.content?.meta,
85
- ...newContent?.meta,
86
- breakpoints:
87
- newContent?.meta?.breakpoints ||
88
- props.builderContextSignal.content?.meta?.breakpoints,
89
- },
90
- };
91
- props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
92
- ...PREVIOUS_VALUE,
93
- content: newContentValue,
94
- }));
95
- }
96
-
97
- function showContentProps() {
98
- return props.showContent
99
- ? {}
100
- : {
101
- hidden: true,
102
- "aria-hidden": true,
103
- };
104
- }
105
-
106
- const [ContentWrapper, setContentWrapper] = useState(
107
- () => props.contentWrapper || ScrollView
108
- );
109
-
110
- function processMessage(event: MessageEvent) {
111
- return createEditorListener({
112
- model: props.model,
113
- trustedHosts: props.trustedHosts,
114
- callbacks: {
115
- configureSdk: (messageContent) => {
116
- const { breakpoints, contentId } = messageContent;
117
- if (
118
- !contentId ||
119
- contentId !== props.builderContextSignal.content?.id
120
- ) {
121
- return;
122
- }
123
- if (breakpoints) {
124
- mergeNewContent({
125
- meta: {
126
- breakpoints,
127
- },
128
- });
129
- }
130
- },
131
- animation: (animation) => {
132
- triggerAnimation(animation);
133
- },
134
- contentUpdate: (newContent) => {
135
- mergeNewContent(newContent);
136
- },
137
- },
138
- })(event);
139
- }
140
-
141
- function evaluateJsCode() {
142
- // run any dynamic JS code attached to content
143
- const jsCode = props.builderContextSignal.content?.data?.jsCode;
144
- if (jsCode) {
145
- evaluate({
146
- code: jsCode,
147
- context: props.context || {},
148
- localState: undefined,
149
- rootState: props.builderContextSignal.rootState,
150
- rootSetState: props.builderContextSignal.rootSetState,
151
- /**
152
- * We don't want to cache the result of the JS code, since it's arbitrary side effect code.
153
- */
154
- enableCache: false,
155
- });
156
- }
157
- }
158
-
159
- const [httpReqsData, setHttpReqsData] = useState(() => ({}));
160
-
161
- const [httpReqsPending, setHttpReqsPending] = useState(() => ({}));
162
-
163
- const [clicked, setClicked] = useState(() => false);
164
-
165
- function onClick(event: any) {
166
- if (props.builderContextSignal.content) {
167
- const variationId = props.builderContextSignal.content?.testVariationId;
168
- const contentId = props.builderContextSignal.content?.id;
169
- _track({
170
- type: "click",
171
- canTrack: getDefaultCanTrack(props.canTrack),
172
- contentId,
173
- apiKey: props.apiKey,
174
- variationId: variationId !== contentId ? variationId : undefined,
175
- ...getInteractionPropertiesForEvent(event),
176
- unique: !clicked,
177
- });
178
- }
179
- if (!clicked) {
180
- setClicked(true);
181
- }
182
- }
183
-
184
- function runHttpRequests() {
185
- const requests: {
186
- [key: string]: string;
187
- } = props.builderContextSignal.content?.data?.httpRequests ?? {};
188
- Object.entries(requests).forEach(([key, url]) => {
189
- if (!url) return;
190
-
191
- // request already in progress
192
- if (httpReqsPending[key]) return;
193
-
194
- // request already completed, and not in edit mode
195
- if (httpReqsData[key] && !isEditing()) return;
196
- httpReqsPending[key] = true;
197
- const evaluatedUrl = url.replace(/{{([^}]+)}}/g, (_match, group) =>
198
- String(
199
- evaluate({
200
- code: group,
201
- context: props.context || {},
202
- localState: undefined,
203
- rootState: props.builderContextSignal.rootState,
204
- rootSetState: props.builderContextSignal.rootSetState,
205
- enableCache: true,
206
- })
207
- )
208
- );
209
- fetch(evaluatedUrl)
210
- .then((response) => response.json())
211
- .then((json) => {
212
- mergeNewRootState({
213
- [key]: json,
214
- });
215
- httpReqsData[key] = true;
216
- })
217
- .catch((err) => {
218
- console.error("error fetching dynamic data", url, err);
219
- })
220
- .finally(() => {
221
- httpReqsPending[key] = false;
222
- });
223
- });
224
- }
225
-
226
- function emitStateUpdate() {
227
- if (isEditing()) {
228
- window.dispatchEvent(
229
- new CustomEvent<BuilderComponentStateChange>(
230
- "builder:component:stateChange",
231
- {
232
- detail: {
233
- state: fastClone(props.builderContextSignal.rootState),
234
- ref: {
235
- name: props.model,
236
- },
237
- },
238
- }
239
- )
240
- );
241
- }
242
- }
243
-
244
- function elementRef_onIniteditingbldr(event) {
245
- window.addEventListener("message", processMessage);
246
- registerInsertMenu();
247
- setupBrowserForEditing({
248
- ...(props.locale
249
- ? {
250
- locale: props.locale,
251
- }
252
- : {}),
253
- ...(props.enrich
254
- ? {
255
- enrich: props.enrich,
256
- }
257
- : {}),
258
- ...(props.trustedHosts
259
- ? {
260
- trustedHosts: props.trustedHosts,
261
- }
262
- : {}),
263
- });
264
- Object.values<ComponentInfo>(
265
- props.builderContextSignal.componentInfos
266
- ).forEach((registeredComponent) => {
267
- const message = createRegisterComponentMessage(registeredComponent);
268
- window.parent?.postMessage(message, "*");
269
- });
270
- window.addEventListener(
271
- "builder:component:stateChangeListenerActivated",
272
- emitStateUpdate
273
- );
274
- }
275
-
276
- function elementRef_onInitpreviewingbldr(event) {
277
- const searchParams = new URL(location.href).searchParams;
278
- const searchParamPreviewModel = searchParams.get("builder.preview");
279
- const searchParamPreviewId = searchParams.get(
280
- `builder.overrides.${searchParamPreviewModel}`
281
- );
282
- const previewApiKey =
283
- searchParams.get("apiKey") || searchParams.get("builder.space");
284
-
285
- /**
286
- * Make sure that:
287
- * - 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.
288
- * - if there is content, that the preview ID is the same as that of the one we receive.
289
- *
290
- * TO-DO: should we only update the state when there is a change?
291
- **/
292
- if (
293
- searchParamPreviewModel === props.model &&
294
- previewApiKey === props.apiKey &&
295
- (!props.content || searchParamPreviewId === props.content.id)
296
- ) {
297
- fetchOneEntry({
298
- model: props.model,
299
- apiKey: props.apiKey,
300
- apiVersion: props.builderContextSignal.apiVersion,
301
- }).then((content) => {
302
- if (content) {
303
- mergeNewContent(content);
304
- }
305
- });
306
- }
307
- }
308
-
309
- useEffect(() => {
310
- if (isBrowser()) {
311
- if (isEditing()) {
312
- window.addEventListener("message", processMessage);
313
- registerInsertMenu();
314
- setupBrowserForEditing({
315
- ...(props.locale
316
- ? {
317
- locale: props.locale,
318
- }
319
- : {}),
320
- ...(props.enrich
321
- ? {
322
- enrich: props.enrich,
323
- }
324
- : {}),
325
- ...(props.trustedHosts
326
- ? {
327
- trustedHosts: props.trustedHosts,
328
- }
329
- : {}),
330
- });
331
- Object.values<ComponentInfo>(
332
- props.builderContextSignal.componentInfos
333
- ).forEach((registeredComponent) => {
334
- const message = createRegisterComponentMessage(registeredComponent);
335
- window.parent?.postMessage(message, "*");
336
- });
337
- window.addEventListener(
338
- "builder:component:stateChangeListenerActivated",
339
- emitStateUpdate
340
- );
341
- }
342
- const shouldTrackImpression =
343
- props.builderContextSignal.content &&
344
- getDefaultCanTrack(props.canTrack);
345
- if (shouldTrackImpression) {
346
- const variationId = props.builderContextSignal.content?.testVariationId;
347
- const contentId = props.builderContextSignal.content?.id;
348
- const apiKeyProp = props.apiKey;
349
- _track({
350
- type: "impression",
351
- canTrack: true,
352
- contentId,
353
- apiKey: apiKeyProp!,
354
- variationId: variationId !== contentId ? variationId : undefined,
355
- });
356
- }
357
-
358
- /**
359
- * Override normal content in preview mode.
360
- * We ignore this when editing, since the edited content is already being sent from the editor via post messages.
361
- */
362
- if (isPreviewing() && !isEditing()) {
363
- const searchParams = new URL(location.href).searchParams;
364
- const searchParamPreviewModel = searchParams.get("builder.preview");
365
- const searchParamPreviewId = searchParams.get(
366
- `builder.overrides.${searchParamPreviewModel}`
367
- );
368
- const previewApiKey =
369
- searchParams.get("apiKey") || searchParams.get("builder.space");
370
-
371
- /**
372
- * Make sure that:
373
- * - 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.
374
- * - if there is content, that the preview ID is the same as that of the one we receive.
375
- *
376
- * TO-DO: should we only update the state when there is a change?
377
- **/
378
- if (
379
- searchParamPreviewModel === props.model &&
380
- previewApiKey === props.apiKey &&
381
- (!props.content || searchParamPreviewId === props.content.id)
382
- ) {
383
- fetchOneEntry({
384
- model: props.model,
385
- apiKey: props.apiKey,
386
- apiVersion: props.builderContextSignal.apiVersion,
387
- }).then((content) => {
388
- if (content) {
389
- mergeNewContent(content);
390
- }
391
- });
392
- }
393
- }
394
- }
395
- }, []);
396
- useEffect(() => {
397
- if (!props.apiKey) {
398
- logger.error(
399
- "No API key provided to `Content` component. This can cause issues. Please provide an API key using the `apiKey` prop."
400
- );
401
- }
402
- evaluateJsCode();
403
- runHttpRequests();
404
- emitStateUpdate();
405
- }, []);
406
-
407
- useEffect(() => {
408
- if (props.content) {
409
- mergeNewContent(props.content);
410
- }
411
- }, [props.content]);
412
- useEffect(() => {
413
- evaluateJsCode();
414
- }, [props.builderContextSignal.content?.data?.jsCode]);
415
- useEffect(() => {
416
- runHttpRequests();
417
- }, [props.builderContextSignal.content?.data?.httpRequests]);
418
- useEffect(() => {
419
- emitStateUpdate();
420
- }, [props.builderContextSignal.rootState]);
421
- useEffect(() => {
422
- if (props.data) {
423
- mergeNewRootState(props.data);
424
- }
425
- }, [props.data]);
426
- useEffect(() => {
427
- if (props.locale) {
428
- mergeNewRootState({
429
- locale: props.locale,
430
- });
431
- }
432
- }, [props.locale]);
433
-
434
- useEffect(() => {
435
- return () => {
436
- if (isBrowser()) {
437
- window.removeEventListener("message", processMessage);
438
- window.removeEventListener(
439
- "builder:component:stateChangeListenerActivated",
440
- emitStateUpdate
441
- );
442
- }
443
- };
444
- }, []);
445
-
446
- return (
447
- <builderContext.Provider value={props.builderContextSignal}>
448
- {props.builderContextSignal.content ? (
449
- <ContentWrapper
450
- {...{}}
451
- ref={elementRef}
452
- onPress={(event) => onClick(event)}
453
- builder-content-id={props.builderContextSignal.content?.id}
454
- builder-model={props.model}
455
- {...{
456
- // currently, we can't set the actual ID here. // we don't need it right now, we just need to identify content divs for testing.
457
- dataSet: {
458
- "builder-content-id": "",
459
- },
460
- }}
461
- {...showContentProps()}
462
- {...props.contentWrapperProps}
463
- >
464
- {props.children}
465
- </ContentWrapper>
466
- ) : null}
467
- </builderContext.Provider>
468
- );
469
- }
470
-
471
- export default EnableEditor;
@@ -1,101 +0,0 @@
1
- export interface CustomFont {
2
- family?: string;
3
- kind?: string;
4
- fileUrl?: string;
5
- files?: {
6
- [key: string]: string;
7
- };
8
- }
9
- const getCssFromFont = (font: CustomFont) => {
10
- // TODO: compute what font sizes are used and only load those.......
11
- const family = font.family + (font.kind && !font.kind.includes('#') ? ', ' + font.kind : '');
12
- const name = family.split(',')[0];
13
- const url = font.fileUrl ?? font?.files?.regular;
14
- let str = '';
15
- if (url && family && name) {
16
- str += `
17
- @font-face {
18
- font-family: "${family}";
19
- src: local("${name}"), url('${url}') format('woff2');
20
- font-display: fallback;
21
- font-weight: 400;
22
- }
23
- `.trim();
24
- }
25
- if (font.files) {
26
- for (const weight in font.files) {
27
- const isNumber = String(Number(weight)) === weight;
28
- if (!isNumber) {
29
- continue;
30
- }
31
- // TODO: maybe limit number loaded
32
- const weightUrl = font.files[weight];
33
- if (weightUrl && weightUrl !== url) {
34
- str += `
35
- @font-face {
36
- font-family: "${family}";
37
- src: url('${weightUrl}') format('woff2');
38
- font-display: fallback;
39
- font-weight: ${weight};
40
- }
41
- `.trim();
42
- }
43
- }
44
- }
45
- return str;
46
- };
47
- export const getFontCss = ({
48
- customFonts
49
- }: {
50
- customFonts?: CustomFont[];
51
- }) => {
52
- // TODO: flag for this
53
- // if (!this.builder.allowCustomFonts) {
54
- // return '';
55
- // }
56
- // TODO: separate internal data from external
57
- return customFonts?.map(font => getCssFromFont(font))?.join(' ') || '';
58
- };
59
- export const getCss = ({
60
- cssCode,
61
- contentId
62
- }: {
63
- cssCode?: string;
64
- contentId?: string;
65
- }) => {
66
- if (!cssCode) {
67
- return '';
68
- }
69
- if (!contentId) {
70
- return cssCode;
71
- }
72
-
73
- // Allow using `&` in custom CSS code like @emotion
74
- // E.g. `& .foobar { ... }` to scope CSS
75
- // TODO: handle if '&' is within a string like `content: "&"`
76
- return cssCode?.replace(/&/g, `div[builder-content-id="${contentId}"]`) || '';
77
- };
78
- const DEFAULT_STYLES = `
79
- .builder-button {
80
- all: unset;
81
- }
82
-
83
- .builder-text > p:first-of-type, .builder-text > .builder-paragraph:first-of-type {
84
- margin: 0;
85
- }
86
- .builder-text > p, .builder-text > .builder-paragraph {
87
- color: inherit;
88
- line-height: inherit;
89
- letter-spacing: inherit;
90
- font-weight: inherit;
91
- font-size: inherit;
92
- text-align: inherit;
93
- font-family: inherit;
94
- }
95
- `;
96
- export const getDefaultStyles = (isNested: boolean | undefined) => {
97
- return !isNested ? DEFAULT_STYLES : '';
98
- };
99
- export const getWrapperClassName = (variationId?: string) => {
100
- return `variant-${variationId}`;
101
- }
@@ -1,42 +0,0 @@
1
- import * as React from "react";
2
- import {
3
- FlatList,
4
- ScrollView,
5
- View,
6
- StyleSheet,
7
- Image,
8
- Text,
9
- Pressable,
10
- TextInput,
11
- } from "react-native";
12
- import { useState } from "react";
13
-
14
- interface Props {
15
- cssCode?: string;
16
- customFonts?: CustomFont[];
17
- contentId?: string;
18
- isNestedRender?: boolean;
19
- }
20
-
21
- import InlinedStyles from "../../inlined-styles";
22
- import type { CustomFont } from "./styles.helpers";
23
- import { getCss, getDefaultStyles, getFontCss } from "./styles.helpers";
24
-
25
- function ContentStyles(props: Props) {
26
- const [injectedStyles, setInjectedStyles] = useState(() =>
27
- `
28
- ${getCss({
29
- cssCode: props.cssCode,
30
- contentId: props.contentId,
31
- })}
32
- ${getFontCss({
33
- customFonts: props.customFonts,
34
- })}
35
- ${getDefaultStyles(props.isNestedRender)}
36
- `.trim()
37
- );
38
-
39
- return <InlinedStyles id="builderio-content" styles={injectedStyles} />;
40
- }
41
-
42
- export default ContentStyles;
@@ -1,40 +0,0 @@
1
- import type { BuilderRenderState } from '../../context/types';
2
- import type { BuilderContent } from '../../types/builder-content';
3
- import type { Nullable } from '../../types/typescript';
4
- import type { ContentProps } from './content.types';
5
- export const getRootStateInitialValue = ({
6
- content,
7
- data,
8
- locale
9
- }: Pick<ContentProps, 'content' | 'data' | 'locale'>) => {
10
- const defaultValues: BuilderRenderState = {};
11
- const initialState = content?.data?.state || {};
12
-
13
- // set default values for content state inputs
14
- content?.data?.inputs?.forEach(input => {
15
- if (input.name && input.defaultValue !== undefined) {
16
- defaultValues[input.name] = input.defaultValue;
17
- }
18
- });
19
- return {
20
- ...defaultValues,
21
- ...initialState,
22
- ...data,
23
- ...(locale ? {
24
- locale
25
- } : {})
26
- };
27
- };
28
- export const getContentInitialValue = ({
29
- content,
30
- data
31
- }: Pick<ContentProps, 'content' | 'data'>): Nullable<BuilderContent> => {
32
- return !content ? undefined : {
33
- ...content,
34
- data: {
35
- ...content?.data,
36
- ...data
37
- },
38
- meta: content?.meta
39
- };
40
- }