@builder.io/sdk-qwik 0.18.1 → 0.18.4

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 (40) hide show
  1. package/lib/browser/blocks/custom-code/custom-code.qwik.cjs +49 -31
  2. package/lib/browser/blocks/custom-code/custom-code.qwik.mjs +51 -33
  3. package/lib/browser/blocks/embed/embed.qwik.cjs +2 -1
  4. package/lib/browser/blocks/embed/embed.qwik.mjs +2 -1
  5. package/lib/browser/components/content/components/enable-editor.qwik.cjs +18 -8
  6. package/lib/browser/components/content/components/enable-editor.qwik.mjs +18 -8
  7. package/lib/browser/components/content-variants/helpers.qwik.cjs +2 -1
  8. package/lib/browser/components/content-variants/helpers.qwik.mjs +2 -1
  9. package/lib/browser/components/content-variants/inlined-fns.qwik.cjs +1 -1
  10. package/lib/browser/components/content-variants/inlined-fns.qwik.mjs +1 -1
  11. package/lib/browser/constants/sdk-version.qwik.cjs +1 -1
  12. package/lib/browser/constants/sdk-version.qwik.mjs +1 -1
  13. package/lib/edge/blocks/custom-code/custom-code.qwik.cjs +49 -31
  14. package/lib/edge/blocks/custom-code/custom-code.qwik.mjs +51 -33
  15. package/lib/edge/blocks/embed/embed.qwik.cjs +2 -1
  16. package/lib/edge/blocks/embed/embed.qwik.mjs +2 -1
  17. package/lib/edge/components/content/components/enable-editor.qwik.cjs +18 -8
  18. package/lib/edge/components/content/components/enable-editor.qwik.mjs +18 -8
  19. package/lib/edge/components/content-variants/helpers.qwik.cjs +2 -1
  20. package/lib/edge/components/content-variants/helpers.qwik.mjs +2 -1
  21. package/lib/edge/components/content-variants/inlined-fns.qwik.cjs +1 -1
  22. package/lib/edge/components/content-variants/inlined-fns.qwik.mjs +1 -1
  23. package/lib/edge/constants/sdk-version.qwik.cjs +1 -1
  24. package/lib/edge/constants/sdk-version.qwik.mjs +1 -1
  25. package/lib/node/blocks/custom-code/custom-code.qwik.cjs +49 -31
  26. package/lib/node/blocks/custom-code/custom-code.qwik.mjs +51 -33
  27. package/lib/node/blocks/embed/embed.qwik.cjs +2 -1
  28. package/lib/node/blocks/embed/embed.qwik.mjs +2 -1
  29. package/lib/node/components/content/components/enable-editor.qwik.cjs +18 -8
  30. package/lib/node/components/content/components/enable-editor.qwik.mjs +18 -8
  31. package/lib/node/components/content-variants/helpers.qwik.cjs +2 -1
  32. package/lib/node/components/content-variants/helpers.qwik.mjs +2 -1
  33. package/lib/node/components/content-variants/inlined-fns.qwik.cjs +1 -1
  34. package/lib/node/components/content-variants/inlined-fns.qwik.mjs +1 -1
  35. package/lib/node/constants/sdk-version.qwik.cjs +1 -1
  36. package/lib/node/constants/sdk-version.qwik.mjs +1 -1
  37. package/package.json +1 -1
  38. package/types/src/blocks/custom-code/custom-code.d.ts +1 -0
  39. package/types/src/components/content-variants/inlined-fns.d.ts +1 -1
  40. package/types/src/constants/sdk-version.d.ts +1 -1
@@ -1,43 +1,60 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const qwik = require("@builder.io/qwik");
4
+ const isEditing = require("../../functions/is-editing.qwik.cjs");
5
+ const logger = require("../../helpers/logger.qwik.cjs");
6
+ const runScripts = function runScripts2(props, state, elementRef) {
7
+ if (!elementRef.value || !elementRef.value.getElementsByTagName || typeof window === "undefined")
8
+ return;
9
+ const scripts = elementRef.value.getElementsByTagName("script");
10
+ for (let i = 0; i < scripts.length; i++) {
11
+ const script = scripts[i];
12
+ if (script.src) {
13
+ if (state.scriptsInserted.includes(script.src))
14
+ continue;
15
+ state.scriptsInserted.push(script.src);
16
+ const newScript = document.createElement("script");
17
+ newScript.async = true;
18
+ newScript.src = script.src;
19
+ document.head.appendChild(newScript);
20
+ } else if (!script.type || [
21
+ "text/javascript",
22
+ "application/javascript",
23
+ "application/ecmascript"
24
+ ].includes(script.type)) {
25
+ if (state.scriptsRun.includes(script.innerText))
26
+ continue;
27
+ try {
28
+ state.scriptsRun.push(script.innerText);
29
+ new Function(script.innerText)();
30
+ } catch (error) {
31
+ logger.logger.warn("[BUILDER.IO] `CustomCode`: Error running script:", error);
32
+ }
33
+ }
34
+ }
35
+ };
4
36
  const CustomCode = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
