@builder.io/sdk-solid 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 (166) hide show
  1. package/README.md +0 -4
  2. package/dist/index.d.ts +51 -0
  3. package/lib/browser/dev.js +4790 -0
  4. package/lib/browser/dev.jsx +4392 -0
  5. package/lib/browser/index.js +4767 -0
  6. package/lib/browser/index.jsx +4374 -0
  7. package/lib/edge/dev.js +7921 -0
  8. package/lib/edge/dev.jsx +7525 -0
  9. package/lib/edge/index.js +7898 -0
  10. package/lib/edge/index.jsx +7507 -0
  11. package/lib/node/dev.js +4790 -0
  12. package/lib/node/dev.jsx +4392 -0
  13. package/lib/node/index.js +4767 -0
  14. package/lib/node/index.jsx +4374 -0
  15. package/package.json +86 -14
  16. package/CHANGELOG.md +0 -102
  17. package/solid-index.jsx +0 -5
  18. package/src/blocks/BaseText.jsx +0 -11
  19. package/src/blocks/button/button.jsx +0 -41
  20. package/src/blocks/button/component-info.js +0 -34
  21. package/src/blocks/columns/columns.jsx +0 -174
  22. package/src/blocks/columns/component-info.js +0 -218
  23. package/src/blocks/custom-code/component-info.js +0 -24
  24. package/src/blocks/custom-code/custom-code.jsx +0 -62
  25. package/src/blocks/embed/component-info.js +0 -37
  26. package/src/blocks/embed/embed.jsx +0 -50
  27. package/src/blocks/embed/helpers.js +0 -3
  28. package/src/blocks/form/component-info.js +0 -223
  29. package/src/blocks/form/form.jsx +0 -5
  30. package/src/blocks/fragment/component-info.js +0 -8
  31. package/src/blocks/fragment/fragment.jsx +0 -5
  32. package/src/blocks/helpers.js +0 -27
  33. package/src/blocks/image/component-info.js +0 -122
  34. package/src/blocks/image/image.helpers.js +0 -46
  35. package/src/blocks/image/image.jsx +0 -122
  36. package/src/blocks/img/component-info.js +0 -15
  37. package/src/blocks/img/img.jsx +0 -20
  38. package/src/blocks/input/component-info.js +0 -45
  39. package/src/blocks/input/input.jsx +0 -22
  40. package/src/blocks/raw-text/component-info.js +0 -11
  41. package/src/blocks/raw-text/raw-text.jsx +0 -10
  42. package/src/blocks/section/component-info.js +0 -41
  43. package/src/blocks/section/section.jsx +0 -26
  44. package/src/blocks/select/component-info.js +0 -44
  45. package/src/blocks/select/select.jsx +0 -30
  46. package/src/blocks/submit-button/component-info.js +0 -23
  47. package/src/blocks/submit-button/submit-button.jsx +0 -11
  48. package/src/blocks/symbol/component-info.js +0 -35
  49. package/src/blocks/symbol/symbol.helpers.js +0 -60
  50. package/src/blocks/symbol/symbol.jsx +0 -64
  51. package/src/blocks/text/component-info.js +0 -20
  52. package/src/blocks/text/text.jsx +0 -14
  53. package/src/blocks/textarea/component-info.js +0 -38
  54. package/src/blocks/textarea/textarea.jsx +0 -16
  55. package/src/blocks/video/component-info.js +0 -83
  56. package/src/blocks/video/video.jsx +0 -61
  57. package/src/components/block/block.helpers.js +0 -99
  58. package/src/components/block/block.jsx +0 -167
  59. package/src/components/block/components/block-styles.jsx +0 -85
  60. package/src/components/block/components/block-wrapper.jsx +0 -50
  61. package/src/components/block/components/component-ref/component-ref.helpers.js +0 -41
  62. package/src/components/block/components/component-ref/component-ref.jsx +0 -59
  63. package/src/components/block/components/interactive-element.jsx +0 -30
  64. package/src/components/block/components/repeated-block.jsx +0 -20
  65. package/src/components/block/types.js +0 -0
  66. package/src/components/blocks/blocks-wrapper.jsx +0 -66
  67. package/src/components/blocks/blocks.jsx +0 -57
  68. package/src/components/content/components/enable-editor.jsx +0 -347
  69. package/src/components/content/components/styles.helpers.js +0 -56
  70. package/src/components/content/components/styles.jsx +0 -36
  71. package/src/components/content/content.helpers.js +0 -48
  72. package/src/components/content/content.jsx +0 -136
  73. package/src/components/content/content.types.js +0 -0
  74. package/src/components/content/index.js +0 -2
  75. package/src/components/content/wrap-component-ref.js +0 -2
  76. package/src/components/content-variants/content-variants.jsx +0 -115
  77. package/src/components/content-variants/content-variants.types.js +0 -0
  78. package/src/components/content-variants/helpers.js +0 -158
  79. package/src/components/inlined-script.jsx +0 -5
  80. package/src/components/inlined-styles.jsx +0 -5
  81. package/src/constants/builder-registered-components.js +0 -63
  82. package/src/constants/device-sizes.js +0 -48
  83. package/src/constants/sdk-version.js +0 -1
  84. package/src/constants/target.js +0 -4
  85. package/src/context/builder.context.js +0 -16
  86. package/src/context/components.context.js +0 -5
  87. package/src/context/types.js +0 -0
  88. package/src/functions/apply-patch-with-mutation.js +0 -66
  89. package/src/functions/camel-to-kebab-case.js +0 -2
  90. package/src/functions/evaluate/browser-runtime/browser.js +0 -40
  91. package/src/functions/evaluate/browser-runtime/index.js +0 -2
  92. package/src/functions/evaluate/evaluate.js +0 -49
  93. package/src/functions/evaluate/helpers.js +0 -15
  94. package/src/functions/evaluate/index.js +0 -2
  95. package/src/functions/evaluate/node-runtime/index.js +0 -2
  96. package/src/functions/evaluate/non-node-runtime/acorn-interpreter.js +0 -2876
  97. package/src/functions/evaluate/non-node-runtime/index.js +0 -18
  98. package/src/functions/evaluate/non-node-runtime/non-node-runtime.js +0 -91
  99. package/src/functions/event-handler-name.js +0 -5
  100. package/src/functions/extract-text-styles.js +0 -14
  101. package/src/functions/fast-clone.js +0 -2
  102. package/src/functions/fetch-builder-props.js +0 -60
  103. package/src/functions/get-block-actions-handler.js +0 -11
  104. package/src/functions/get-block-actions.js +0 -29
  105. package/src/functions/get-block-component-options.js +0 -27
  106. package/src/functions/get-block-properties.js +0 -63
  107. package/src/functions/get-builder-search-params/index.js +0 -33
  108. package/src/functions/get-content/generate-content-url.js +0 -59
  109. package/src/functions/get-content/index.js +0 -116
  110. package/src/functions/get-content/types.js +0 -0
  111. package/src/functions/get-fetch.js +0 -12
  112. package/src/functions/get-global-this.js +0 -16
  113. package/src/functions/get-processed-block.js +0 -74
  114. package/src/functions/get-react-native-block-styles.js +0 -32
  115. package/src/functions/is-browser.js +0 -4
  116. package/src/functions/is-editing.js +0 -6
  117. package/src/functions/is-iframe.js +0 -5
  118. package/src/functions/is-non-node-server.js +0 -9
  119. package/src/functions/is-previewing.js +0 -12
  120. package/src/functions/on-change.js +0 -24
  121. package/src/functions/register-component.js +0 -60
  122. package/src/functions/register.js +0 -27
  123. package/src/functions/sanitize-react-native-block-styles.js +0 -71
  124. package/src/functions/set-editor-settings.js +0 -13
  125. package/src/functions/set.js +0 -9
  126. package/src/functions/track/helpers.js +0 -48
  127. package/src/functions/track/index.js +0 -131
  128. package/src/functions/track/interaction.js +0 -57
  129. package/src/functions/transform-block-properties.js +0 -4
  130. package/src/functions/transform-block.js +0 -4
  131. package/src/helpers/ab-tests.js +0 -158
  132. package/src/helpers/canTrack.js +0 -3
  133. package/src/helpers/cookie.js +0 -77
  134. package/src/helpers/css.js +0 -30
  135. package/src/helpers/flatten.js +0 -31
  136. package/src/helpers/localStorage.js +0 -32
  137. package/src/helpers/logger.js +0 -8
  138. package/src/helpers/nullable.js +0 -2
  139. package/src/helpers/preview-lru-cache/get.js +0 -4
  140. package/src/helpers/preview-lru-cache/helpers.js +0 -0
  141. package/src/helpers/preview-lru-cache/init.js +0 -2
  142. package/src/helpers/preview-lru-cache/set.js +0 -31
  143. package/src/helpers/preview-lru-cache/types.js +0 -0
  144. package/src/helpers/sessionId.js +0 -55
  145. package/src/helpers/time.js +0 -3
  146. package/src/helpers/url.js +0 -11
  147. package/src/helpers/uuid.js +0 -11
  148. package/src/helpers/visitorId.js +0 -35
  149. package/src/index-helpers/blocks-exports.js +0 -13
  150. package/src/index-helpers/top-of-file.js +0 -2
  151. package/src/index.js +0 -3
  152. package/src/scripts/init-editing.js +0 -109
  153. package/src/server-index.js +0 -11
  154. package/src/types/api-version.js +0 -2
  155. package/src/types/builder-block.js +0 -0
  156. package/src/types/builder-content.js +0 -0
  157. package/src/types/builder-props.js +0 -0
  158. package/src/types/can-track.js +0 -0
  159. package/src/types/components.js +0 -0
  160. package/src/types/deep-partial.js +0 -0
  161. package/src/types/element.js +0 -0
  162. package/src/types/enforced-partials.js +0 -0
  163. package/src/types/input.js +0 -0
  164. package/src/types/targets.js +0 -0
  165. package/src/types/typescript.js +0 -0
  166. package/vite.config.ts +0 -18
