@builder.io/sdk-qwik 0.18.11 → 0.18.13

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 (67) hide show
  1. package/lib/browser/blocks/personalization-container/component-info.qwik.cjs +48 -0
  2. package/lib/browser/blocks/personalization-container/component-info.qwik.mjs +48 -0
  3. package/lib/browser/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
  4. package/lib/browser/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
  5. package/lib/browser/blocks/personalization-container/helpers.qwik.cjs +86 -0
  6. package/lib/browser/blocks/personalization-container/helpers.qwik.mjs +87 -0
  7. package/lib/browser/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
  8. package/lib/browser/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
  9. package/lib/browser/blocks/symbol/symbol.qwik.cjs +15 -10
  10. package/lib/browser/blocks/symbol/symbol.qwik.mjs +15 -10
  11. package/lib/browser/components/block/components/interactive-element.qwik.cjs +20 -12
  12. package/lib/browser/components/block/components/interactive-element.qwik.mjs +21 -13
  13. package/lib/browser/components/blocks/blocks.qwik.cjs +37 -34
  14. package/lib/browser/components/blocks/blocks.qwik.mjs +38 -35
  15. package/lib/browser/components/content-variants/content-variants.qwik.cjs +42 -21
  16. package/lib/browser/components/content-variants/content-variants.qwik.mjs +42 -21
  17. package/lib/browser/constants/builder-registered-components.qwik.cjs +14 -10
  18. package/lib/browser/constants/builder-registered-components.qwik.mjs +14 -10
  19. package/lib/browser/constants/sdk-version.qwik.cjs +1 -1
  20. package/lib/browser/constants/sdk-version.qwik.mjs +1 -1
  21. package/lib/edge/blocks/personalization-container/component-info.qwik.cjs +48 -0
  22. package/lib/edge/blocks/personalization-container/component-info.qwik.mjs +48 -0
  23. package/lib/edge/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
  24. package/lib/edge/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
  25. package/lib/edge/blocks/personalization-container/helpers.qwik.cjs +86 -0
  26. package/lib/edge/blocks/personalization-container/helpers.qwik.mjs +87 -0
  27. package/lib/edge/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
  28. package/lib/edge/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
  29. package/lib/edge/blocks/symbol/symbol.qwik.cjs +15 -10
  30. package/lib/edge/blocks/symbol/symbol.qwik.mjs +15 -10
  31. package/lib/edge/components/block/components/interactive-element.qwik.cjs +20 -12
  32. package/lib/edge/components/block/components/interactive-element.qwik.mjs +21 -13
  33. package/lib/edge/components/blocks/blocks.qwik.cjs +37 -34
  34. package/lib/edge/components/blocks/blocks.qwik.mjs +38 -35
  35. package/lib/edge/components/content-variants/content-variants.qwik.cjs +42 -21
  36. package/lib/edge/components/content-variants/content-variants.qwik.mjs +42 -21
  37. package/lib/edge/constants/builder-registered-components.qwik.cjs +14 -11
  38. package/lib/edge/constants/builder-registered-components.qwik.mjs +14 -11
  39. package/lib/edge/constants/sdk-version.qwik.cjs +1 -1
  40. package/lib/edge/constants/sdk-version.qwik.mjs +1 -1
  41. package/lib/node/blocks/personalization-container/component-info.qwik.cjs +48 -0
  42. package/lib/node/blocks/personalization-container/component-info.qwik.mjs +48 -0
  43. package/lib/node/blocks/personalization-container/helpers/inlined-fns.qwik.cjs +82 -0
  44. package/lib/node/blocks/personalization-container/helpers/inlined-fns.qwik.mjs +82 -0
  45. package/lib/node/blocks/personalization-container/helpers.qwik.cjs +86 -0
  46. package/lib/node/blocks/personalization-container/helpers.qwik.mjs +87 -0
  47. package/lib/node/blocks/personalization-container/personalization-container.qwik.cjs +382 -0
  48. package/lib/node/blocks/personalization-container/personalization-container.qwik.mjs +382 -0
  49. package/lib/node/blocks/symbol/symbol.qwik.cjs +15 -10
  50. package/lib/node/blocks/symbol/symbol.qwik.mjs +15 -10
  51. package/lib/node/components/block/components/interactive-element.qwik.cjs +20 -12
  52. package/lib/node/components/block/components/interactive-element.qwik.mjs +21 -13
  53. package/lib/node/components/blocks/blocks.qwik.cjs +37 -34
  54. package/lib/node/components/blocks/blocks.qwik.mjs +38 -35
  55. package/lib/node/components/content-variants/content-variants.qwik.cjs +42 -21
  56. package/lib/node/components/content-variants/content-variants.qwik.mjs +42 -21
  57. package/lib/node/constants/builder-registered-components.qwik.cjs +14 -11
  58. package/lib/node/constants/builder-registered-components.qwik.mjs +14 -11
  59. package/lib/node/constants/sdk-version.qwik.cjs +1 -1
  60. package/lib/node/constants/sdk-version.qwik.mjs +1 -1
  61. package/package.json +2 -2
  62. package/types/src/blocks/personalization-container/helpers/inlined-fns.d.ts +4 -1
  63. package/types/src/blocks/personalization-container/helpers.d.ts +24 -4
  64. package/types/src/blocks/personalization-container/personalization-container.types.d.ts +2 -2
  65. package/types/src/components/blocks/blocks-wrapper.d.ts +13 -1
  66. package/types/src/components/blocks/blocks.types.d.ts +1 -1
  67. package/types/src/constants/sdk-version.d.ts +1 -1
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const componentInfo = {
4
+ name: "PersonalizationContainer",
5
+ shouldReceiveBuilderProps: {
6
+ builderBlock: true,
7
+ builderContext: true,
8
+ builderComponents: true
9
+ },
10
+ noWrap: true,
11
+ image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a",
12
+ canHaveChildren: true,
13
+ inputs: [
14
+ {
15
+ name: "variants",
16
+ defaultValue: [],
17
+ behavior: "personalizationVariantList",
18
+ type: "list",
19
+ subFields: [
20
+ {
21
+ name: "name",
22
+ type: "text"
23
+ },
24
+ {
25
+ name: "query",
26
+ friendlyName: "Targeting rules",
27
+ type: "BuilderQuery",
28
+ defaultValue: []
29
+ },
30
+ {
31
+ name: "startDate",
32
+ type: "date"
33
+ },
34
+ {
35
+ name: "endDate",
36
+ type: "date"
37
+ },
38
+ {
39
+ name: "blocks",
40
+ type: "uiBlocks",
41
+ hideFromUI: true,
42
+ defaultValue: []
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ };
48
+ exports.componentInfo = componentInfo;
@@ -0,0 +1,48 @@
1
+ const componentInfo = {
2
+ name: "PersonalizationContainer",
3
+ shouldReceiveBuilderProps: {
4
+ builderBlock: true,
5
+ builderContext: true,
6
+ builderComponents: true
7
+ },
8
+ noWrap: true,
9
+ image: "https://cdn.builder.io/api/v1/image/assets%2FYJIGb4i01jvw0SRdL5Bt%2F37229ed30d8c41dfb10b8cca1992053a",
10
+ canHaveChildren: true,
11
+ inputs: [
12
+ {
13
+ name: "variants",
14
+ defaultValue: [],
15
+ behavior: "personalizationVariantList",
16
+ type: "list",
17
+ subFields: [
18
+ {
19
+ name: "name",
20
+ type: "text"
21
+ },
22
+ {
23
+ name: "query",
24
+ friendlyName: "Targeting rules",
25
+ type: "BuilderQuery",
26
+ defaultValue: []
27
+ },
28
+ {
29
+ name: "startDate",
30
+ type: "date"
31
+ },
32
+ {
33
+ name: "endDate",
34
+ type: "date"
35
+ },
36
+ {
37
+ name: "blocks",
38
+ type: "uiBlocks",
39
+ hideFromUI: true,
40
+ defaultValue: []
41
+ }
42
+ ]
43
+ }
44
+ ]
45
+ };
46
+ export {
47
+ componentInfo
48
+ };
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {
4
+ function isString(val) {
5
+ return typeof val === "string";
6
+ }
7
+ function isNumber(val) {
8
+ return typeof val === "number";
9
+ }
10
+ function objectMatchesQuery(userattr, query2) {
11
+ const result = (() => {
12
+ const property = query2.property;
13
+ const operator = query2.operator;
14
+ let testValue = query2.value;
15
+ if (query2 && query2.property === "urlPath" && query2.value && typeof query2.value === "string" && query2.value !== "/" && query2.value.endsWith("/"))
16
+ testValue = query2.value.slice(0, -1);
17
+ if (!(property && operator))
18
+ return true;
19
+ if (Array.isArray(testValue)) {
20
+ if (operator === "isNot")
21
+ return testValue.every((val) => objectMatchesQuery(userattr, {
22
+ property,
23
+ operator,
24
+ value: val
25
+ }));
26
+ return !!testValue.find((val) => objectMatchesQuery(userattr, {
27
+ property,
28
+ operator,
29
+ value: val
30
+ }));
31
+ }
32
+ const value = userattr[property];
33
+ if (Array.isArray(value))
34
+ return value.includes(testValue);
35
+ switch (operator) {
36
+ case "is":
37
+ return value === testValue;
38
+ case "isNot":
39
+ return value !== testValue;
40
+ case "contains":
41
+ return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
42
+ case "startsWith":
43
+ return isString(value) && value.startsWith(String(testValue));
44
+ case "endsWith":
45
+ return isString(value) && value.endsWith(String(testValue));
46
+ case "greaterThan":
47
+ return isNumber(value) && isNumber(testValue) && value > testValue;
48
+ case "lessThan":
49
+ return isNumber(value) && isNumber(testValue) && value < testValue;
50
+ case "greaterThanOrEqualTo":
51
+ return isNumber(value) && isNumber(testValue) && value >= testValue;
52
+ case "lessThanOrEqualTo":
53
+ return isNumber(value) && isNumber(testValue) && value <= testValue;
54
+ default:
55
+ return false;
56
+ }
57
+ })();
58
+ return result;
59
+ }
60
+ const item = {
61
+ query,
62
+ startDate,
63
+ endDate
64
+ };
65
+ const now = userAttributes.date && new Date(userAttributes.date) || /* @__PURE__ */ new Date();
66
+ if (item.startDate && new Date(item.startDate) > now)
67
+ return false;
68
+ else if (item.endDate && new Date(item.endDate) < now)
69
+ return false;
70
+ if (!item.query || !item.query.length)
71
+ return true;
72
+ return item.query.every((filter) => {
73
+ return objectMatchesQuery(userAttributes, filter);
74
+ });
75
+ }
76
+ const PERSONALIZATION_SCRIPT = "function getPersonalizedVariant(variants, blockId, isHydrationTarget, locale) {\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 attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n const parentDiv = document.currentScript?.parentElement;\n const variantId = parentDiv?.getAttribute('data-variant-id');\n const isDefaultVariant = variantId === `${blockId}-default`;\n const isWinningVariant = winningVariantIndex !== -1 && variantId === `${blockId}-${winningVariantIndex}` || winningVariantIndex === -1 && isDefaultVariant;\n if (isWinningVariant && !isDefaultVariant) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultVariant) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n const itsStyleEl = parentDiv?.previousElementSibling;\n if (itsStyleEl) {\n itsStyleEl.remove();\n }\n parentDiv?.remove();\n }\n const thisScript = document.currentScript;\n if (thisScript) {\n thisScript.remove();\n }\n }\n}";
77
+ const FILTER_WITH_CUSTOM_TARGETING_SCRIPT = "function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {\n function isString(val) {\n return typeof val === 'string';\n }\n function isNumber(val) {\n return typeof val === 'number';\n }\n function objectMatchesQuery(userattr, query) {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n if (query && query.property === 'urlPath' && query.value && typeof query.value === 'string' && query.value !== '/' && query.value.endsWith('/')) {\n testValue = query.value.slice(0, -1);\n }\n if (!(property && operator)) {\n return true;\n }\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n return !!testValue.find(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n const value = userattr[property];\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n default:\n return false;\n }\n })();\n return result;\n }\n const item = {\n query,\n startDate,\n endDate\n };\n const now = userAttributes.date && new Date(userAttributes.date) || new Date();\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n if (!item.query || !item.query.length) {\n return true;\n }\n return item.query.every(filter => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}";
78
+ const UPDATE_VISIBILITY_STYLES_SCRIPT = "function updateVisibilityStylesScript(variants, blockId, isHydrationTarget, locale) {\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 visibilityStylesEl = document.currentScript?.previousElementSibling;\n if (!visibilityStylesEl) {\n return;\n }\n if (isHydrationTarget) {\n visibilityStylesEl.remove();\n const currentScript = document.currentScript;\n if (currentScript) {\n currentScript.remove();\n }\n } else {\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n if (winningVariantIndex !== -1) {\n let newStyleStr = variants?.map((_, index) => {\n if (index === winningVariantIndex) return '';\n return `div[data-variant-id=\"${blockId}-${index}\"] { display: none !important; } `;\n }).join('') || '';\n newStyleStr += `div[data-variant-id=\"${blockId}-default\"] { display: none !important; } `;\n visibilityStylesEl.innerHTML = newStyleStr;\n }\n }\n}";
79
+ exports.FILTER_WITH_CUSTOM_TARGETING_SCRIPT = FILTER_WITH_CUSTOM_TARGETING_SCRIPT;
80
+ exports.PERSONALIZATION_SCRIPT = PERSONALIZATION_SCRIPT;
81
+ exports.UPDATE_VISIBILITY_STYLES_SCRIPT = UPDATE_VISIBILITY_STYLES_SCRIPT;
82
+ exports.filterWithCustomTargeting = filterWithCustomTargeting;
@@ -0,0 +1,82 @@
1
+ function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {
2
+ function isString(val) {
3
+ return typeof val === "string";
4
+ }
5
+ function isNumber(val) {
6
+ return typeof val === "number";
7
+ }
8
+ function objectMatchesQuery(userattr, query2) {
9
+ const result = (() => {
10
+ const property = query2.property;
11
+ const operator = query2.operator;
12
+ let testValue = query2.value;
13
+ if (query2 && query2.property === "urlPath" && query2.value && typeof query2.value === "string" && query2.value !== "/" && query2.value.endsWith("/"))
14
+ testValue = query2.value.slice(0, -1);
15
+ if (!(property && operator))
16
+ return true;
17
+ if (Array.isArray(testValue)) {
18
+ if (operator === "isNot")
19
+ return testValue.every((val) => objectMatchesQuery(userattr, {
20
+ property,
21
+ operator,
22
+ value: val
23
+ }));
24
+ return !!testValue.find((val) => objectMatchesQuery(userattr, {
25
+ property,
26
+ operator,
27
+ value: val
28
+ }));
29
+ }
30
+ const value = userattr[property];
31
+ if (Array.isArray(value))
32
+ return value.includes(testValue);
33
+ switch (operator) {
34
+ case "is":
35
+ return value === testValue;
36
+ case "isNot":
37
+ return value !== testValue;
38
+ case "contains":
39
+ return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));
40
+ case "startsWith":
41
+ return isString(value) && value.startsWith(String(testValue));
42
+ case "endsWith":
43
+ return isString(value) && value.endsWith(String(testValue));
44
+ case "greaterThan":
45
+ return isNumber(value) && isNumber(testValue) && value > testValue;
46
+ case "lessThan":
47
+ return isNumber(value) && isNumber(testValue) && value < testValue;
48
+ case "greaterThanOrEqualTo":
49
+ return isNumber(value) && isNumber(testValue) && value >= testValue;
50
+ case "lessThanOrEqualTo":
51
+ return isNumber(value) && isNumber(testValue) && value <= testValue;
52
+ default:
53
+ return false;
54
+ }
55
+ })();
56
+ return result;
57
+ }
58
+ const item = {
59
+ query,
60
+ startDate,
61
+ endDate
62
+ };
63
+ const now = userAttributes.date && new Date(userAttributes.date) || /* @__PURE__ */ new Date();
64
+ if (item.startDate && new Date(item.startDate) > now)
65
+ return false;
66
+ else if (item.endDate && new Date(item.endDate) < now)
67
+ return false;
68
+ if (!item.query || !item.query.length)
69
+ return true;
70
+ return item.query.every((filter) => {
71
+ return objectMatchesQuery(userAttributes, filter);
72
+ });
73
+ }
74
+ const PERSONALIZATION_SCRIPT = "function getPersonalizedVariant(variants, blockId, isHydrationTarget, locale) {\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 attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n const parentDiv = document.currentScript?.parentElement;\n const variantId = parentDiv?.getAttribute('data-variant-id');\n const isDefaultVariant = variantId === `${blockId}-default`;\n const isWinningVariant = winningVariantIndex !== -1 && variantId === `${blockId}-${winningVariantIndex}` || winningVariantIndex === -1 && isDefaultVariant;\n if (isWinningVariant && !isDefaultVariant) {\n parentDiv?.removeAttribute('hidden');\n parentDiv?.removeAttribute('aria-hidden');\n } else if (!isWinningVariant && isDefaultVariant) {\n parentDiv?.setAttribute('hidden', 'true');\n parentDiv?.setAttribute('aria-hidden', 'true');\n }\n if (isHydrationTarget) {\n if (!isWinningVariant) {\n const itsStyleEl = parentDiv?.previousElementSibling;\n if (itsStyleEl) {\n itsStyleEl.remove();\n }\n parentDiv?.remove();\n }\n const thisScript = document.currentScript;\n if (thisScript) {\n thisScript.remove();\n }\n }\n}";
75
+ const FILTER_WITH_CUSTOM_TARGETING_SCRIPT = "function filterWithCustomTargeting(userAttributes, query, startDate, endDate) {\n function isString(val) {\n return typeof val === 'string';\n }\n function isNumber(val) {\n return typeof val === 'number';\n }\n function objectMatchesQuery(userattr, query) {\n const result = (() => {\n const property = query.property;\n const operator = query.operator;\n let testValue = query.value;\n if (query && query.property === 'urlPath' && query.value && typeof query.value === 'string' && query.value !== '/' && query.value.endsWith('/')) {\n testValue = query.value.slice(0, -1);\n }\n if (!(property && operator)) {\n return true;\n }\n if (Array.isArray(testValue)) {\n if (operator === 'isNot') {\n return testValue.every(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n return !!testValue.find(val => objectMatchesQuery(userattr, {\n property,\n operator,\n value: val\n }));\n }\n const value = userattr[property];\n if (Array.isArray(value)) {\n return value.includes(testValue);\n }\n switch (operator) {\n case 'is':\n return value === testValue;\n case 'isNot':\n return value !== testValue;\n case 'contains':\n return (isString(value) || Array.isArray(value)) && value.includes(String(testValue));\n case 'startsWith':\n return isString(value) && value.startsWith(String(testValue));\n case 'endsWith':\n return isString(value) && value.endsWith(String(testValue));\n case 'greaterThan':\n return isNumber(value) && isNumber(testValue) && value > testValue;\n case 'lessThan':\n return isNumber(value) && isNumber(testValue) && value < testValue;\n case 'greaterThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value >= testValue;\n case 'lessThanOrEqualTo':\n return isNumber(value) && isNumber(testValue) && value <= testValue;\n default:\n return false;\n }\n })();\n return result;\n }\n const item = {\n query,\n startDate,\n endDate\n };\n const now = userAttributes.date && new Date(userAttributes.date) || new Date();\n if (item.startDate && new Date(item.startDate) > now) {\n return false;\n } else if (item.endDate && new Date(item.endDate) < now) {\n return false;\n }\n if (!item.query || !item.query.length) {\n return true;\n }\n return item.query.every(filter => {\n return objectMatchesQuery(userAttributes, filter);\n });\n}";
76
+ const UPDATE_VISIBILITY_STYLES_SCRIPT = "function updateVisibilityStylesScript(variants, blockId, isHydrationTarget, locale) {\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 visibilityStylesEl = document.currentScript?.previousElementSibling;\n if (!visibilityStylesEl) {\n return;\n }\n if (isHydrationTarget) {\n visibilityStylesEl.remove();\n const currentScript = document.currentScript;\n if (currentScript) {\n currentScript.remove();\n }\n } else {\n const attributes = JSON.parse(getCookie('builder.userAttributes') || '{}');\n if (locale) {\n attributes.locale = locale;\n }\n const winningVariantIndex = variants?.findIndex(function (variant) {\n return window.filterWithCustomTargeting(attributes, variant.query, variant.startDate, variant.endDate);\n });\n if (winningVariantIndex !== -1) {\n let newStyleStr = variants?.map((_, index) => {\n if (index === winningVariantIndex) return '';\n return `div[data-variant-id=\"${blockId}-${index}\"] { display: none !important; } `;\n }).join('') || '';\n newStyleStr += `div[data-variant-id=\"${blockId}-default\"] { display: none !important; } `;\n visibilityStylesEl.innerHTML = newStyleStr;\n }\n }\n}";
77
+ export {
78
+ FILTER_WITH_CUSTOM_TARGETING_SCRIPT,
79
+ PERSONALIZATION_SCRIPT,
80
+ UPDATE_VISIBILITY_STYLES_SCRIPT,
81
+ filterWithCustomTargeting
82
+ };
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const target = require("../../constants/target.qwik.cjs");
4
+ const isBrowser = require("../../functions/is-browser.qwik.cjs");
5
+ const isEditing = require("../../functions/is-editing.qwik.cjs");
6
+ const inlinedFns = require("./helpers/inlined-fns.qwik.cjs");
7
+ const DEFAULT_INDEX = "default";
8
+ const FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
9
+ const BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
10
+ const UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
11
+ const SDKS_SUPPORTING_PERSONALIZATION = [
12
+ "react",
13
+ "vue",
14
+ "svelte"
15
+ ];
16
+ const SDKS_REQUIRING_RESET_APPROACH = [
17
+ "vue",
18
+ "svelte"
19
+ ];
20
+ function checkShouldRenderVariants(variants, canTrack) {
21
+ const hasVariants = variants && variants.length > 0;
22
+ if (!hasVariants)
23
+ return false;
24
+ if (!canTrack)
25
+ return false;
26
+ if (SDKS_REQUIRING_RESET_APPROACH.includes(target.TARGET))
27
+ return true;
28
+ if (isBrowser.isBrowser())
29
+ return false;
30
+ return true;
31
+ }
32
+ function getBlocksToRender({ variants, previewingIndex, isHydrated, filteredVariants, fallbackBlocks }) {
33
+ const fallback = {
34
+ blocks: fallbackBlocks ?? [],
35
+ path: "this.children",
36
+ index: DEFAULT_INDEX
37
+ };
38
+ if (isHydrated && isEditing.isEditing()) {
39
+ if (typeof previewingIndex === "number" && previewingIndex < ((variants == null ? void 0 : variants.length) ?? 0)) {
40
+ const variant = variants == null ? void 0 : variants[previewingIndex];
41
+ if (variant)
42
+ return {
43
+ blocks: variant.blocks,
44
+ path: `variants.${previewingIndex}.blocks`,
45
+ index: previewingIndex
46
+ };
47
+ }
48
+ return fallback;
49
+ }
50
+ if (isBrowser.isBrowser()) {
51
+ const winningVariant = filteredVariants == null ? void 0 : filteredVariants[0];
52
+ if (winningVariant && variants) {
53
+ const variantIndex = variants.indexOf(winningVariant);
54
+ if (variantIndex !== -1)
55
+ return {
56
+ blocks: winningVariant.blocks,
57
+ path: `variants.${variantIndex}.blocks`,
58
+ index: variantIndex
59
+ };
60
+ }
61
+ }
62
+ return fallback;
63
+ }
64
+ const getInitPersonalizationVariantsFnsScriptString = () => {
65
+ return `
66
+ window.${FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME} = ${inlinedFns.FILTER_WITH_CUSTOM_TARGETING_SCRIPT}
67
+ window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME} = ${inlinedFns.PERSONALIZATION_SCRIPT}
68
+ window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME} = ${inlinedFns.UPDATE_VISIBILITY_STYLES_SCRIPT}
69
+ `;
70
+ };
71
+ const isHydrationTarget = target.TARGET === "react";
72
+ const getPersonalizationScript = (variants, blockId, locale) => {
73
+ return `window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
74
+ };
75
+ const getUpdateVisibilityStylesScript = (variants, blockId, locale) => {
76
+ return `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
77
+ };
78
+ exports.filterWithCustomTargeting = inlinedFns.filterWithCustomTargeting;
79
+ exports.DEFAULT_INDEX = DEFAULT_INDEX;
80
+ exports.SDKS_REQUIRING_RESET_APPROACH = SDKS_REQUIRING_RESET_APPROACH;
81
+ exports.SDKS_SUPPORTING_PERSONALIZATION = SDKS_SUPPORTING_PERSONALIZATION;
82
+ exports.checkShouldRenderVariants = checkShouldRenderVariants;
83
+ exports.getBlocksToRender = getBlocksToRender;
84
+ exports.getInitPersonalizationVariantsFnsScriptString = getInitPersonalizationVariantsFnsScriptString;
85
+ exports.getPersonalizationScript = getPersonalizationScript;
86
+ exports.getUpdateVisibilityStylesScript = getUpdateVisibilityStylesScript;
@@ -0,0 +1,87 @@
1
+ import { TARGET } from "../../constants/target.qwik.mjs";
2
+ import { isBrowser } from "../../functions/is-browser.qwik.mjs";
3
+ import { isEditing } from "../../functions/is-editing.qwik.mjs";
4
+ import { FILTER_WITH_CUSTOM_TARGETING_SCRIPT, PERSONALIZATION_SCRIPT, UPDATE_VISIBILITY_STYLES_SCRIPT } from "./helpers/inlined-fns.qwik.mjs";
5
+ import { filterWithCustomTargeting } from "./helpers/inlined-fns.qwik.mjs";
6
+ const DEFAULT_INDEX = "default";
7
+ const FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME = "filterWithCustomTargeting";
8
+ const BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME = "builderIoPersonalization";
9
+ const UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME = "updateVisibilityStylesScript";
10
+ const SDKS_SUPPORTING_PERSONALIZATION = [
11
+ "react",
12
+ "vue",
13
+ "svelte"
14
+ ];
15
+ const SDKS_REQUIRING_RESET_APPROACH = [
16
+ "vue",
17
+ "svelte"
18
+ ];
19
+ function checkShouldRenderVariants(variants, canTrack) {
20
+ const hasVariants = variants && variants.length > 0;
21
+ if (!hasVariants)
22
+ return false;
23
+ if (!canTrack)
24
+ return false;
25
+ if (SDKS_REQUIRING_RESET_APPROACH.includes(TARGET))
26
+ return true;
27
+ if (isBrowser())
28
+ return false;
29
+ return true;
30
+ }
31
+ function getBlocksToRender({ variants, previewingIndex, isHydrated, filteredVariants, fallbackBlocks }) {
32
+ const fallback = {
33
+ blocks: fallbackBlocks ?? [],
34
+ path: "this.children",
35
+ index: DEFAULT_INDEX
36
+ };
37
+ if (isHydrated && isEditing()) {
38
+ if (typeof previewingIndex === "number" && previewingIndex < ((variants == null ? void 0 : variants.length) ?? 0)) {
39
+ const variant = variants == null ? void 0 : variants[previewingIndex];
40
+ if (variant)
41
+ return {
42
+ blocks: variant.blocks,
43
+ path: `variants.${previewingIndex}.blocks`,
44
+ index: previewingIndex
45
+ };
46
+ }
47
+ return fallback;
48
+ }
49
+ if (isBrowser()) {
50
+ const winningVariant = filteredVariants == null ? void 0 : filteredVariants[0];
51
+ if (winningVariant && variants) {
52
+ const variantIndex = variants.indexOf(winningVariant);
53
+ if (variantIndex !== -1)
54
+ return {
55
+ blocks: winningVariant.blocks,
56
+ path: `variants.${variantIndex}.blocks`,
57
+ index: variantIndex
58
+ };
59
+ }
60
+ }
61
+ return fallback;
62
+ }
63
+ const getInitPersonalizationVariantsFnsScriptString = () => {
64
+ return `
65
+ window.${FILTER_WITH_CUSTOM_TARGETING_SCRIPT_FN_NAME} = ${FILTER_WITH_CUSTOM_TARGETING_SCRIPT}
66
+ window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME} = ${PERSONALIZATION_SCRIPT}
67
+ window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME} = ${UPDATE_VISIBILITY_STYLES_SCRIPT}
68
+ `;
69
+ };
70
+ const isHydrationTarget = TARGET === "react";
71
+ const getPersonalizationScript = (variants, blockId, locale) => {
72
+ return `window.${BUILDER_IO_PERSONALIZATION_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
73
+ };
74
+ const getUpdateVisibilityStylesScript = (variants, blockId, locale) => {
75
+ return `window.${UPDATE_VARIANT_VISIBILITY_SCRIPT_FN_NAME}(${JSON.stringify(variants)}, "${blockId}", ${isHydrationTarget}${locale ? `, "${locale}"` : ""})`;
76
+ };
77
+ export {
78
+ DEFAULT_INDEX,
79
+ SDKS_REQUIRING_RESET_APPROACH,
80
+ SDKS_SUPPORTING_PERSONALIZATION,
81
+ checkShouldRenderVariants,
82
+ filterWithCustomTargeting,
83
+ getBlocksToRender,
84
+ getInitPersonalizationVariantsFnsScriptString,
85
+ getPersonalizationScript,
86
+ getUpdateVisibilityStylesScript
87
+ };