5
37
  const elementRef = qwik.useSignal();
6
38
  const state = qwik.useStore({
7
39
  scriptsInserted: [],
8
40
  scriptsRun: []
9
41
  });
10
- qwik.useOn("readystatechange", /* @__PURE__ */ qwik.inlinedQrl((event, element) => {
11
- const [state2] = qwik.useLexicalScope();
12
- if (!(element == null ? void 0 : element.getElementsByTagName) || typeof window === "undefined")
13
- return;
14
- const scripts = element.getElementsByTagName("script");
15
- for (let i = 0; i < scripts.length; i++) {
16
- const script = scripts[i];
17
- if (script.src) {
18
- if (state2.scriptsInserted.includes(script.src))
19
- continue;
20
- state2.scriptsInserted.push(script.src);
21
- const newScript = document.createElement("script");
22
- newScript.async = true;
23
- newScript.src = script.src;
24
- document.head.appendChild(newScript);
25
- } else if (!script.type || [
26
- "text/javascript",
27
- "application/javascript",
28
- "application/ecmascript"
29
- ].includes(script.type)) {
30
- if (state2.scriptsRun.includes(script.innerText))
31
- continue;
32
- try {
33
- state2.scriptsRun.push(script.innerText);
34
- new Function(script.innerText)();
35
- } catch (error) {
36
- console.warn("`CustomCode`: Error running script:", error);
37
- }
38
- }
39
- }
40
- }, "CustomCode_component_useOn_zjAgBhFOiCs", [
42
+ qwik.useVisibleTaskQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
43
+ const [elementRef2, props2, state2] = qwik.useLexicalScope();
44
+ runScripts(props2, state2, elementRef2);
45
+ }, "CustomCode_component_useVisibleTask_S5QgEQZj6YE", [
46
+ elementRef,
47
+ props,
48
+ state
49
+ ]));
50
+ qwik.useVisibleTaskQrl(/* @__PURE__ */ qwik.inlinedQrl(({ track }) => {
51
+ const [elementRef2, props2, state2] = qwik.useLexicalScope();
52
+ track(() => props2.code);
53
+ if (isEditing.isEditing())
54
+ runScripts(props2, state2, elementRef2);
55
+ }, "CustomCode_component_useVisibleTask_1_Re102EQisCE", [
56
+ elementRef,
57
+ props,
41
58
  state
42
59
  ]));
43
60
  return /* @__PURE__ */ qwik._jsxQ("div", {
@@ -53,3 +70,4 @@ const CustomCode = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inline
53
70
  }, "CustomCode_component_uYOSy7w7Zqw"));
54
71
  exports.CustomCode = CustomCode;
55
72
  exports.default = CustomCode;
73
+ exports.runScripts = runScripts;
@@ -1,41 +1,58 @@
1
- import { componentQrl, inlinedQrl, useSignal, useStore, useOn, useLexicalScope, _jsxQ, _fnSignal } from "@builder.io/qwik";
1
+ import { componentQrl, inlinedQrl, useSignal, useStore, useVisibleTaskQrl, useLexicalScope, _jsxQ, _fnSignal } from "@builder.io/qwik";
2
+ import { isEditing } from "../../functions/is-editing.qwik.mjs";
3
+ import { logger } from "../../helpers/logger.qwik.mjs";
4
+ const runScripts = function runScripts2(props, state, elementRef) {
5
+ if (!elementRef.value || !elementRef.value.getElementsByTagName || typeof window === "undefined")
6
+ return;
7
+ const scripts = elementRef.value.getElementsByTagName("script");
8
+ for (let i = 0; i < scripts.length; i++) {
9
+ const script = scripts[i];
10
+ if (script.src) {
11
+ if (state.scriptsInserted.includes(script.src))
12
+ continue;
13
+ state.scriptsInserted.push(script.src);
14
+ const newScript = document.createElement("script");
15
+ newScript.async = true;
16
+ newScript.src = script.src;
17
+ document.head.appendChild(newScript);
18
+ } else if (!script.type || [
19
+ "text/javascript",
20
+ "application/javascript",
21
+ "application/ecmascript"
22
+ ].includes(script.type)) {
23
+ if (state.scriptsRun.includes(script.innerText))
24
+ continue;
25
+ try {
26
+ state.scriptsRun.push(script.innerText);
27
+ new Function(script.innerText)();
28
+ } catch (error) {
29
+ logger.warn("[BUILDER.IO] `CustomCode`: Error running script:", error);
30
+ }
31
+ }
32
+ }
33
+ };
2
34
  const CustomCode = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
3
35
  const elementRef = useSignal();
4
36
  const state = useStore({
5
37
  scriptsInserted: [],
6
38
  scriptsRun: []
7
39
  });