@@ -0,0 +1,4790 @@
1
+ import { delegateEvents, createComponent, spread, mergeProps, insert, effect, setAttribute, className, style, template, memo, Dynamic, use } from 'solid-js/web';
2
+ import { createContext, Show, useContext, For, createSignal, onMount, createEffect, on } from 'solid-js';
3
+ import { css } from 'solid-styled-components';
4
+
5
+ // src/blocks/button/button.jsx
6
+ var _tmpl$ = /* @__PURE__ */ template(`<a role="button">`);
7
+ var _tmpl$2 = /* @__PURE__ */ template(`<button>`);
8
+ function Button(props) {
9
+ return createComponent(Show, {
10
+ get fallback() {
11
+ return (() => {
12
+ const _el$2 = _tmpl$2();
13
+ spread(_el$2, mergeProps({
14
+ get ["class"]() {
15
+ return props.attributes.class + " " + css({
16
+ all: "unset"
17
+ });
18
+ }
19
+ }, {}, () => props.attributes, {
20
+ get style() {
21
+ return props.attributes.style;
22
+ }
23
+ }), false, true);
24
+ insert(_el$2, () => props.text);
25
+ return _el$2;
26
+ })();
27
+ },
28
+ get when() {
29
+ return props.link;
30
+ },
31
+ get children() {
32
+ const _el$ = _tmpl$();
33
+ spread(_el$, mergeProps({}, () => props.attributes, {
34
+ get href() {
35
+ return props.link;
36
+ },
37
+ get target() {
38
+ return props.openLinkInNewTab ? "_blank" : void 0;
39
+ }
40
+ }), false, true);
41
+ insert(_el$, () => props.text);
42
+ return _el$;
43
+ }
44
+ });
45
+ }
46
+ var button_default = Button;
47
+
48
+ // src/functions/fast-clone.js
49
+ var fastClone = (obj) => JSON.parse(JSON.stringify(obj));
50
+
51
+ // src/constants/device-sizes.js
52
+ var SIZES = {
53
+ small: {
54
+ min: 320,
55
+ default: 321,
56
+ max: 640
57
+ },
58
+ medium: {
59
+ min: 641,
60
+ default: 642,
61
+ max: 991
62
+ },
63
+ large: {
64
+ min: 990,
65
+ default: 991,
66
+ max: 1200
67
+ }
68
+ };
69
+ var getMaxWidthQueryForSize = (size, sizeValues = SIZES) => `@media (max-width: ${sizeValues[size].max}px)`;
70
+ var getSizesForBreakpoints = ({
71
+ small,
72
+ medium
73
+ }) => {
74
+ const newSizes = fastClone(SIZES);
75
+ if (!small || !medium) {
76
+ return newSizes;
77
+ }
78
+ const smallMin = Math.floor(small / 2);
79
+ newSizes.small = {
80
+ max: small,
81
+ min: smallMin,
82
+ default: smallMin + 1
83
+ };
84
+ const mediumMin = newSizes.small.max + 1;
85
+ newSizes.medium = {
86
+ max: medium,
87
+ min: mediumMin,
88
+ default: mediumMin + 1
89
+ };
90
+ const largeMin = newSizes.medium.max + 1;
91
+ newSizes.large = {
92
+ max: 2e3,
93
+ min: largeMin,
94
+ default: largeMin + 1
95
+ };
96
+ return newSizes;
97
+ };
98
+
99
+ // src/constants/target.js
100
+ var TARGET = "solid";
101
+
102
+ // src/helpers/logger.js
103
+ var MSG_PREFIX = "[Builder.io]: ";
104
+ var logger = {
105
+ log: (...message) => console.log(MSG_PREFIX, ...message),
106
+ error: (...message) => console.error(MSG_PREFIX, ...message),
107
+ warn: (...message) => console.warn(MSG_PREFIX, ...message),
108
+ debug: (...message) => console.debug(MSG_PREFIX, ...message)
109
+ };
110
+
111
+ // src/functions/is-browser.js
112
+ function isBrowser() {
113
+ return typeof window !== "undefined" && typeof document !== "undefined";
114
+ }
115
+
116
+ // src/functions/is-iframe.js
117
+ function isIframe() {
118
+ return isBrowser() && window.self !== window.top;
119
+ }
120
+
121
+ // src/functions/is-editing.js
122
+ function isEditing() {
123
+ return isIframe() && (TARGET === "reactNative" || window.location.search.indexOf("builder.frameEditing=") !== -1);
124
+ }
125
+
126
+ // src/functions/track/helpers.js
127
+ var getLocation = () => {
128
+ if (TARGET === "reactNative") {
129
+ return null;
130
+ } else if (isBrowser()) {
131
+ const parsedLocation = new URL(location.href);
132
+ if (parsedLocation.pathname === "") {
133
+ parsedLocation.pathname = "/";
134
+ }
135
+ return parsedLocation;
136
+ } else {
137
+ console.warn("Cannot get location for tracking in non-browser environment");
138
+ return null;
139
+ }
140
+ };
141
+ var getUserAgent = () => typeof navigator === "object" && navigator.userAgent || "";
142
+ var getUserAttributes = () => {
143
+ const userAgent = getUserAgent();
144
+ const isMobile = {
145
+ Android() {
146
+ return userAgent.match(/Android/i);
147
+ },
148
+ BlackBerry() {
149
+ return userAgent.match(/BlackBerry/i);
150
+ },
151
+ iOS() {
152
+ return userAgent.match(/iPhone|iPod/i);
153
+ },
154
+ Opera() {
155
+ return userAgent.match(/Opera Mini/i);
156
+ },
157
+ Windows() {
158
+ return userAgent.match(/IEMobile/i) || userAgent.match(/WPDesktop/i);
159
+ },
160
+ any() {
161
+ return isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows() || TARGET === "reactNative";
162
+ }
163
+ };
164
+ const isTablet = userAgent.match(/Tablet|iPad/i);
165
+ const url = getLocation();
166
+ return {
167
+ urlPath: url == null ? void 0 : url.pathname,
168
+ host: (url == null ? void 0 : url.host) || (url == null ? void 0 : url.hostname),
169
+ device: isTablet ? "tablet" : isMobile.any() ? "mobile" : "desktop"
170
+ };
171
+ };
172
+
173
+ // src/functions/evaluate/helpers.js
174
+ var getFunctionArguments = ({
175
+ builder,
176
+ context,
177
+ event,
178
+ state
179
+ }) => {
180
+ return Object.entries({
181
+ state,
182
+ Builder: builder,
183
+ builder,
184
+ context,
185
+ event
186
+ });
187
+ };
188
+
189
+ // src/functions/evaluate/browser-runtime/browser.js
190
+ var runInBrowser = ({
191
+ code,
192
+ builder,
193
+ context,
194
+ event,
195
+ localState,
196
+ rootSetState,
197
+ rootState
198
+ }) => {
199
+ const functionArgs = getFunctionArguments({
200
+ builder,
201
+ context,
202
+ event,
203
+ state: flattenState(rootState, localState, rootSetState)
204
+ });
205
+ return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
206
+ };
207
+ function flattenState(rootState, localState, rootSetState) {
208
+ if (rootState === localState) {
209
+ throw new Error("rootState === localState");
210
+ }
211
+ return new Proxy(rootState, {
212
+ get: (_, prop) => {
213
+ if (localState && prop in localState) {
214
+ return localState[prop];
215
+ }
216
+ return rootState[prop];
217
+ },
218
+ set: (_, prop, value) => {
219
+ if (localState && prop in localState) {
220
+ throw new Error("Writing to local state is not allowed as it is read-only.");
221
+ }
222
+ rootState[prop] = value;
223
+ rootSetState == null ? void 0 : rootSetState(rootState);
224
+ return true;
225
+ }
226
+ });
227
+ }
228
+
229
+ // src/functions/evaluate/evaluate.js
230
+ function evaluate({
231
+ code,
232
+ context,
233
+ localState,
234
+ rootState,
235
+ rootSetState,
236
+ event,
237
+ isExpression = true
238
+ }) {
239
+ if (code === "") {
240
+ logger.warn("Skipping evaluation of empty code block.");
241
+ return;
242
+ }
243
+ const builder = {
244
+ isEditing: isEditing(),
245
+ isBrowser: isBrowser(),
246
+ isServer: !isBrowser(),
247
+ getUserAttributes: () => getUserAttributes()
248
+ };
249
+ const useReturn = isExpression && !(code.includes(";") || code.includes(" return ") || code.trim().startsWith("return "));
250
+ const useCode = useReturn ? `return (${code});` : code;
251
+ const args = {
252
+ code: useCode,
253
+ builder,
254
+ context,
255
+ event,
256
+ rootSetState,
257
+ rootState,
258
+ localState
259
+ };
260
+ try {
261
+ return runInBrowser(args);
262
+ } catch (e) {
263
+ logger.error("Failed code evaluation: " + e.message, {
264
+ code
265
+ });
266
+ return void 0;
267
+ }
268
+ }
269
+
270
+ // src/functions/set.js
271
+ var set = (obj, _path, value) => {
272
+ if (Object(obj) !== obj) {
273
+ return obj;
274
+ }
275
+ const path = Array.isArray(_path) ? _path : _path.toString().match(/[^.[\]]+/g);
276
+ path.slice(0, -1).reduce((a, c, i) => Object(a[c]) === a[c] ? a[c] : a[c] = Math.abs(Number(path[i + 1])) >> 0 === +path[i + 1] ? [] : {}, obj)[path[path.length - 1]] = value;
277
+ return obj;
278
+ };
279
+
280
+ // src/functions/transform-block.js
281
+ function transformBlock(block) {
282
+ return block;
283
+ }
284
+
285
+ // src/functions/get-processed-block.js
286
+ var __defProp = Object.defineProperty;
287
+ var __defProps = Object.defineProperties;
288
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
289
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
290
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
291
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
292
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
293
+ enumerable: true,
294
+ configurable: true,
295
+ writable: true,
296
+ value
297
+ }) : obj[key] = value;
298
+ var __spreadValues = (a, b) => {
299
+ for (var prop in b || (b = {}))
300
+ if (__hasOwnProp.call(b, prop))
301
+ __defNormalProp(a, prop, b[prop]);
302
+ if (__getOwnPropSymbols)
303
+ for (var prop of __getOwnPropSymbols(b)) {
304
+ if (__propIsEnum.call(b, prop))
305
+ __defNormalProp(a, prop, b[prop]);
306
+ }
307
+ return a;
308
+ };
309
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
310
+ var evaluateBindings = ({
311
+ block,
312
+ context,
313
+ localState,
314
+ rootState,
315
+ rootSetState
316
+ }) => {
317
+ if (!block.bindings) {
318
+ return block;
319
+ }
320
+ const copy = fastClone(block);
321
+ const copied = __spreadProps(__spreadValues({}, copy), {
322
+ properties: __spreadValues({}, copy.properties),
323
+ actions: __spreadValues({}, copy.actions)
324
+ });
325
+ for (const binding in block.bindings) {
326
+ const expression = block.bindings[binding];
327
+ const value = evaluate({
328
+ code: expression,
329
+ localState,
330
+ rootState,
331
+ rootSetState,
332
+ context
333
+ });
334
+ set(copied, binding, value);
335
+ }
336
+ return copied;
337
+ };
338
+ function getProcessedBlock({
339
+ block,
340
+ context,
341
+ shouldEvaluateBindings,
342
+ localState,
343
+ rootState,
344
+ rootSetState
345
+ }) {
346
+ const transformedBlock = transformBlock(block);
347
+ if (shouldEvaluateBindings) {
348
+ return evaluateBindings({
349
+ block: transformedBlock,
350
+ localState,
351
+ rootState,
352
+ rootSetState,
353
+ context
354
+ });
355
+ } else {
356
+ return transformedBlock;
357
+ }
358
+ }
359
+
360
+ // src/functions/camel-to-kebab-case.js
361
+ var camelToKebabCase = (string) => string.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").toLowerCase();
362
+
363
+ // src/helpers/nullable.js
364
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
365
+
366
+ // src/helpers/css.js
367
+ var convertStyleMapToCSSArray = (style) => {
368
+ const cssProps = Object.entries(style).map(([key, value]) => {
369
+ if (typeof value === "string") {
370
+ return `${camelToKebabCase(key)}: ${value};`;
371
+ } else {
372
+ return void 0;
373
+ }
374
+ });
375
+ return cssProps.filter(checkIsDefined);
376
+ };
377
+ var convertStyleMapToCSS = (style) => convertStyleMapToCSSArray(style).join("\n");
378
+ var createCssClass = ({
379
+ mediaQuery,
380
+ className,
381
+ styles
382
+ }) => {
383
+ const cssClass = `.${className} {
384
+ ${convertStyleMapToCSS(styles)}
385
+ }`;
386
+ if (mediaQuery) {
387
+ return `${mediaQuery} {
388
+ ${cssClass}
389
+ }`;
390
+ } else {
391
+ return cssClass;
392
+ }
393
+ };
394
+ var _tmpl$3 = /* @__PURE__ */ template(`<style>`);
395
+ function InlinedStyles(props) {
396
+ return (() => {
397
+ const _el$ = _tmpl$3();
398
+ effect((_p$) => {
399
+ const _v$ = props.styles, _v$2 = props.id;
400
+ _v$ !== _p$._v$ && (_el$.innerHTML = _p$._v$ = _v$);
401
+ _v$2 !== _p$._v$2 && setAttribute(_el$, "id", _p$._v$2 = _v$2);
402
+ return _p$;
403
+ }, {
404
+ _v$: void 0,
405
+ _v$2: void 0
406
+ });
407
+ return _el$;
408
+ })();
409
+ }
410
+ var inlined_styles_default = InlinedStyles;
411
+
412
+ // src/components/block/components/block-styles.jsx
413
+ function BlockStyles(props) {
414
+ const [processedBlock, setProcessedBlock] = createSignal(getProcessedBlock({
415
+ block: props.block,
416
+ localState: props.context.localState,
417
+ rootState: props.context.rootState,
418
+ rootSetState: props.context.rootSetState,
419
+ context: props.context.context,
420
+ shouldEvaluateBindings: true
421
+ }));
422
+ function canShowBlock() {
423
+ if (checkIsDefined(processedBlock().hide)) {
424
+ return !processedBlock().hide;
425
+ }
426
+ if (checkIsDefined(processedBlock().show)) {
427
+ return processedBlock().show;
428
+ }
429
+ return true;
430
+ }
431
+ function css5() {
432
+ const styles = processedBlock().responsiveStyles;
433
+ const content = props.context.content;
434
+ const sizesWithUpdatedBreakpoints = getSizesForBreakpoints(content?.meta?.breakpoints || {});
435
+ const largeStyles = styles?.large;
436
+ const mediumStyles = styles?.medium;
437
+ const smallStyles = styles?.small;
438
+ const className = processedBlock().id;
439
+ if (!className) {
440
+ return "";
441
+ }
442
+ const largeStylesClass = largeStyles ? createCssClass({
443
+ className,
444
+ styles: largeStyles
445
+ }) : "";
446
+ const mediumStylesClass = mediumStyles ? createCssClass({
447
+ className,
448
+ styles: mediumStyles,
449
+ mediaQuery: getMaxWidthQueryForSize("medium", sizesWithUpdatedBreakpoints)
450
+ }) : "";
451
+ const smallStylesClass = smallStyles ? createCssClass({
452
+ className,
453
+ styles: smallStyles,
454
+ mediaQuery: getMaxWidthQueryForSize("small", sizesWithUpdatedBreakpoints)
455
+ }) : "";
456
+ return [largeStylesClass, mediumStylesClass, smallStylesClass].join(" ");
457
+ }
458
+ return createComponent(Show, {
459
+ get when() {
460
+ return memo(() => !!(TARGET !== "reactNative" && css5()))() && canShowBlock();
461
+ },
462
+ get children() {
463
+ return createComponent(inlined_styles_default, {
464
+ get styles() {
465
+ return css5();
466
+ }
467
+ });
468
+ }
469
+ });
470
+ }
471
+ var block_styles_default = BlockStyles;
472
+
473
+ // src/functions/get-block-component-options.js
474
+ var __defProp2 = Object.defineProperty;
475
+ var __defProps2 = Object.defineProperties;
476
+ var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
477
+ var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
478
+ var __hasOwnProp2 = Object.prototype.hasOwnProperty;
479
+ var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
480
+ var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, {
481
+ enumerable: true,
482
+ configurable: true,
483
+ writable: true,
484
+ value
485
+ }) : obj[key] = value;
486
+ var __spreadValues2 = (a, b) => {
487
+ for (var prop in b || (b = {}))
488
+ if (__hasOwnProp2.call(b, prop))
489
+ __defNormalProp2(a, prop, b[prop]);
490
+ if (__getOwnPropSymbols2)
491
+ for (var prop of __getOwnPropSymbols2(b)) {
492
+ if (__propIsEnum2.call(b, prop))
493
+ __defNormalProp2(a, prop, b[prop]);
494
+ }
495
+ return a;
496
+ };
497
+ var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
498
+ function getBlockComponentOptions(block) {
499
+ var _a;
500
+ return __spreadProps2(__spreadValues2(__spreadValues2({}, (_a = block.component) == null ? void 0 : _a.options), block.options), {
501
+ builderBlock: block
502
+ });
503
+ }
504
+
505
+ // src/functions/sanitize-react-native-block-styles.js
506
+ var __defProp3 = Object.defineProperty;
507
+ var __defProps3 = Object.defineProperties;
508
+ var __getOwnPropDescs3 = Object.getOwnPropertyDescriptors;
509
+ var __getOwnPropSymbols3 = Object.getOwnPropertySymbols;
510
+ var __hasOwnProp3 = Object.prototype.hasOwnProperty;
511
+ var __propIsEnum3 = Object.prototype.propertyIsEnumerable;
512
+ var __defNormalProp3 = (obj, key, value) => key in obj ? __defProp3(obj, key, {
513
+ enumerable: true,
514
+ configurable: true,
515
+ writable: true,
516
+ value
517
+ }) : obj[key] = value;
518
+ var __spreadValues3 = (a, b) => {
519
+ for (var prop in b || (b = {}))
520
+ if (__hasOwnProp3.call(b, prop))
521
+ __defNormalProp3(a, prop, b[prop]);
522
+ if (__getOwnPropSymbols3)
523
+ for (var prop of __getOwnPropSymbols3(b)) {
524
+ if (__propIsEnum3.call(b, prop))
525
+ __defNormalProp3(a, prop, b[prop]);
526
+ }
527
+ return a;
528
+ };
529
+ var __spreadProps3 = (a, b) => __defProps3(a, __getOwnPropDescs3(b));
530
+ var propertiesThatMustBeNumber = /* @__PURE__ */ new Set(["lineHeight"]);
531
+ var displayValues = /* @__PURE__ */ new Set(["flex", "none"]);
532
+ var SHOW_WARNINGS = false;
533
+ var normalizeNumber = (value) => {
534
+ if (Number.isNaN(value)) {
535
+ return void 0;
536
+ } else if (value < 0) {
537
+ return 0;
538
+ } else {
539
+ return value;
540
+ }
541
+ };
542
+ var sanitizeReactNativeBlockStyles = (styles) => {
543
+ return Object.keys(styles).reduce((acc, key) => {
544
+ const propertyValue = styles[key];
545
+ if (key === "display" && !displayValues.has(propertyValue)) {
546
+ if (SHOW_WARNINGS) {
547
+ console.warn(`Style value for key "display" must be "flex" or "none" but had ${propertyValue}`);
548
+ }
549
+ return acc;
550
+ }
551
+ if (propertiesThatMustBeNumber.has(key) && typeof propertyValue !== "number") {
552
+ if (SHOW_WARNINGS) {
553
+ console.warn(`Style key ${key} must be a number, but had value \`${styles[key]}\``);
554
+ }
555
+ return acc;
556
+ }
557
+ if (typeof propertyValue === "string") {
558
+ const isPixelUnit = propertyValue.match(/^-?(\d*)(\.?)(\d*)*px$/);
559
+ if (isPixelUnit) {
560
+ const newValue = parseFloat(propertyValue);
561
+ const normalizedValue = normalizeNumber(newValue);
562
+ if (normalizedValue) {
563
+ return __spreadProps3(__spreadValues3({}, acc), {
564
+ [key]: normalizedValue
565
+ });
566
+ } else {
567
+ return acc;
568
+ }
569
+ } else if (propertyValue === "0") {
570
+ return __spreadProps3(__spreadValues3({}, acc), {
571
+ [key]: 0
572
+ });
573
+ }
574
+ }
575
+ return __spreadProps3(__spreadValues3({}, acc), {
576
+ [key]: propertyValue
577
+ });
578
+ }, {});
579
+ };
580
+
581
+ // src/functions/get-react-native-block-styles.js
582
+ var __defProp4 = Object.defineProperty;
583
+ var __getOwnPropSymbols4 = Object.getOwnPropertySymbols;
584
+ var __hasOwnProp4 = Object.prototype.hasOwnProperty;
585
+ var __propIsEnum4 = Object.prototype.propertyIsEnumerable;
586
+ var __defNormalProp4 = (obj, key, value) => key in obj ? __defProp4(obj, key, {
587
+ enumerable: true,
588
+ configurable: true,
589
+ writable: true,
590
+ value
591
+ }) : obj[key] = value;
592
+ var __spreadValues4 = (a, b) => {
593
+ for (var prop in b || (b = {}))
594
+ if (__hasOwnProp4.call(b, prop))
595
+ __defNormalProp4(a, prop, b[prop]);
596
+ if (__getOwnPropSymbols4)
597
+ for (var prop of __getOwnPropSymbols4(b)) {
598
+ if (__propIsEnum4.call(b, prop))
599
+ __defNormalProp4(a, prop, b[prop]);
600
+ }
601
+ return a;
602
+ };
603
+ function getReactNativeBlockStyles({
604
+ block,
605
+ context,
606
+ blockStyles
607
+ }) {
608
+ const responsiveStyles = block.responsiveStyles;
609
+ if (!responsiveStyles) {
610
+ return {};
611
+ }
612
+ const styles = __spreadValues4(__spreadValues4(__spreadValues4(__spreadValues4(__spreadValues4({}, context.inheritedStyles), responsiveStyles.large || {}), responsiveStyles.medium || {}), responsiveStyles.small || {}), blockStyles);
613
+ const newStyles = sanitizeReactNativeBlockStyles(styles);
614
+ return newStyles;
615
+ }
616
+
617
+ // src/functions/transform-block-properties.js
618
+ function transformBlockProperties(properties) {
619
+ return properties;
620
+ }
621
+
622
+ // src/functions/get-block-properties.js
623
+ var __defProp5 = Object.defineProperty;
624
+ var __defProps4 = Object.defineProperties;
625
+ var __getOwnPropDescs4 = Object.getOwnPropertyDescriptors;
626
+ var __getOwnPropSymbols5 = Object.getOwnPropertySymbols;
627
+ var __hasOwnProp5 = Object.prototype.hasOwnProperty;
628
+ var __propIsEnum5 = Object.prototype.propertyIsEnumerable;
629
+ var __defNormalProp5 = (obj, key, value) => key in obj ? __defProp5(obj, key, {
630
+ enumerable: true,
631
+ configurable: true,
632
+ writable: true,
633
+ value
634
+ }) : obj[key] = value;
635
+ var __spreadValues5 = (a, b) => {
636
+ for (var prop in b || (b = {}))
637
+ if (__hasOwnProp5.call(b, prop))
638
+ __defNormalProp5(a, prop, b[prop]);
639
+ if (__getOwnPropSymbols5)
640
+ for (var prop of __getOwnPropSymbols5(b)) {
641
+ if (__propIsEnum5.call(b, prop))
642
+ __defNormalProp5(a, prop, b[prop]);
643
+ }
644
+ return a;
645
+ };
646
+ var __spreadProps4 = (a, b) => __defProps4(a, __getOwnPropDescs4(b));
647
+ var extractRelevantRootBlockProperties = (block) => {
648
+ return {
649
+ href: block.href
650
+ };
651
+ };
652
+ function getBlockProperties({
653
+ block,
654
+ context
655
+ }) {
656
+ var _a;
657
+ const properties = __spreadProps4(__spreadValues5(__spreadValues5({}, extractRelevantRootBlockProperties(block)), block.properties), {
658
+ "builder-id": block.id,
659
+ style: block.style ? getStyleAttribute(block.style) : void 0,
660
+ class: [block.id, "builder-block", block.class, (_a = block.properties) == null ? void 0 : _a.class].filter(Boolean).join(" ")
661
+ });
662
+ if (TARGET === "reactNative") {
663
+ properties.style = getReactNativeBlockStyles({
664
+ block,
665
+ context,
666
+ blockStyles: properties.style
667
+ });
668
+ }
669
+ return transformBlockProperties(properties);
670
+ }
671
+ function getStyleAttribute(style) {
672
+ switch (TARGET) {
673
+ case "svelte":
674
+ case "vue2":
675
+ case "vue3":
676
+ case "solid":
677
+ return convertStyleMapToCSSArray(style).join(" ");
678
+ case "qwik":
679
+ case "reactNative":
680
+ case "react":
681
+ case "rsc":
682
+ return style;
683
+ }
684
+ }
685
+
686
+ // src/components/block/block.helpers.js
687
+ var __defProp6 = Object.defineProperty;
688
+ var __defProps5 = Object.defineProperties;
689
+ var __getOwnPropDescs5 = Object.getOwnPropertyDescriptors;
690
+ var __getOwnPropSymbols6 = Object.getOwnPropertySymbols;
691
+ var __hasOwnProp6 = Object.prototype.hasOwnProperty;
692
+ var __propIsEnum6 = Object.prototype.propertyIsEnumerable;
693
+ var __defNormalProp6 = (obj, key, value) => key in obj ? __defProp6(obj, key, {
694
+ enumerable: true,
695
+ configurable: true,
696
+ writable: true,
697
+ value
698
+ }) : obj[key] = value;
699
+ var __spreadValues6 = (a, b) => {
700
+ for (var prop in b || (b = {}))
701
+ if (__hasOwnProp6.call(b, prop))
702
+ __defNormalProp6(a, prop, b[prop]);
703
+ if (__getOwnPropSymbols6)
704
+ for (var prop of __getOwnPropSymbols6(b)) {
705
+ if (__propIsEnum6.call(b, prop))
706
+ __defNormalProp6(a, prop, b[prop]);
707
+ }
708
+ return a;
709
+ };
710
+ var __spreadProps5 = (a, b) => __defProps5(a, __getOwnPropDescs5(b));
711
+ var __objRest = (source, exclude) => {
712
+ var target = {};
713
+ for (var prop in source)
714
+ if (__hasOwnProp6.call(source, prop) && exclude.indexOf(prop) < 0)
715
+ target[prop] = source[prop];
716
+ if (source != null && __getOwnPropSymbols6)
717
+ for (var prop of __getOwnPropSymbols6(source)) {
718
+ if (exclude.indexOf(prop) < 0 && __propIsEnum6.call(source, prop))
719
+ target[prop] = source[prop];
720
+ }
721
+ return target;
722
+ };
723
+ var EMPTY_HTML_ELEMENTS = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"];
724
+ var isEmptyHtmlElement = (tagName) => {
725
+ return typeof tagName === "string" && EMPTY_HTML_ELEMENTS.includes(tagName.toLowerCase());
726
+ };
727
+ var getComponent = ({
728
+ block,
729
+ context,
730
+ registeredComponents
731
+ }) => {
732
+ var _a;
733
+ const componentName = (_a = getProcessedBlock({
734
+ block,
735
+ localState: context.localState,
736
+ rootState: context.rootState,
737
+ rootSetState: context.rootSetState,
738
+ context: context.context,
739
+ shouldEvaluateBindings: false
740
+ }).component) == null ? void 0 : _a.name;
741
+ if (!componentName) {
742
+ return null;
743
+ }
744
+ const ref = registeredComponents[componentName];
745
+ if (!ref) {
746
+ console.warn(`
747
+ Could not find a registered component named "${componentName}".
748
+ If you registered it, is the file that registered it imported by the file that needs to render it?`);
749
+ return void 0;
750
+ } else {
751
+ return ref;
752
+ }
753
+ };
754
+ var getRepeatItemData = ({
755
+ block,
756
+ context
757
+ }) => {
758
+ const _a = block, {
759
+ repeat
760
+ } = _a, blockWithoutRepeat = __objRest(_a, ["repeat"]);
761
+ if (!(repeat == null ? void 0 : repeat.collection)) {
762
+ return void 0;
763
+ }
764
+ const itemsArray = evaluate({
765
+ code: repeat.collection,
766
+ localState: context.localState,
767
+ rootState: context.rootState,
768
+ rootSetState: context.rootSetState,
769
+ context: context.context
770
+ });
771
+ if (!Array.isArray(itemsArray)) {
772
+ return void 0;
773
+ }
774
+ const collectionName = repeat.collection.split(".").pop();
775
+ const itemNameToUse = repeat.itemName || (collectionName ? collectionName + "Item" : "item");
776
+ const repeatArray = itemsArray.map((item, index) => ({
777
+ context: __spreadProps5(__spreadValues6({}, context), {
778
+ localState: __spreadProps5(__spreadValues6({}, context.localState), {
779
+ $index: index,
780
+ $item: item,
781
+ [itemNameToUse]: item,
782
+ [`$${itemNameToUse}Index`]: index
783
+ })
784
+ }),
785
+ block: blockWithoutRepeat
786
+ }));
787
+ return repeatArray;
788
+ };
789
+ var stdin_default = createContext({
790
+ content: null,
791
+ context: {},
792
+ localState: void 0,
793
+ rootSetState() {
794
+ },
795
+ rootState: {},
796
+ apiKey: null,
797
+ apiVersion: void 0,
798
+ componentInfos: {},
799
+ inheritedStyles: {}
800
+ });
801
+
802
+ // src/components/block/components/repeated-block.jsx
803
+ function RepeatedBlock(props) {
804
+ const [store, setStore] = createSignal(props.repeatContext);
805
+ return createComponent(stdin_default.Provider, {
806
+ get value() {
807
+ return store();
808
+ },
809
+ get children() {
810
+ return createComponent(block_default, {
811
+ get block() {
812
+ return props.block;
813
+ },
814
+ get context() {
815
+ return store();
816
+ },
817
+ get registeredComponents() {
818
+ return props.registeredComponents;
819
+ }
820
+ });
821
+ }
822
+ });
823
+ }
824
+ var repeated_block_default = RepeatedBlock;
825
+
826
+ // src/functions/event-handler-name.js
827
+ function capitalizeFirstLetter(string) {
828
+ return string.charAt(0).toUpperCase() + string.slice(1);
829
+ }
830
+ var getEventHandlerName = (key) => `on${capitalizeFirstLetter(key)}`;
831
+
832
+ // src/functions/get-block-actions-handler.js
833
+ var createEventHandler = (value, options) => (event) => evaluate({
834
+ code: value,
835
+ context: options.context,
836
+ localState: options.localState,
837
+ rootState: options.rootState,
838
+ rootSetState: options.rootSetState,
839
+ event,
840
+ isExpression: false
841
+ });
842
+
843
+ // src/functions/get-block-actions.js
844
+ function getBlockActions(options) {
845
+ var _a;
846
+ const obj = {};
847
+ const optionActions = (_a = options.block.actions) != null ? _a : {};
848
+ for (const key in optionActions) {
849
+ if (!optionActions.hasOwnProperty(key)) {
850
+ continue;
851
+ }
852
+ const value = optionActions[key];
853
+ let eventHandlerName = getEventHandlerName(key);
854
+ if (options.stripPrefix) {
855
+ switch (TARGET) {
856
+ case "vue2":
857
+ case "vue3":
858
+ eventHandlerName = eventHandlerName.replace("v-on:", "");
859
+ break;
860
+ case "svelte":
861
+ eventHandlerName = eventHandlerName.replace("on:", "");
862
+ break;
863
+ }
864
+ }
865
+ obj[eventHandlerName] = createEventHandler(value, options);
866
+ }
867
+ return obj;
868
+ }
869
+
870
+ // src/components/block/components/interactive-element.jsx
871
+ function InteractiveElement(props) {
872
+ return createComponent(Dynamic, mergeProps(() => props.wrapperProps, {
873
+ get attributes() {
874
+ return {
875
+ ...getBlockProperties({
876
+ block: props.block,
877
+ context: props.context
878
+ }),
879
+ ...getBlockActions({
880
+ block: props.block,
881
+ rootState: props.context.rootState,
882
+ rootSetState: props.context.rootSetState,
883
+ localState: props.context.localState,
884
+ context: props.context.context
885
+ })
886
+ };
887
+ },
888
+ get component() {
889
+ return props.Wrapper;
890
+ },
891
+ get children() {
892
+ return props.children;
893
+ }
894
+ }));
895
+ }
896
+ var interactive_element_default = InteractiveElement;
897
+
898
+ // src/components/block/components/component-ref/component-ref.helpers.js
899
+ var __defProp7 = Object.defineProperty;
900
+ var __getOwnPropSymbols7 = Object.getOwnPropertySymbols;
901
+ var __hasOwnProp7 = Object.prototype.hasOwnProperty;
902
+ var __propIsEnum7 = Object.prototype.propertyIsEnumerable;
903
+ var __defNormalProp7 = (obj, key, value) => key in obj ? __defProp7(obj, key, {
904
+ enumerable: true,
905
+ configurable: true,
906
+ writable: true,
907
+ value
908
+ }) : obj[key] = value;
909
+ var __spreadValues7 = (a, b) => {
910
+ for (var prop in b || (b = {}))
911
+ if (__hasOwnProp7.call(b, prop))
912
+ __defNormalProp7(a, prop, b[prop]);
913
+ if (__getOwnPropSymbols7)
914
+ for (var prop of __getOwnPropSymbols7(b)) {
915
+ if (__propIsEnum7.call(b, prop))
916
+ __defNormalProp7(a, prop, b[prop]);
917
+ }
918
+ return a;
919
+ };
920
+ var getWrapperProps = ({
921
+ componentOptions,
922
+ builderBlock,
923
+ context,
924
+ componentRef,
925
+ includeBlockProps,
926
+ isInteractive,
927
+ contextValue
928
+ }) => {
929
+ const interactiveElementProps = {
930
+ Wrapper: componentRef,
931
+ block: builderBlock,
932
+ context,
933
+ wrapperProps: componentOptions
934
+ };
935
+ return isInteractive ? interactiveElementProps : __spreadValues7(__spreadValues7({}, componentOptions), includeBlockProps ? {
936
+ attributes: getBlockProperties({
937
+ block: builderBlock,
938
+ context: contextValue
939
+ })
940
+ } : {});
941
+ };
942
+
943
+ // src/components/block/components/component-ref/component-ref.jsx
944
+ function ComponentRef(props) {
945
+ const [Wrapper, setWrapper] = createSignal(props.isInteractive ? interactive_element_default : props.componentRef);
946
+ return createComponent(Show, {
947
+ get when() {
948
+ return props.componentRef;
949
+ },
950
+ get children() {
951
+ return createComponent(Dynamic, mergeProps(() => getWrapperProps({
952
+ componentOptions: props.componentOptions,
953
+ builderBlock: props.builderBlock,
954
+ context: props.context,
955
+ componentRef: props.componentRef,
956
+ includeBlockProps: props.includeBlockProps,
957
+ isInteractive: props.isInteractive,
958
+ contextValue: props.context
959
+ }), {
960
+ get component() {
961
+ return Wrapper();
962
+ },
963
+ get children() {
964
+ return [createComponent(For, {
965
+ get each() {
966
+ return props.blockChildren;
967
+ },
968
+ children: (child, _index) => {
969
+ _index();
970
+ return createComponent(block_default, {
971
+ get key() {
972
+ return "block-" + child.id;
973
+ },
974
+ block: child,
975
+ get context() {
976
+ return props.context;
977
+ },
978
+ get registeredComponents() {
979
+ return props.registeredComponents;
980
+ }
981
+ });
982
+ }
983
+ }), createComponent(For, {
984
+ get each() {
985
+ return props.blockChildren;
986
+ },
987
+ children: (child, _index) => {
988
+ _index();
989
+ return createComponent(block_styles_default, {
990
+ get key() {
991
+ return "block-style-" + child.id;
992
+ },
993
+ block: child,
994
+ get context() {
995
+ return props.context;
996
+ }
997
+ });
998
+ }
999
+ })];
1000
+ }
1001
+ }));
1002
+ }
1003
+ });
1004
+ }
1005
+ var component_ref_default = ComponentRef;
1006
+ function BlockWrapper(props) {
1007
+ return createComponent(Show, {
1008
+ get fallback() {
1009
+ return createComponent(Dynamic, mergeProps(() => getBlockProperties({
1010
+ block: props.block,
1011
+ context: props.context
1012
+ }), () => getBlockActions({
1013
+ block: props.block,
1014
+ rootState: props.context.rootState,
1015
+ rootSetState: props.context.rootSetState,
1016
+ localState: props.context.localState,
1017
+ context: props.context.context,
1018
+ stripPrefix: true
1019
+ }), {
1020
+ get component() {
1021
+ return props.Wrapper;
1022
+ }
1023
+ }));
1024
+ },
1025
+ get when() {
1026
+ return props.hasChildren;
1027
+ },
1028
+ get children() {
1029
+ return createComponent(Dynamic, mergeProps(() => getBlockProperties({
1030
+ block: props.block,
1031
+ context: props.context
1032
+ }), () => getBlockActions({
1033
+ block: props.block,
1034
+ rootState: props.context.rootState,
1035
+ rootSetState: props.context.rootSetState,
1036
+ localState: props.context.localState,
1037
+ context: props.context.context,
1038
+ stripPrefix: true
1039
+ }), {
1040
+ get component() {
1041
+ return props.Wrapper;
1042
+ },
1043
+ get children() {
1044
+ return props.children;
1045
+ }
1046
+ }));
1047
+ }
1048
+ });
1049
+ }
1050
+ var block_wrapper_default = BlockWrapper;
1051
+
1052
+ // src/components/block/block.jsx
1053
+ function Block(props) {
1054
+ const [childrenContext, setChildrenContext] = createSignal(props.context);
1055
+ function blockComponent() {
1056
+ return getComponent({
1057
+ block: props.block,
1058
+ context: props.context,
1059
+ registeredComponents: props.registeredComponents
1060
+ });
1061
+ }
1062
+ function repeatItem() {
1063
+ return getRepeatItemData({
1064
+ block: props.block,
1065
+ context: props.context
1066
+ });
1067
+ }
1068
+ function processedBlock() {
1069
+ return repeatItem() ? props.block : getProcessedBlock({
1070
+ block: props.block,
1071
+ localState: props.context.localState,
1072
+ rootState: props.context.rootState,
1073
+ rootSetState: props.context.rootSetState,
1074
+ context: props.context.context,
1075
+ shouldEvaluateBindings: true
1076
+ });
1077
+ }
1078
+ function Tag() {
1079
+ return props.block.tagName || "div";
1080
+ }
1081
+ function canShowBlock() {
1082
+ if ("hide" in processedBlock()) {
1083
+ return !processedBlock().hide;
1084
+ }
1085
+ if ("show" in processedBlock()) {
1086
+ return processedBlock().show;
1087
+ }
1088
+ return true;
1089
+ }
1090
+ function childrenWithoutParentComponent() {
1091
+ const shouldRenderChildrenOutsideRef = !blockComponent()?.component && !repeatItem();
1092
+ return shouldRenderChildrenOutsideRef ? processedBlock().children ?? [] : [];
1093
+ }
1094
+ function componentRefProps() {
1095
+ return {
1096
+ blockChildren: processedBlock().children ?? [],
1097
+ componentRef: blockComponent()?.component,
1098
+ componentOptions: {
1099
+ ...getBlockComponentOptions(processedBlock()),
1100
+ builderContext: props.context,
1101
+ ...blockComponent()?.name === "Symbol" || blockComponent()?.name === "Columns" ? {
1102
+ builderComponents: props.registeredComponents
1103
+ } : {}
1104
+ },
1105
+ context: childrenContext(),
1106
+ registeredComponents: props.registeredComponents,
1107
+ builderBlock: processedBlock(),
1108
+ includeBlockProps: blockComponent()?.noWrap === true,
1109
+ isInteractive: !blockComponent()?.isRSC
1110
+ };
1111
+ }
1112
+ return createComponent(Show, {
1113
+ get when() {
1114
+ return canShowBlock();
1115
+ },
1116
+ get children() {
1117
+ return createComponent(Show, {
1118
+ get fallback() {
1119
+ return createComponent(component_ref_default, mergeProps(componentRefProps));
1120
+ },
1121
+ get when() {
1122
+ return !blockComponent()?.noWrap;
1123
+ },
1124
+ get children() {
1125
+ return [createComponent(Show, {
1126
+ get when() {
1127
+ return isEmptyHtmlElement(Tag());
1128
+ },
1129
+ get children() {
1130
+ return createComponent(block_wrapper_default, {
1131
+ get Wrapper() {
1132
+ return Tag();
1133
+ },
1134
+ get block() {
1135
+ return processedBlock();
1136
+ },
1137
+ get context() {
1138
+ return props.context;
1139
+ },
1140
+ hasChildren: false
1141
+ });
1142
+ }
1143
+ }), createComponent(Show, {
1144
+ get when() {
1145
+ return memo(() => !!!isEmptyHtmlElement(Tag()))() && repeatItem();
1146
+ },
1147
+ get children() {
1148
+ return createComponent(For, {
1149
+ get each() {
1150
+ return repeatItem();
1151
+ },
1152
+ children: (data, _index) => {
1153
+ const index = _index();
1154
+ return createComponent(repeated_block_default, {
1155
+ key: index,
1156
+ get repeatContext() {
1157
+ return data.context;
1158
+ },
1159
+ get block() {
1160
+ return data.block;
1161
+ },
1162
+ get registeredComponents() {
1163
+ return props.registeredComponents;
1164
+ }
1165
+ });
1166
+ }
1167
+ });
1168
+ }
1169
+ }), createComponent(Show, {
1170
+ get when() {
1171
+ return memo(() => !!!isEmptyHtmlElement(Tag()))() && !repeatItem();
1172
+ },
1173
+ get children() {
1174
+ return createComponent(block_wrapper_default, {
1175
+ get Wrapper() {
1176
+ return Tag();
1177
+ },
1178
+ get block() {
1179
+ return processedBlock();
1180
+ },
1181
+ get context() {
1182
+ return props.context;
1183
+ },
1184
+ hasChildren: true,
1185
+ get children() {
1186
+ return [createComponent(component_ref_default, mergeProps(componentRefProps)), createComponent(For, {
1187
+ get each() {
1188
+ return childrenWithoutParentComponent();
1189
+ },
1190
+ children: (child, _index) => {
1191
+ _index();
1192
+ return createComponent(Block, {
1193
+ get key() {
1194
+ return "block-" + child.id;
1195
+ },
1196
+ block: child,
1197
+ get context() {
1198
+ return childrenContext();
1199
+ },
1200
+ get registeredComponents() {
1201
+ return props.registeredComponents;
1202
+ }
1203
+ });
1204
+ }
1205
+ }), createComponent(For, {
1206
+ get each() {
1207
+ return childrenWithoutParentComponent();
1208
+ },
1209
+ children: (child, _index) => {
1210
+ _index();
1211
+ return createComponent(block_styles_default, {
1212
+ get key() {
1213
+ return "block-style-" + child.id;
1214
+ },
1215
+ block: child,
1216
+ get context() {
1217
+ return childrenContext();
1218
+ }
1219
+ });
1220
+ }
1221
+ })];
1222
+ }
1223
+ });
1224
+ }
1225
+ })];
1226
+ }
1227
+ });
1228
+ }
1229
+ });
1230
+ }
1231
+ var block_default = Block;
1232
+ var _tmpl$4 = /* @__PURE__ */ template(`<div>`);
1233
+ function BlocksWrapper(props) {
1234
+ function className() {
1235
+ return "builder-blocks" + (!props.blocks?.length ? " no-blocks" : "");
1236
+ }
1237
+ function onClick() {
1238
+ if (isEditing() && !props.blocks?.length) {
1239
+ window.parent?.postMessage({
1240
+ type: "builder.clickEmptyBlocks",
1241
+ data: {
1242
+ parentElementId: props.parent,
1243
+ dataPath: props.path
1244
+ }
1245
+ }, "*");
1246
+ }
1247
+ }
1248
+ function onMouseEnter() {
1249
+ if (isEditing() && !props.blocks?.length) {
1250
+ window.parent?.postMessage({
1251
+ type: "builder.hoverEmptyBlocks",
1252
+ data: {
1253
+ parentElementId: props.parent,
1254
+ dataPath: props.path
1255
+ }
1256
+ }, "*");
1257
+ }
1258
+ }
1259
+ return (() => {
1260
+ const _el$ = _tmpl$4();
1261
+ spread(_el$, mergeProps({
1262
+ get ["class"]() {
1263
+ return className() + " " + css({
1264
+ display: "flex",
1265
+ flexDirection: "column",
1266
+ alignItems: "stretch"
1267
+ });
1268
+ },
1269
+ get ["builder-path"]() {
1270
+ return props.path;
1271
+ },
1272
+ get ["builder-parent-id"]() {
1273
+ return props.parent;
1274
+ }
1275
+ }, {}, {
1276
+ get style() {
1277
+ return props.styleProp;
1278
+ },
1279
+ "onClick": (event) => onClick(),
1280
+ "onMouseEnter": (event) => onMouseEnter(),
1281
+ "onKeyPress": (event) => onClick()
1282
+ }), false, true);
1283
+ insert(_el$, () => props.children);
1284
+ return _el$;
1285
+ })();
1286
+ }
1287
+ var blocks_wrapper_default = BlocksWrapper;
1288
+ var stdin_default2 = createContext({ registeredComponents: {} });
1289
+
1290
+ // src/components/blocks/blocks.jsx
1291
+ function Blocks(props) {
1292
+ const builderContext = useContext(stdin_default);
1293
+ const componentsContext = useContext(stdin_default2);
1294
+ return createComponent(blocks_wrapper_default, {
1295
+ get blocks() {
1296
+ return props.blocks;
1297
+ },
1298
+ get parent() {
1299
+ return props.parent;
1300
+ },
1301
+ get path() {
1302
+ return props.path;
1303
+ },
1304
+ get styleProp() {
1305
+ return props.styleProp;
1306
+ },
1307
+ get children() {
1308
+ return [createComponent(Show, {
1309
+ get when() {
1310
+ return props.blocks;
1311
+ },
1312
+ get children() {
1313
+ return createComponent(For, {
1314
+ get each() {
1315
+ return props.blocks;
1316
+ },
1317
+ children: (block, _index) => {
1318
+ _index();
1319
+ return createComponent(block_default, {
1320
+ get key() {
1321
+ return "render-block-" + block.id;
1322
+ },
1323
+ block,
1324
+ get context() {
1325
+ return props.context || builderContext;
1326
+ },
1327
+ get registeredComponents() {
1328
+ return props.registeredComponents || componentsContext.registeredComponents;
1329
+ }
1330
+ });
1331
+ }
1332
+ });
1333
+ }
1334
+ }), createComponent(Show, {
1335
+ get when() {
1336
+ return props.blocks;
1337
+ },
1338
+ get children() {
1339
+ return createComponent(For, {
1340
+ get each() {
1341
+ return props.blocks;
1342
+ },
1343
+ children: (block, _index) => {
1344
+ _index();
1345
+ return createComponent(block_styles_default, {
1346
+ get key() {
1347
+ return "block-style-" + block.id;
1348
+ },
1349
+ block,
1350
+ get context() {
1351
+ return props.context || builderContext;
1352
+ }
1353
+ });
1354
+ }
1355
+ });
1356
+ }
1357
+ })];
1358
+ }
1359
+ });
1360
+ }
1361
+ var blocks_default = Blocks;
1362
+
1363
+ // src/blocks/columns/columns.jsx
1364
+ var _tmpl$5 = /* @__PURE__ */ template(`<div>`);
1365
+ function Columns(props) {
1366
+ const [gutterSize, setGutterSize] = createSignal(typeof props.space === "number" ? props.space || 0 : 20);
1367
+ const [cols, setCols] = createSignal(props.columns || []);
1368
+ const [stackAt, setStackAt] = createSignal(props.stackColumnsAt || "tablet");
1369
+ const [flexDir, setFlexDir] = createSignal(props.stackColumnsAt === "never" ? "row" : props.reverseColumnsWhenStacked ? "column-reverse" : "column");
1370
+ function getWidth(index) {
1371
+ return cols()[index]?.width || 100 / cols().length;
1372
+ }
1373
+ function getColumnCssWidth(index) {
1374
+ const subtractWidth = gutterSize() * (cols().length - 1) / cols().length;
1375
+ return `calc(${getWidth(index)}% - ${subtractWidth}px)`;
1376
+ }
1377
+ function getTabletStyle({
1378
+ stackedStyle,
1379
+ desktopStyle
1380
+ }) {
1381
+ return stackAt() === "tablet" ? stackedStyle : desktopStyle;
1382
+ }
1383
+ function getMobileStyle({
1384
+ stackedStyle,
1385
+ desktopStyle
1386
+ }) {
1387
+ return stackAt() === "never" ? desktopStyle : stackedStyle;
1388
+ }
1389
+ function columnsCssVars() {
1390
+ return {
1391
+ "--flex-dir": flexDir(),
1392
+ "--flex-dir-tablet": getTabletStyle({
1393
+ stackedStyle: flexDir(),
1394
+ desktopStyle: "row"
1395
+ })
1396
+ };
1397
+ }
1398
+ function columnCssVars(index) {
1399
+ const gutter = index === 0 ? 0 : gutterSize();
1400
+ const width = getColumnCssWidth(index);
1401
+ const gutterPixels = `${gutter}px`;
1402
+ const mobileWidth = "100%";
1403
+ const mobileMarginLeft = 0;
1404
+ const marginLeftKey = "margin-left";
1405
+ return {
1406
+ width,
1407
+ [marginLeftKey]: gutterPixels,
1408
+ "--column-width-mobile": getMobileStyle({
1409
+ stackedStyle: mobileWidth,
1410
+ desktopStyle: width
1411
+ }),
1412
+ "--column-margin-left-mobile": getMobileStyle({
1413
+ stackedStyle: mobileMarginLeft,
1414
+ desktopStyle: gutterPixels
1415
+ }),
1416
+ "--column-width-tablet": getTabletStyle({
1417
+ stackedStyle: mobileWidth,
1418
+ desktopStyle: width
1419
+ }),
1420
+ "--column-margin-left-tablet": getTabletStyle({
1421
+ stackedStyle: mobileMarginLeft,
1422
+ desktopStyle: gutterPixels
1423
+ })
1424
+ };
1425
+ }
1426
+ function getWidthForBreakpointSize(size) {
1427
+ const breakpointSizes = getSizesForBreakpoints(props.builderContext.content?.meta?.breakpoints || {});
1428
+ return breakpointSizes[size].max;
1429
+ }
1430
+ function columnsStyles() {
1431
+ return `
1432
+ @media (max-width: ${getWidthForBreakpointSize("medium")}px) {
1433
+ .${props.builderBlock.id}-breakpoints {
1434
+ flex-direction: var(--flex-dir-tablet);
1435
+ align-items: stretch;
1436
+ }
1437
+
1438
+ .${props.builderBlock.id}-breakpoints > .builder-column {
1439
+ width: var(--column-width-tablet) !important;
1440
+ margin-left: var(--column-margin-left-tablet) !important;
1441
+ }
1442
+ }
1443
+
1444
+ @media (max-width: ${getWidthForBreakpointSize("small")}px) {
1445
+ .${props.builderBlock.id}-breakpoints {
1446
+ flex-direction: var(--flex-dir);
1447
+ align-items: stretch;
1448
+ }
1449
+
1450
+ .${props.builderBlock.id}-breakpoints > .builder-column {
1451
+ width: var(--column-width-mobile) !important;
1452
+ margin-left: var(--column-margin-left-mobile) !important;
1453
+ }
1454
+ },
1455
+ `;
1456
+ }
1457
+ return (() => {
1458
+ const _el$ = _tmpl$5();
1459
+ spread(_el$, mergeProps({
1460
+ get ["class"]() {
1461
+ return `builder-columns ${props.builderBlock.id}-breakpoints ` + css({
1462
+ display: "flex",
1463
+ lineHeight: "normal"
1464
+ });
1465
+ },
1466
+ get style() {
1467
+ return columnsCssVars();
1468
+ }
1469
+ }, {}), false, true);
1470
+ insert(_el$, createComponent(Show, {
1471
+ when: TARGET !== "reactNative",
1472
+ get children() {
1473
+ return createComponent(inlined_styles_default, {
1474
+ get styles() {
1475
+ return columnsStyles();
1476
+ }
1477
+ });
1478
+ }
1479
+ }), null);
1480
+ insert(_el$, createComponent(For, {
1481
+ get each() {
1482
+ return props.columns;
1483
+ },
1484
+ children: (column, _index) => {
1485
+ const index = _index();
1486
+ return (() => {
1487
+ const _el$2 = _tmpl$5();
1488
+ spread(_el$2, mergeProps({
1489
+ get ["class"]() {
1490
+ return "builder-column " + css({
1491
+ display: "flex",
1492
+ flexDirection: "column",
1493
+ alignItems: "stretch"
1494
+ });
1495
+ },
1496
+ get style() {
1497
+ return columnCssVars(index);
1498
+ }
1499
+ }, {}, {
1500
+ "key": index
1501
+ }), false, true);
1502
+ insert(_el$2, createComponent(blocks_default, {
1503
+ path: `component.options.columns.${index}.blocks`,
1504
+ get parent() {
1505
+ return props.builderBlock.id;
1506
+ },
1507
+ styleProp: {
1508
+ flexGrow: "1"
1509
+ },
1510
+ get context() {
1511
+ return props.builderContext;
1512
+ },
1513
+ get registeredComponents() {
1514
+ return props.builderComponents;
1515
+ },
1516
+ get blocks() {
1517
+ return column.blocks;
1518
+ }
1519
+ }));
1520
+ return _el$2;
1521
+ })();
1522
+ }
1523
+ }), null);
1524
+ return _el$;
1525
+ })();
1526
+ }
1527
+ var columns_default = Columns;
1528
+ var _tmpl$6 = /* @__PURE__ */ template(`<span>`);
1529
+ function FragmentComponent(props) {
1530
+ return (() => {
1531
+ const _el$ = _tmpl$6();
1532
+ insert(_el$, () => props.children);
1533
+ return _el$;
1534
+ })();
1535
+ }
1536
+ var fragment_default = FragmentComponent;
1537
+
1538
+ // src/blocks/image/image.helpers.js
1539
+ function removeProtocol(path) {
1540
+ return path.replace(/http(s)?:/, "");
1541
+ }
1542
+ function updateQueryParam(uri = "", key, value) {
1543
+ const re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
1544
+ const separator = uri.indexOf("?") !== -1 ? "&" : "?";
1545
+ if (uri.match(re)) {
1546
+ return uri.replace(re, "$1" + key + "=" + encodeURIComponent(value) + "$2");
1547
+ }
1548
+ return uri + separator + key + "=" + encodeURIComponent(value);
1549
+ }
1550
+ function getShopifyImageUrl(src, size) {
1551
+ if (!src || !(src == null ? void 0 : src.match(/cdn\.shopify\.com/)) || !size) {
1552
+ return src;
1553
+ }
1554
+ if (size === "master") {
1555
+ return removeProtocol(src);
1556
+ }
1557
+ const match = src.match(/(_\d+x(\d+)?)?(\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\?v=\d+)?)/i);
1558
+ if (match) {
1559
+ const prefix = src.split(match[0]);
1560
+ const suffix = match[3];
1561
+ const useSize = size.match("x") ? size : `${size}x`;
1562
+ return removeProtocol(`${prefix[0]}_${useSize}${suffix}`);
1563
+ }
1564
+ return null;
1565
+ }
1566
+ function getSrcSet(url) {
1567
+ if (!url) {
1568
+ return url;
1569
+ }
1570
+ const sizes = [100, 200, 400, 800, 1200, 1600, 2e3];
1571
+ if (url.match(/builder\.io/)) {
1572
+ let srcUrl = url;
1573
+ const widthInSrc = Number(url.split("?width=")[1]);
1574
+ if (!isNaN(widthInSrc)) {
1575
+ srcUrl = `${srcUrl} ${widthInSrc}w`;
1576
+ }
1577
+ return sizes.filter((size) => size !== widthInSrc).map((size) => `${updateQueryParam(url, "width", size)} ${size}w`).concat([srcUrl]).join(", ");
1578
+ }
1579
+ if (url.match(/cdn\.shopify\.com/)) {
1580
+ return sizes.map((size) => [getShopifyImageUrl(url, `${size}x${size}`), size]).filter(([sizeUrl]) => !!sizeUrl).map(([sizeUrl, size]) => `${sizeUrl} ${size}w`).concat([url]).join(", ");
1581
+ }
1582
+ return url;
1583
+ }
1584
+
1585
+ // src/blocks/image/image.jsx
1586
+ var _tmpl$7 = /* @__PURE__ */ template(`<source type="image/webp">`);
1587
+ var _tmpl$22 = /* @__PURE__ */ template(`<picture><img loading="lazy">`);
1588
+ var _tmpl$32 = /* @__PURE__ */ template(`<div>`);
1589
+ function Image(props) {
1590
+ function srcSetToUse() {
1591
+ const imageToUse = props.image || props.src;
1592
+ const url = imageToUse;
1593
+ if (!url || // We can auto add srcset for cdn.builder.io and shopify
1594
+ // images, otherwise you can supply this prop manually
1595
+ !(url.match(/builder\.io/) || url.match(/cdn\.shopify\.com/))) {
1596
+ return props.srcset;
1597
+ }
1598
+ if (props.srcset && props.image?.includes("builder.io/api/v1/image")) {
1599
+ if (!props.srcset.includes(props.image.split("?")[0])) {
1600
+ console.debug("Removed given srcset");
1601
+ return getSrcSet(url);
1602
+ }
1603
+ } else if (props.image && !props.srcset) {
1604
+ return getSrcSet(url);
1605
+ }
1606
+ return getSrcSet(url);
1607
+ }
1608
+ function webpSrcSet() {
1609
+ if (srcSetToUse()?.match(/builder\.io/) && !props.noWebp) {
1610
+ return srcSetToUse().replace(/\?/g, "?format=webp&");
1611
+ } else {
1612
+ return "";
1613
+ }
1614
+ }
1615
+ function aspectRatioCss() {
1616
+ const aspectRatioStyles = {
1617
+ position: "absolute",
1618
+ height: "100%",
1619
+ width: "100%",
1620
+ left: "0px",
1621
+ top: "0px"
1622
+ };
1623
+ const out = props.aspectRatio ? aspectRatioStyles : void 0;
1624
+ return out;
1625
+ }
1626
+ return [(() => {
1627
+ const _el$ = _tmpl$22(), _el$3 = _el$.firstChild;
1628
+ insert(_el$, createComponent(Show, {
1629
+ get when() {
1630
+ return webpSrcSet();
1631
+ },
1632
+ get children() {
1633
+ const _el$2 = _tmpl$7();
1634
+ effect(() => setAttribute(_el$2, "srcset", webpSrcSet()));
1635
+ return _el$2;
1636
+ }
1637
+ }), _el$3);
1638
+ effect((_p$) => {
1639
+ const _v$ = "builder-image" + (props.className ? " " + props.className : "") + " " + css({
1640
+ opacity: "1",
1641
+ transition: "opacity 0.2s ease-in-out"
1642
+ }), _v$2 = props.altText, _v$3 = props.altText ? "presentation" : void 0, _v$4 = {
1643
+ "object-position": props.backgroundPosition || "center",
1644
+ "object-fit": props.backgroundSize || "cover",
1645
+ ...aspectRatioCss()
1646
+ }, _v$5 = props.image, _v$6 = srcSetToUse(), _v$7 = props.sizes;
1647
+ _v$ !== _p$._v$ && className(_el$3, _p$._v$ = _v$);
1648
+ _v$2 !== _p$._v$2 && setAttribute(_el$3, "alt", _p$._v$2 = _v$2);
1649
+ _v$3 !== _p$._v$3 && setAttribute(_el$3, "role", _p$._v$3 = _v$3);
1650
+ _p$._v$4 = style(_el$3, _v$4, _p$._v$4);
1651
+ _v$5 !== _p$._v$5 && setAttribute(_el$3, "src", _p$._v$5 = _v$5);
1652
+ _v$6 !== _p$._v$6 && setAttribute(_el$3, "srcset", _p$._v$6 = _v$6);
1653
+ _v$7 !== _p$._v$7 && setAttribute(_el$3, "sizes", _p$._v$7 = _v$7);
1654
+ return _p$;
1655
+ }, {
1656
+ _v$: void 0,
1657
+ _v$2: void 0,
1658
+ _v$3: void 0,
1659
+ _v$4: void 0,
1660
+ _v$5: void 0,
1661
+ _v$6: void 0,
1662
+ _v$7: void 0
1663
+ });
1664
+ return _el$;
1665
+ })(), createComponent(Show, {
1666
+ get when() {
1667
+ return props.aspectRatio && !(props.builderBlock?.children?.length && props.fitContent);
1668
+ },
1669
+ get children() {
1670
+ const _el$4 = _tmpl$32();
1671
+ effect((_p$) => {
1672
+ const _v$8 = "builder-image-sizer " + css({
1673
+ width: "100%",
1674
+ pointerEvents: "none",
1675
+ fontSize: "0"
1676
+ }), _v$9 = props.aspectRatio * 100 + "%";
1677
+ _v$8 !== _p$._v$8 && className(_el$4, _p$._v$8 = _v$8);
1678
+ _v$9 !== _p$._v$9 && ((_p$._v$9 = _v$9) != null ? _el$4.style.setProperty("padding-top", _v$9) : _el$4.style.removeProperty("padding-top"));
1679
+ return _p$;
1680
+ }, {
1681
+ _v$8: void 0,
1682
+ _v$9: void 0
1683
+ });
1684
+ return _el$4;
1685
+ }
1686
+ }), createComponent(Show, {
1687
+ get when() {
1688
+ return props.builderBlock?.children?.length && props.fitContent;
1689
+ },
1690
+ get children() {
1691
+ return props.children;
1692
+ }
1693
+ }), createComponent(Show, {
1694
+ get when() {
1695
+ return !props.fitContent && props.children;
1696
+ },
1697
+ get children() {
1698
+ const _el$5 = _tmpl$32();
1699
+ insert(_el$5, () => props.children);
1700
+ effect(() => className(_el$5, css({
1701
+ display: "flex",
1702
+ flexDirection: "column",
1703
+ alignItems: "stretch",
1704
+ position: "absolute",
1705
+ top: "0",
1706
+ left: "0",
1707
+ width: "100%",
1708
+ height: "100%"
1709
+ })));
1710
+ return _el$5;
1711
+ }
1712
+ })];
1713
+ }
1714
+ var image_default = Image;
1715
+ var _tmpl$8 = /* @__PURE__ */ template(`<section>`);
1716
+ function SectionComponent(props) {
1717
+ return (() => {
1718
+ const _el$ = _tmpl$8();
1719
+ spread(_el$, mergeProps({}, () => props.attributes, {
1720
+ get style() {
1721
+ return {
1722
+ width: "100%",
1723
+ "align-self": "stretch",
1724
+ "flex-grow": 1,
1725
+ "box-sizing": "border-box",
1726
+ "max-width": props.maxWidth || 1200,
1727
+ display: "flex",
1728
+ "flex-direction": "column",
1729
+ "align-items": "stretch",
1730
+ "margin-left": "auto",
1731
+ "margin-right": "auto"
1732
+ };
1733
+ }
1734
+ }), false, true);
1735
+ insert(_el$, () => props.children);
1736
+ return _el$;
1737
+ })();
1738
+ }
1739
+ var section_default = SectionComponent;
1740
+
1741
+ // src/components/content-variants/helpers.js
1742
+ var __defProp8 = Object.defineProperty;
1743
+ var __defProps6 = Object.defineProperties;
1744
+ var __getOwnPropDescs6 = Object.getOwnPropertyDescriptors;
1745
+ var __getOwnPropSymbols8 = Object.getOwnPropertySymbols;
1746
+ var __hasOwnProp8 = Object.prototype.hasOwnProperty;
1747
+ var __propIsEnum8 = Object.prototype.propertyIsEnumerable;
1748
+ var __defNormalProp8 = (obj, key, value) => key in obj ? __defProp8(obj, key, {
1749
+ enumerable: true,
1750
+ configurable: true,
1751
+ writable: true,
1752
+ value
1753
+ }) : obj[key] = value;
1754
+ var __spreadValues8 = (a, b) => {
1755
+ for (var prop in b || (b = {}))
1756
+ if (__hasOwnProp8.call(b, prop))
1757
+ __defNormalProp8(a, prop, b[prop]);
1758
+ if (__getOwnPropSymbols8)
1759
+ for (var prop of __getOwnPropSymbols8(b)) {
1760
+ if (__propIsEnum8.call(b, prop))
1761
+ __defNormalProp8(a, prop, b[prop]);
1762
+ }
1763
+ return a;
1764
+ };
1765
+ var __spreadProps6 = (a, b) => __defProps6(a, __getOwnPropDescs6(b));
1766
+ var getVariants = (content) => Object.values((content == null ? void 0 : content.variations) || {}).map((variant) => __spreadProps6(__spreadValues8({}, variant), {
1767
+ testVariationId: variant.id,
1768
+ id: content == null ? void 0 : content.id
1769
+ }));
1770
+ var checkShouldRunVariants = ({
1771
+ canTrack,
1772
+ content
1773
+ }) => {
1774
+ const hasVariants = getVariants(content).length > 0;
1775
+ if (TARGET === "reactNative")
1776
+ return false;
1777
+ if (!hasVariants)
1778
+ return false;
1779
+ if (!canTrack)
1780
+ return false;
1781
+ if (TARGET === "vue2" || TARGET === "vue3")
1782
+ return true;
1783
+ if (isBrowser())
1784
+ return false;
1785
+ return true;
1786
+ };
1787
+ function bldrAbTest(contentId, variants, isHydrationTarget2) {
1788
+ var _a;
1789
+ function getAndSetVariantId2() {
1790
+ function setCookie2(name, value, days) {
1791
+ let expires = "";
1792
+ if (days) {
1793
+ const date = /* @__PURE__ */ new Date();
1794
+ date.setTime(date.getTime() + days * 24 * 60 * 60 * 1e3);
1795
+ expires = "; expires=" + date.toUTCString();
1796
+ }
1797
+ document.cookie = name + "=" + (value || "") + expires + "; path=/; Secure; SameSite=None";
1798
+ }
1799
+ function getCookie2(name) {
1800
+ const nameEQ = name + "=";
1801
+ const ca = document.cookie.split(";");
1802
+ for (let i = 0; i < ca.length; i++) {
1803
+ let c = ca[i];
1804
+ while (c.charAt(0) === " ")
1805
+ c = c.substring(1, c.length);
1806
+ if (c.indexOf(nameEQ) === 0)
1807
+ return c.substring(nameEQ.length, c.length);
1808
+ }
1809
+ return null;
1810
+ }
1811
+ const cookieName = `builder.tests.${contentId}`;
1812
+ const variantInCookie = getCookie2(cookieName);
1813
+ const availableIDs = variants.map((vr) => vr.id).concat(contentId);
1814
+ if (variantInCookie && availableIDs.includes(variantInCookie)) {
1815
+ return variantInCookie;
1816
+ }
1817
+ let n = 0;
1818
+ const random = Math.random();
1819
+ for (let i = 0; i < variants.length; i++) {
1820
+ const variant = variants[i];
1821
+ const testRatio = variant.testRatio;
1822
+ n += testRatio;
1823
+ if (random < n) {
1824
+ setCookie2(cookieName, variant.id);
1825
+ return variant.id;
1826
+ }
1827
+ }
1828
+ setCookie2(cookieName, contentId);
1829
+ return contentId;
1830
+ }
1831
+ const winningVariantId = getAndSetVariantId2();
1832
+ const styleEl = (_a = document.currentScript) == null ? void 0 : _a.previousElementSibling;
1833
+ if (isHydrationTarget2) {
1834
+ styleEl.remove();
1835
+ const thisScriptEl = document.currentScript;
1836
+ thisScriptEl == null ? void 0 : thisScriptEl.remove();
1837
+ } else {
1838
+ const newStyleStr = variants.concat({
1839
+ id: contentId
1840
+ }).filter((variant) => variant.id !== winningVariantId).map((value) => {
1841
+ return `.variant-${value.id} { display: none; }
1842
+ `;
1843
+ }).join("");
1844
+ styleEl.innerHTML = newStyleStr;
1845
+ }
1846
+ }
1847
+ function bldrCntntScrpt(variantContentId, defaultContentId, isHydrationTarget2) {
1848
+ var _a;
1849
+ if (!navigator.cookieEnabled) {
1850
+ return;
1851
+ }
1852
+ function getCookie2(name) {
1853
+ const nameEQ = name + "=";
1854
+ const ca = document.cookie.split(";");
1855
+ for (let i = 0; i < ca.length; i++) {
1856
+ let c = ca[i];
1857
+ while (c.charAt(0) === " ")
1858
+ c = c.substring(1, c.length);
1859
+ if (c.indexOf(nameEQ) === 0)
1860
+ return c.substring(nameEQ.length, c.length);
1861
+ }
1862
+ return null;
1863
+ }
1864
+ const cookieName = `builder.tests.${defaultContentId}`;
1865
+ const variantId = getCookie2(cookieName);
1866
+ const parentDiv = (_a = document.currentScript) == null ? void 0 : _a.parentElement;
1867
+ const variantIsDefaultContent = variantContentId === defaultContentId;
1868
+ if (variantId === variantContentId) {
1869
+ if (variantIsDefaultContent) {
1870
+ return;
1871
+ }
1872
+ parentDiv == null ? void 0 : parentDiv.removeAttribute("hidden");
1873
+ parentDiv == null ? void 0 : parentDiv.removeAttribute("aria-hidden");
1874
+ } else {
1875
+ if (variantIsDefaultContent) {
1876
+ if (isHydrationTarget2) {
1877
+ parentDiv == null ? void 0 : parentDiv.remove();
1878
+ } else {
1879
+ parentDiv == null ? void 0 : parentDiv.setAttribute("hidden", "true");
1880
+ parentDiv == null ? void 0 : parentDiv.setAttribute("aria-hidden", "true");
1881
+ }
1882
+ }
1883
+ return;
1884
+ }
1885
+ return;
1886
+ }
1887
+ var getIsHydrationTarget = (target) => target === "react" || target === "reactNative";
1888
+ var isHydrationTarget = getIsHydrationTarget(TARGET);
1889
+ var AB_TEST_FN_NAME = "builderIoAbTest";
1890
+ var CONTENT_FN_NAME = "builderIoRenderContent";
1891
+ var getScriptString = () => {
1892
+ const fnStr = bldrAbTest.toString().replace(/\s+/g, " ");
1893
+ const fnStr2 = bldrCntntScrpt.toString().replace(/\s+/g, " ");
1894
+ return `
1895
+ window.${AB_TEST_FN_NAME} = ${fnStr}
1896
+ window.${CONTENT_FN_NAME} = ${fnStr2}
1897
+ `;
1898
+ };
1899
+ var getVariantsScriptString = (variants, contentId) => {
1900
+ return `
1901
+ window.${AB_TEST_FN_NAME}("${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget})`;
1902
+ };
1903
+ var getRenderContentScriptString = ({
1904
+ contentId,
1905
+ variationId
1906
+ }) => {
1907
+ return `
1908
+ window.${CONTENT_FN_NAME}("${variationId}", "${contentId}", ${isHydrationTarget})`;
1909
+ };
1910
+
1911
+ // src/blocks/button/component-info.js
1912
+ var componentInfo = {
1913
+ name: "Core:Button",
1914
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F81a15681c3e74df09677dfc57a615b13",
1915
+ defaultStyles: {
1916
+ appearance: "none",
1917
+ paddingTop: "15px",
1918
+ paddingBottom: "15px",
1919
+ paddingLeft: "25px",
1920
+ paddingRight: "25px",
1921
+ backgroundColor: "#000000",
1922
+ color: "white",
1923
+ borderRadius: "4px",
1924
+ textAlign: "center",
1925
+ cursor: "pointer"
1926
+ },
1927
+ inputs: [{
1928
+ name: "text",
1929
+ type: "text",
1930
+ defaultValue: "Click me!",
1931
+ bubble: true
1932
+ }, {
1933
+ name: "link",
1934
+ type: "url",
1935
+ bubble: true
1936
+ }, {
1937
+ name: "openLinkInNewTab",
1938
+ type: "boolean",
1939
+ defaultValue: false,
1940
+ friendlyName: "Open link in new tab"
1941
+ }],
1942
+ static: true,
1943
+ noWrap: true
1944
+ };
1945
+
1946
+ // src/blocks/columns/component-info.js
1947
+ var componentInfo2 = {
1948
+ name: "Columns",
1949
+ isRSC: true,
1950
+ inputs: [{
1951
+ name: "columns",
1952
+ type: "array",
1953
+ broadcast: true,
1954
+ subFields: [{
1955
+ name: "blocks",
1956
+ type: "array",
1957
+ hideFromUI: true,
1958
+ defaultValue: [{
1959
+ "@type": "@builder.io/sdk:Element",
1960
+ responsiveStyles: {
1961
+ large: {
1962
+ display: "flex",
1963
+ flexDirection: "column",
1964
+ alignItems: "stretch",
1965
+ flexShrink: "0",
1966
+ position: "relative",
1967
+ marginTop: "30px",
1968
+ textAlign: "center",
1969
+ lineHeight: "normal",
1970
+ height: "auto",
1971
+ minHeight: "20px",
1972
+ minWidth: "20px",
1973
+ overflow: "hidden"
1974
+ }
1975
+ },
1976
+ component: {
1977
+ name: "Image",
1978
+ options: {
1979
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
1980
+ backgroundPosition: "center",
1981
+ backgroundSize: "cover",
1982
+ aspectRatio: 0.7004048582995948
1983
+ }
1984
+ }
1985
+ }, {
1986
+ "@type": "@builder.io/sdk:Element",
1987
+ responsiveStyles: {
1988
+ large: {
1989
+ display: "flex",
1990
+ flexDirection: "column",
1991
+ alignItems: "stretch",
1992
+ flexShrink: "0",
1993
+ position: "relative",
1994
+ marginTop: "30px",
1995
+ textAlign: "center",
1996
+ lineHeight: "normal",
1997
+ height: "auto"
1998
+ }
1999
+ },
2000
+ component: {
2001
+ name: "Text",
2002
+ options: {
2003
+ text: "<p>Enter some text...</p>"
2004
+ }
2005
+ }
2006
+ }]
2007
+ }, {
2008
+ name: "width",
2009
+ type: "number",
2010
+ hideFromUI: true,
2011
+ helperText: "Width %, e.g. set to 50 to fill half of the space"
2012
+ }, {
2013
+ name: "link",
2014
+ type: "url",
2015
+ helperText: "Optionally set a url that clicking this column will link to"
2016
+ }],
2017
+ defaultValue: [{
2018
+ blocks: [{
2019
+ "@type": "@builder.io/sdk:Element",
2020
+ responsiveStyles: {
2021
+ large: {
2022
+ display: "flex",
2023
+ flexDirection: "column",
2024
+ alignItems: "stretch",
2025
+ flexShrink: "0",
2026
+ position: "relative",
2027
+ marginTop: "30px",
2028
+ textAlign: "center",
2029
+ lineHeight: "normal",
2030
+ height: "auto",
2031
+ minHeight: "20px",
2032
+ minWidth: "20px",
2033
+ overflow: "hidden"
2034
+ }
2035
+ },
2036
+ component: {
2037
+ name: "Image",
2038
+ options: {
2039
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2040
+ backgroundPosition: "center",
2041
+ backgroundSize: "cover",
2042
+ aspectRatio: 0.7004048582995948
2043
+ }
2044
+ }
2045
+ }, {
2046
+ "@type": "@builder.io/sdk:Element",
2047
+ responsiveStyles: {
2048
+ large: {
2049
+ display: "flex",
2050
+ flexDirection: "column",
2051
+ alignItems: "stretch",
2052
+ flexShrink: "0",
2053
+ position: "relative",
2054
+ marginTop: "30px",
2055
+ textAlign: "center",
2056
+ lineHeight: "normal",
2057
+ height: "auto"
2058
+ }
2059
+ },
2060
+ component: {
2061
+ name: "Text",
2062
+ options: {
2063
+ text: "<p>Enter some text...</p>"
2064
+ }
2065
+ }
2066
+ }]
2067
+ }, {
2068
+ blocks: [{
2069
+ "@type": "@builder.io/sdk:Element",
2070
+ responsiveStyles: {
2071
+ large: {
2072
+ display: "flex",
2073
+ flexDirection: "column",
2074
+ alignItems: "stretch",
2075
+ flexShrink: "0",
2076
+ position: "relative",
2077
+ marginTop: "30px",
2078
+ textAlign: "center",
2079
+ lineHeight: "normal",
2080
+ height: "auto",
2081
+ minHeight: "20px",
2082
+ minWidth: "20px",
2083
+ overflow: "hidden"
2084
+ }
2085
+ },
2086
+ component: {
2087
+ name: "Image",
2088
+ options: {
2089
+ image: "https://builder.io/api/v1/image/assets%2Fpwgjf0RoYWbdnJSbpBAjXNRMe9F2%2Ffb27a7c790324294af8be1c35fe30f4d",
2090
+ backgroundPosition: "center",
2091
+ backgroundSize: "cover",
2092
+ aspectRatio: 0.7004048582995948
2093
+ }
2094
+ }
2095
+ }, {
2096
+ "@type": "@builder.io/sdk:Element",
2097
+ responsiveStyles: {
2098
+ large: {
2099
+ display: "flex",
2100
+ flexDirection: "column",
2101
+ alignItems: "stretch",
2102
+ flexShrink: "0",
2103
+ position: "relative",
2104
+ marginTop: "30px",
2105
+ textAlign: "center",
2106
+ lineHeight: "normal",
2107
+ height: "auto"
2108
+ }
2109
+ },
2110
+ component: {
2111
+ name: "Text",
2112
+ options: {
2113
+ text: "<p>Enter some text...</p>"
2114
+ }
2115
+ }
2116
+ }]
2117
+ }],
2118
+ onChange: (options) => {
2119
+ function clearWidths() {
2120
+ columns.forEach((col) => {
2121
+ col.delete("width");
2122
+ });
2123
+ }
2124
+ const columns = options.get("columns");
2125
+ if (Array.isArray(columns)) {
2126
+ const containsColumnWithWidth = !!columns.find((col) => col.get("width"));
2127
+ if (containsColumnWithWidth) {
2128
+ const containsColumnWithoutWidth = !!columns.find((col) => !col.get("width"));
2129
+ if (containsColumnWithoutWidth) {
2130
+ clearWidths();
2131
+ } else {
2132
+ const sumWidths = columns.reduce((memo, col) => {
2133
+ return memo + col.get("width");
2134
+ }, 0);
2135
+ const widthsDontAddUp = sumWidths !== 100;
2136
+ if (widthsDontAddUp) {
2137
+ clearWidths();
2138
+ }
2139
+ }
2140
+ }
2141
+ }
2142
+ }
2143
+ }, {
2144
+ name: "space",
2145
+ type: "number",
2146
+ defaultValue: 20,
2147
+ helperText: "Size of gap between columns",
2148
+ advanced: true
2149
+ }, {
2150
+ name: "stackColumnsAt",
2151
+ type: "string",
2152
+ defaultValue: "tablet",
2153
+ helperText: "Convert horizontal columns to vertical at what device size",
2154
+ enum: ["tablet", "mobile", "never"],
2155
+ advanced: true
2156
+ }, {
2157
+ name: "reverseColumnsWhenStacked",
2158
+ type: "boolean",
2159
+ defaultValue: false,
2160
+ helperText: "When stacking columns for mobile devices, reverse the ordering",
2161
+ advanced: true
2162
+ }]
2163
+ };
2164
+
2165
+ // src/blocks/fragment/component-info.js
2166
+ var componentInfo3 = {
2167
+ name: "Fragment",
2168
+ static: true,
2169
+ hidden: true,
2170
+ canHaveChildren: true,
2171
+ noWrap: true
2172
+ };
2173
+
2174
+ // src/blocks/image/component-info.js
2175
+ var componentInfo4 = {
2176
+ name: "Image",
2177
+ static: true,
2178
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
2179
+ defaultStyles: {
2180
+ position: "relative",
2181
+ minHeight: "20px",
2182
+ minWidth: "20px",
2183
+ overflow: "hidden"
2184
+ },
2185
+ canHaveChildren: true,
2186
+ inputs: [{
2187
+ name: "image",
2188
+ type: "file",
2189
+ bubble: true,
2190
+ allowedFileTypes: ["jpeg", "jpg", "png", "svg"],
2191
+ required: true,
2192
+ defaultValue: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F72c80f114dc149019051b6852a9e3b7a",
2193
+ onChange: (options) => {
2194
+ const DEFAULT_ASPECT_RATIO = 0.7041;
2195
+ options.delete("srcset");
2196
+ options.delete("noWebp");
2197
+ function loadImage(url, timeout = 6e4) {
2198
+ return new Promise((resolve, reject) => {
2199
+ const img = document.createElement("img");
2200
+ let loaded = false;
2201
+ img.onload = () => {
2202
+ loaded = true;
2203
+ resolve(img);
2204
+ };
2205
+ img.addEventListener("error", (event) => {
2206
+ console.warn("Image load failed", event.error);
2207
+ reject(event.error);
2208
+ });
2209
+ img.src = url;
2210
+ setTimeout(() => {
2211
+ if (!loaded) {
2212
+ reject(new Error("Image load timed out"));
2213
+ }
2214
+ }, timeout);
2215
+ });
2216
+ }
2217
+ function round2(num) {
2218
+ return Math.round(num * 1e3) / 1e3;
2219
+ }
2220
+ const value = options.get("image");
2221
+ const aspectRatio = options.get("aspectRatio");
2222
+ fetch(value).then((res) => res.blob()).then((blob) => {
2223
+ if (blob.type.includes("svg")) {
2224
+ options.set("noWebp", true);
2225
+ }
2226
+ });
2227
+ if (value && (!aspectRatio || aspectRatio === DEFAULT_ASPECT_RATIO)) {
2228
+ return loadImage(value).then((img) => {
2229
+ const possiblyUpdatedAspectRatio = options.get("aspectRatio");
2230
+ if (options.get("image") === value && (!possiblyUpdatedAspectRatio || possiblyUpdatedAspectRatio === DEFAULT_ASPECT_RATIO)) {
2231
+ if (img.width && img.height) {
2232
+ options.set("aspectRatio", round2(img.height / img.width));
2233
+ options.set("height", img.height);
2234
+ options.set("width", img.width);
2235
+ }
2236
+ }
2237
+ });
2238
+ }
2239
+ }
2240
+ }, {
2241
+ name: "backgroundSize",
2242
+ type: "text",
2243
+ defaultValue: "cover",
2244
+ enum: [{
2245
+ label: "contain",
2246
+ value: "contain",
2247
+ helperText: "The image should never get cropped"
2248
+ }, {
2249
+ label: "cover",
2250
+ value: "cover",
2251
+ helperText: "The image should fill it's box, cropping when needed"
2252
+ }]
2253
+ }, {
2254
+ name: "backgroundPosition",
2255
+ type: "text",
2256
+ defaultValue: "center",
2257
+ enum: ["center", "top", "left", "right", "bottom", "top left", "top right", "bottom left", "bottom right"]
2258
+ }, {
2259
+ name: "altText",
2260
+ type: "string",
2261
+ helperText: "Text to display when the user has images off"
2262
+ }, {
2263
+ name: "height",
2264
+ type: "number",
2265
+ hideFromUI: true
2266
+ }, {
2267
+ name: "width",
2268
+ type: "number",
2269
+ hideFromUI: true
2270
+ }, {
2271
+ name: "sizes",
2272
+ type: "string",
2273
+ hideFromUI: true
2274
+ }, {
2275
+ name: "srcset",
2276
+ type: "string",
2277
+ hideFromUI: true
2278
+ }, {
2279
+ name: "lazy",
2280
+ type: "boolean",
2281
+ defaultValue: true,
2282
+ hideFromUI: true
2283
+ }, {
2284
+ name: "fitContent",
2285
+ type: "boolean",
2286
+ helperText: "When child blocks are provided, fit to them instead of using the image's aspect ratio",
2287
+ defaultValue: true
2288
+ }, {
2289
+ name: "aspectRatio",
2290
+ type: "number",
2291
+ helperText: "This is the ratio of height/width, e.g. set to 1.5 for a 300px wide and 200px tall photo. Set to 0 to not force the image to maintain it's aspect ratio",
2292
+ advanced: true,
2293
+ defaultValue: 0.7041
2294
+ }]
2295
+ };
2296
+
2297
+ // src/blocks/section/component-info.js
2298
+ var componentInfo5 = {
2299
+ name: "Core:Section",
2300
+ static: true,
2301
+ image: "https://cdn.builder.io/api/v1/image/assets%2FIsxPKMo2gPRRKeakUztj1D6uqed2%2F682efef23ace49afac61748dd305c70a",
2302
+ inputs: [{
2303
+ name: "maxWidth",
2304
+ type: "number",
2305
+ defaultValue: 1200
2306
+ }, {
2307
+ name: "lazyLoad",
2308
+ type: "boolean",
2309
+ defaultValue: false,
2310
+ advanced: true,
2311
+ description: "Only render this section when in view"
2312
+ }],
2313
+ defaultStyles: {
2314
+ paddingLeft: "20px",
2315
+ paddingRight: "20px",
2316
+ paddingTop: "50px",
2317
+ paddingBottom: "50px",
2318
+ marginTop: "0px",
2319
+ width: "100vw",
2320
+ marginLeft: "calc(50% - 50vw)"
2321
+ },
2322
+ canHaveChildren: true,
2323
+ defaultChildren: [{
2324
+ "@type": "@builder.io/sdk:Element",
2325
+ responsiveStyles: {
2326
+ large: {
2327
+ textAlign: "center"
2328
+ }
2329
+ },
2330
+ component: {
2331
+ name: "Text",
2332
+ options: {
2333
+ text: "<p><b>I am a section! My content keeps from getting too wide, so that it's easy to read even on big screens.</b></p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur</p>"
2334
+ }
2335
+ }
2336
+ }]
2337
+ };
2338
+
2339
+ // src/blocks/symbol/component-info.js
2340
+ var componentInfo6 = {
2341
+ name: "Symbol",
2342
+ noWrap: true,
2343
+ static: true,
2344
+ isRSC: true,
2345
+ inputs: [{
2346
+ name: "symbol",
2347
+ type: "uiSymbol"
2348
+ }, {
2349
+ name: "dataOnly",
2350
+ helperText: "Make this a data symbol that doesn't display any UI",
2351
+ type: "boolean",
2352
+ defaultValue: false,
2353
+ advanced: true,
2354
+ hideFromUI: true
2355
+ }, {
2356
+ name: "inheritState",
2357
+ helperText: "Inherit the parent component state and data",
2358
+ type: "boolean",
2359
+ defaultValue: false,
2360
+ advanced: true
2361
+ }, {
2362
+ name: "renderToLiquid",
2363
+ helperText: "Render this symbols contents to liquid. Turn off to fetch with javascript and use custom targeting",
2364
+ type: "boolean",
2365
+ defaultValue: false,
2366
+ advanced: true,
2367
+ hideFromUI: true
2368
+ }, {
2369
+ name: "useChildren",
2370
+ hideFromUI: true,
2371
+ type: "boolean"
2372
+ }]
2373
+ };
2374
+
2375
+ // src/blocks/text/component-info.js
2376
+ var componentInfo7 = {
2377
+ name: "Text",
2378
+ static: true,
2379
+ isRSC: true,
2380
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-text_fields-24px%20(1).svg?alt=media&token=12177b73-0ee3-42ca-98c6-0dd003de1929",
2381
+ inputs: [{
2382
+ name: "text",
2383
+ type: "html",
2384
+ required: true,
2385
+ autoFocus: true,
2386
+ bubble: true,
2387
+ defaultValue: "Enter some text..."
2388
+ }],
2389
+ defaultStyles: {
2390
+ lineHeight: "normal",
2391
+ height: "auto",
2392
+ textAlign: "center"
2393
+ }
2394
+ };
2395
+ var _tmpl$9 = /* @__PURE__ */ template(`<span class="builder-text">`);
2396
+ function Text(props) {
2397
+ return (() => {
2398
+ const _el$ = _tmpl$9();
2399
+ _el$.style.setProperty("outline", "none");
2400
+ effect(() => _el$.innerHTML = props.text?.toString() || "");
2401
+ return _el$;
2402
+ })();
2403
+ }
2404
+ var text_default = Text;
2405
+
2406
+ // src/blocks/video/component-info.js
2407
+ var componentInfo8 = {
2408
+ name: "Video",
2409
+ canHaveChildren: true,
2410
+ defaultStyles: {
2411
+ minHeight: "20px",
2412
+ minWidth: "20px"
2413
+ },
2414
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-videocam-24px%20(1).svg?alt=media&token=49a84e4a-b20e-4977-a650-047f986874bb",
2415
+ inputs: [{
2416
+ name: "video",
2417
+ type: "file",
2418
+ allowedFileTypes: ["mp4"],
2419
+ bubble: true,
2420
+ defaultValue: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/assets%2FKQlEmWDxA0coC3PK6UvkrjwkIGI2%2F28cb070609f546cdbe5efa20e931aa4b?alt=media&token=912e9551-7a7c-4dfb-86b6-3da1537d1a7f",
2421
+ required: true
2422
+ }, {
2423
+ name: "posterImage",
2424
+ type: "file",
2425
+ allowedFileTypes: ["jpeg", "png"],
2426
+ helperText: "Image to show before the video plays"
2427
+ }, {
2428
+ name: "autoPlay",
2429
+ type: "boolean",
2430
+ defaultValue: true
2431
+ }, {
2432
+ name: "controls",
2433
+ type: "boolean",
2434
+ defaultValue: false
2435
+ }, {
2436
+ name: "muted",
2437
+ type: "boolean",
2438
+ defaultValue: true
2439
+ }, {
2440
+ name: "loop",
2441
+ type: "boolean",
2442
+ defaultValue: true
2443
+ }, {
2444
+ name: "playsInline",
2445
+ type: "boolean",
2446
+ defaultValue: true
2447
+ }, {
2448
+ name: "fit",
2449
+ type: "text",
2450
+ defaultValue: "cover",
2451
+ enum: ["contain", "cover", "fill", "auto"]
2452
+ }, {
2453
+ name: "preload",
2454
+ type: "text",
2455
+ defaultValue: "metadata",
2456
+ enum: ["auto", "metadata", "none"]
2457
+ }, {
2458
+ name: "fitContent",
2459
+ type: "boolean",
2460
+ helperText: "When child blocks are provided, fit to them instead of using the aspect ratio",
2461
+ defaultValue: true,
2462
+ advanced: true
2463
+ }, {
2464
+ name: "position",
2465
+ type: "text",
2466
+ defaultValue: "center",
2467
+ enum: ["center", "top", "left", "right", "bottom", "top left", "top right", "bottom left", "bottom right"]
2468
+ }, {
2469
+ name: "height",
2470
+ type: "number",
2471
+ advanced: true
2472
+ }, {
2473
+ name: "width",
2474
+ type: "number",
2475
+ advanced: true
2476
+ }, {
2477
+ name: "aspectRatio",
2478
+ type: "number",
2479
+ advanced: true,
2480
+ defaultValue: 0.7004048582995948
2481
+ }, {
2482
+ name: "lazyLoad",
2483
+ type: "boolean",
2484
+ helperText: 'Load this video "lazily" - as in only when a user scrolls near the video. Recommended for optmized performance and bandwidth consumption',
2485
+ defaultValue: true,
2486
+ advanced: true
2487
+ }]
2488
+ };
2489
+ var _tmpl$10 = /* @__PURE__ */ template(`<video>`);
2490
+ function Video(props) {
2491
+ function videoProps() {
2492
+ return {
2493
+ ...props.autoPlay === true ? {
2494
+ autoPlay: true
2495
+ } : {},
2496
+ ...props.muted === true ? {
2497
+ muted: true
2498
+ } : {},
2499
+ ...props.controls === true ? {
2500
+ controls: true
2501
+ } : {},
2502
+ ...props.loop === true ? {
2503
+ loop: true
2504
+ } : {},
2505
+ ...props.playsInline === true ? {
2506
+ playsInline: true
2507
+ } : {}
2508
+ };
2509
+ }
2510
+ function spreadProps() {
2511
+ return {
2512
+ ...props.attributes,
2513
+ ...videoProps()
2514
+ };
2515
+ }
2516
+ return (() => {
2517
+ const _el$ = _tmpl$10();
2518
+ spread(_el$, mergeProps(spreadProps, {
2519
+ get preload() {
2520
+ return props.preload || "metadata";
2521
+ },
2522
+ get style() {
2523
+ return {
2524
+ width: "100%",
2525
+ height: "100%",
2526
+ ...props.attributes?.style,
2527
+ "object-fit": props.fit,
2528
+ "object-position": props.position,
2529
+ // Hack to get object fit to work as expected and
2530
+ // not have the video overflow
2531
+ "border-radius": 1
2532
+ };
2533
+ },
2534
+ get src() {
2535
+ return props.video || "no-src";
2536
+ },
2537
+ get poster() {
2538
+ return props.posterImage;
2539
+ }
2540
+ }), false, false);
2541
+ return _el$;
2542
+ })();
2543
+ }
2544
+ var video_default = Video;
2545
+
2546
+ // src/blocks/embed/component-info.js
2547
+ var componentInfo9 = {
2548
+ name: "Embed",
2549
+ static: true,
2550
+ inputs: [{
2551
+ name: "url",
2552
+ type: "url",
2553
+ required: true,
2554
+ defaultValue: "",
2555
+ helperText: "e.g. enter a youtube url, google map, etc",
2556
+ onChange: (options) => {
2557
+ const url = options.get("url");
2558
+ if (url) {
2559
+ options.set("content", "Loading...");
2560
+ const apiKey = "ae0e60e78201a3f2b0de4b";
2561
+ return fetch(`https://iframe.ly/api/iframely?url=${url}&api_key=${apiKey}`).then((res) => res.json()).then((data) => {
2562
+ if (options.get("url") === url) {
2563
+ if (data.html) {
2564
+ options.set("content", data.html);
2565
+ } else {
2566
+ options.set("content", "Invalid url, please try another");
2567
+ }
2568
+ }
2569
+ }).catch((_err) => {
2570
+ options.set("content", "There was an error embedding this URL, please try again or another URL");
2571
+ });
2572
+ } else {
2573
+ options.delete("content");
2574
+ }
2575
+ }
2576
+ }, {
2577
+ name: "content",
2578
+ type: "html",
2579
+ defaultValue: '<div style="padding: 20px; text-align: center">(Choose an embed URL)<div>',
2580
+ hideFromUI: true
2581
+ }]
2582
+ };
2583
+
2584
+ // src/blocks/embed/helpers.js
2585
+ var SCRIPT_MIME_TYPES = ["text/javascript", "application/javascript", "application/ecmascript"];
2586
+ var isJsScript = (script) => SCRIPT_MIME_TYPES.includes(script.type);
2587
+
2588
+ // src/blocks/embed/embed.jsx
2589
+ var _tmpl$11 = /* @__PURE__ */ template(`<div class="builder-embed">`);
2590
+ function Embed(props) {
2591
+ const [scriptsInserted, setScriptsInserted] = createSignal([]);
2592
+ const [scriptsRun, setScriptsRun] = createSignal([]);
2593
+ const [ranInitFn, setRanInitFn] = createSignal(false);
2594
+ function findAndRunScripts() {
2595
+ if (!elem || !elem.getElementsByTagName)
2596
+ return;
2597
+ const scripts = elem.getElementsByTagName("script");
2598
+ for (let i = 0; i < scripts.length; i++) {
2599
+ const script = scripts[i];
2600
+ if (script.src && !scriptsInserted().includes(script.src)) {
2601
+ scriptsInserted().push(script.src);
2602
+ const newScript = document.createElement("script");
2603
+ newScript.async = true;
2604
+ newScript.src = script.src;
2605
+ document.head.appendChild(newScript);
2606
+ } else if (isJsScript(script) && !scriptsRun().includes(script.innerText)) {
2607
+ try {
2608
+ scriptsRun().push(script.innerText);
2609
+ new Function(script.innerText)();
2610
+ } catch (error) {
2611
+ console.warn("`Embed`: Error running script:", error);
2612
+ }
2613
+ }
2614
+ }
2615
+ }
2616
+ let elem;
2617
+ function onUpdateFn_0() {
2618
+ if (elem && !ranInitFn()) {
2619
+ setRanInitFn(true);
2620
+ findAndRunScripts();
2621
+ }
2622
+ }
2623
+ createEffect(on(() => [elem, ranInitFn()], onUpdateFn_0));
2624
+ return (() => {
2625
+ const _el$ = _tmpl$11();
2626
+ const _ref$ = elem;
2627
+ typeof _ref$ === "function" ? use(_ref$, _el$) : elem = _el$;
2628
+ effect(() => _el$.innerHTML = props.content);
2629
+ return _el$;
2630
+ })();
2631
+ }
2632
+ var embed_default = Embed;
2633
+ var _tmpl$12 = /* @__PURE__ */ template(`<img>`);
2634
+ function ImgComponent(props) {
2635
+ return (() => {
2636
+ const _el$ = _tmpl$12();
2637
+ spread(_el$, mergeProps({
2638
+ get style() {
2639
+ return {
2640
+ "object-fit": props.backgroundSize || "cover",
2641
+ "object-position": props.backgroundPosition || "center"
2642
+ };
2643
+ },
2644
+ get key() {
2645
+ return isEditing() && props.imgSrc || "default-key";
2646
+ },
2647
+ get alt() {
2648
+ return props.altText;
2649
+ },
2650
+ get src() {
2651
+ return props.imgSrc || props.image;
2652
+ }
2653
+ }, {}, () => props.attributes), false, false);
2654
+ return _el$;
2655
+ })();
2656
+ }
2657
+ var img_default = ImgComponent;
2658
+
2659
+ // src/blocks/img/component-info.js
2660
+ var componentInfo10 = {
2661
+ name: "Raw:Img",
2662
+ hideFromInsertMenu: true,
2663
+ image: "https://firebasestorage.googleapis.com/v0/b/builder-3b0a2.appspot.com/o/images%2Fbaseline-insert_photo-24px.svg?alt=media&token=4e5d0ef4-f5e8-4e57-b3a9-38d63a9b9dc4",
2664
+ inputs: [{
2665
+ name: "image",
2666
+ bubble: true,
2667
+ type: "file",
2668
+ allowedFileTypes: ["jpeg", "jpg", "png", "svg", "gif", "webp"],
2669
+ required: true
2670
+ }],
2671
+ noWrap: true,
2672
+ static: true
2673
+ };
2674
+ var _tmpl$13 = /* @__PURE__ */ template(`<div>`);
2675
+ function CustomCode(props) {
2676
+ const [scriptsInserted, setScriptsInserted] = createSignal([]);
2677
+ const [scriptsRun, setScriptsRun] = createSignal([]);
2678
+ function findAndRunScripts() {
2679
+ if (elem && elem.getElementsByTagName && typeof window !== "undefined") {
2680
+ const scripts = elem.getElementsByTagName("script");
2681
+ for (let i = 0; i < scripts.length; i++) {
2682
+ const script = scripts[i];
2683
+ if (script.src) {
2684
+ if (scriptsInserted().includes(script.src)) {
2685
+ continue;
2686
+ }
2687
+ scriptsInserted().push(script.src);
2688
+ const newScript = document.createElement("script");
2689
+ newScript.async = true;
2690
+ newScript.src = script.src;
2691
+ document.head.appendChild(newScript);
2692
+ } else if (!script.type || ["text/javascript", "application/javascript", "application/ecmascript"].includes(script.type)) {
2693
+ if (scriptsRun().includes(script.innerText)) {
2694
+ continue;
2695
+ }
2696
+ try {
2697
+ scriptsRun().push(script.innerText);
2698
+ new Function(script.innerText)();
2699
+ } catch (error) {
2700
+ console.warn("`CustomCode`: Error running script:", error);
2701
+ }
2702
+ }
2703
+ }
2704
+ }
2705
+ }
2706
+ let elem;
2707
+ onMount(() => {
2708
+ findAndRunScripts();
2709
+ });
2710
+ return (() => {
2711
+ const _el$ = _tmpl$13();
2712
+ const _ref$ = elem;
2713
+ typeof _ref$ === "function" ? use(_ref$, _el$) : elem = _el$;
2714
+ effect((_p$) => {
2715
+ const _v$ = "builder-custom-code" + (props.replaceNodes ? " replace-nodes" : ""), _v$2 = props.code;
2716
+ _v$ !== _p$._v$ && className(_el$, _p$._v$ = _v$);
2717
+ _v$2 !== _p$._v$2 && (_el$.innerHTML = _p$._v$2 = _v$2);
2718
+ return _p$;
2719
+ }, {
2720
+ _v$: void 0,
2721
+ _v$2: void 0
2722
+ });
2723
+ return _el$;
2724
+ })();
2725
+ }
2726
+ var custom_code_default = CustomCode;
2727
+
2728
+ // src/blocks/custom-code/component-info.js
2729
+ var componentInfo11 = {
2730
+ name: "Custom Code",
2731
+ static: true,
2732
+ requiredPermissions: ["editCode"],
2733
+ inputs: [{
2734
+ name: "code",
2735
+ type: "html",
2736
+ required: true,
2737
+ defaultValue: "<p>Hello there, I am custom HTML code!</p>",
2738
+ code: true
2739
+ }, {
2740
+ name: "replaceNodes",
2741
+ type: "boolean",
2742
+ helperText: "Preserve server rendered dom nodes",
2743
+ advanced: true
2744
+ }, {
2745
+ name: "scriptsClientOnly",
2746
+ type: "boolean",
2747
+ defaultValue: false,
2748
+ helperText: "Only print and run scripts on the client. Important when scripts influence DOM that could be replaced when client loads",
2749
+ advanced: true
2750
+ }]
2751
+ };
2752
+
2753
+ // src/constants/builder-registered-components.js
2754
+ var __defProp9 = Object.defineProperty;
2755
+ var __getOwnPropSymbols9 = Object.getOwnPropertySymbols;
2756
+ var __hasOwnProp9 = Object.prototype.hasOwnProperty;
2757
+ var __propIsEnum9 = Object.prototype.propertyIsEnumerable;
2758
+ var __defNormalProp9 = (obj, key, value) => key in obj ? __defProp9(obj, key, {
2759
+ enumerable: true,
2760
+ configurable: true,
2761
+ writable: true,
2762
+ value
2763
+ }) : obj[key] = value;
2764
+ var __spreadValues9 = (a, b) => {
2765
+ for (var prop in b || (b = {}))
2766
+ if (__hasOwnProp9.call(b, prop))
2767
+ __defNormalProp9(a, prop, b[prop]);
2768
+ if (__getOwnPropSymbols9)
2769
+ for (var prop of __getOwnPropSymbols9(b)) {
2770
+ if (__propIsEnum9.call(b, prop))
2771
+ __defNormalProp9(a, prop, b[prop]);
2772
+ }
2773
+ return a;
2774
+ };
2775
+ var getDefaultRegisteredComponents = () => [__spreadValues9({
2776
+ component: button_default
2777
+ }, componentInfo), __spreadValues9({
2778
+ component: columns_default
2779
+ }, componentInfo2), __spreadValues9({
2780
+ component: custom_code_default
2781
+ }, componentInfo11), __spreadValues9({
2782
+ component: embed_default
2783
+ }, componentInfo9), __spreadValues9({
2784
+ component: fragment_default
2785
+ }, componentInfo3), __spreadValues9({
2786
+ component: image_default
2787
+ }, componentInfo4), __spreadValues9({
2788
+ component: img_default
2789
+ }, componentInfo10), __spreadValues9({
2790
+ component: section_default
2791
+ }, componentInfo5), __spreadValues9({
2792
+ component: symbol_default
2793
+ }, componentInfo6), __spreadValues9({
2794
+ component: text_default
2795
+ }, componentInfo7), __spreadValues9({
2796
+ component: video_default
2797
+ }, componentInfo8)];
2798
+
2799
+ // src/functions/register-component.js
2800
+ var __defProp10 = Object.defineProperty;
2801
+ var __defProps7 = Object.defineProperties;
2802
+ var __getOwnPropDescs7 = Object.getOwnPropertyDescriptors;
2803
+ var __getOwnPropSymbols10 = Object.getOwnPropertySymbols;
2804
+ var __hasOwnProp10 = Object.prototype.hasOwnProperty;
2805
+ var __propIsEnum10 = Object.prototype.propertyIsEnumerable;
2806
+ var __defNormalProp10 = (obj, key, value) => key in obj ? __defProp10(obj, key, {
2807
+ enumerable: true,
2808
+ configurable: true,
2809
+ writable: true,
2810
+ value
2811
+ }) : obj[key] = value;
2812
+ var __spreadValues10 = (a, b) => {
2813
+ for (var prop in b || (b = {}))
2814
+ if (__hasOwnProp10.call(b, prop))
2815
+ __defNormalProp10(a, prop, b[prop]);
2816
+ if (__getOwnPropSymbols10)
2817
+ for (var prop of __getOwnPropSymbols10(b)) {
2818
+ if (__propIsEnum10.call(b, prop))
2819
+ __defNormalProp10(a, prop, b[prop]);
2820
+ }
2821
+ return a;
2822
+ };
2823
+ var __spreadProps7 = (a, b) => __defProps7(a, __getOwnPropDescs7(b));
2824
+ var __objRest2 = (source, exclude) => {
2825
+ var target = {};
2826
+ for (var prop in source)
2827
+ if (__hasOwnProp10.call(source, prop) && exclude.indexOf(prop) < 0)
2828
+ target[prop] = source[prop];
2829
+ if (source != null && __getOwnPropSymbols10)
2830
+ for (var prop of __getOwnPropSymbols10(source)) {
2831
+ if (exclude.indexOf(prop) < 0 && __propIsEnum10.call(source, prop))
2832
+ target[prop] = source[prop];
2833
+ }
2834
+ return target;
2835
+ };
2836
+ var components = [];
2837
+ var createRegisterComponentMessage = (info) => ({
2838
+ type: "builder.registerComponent",
2839
+ data: serializeComponentInfo(info)
2840
+ });
2841
+ var serializeFn = (fnValue) => {
2842
+ const fnStr = fnValue.toString().trim();
2843
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("(");
2844
+ return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
2845
+ };
2846
+ var serializeValue = (value) => typeof value === "function" ? serializeFn(value) : fastClone(value);
2847
+ var serializeComponentInfo = (_a) => {
2848
+ var _b = _a, {
2849
+ inputs
2850
+ } = _b, info = __objRest2(_b, ["inputs"]);
2851
+ return __spreadProps7(__spreadValues10({}, fastClone(info)), {
2852
+ inputs: inputs == null ? void 0 : inputs.map((input) => Object.entries(input).reduce((acc, [key, value]) => __spreadProps7(__spreadValues10({}, acc), {
2853
+ [key]: serializeValue(value)
2854
+ }), {}))
2855
+ });
2856
+ };
2857
+
2858
+ // src/components/content/components/styles.helpers.js
2859
+ var getCssFromFont = (font) => {
2860
+ var _a, _b;
2861
+ const family = font.family + (font.kind && !font.kind.includes("#") ? ", " + font.kind : "");
2862
+ const name = family.split(",")[0];
2863
+ const url = (_b = font.fileUrl) != null ? _b : (_a = font == null ? void 0 : font.files) == null ? void 0 : _a.regular;
2864
+ let str = "";
2865
+ if (url && family && name) {
2866
+ str += `
2867
+ @font-face {
2868
+ font-family: "${family}";
2869
+ src: local("${name}"), url('${url}') format('woff2');
2870
+ font-display: fallback;
2871
+ font-weight: 400;
2872
+ }
2873
+ `.trim();
2874
+ }
2875
+ if (font.files) {
2876
+ for (const weight in font.files) {
2877
+ const isNumber = String(Number(weight)) === weight;
2878
+ if (!isNumber) {
2879
+ continue;
2880
+ }
2881
+ const weightUrl = font.files[weight];
2882
+ if (weightUrl && weightUrl !== url) {
2883
+ str += `
2884
+ @font-face {
2885
+ font-family: "${family}";
2886
+ src: url('${weightUrl}') format('woff2');
2887
+ font-display: fallback;
2888
+ font-weight: ${weight};
2889
+ }
2890
+ `.trim();
2891
+ }
2892
+ }
2893
+ }
2894
+ return str;
2895
+ };
2896
+ var getFontCss = ({
2897
+ customFonts
2898
+ }) => {
2899
+ var _a;
2900
+ return ((_a = customFonts == null ? void 0 : customFonts.map((font) => getCssFromFont(font))) == null ? void 0 : _a.join(" ")) || "";
2901
+ };
2902
+ var getCss = ({
2903
+ cssCode,
2904
+ contentId
2905
+ }) => {
2906
+ if (!cssCode) {
2907
+ return "";
2908
+ }
2909
+ if (!contentId) {
2910
+ return cssCode;
2911
+ }
2912
+ return (cssCode == null ? void 0 : cssCode.replace(/&/g, `div[builder-content-id="${contentId}"]`)) || "";
2913
+ };
2914
+
2915
+ // src/components/content/components/styles.jsx
2916
+ function ContentStyles(props) {
2917
+ const [injectedStyles, setInjectedStyles] = createSignal(`
2918
+ ${getCss({
2919
+ cssCode: props.cssCode,
2920
+ contentId: props.contentId
2921
+ })}
2922
+ ${getFontCss({
2923
+ customFonts: props.customFonts
2924
+ })}
2925
+
2926
+ .builder-text > p:first-of-type, .builder-text > .builder-paragraph:first-of-type {
2927
+ margin: 0;
2928
+ }
2929
+ .builder-text > p, .builder-text > .builder-paragraph {
2930
+ color: inherit;
2931
+ line-height: inherit;
2932
+ letter-spacing: inherit;
2933
+ font-weight: inherit;
2934
+ font-size: inherit;
2935
+ text-align: inherit;
2936
+ font-family: inherit;
2937
+ }
2938
+ `.trim());
2939
+ return createComponent(inlined_styles_default, {
2940
+ get styles() {
2941
+ return injectedStyles();
2942
+ }
2943
+ });
2944
+ }
2945
+ var styles_default = ContentStyles;
2946
+
2947
+ // src/components/content/content.helpers.js
2948
+ var __defProp11 = Object.defineProperty;
2949
+ var __defProps8 = Object.defineProperties;
2950
+ var __getOwnPropDescs8 = Object.getOwnPropertyDescriptors;
2951
+ var __getOwnPropSymbols11 = Object.getOwnPropertySymbols;
2952
+ var __hasOwnProp11 = Object.prototype.hasOwnProperty;
2953
+ var __propIsEnum11 = Object.prototype.propertyIsEnumerable;
2954
+ var __defNormalProp11 = (obj, key, value) => key in obj ? __defProp11(obj, key, {
2955
+ enumerable: true,
2956
+ configurable: true,
2957
+ writable: true,
2958
+ value
2959
+ }) : obj[key] = value;
2960
+ var __spreadValues11 = (a, b) => {
2961
+ for (var prop in b || (b = {}))
2962
+ if (__hasOwnProp11.call(b, prop))
2963
+ __defNormalProp11(a, prop, b[prop]);
2964
+ if (__getOwnPropSymbols11)
2965
+ for (var prop of __getOwnPropSymbols11(b)) {
2966
+ if (__propIsEnum11.call(b, prop))
2967
+ __defNormalProp11(a, prop, b[prop]);
2968
+ }
2969
+ return a;
2970
+ };
2971
+ var __spreadProps8 = (a, b) => __defProps8(a, __getOwnPropDescs8(b));
2972
+ var getContextStateInitialValue = ({
2973
+ content,
2974
+ data,
2975
+ locale
2976
+ }) => {
2977
+ var _a, _b, _c;
2978
+ const defaultValues = {};
2979
+ (_b = (_a = content == null ? void 0 : content.data) == null ? void 0 : _a.inputs) == null ? void 0 : _b.forEach((input) => {
2980
+ var _a2;
2981
+ 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) {
2982
+ defaultValues[input.name] = input.defaultValue;
2983
+ }
2984
+ });
2985
+ const stateToUse = __spreadValues11(__spreadValues11(__spreadValues11({}, (_c = content == null ? void 0 : content.data) == null ? void 0 : _c.state), data), locale ? {
2986
+ locale
2987
+ } : {});
2988
+ return __spreadValues11(__spreadValues11({}, defaultValues), stateToUse);
2989
+ };
2990
+ var getContentInitialValue = ({
2991
+ content,
2992
+ data
2993
+ }) => {
2994
+ return !content ? void 0 : __spreadProps8(__spreadValues11({}, content), {
2995
+ data: __spreadValues11(__spreadValues11({}, content == null ? void 0 : content.data), data),
2996
+ meta: content == null ? void 0 : content.meta
2997
+ });
2998
+ };
2999
+
3000
+ // src/functions/get-global-this.js
3001
+ function getGlobalThis() {
3002
+ if (typeof globalThis !== "undefined") {
3003
+ return globalThis;
3004
+ }
3005
+ if (typeof window !== "undefined") {
3006
+ return window;
3007
+ }
3008
+ if (typeof global !== "undefined") {
3009
+ return global;
3010
+ }
3011
+ if (typeof self !== "undefined") {
3012
+ return self;
3013
+ }
3014
+ return globalThis;
3015
+ }
3016
+
3017
+ // src/functions/get-fetch.js
3018
+ function getFetch() {
3019
+ const globalFetch = getGlobalThis().fetch;
3020
+ if (typeof globalFetch === "undefined") {
3021
+ console.warn(`Builder SDK could not find a global fetch function. Make sure you have a polyfill for fetch in your project.
3022
+ For more information, read https://github.com/BuilderIO/this-package-uses-fetch`);
3023
+ throw new Error("Builder SDK could not find a global `fetch` function");
3024
+ }
3025
+ return globalFetch;
3026
+ }
3027
+ var fetch2 = getFetch();
3028
+
3029
+ // src/helpers/url.js
3030
+ var getTopLevelDomain = (host) => {
3031
+ if (host === "localhost" || host === "127.0.0.1") {
3032
+ return host;
3033
+ }
3034
+ const parts = host.split(".");
3035
+ if (parts.length > 2) {
3036
+ return parts.slice(1).join(".");
3037
+ }
3038
+ return host;
3039
+ };
3040
+
3041
+ // src/helpers/cookie.js
3042
+ var __async = (__this, __arguments, generator) => {
3043
+ return new Promise((resolve, reject) => {
3044
+ var fulfilled = (value) => {
3045
+ try {
3046
+ step(generator.next(value));
3047
+ } catch (e) {
3048
+ reject(e);
3049
+ }
3050
+ };
3051
+ var rejected = (value) => {
3052
+ try {
3053
+ step(generator.throw(value));
3054
+ } catch (e) {
3055
+ reject(e);
3056
+ }
3057
+ };
3058
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
3059
+ step((generator = generator.apply(__this, __arguments)).next());
3060
+ });
3061
+ };
3062
+ var getCookieSync = ({
3063
+ name,
3064
+ canTrack
3065
+ }) => {
3066
+ var _a;
3067
+ try {
3068
+ if (!canTrack) {
3069
+ return void 0;
3070
+ }
3071
+ return (_a = document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))) == null ? void 0 : _a.split("=")[1];
3072
+ } catch (err) {
3073
+ logger.warn("[COOKIE] GET error: ", (err == null ? void 0 : err.message) || err);
3074
+ return void 0;
3075
+ }
3076
+ };
3077
+ var getCookie = (args) => __async(void 0, null, function* () {
3078
+ return getCookieSync(args);
3079
+ });
3080
+ var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
3081
+ var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
3082
+ var createCookieString = ({
3083
+ name,
3084
+ value,
3085
+ expires
3086
+ }) => {
3087
+ const secure = isBrowser() ? location.protocol === "https:" : true;
3088
+ const secureObj = secure ? SECURE_CONFIG : [[]];
3089
+ const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
3090
+ const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
3091
+ const cookie = stringifyCookie(cookieValue);
3092
+ return cookie;
3093
+ };
3094
+ var setCookie = (_0) => __async(void 0, [_0], function* ({
3095
+ name,
3096
+ value,
3097
+ expires,
3098
+ canTrack
3099
+ }) {
3100
+ try {
3101
+ if (!canTrack) {
3102
+ return;
3103
+ }
3104
+ const cookie = createCookieString({
3105
+ name,
3106
+ value,
3107
+ expires
3108
+ });
3109
+ document.cookie = cookie;
3110
+ } catch (err) {
3111
+ logger.warn("[COOKIE] SET error: ", (err == null ? void 0 : err.message) || err);
3112
+ }
3113
+ });
3114
+
3115
+ // src/helpers/uuid.js
3116
+ function uuidv4() {
3117
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
3118
+ const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
3119
+ return v.toString(16);
3120
+ });
3121
+ }
3122
+ function uuid() {
3123
+ return uuidv4().replace(/-/g, "");
3124
+ }
3125
+
3126
+ // src/helpers/sessionId.js
3127
+ var __async2 = (__this, __arguments, generator) => {
3128
+ return new Promise((resolve, reject) => {
3129
+ var fulfilled = (value) => {
3130
+ try {
3131
+ step(generator.next(value));
3132
+ } catch (e) {
3133
+ reject(e);
3134
+ }
3135
+ };
3136
+ var rejected = (value) => {
3137
+ try {
3138
+ step(generator.throw(value));
3139
+ } catch (e) {
3140
+ reject(e);
3141
+ }
3142
+ };
3143
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
3144
+ step((generator = generator.apply(__this, __arguments)).next());
3145
+ });
3146
+ };
3147
+ var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
3148
+ var getSessionId = (_0) => __async2(void 0, [_0], function* ({
3149
+ canTrack
3150
+ }) {
3151
+ if (!canTrack) {
3152
+ return void 0;
3153
+ }
3154
+ const sessionId = yield getCookie({
3155
+ name: SESSION_LOCAL_STORAGE_KEY,
3156
+ canTrack
3157
+ });
3158
+ if (checkIsDefined(sessionId)) {
3159
+ return sessionId;
3160
+ } else {
3161
+ const newSessionId = createSessionId();
3162
+ setSessionId({
3163
+ id: newSessionId,
3164
+ canTrack
3165
+ });
3166
+ return newSessionId;
3167
+ }
3168
+ });
3169
+ var createSessionId = () => uuid();
3170
+ var setSessionId = ({
3171
+ id,
3172
+ canTrack
3173
+ }) => setCookie({
3174
+ name: SESSION_LOCAL_STORAGE_KEY,
3175
+ value: id,
3176
+ canTrack
3177
+ });
3178
+
3179
+ // src/helpers/localStorage.js
3180
+ var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
3181
+ var getLocalStorageItem = ({
3182
+ key,
3183
+ canTrack
3184
+ }) => {
3185
+ var _a;
3186
+ try {
3187
+ if (canTrack) {
3188
+ return (_a = getLocalStorage()) == null ? void 0 : _a.getItem(key);
3189
+ }
3190
+ return void 0;
3191
+ } catch (err) {
3192
+ console.debug("[LocalStorage] GET error: ", err);
3193
+ return void 0;
3194
+ }
3195
+ };
3196
+ var setLocalStorageItem = ({
3197
+ key,
3198
+ canTrack,
3199
+ value
3200
+ }) => {
3201
+ var _a;
3202
+ try {
3203
+ if (canTrack) {
3204
+ (_a = getLocalStorage()) == null ? void 0 : _a.setItem(key, value);
3205
+ }
3206
+ } catch (err) {
3207
+ console.debug("[LocalStorage] SET error: ", err);
3208
+ }
3209
+ };
3210
+
3211
+ // src/helpers/visitorId.js
3212
+ var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
3213
+ var getVisitorId = ({
3214
+ canTrack
3215
+ }) => {
3216
+ if (!canTrack) {
3217
+ return void 0;
3218
+ }
3219
+ const visitorId = getLocalStorageItem({
3220
+ key: VISITOR_LOCAL_STORAGE_KEY,
3221
+ canTrack
3222
+ });
3223
+ if (checkIsDefined(visitorId)) {
3224
+ return visitorId;
3225
+ } else {
3226
+ const newVisitorId = createVisitorId();
3227
+ setVisitorId({
3228
+ id: newVisitorId,
3229
+ canTrack
3230
+ });
3231
+ return newVisitorId;
3232
+ }
3233
+ };
3234
+ var createVisitorId = () => uuid();
3235
+ var setVisitorId = ({
3236
+ id,
3237
+ canTrack
3238
+ }) => setLocalStorageItem({
3239
+ key: VISITOR_LOCAL_STORAGE_KEY,
3240
+ value: id,
3241
+ canTrack
3242
+ });
3243
+
3244
+ // src/functions/track/index.js
3245
+ var __defProp12 = Object.defineProperty;
3246
+ var __defProps9 = Object.defineProperties;
3247
+ var __getOwnPropDescs9 = Object.getOwnPropertyDescriptors;
3248
+ var __getOwnPropSymbols12 = Object.getOwnPropertySymbols;
3249
+ var __hasOwnProp12 = Object.prototype.hasOwnProperty;
3250
+ var __propIsEnum12 = Object.prototype.propertyIsEnumerable;
3251
+ var __defNormalProp12 = (obj, key, value) => key in obj ? __defProp12(obj, key, {
3252
+ enumerable: true,
3253
+ configurable: true,
3254
+ writable: true,
3255
+ value
3256
+ }) : obj[key] = value;
3257
+ var __spreadValues12 = (a, b) => {
3258
+ for (var prop in b || (b = {}))
3259
+ if (__hasOwnProp12.call(b, prop))
3260
+ __defNormalProp12(a, prop, b[prop]);
3261
+ if (__getOwnPropSymbols12)
3262
+ for (var prop of __getOwnPropSymbols12(b)) {
3263
+ if (__propIsEnum12.call(b, prop))
3264
+ __defNormalProp12(a, prop, b[prop]);
3265
+ }
3266
+ return a;
3267
+ };
3268
+ var __spreadProps9 = (a, b) => __defProps9(a, __getOwnPropDescs9(b));
3269
+ var __objRest3 = (source, exclude) => {
3270
+ var target = {};
3271
+ for (var prop in source)
3272
+ if (__hasOwnProp12.call(source, prop) && exclude.indexOf(prop) < 0)
3273
+ target[prop] = source[prop];
3274
+ if (source != null && __getOwnPropSymbols12)
3275
+ for (var prop of __getOwnPropSymbols12(source)) {
3276
+ if (exclude.indexOf(prop) < 0 && __propIsEnum12.call(source, prop))
3277
+ target[prop] = source[prop];
3278
+ }
3279
+ return target;
3280
+ };
3281
+ var __async3 = (__this, __arguments, generator) => {
3282
+ return new Promise((resolve, reject) => {
3283
+ var fulfilled = (value) => {
3284
+ try {
3285
+ step(generator.next(value));
3286
+ } catch (e) {
3287
+ reject(e);
3288
+ }
3289
+ };
3290
+ var rejected = (value) => {
3291
+ try {
3292
+ step(generator.throw(value));
3293
+ } catch (e) {
3294
+ reject(e);
3295
+ }
3296
+ };
3297
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
3298
+ step((generator = generator.apply(__this, __arguments)).next());
3299
+ });
3300
+ };
3301
+ var getTrackingEventData = (_0) => __async3(void 0, [_0], function* ({
3302
+ canTrack
3303
+ }) {
3304
+ if (!canTrack) {
3305
+ return {
3306
+ visitorId: void 0,
3307
+ sessionId: void 0
3308
+ };
3309
+ }
3310
+ const sessionId = yield getSessionId({
3311
+ canTrack
3312
+ });
3313
+ const visitorId = getVisitorId({
3314
+ canTrack
3315
+ });
3316
+ return {
3317
+ sessionId,
3318
+ visitorId
3319
+ };
3320
+ });
3321
+ var createEvent = (_a) => __async3(void 0, null, function* () {
3322
+ var _b = _a, {
3323
+ type: eventType,
3324
+ canTrack,
3325
+ apiKey,
3326
+ metadata
3327
+ } = _b, properties = __objRest3(_b, ["type", "canTrack", "apiKey", "metadata"]);
3328
+ return {
3329
+ type: eventType,
3330
+ data: __spreadProps9(__spreadValues12(__spreadProps9(__spreadValues12({}, properties), {
3331
+ metadata: __spreadValues12({
3332
+ url: location.href
3333
+ }, metadata)
3334
+ }), yield getTrackingEventData({
3335
+ canTrack
3336
+ })), {
3337
+ userAttributes: getUserAttributes(),
3338
+ ownerId: apiKey
3339
+ })
3340
+ };
3341
+ });
3342
+ function _track(eventProps) {
3343
+ return __async3(this, null, function* () {
3344
+ if (!eventProps.apiKey) {
3345
+ logger.error("Missing API key for track call. Please provide your API key.");
3346
+ return;
3347
+ }
3348
+ if (!eventProps.canTrack) {
3349
+ return;
3350
+ }
3351
+ if (isEditing()) {
3352
+ return;
3353
+ }
3354
+ if (!(isBrowser() || TARGET === "reactNative")) {
3355
+ return;
3356
+ }
3357
+ return fetch(`https://cdn.builder.io/api/v1/track`, {
3358
+ method: "POST",
3359
+ body: JSON.stringify({
3360
+ events: [yield createEvent(eventProps)]
3361
+ }),
3362
+ headers: {
3363
+ "content-type": "application/json"
3364
+ },
3365
+ mode: "cors"
3366
+ }).catch((err) => {
3367
+ console.error("Failed to track: ", err);
3368
+ });
3369
+ });
3370
+ }
3371
+ var track = (args) => _track(__spreadProps9(__spreadValues12({}, args), {
3372
+ canTrack: true
3373
+ }));
3374
+
3375
+ // src/constants/sdk-version.js
3376
+ var SDK_VERSION = "0.6.1";
3377
+
3378
+ // src/functions/register.js
3379
+ var registry = {};
3380
+ function register(type, info) {
3381
+ let typeList = registry[type];
3382
+ if (!typeList) {
3383
+ typeList = registry[type] = [];
3384
+ }
3385
+ typeList.push(info);
3386
+ if (isBrowser()) {
3387
+ const message = {
3388
+ type: "builder.register",
3389
+ data: {
3390
+ type,
3391
+ info
3392
+ }
3393
+ };
3394
+ try {
3395
+ parent.postMessage(message, "*");
3396
+ if (parent !== window) {
3397
+ window.postMessage(message, "*");
3398
+ }
3399
+ } catch (err) {
3400
+ console.debug("Could not postmessage", err);
3401
+ }
3402
+ }
3403
+ }
3404
+
3405
+ // src/scripts/init-editing.js
3406
+ var registerInsertMenu = () => {
3407
+ register("insertMenu", {
3408
+ name: "_default",
3409
+ default: true,
3410
+ items: [{
3411
+ name: "Box"
3412
+ }, {
3413
+ name: "Text"
3414
+ }, {
3415
+ name: "Image"
3416
+ }, {
3417
+ name: "Columns"
3418
+ }, ...TARGET === "reactNative" ? [] : [{
3419
+ name: "Core:Section"
3420
+ }, {
3421
+ name: "Core:Button"
3422
+ }, {
3423
+ name: "Embed"
3424
+ }, {
3425
+ name: "Custom Code"
3426
+ }]]
3427
+ });
3428
+ };
3429
+ var isSetupForEditing = false;
3430
+ var setupBrowserForEditing = (options = {}) => {
3431
+ var _a, _b;
3432
+ if (isSetupForEditing) {
3433
+ return;
3434
+ }
3435
+ isSetupForEditing = true;
3436
+ if (isBrowser()) {
3437
+ (_a = window.parent) == null ? void 0 : _a.postMessage({
3438
+ type: "builder.sdkInfo",
3439
+ data: {
3440
+ target: TARGET,
3441
+ version: SDK_VERSION,
3442
+ supportsPatchUpdates: false,
3443
+ supportsAddBlockScoping: true,
3444
+ supportsCustomBreakpoints: true
3445
+ }
3446
+ }, "*");
3447
+ (_b = window.parent) == null ? void 0 : _b.postMessage({
3448
+ type: "builder.updateContent",
3449
+ data: {
3450
+ options
3451
+ }
3452
+ }, "*");
3453
+ window.addEventListener("message", ({
3454
+ data
3455
+ }) => {
3456
+ var _a2, _b2;
3457
+ if (!(data == null ? void 0 : data.type)) {
3458
+ return;
3459
+ }
3460
+ switch (data.type) {
3461
+ case "builder.evaluate": {
3462
+ const text = data.data.text;
3463
+ const args = data.data.arguments || [];
3464
+ const id = data.data.id;
3465
+ const fn = new Function(text);
3466
+ let result;
3467
+ let error = null;
3468
+ try {
3469
+ result = fn.apply(null, args);
3470
+ } catch (err) {
3471
+ error = err;
3472
+ }
3473
+ if (error) {
3474
+ (_a2 = window.parent) == null ? void 0 : _a2.postMessage({
3475
+ type: "builder.evaluateError",
3476
+ data: {
3477
+ id,
3478
+ error: error.message
3479
+ }
3480
+ }, "*");
3481
+ } else {
3482
+ if (result && typeof result.then === "function") {
3483
+ result.then((finalResult) => {
3484
+ var _a3;
3485
+ (_a3 = window.parent) == null ? void 0 : _a3.postMessage({
3486
+ type: "builder.evaluateResult",
3487
+ data: {
3488
+ id,
3489
+ result: finalResult
3490
+ }
3491
+ }, "*");
3492
+ }).catch(console.error);
3493
+ } else {
3494
+ (_b2 = window.parent) == null ? void 0 : _b2.postMessage({
3495
+ type: "builder.evaluateResult",
3496
+ data: {
3497
+ result,
3498
+ id
3499
+ }
3500
+ }, "*");
3501
+ }
3502
+ }
3503
+ break;
3504
+ }
3505
+ }
3506
+ });
3507
+ }
3508
+ };
3509
+
3510
+ // src/functions/track/interaction.js
3511
+ function round(num) {
3512
+ return Math.round(num * 1e3) / 1e3;
3513
+ }
3514
+ var findParentElement = (target, callback, checkElement = true) => {
3515
+ if (!(target instanceof HTMLElement)) {
3516
+ return null;
3517
+ }
3518
+ let parent2 = checkElement ? target : target.parentElement;
3519
+ do {
3520
+ if (!parent2) {
3521
+ return null;
3522
+ }
3523
+ const matches = callback(parent2);
3524
+ if (matches) {
3525
+ return parent2;
3526
+ }
3527
+ } while (parent2 = parent2.parentElement);
3528
+ return null;
3529
+ };
3530
+ var findBuilderParent = (target) => findParentElement(target, (el) => {
3531
+ const id = el.getAttribute("builder-id") || el.id;
3532
+ return Boolean((id == null ? void 0 : id.indexOf("builder-")) === 0);
3533
+ });
3534
+ var computeOffset = ({
3535
+ event,
3536
+ target
3537
+ }) => {
3538
+ const targetRect = target.getBoundingClientRect();
3539
+ const xOffset = event.clientX - targetRect.left;
3540
+ const yOffset = event.clientY - targetRect.top;
3541
+ const xRatio = round(xOffset / targetRect.width);
3542
+ const yRatio = round(yOffset / targetRect.height);
3543
+ return {
3544
+ x: xRatio,
3545
+ y: yRatio
3546
+ };
3547
+ };
3548
+ var getInteractionPropertiesForEvent = (event) => {
3549
+ const target = event.target;
3550
+ const targetBuilderElement = target && findBuilderParent(target);
3551
+ const builderId = (targetBuilderElement == null ? void 0 : targetBuilderElement.getAttribute("builder-id")) || (targetBuilderElement == null ? void 0 : targetBuilderElement.id);
3552
+ return {
3553
+ targetBuilderElement: builderId || void 0,
3554
+ metadata: {
3555
+ targetOffset: target ? computeOffset({
3556
+ event,
3557
+ target
3558
+ }) : void 0,
3559
+ builderTargetOffset: targetBuilderElement ? computeOffset({
3560
+ event,
3561
+ target: targetBuilderElement
3562
+ }) : void 0,
3563
+ builderElementIndex: targetBuilderElement && builderId ? [].slice.call(document.getElementsByClassName(builderId)).indexOf(targetBuilderElement) : void 0
3564
+ }
3565
+ };
3566
+ };
3567
+
3568
+ // src/helpers/ab-tests.js
3569
+ var __defProp13 = Object.defineProperty;
3570
+ var __getOwnPropSymbols13 = Object.getOwnPropertySymbols;
3571
+ var __hasOwnProp13 = Object.prototype.hasOwnProperty;
3572
+ var __propIsEnum13 = Object.prototype.propertyIsEnumerable;
3573
+ var __defNormalProp13 = (obj, key, value) => key in obj ? __defProp13(obj, key, {
3574
+ enumerable: true,
3575
+ configurable: true,
3576
+ writable: true,
3577
+ value
3578
+ }) : obj[key] = value;
3579
+ var __spreadValues13 = (a, b) => {
3580
+ for (var prop in b || (b = {}))
3581
+ if (__hasOwnProp13.call(b, prop))
3582
+ __defNormalProp13(a, prop, b[prop]);
3583
+ if (__getOwnPropSymbols13)
3584
+ for (var prop of __getOwnPropSymbols13(b)) {
3585
+ if (__propIsEnum13.call(b, prop))
3586
+ __defNormalProp13(a, prop, b[prop]);
3587
+ }
3588
+ return a;
3589
+ };
3590
+ var __async4 = (__this, __arguments, generator) => {
3591
+ return new Promise((resolve, reject) => {
3592
+ var fulfilled = (value) => {
3593
+ try {
3594
+ step(generator.next(value));
3595
+ } catch (e) {
3596
+ reject(e);
3597
+ }
3598
+ };
3599
+ var rejected = (value) => {
3600
+ try {
3601
+ step(generator.throw(value));
3602
+ } catch (e) {
3603
+ reject(e);
3604
+ }
3605
+ };
3606
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
3607
+ step((generator = generator.apply(__this, __arguments)).next());
3608
+ });
3609
+ };
3610
+ var BUILDER_STORE_PREFIX = "builder.tests";
3611
+ var getContentTestKey = (id) => `${BUILDER_STORE_PREFIX}.${id}`;
3612
+ var getContentVariationCookie = ({
3613
+ contentId
3614
+ }) => getCookie({
3615
+ name: getContentTestKey(contentId),
3616
+ canTrack: true
3617
+ });
3618
+ var getContentVariationCookieSync = ({
3619
+ contentId
3620
+ }) => getCookieSync({
3621
+ name: getContentTestKey(contentId),
3622
+ canTrack: true
3623
+ });
3624
+ var setContentVariationCookie = ({
3625
+ contentId,
3626
+ value
3627
+ }) => setCookie({
3628
+ name: getContentTestKey(contentId),
3629
+ value,
3630
+ canTrack: true
3631
+ });
3632
+ var checkIsBuilderContentWithVariations = (item) => checkIsDefined(item.id) && checkIsDefined(item.variations) && Object.keys(item.variations).length > 0;
3633
+ var getRandomVariationId = ({
3634
+ id,
3635
+ variations
3636
+ }) => {
3637
+ var _a;
3638
+ let n = 0;
3639
+ const random = Math.random();
3640
+ for (const id2 in variations) {
3641
+ const testRatio = (_a = variations[id2]) == null ? void 0 : _a.testRatio;
3642
+ n += testRatio;
3643
+ if (random < n) {
3644
+ return id2;
3645
+ }
3646
+ }
3647
+ return id;
3648
+ };
3649
+ var getAndSetVariantId = (args) => {
3650
+ const randomVariationId = getRandomVariationId(args);
3651
+ setContentVariationCookie({
3652
+ contentId: args.id,
3653
+ value: randomVariationId
3654
+ }).catch((err) => {
3655
+ logger.error("could not store A/B test variation: ", err);
3656
+ });
3657
+ return randomVariationId;
3658
+ };
3659
+ var getTestFields = ({
3660
+ item,
3661
+ testGroupId
3662
+ }) => {
3663
+ const variationValue = item.variations[testGroupId];
3664
+ if (testGroupId === item.id || !variationValue) {
3665
+ return {
3666
+ testVariationId: item.id,
3667
+ testVariationName: "Default"
3668
+ };
3669
+ } else {
3670
+ return {
3671
+ data: variationValue.data,
3672
+ testVariationId: variationValue.id,
3673
+ testVariationName: variationValue.name || (variationValue.id === item.id ? "Default" : "")
3674
+ };
3675
+ }
3676
+ };
3677
+ var handleABTestingSync = ({
3678
+ item,
3679
+ canTrack
3680
+ }) => {
3681
+ if (TARGET === "reactNative")
3682
+ return item;
3683
+ if (!canTrack) {
3684
+ return item;
3685
+ }
3686
+ if (!item) {
3687
+ return void 0;
3688
+ }
3689
+ if (!checkIsBuilderContentWithVariations(item)) {
3690
+ return item;
3691
+ }
3692
+ const testGroupId = getContentVariationCookieSync({
3693
+ contentId: item.id
3694
+ }) || getAndSetVariantId({
3695
+ variations: item.variations,
3696
+ id: item.id
3697
+ });
3698
+ const variationValue = getTestFields({
3699
+ item,
3700
+ testGroupId
3701
+ });
3702
+ return __spreadValues13(__spreadValues13({}, item), variationValue);
3703
+ };
3704
+ var handleABTesting = (_0) => __async4(void 0, [_0], function* ({
3705
+ item,
3706
+ canTrack
3707
+ }) {
3708
+ if (!canTrack) {
3709
+ return item;
3710
+ }
3711
+ if (!checkIsBuilderContentWithVariations(item)) {
3712
+ return item;
3713
+ }
3714
+ const cookieValue = yield getContentVariationCookie({
3715
+ contentId: item.id
3716
+ });
3717
+ const testGroupId = cookieValue || getAndSetVariantId({
3718
+ variations: item.variations,
3719
+ id: item.id
3720
+ });
3721
+ const variationValue = getTestFields({
3722
+ item,
3723
+ testGroupId
3724
+ });
3725
+ return __spreadValues13(__spreadValues13({}, item), variationValue);
3726
+ });
3727
+
3728
+ // src/helpers/canTrack.js
3729
+ var getDefaultCanTrack = (canTrack) => checkIsDefined(canTrack) ? canTrack : true;
3730
+
3731
+ // src/helpers/preview-lru-cache/get.js
3732
+ function getPreviewContent(_searchParams) {
3733
+ return void 0;
3734
+ }
3735
+
3736
+ // src/helpers/flatten.js
3737
+ var __defProp14 = Object.defineProperty;
3738
+ var __defProps10 = Object.defineProperties;
3739
+ var __getOwnPropDescs10 = Object.getOwnPropertyDescriptors;
3740
+ var __getOwnPropSymbols14 = Object.getOwnPropertySymbols;
3741
+ var __hasOwnProp14 = Object.prototype.hasOwnProperty;
3742
+ var __propIsEnum14 = Object.prototype.propertyIsEnumerable;
3743
+ var __defNormalProp14 = (obj, key, value) => key in obj ? __defProp14(obj, key, {
3744
+ enumerable: true,
3745
+ configurable: true,
3746
+ writable: true,
3747
+ value
3748
+ }) : obj[key] = value;
3749
+ var __spreadValues14 = (a, b) => {
3750
+ for (var prop in b || (b = {}))
3751
+ if (__hasOwnProp14.call(b, prop))
3752
+ __defNormalProp14(a, prop, b[prop]);
3753
+ if (__getOwnPropSymbols14)
3754
+ for (var prop of __getOwnPropSymbols14(b)) {
3755
+ if (__propIsEnum14.call(b, prop))
3756
+ __defNormalProp14(a, prop, b[prop]);
3757
+ }
3758
+ return a;
3759
+ };
3760
+ var __spreadProps10 = (a, b) => __defProps10(a, __getOwnPropDescs10(b));
3761
+ function flatten(object, path = null, separator = ".") {
3762
+ return Object.keys(object).reduce((acc, key) => {
3763
+ const value = object[key];
3764
+ const newPath = [path, key].filter(Boolean).join(separator);
3765
+ const isObject = [typeof value === "object", value !== null, !(Array.isArray(value) && value.length === 0)].every(Boolean);
3766
+ return isObject ? __spreadValues14(__spreadValues14({}, acc), flatten(value, newPath, separator)) : __spreadProps10(__spreadValues14({}, acc), {
3767
+ [newPath]: value
3768
+ });
3769
+ }, {});
3770
+ }
3771
+
3772
+ // src/functions/get-builder-search-params/index.js
3773
+ var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
3774
+ var BUILDER_OPTIONS_PREFIX = "options.";
3775
+ var convertSearchParamsToQueryObject = (searchParams) => {
3776
+ const options = {};
3777
+ searchParams.forEach((value, key) => {
3778
+ options[key] = value;
3779
+ });
3780
+ return options;
3781
+ };
3782
+ var getBuilderSearchParams = (_options) => {
3783
+ if (!_options) {
3784
+ return {};
3785
+ }
3786
+ const options = normalizeSearchParams(_options);
3787
+ const newOptions = {};
3788
+ Object.keys(options).forEach((key) => {
3789
+ if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
3790
+ const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
3791
+ newOptions[trimmedKey] = options[key];
3792
+ }
3793
+ });
3794
+ return newOptions;
3795
+ };
3796
+ var getBuilderSearchParamsFromWindow = () => {
3797
+ if (!isBrowser()) {
3798
+ return {};
3799
+ }
3800
+ const searchParams = new URLSearchParams(window.location.search);
3801
+ return getBuilderSearchParams(searchParams);
3802
+ };
3803
+ var normalizeSearchParams = (searchParams) => searchParams instanceof URLSearchParams ? convertSearchParamsToQueryObject(searchParams) : searchParams;
3804
+
3805
+ // src/types/api-version.js
3806
+ var DEFAULT_API_VERSION = "v3";
3807
+
3808
+ // src/functions/get-content/generate-content-url.js
3809
+ var __defProp15 = Object.defineProperty;
3810
+ var __getOwnPropSymbols15 = Object.getOwnPropertySymbols;
3811
+ var __hasOwnProp15 = Object.prototype.hasOwnProperty;
3812
+ var __propIsEnum15 = Object.prototype.propertyIsEnumerable;
3813
+ var __defNormalProp15 = (obj, key, value) => key in obj ? __defProp15(obj, key, {
3814
+ enumerable: true,
3815
+ configurable: true,
3816
+ writable: true,
3817
+ value
3818
+ }) : obj[key] = value;
3819
+ var __spreadValues15 = (a, b) => {
3820
+ for (var prop in b || (b = {}))
3821
+ if (__hasOwnProp15.call(b, prop))
3822
+ __defNormalProp15(a, prop, b[prop]);
3823
+ if (__getOwnPropSymbols15)
3824
+ for (var prop of __getOwnPropSymbols15(b)) {
3825
+ if (__propIsEnum15.call(b, prop))
3826
+ __defNormalProp15(a, prop, b[prop]);
3827
+ }
3828
+ return a;
3829
+ };
3830
+ var generateContentUrl = (options) => {
3831
+ const {
3832
+ limit = 30,
3833
+ userAttributes,
3834
+ query,
3835
+ noTraverse = false,
3836
+ model,
3837
+ apiKey,
3838
+ includeRefs = true,
3839
+ enrich,
3840
+ locale,
3841
+ apiVersion = DEFAULT_API_VERSION
3842
+ } = options;
3843
+ if (!apiKey) {
3844
+ throw new Error("Missing API key");
3845
+ }
3846
+ if (!["v2", "v3"].includes(apiVersion)) {
3847
+ throw new Error(`Invalid apiVersion: expected 'v2' or 'v3', received '${apiVersion}'`);
3848
+ }
3849
+ const url = new URL(`https://cdn.builder.io/api/${apiVersion}/content/${model}?apiKey=${apiKey}&limit=${limit}&noTraverse=${noTraverse}&includeRefs=${includeRefs}${locale ? `&locale=${locale}` : ""}${enrich ? `&enrich=${enrich}` : ""}`);
3850
+ const queryOptions = __spreadValues15(__spreadValues15({}, getBuilderSearchParamsFromWindow()), normalizeSearchParams(options.options || {}));
3851
+ const flattened = flatten(queryOptions);
3852
+ for (const key in flattened) {
3853
+ url.searchParams.set(key, String(flattened[key]));
3854
+ }
3855
+ if (userAttributes) {
3856
+ url.searchParams.set("userAttributes", JSON.stringify(userAttributes));
3857
+ }
3858
+ if (query) {
3859
+ const flattened2 = flatten({
3860
+ query
3861
+ });
3862
+ for (const key in flattened2) {
3863
+ url.searchParams.set(key, JSON.stringify(flattened2[key]));
3864
+ }
3865
+ }
3866
+ return url;
3867
+ };
3868
+
3869
+ // src/functions/get-content/index.js
3870
+ var __defProp16 = Object.defineProperty;
3871
+ var __defProps11 = Object.defineProperties;
3872
+ var __getOwnPropDescs11 = Object.getOwnPropertyDescriptors;
3873
+ var __getOwnPropSymbols16 = Object.getOwnPropertySymbols;
3874
+ var __hasOwnProp16 = Object.prototype.hasOwnProperty;
3875
+ var __propIsEnum16 = Object.prototype.propertyIsEnumerable;
3876
+ var __defNormalProp16 = (obj, key, value) => key in obj ? __defProp16(obj, key, {
3877
+ enumerable: true,
3878
+ configurable: true,
3879
+ writable: true,
3880
+ value
3881
+ }) : obj[key] = value;
3882
+ var __spreadValues16 = (a, b) => {
3883
+ for (var prop in b || (b = {}))
3884
+ if (__hasOwnProp16.call(b, prop))
3885
+ __defNormalProp16(a, prop, b[prop]);
3886
+ if (__getOwnPropSymbols16)
3887
+ for (var prop of __getOwnPropSymbols16(b)) {
3888
+ if (__propIsEnum16.call(b, prop))
3889
+ __defNormalProp16(a, prop, b[prop]);
3890
+ }
3891
+ return a;
3892
+ };
3893
+ var __spreadProps11 = (a, b) => __defProps11(a, __getOwnPropDescs11(b));
3894
+ var __async5 = (__this, __arguments, generator) => {
3895
+ return new Promise((resolve, reject) => {
3896
+ var fulfilled = (value) => {
3897
+ try {
3898
+ step(generator.next(value));
3899
+ } catch (e) {
3900
+ reject(e);
3901
+ }
3902
+ };
3903
+ var rejected = (value) => {
3904
+ try {
3905
+ step(generator.throw(value));
3906
+ } catch (e) {
3907
+ reject(e);
3908
+ }
3909
+ };
3910
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
3911
+ step((generator = generator.apply(__this, __arguments)).next());
3912
+ });
3913
+ };
3914
+ var checkContentHasResults = (content) => "results" in content;
3915
+ function fetchOneEntry(options) {
3916
+ return __async5(this, null, function* () {
3917
+ const allContent = yield fetchEntries(__spreadProps11(__spreadValues16({}, options), {
3918
+ limit: 1
3919
+ }));
3920
+ if (allContent) {
3921
+ return allContent.results[0] || null;
3922
+ }
3923
+ return null;
3924
+ });
3925
+ }
3926
+ var getContent = fetchOneEntry;
3927
+ var _fetchContent = (options) => __async5(void 0, null, function* () {
3928
+ const url = generateContentUrl(options);
3929
+ const res = yield fetch2(url.href);
3930
+ const content = yield res.json();
3931
+ return content;
3932
+ });
3933
+ var _processContentResult = (_0, _1, ..._2) => __async5(void 0, [_0, _1, ..._2], function* (options, content, url = generateContentUrl(options)) {
3934
+ const canTrack = getDefaultCanTrack(options.canTrack);
3935
+ const isPreviewing2 = url.search.includes(`preview=`);
3936
+ if (TARGET === "rsc" && isPreviewing2) {
3937
+ const newResults = [];
3938
+ for (const item of content.results) {
3939
+ getPreviewContent(url.searchParams);
3940
+ newResults.push(item);
3941
+ }
3942
+ content.results = newResults;
3943
+ }
3944
+ if (!canTrack)
3945
+ return content;
3946
+ if (!(isBrowser() || TARGET === "reactNative"))
3947
+ return content;
3948
+ try {
3949
+ const newResults = [];
3950
+ for (const item of content.results) {
3951
+ newResults.push(yield handleABTesting({
3952
+ item,
3953
+ canTrack
3954
+ }));
3955
+ }
3956
+ content.results = newResults;
3957
+ } catch (e) {
3958
+ logger.error("Could not process A/B tests. ", e);
3959
+ }
3960
+ return content;
3961
+ });
3962
+ function fetchEntries(options) {
3963
+ return __async5(this, null, function* () {
3964
+ try {
3965
+ const url = generateContentUrl(options);
3966
+ const content = yield _fetchContent(options);
3967
+ if (!checkContentHasResults(content)) {
3968
+ logger.error("Error fetching data. ", {
3969
+ url,
3970
+ content,
3971
+ options
3972
+ });
3973
+ return null;
3974
+ }
3975
+ return _processContentResult(options, content);
3976
+ } catch (error) {
3977
+ logger.error("Error fetching data. ", error);
3978
+ return null;
3979
+ }
3980
+ });
3981
+ }
3982
+ var getAllContent = fetchEntries;
3983
+
3984
+ // src/functions/is-previewing.js
3985
+ function isPreviewing() {
3986
+ if (!isBrowser()) {
3987
+ return false;
3988
+ }
3989
+ if (isEditing()) {
3990
+ return false;
3991
+ }
3992
+ return Boolean(location.search.indexOf("builder.preview=") !== -1);
3993
+ }
3994
+
3995
+ // src/components/content/components/enable-editor.jsx
3996
+ var _tmpl$14 = /* @__PURE__ */ template(`<div>`);
3997
+ function EnableEditor(props) {
3998
+ const [canTrackToUse, setCanTrackToUse] = createSignal(checkIsDefined(props.canTrack) ? props.canTrack : true);
3999
+ const [forceReRenderCount, setForceReRenderCount] = createSignal(0);
4000
+ createSignal(0);
4001
+ const [shouldSendResetCookie, setShouldSendResetCookie] = createSignal(false);
4002
+ const [httpReqsData, setHttpReqsData] = createSignal({});
4003
+ const [clicked, setClicked] = createSignal(false);
4004
+ function mergeNewContent(newContent) {
4005
+ const newContentValue = {
4006
+ ...props.builderContextSignal.content,
4007
+ ...newContent,
4008
+ data: {
4009
+ ...props.builderContextSignal.content?.data,
4010
+ ...newContent?.data
4011
+ },
4012
+ meta: {
4013
+ ...props.builderContextSignal.content?.meta,
4014
+ ...newContent?.meta,
4015
+ breakpoints: newContent?.meta?.breakpoints || props.builderContextSignal.content?.meta?.breakpoints
4016
+ }
4017
+ };
4018
+ props.setBuilderContextSignal((PREVIOUS_VALUE) => ({
4019
+ ...PREVIOUS_VALUE,
4020
+ content: newContentValue
4021
+ }));
4022
+ }
4023
+ function processMessage(event) {
4024
+ const {
4025
+ data
4026
+ } = event;
4027
+ if (data) {
4028
+ switch (data.type) {
4029
+ case "builder.configureSdk": {
4030
+ const messageContent = data.data;
4031
+ const {
4032
+ breakpoints,
4033
+ contentId
4034
+ } = messageContent;
4035
+ if (!contentId || contentId !== props.builderContextSignal.content?.id) {
4036
+ return;
4037
+ }
4038
+ if (breakpoints) {
4039
+ mergeNewContent({
4040
+ meta: {
4041
+ breakpoints
4042
+ }
4043
+ });
4044
+ }
4045
+ setForceReRenderCount(forceReRenderCount() + 1);
4046
+ break;
4047
+ }
4048
+ case "builder.contentUpdate": {
4049
+ const messageContent = data.data;
4050
+ const key = messageContent.key || messageContent.alias || messageContent.entry || messageContent.modelName;
4051
+ const contentData = messageContent.data;
4052
+ if (key === props.model) {
4053
+ mergeNewContent(contentData);
4054
+ setForceReRenderCount(forceReRenderCount() + 1);
4055
+ }
4056
+ break;
4057
+ }
4058
+ }
4059
+ }
4060
+ }
4061
+ function evaluateJsCode() {
4062
+ const jsCode = props.builderContextSignal.content?.data?.jsCode;
4063
+ if (jsCode) {
4064
+ evaluate({
4065
+ code: jsCode,
4066
+ context: props.context || {},
4067
+ localState: void 0,
4068
+ rootState: props.builderContextSignal.rootState,
4069
+ rootSetState: props.builderContextSignal.rootSetState
4070
+ });
4071
+ }
4072
+ }
4073
+ function onClick(event) {
4074
+ if (props.builderContextSignal.content) {
4075
+ const variationId = props.builderContextSignal.content?.testVariationId;
4076
+ const contentId = props.builderContextSignal.content?.id;
4077
+ _track({
4078
+ type: "click",
4079
+ canTrack: canTrackToUse(),
4080
+ contentId,
4081
+ apiKey: props.apiKey,
4082
+ variationId: variationId !== contentId ? variationId : void 0,
4083
+ ...getInteractionPropertiesForEvent(event),
4084
+ unique: !clicked()
4085
+ });
4086
+ }
4087
+ if (!clicked()) {
4088
+ setClicked(true);
4089
+ }
4090
+ }
4091
+ function evalExpression(expression) {
4092
+ return expression.replace(/{{([^}]+)}}/g, (_match, group) => evaluate({
4093
+ code: group,
4094
+ context: props.context || {},
4095
+ localState: void 0,
4096
+ rootState: props.builderContextSignal.rootState,
4097
+ rootSetState: props.builderContextSignal.rootSetState
4098
+ }));
4099
+ }
4100
+ function handleRequest({
4101
+ url,
4102
+ key
4103
+ }) {
4104
+ fetch2(url).then((response) => response.json()).then((json) => {
4105
+ const newState = {
4106
+ ...props.builderContextSignal.rootState,
4107
+ [key]: json
4108
+ };
4109
+ props.builderContextSignal.rootSetState?.(newState);
4110
+ httpReqsData()[key] = true;
4111
+ }).catch((err) => {
4112
+ console.error("error fetching dynamic data", url, err);
4113
+ });
4114
+ }
4115
+ function runHttpRequests() {
4116
+ const requests = props.builderContextSignal.content?.data?.httpRequests ?? {};
4117
+ Object.entries(requests).forEach(([key, url]) => {
4118
+ if (url && (!httpReqsData()[key] || isEditing())) {
4119
+ const evaluatedUrl = evalExpression(url);
4120
+ handleRequest({
4121
+ url: evaluatedUrl,
4122
+ key
4123
+ });
4124
+ }
4125
+ });
4126
+ }
4127
+ function emitStateUpdate() {
4128
+ if (isEditing()) {
4129
+ window.dispatchEvent(new CustomEvent("builder:component:stateChange", {
4130
+ detail: {
4131
+ state: fastClone(props.builderContextSignal.rootState),
4132
+ ref: {
4133
+ name: props.model
4134
+ }
4135
+ }
4136
+ }));
4137
+ }
4138
+ }
4139
+ let elementRef;
4140
+ onMount(() => {
4141
+ if (!props.apiKey) {
4142
+ logger.error("No API key provided to `RenderContent` component. This can cause issues. Please provide an API key using the `apiKey` prop.");
4143
+ }
4144
+ if (isBrowser()) {
4145
+ if (isEditing()) {
4146
+ setForceReRenderCount(forceReRenderCount() + 1);
4147
+ window.addEventListener("message", processMessage);
4148
+ registerInsertMenu();
4149
+ setupBrowserForEditing({
4150
+ ...props.locale ? {
4151
+ locale: props.locale
4152
+ } : {},
4153
+ ...props.includeRefs ? {
4154
+ includeRefs: props.includeRefs
4155
+ } : {},
4156
+ ...props.enrich ? {
4157
+ enrich: props.enrich
4158
+ } : {}
4159
+ });
4160
+ Object.values(props.builderContextSignal.componentInfos).forEach((registeredComponent) => {
4161
+ const message = createRegisterComponentMessage(registeredComponent);
4162
+ window.parent?.postMessage(message, "*");
4163
+ });
4164
+ window.addEventListener("builder:component:stateChangeListenerActivated", emitStateUpdate);
4165
+ }
4166
+ if (props.builderContextSignal.content) {
4167
+ const variationId = props.builderContextSignal.content?.testVariationId;
4168
+ const contentId = props.builderContextSignal.content?.id;
4169
+ _track({
4170
+ type: "impression",
4171
+ canTrack: canTrackToUse(),
4172
+ contentId,
4173
+ apiKey: props.apiKey,
4174
+ variationId: variationId !== contentId ? variationId : void 0
4175
+ });
4176
+ }
4177
+ if (isPreviewing()) {
4178
+ const searchParams = new URL(location.href).searchParams;
4179
+ const searchParamPreviewModel = searchParams.get("builder.preview");
4180
+ const searchParamPreviewId = searchParams.get(`builder.preview.${searchParamPreviewModel}`);
4181
+ const previewApiKey = searchParams.get("apiKey") || searchParams.get("builder.space");
4182
+ if (searchParamPreviewModel === props.model && previewApiKey === props.apiKey && (!props.content || searchParamPreviewId === props.content.id)) {
4183
+ fetchOneEntry({
4184
+ model: props.model,
4185
+ apiKey: props.apiKey,
4186
+ apiVersion: props.builderContextSignal.apiVersion
4187
+ }).then((content) => {
4188
+ if (content) {
4189
+ mergeNewContent(content);
4190
+ }
4191
+ });
4192
+ }
4193
+ }
4194
+ evaluateJsCode();
4195
+ runHttpRequests();
4196
+ emitStateUpdate();
4197
+ }
4198
+ });
4199
+ function onUpdateFn_0() {
4200
+ if (props.content) {
4201
+ mergeNewContent(props.content);
4202
+ }
4203
+ }
4204
+ createEffect(on(() => [props.content], onUpdateFn_0));
4205
+ function onUpdateFn_1() {
4206
+ }
4207
+ createEffect(on(() => [shouldSendResetCookie()], onUpdateFn_1));
4208
+ function onUpdateFn_2() {
4209
+ evaluateJsCode();
4210
+ }
4211
+ createEffect(on(() => [props.builderContextSignal.content?.data?.jsCode, props.builderContextSignal.rootState], onUpdateFn_2));
4212
+ function onUpdateFn_3() {
4213
+ runHttpRequests();
4214
+ }
4215
+ createEffect(on(() => [props.builderContextSignal.content?.data?.httpRequests], onUpdateFn_3));
4216
+ function onUpdateFn_4() {
4217
+ emitStateUpdate();
4218
+ }
4219
+ createEffect(on(() => [props.builderContextSignal.rootState], onUpdateFn_4));
4220
+ return createComponent(stdin_default.Provider, {
4221
+ get value() {
4222
+ return props.builderContextSignal;
4223
+ },
4224
+ get children() {
4225
+ return createComponent(Show, {
4226
+ get when() {
4227
+ return props.builderContextSignal.content;
4228
+ },
4229
+ get children() {
4230
+ const _el$ = _tmpl$14();
4231
+ _el$.$$click = (event) => onClick(event);
4232
+ const _ref$ = elementRef;
4233
+ typeof _ref$ === "function" ? use(_ref$, _el$) : elementRef = _el$;
4234
+ spread(_el$, mergeProps({
4235
+ get ["class"]() {
4236
+ return props.classNameProp;
4237
+ },
4238
+ get key() {
4239
+ return forceReRenderCount();
4240
+ },
4241
+ get ["builder-content-id"]() {
4242
+ return props.builderContextSignal.content?.id;
4243
+ },
4244
+ get ["builder-model"]() {
4245
+ return props.model;
4246
+ }
4247
+ }, {}, () => props.showContent ? {} : {
4248
+ hidden: true,
4249
+ "aria-hidden": true
4250
+ }), false, true);
4251
+ insert(_el$, () => props.children);
4252
+ return _el$;
4253
+ }
4254
+ });
4255
+ }
4256
+ });
4257
+ }
4258
+ var enable_editor_default = EnableEditor;
4259
+ delegateEvents(["click"]);
4260
+ var _tmpl$15 = /* @__PURE__ */ template(`<script>`);
4261
+ function InlinedScript(props) {
4262
+ return (() => {
4263
+ const _el$ = _tmpl$15();
4264
+ effect((_p$) => {
4265
+ const _v$ = props.scriptStr, _v$2 = props.id;
4266
+ _v$ !== _p$._v$ && (_el$.innerHTML = _p$._v$ = _v$);
4267
+ _v$2 !== _p$._v$2 && setAttribute(_el$, "id", _p$._v$2 = _v$2);
4268
+ return _p$;
4269
+ }, {
4270
+ _v$: void 0,
4271
+ _v$2: void 0
4272
+ });
4273
+ return _el$;
4274
+ })();
4275
+ }
4276
+ var inlined_script_default = InlinedScript;
4277
+
4278
+ // src/components/content/content.jsx
4279
+ function ContentComponent(props) {
4280
+ const [scriptStr, setScriptStr] = createSignal(getRenderContentScriptString({
4281
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
4282
+ variationId: props.content?.testVariationId,
4283
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
4284
+ contentId: props.content?.id
4285
+ }));
4286
+ const [registeredComponents, setRegisteredComponents] = createSignal([
4287
+ ...getDefaultRegisteredComponents(),
4288
+ // While this `components` object is deprecated, we must maintain support for it.
4289
+ // Since users are able to override our default components, we need to make sure that we do not break such
4290
+ // existing usage.
4291
+ // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
4292
+ // which is the new standard way of providing custom components, and must therefore take precedence.
4293
+ ...components,
4294
+ ...props.customComponents || []
4295
+ ].reduce((acc, {
4296
+ component,
4297
+ ...info
4298
+ }) => ({
4299
+ ...acc,
4300
+ [info.name]: {
4301
+ component,
4302
+ ...serializeComponentInfo(info)
4303
+ }
4304
+ }), {}));
4305
+ const [builderContextSignal, setBuilderContextSignal] = createSignal({
4306
+ content: getContentInitialValue({
4307
+ content: props.content,
4308
+ data: props.data
4309
+ }),
4310
+ localState: void 0,
4311
+ rootState: getContextStateInitialValue({
4312
+ content: props.content,
4313
+ data: props.data,
4314
+ locale: props.locale
4315
+ }),
4316
+ rootSetState: contentSetState,
4317
+ context: props.context || {},
4318
+ apiKey: props.apiKey,
4319
+ apiVersion: props.apiVersion,
4320
+ componentInfos: [
4321
+ ...getDefaultRegisteredComponents(),
4322
+ // While this `components` object is deprecated, we must maintain support for it.
4323
+ // Since users are able to override our default components, we need to make sure that we do not break such
4324
+ // existing usage.
4325
+ // This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
4326
+ // which is the new standard way of providing custom components, and must therefore take precedence.
4327
+ ...components,
4328
+ ...props.customComponents || []
4329
+ ].reduce((acc, {
4330
+ component: _,
4331
+ ...info
4332
+ }) => ({
4333
+ ...acc,
4334
+ [info.name]: serializeComponentInfo(info)
4335
+ }), {}),
4336
+ inheritedStyles: {}
4337
+ });
4338
+ function contentSetState(newRootState) {
4339
+ setBuilderContextSignal((PREVIOUS_VALUE) => ({
4340
+ ...PREVIOUS_VALUE,
4341
+ rootState: newRootState
4342
+ }));
4343
+ }
4344
+ return createComponent(stdin_default2.Provider, {
4345
+ get value() {
4346
+ return {
4347
+ registeredComponents: registeredComponents()
4348
+ };
4349
+ },
4350
+ get children() {
4351
+ return createComponent(enable_editor_default, mergeProps({
4352
+ get content() {
4353
+ return props.content;
4354
+ },
4355
+ get model() {
4356
+ return props.model;
4357
+ },
4358
+ get context() {
4359
+ return props.context;
4360
+ },
4361
+ get apiKey() {
4362
+ return props.apiKey;
4363
+ },
4364
+ get canTrack() {
4365
+ return props.canTrack;
4366
+ },
4367
+ get locale() {
4368
+ return props.locale;
4369
+ },
4370
+ get includeRefs() {
4371
+ return props.includeRefs;
4372
+ },
4373
+ get enrich() {
4374
+ return props.enrich;
4375
+ },
4376
+ get classNameProp() {
4377
+ return props.classNameProp;
4378
+ },
4379
+ get showContent() {
4380
+ return props.showContent;
4381
+ },
4382
+ get builderContextSignal() {
4383
+ return builderContextSignal();
4384
+ }
4385
+ }, {
4386
+ setBuilderContextSignal
4387
+ }, {
4388
+ get children() {
4389
+ return [createComponent(Show, {
4390
+ get when() {
4391
+ return props.isSsrAbTest;
4392
+ },
4393
+ get children() {
4394
+ return createComponent(inlined_script_default, {
4395
+ get scriptStr() {
4396
+ return scriptStr();
4397
+ }
4398
+ });
4399
+ }
4400
+ }), createComponent(Show, {
4401
+ when: TARGET !== "reactNative",
4402
+ get children() {
4403
+ return createComponent(styles_default, {
4404
+ get contentId() {
4405
+ return builderContextSignal().content?.id;
4406
+ },
4407
+ get cssCode() {
4408
+ return builderContextSignal().content?.data?.cssCode;
4409
+ },
4410
+ get customFonts() {
4411
+ return builderContextSignal().content?.data?.customFonts;
4412
+ }
4413
+ });
4414
+ }
4415
+ }), createComponent(blocks_default, {
4416
+ get blocks() {
4417
+ return builderContextSignal().content?.data?.blocks;
4418
+ },
4419
+ get context() {
4420
+ return builderContextSignal();
4421
+ },
4422
+ get registeredComponents() {
4423
+ return registeredComponents();
4424
+ }
4425
+ })];
4426
+ }
4427
+ }));
4428
+ }
4429
+ });
4430
+ }
4431
+ var content_default = ContentComponent;
4432
+
4433
+ // src/components/content-variants/content-variants.jsx
4434
+ function ContentVariants(props) {
4435
+ const [shouldRenderVariants, setShouldRenderVariants] = createSignal(checkShouldRunVariants({
4436
+ canTrack: getDefaultCanTrack(props.canTrack),
4437
+ content: props.content
4438
+ }));
4439
+ function variantScriptStr() {
4440
+ return getVariantsScriptString(getVariants(props.content).map((value) => ({
4441
+ id: value.testVariationId,
4442
+ testRatio: value.testRatio
4443
+ })), props.content?.id || "");
4444
+ }
4445
+ function hideVariantsStyleString() {
4446
+ return getVariants(props.content).map((value) => `.variant-${value.testVariationId} { display: none; } `).join("");
4447
+ }
4448
+ function defaultContent() {
4449
+ return shouldRenderVariants() ? {
4450
+ ...props.content,
4451
+ testVariationId: props.content?.id
4452
+ } : handleABTestingSync({
4453
+ item: props.content,
4454
+ canTrack: getDefaultCanTrack(props.canTrack)
4455
+ });
4456
+ }
4457
+ onMount(() => {
4458
+ });
4459
+ return [createComponent(Show, {
4460
+ get when() {
4461
+ return !props.__isNestedRender && TARGET !== "reactNative";
4462
+ },
4463
+ get children() {
4464
+ return createComponent(inlined_script_default, {
4465
+ get scriptStr() {
4466
+ return getScriptString();
4467
+ }
4468
+ });
4469
+ }
4470
+ }), createComponent(Show, {
4471
+ get when() {
4472
+ return shouldRenderVariants();
4473
+ },
4474
+ get children() {
4475
+ return [createComponent(inlined_styles_default, {
4476
+ get id() {
4477
+ return `variants-styles-${props.content?.id}`;
4478
+ },
4479
+ get styles() {
4480
+ return hideVariantsStyleString();
4481
+ }
4482
+ }), createComponent(inlined_script_default, {
4483
+ get scriptStr() {
4484
+ return variantScriptStr();
4485
+ }
4486
+ }), createComponent(For, {
4487
+ get each() {
4488
+ return getVariants(props.content);
4489
+ },
4490
+ children: (variant, _index) => {
4491
+ _index();
4492
+ return createComponent(content_default, {
4493
+ get key() {
4494
+ return variant.testVariationId;
4495
+ },
4496
+ content: variant,
4497
+ showContent: false,
4498
+ classNameProp: void 0,
4499
+ get model() {
4500
+ return props.model;
4501
+ },
4502
+ get data() {
4503
+ return props.data;
4504
+ },
4505
+ get context() {
4506
+ return props.context;
4507
+ },
4508
+ get apiKey() {
4509
+ return props.apiKey;
4510
+ },
4511
+ get apiVersion() {
4512
+ return props.apiVersion;
4513
+ },
4514
+ get customComponents() {
4515
+ return props.customComponents;
4516
+ },
4517
+ get canTrack() {
4518
+ return props.canTrack;
4519
+ },
4520
+ get locale() {
4521
+ return props.locale;
4522
+ },
4523
+ get includeRefs() {
4524
+ return props.includeRefs;
4525
+ },
4526
+ get enrich() {
4527
+ return props.enrich;
4528
+ },
4529
+ get isSsrAbTest() {
4530
+ return shouldRenderVariants();
4531
+ }
4532
+ });
4533
+ }
4534
+ })];
4535
+ }
4536
+ }), createComponent(content_default, mergeProps({}, {
4537
+ get content() {
4538
+ return defaultContent();
4539
+ },
4540
+ get classNameProp() {
4541
+ return `variant-${props.content?.id}`;
4542
+ },
4543
+ showContent: true,
4544
+ get model() {
4545
+ return props.model;
4546
+ },
4547
+ get data() {
4548
+ return props.data;
4549
+ },
4550
+ get context() {
4551
+ return props.context;
4552
+ },
4553
+ get apiKey() {
4554
+ return props.apiKey;
4555
+ },
4556
+ get apiVersion() {
4557
+ return props.apiVersion;
4558
+ },
4559
+ get customComponents() {
4560
+ return props.customComponents;
4561
+ },
4562
+ get canTrack() {
4563
+ return props.canTrack;
4564
+ },
4565
+ get locale() {
4566
+ return props.locale;
4567
+ },
4568
+ get includeRefs() {
4569
+ return props.includeRefs;
4570
+ },
4571
+ get enrich() {
4572
+ return props.enrich;
4573
+ },
4574
+ get isSsrAbTest() {
4575
+ return shouldRenderVariants();
4576
+ }
4577
+ }))];
4578
+ }
4579
+ var content_variants_default = ContentVariants;
4580
+
4581
+ // src/blocks/symbol/symbol.helpers.js
4582
+ var __defProp17 = Object.defineProperty;
4583
+ var __getOwnPropSymbols17 = Object.getOwnPropertySymbols;
4584
+ var __hasOwnProp17 = Object.prototype.hasOwnProperty;
4585
+ var __propIsEnum17 = Object.prototype.propertyIsEnumerable;
4586
+ var __defNormalProp17 = (obj, key, value) => key in obj ? __defProp17(obj, key, {
4587
+ enumerable: true,
4588
+ configurable: true,
4589
+ writable: true,
4590
+ value
4591
+ }) : obj[key] = value;
4592
+ var __spreadValues17 = (a, b) => {
4593
+ for (var prop in b || (b = {}))
4594
+ if (__hasOwnProp17.call(b, prop))
4595
+ __defNormalProp17(a, prop, b[prop]);
4596
+ if (__getOwnPropSymbols17)
4597
+ for (var prop of __getOwnPropSymbols17(b)) {
4598
+ if (__propIsEnum17.call(b, prop))
4599
+ __defNormalProp17(a, prop, b[prop]);
4600
+ }
4601
+ return a;
4602
+ };
4603
+ var __async6 = (__this, __arguments, generator) => {
4604
+ return new Promise((resolve, reject) => {
4605
+ var fulfilled = (value) => {
4606
+ try {
4607
+ step(generator.next(value));
4608
+ } catch (e) {
4609
+ reject(e);
4610
+ }
4611
+ };
4612
+ var rejected = (value) => {
4613
+ try {
4614
+ step(generator.throw(value));
4615
+ } catch (e) {
4616
+ reject(e);
4617
+ }
4618
+ };
4619
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
4620
+ step((generator = generator.apply(__this, __arguments)).next());
4621
+ });
4622
+ };
4623
+ var fetchSymbolContent = (_0) => __async6(void 0, [_0], function* ({
4624
+ builderContextValue,
4625
+ symbol
4626
+ }) {
4627
+ if ((symbol == null ? void 0 : symbol.model) && (builderContextValue == null ? void 0 : builderContextValue.apiKey)) {
4628
+ return fetchOneEntry(__spreadValues17({
4629
+ model: symbol.model,
4630
+ apiKey: builderContextValue.apiKey,
4631
+ apiVersion: builderContextValue.apiVersion
4632
+ }, (symbol == null ? void 0 : symbol.entry) && {
4633
+ query: {
4634
+ id: symbol.entry
4635
+ }
4636
+ })).catch((err) => {
4637
+ logger.error("Could not fetch symbol content: ", err);
4638
+ return void 0;
4639
+ });
4640
+ }
4641
+ return void 0;
4642
+ });
4643
+
4644
+ // src/blocks/symbol/symbol.jsx
4645
+ var _tmpl$16 = /* @__PURE__ */ template(`<div>`);
4646
+ function Symbol(props) {
4647
+ const [contentToUse, setContentToUse] = createSignal(props.symbol?.content);
4648
+ function className() {
4649
+ return [...[props.attributes.class], "builder-symbol", props.symbol?.inline ? "builder-inline-symbol" : void 0, props.symbol?.dynamic || props.dynamic ? "builder-dynamic-symbol" : void 0].filter(Boolean).join(" ");
4650
+ }
4651
+ function setContent() {
4652
+ if (contentToUse())
4653
+ return;
4654
+ fetchSymbolContent({
4655
+ symbol: props.symbol,
4656
+ builderContextValue: props.builderContext
4657
+ }).then((newContent) => {
4658
+ if (newContent) {
4659
+ setContentToUse(newContent);
4660
+ }
4661
+ });
4662
+ }
4663
+ onMount(() => {
4664
+ setContent();
4665
+ });
4666
+ function onUpdateFn_0() {
4667
+ setContent();
4668
+ }
4669
+ createEffect(on(() => [props.symbol], onUpdateFn_0));
4670
+ return (() => {
4671
+ const _el$ = _tmpl$16();
4672
+ spread(_el$, mergeProps({
4673
+ get ["class"]() {
4674
+ return className();
4675
+ }
4676
+ }, {}, () => props.attributes, {}), false, true);
4677
+ insert(_el$, createComponent(content_variants_default, {
4678
+ __isNestedRender: true,
4679
+ get apiVersion() {
4680
+ return props.builderContext.apiVersion;
4681
+ },
4682
+ get apiKey() {
4683
+ return props.builderContext.apiKey;
4684
+ },
4685
+ get context() {
4686
+ return props.builderContext.context;
4687
+ },
4688
+ get customComponents() {
4689
+ return Object.values(props.builderComponents);
4690
+ },
4691
+ get data() {
4692
+ return {
4693
+ ...props.symbol?.data,
4694
+ ...props.builderContext.localState,
4695
+ ...contentToUse()?.data?.state
4696
+ };
4697
+ },
4698
+ get model() {
4699
+ return props.symbol?.model;
4700
+ },
4701
+ get content() {
4702
+ return contentToUse();
4703
+ }
4704
+ }));
4705
+ return _el$;
4706
+ })();
4707
+ }
4708
+ var symbol_default = Symbol;
4709
+
4710
+ // src/index-helpers/blocks-exports.js
4711
+ var RenderBlocks = blocks_default;
4712
+ var RenderContent = content_variants_default;
4713
+
4714
+ // src/functions/set-editor-settings.js
4715
+ var settings = {};
4716
+ function setEditorSettings(newSettings) {
4717
+ if (isBrowser()) {
4718
+ Object.assign(settings, newSettings);
4719
+ const message = {
4720
+ type: "builder.settingsChange",
4721
+ data: settings
4722
+ };
4723
+ parent.postMessage(message, "*");
4724
+ }
4725
+ }
4726
+
4727
+ // src/functions/fetch-builder-props.js
4728
+ var __defProp18 = Object.defineProperty;
4729
+ var __defProps12 = Object.defineProperties;
4730
+ var __getOwnPropDescs12 = Object.getOwnPropertyDescriptors;
4731
+ var __getOwnPropSymbols18 = Object.getOwnPropertySymbols;
4732
+ var __hasOwnProp18 = Object.prototype.hasOwnProperty;
4733
+ var __propIsEnum18 = Object.prototype.propertyIsEnumerable;
4734
+ var __defNormalProp18 = (obj, key, value) => key in obj ? __defProp18(obj, key, {
4735
+ enumerable: true,
4736
+ configurable: true,
4737
+ writable: true,
4738
+ value
4739
+ }) : obj[key] = value;
4740
+ var __spreadValues18 = (a, b) => {
4741
+ for (var prop in b || (b = {}))
4742
+ if (__hasOwnProp18.call(b, prop))
4743
+ __defNormalProp18(a, prop, b[prop]);
4744
+ if (__getOwnPropSymbols18)
4745
+ for (var prop of __getOwnPropSymbols18(b)) {
4746
+ if (__propIsEnum18.call(b, prop))
4747
+ __defNormalProp18(a, prop, b[prop]);
4748
+ }
4749
+ return a;
4750
+ };
4751
+ var __spreadProps12 = (a, b) => __defProps12(a, __getOwnPropDescs12(b));
4752
+ var __async7 = (__this, __arguments, generator) => {
4753
+ return new Promise((resolve, reject) => {
4754
+ var fulfilled = (value) => {
4755
+ try {
4756
+ step(generator.next(value));
4757
+ } catch (e) {
4758
+ reject(e);
4759
+ }
4760
+ };
4761
+ var rejected = (value) => {
4762
+ try {
4763
+ step(generator.throw(value));
4764
+ } catch (e) {
4765
+ reject(e);
4766
+ }
4767
+ };
4768
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
4769
+ step((generator = generator.apply(__this, __arguments)).next());
4770
+ });
4771
+ };
4772
+ var fetchBuilderProps = (_args) => __async7(void 0, null, function* () {
4773
+ var _a, _b, _c;
4774
+ const urlPath = _args.path || ((_a = _args.url) == null ? void 0 : _a.pathname) || ((_b = _args.userAttributes) == null ? void 0 : _b.urlPath);
4775
+ const getContentArgs = __spreadProps12(__spreadValues18({}, _args), {
4776
+ apiKey: _args.apiKey,
4777
+ model: _args.model || "page",
4778
+ userAttributes: __spreadValues18(__spreadValues18({}, _args.userAttributes), urlPath ? {
4779
+ urlPath
4780
+ } : {}),
4781
+ options: getBuilderSearchParams(_args.searchParams || ((_c = _args.url) == null ? void 0 : _c.searchParams) || _args.options)
4782
+ });
4783
+ return {
4784
+ apiKey: getContentArgs.apiKey,
4785
+ model: getContentArgs.model,
4786
+ content: yield fetchOneEntry(getContentArgs)
4787
+ };
4788
+ });
4789
+
4790
+ export { blocks_default as Blocks, button_default as Button, columns_default as Columns, content_variants_default as Content, fragment_default as Fragment, image_default as Image, RenderBlocks, RenderContent, section_default as Section, symbol_default as Symbol, text_default as Text, video_default as Video, _processContentResult, createRegisterComponentMessage, fetchBuilderProps, fetchEntries, fetchOneEntry, getAllContent, getBuilderSearchParams, getContent, isEditing, isPreviewing, register, setEditorSettings, track };