@builder.io/sdk-svelte 0.4.4 → 0.5.0
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.
- package/package/--package.json +43 -29
- package/package/CHANGELOG.md +13 -0
- package/package/blocks/BaseText.svelte +1 -1
- package/package/blocks/button/button.svelte +18 -33
- package/package/blocks/button/button.svelte.d.ts +3 -1
- package/package/blocks/button/component-info.d.ts +1 -1
- package/package/blocks/button/component-info.js +9 -13
- package/package/blocks/columns/columns.svelte +14 -20
- package/package/blocks/columns/columns.svelte.d.ts +11 -7
- package/package/blocks/columns/component-info.d.ts +1 -1
- package/package/blocks/columns/component-info.js +62 -83
- package/package/blocks/custom-code/component-info.d.ts +1 -1
- package/package/blocks/custom-code/component-info.js +7 -11
- package/package/blocks/embed/component-info.d.ts +1 -1
- package/package/blocks/embed/component-info.js +8 -15
- package/package/blocks/embed/helpers.js +1 -5
- package/package/blocks/form/component-info.d.ts +1 -1
- package/package/blocks/form/component-info.js +94 -129
- package/package/blocks/form/form.svelte +2 -289
- package/package/blocks/form/form.svelte.d.ts +1 -57
- package/package/blocks/fragment/component-info.d.ts +1 -1
- package/package/blocks/fragment/component-info.js +1 -1
- package/package/blocks/helpers.d.ts +13 -0
- package/package/blocks/helpers.js +40 -0
- package/package/blocks/image/component-info.d.ts +1 -1
- package/package/blocks/image/component-info.js +33 -63
- package/package/blocks/image/image.helpers.js +2 -11
- package/package/blocks/image/image.svelte.d.ts +0 -1
- package/package/blocks/img/component-info.d.ts +1 -1
- package/package/blocks/img/component-info.js +4 -6
- package/package/blocks/img/img.svelte +4 -29
- package/package/blocks/img/img.svelte.d.ts +3 -1
- package/package/blocks/input/component-info.d.ts +1 -1
- package/package/blocks/input/component-info.js +15 -40
- package/package/blocks/input/input.svelte +4 -29
- package/package/blocks/input/input.svelte.d.ts +3 -1
- package/package/blocks/raw-text/component-info.d.ts +1 -1
- package/package/blocks/raw-text/component-info.js +3 -5
- package/package/blocks/raw-text/raw-text.svelte +3 -5
- package/package/blocks/raw-text/raw-text.svelte.d.ts +1 -1
- package/package/blocks/section/component-info.d.ts +1 -1
- package/package/blocks/section/component-info.js +13 -18
- package/package/blocks/section/section.svelte +4 -29
- package/package/blocks/section/section.svelte.d.ts +3 -1
- package/package/blocks/select/component-info.d.ts +1 -1
- package/package/blocks/select/component-info.js +22 -34
- package/package/blocks/select/select.svelte +4 -29
- package/package/blocks/select/select.svelte.d.ts +3 -1
- package/package/blocks/submit-button/component-info.d.ts +1 -1
- package/package/blocks/submit-button/component-info.js +5 -7
- package/package/blocks/submit-button/submit-button.svelte +4 -29
- package/package/blocks/submit-button/submit-button.svelte.d.ts +3 -1
- package/package/blocks/symbol/component-info.d.ts +1 -1
- package/package/blocks/symbol/component-info.js +12 -17
- package/package/blocks/symbol/symbol.helpers.d.ts +14 -0
- package/package/blocks/symbol/symbol.helpers.js +31 -0
- package/package/blocks/symbol/symbol.svelte +38 -85
- package/package/blocks/symbol/symbol.svelte.d.ts +13 -7
- package/package/blocks/text/component-info.d.ts +1 -1
- package/package/blocks/text/component-info.js +6 -7
- package/package/blocks/text/text.svelte +1 -1
- package/package/blocks/text/text.svelte.d.ts +1 -1
- package/package/blocks/textarea/component-info.d.ts +1 -1
- package/package/blocks/textarea/component-info.js +13 -19
- package/package/blocks/textarea/textarea.svelte +4 -29
- package/package/blocks/textarea/textarea.svelte.d.ts +3 -1
- package/package/blocks/video/component-info.d.ts +1 -1
- package/package/blocks/video/component-info.js +35 -55
- package/package/blocks/video/video.svelte +4 -30
- package/package/blocks/video/video.svelte.d.ts +2 -0
- package/package/components/block/block.helpers.d.ts +13 -0
- package/package/components/{render-block/render-block.helpers.js → block/block.helpers.js} +12 -29
- package/package/components/block/block.svelte +135 -0
- package/package/components/block/block.svelte.d.ts +26 -0
- package/package/components/{render-block → block/components}/block-styles.svelte +21 -23
- package/package/components/{render-block → block/components}/block-styles.svelte.d.ts +2 -2
- package/package/components/block/components/block-wrapper.svelte +53 -0
- package/package/components/block/components/block-wrapper.svelte.d.ts +33 -0
- package/package/components/block/components/component-ref/component-ref.helpers.d.ts +36 -0
- package/package/components/block/components/component-ref/component-ref.helpers.js +22 -0
- package/package/components/block/components/component-ref/component-ref.svelte +37 -0
- package/package/components/block/components/component-ref/component-ref.svelte.d.ts +24 -0
- package/package/components/block/components/interactive-element.svelte +29 -0
- package/package/components/block/components/interactive-element.svelte.d.ts +31 -0
- package/package/components/{render-block/render-repeated-block.svelte → block/components/repeated-block.svelte} +4 -3
- package/package/components/block/components/repeated-block.svelte.d.ts +25 -0
- package/package/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +3 -20
- package/package/components/blocks/blocks-wrapper.svelte.d.ts +29 -0
- package/package/components/blocks/blocks.svelte +26 -0
- package/package/components/blocks/blocks.svelte.d.ts +28 -0
- package/package/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +51 -169
- package/package/components/content/components/enable-editor.svelte.d.ts +36 -0
- package/package/components/{render-content/components/render-styles.helpers.d.ts → content/components/styles.helpers.d.ts} +1 -1
- package/package/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +3 -4
- package/package/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +4 -4
- package/package/components/{render-content/components/render-styles.svelte.d.ts → content/components/styles.svelte.d.ts} +5 -5
- package/package/components/content/content.helpers.d.ts +7 -0
- package/package/components/content/content.helpers.js +30 -0
- package/package/components/content/content.svelte +113 -0
- package/package/components/content/content.svelte.d.ts +30 -0
- package/package/components/content/content.types.d.ts +24 -0
- package/package/components/content/index.d.ts +1 -0
- package/package/components/content/index.js +1 -0
- package/package/components/content-variants/content-variants.svelte +98 -0
- package/package/components/content-variants/content-variants.svelte.d.ts +34 -0
- package/package/components/content-variants/content-variants.types.d.ts +20 -0
- package/package/components/content-variants/helpers.d.ts +41 -0
- package/package/components/{render-content-variants → content-variants}/helpers.js +46 -41
- package/package/components/inlined-script.svelte +7 -0
- package/package/components/inlined-script.svelte.d.ts +21 -0
- package/package/components/inlined-styles.svelte.d.ts +21 -0
- package/package/constants/builder-registered-components.js +34 -13
- package/package/constants/device-sizes.js +9 -8
- package/package/constants/sdk-version.d.ts +1 -1
- package/package/constants/sdk-version.js +1 -1
- package/package/constants/target.d.ts +1 -1
- package/package/context/builder.context.d.ts +1 -1
- package/package/context/builder.context.js +1 -1
- package/package/context/types.d.ts +1 -1
- package/package/functions/apply-patch-with-mutation.d.ts +10 -0
- package/package/functions/apply-patch-with-mutation.js +54 -0
- package/package/functions/evaluate/acorn.d.ts +0 -0
- package/package/functions/evaluate/acorn.js +2433 -0
- package/package/functions/{evaluate.d.ts → evaluate/evaluate.d.ts} +5 -2
- package/package/functions/{evaluate.js → evaluate/evaluate.js} +34 -13
- package/package/functions/evaluate/index.d.ts +1 -0
- package/package/functions/evaluate/index.js +1 -0
- package/package/functions/evaluate/interpreter.d.ts +2 -0
- package/package/functions/evaluate/interpreter.js +3853 -0
- package/package/functions/evaluate/non-node-runtime.d.ts +2 -0
- package/package/functions/evaluate/non-node-runtime.js +84 -0
- package/package/functions/evaluate/types.d.ts +10 -0
- package/package/functions/extract-text-styles.js +2 -14
- package/package/functions/get-block-actions-handler.js +3 -3
- package/package/functions/get-block-actions.d.ts +1 -0
- package/package/functions/get-block-actions.js +14 -1
- package/package/functions/get-block-component-options.js +1 -1
- package/package/functions/get-block-properties.d.ts +5 -1
- package/package/functions/get-block-properties.js +15 -9
- package/package/functions/get-builder-search-params/index.js +3 -7
- package/package/functions/get-content/generate-content-url.js +7 -5
- package/package/functions/get-content/index.d.ts +2 -6
- package/package/functions/get-content/index.js +26 -6
- package/package/functions/get-processed-block.d.ts +1 -1
- package/package/functions/get-processed-block.js +11 -7
- package/package/functions/get-react-native-block-styles.d.ts +1 -1
- package/package/functions/get-react-native-block-styles.js +2 -2
- package/package/functions/if-target.d.ts +1 -1
- package/package/functions/if-target.js +1 -1
- package/package/functions/is-editing.js +1 -3
- package/package/functions/is-non-node-server.d.ts +4 -0
- package/package/functions/is-non-node-server.js +8 -0
- package/package/functions/on-change.js +1 -1
- package/package/functions/register-component.d.ts +2 -1
- package/package/functions/register-component.js +20 -8
- package/package/functions/register.js +2 -2
- package/package/functions/sanitize-react-native-block-styles.js +13 -5
- package/package/functions/set-editor-settings.js +1 -1
- package/package/functions/set.js +2 -9
- package/package/functions/track/helpers.js +6 -11
- package/package/functions/track/index.js +26 -14
- package/package/functions/track/interaction.js +15 -16
- package/package/helpers/ab-tests.d.ts +2 -2
- package/package/helpers/ab-tests.js +48 -30
- package/package/helpers/canTrack.js +1 -1
- package/package/helpers/cookie.d.ts +2 -2
- package/package/helpers/cookie.js +13 -26
- package/package/helpers/css.d.ts +1 -1
- package/package/helpers/css.js +1 -1
- package/package/helpers/flatten.js +8 -8
- package/package/helpers/localStorage.d.ts +2 -2
- package/package/helpers/localStorage.js +2 -2
- package/package/helpers/logger.js +1 -1
- package/package/helpers/preview-lru-cache/get.d.ts +1 -0
- package/package/helpers/preview-lru-cache/get.js +7 -0
- package/package/helpers/preview-lru-cache/helpers.d.ts +1 -0
- package/package/helpers/preview-lru-cache/helpers.js +9 -0
- package/package/helpers/preview-lru-cache/init.d.ts +6 -0
- package/package/helpers/preview-lru-cache/init.js +15 -0
- package/package/helpers/preview-lru-cache/set.d.ts +7 -0
- package/package/helpers/preview-lru-cache/set.js +9 -0
- package/package/helpers/preview-lru-cache/types.d.ts +12 -0
- package/package/helpers/preview-lru-cache/types.js +6 -0
- package/package/helpers/sessionId.d.ts +2 -2
- package/package/helpers/sessionId.js +11 -4
- package/package/helpers/uuid.js +1 -1
- package/package/helpers/visitorId.d.ts +1 -1
- package/package/helpers/visitorId.js +7 -4
- package/package/index-helpers/blocks-exports.d.ts +2 -2
- package/package/index-helpers/blocks-exports.js +2 -2
- package/package/index.d.ts +2 -2
- package/package/index.js +1 -1
- package/package/scripts/init-editing.js +65 -57
- package/package/types/builder-props.d.ts +10 -0
- package/package/types/components.d.ts +8 -2
- package/package/types/enforced-partials.d.ts +21 -0
- package/package/types/targets.d.ts +1 -3
- package/package/types/typescript.d.ts +6 -0
- package/package.json +2 -2
- package/src/blocks/BaseText.svelte +1 -1
- package/src/blocks/button/button.svelte +21 -34
- package/src/blocks/button/component-info.ts +20 -27
- package/src/blocks/columns/columns.svelte +28 -32
- package/src/blocks/columns/component-info.ts +205 -240
- package/src/blocks/custom-code/component-info.ts +20 -27
- package/src/blocks/embed/component-info.ts +34 -51
- package/src/blocks/embed/helpers.ts +2 -8
- package/src/blocks/form/component-info.ts +204 -253
- package/src/blocks/form/form.svelte +1 -368
- package/src/blocks/fragment/component-info.ts +3 -5
- package/src/blocks/helpers.ts +43 -0
- package/src/blocks/image/component-info.ts +113 -161
- package/src/blocks/image/image.helpers.ts +5 -33
- package/src/blocks/img/component-info.ts +11 -16
- package/src/blocks/img/img.svelte +7 -31
- package/src/blocks/input/component-info.ts +35 -66
- package/src/blocks/input/input.svelte +7 -31
- package/src/blocks/raw-text/component-info.ts +8 -12
- package/src/blocks/raw-text/raw-text.svelte +2 -5
- package/src/blocks/section/component-info.ts +28 -37
- package/src/blocks/section/section.svelte +7 -30
- package/src/blocks/select/component-info.ts +38 -55
- package/src/blocks/select/select.svelte +7 -31
- package/src/blocks/submit-button/component-info.ts +10 -15
- package/src/blocks/submit-button/submit-button.svelte +7 -30
- package/src/blocks/symbol/component-info.ts +31 -39
- package/src/blocks/symbol/symbol.helpers.ts +47 -0
- package/src/blocks/symbol/symbol.svelte +51 -95
- package/src/blocks/text/component-info.ts +14 -18
- package/src/blocks/text/text.svelte +2 -2
- package/src/blocks/textarea/component-info.ts +26 -36
- package/src/blocks/textarea/textarea.svelte +7 -30
- package/src/blocks/video/component-info.ts +77 -103
- package/src/blocks/video/video.svelte +4 -31
- package/src/components/{render-block/render-block.helpers.ts → block/block.helpers.ts} +22 -49
- package/src/components/block/block.svelte +158 -0
- package/src/components/{render-block → block/components}/block-styles.svelte +24 -25
- package/src/components/block/components/block-wrapper.svelte +70 -0
- package/src/components/block/components/component-ref/component-ref.helpers.ts +53 -0
- package/src/components/block/components/component-ref/component-ref.svelte +41 -0
- package/src/components/block/components/interactive-element.svelte +42 -0
- package/src/components/block/components/repeated-block.svelte +30 -0
- package/src/components/{render-block → block}/types.ts +1 -2
- package/src/components/{render-blocks.svelte → blocks/blocks-wrapper.svelte} +14 -32
- package/src/components/blocks/blocks.svelte +39 -0
- package/src/components/{render-content/render-content.svelte → content/components/enable-editor.svelte} +75 -202
- package/src/components/{render-content/components/render-styles.helpers.ts → content/components/styles.helpers.ts} +9 -11
- package/src/components/{render-content/components/render-styles.svelte → content/components/styles.svelte} +5 -5
- package/src/components/content/content.helpers.ts +42 -0
- package/src/components/content/content.svelte +138 -0
- package/src/components/content/content.types.ts +23 -0
- package/src/components/content/index.ts +1 -0
- package/src/components/{render-content → content}/wrap-component-ref.ts +1 -1
- package/src/components/content-variants/content-variants.svelte +120 -0
- package/src/components/content-variants/content-variants.types.ts +20 -0
- package/src/components/{render-content-variants → content-variants}/helpers.ts +53 -94
- package/src/components/inlined-script.svelte +13 -0
- package/src/constants/builder-registered-components.ts +34 -14
- package/src/constants/device-sizes.ts +16 -22
- package/src/constants/sdk-version.ts +1 -1
- package/src/constants/target.ts +3 -1
- package/src/context/builder.context.ts +1 -1
- package/src/context/types.ts +2 -7
- package/src/functions/apply-patch-with-mutation.ts +61 -0
- package/src/functions/camel-to-kebab-case.ts +1 -2
- package/src/functions/evaluate/acorn.ts +2501 -0
- package/src/functions/evaluate/evaluate.ts +90 -0
- package/src/functions/evaluate/index.ts +1 -0
- package/src/functions/evaluate/interpreter.ts +3887 -0
- package/src/functions/evaluate/non-node-runtime.ts +94 -0
- package/src/functions/evaluate/types.ts +10 -0
- package/src/functions/extract-text-styles.ts +3 -18
- package/src/functions/fast-clone.ts +1 -2
- package/src/functions/get-block-actions-handler.ts +11 -20
- package/src/functions/get-block-actions.ts +22 -14
- package/src/functions/get-block-component-options.ts +2 -3
- package/src/functions/get-block-properties.ts +24 -17
- package/src/functions/get-builder-search-params/index.ts +5 -21
- package/src/functions/get-content/generate-content-url.ts +10 -25
- package/src/functions/get-content/index.ts +34 -37
- package/src/functions/get-content/types.ts +4 -2
- package/src/functions/get-fetch.ts +3 -10
- package/src/functions/get-global-this.ts +1 -2
- package/src/functions/get-processed-block.ts +14 -21
- package/src/functions/get-react-native-block-styles.ts +6 -12
- package/src/functions/if-target.ts +2 -3
- package/src/functions/is-browser.ts +1 -1
- package/src/functions/is-editing.ts +2 -7
- package/src/functions/is-iframe.ts +1 -2
- package/src/functions/is-non-node-server.ts +9 -0
- package/src/functions/is-previewing.ts +1 -4
- package/src/functions/on-change.ts +2 -2
- package/src/functions/register-component.ts +24 -26
- package/src/functions/register.ts +6 -8
- package/src/functions/sanitize-react-native-block-styles.ts +17 -24
- package/src/functions/set-editor-settings.ts +5 -6
- package/src/functions/set.ts +3 -15
- package/src/functions/track/helpers.ts +8 -24
- package/src/functions/track/index.ts +37 -42
- package/src/functions/track/interaction.ts +21 -38
- package/src/functions/transform-block-properties.ts +1 -1
- package/src/functions/transform-block.ts +1 -1
- package/src/helpers/ab-tests.ts +69 -78
- package/src/helpers/canTrack.ts +2 -4
- package/src/helpers/cookie.ts +15 -46
- package/src/helpers/css.ts +4 -13
- package/src/helpers/flatten.ts +11 -16
- package/src/helpers/localStorage.ts +4 -8
- package/src/helpers/logger.ts +2 -2
- package/src/helpers/nullable.ts +1 -3
- package/src/helpers/preview-lru-cache/get.ts +8 -0
- package/src/helpers/preview-lru-cache/helpers.ts +9 -0
- package/src/helpers/preview-lru-cache/init.ts +17 -0
- package/src/helpers/preview-lru-cache/set.ts +18 -0
- package/src/helpers/preview-lru-cache/types.ts +12 -0
- package/src/helpers/sessionId.ts +12 -13
- package/src/helpers/time.ts +1 -3
- package/src/helpers/url.ts +1 -2
- package/src/helpers/uuid.ts +3 -3
- package/src/helpers/visitorId.ts +14 -17
- package/src/index-helpers/blocks-exports.ts +2 -2
- package/src/index-helpers/top-of-file.ts +1 -1
- package/src/index.ts +2 -13
- package/src/scripts/init-editing.ts +85 -98
- package/src/types/api-version.ts +1 -1
- package/src/types/builder-block.ts +1 -3
- package/src/types/builder-content.ts +7 -4
- package/src/types/builder-props.ts +10 -0
- package/src/types/can-track.ts +1 -1
- package/src/types/components.ts +17 -13
- package/src/types/deep-partial.ts +1 -7
- package/src/types/element.ts +1 -3
- package/src/types/enforced-partials.ts +13 -0
- package/src/types/input.ts +6 -9
- package/src/types/targets.ts +1 -6
- package/src/types/typescript.ts +10 -5
- package/package/blocks/util.d.ts +0 -4
- package/package/blocks/util.js +0 -13
- package/package/components/render-block/render-block.helpers.d.ts +0 -12
- package/package/components/render-block/render-block.svelte +0 -152
- package/package/components/render-block/render-block.svelte.d.ts +0 -24
- package/package/components/render-block/render-component.svelte +0 -21
- package/package/components/render-block/render-component.svelte.d.ts +0 -34
- package/package/components/render-block/render-repeated-block.svelte.d.ts +0 -23
- package/package/components/render-blocks.svelte.d.ts +0 -26
- package/package/components/render-content/builder-editing.svelte +0 -4
- package/package/components/render-content/builder-editing.svelte.d.ts +0 -14
- package/package/components/render-content/index.d.ts +0 -1
- package/package/components/render-content/index.js +0 -1
- package/package/components/render-content/render-content.helpers.d.ts +0 -7
- package/package/components/render-content/render-content.helpers.js +0 -30
- package/package/components/render-content/render-content.svelte.d.ts +0 -31
- package/package/components/render-content/render-content.types.d.ts +0 -38
- package/package/components/render-content-variants/helpers.d.ts +0 -17
- package/package/components/render-content-variants/render-content-variants.svelte +0 -70
- package/package/components/render-content-variants/render-content-variants.svelte.d.ts +0 -23
- package/package/components/render-inlined-styles.svelte.d.ts +0 -21
- package/package/functions/evaluate.test.js +0 -17
- package/package/functions/get-builder-search-params/fn.test.js +0 -13
- package/package/functions/get-content/generate-content-url.test.js +0 -97
- package/package/functions/get-processed-block.test.js +0 -33
- package/package/functions/on-change.test.d.ts +0 -1
- package/package/functions/on-change.test.js +0 -20
- package/package/functions/set.test.d.ts +0 -1
- package/package/functions/set.test.js +0 -16
- package/package/helpers/url.test.d.ts +0 -1
- package/package/helpers/url.test.js +0 -21
- package/src/blocks/util.ts +0 -18
- package/src/components/render-block/render-block.svelte +0 -173
- package/src/components/render-block/render-component.svelte +0 -40
- package/src/components/render-block/render-repeated-block.svelte +0 -25
- package/src/components/render-content/builder-editing.svelte +0 -4
- package/src/components/render-content/index.ts +0 -1
- package/src/components/render-content/render-content.helpers.ts +0 -48
- package/src/components/render-content/render-content.types.ts +0 -42
- package/src/components/render-content-variants/render-content-variants.svelte +0 -83
- package/src/functions/evaluate.test.ts +0 -21
- package/src/functions/evaluate.ts +0 -99
- package/src/functions/get-builder-search-params/fn.test.ts +0 -19
- package/src/functions/get-content/generate-content-url.test.ts +0 -112
- package/src/functions/get-processed-block.test.ts +0 -35
- package/src/functions/on-change.test.ts +0 -23
- package/src/functions/set.test.ts +0 -19
- package/src/helpers/url.test.ts +0 -23
- /package/package/components/{render-block → block}/types.d.ts +0 -0
- /package/package/components/{render-block → block}/types.js +0 -0
- /package/package/{functions/evaluate.test.d.ts → components/content/content.types.js} +0 -0
- /package/package/components/{render-content → content}/wrap-component-ref.d.ts +0 -0
- /package/package/components/{render-content → content}/wrap-component-ref.js +0 -0
- /package/package/components/{render-content/render-content.types.js → content-variants/content-variants.types.js} +0 -0
- /package/package/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
- /package/package/functions/{get-builder-search-params/fn.test.d.ts → evaluate/types.js} +0 -0
- /package/package/{functions/get-content/generate-content-url.test.d.ts → types/builder-props.js} +0 -0
- /package/package/{functions/get-processed-block.test.d.ts → types/enforced-partials.js} +0 -0
- /package/src/components/{render-inlined-styles.svelte → inlined-styles.svelte} +0 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { writable } from "svelte/store";
|
|
3
|
+
|
|
4
|
+
import { getDefaultRegisteredComponents } from "../../constants/builder-registered-components.js";
|
|
5
|
+
import type {
|
|
6
|
+
BuilderContextInterface,
|
|
7
|
+
BuilderRenderState,
|
|
8
|
+
RegisteredComponents,
|
|
9
|
+
} from "../../context/types.js";
|
|
10
|
+
import {
|
|
11
|
+
components,
|
|
12
|
+
serializeComponentInfo,
|
|
13
|
+
} from "../../functions/register-component.js";
|
|
14
|
+
import Blocks from "../blocks/blocks.svelte";
|
|
15
|
+
import ContentStyles from "./components/styles.svelte";
|
|
16
|
+
import type { ContentProps } from "./content.types.js";
|
|
17
|
+
import {
|
|
18
|
+
getContentInitialValue,
|
|
19
|
+
getContextStateInitialValue,
|
|
20
|
+
} from "./content.helpers.js";
|
|
21
|
+
import { TARGET } from "../../constants/target.js";
|
|
22
|
+
import { getRenderContentScriptString } from "../content-variants/helpers.js";
|
|
23
|
+
import EnableEditor from "./components/enable-editor.svelte";
|
|
24
|
+
import InlinedScript from "../inlined-script.svelte";
|
|
25
|
+
import { wrapComponentRef } from "./wrap-component-ref.js";
|
|
26
|
+
import type { ComponentInfo } from "../../types/components.js";
|
|
27
|
+
import type { Dictionary } from "../../types/typescript.js";
|
|
28
|
+
|
|
29
|
+
export let content: ContentProps["content"];
|
|
30
|
+
export let customComponents: ContentProps["customComponents"];
|
|
31
|
+
export let data: ContentProps["data"];
|
|
32
|
+
export let locale: ContentProps["locale"];
|
|
33
|
+
export let context: ContentProps["context"];
|
|
34
|
+
export let apiKey: ContentProps["apiKey"];
|
|
35
|
+
export let apiVersion: ContentProps["apiVersion"];
|
|
36
|
+
export let model: ContentProps["model"];
|
|
37
|
+
export let canTrack: ContentProps["canTrack"];
|
|
38
|
+
export let includeRefs: ContentProps["includeRefs"];
|
|
39
|
+
export let enrich: ContentProps["enrich"];
|
|
40
|
+
export let classNameProp: ContentProps["classNameProp"];
|
|
41
|
+
export let showContent: ContentProps["showContent"];
|
|
42
|
+
export let isSsrAbTest: ContentProps["isSsrAbTest"];
|
|
43
|
+
|
|
44
|
+
function contentSetState(newRootState: BuilderRenderState) {
|
|
45
|
+
$builderContextSignal.rootState = newRootState;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let scriptStr = getRenderContentScriptString({
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
50
|
+
variationId: content?.testVariationId!,
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-non-null-asserted-optional-chain
|
|
52
|
+
contentId: content?.id!,
|
|
53
|
+
});
|
|
54
|
+
let registeredComponents = [
|
|
55
|
+
...getDefaultRegisteredComponents(),
|
|
56
|
+
// While this `components` object is deprecated, we must maintain support for it.
|
|
57
|
+
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
58
|
+
// existing usage.
|
|
59
|
+
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
60
|
+
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
61
|
+
...components,
|
|
62
|
+
...(customComponents || []),
|
|
63
|
+
].reduce<RegisteredComponents>(
|
|
64
|
+
(acc, { component, ...info }) => ({
|
|
65
|
+
...acc,
|
|
66
|
+
[info.name]: {
|
|
67
|
+
component: component,
|
|
68
|
+
...serializeComponentInfo(info),
|
|
69
|
+
},
|
|
70
|
+
}),
|
|
71
|
+
{}
|
|
72
|
+
);
|
|
73
|
+
let builderContextSignal = writable({
|
|
74
|
+
content: getContentInitialValue({
|
|
75
|
+
content: content,
|
|
76
|
+
data: data,
|
|
77
|
+
}),
|
|
78
|
+
localState: undefined,
|
|
79
|
+
rootState: getContextStateInitialValue({
|
|
80
|
+
content: content,
|
|
81
|
+
data: data,
|
|
82
|
+
locale: locale,
|
|
83
|
+
}),
|
|
84
|
+
rootSetState: contentSetState,
|
|
85
|
+
context: context || {},
|
|
86
|
+
apiKey: apiKey,
|
|
87
|
+
apiVersion: apiVersion,
|
|
88
|
+
componentInfos: [
|
|
89
|
+
...getDefaultRegisteredComponents(),
|
|
90
|
+
// While this `components` object is deprecated, we must maintain support for it.
|
|
91
|
+
// Since users are able to override our default components, we need to make sure that we do not break such
|
|
92
|
+
// existing usage.
|
|
93
|
+
// This is why we spread `components` after the default Builder.io components, but before the `props.customComponents`,
|
|
94
|
+
// which is the new standard way of providing custom components, and must therefore take precedence.
|
|
95
|
+
...components,
|
|
96
|
+
...(customComponents || []),
|
|
97
|
+
].reduce<Dictionary<ComponentInfo>>(
|
|
98
|
+
(acc, { component: _, ...info }) => ({
|
|
99
|
+
...acc,
|
|
100
|
+
[info.name]: serializeComponentInfo(info),
|
|
101
|
+
}),
|
|
102
|
+
{}
|
|
103
|
+
),
|
|
104
|
+
inheritedStyles: {},
|
|
105
|
+
});
|
|
106
|
+
</script>
|
|
107
|
+
|
|
108
|
+
<EnableEditor
|
|
109
|
+
{content}
|
|
110
|
+
{model}
|
|
111
|
+
{context}
|
|
112
|
+
{apiKey}
|
|
113
|
+
{canTrack}
|
|
114
|
+
{locale}
|
|
115
|
+
{includeRefs}
|
|
116
|
+
{enrich}
|
|
117
|
+
{classNameProp}
|
|
118
|
+
{showContent}
|
|
119
|
+
{builderContextSignal}
|
|
120
|
+
{...{}}
|
|
121
|
+
>
|
|
122
|
+
{#if isSsrAbTest}
|
|
123
|
+
<InlinedScript {scriptStr} />
|
|
124
|
+
{/if}
|
|
125
|
+
|
|
126
|
+
{#if TARGET !== "reactNative"}
|
|
127
|
+
<ContentStyles
|
|
128
|
+
contentId={$builderContextSignal.content?.id}
|
|
129
|
+
cssCode={$builderContextSignal.content?.data?.cssCode}
|
|
130
|
+
customFonts={$builderContextSignal.content?.data?.customFonts}
|
|
131
|
+
/>
|
|
132
|
+
{/if}
|
|
133
|
+
<Blocks
|
|
134
|
+
blocks={$builderContextSignal.content?.data?.blocks}
|
|
135
|
+
context={builderContextSignal}
|
|
136
|
+
{registeredComponents}
|
|
137
|
+
/>
|
|
138
|
+
</EnableEditor>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { BuilderRenderState } from '../../context/types.js';
|
|
2
|
+
import type { EnforcePartials } from '../../types/enforced-partials.js';
|
|
3
|
+
import type { ContentVariantsProps } from '../content-variants/content-variants.types.js';
|
|
4
|
+
interface InternalRenderProps {
|
|
5
|
+
/**
|
|
6
|
+
* TO-DO: improve qwik generator to not remap this name for non-HTML tags, then name it `className`
|
|
7
|
+
*/
|
|
8
|
+
classNameProp: string | undefined;
|
|
9
|
+
showContent: boolean;
|
|
10
|
+
isSsrAbTest: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type ContentProps = InternalRenderProps & EnforcePartials<ContentVariantsProps>;
|
|
13
|
+
export interface BuilderComponentStateChange {
|
|
14
|
+
state: BuilderRenderState;
|
|
15
|
+
ref: {
|
|
16
|
+
name?: string;
|
|
17
|
+
props?: {
|
|
18
|
+
builderBlock?: {
|
|
19
|
+
id?: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './content.svelte'
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
<script context="module" lang="ts">
|
|
2
|
+
type VariantsProviderProps = ContentVariantsProps & {
|
|
3
|
+
/**
|
|
4
|
+
* For internal use only. Do not provide this prop.
|
|
5
|
+
*/
|
|
6
|
+
__isNestedRender?: boolean;
|
|
7
|
+
};
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<script lang="ts">
|
|
11
|
+
import { onMount } from "svelte";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
checkShouldRunVariants,
|
|
15
|
+
getScriptString,
|
|
16
|
+
getVariants,
|
|
17
|
+
getVariantsScriptString,
|
|
18
|
+
} from "./helpers.js";
|
|
19
|
+
import ContentComponent from "../content/content.svelte";
|
|
20
|
+
import { getDefaultCanTrack } from "../../helpers/canTrack.js";
|
|
21
|
+
import InlinedStyles from "../inlined-styles.svelte";
|
|
22
|
+
import { handleABTestingSync } from "../../helpers/ab-tests.js";
|
|
23
|
+
import InlinedScript from "../inlined-script.svelte";
|
|
24
|
+
import { TARGET } from "../../constants/target.js";
|
|
25
|
+
import type { ContentVariantsProps } from "./content-variants.types.js";
|
|
26
|
+
|
|
27
|
+
export let canTrack: VariantsProviderProps["canTrack"];
|
|
28
|
+
export let content: VariantsProviderProps["content"];
|
|
29
|
+
export let __isNestedRender: VariantsProviderProps["__isNestedRender"];
|
|
30
|
+
export let model: VariantsProviderProps["model"];
|
|
31
|
+
export let data: VariantsProviderProps["data"];
|
|
32
|
+
export let context: VariantsProviderProps["context"];
|
|
33
|
+
export let apiKey: VariantsProviderProps["apiKey"];
|
|
34
|
+
export let apiVersion: VariantsProviderProps["apiVersion"];
|
|
35
|
+
export let customComponents: VariantsProviderProps["customComponents"];
|
|
36
|
+
export let locale: VariantsProviderProps["locale"];
|
|
37
|
+
export let includeRefs: VariantsProviderProps["includeRefs"];
|
|
38
|
+
export let enrich: VariantsProviderProps["enrich"];
|
|
39
|
+
|
|
40
|
+
$: variantScriptStr = () => {
|
|
41
|
+
return getVariantsScriptString(
|
|
42
|
+
getVariants(content).map((value) => ({
|
|
43
|
+
id: value.testVariationId!,
|
|
44
|
+
testRatio: value.testRatio,
|
|
45
|
+
})),
|
|
46
|
+
content?.id || ""
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
$: hideVariantsStyleString = () => {
|
|
50
|
+
return getVariants(content)
|
|
51
|
+
.map((value) => `.variant-${value.testVariationId} { display: none; } `)
|
|
52
|
+
.join("");
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
let shouldRenderVariants = checkShouldRunVariants({
|
|
56
|
+
canTrack: getDefaultCanTrack(canTrack),
|
|
57
|
+
content: content,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
onMount(() => {
|
|
61
|
+
/**
|
|
62
|
+
* We unmount the non-winning variants post-hydration in Vue.
|
|
63
|
+
*/
|
|
64
|
+
});
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
{#if !__isNestedRender && TARGET !== "reactNative"}
|
|
68
|
+
<InlinedScript scriptStr={getScriptString()} />
|
|
69
|
+
{/if}
|
|
70
|
+
|
|
71
|
+
{#if shouldRenderVariants}
|
|
72
|
+
<InlinedStyles
|
|
73
|
+
id={`variants-styles-${content?.id}`}
|
|
74
|
+
styles={hideVariantsStyleString()}
|
|
75
|
+
/>
|
|
76
|
+
|
|
77
|
+
<InlinedScript scriptStr={variantScriptStr()} />
|
|
78
|
+
|
|
79
|
+
{#each getVariants(content) as variant (variant.testVariationId)}
|
|
80
|
+
<ContentComponent
|
|
81
|
+
content={variant}
|
|
82
|
+
showContent={false}
|
|
83
|
+
classNameProp={undefined}
|
|
84
|
+
{model}
|
|
85
|
+
{data}
|
|
86
|
+
{context}
|
|
87
|
+
{apiKey}
|
|
88
|
+
{apiVersion}
|
|
89
|
+
{customComponents}
|
|
90
|
+
{canTrack}
|
|
91
|
+
{locale}
|
|
92
|
+
{includeRefs}
|
|
93
|
+
{enrich}
|
|
94
|
+
isSsrAbTest={shouldRenderVariants}
|
|
95
|
+
/>
|
|
96
|
+
{/each}
|
|
97
|
+
{/if}
|
|
98
|
+
|
|
99
|
+
<ContentComponent
|
|
100
|
+
{...{}}
|
|
101
|
+
content={shouldRenderVariants
|
|
102
|
+
? content
|
|
103
|
+
: handleABTestingSync({
|
|
104
|
+
item: content,
|
|
105
|
+
canTrack: getDefaultCanTrack(canTrack),
|
|
106
|
+
})}
|
|
107
|
+
classNameProp={`variant-${content?.id}`}
|
|
108
|
+
showContent={true}
|
|
109
|
+
{model}
|
|
110
|
+
{data}
|
|
111
|
+
{context}
|
|
112
|
+
{apiKey}
|
|
113
|
+
{apiVersion}
|
|
114
|
+
{customComponents}
|
|
115
|
+
{canTrack}
|
|
116
|
+
{locale}
|
|
117
|
+
{includeRefs}
|
|
118
|
+
{enrich}
|
|
119
|
+
isSsrAbTest={shouldRenderVariants}
|
|
120
|
+
/>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BuilderRenderContext, RegisteredComponent } from '../../context/types.js';
|
|
2
|
+
import type { ApiVersion } from '../../types/api-version.js';
|
|
3
|
+
import type { BuilderContent } from '../../types/builder-content.js';
|
|
4
|
+
import type { Nullable } from '../../types/typescript.js';
|
|
5
|
+
export interface ContentVariantsProps {
|
|
6
|
+
content?: Nullable<BuilderContent>;
|
|
7
|
+
model?: string;
|
|
8
|
+
data?: {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
context?: BuilderRenderContext;
|
|
12
|
+
apiKey: string;
|
|
13
|
+
apiVersion?: ApiVersion;
|
|
14
|
+
customComponents?: RegisteredComponent[];
|
|
15
|
+
canTrack?: boolean;
|
|
16
|
+
locale?: string;
|
|
17
|
+
/** @deprecated use `enrich` instead **/
|
|
18
|
+
includeRefs?: boolean;
|
|
19
|
+
enrich?: boolean;
|
|
20
|
+
}
|
|
@@ -1,36 +1,40 @@
|
|
|
1
|
-
import { TARGET } from '../../constants/target';
|
|
2
|
-
import { isBrowser } from '../../functions/is-browser';
|
|
3
|
-
import type { Nullable } from '../../helpers/nullable';
|
|
4
|
-
import type { BuilderContent } from '../../types/builder-content';
|
|
5
|
-
import type { Target } from '../../types/targets';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { TARGET } from '../../constants/target.js';
|
|
2
|
+
import { isBrowser } from '../../functions/is-browser.js';
|
|
3
|
+
import type { Nullable } from '../../helpers/nullable.js';
|
|
4
|
+
import type { BuilderContent } from '../../types/builder-content.js';
|
|
5
|
+
import type { Target } from '../../types/targets.js';
|
|
6
|
+
export const getVariants = (content: Nullable<BuilderContent>) => Object.values(content?.variations || {}).map(variant => ({
|
|
7
|
+
...variant,
|
|
8
|
+
testVariationId: variant.id,
|
|
9
|
+
id: content?.id
|
|
10
|
+
}));
|
|
10
11
|
export const checkShouldRunVariants = ({
|
|
11
12
|
canTrack,
|
|
12
|
-
content
|
|
13
|
+
content
|
|
13
14
|
}: {
|
|
14
15
|
canTrack: Nullable<boolean>;
|
|
15
16
|
content: Nullable<BuilderContent>;
|
|
16
17
|
}) => {
|
|
17
18
|
const hasVariants = getVariants(content).length > 0;
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (!
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (isBrowser()) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
20
|
+
/**
|
|
21
|
+
* We cannot SSR in React-Native.
|
|
22
|
+
*/
|
|
23
|
+
if (TARGET === 'reactNative') return false;
|
|
24
|
+
if (!hasVariants) return false;
|
|
25
|
+
if (!canTrack) return false;
|
|
30
26
|
|
|
27
|
+
/**
|
|
28
|
+
* For Vue 2 and Vue 3, we need to (initially) render the variants. This is to avoid hydration mismatch errors.
|
|
29
|
+
* Unlike React, Vue's hydration checks are shallow and do not check the attributes/contents of each element, so we
|
|
30
|
+
* are able to modify the `hidden` HTML attributes and `display` CSS properties without causing a hydration mismatch error.
|
|
31
|
+
*
|
|
32
|
+
* NOTE: after the app is hydrated, we strip the variants from the DOM (on mount) to reduce the amount of HTML in the DOM.
|
|
33
|
+
*/
|
|
34
|
+
if (TARGET === 'vue2' || TARGET === 'vue3') return true;
|
|
35
|
+
if (isBrowser()) return false;
|
|
31
36
|
return true;
|
|
32
37
|
};
|
|
33
|
-
|
|
34
38
|
type VariantData = {
|
|
35
39
|
id: string;
|
|
36
40
|
testRatio?: number;
|
|
@@ -40,11 +44,7 @@ type VariantData = {
|
|
|
40
44
|
* NOTE: when this function is stringified, single-line comments can cause weird issues when compiled by Sveltekit.
|
|
41
45
|
* Make sure to write multi-line comments only.
|
|
42
46
|
*/
|
|
43
|
-
function bldrAbTest(
|
|
44
|
-
contentId: string,
|
|
45
|
-
variants: VariantData[],
|
|
46
|
-
isHydrationTarget: boolean
|
|
47
|
-
) {
|
|
47
|
+
function bldrAbTest(contentId: string, variants: VariantData[], isHydrationTarget: boolean) {
|
|
48
48
|
function getAndSetVariantId(): string {
|
|
49
49
|
function setCookie(name: string, value: string, days?: number) {
|
|
50
50
|
let expires = '';
|
|
@@ -53,13 +53,7 @@ function bldrAbTest(
|
|
|
53
53
|
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
|
54
54
|
expires = '; expires=' + date.toUTCString();
|
|
55
55
|
}
|
|
56
|
-
document.cookie =
|
|
57
|
-
name +
|
|
58
|
-
'=' +
|
|
59
|
-
(value || '') +
|
|
60
|
-
expires +
|
|
61
|
-
'; path=/' +
|
|
62
|
-
'; Secure; SameSite=None';
|
|
56
|
+
document.cookie = name + '=' + (value || '') + expires + '; path=/' + '; Secure; SameSite=None';
|
|
63
57
|
}
|
|
64
58
|
function getCookie(name: string) {
|
|
65
59
|
const nameEQ = name + '=';
|
|
@@ -67,14 +61,13 @@ function bldrAbTest(
|
|
|
67
61
|
for (let i = 0; i < ca.length; i++) {
|
|
68
62
|
let c = ca[i];
|
|
69
63
|
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
|
|
70
|
-
if (c.indexOf(nameEQ) === 0)
|
|
71
|
-
return c.substring(nameEQ.length, c.length);
|
|
64
|
+
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
|
|
72
65
|
}
|
|
73
66
|
return null;
|
|
74
67
|
}
|
|
75
68
|
const cookieName = `builder.tests.${contentId}`;
|
|
76
69
|
const variantInCookie = getCookie(cookieName);
|
|
77
|
-
const availableIDs = variants.map(
|
|
70
|
+
const availableIDs = variants.map(vr => vr.id).concat(contentId);
|
|
78
71
|
/**
|
|
79
72
|
* cookie already exists
|
|
80
73
|
*/
|
|
@@ -101,37 +94,26 @@ function bldrAbTest(
|
|
|
101
94
|
* no variant found, assign default content
|
|
102
95
|
*/
|
|
103
96
|
setCookie(cookieName, contentId);
|
|
104
|
-
|
|
105
97
|
return contentId;
|
|
106
98
|
}
|
|
107
|
-
|
|
108
99
|
const winningVariantId = getAndSetVariantId();
|
|
109
|
-
|
|
110
|
-
const styleEl = document.getElementById(
|
|
111
|
-
`variants-styles-${contentId}`
|
|
112
|
-
) as HTMLStyleElement;
|
|
100
|
+
const styleEl = (document.currentScript?.previousElementSibling as HTMLStyleElement);
|
|
113
101
|
|
|
114
102
|
/**
|
|
115
103
|
* For React to work, we need hydration to match SSR, so we completely remove this node and the styles tag.
|
|
116
104
|
*/
|
|
117
105
|
if (isHydrationTarget) {
|
|
118
106
|
styleEl.remove();
|
|
119
|
-
const thisScriptEl = document.
|
|
120
|
-
`variants-script-${contentId}`
|
|
121
|
-
);
|
|
107
|
+
const thisScriptEl = document.currentScript;
|
|
122
108
|
thisScriptEl?.remove();
|
|
123
109
|
} else {
|
|
124
110
|
/* update styles to hide all variants except the winning variant */
|
|
125
|
-
const newStyleStr = variants
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.
|
|
129
|
-
return `.variant-${value.id} { display: none; }
|
|
111
|
+
const newStyleStr = variants.concat({
|
|
112
|
+
id: contentId
|
|
113
|
+
}).filter(variant => variant.id !== winningVariantId).map(value => {
|
|
114
|
+
return `.variant-${value.id} { display: none; }
|
|
130
115
|
`;
|
|
131
|
-
|
|
132
|
-
.join('');
|
|
133
|
-
|
|
134
|
-
/* TO-DO: check if this actually updates the style */
|
|
116
|
+
}).join('');
|
|
135
117
|
styleEl.innerHTML = newStyleStr;
|
|
136
118
|
}
|
|
137
119
|
}
|
|
@@ -140,15 +122,10 @@ function bldrAbTest(
|
|
|
140
122
|
* NOTE: when this function is stringified, single-line comments can cause weird issues when compiled by Sveltekit.
|
|
141
123
|
* Make sure to write multi-line comments only.
|
|
142
124
|
*/
|
|
143
|
-
function bldrCntntScrpt(
|
|
144
|
-
variantContentId: string,
|
|
145
|
-
defaultContentId: string,
|
|
146
|
-
isHydrationTarget: boolean
|
|
147
|
-
) {
|
|
125
|
+
function bldrCntntScrpt(variantContentId: string, defaultContentId: string, isHydrationTarget: boolean) {
|
|
148
126
|
if (!navigator.cookieEnabled) {
|
|
149
127
|
return;
|
|
150
128
|
}
|
|
151
|
-
|
|
152
129
|
function getCookie(name: string) {
|
|
153
130
|
const nameEQ = name + '=';
|
|
154
131
|
const ca = document.cookie.split(';');
|
|
@@ -161,14 +138,8 @@ function bldrCntntScrpt(
|
|
|
161
138
|
}
|
|
162
139
|
const cookieName = `builder.tests.${defaultContentId}`;
|
|
163
140
|
const variantId = getCookie(cookieName);
|
|
164
|
-
|
|
165
|
-
/** get parent div by searching on `builder-content-id` attr */
|
|
166
|
-
const parentDiv = document.querySelector(
|
|
167
|
-
`[builder-content-id="${variantContentId}"]`
|
|
168
|
-
);
|
|
169
|
-
|
|
141
|
+
const parentDiv = document.currentScript?.parentElement;
|
|
170
142
|
const variantIsDefaultContent = variantContentId === defaultContentId;
|
|
171
|
-
|
|
172
143
|
if (variantId === variantContentId) {
|
|
173
144
|
if (variantIsDefaultContent) {
|
|
174
145
|
/** the default content is already visible, no need to do anything */
|
|
@@ -199,16 +170,9 @@ function bldrCntntScrpt(
|
|
|
199
170
|
*/
|
|
200
171
|
return;
|
|
201
172
|
}
|
|
202
|
-
|
|
203
173
|
return;
|
|
204
174
|
}
|
|
205
|
-
|
|
206
|
-
const getIsHydrationTarget = (target: Target) =>
|
|
207
|
-
target === 'react' ||
|
|
208
|
-
target === 'reactNative' ||
|
|
209
|
-
target === 'vue3' ||
|
|
210
|
-
target === 'vue2';
|
|
211
|
-
|
|
175
|
+
const getIsHydrationTarget = (target: Target) => target === 'react' || target === 'reactNative';
|
|
212
176
|
const isHydrationTarget = getIsHydrationTarget(TARGET);
|
|
213
177
|
|
|
214
178
|
/**
|
|
@@ -217,32 +181,27 @@ const isHydrationTarget = getIsHydrationTarget(TARGET);
|
|
|
217
181
|
*
|
|
218
182
|
* So we hardcode the function names here, and then use those names in the script string to make sure the function names are consistent.
|
|
219
183
|
*/
|
|
220
|
-
const AB_TEST_FN_NAME = '
|
|
221
|
-
const CONTENT_FN_NAME = '
|
|
222
|
-
|
|
223
|
-
export const getVariantsScriptString = (
|
|
224
|
-
variants: VariantData[],
|
|
225
|
-
contentId: string
|
|
226
|
-
) => {
|
|
184
|
+
const AB_TEST_FN_NAME = 'builderIoAbTest';
|
|
185
|
+
const CONTENT_FN_NAME = 'builderIoRenderContent';
|
|
186
|
+
export const getScriptString = () => {
|
|
227
187
|
const fnStr = bldrAbTest.toString().replace(/\s+/g, ' ');
|
|
228
188
|
const fnStr2 = bldrCntntScrpt.toString().replace(/\s+/g, ' ');
|
|
229
|
-
|
|
230
189
|
return `
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
${AB_TEST_FN_NAME}("${contentId}", ${JSON.stringify(
|
|
234
|
-
variants
|
|
235
|
-
)}, ${isHydrationTarget})
|
|
190
|
+
window.${AB_TEST_FN_NAME} = ${fnStr}
|
|
191
|
+
window.${CONTENT_FN_NAME} = ${fnStr2}
|
|
236
192
|
`;
|
|
237
193
|
};
|
|
238
|
-
|
|
194
|
+
export const getVariantsScriptString = (variants: VariantData[], contentId: string) => {
|
|
195
|
+
return `
|
|
196
|
+
window.${AB_TEST_FN_NAME}("${contentId}",${JSON.stringify(variants)}, ${isHydrationTarget})`;
|
|
197
|
+
};
|
|
239
198
|
export const getRenderContentScriptString = ({
|
|
240
|
-
parentContentId,
|
|
241
199
|
contentId,
|
|
200
|
+
variationId
|
|
242
201
|
}: {
|
|
202
|
+
variationId: string;
|
|
243
203
|
contentId: string;
|
|
244
|
-
parentContentId: string;
|
|
245
204
|
}) => {
|
|
246
205
|
return `
|
|
247
|
-
|
|
248
|
-
}
|
|
206
|
+
window.${CONTENT_FN_NAME}("${variationId}", "${contentId}", ${isHydrationTarget})`;
|
|
207
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script context="module" lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
scriptStr: string;
|
|
4
|
+
id?: string;
|
|
5
|
+
}
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<script lang="ts">
|
|
9
|
+
export let scriptStr: Props["scriptStr"];
|
|
10
|
+
export let id: Props["id"];
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<svelte:element this={"script"} {id}>{@html scriptStr}</svelte:element>
|
|
@@ -26,17 +26,37 @@ import { componentInfo as customCodeInfo } from '../blocks/custom-code/component
|
|
|
26
26
|
* Returns a list of all registered components.
|
|
27
27
|
* NOTE: This needs to be a function to work around ESM circular dependencies.
|
|
28
28
|
*/
|
|
29
|
-
export const getDefaultRegisteredComponents: () => RegisteredComponent[] =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
29
|
+
export const getDefaultRegisteredComponents: () => RegisteredComponent[] = () => [{
|
|
30
|
+
component: Button,
|
|
31
|
+
...buttonComponentInfo
|
|
32
|
+
}, {
|
|
33
|
+
component: Columns,
|
|
34
|
+
...columnsComponentInfo
|
|
35
|
+
}, {
|
|
36
|
+
component: customCode,
|
|
37
|
+
...customCodeInfo
|
|
38
|
+
}, {
|
|
39
|
+
component: embed,
|
|
40
|
+
...embedComponentInfo
|
|
41
|
+
}, {
|
|
42
|
+
component: Fragment,
|
|
43
|
+
...fragmentComponentInfo
|
|
44
|
+
}, {
|
|
45
|
+
component: Image,
|
|
46
|
+
...imageComponentInfo
|
|
47
|
+
}, {
|
|
48
|
+
component: Img,
|
|
49
|
+
...imgComponentInfo
|
|
50
|
+
}, {
|
|
51
|
+
component: Section,
|
|
52
|
+
...sectionComponentInfo
|
|
53
|
+
}, {
|
|
54
|
+
component: Symbol,
|
|
55
|
+
...symbolComponentInfo
|
|
56
|
+
}, {
|
|
57
|
+
component: Text,
|
|
58
|
+
...textComponentInfo
|
|
59
|
+
}, {
|
|
60
|
+
component: Video,
|
|
61
|
+
...videoComponentInfo
|
|
62
|
+
}]
|