8
- useOn("readystatechange", /* @__PURE__ */ inlinedQrl((event, element) => {
9
- const [state2] = useLexicalScope();
10
- if (!(element == null ? void 0 : element.getElementsByTagName) || typeof window === "undefined")
11
- return;
12
- const scripts = element.getElementsByTagName("script");
13
- for (let i = 0; i < scripts.length; i++) {
14
- const script = scripts[i];
15
- if (script.src) {
16
- if (state2.scriptsInserted.includes(script.src))
17
- continue;
18
- state2.scriptsInserted.push(script.src);
19
- const newScript = document.createElement("script");
20
- newScript.async = true;
21
- newScript.src = script.src;
22
- document.head.appendChild(newScript);
23
- } else if (!script.type || [
24
- "text/javascript",
25
- "application/javascript",
26
- "application/ecmascript"
27
- ].includes(script.type)) {
28
- if (state2.scriptsRun.includes(script.innerText))
29
- continue;
30
- try {
31
- state2.scriptsRun.push(script.innerText);
32
- new Function(script.innerText)();
33
- } catch (error) {
34
- console.warn("`CustomCode`: Error running script:", error);
35
- }
36
- }
37
- }
38
- }, "CustomCode_component_useOn_zjAgBhFOiCs", [
40
+ useVisibleTaskQrl(/* @__PURE__ */ inlinedQrl(() => {
41
+ const [elementRef2, props2, state2] = useLexicalScope();
42
+ runScripts(props2, state2, elementRef2);
43
+ }, "CustomCode_component_useVisibleTask_S5QgEQZj6YE", [
44
+ elementRef,
45
+ props,
46
+ state
47
+ ]));
48
+ useVisibleTaskQrl(/* @__PURE__ */ inlinedQrl(({ track }) => {
49
+ const [elementRef2, props2, state2] = useLexicalScope();
50
+ track(() => props2.code);
51
+ if (isEditing())
52
+ runScripts(props2, state2, elementRef2);
53
+ }, "CustomCode_component_useVisibleTask_1_Re102EQisCE", [
54
+ elementRef,
55
+ props,
39
56
  state
40
57
  ]));
41
58
  return /* @__PURE__ */ _jsxQ("div", {
@@ -51,5 +68,6 @@ const CustomCode = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
51
68
  }, "CustomCode_component_uYOSy7w7Zqw"));
52
69
  export {
53
70
  CustomCode,
54
- CustomCode as default
71
+ CustomCode as default,
72
+ runScripts
55
73
  };
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const qwik = require("@builder.io/qwik");
4
+ const logger = require("../../helpers/logger.qwik.cjs");
4
5
  const helpers = require("./helpers.qwik.cjs");
5
6
  const findAndRunScripts = function findAndRunScripts2(props, state, elem) {
6
7
  if (!elem.value || !elem.value.getElementsByTagName)
@@ -19,7 +20,7 @@ const findAndRunScripts = function findAndRunScripts2(props, state, elem) {
19
20
  state.scriptsRun.push(script.innerText);
20
21
  new Function(script.innerText)();
21
22
  } catch (error) {
22
- console.warn("`Embed`: Error running script:", error);
23
+ logger.logger.warn("[BUILDER.IO] `Embed`: Error running script:", error);
23
24
  }
24
25
  }
25
26
  };
@@ -1,4 +1,5 @@
1
1
  import { componentQrl, inlinedQrl, useSignal, useStore, useTaskQrl, useLexicalScope, _jsxQ, _fnSignal } from "@builder.io/qwik";
2
+ import { logger } from "../../helpers/logger.qwik.mjs";
2
3
  import { isJsScript } from "./helpers.qwik.mjs";
3
4
  const findAndRunScripts = function findAndRunScripts2(props, state, elem) {
4
5
  if (!elem.value || !elem.value.getElementsByTagName)
@@ -17,7 +18,7 @@ const findAndRunScripts = function findAndRunScripts2(props, state, elem) {
17
18
  state.scriptsRun.push(script.innerText);
18
19
  new Function(script.innerText)();
19
20
  } catch (error) {
20
- console.warn("`Embed`: Error running script:", error);
21
+ logger.warn("[BUILDER.IO] `Embed`: Error running script:", error);
21
22
  }
22
23
  }
23
24
  };
@@ -14,6 +14,7 @@ const registerComponent = require("../../../functions/register-component.qwik.cj
14
14
  const index$1 = require("../../../functions/track/index.qwik.cjs");
15
15
  const interaction = require("../../../functions/track/interaction.qwik.cjs");
16
16
  const canTrack = require("../../../helpers/canTrack.qwik.cjs");
17
+ const cookie = require("../../../helpers/cookie.qwik.cjs");
17
18
  const subscribeToEditor = require("../../../helpers/subscribe-to-editor.qwik.cjs");
18
19
  const initEditing = require("../../../scripts/init-editing.qwik.cjs");
19
20
  const animator = require("../../block/animator.qwik.cjs");
@@ -153,6 +154,7 @@ const EnableEditor = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inli
153
154
  const state = qwik.useStore({
154
155
  ContentWrapper: props.contentWrapper || "div",
155
156
  clicked: false,
157
+ hasExecuted: false,
156
158
  httpReqsData: {},
157
159
  httpReqsPending: {}
158
160
  }, {
@@ -217,25 +219,32 @@ const EnableEditor = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inli
217
219
  state
218
220
  ]));
219
221
  qwik.useOnDocument("readystatechange", /* @__PURE__ */ qwik.inlinedQrl((event, element) => {
220
- var _a2, _b2, _c, _d;
221
- const [props2] = qwik.useLexicalScope();
222
+ var _a2, _b2, _c, _d, _e;
223
+ const [props2, state2] = qwik.useLexicalScope();
224
+ if (state2.hasExecuted)
225
+ return;
222
226
  if (isBrowser.isBrowser()) {
227
+ state2.hasExecuted = true;
223
228
  if (isEditing.isEditing() && !props2.isNestedRender) {
224
229
  if (element)
225
230
  element.dispatchEvent(new CustomEvent("initeditingbldr"));
226
231
  }
227
232
  const shouldTrackImpression = ((_a2 = element.attributes.getNamedItem("shouldTrack")) == null ? void 0 : _a2.value) === "true";
228
- if (shouldTrackImpression) {
229
- const variationId = (_b2 = element.attributes.getNamedItem("variationId")) == null ? void 0 : _b2.value;
230
- const contentId = (_c = element.attributes.getNamedItem("contentId")) == null ? void 0 : _c.value;
231
- const apiKeyProp = (_d = element.attributes.getNamedItem("apiKey")) == null ? void 0 : _d.value;
233
+ const winningVariantId = cookie.getCookieSync({
234
+ name: `builder.tests.${(_b2 = props2.builderContextSignal.content) == null ? void 0 : _b2.id}`,
235
+ canTrack: true
236
+ });
237
+ const variationId = (_c = element.attributes.getNamedItem("variationId")) == null ? void 0 : _c.value;
238
+ if (shouldTrackImpression && variationId === winningVariantId) {
239
+ const contentId = (_d = element.attributes.getNamedItem("contentId")) == null ? void 0 : _d.value;
240
+ const apiKeyProp = (_e = element.attributes.getNamedItem("apiKey")) == null ? void 0 : _e.value;
232
241
  index$1._track({
233
242
  apiHost: props2.apiHost,
234
243
  type: "impression",
235
244
  canTrack: true,
236
245
  contentId,
237
246
  apiKey: apiKeyProp,
238
- variationId: variationId !== contentId ? variationId : void 0
247
+ variationId: winningVariantId !== contentId ? winningVariantId : void 0
239
248
  });
240
249
  }
241
250
  if (isPreviewing.isPreviewing() && !isEditing.isEditing()) {
@@ -244,7 +253,8 @@ const EnableEditor = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inli
244
253
  }
245
254
  }
246
255
  }, "EnableEditor_component_useOnDocument_H7syEGJXM4Y", [
247
- props
256
+ props,
257
+ state
248
258
  ]));
249
259
  qwik.useContextProvider(builder_context, props.builderContextSignal);
250
260
  qwik.useTaskQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
@@ -12,6 +12,7 @@ import { createRegisterComponentMessage } from "../../../functions/register-comp
12
12
  import { _track } from "../../../functions/track/index.qwik.mjs";
13
13
  import { getInteractionPropertiesForEvent } from "../../../functions/track/interaction.qwik.mjs";
14
14
  import { getDefaultCanTrack } from "../../../helpers/canTrack.qwik.mjs";
15
+ import { getCookieSync } from "../../../helpers/cookie.qwik.mjs";
15
16
  import { createEditorListener } from "../../../helpers/subscribe-to-editor.qwik.mjs";
16
17
  import { registerInsertMenu, setupBrowserForEditing } from "../../../scripts/init-editing.qwik.mjs";
17
18
  import { triggerAnimation } from "../../block/animator.qwik.mjs";
@@ -151,6 +152,7 @@ const EnableEditor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
151
152
  const state = useStore({
152
153
  ContentWrapper: props.contentWrapper || "div",
153
154
  clicked: false,
155
+ hasExecuted: false,
154
156
  httpReqsData: {},
155
157
  httpReqsPending: {}
156
158
  }, {
@@ -215,25 +217,32 @@ const EnableEditor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
215
217
  state
216
218
  ]));
217
219
  useOnDocument("readystatechange", /* @__PURE__ */ inlinedQrl((event, element) => {
218
- var _a2, _b2, _c, _d;
219
- const [props2] = useLexicalScope();
220
+ var _a2, _b2, _c, _d, _e;
221
+ const [props2, state2] = useLexicalScope();
222
+ if (state2.hasExecuted)
223
+ return;
220
224
  if (isBrowser()) {
225
+ state2.hasExecuted = true;
221
226
  if (isEditing() && !props2.isNestedRender) {
222
227
  if (element)
223
228
  element.dispatchEvent(new CustomEvent("initeditingbldr"));
224
229
  }
225
230
  const shouldTrackImpression = ((_a2 = element.attributes.getNamedItem("shouldTrack")) == null ? void 0 : _a2.value) === "true";
226
- if (shouldTrackImpression) {
227
- const variationId = (_b2 = element.attributes.getNamedItem("variationId")) == null ? void 0 : _b2.value;
228
- const contentId = (_c = element.attributes.getNamedItem("contentId")) == null ? void 0 : _c.value;
229
- const apiKeyProp = (_d = element.attributes.getNamedItem("apiKey")) == null ? void 0 : _d.value;
231
+ const winningVariantId = getCookieSync({
232
+ name: `builder.tests.${(_b2 = props2.builderContextSignal.content) == null ? void 0 : _b2.id}`,
233
+ canTrack: true
234
+ });
235
+ const variationId = (_c = element.attributes.getNamedItem("variationId")) == null ? void 0 : _c.value;
236
+ if (shouldTrackImpression && variationId === winningVariantId) {
237
+ const contentId = (_d = element.attributes.getNamedItem("contentId")) == null ? void 0 : _d.value;
238
+ const apiKeyProp = (_e = element.attributes.getNamedItem("apiKey")) == null ? void 0 : _e.value;
230
239
  _track({
231
240
  apiHost: props2.apiHost,
232
241
  type: "impression",
233
242
  canTrack: true,
234
243
  contentId,
235
244
  apiKey: apiKeyProp,
236
- variationId: variationId !== contentId ? variationId : void 0
245
+ variationId: winningVariantId !== contentId ? winningVariantId : void 0
237
246
  });
238
247
  }
239
248
  if (isPreviewing() && !isEditing()) {
@@ -242,7 +251,8 @@ const EnableEditor = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pr
242
251
  }
243
252
  }
244
253
  }, "EnableEditor_component_useOnDocument_H7syEGJXM4Y", [
245
- props
254
+ props,
255
+ state
246
256
  ]));
247
257
  useContextProvider(builderContext, props.builderContextSignal);
248
258
  useTaskQrl(/* @__PURE__ */ inlinedQrl(() => {
@@ -21,6 +21,7 @@ const checkShouldRenderVariants = ({ canTrack, content }) => {
21
21
  return true;
22
22
  };
23
23
  const getIsHydrationTarget = (target2) => target2 === "react" || target2 === "reactNative";
24
+ const isAngularSDK = target.TARGET === "angular";
24
25
  const isHydrationTarget = getIsHydrationTarget(target.TARGET);
25
26
  const getInitVariantsFnsScriptString = () => `
26
27
  window.${UPDATE_COOKIES_AND_STYLES_SCRIPT_NAME} = ${inlinedFns.UPDATE_COOKIES_AND_STYLES_SCRIPT}
@@ -28,7 +29,7 @@ const getInitVariantsFnsScriptString = () => `
28
29
  `;
29
30
  const getUpdateCookieAndStylesScript = (variants, contentId) => `
30
31
  window.${UPDATE_COOKIES_AND_STYLES_SCRIPT_NAME}(
31
- "${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget}
32
+ "${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget}, ${isAngularSDK}
32
33
  )`;
33
34
  const getUpdateVariantVisibilityScript = ({ contentId, variationId }) => `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(
34
35
  "${variationId}", "${contentId}", ${isHydrationTarget}
@@ -19,6 +19,7 @@ const checkShouldRenderVariants = ({ canTrack, content }) => {
19
19
  return true;
20
20
  };
21
21
  const getIsHydrationTarget = (target) => target === "react" || target === "reactNative";
22
+ const isAngularSDK = TARGET === "angular";
22
23
  const isHydrationTarget = getIsHydrationTarget(TARGET);
23
24
  const getInitVariantsFnsScriptString = () => `
24
25
  window.${UPDATE_COOKIES_AND_STYLES_SCRIPT_NAME} = ${UPDATE_COOKIES_AND_STYLES_SCRIPT}
@@ -26,7 +27,7 @@ const getInitVariantsFnsScriptString = () => `
26
27
  `;
27
28
  const getUpdateCookieAndStylesScript = (variants, contentId) => `
28
29
  window.${UPDATE_COOKIES_AND_STYLES_SCRIPT_NAME}(
29
- "${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget}
30
+ "${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget}, ${isAngularSDK}
30
31
  )`;
31
32
  const getUpdateVariantVisibilityScript = ({ contentId, variationId }) => `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(
32
33
  "${variationId}", "${contentId}", ${isHydrationTarget}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const UPDATE_COOKIES_AND_STYLES_SCRIPT = "function updateCookiesAndStyles(contentId, variants, isHydrationTarget) {\n function getAndSetVariantId() {\n function setCookie(name, value, days) {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${contentId}`;\n const variantInCookie = getCookie(cookieName);\n const availableIDs = variants.map(vr => vr.id).concat(contentId);\n if (variantInCookie && availableIDs.includes(variantInCookie)) {\n return variantInCookie;\n }\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n return variant.id;\n }\n }\n setCookie(cookieName, contentId);\n return contentId;\n }\n const winningVariantId = getAndSetVariantId();\n const styleEl = document.currentScript?.previousElementSibling;\n if (isHydrationTarget) {\n styleEl.remove();\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n } else {\n const newStyleStr = variants.concat({\n id: contentId\n }).filter(variant => variant.id !== winningVariantId).map(value => {\n return `.variant-${value.id} { display: none; }\n `;\n }).join('');\n styleEl.innerHTML = newStyleStr;\n }\n}";
3
+ const UPDATE_COOKIES_AND_STYLES_SCRIPT = "function updateCookiesAndStyles(contentId, variants, isHydrationTarget, isAngularSDK) {\n function getAndSetVariantId() {\n function setCookie(name, value, days) {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${contentId}`;\n const variantInCookie = getCookie(cookieName);\n const availableIDs = variants.map(vr => vr.id).concat(contentId);\n if (variantInCookie && availableIDs.includes(variantInCookie)) {\n return variantInCookie;\n }\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n return variant.id;\n }\n }\n setCookie(cookieName, contentId);\n return contentId;\n }\n const winningVariantId = getAndSetVariantId();\n let styleEl = document.currentScript?.previousElementSibling;\n if (isAngularSDK) {\n styleEl = document.currentScript?.parentElement?.previousElementSibling?.querySelector('style');\n }\n if (isHydrationTarget) {\n styleEl.remove();\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n } else {\n const newStyleStr = variants.concat({\n id: contentId\n }).filter(variant => variant.id !== winningVariantId).map(value => {\n return `.variant-${value.id} { display: none; }\n `;\n }).join('');\n styleEl.innerHTML = newStyleStr;\n }\n}";
4
4
  const UPDATE_VARIANT_VISIBILITY_SCRIPT = "function updateVariantVisibility(variantContentId, defaultContentId, isHydrationTarget) {\n if (!navigator.cookieEnabled) {\n return;\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${defaultContentId}`;\n const winningVariant = getCookie(cookieName);\n const parentDiv = document.currentScript?.parentElement;\n const isDefaultContent = variantContentId === defaultContentId;\n const isWinningVariant = winningVariant === variantContentId;\n if (isWinningVariant && !isDefaultContent) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultContent) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n parentDiv?.remove();\n }\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n }\n return;\n}";
5
5
  exports.UPDATE_COOKIES_AND_STYLES_SCRIPT = UPDATE_COOKIES_AND_STYLES_SCRIPT;
6
6
  exports.UPDATE_VARIANT_VISIBILITY_SCRIPT = UPDATE_VARIANT_VISIBILITY_SCRIPT;
@@ -1,4 +1,4 @@
1
- const UPDATE_COOKIES_AND_STYLES_SCRIPT = "function updateCookiesAndStyles(contentId, variants, isHydrationTarget) {\n function getAndSetVariantId() {\n function setCookie(name, value, days) {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${contentId}`;\n const variantInCookie = getCookie(cookieName);\n const availableIDs = variants.map(vr => vr.id).concat(contentId);\n if (variantInCookie && availableIDs.includes(variantInCookie)) {\n return variantInCookie;\n }\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n return variant.id;\n }\n }\n setCookie(cookieName, contentId);\n return contentId;\n }\n const winningVariantId = getAndSetVariantId();\n const styleEl = document.currentScript?.previousElementSibling;\n if (isHydrationTarget) {\n styleEl.remove();\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n } else {\n const newStyleStr = variants.concat({\n id: contentId\n }).filter(variant => variant.id !== winningVariantId).map(value => {\n return `.variant-${value.id} { display: none; }\n `;\n }).join('');\n styleEl.innerHTML = newStyleStr;\n }\n}";
1
+ const UPDATE_COOKIES_AND_STYLES_SCRIPT = "function updateCookiesAndStyles(contentId, variants, isHydrationTarget, isAngularSDK) {\n function getAndSetVariantId() {\n function setCookie(name, value, days) {\n let expires = '';\n if (days) {\n const date = new Date();\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n expires = '; expires=' + date.toUTCString();\n }\n document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${contentId}`;\n const variantInCookie = getCookie(cookieName);\n const availableIDs = variants.map(vr => vr.id).concat(contentId);\n if (variantInCookie && availableIDs.includes(variantInCookie)) {\n return variantInCookie;\n }\n let n = 0;\n const random = Math.random();\n for (let i = 0; i < variants.length; i++) {\n const variant = variants[i];\n const testRatio = variant.testRatio;\n n += testRatio;\n if (random < n) {\n setCookie(cookieName, variant.id);\n return variant.id;\n }\n }\n setCookie(cookieName, contentId);\n return contentId;\n }\n const winningVariantId = getAndSetVariantId();\n let styleEl = document.currentScript?.previousElementSibling;\n if (isAngularSDK) {\n styleEl = document.currentScript?.parentElement?.previousElementSibling?.querySelector('style');\n }\n if (isHydrationTarget) {\n styleEl.remove();\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n } else {\n const newStyleStr = variants.concat({\n id: contentId\n }).filter(variant => variant.id !== winningVariantId).map(value => {\n return `.variant-${value.id} { display: none; }\n `;\n }).join('');\n styleEl.innerHTML = newStyleStr;\n }\n}";
2
2
  const UPDATE_VARIANT_VISIBILITY_SCRIPT = "function updateVariantVisibility(variantContentId, defaultContentId, isHydrationTarget) {\n if (!navigator.cookieEnabled) {\n return;\n }\n function getCookie(name) {\n const nameEQ = name + '=';\n const ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);\n }\n return null;\n }\n const cookieName = `builder.tests.${defaultContentId}`;\n const winningVariant = getCookie(cookieName);\n const parentDiv = document.currentScript?.parentElement;\n const isDefaultContent = variantContentId === defaultContentId;\n const isWinningVariant = winningVariant === variantContentId;\n if (isWinningVariant && !isDefaultContent) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultContent) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n parentDiv?.remove();\n }\n const thisScriptEl = document.currentScript;\n thisScriptEl?.remove();\n }\n return;\n}";
3
3
  export {
4
4
  UPDATE_COOKIES_AND_STYLES_SCRIPT,
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const SDK_VERSION = "0.18.1";
3
+ const SDK_VERSION = "0.18.4";
4
4
  exports.SDK_VERSION = SDK_VERSION;
@@ -1,4 +1,4 @@
1
- const SDK_VERSION = "0.18.1";
1
+ const SDK_VERSION = "0.18.4";
2
2
  export {
3
3
  SDK_VERSION
4
4
  };
@@ -1,43 +1,60 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const qwik = require("@builder.io/qwik");
4
+ const isEditing = require("../../functions/is-editing.qwik.cjs");
5
+ const logger = require("../../helpers/logger.qwik.cjs");
6
+ const runScripts = function runScripts2(props, state, elementRef) {
7
+ if (!elementRef.value || !elementRef.value.getElementsByTagName || typeof window === "undefined")
8
+ return;
9
+ const scripts = elementRef.value.getElementsByTagName("script");
10
+ for (let i = 0; i < scripts.length; i++) {
11
+ const script = scripts[i];
12
+ if (script.src) {
13
+ if (state.scriptsInserted.includes(script.src))
14
+ continue;
15
+ state.scriptsInserted.push(script.src);
16
+ const newScript = document.createElement("script");
17
+ newScript.async = true;
18
+ newScript.src = script.src;
19
+ document.head.appendChild(newScript);
20
+ } else if (!script.type || [
21
+ "text/javascript",
22
+ "application/javascript",
23
+ "application/ecmascript"
24
+ ].includes(script.type)) {
25
+ if (state.scriptsRun.includes(script.innerText))
26
+ continue;
27
+ try {
28
+ state.scriptsRun.push(script.innerText);
29
+ new Function(script.innerText)();
30
+ } catch (error) {
31
+ logger.logger.warn("[BUILDER.IO] `CustomCode`: Error running script:", error);
32
+ }
33
+ }
34
+ }
35
+ };
4
36
  const CustomCode = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inlinedQrl((props) => {
5
37
  const elementRef = qwik.useSignal();
6
38
  const state = qwik.useStore({
7
39
  scriptsInserted: [],
8
40
  scriptsRun: []
9
41
  });
10
- qwik.useOn("readystatechange", /* @__PURE__ */ qwik.inlinedQrl((event, element) => {
11
- const [state2] = qwik.useLexicalScope();
12
- if (!(element == null ? void 0 : element.getElementsByTagName) || typeof window === "undefined")
13
- return;
14
- const scripts = element.getElementsByTagName("script");
15
- for (let i = 0; i < scripts.length; i++) {
16
- const script = scripts[i];
17
- if (script.src) {
18
- if (state2.scriptsInserted.includes(script.src))
19
- continue;
20
- state2.scriptsInserted.push(script.src);
21
- const newScript = document.createElement("script");
22
- newScript.async = true;
23
- newScript.src = script.src;
24
- document.head.appendChild(newScript);
25
- } else if (!script.type || [
26
- "text/javascript",
27
- "application/javascript",
28
- "application/ecmascript"
29
- ].includes(script.type)) {
30
- if (state2.scriptsRun.includes(script.innerText))
31
- continue;
32
- try {
33
- state2.scriptsRun.push(script.innerText);
34
- new Function(script.innerText)();
35
- } catch (error) {
36
- console.warn("`CustomCode`: Error running script:", error);
37
- }
38
- }
39
- }
40
- }, "CustomCode_component_useOn_zjAgBhFOiCs", [
42
+ qwik.useVisibleTaskQrl(/* @__PURE__ */ qwik.inlinedQrl(() => {
43
+ const [elementRef2, props2, state2] = qwik.useLexicalScope();
44
+ runScripts(props2, state2, elementRef2);
45
+ }, "CustomCode_component_useVisibleTask_S5QgEQZj6YE", [
46
+ elementRef,
47
+ props,
48
+ state
49
+ ]));
50
+ qwik.useVisibleTaskQrl(/* @__PURE__ */ qwik.inlinedQrl(({ track }) => {
51
+ const [elementRef2, props2, state2] = qwik.useLexicalScope();
52
+ track(() => props2.code);
53
+ if (isEditing.isEditing())
54
+ runScripts(props2, state2, elementRef2);
55
+ }, "CustomCode_component_useVisibleTask_1_Re102EQisCE", [
56
+ elementRef,
57
+ props,
41
58
  state
42
59
  ]));
43
60
  return /* @__PURE__ */ qwik._jsxQ("div", {
@@ -53,3 +70,4 @@ const CustomCode = /* @__PURE__ */ qwik.componentQrl(/* @__PURE__ */ qwik.inline
53
70
  }, "CustomCode_component_uYOSy7w7Zqw"));
54
71
  exports.CustomCode = CustomCode;
55
72
  exports.default = CustomCode;
73
+ exports.runScripts = runScripts;
@@ -1,41 +1,58 @@
1
- import { componentQrl, inlinedQrl, useSignal, useStore, useOn, useLexicalScope, _jsxQ, _fnSignal } from "@builder.io/qwik";
1
+ import { componentQrl, inlinedQrl, useSignal, useStore, useVisibleTaskQrl, useLexicalScope, _jsxQ, _fnSignal } from "@builder.io/qwik";
2
+ import { isEditing } from "../../functions/is-editing.qwik.mjs";
3
+ import { logger } from "../../helpers/logger.qwik.mjs";
4
+ const runScripts = function runScripts2(props, state, elementRef) {
5
+ if (!elementRef.value || !elementRef.value.getElementsByTagName || typeof window === "undefined")
6
+ return;
7
+ const scripts = elementRef.value.getElementsByTagName("script");
8
+ for (let i = 0; i < scripts.length; i++) {
9
+ const script = scripts[i];
10
+ if (script.src) {
11
+ if (state.scriptsInserted.includes(script.src))
12
+ continue;
13
+ state.scriptsInserted.push(script.src);
14
+ const newScript = document.createElement("script");
15
+ newScript.async = true;
16
+ newScript.src = script.src;
17
+ document.head.appendChild(newScript);
18
+ } else if (!script.type || [
19
+ "text/javascript",
20
+ "application/javascript",
21
+ "application/ecmascript"
22
+ ].includes(script.type)) {
23
+ if (state.scriptsRun.includes(script.innerText))
24
+ continue;
25
+ try {
26
+ state.scriptsRun.push(script.innerText);
27
+ new Function(script.innerText)();
28
+ } catch (error) {
29
+ logger.warn("[BUILDER.IO] `CustomCode`: Error running script:", error);
30
+ }
31
+ }
32
+ }
33
+ };
2
34
  const CustomCode = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
3
35
  const elementRef = useSignal();
4
36
  const state = useStore({
5
37
  scriptsInserted: [],
6
38
  scriptsRun: []
7
39
  });
8
- useOn("readystatechange", /* @__PURE__ */ inlinedQrl((event, element) => {
9
- const [state2] = useLexicalScope();
10
- if (!(element == null ? void 0 : element.getElementsByTagName) || typeof window === "undefined")
11
- return;
12
- const scripts = element.getElementsByTagName("script");
13
- for (let i = 0; i < scripts.length; i++) {
14
- const script = scripts[i];
15
- if (script.src) {
16
- if (state2.scriptsInserted.includes(script.src))
17
- continue;
18
- state2.scriptsInserted.push(script.src);
19
- const newScript = document.createElement("script");
20
- newScript.async = true;
21
- newScript.src = script.src;
22
- document.head.appendChild(newScript);
23
- } else if (!script.type || [
24
- "text/javascript",
25
- "application/javascript",
26
- "application/ecmascript"
27
- ].includes(script.type)) {
28
- if (state2.scriptsRun.includes(script.innerText))
29
- continue;
30
- try {
31
- state2.scriptsRun.push(script.innerText);
32
- new Function(script.innerText)();
33
- } catch (error) {
34
- console.warn("`CustomCode`: Error running script:", error);
35
- }
36
- }
37
- }
38
- }, "CustomCode_component_useOn_zjAgBhFOiCs", [
40
+ useVisibleTaskQrl(/* @__PURE__ */ inlinedQrl(() => {
41
+ const [elementRef2, props2, state2] = useLexicalScope();
42
+ runScripts(props2, state2, elementRef2);
43
+ }, "CustomCode_component_useVisibleTask_S5QgEQZj6YE", [
44
+ elementRef,
45
+ props,
46
+ state
47
+ ]));
48
+ useVisibleTaskQrl(/* @__PURE__ */ inlinedQrl(({ track }) => {
49
+ const [elementRef2, props2, state2] = useLexicalScope();
50
+ track(() => props2.code);
51
+ if (isEditing())
52
+ runScripts(props2, state2, elementRef2);
53
+ }, "CustomCode_component_useVisibleTask_1_Re102EQisCE", [
54
+ elementRef,
55
+ props,
39
56
  state
40
57
  ]));
41
58
  return /* @__PURE__ */ _jsxQ("div", {
@@ -51,5 +68,6 @@ const CustomCode = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((prop
51
68
  }, "CustomCode_component_uYOSy7w7Zqw"));
52
69
  export {
53
70
  CustomCode,
54
- CustomCode as default
71
+ CustomCode as default,
72
+ runScripts
55
73
  };