@designcrowd/library.brand-page 6.1.1-json-prereq-3 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/{CreatedOnBrandCrowd-de-de-hj_ievMc.js → CreatedOnBrandCrowd-de-de-B5B5ThJ6.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-jAOSpfCw.js → CreatedOnBrandCrowd-en-us-a48CaORy.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DZMVc-y3.js → CreatedOnBrandCrowd-es-es-xpuZ317-.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-DvB54H38.js → CreatedOnBrandCrowd-fr-ca-V-iUMArW.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-DvB54H38.js → CreatedOnBrandCrowd-fr-fr-V-iUMArW.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-bf-x1xhi.js → CreatedOnBrandCrowd-pt-br-DZ0NKSAy.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-bf-x1xhi.js → CreatedOnBrandCrowd-pt-pt-DZ0NKSAy.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-B-NY1B44.js → CreatedOnDcom-de-de-_950cgGp.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-Cd4C6KQf.js → CreatedOnDcom-en-us-DogKzH-g.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-DONlsQsm.js → CreatedOnDcom-es-es-CmGM3IPX.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-Dsv3FRpZ.js → CreatedOnDcom-fr-ca-BonEDkWZ.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-DOgyvY5C.js → CreatedOnDcom-fr-fr-DQHtKrd_.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-DX66MhJS.js → CreatedOnDcom-pt-br-CtYJSBjs.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-COe2G0bU.js → CreatedOnDcom-pt-pt-DoO9r4lA.js} +1 -1
- package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +7 -8
- package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +6 -4
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.d.ts +1 -0
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.js +4 -1
- package/lib/src/brand-page/components/payment/Payment.mixin.js +4 -3
- package/lib/src/brand-page/components/payment/__fixtures__/request-payment.d.ts +1 -0
- package/lib/src/brand-page/components/payment/__fixtures__/support-me.d.ts +1 -0
- package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +1 -0
- package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +4 -1
- package/lib/src/brand-page/composables/consent.composable.d.ts +2 -0
- package/lib/src/brand-page/composables/consent.composable.js +9 -3
- package/lib/src/brand-page/models/brand-page-context.model.d.ts +7 -0
- package/lib/src/brand-page/models/index.d.ts +26 -34
- package/lib/src/brand-page/utils/context.util.d.ts +8 -0
- package/lib/src/brand-page/utils/context.util.js +8 -0
- package/lib/src/brand-page/utils/migration.util.js +0 -11
- package/lib/src/brand-page/utils/text.util.d.ts +1 -13
- package/lib/src/brand-page/utils/text.util.js +0 -64
- package/lib/src/brand-page/utils/vcard.util.js +4 -4
- package/lib/src/brand-page/utils/view-model.util.d.ts +0 -1
- package/lib/src/brand-page/utils/view-model.util.js +20 -68
- package/lib/src/brand-page/view-models.d.ts +3 -3
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +1 -1
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +51 -18
- package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.d.ts +9 -2
- package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.js +10 -6
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.d.ts +20 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.js +44 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.d.ts +27 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.js +44 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +103 -24
- package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -0
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +9 -3
- package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +1 -1
- package/lib/src/brand-page-maker/utils/index.d.ts +0 -2
- package/lib/src/brand-page-maker/utils/index.js +0 -2
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +5 -28
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +5 -48
- package/lib/src/brand-page-maker/validators/field.validator.js +2 -10
- package/lib/src/clients/models.d.ts +2 -0
- package/lib/src/css/library.brand-page-brandCrowd.min.css +99 -102
- package/lib/src/css/library.brand-page-brandPage.min.css +99 -102
- package/lib/src/css/library.brand-page-designCom.min.css +99 -102
- package/lib/src/css/library.brand-page-preview.min.css +99 -102
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.mjs +219 -221
- package/lib/src/{lib-scDtk-Pi.js → lib-DtalJKI3.js} +72445 -75920
- package/lib/src/lib.js +1 -2
- package/lib/src/metadata-builder/ai-metadata-executor.d.ts +1 -0
- package/lib/src/metadata-builder/ai-metadata-executor.js +19 -0
- package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +3 -2
- package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +3 -2
- package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +3 -2
- package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +4 -3
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +3 -2
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +2 -1
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +2 -1
- package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +4 -3
- package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +3 -2
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +2 -1
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +11 -15
- package/lib/src/metadata-builder/builders/update-content-text-builder.d.ts +17 -0
- package/lib/src/metadata-builder/builders/update-content-text-builder.js +103 -0
- package/lib/src/metadata-builder/builders/update-content-text-style-builder.d.ts +16 -0
- package/lib/src/metadata-builder/builders/update-content-text-style-builder.js +216 -0
- package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +13 -11
- package/lib/src/metadata-builder/helpers/rte.helpers.js +73 -14
- package/lib/src/metadata-builder/metadata-executor.js +4 -0
- package/lib/src/metadata-builder/models.d.ts +2 -0
- package/lib/src/metadata-builder/models.js +2 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +19 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +4 -0
- package/lib/src/metadata-builder/sanitizers/rte-schema-check.d.ts +8 -7
- package/lib/src/metadata-builder/sanitizers/rte-schema-check.js +52 -21
- package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/GenericTextInput.mixin.js +10 -35
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +3 -12
- package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +2 -3
- package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.js +3 -10
- package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +1 -2
- package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +1 -4
- package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +1 -1
- package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +1 -1
- package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +1 -1
- package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +1 -1
- package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +1 -1
- package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +1 -1
- package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +1 -1
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +1 -1
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +1 -1
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +1 -1
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +1 -1
- package/lib/src/shared/template-settings/store/template-settings-store.d.ts +2 -0
- package/lib/src/shared/template-settings/store/template-settings-store.js +72 -24
- package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +1 -1
- package/lib/src/utils/minify-brand-page-metadata.js +1 -4
- package/package.json +15 -17
- package/src/brand-page/components/contact-form/ContactForm.mixin.ts +9 -7
- package/src/brand-page/components/cookie-consent/CookieConsent.vue +1 -0
- package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -3
- package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +5 -1
- package/src/brand-page/components/page-footer/PageFooter.mixin.ts +4 -1
- package/src/brand-page/components/page-footer/PageFooter.vue +1 -1
- package/src/brand-page/components/payment/Payment.mixin.ts +4 -3
- package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +8 -1
- package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -1
- package/src/brand-page/components/save-contact/SaveContactWidget.vue +2 -1
- package/src/brand-page/components/shop/Shop.vue +6 -3
- package/src/brand-page/components/social-links/SocialLinks.vue +5 -2
- package/src/brand-page/components/text-wrapper/TextWrapper.vue +6 -17
- package/src/brand-page/composables/consent.composable.ts +18 -4
- package/src/brand-page/models/brand-page-context.model.ts +7 -0
- package/src/brand-page/models/index.ts +26 -35
- package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -3
- package/src/brand-page/utils/context.util.test.ts +43 -0
- package/src/brand-page/utils/context.util.ts +10 -0
- package/src/brand-page/utils/migration.util.ts +0 -12
- package/src/brand-page/utils/style.util.test.ts +0 -51
- package/src/brand-page/utils/text.util.ts +4 -83
- package/src/brand-page/utils/vcard.util.ts +4 -6
- package/src/brand-page/utils/view-model.util.ts +26 -94
- package/src/brand-page/view-models.ts +2 -3
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +4 -5
- package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.test.ts +135 -0
- package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +62 -21
- package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +1 -0
- package/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.ts +10 -6
- package/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.ts +73 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.ts +85 -0
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +111 -27
- package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +9 -0
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +11 -3
- package/src/brand-page-maker/stores/ui/ui-store.ts +1 -1
- package/src/brand-page-maker/utils/index.ts +0 -2
- package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +3 -37
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +11 -66
- package/src/brand-page-maker/validators/field.validator.ts +2 -10
- package/src/clients/models.ts +3 -0
- package/src/lib.ts +1 -9
- package/src/metadata-builder/ai-metadata-executor.ts +26 -0
- package/src/metadata-builder/builders/section-builders/about-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +5 -2
- package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +4 -3
- package/src/metadata-builder/builders/section-builders/images-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +2 -1
- package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +2 -1
- package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +6 -3
- package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +2 -1
- package/src/metadata-builder/builders/section-builders/text-section-builder.ts +13 -19
- package/src/metadata-builder/builders/update-content-text-builder.ts +148 -0
- package/src/metadata-builder/builders/update-content-text-style-builder.ts +352 -0
- package/src/metadata-builder/helpers/rte.helpers.ts +101 -15
- package/src/metadata-builder/metadata-executor.ts +5 -0
- package/src/metadata-builder/models.ts +3 -0
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +27 -0
- package/src/metadata-builder/sanitizers/rte-schema-check.ts +53 -24
- package/src/shared/content-settings/components/GenericTextInput.mixin.ts +11 -42
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +3 -16
- package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.ts +4 -13
- package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.vue +4 -6
- package/src/shared/content-settings/components/text-image-field/TextImageField.vue +3 -6
- package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -6
- package/src/shared/content-settings/components/text-items-field/TextItemsField.vue +1 -1
- package/src/shared/template-settings/store/template-settings-store.ts +93 -27
- package/src/utils/minify-brand-page-metadata.ts +1 -4
- package/lib/src/brand-page/utils/migration/migration-20.d.ts +0 -2
- package/lib/src/brand-page/utils/migration/migration-20.js +0 -66
- package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.d.ts +0 -22
- package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.js +0 -22
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.d.ts +0 -14
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.js +0 -39
- package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.d.ts +0 -28
- package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.js +0 -117
- package/lib/src/brand-page-maker/utils/rte-render.util.d.ts +0 -63
- package/lib/src/brand-page-maker/utils/rte-render.util.js +0 -95
- package/lib/src/brand-page-maker/utils/rte-sanitize.util.d.ts +0 -6
- package/lib/src/brand-page-maker/utils/rte-sanitize.util.js +0 -156
- package/src/brand-page/utils/migration/migration-20.server.test.ts +0 -125
- package/src/brand-page/utils/migration/migration-20.test.ts +0 -72
- package/src/brand-page/utils/migration/migration-20.ts +0 -87
- package/src/brand-page/utils/text.util.test.ts +0 -106
- package/src/brand-page/utils/view-model.pageid-rte.test.ts +0 -104
- package/src/brand-page-maker/__fixtures__/complex-rte.fixture.ts +0 -23
- package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.test.ts +0 -52
- package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.ts +0 -42
- package/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.ts +0 -162
- package/src/brand-page-maker/utils/__snapshots__/rte-render-parity.test.ts.snap +0 -202
- package/src/brand-page-maker/utils/rte-features.test.ts +0 -378
- package/src/brand-page-maker/utils/rte-render-parity.test.ts +0 -164
- package/src/brand-page-maker/utils/rte-render.util.ts +0 -165
- package/src/brand-page-maker/utils/rte-sanitize-json.test.ts +0 -172
- package/src/brand-page-maker/utils/rte-sanitize.util.ts +0 -192
- package/src/brand-page-maker/validators/field.validator.test.ts +0 -55
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { defineComponent } from 'vue';
|
|
2
2
|
import { FORM_FIELD_TYPES } from '@brand-page/models';
|
|
3
|
-
import { getEmailValidationError, getMessageValidationError, getNameValidationError, getPhoneValidationError, } from '@brand-page/utils';
|
|
3
|
+
import { getEmailValidationError, getMessageValidationError, getNameValidationError, getPhoneValidationError, isPreviewMode, } from '@brand-page/utils';
|
|
4
4
|
import { isDecorativeButtonStyle } from '../../utils/button.util';
|
|
5
5
|
import brandPageClient from '../../clients/brand-page.client';
|
|
6
6
|
import { isEmail } from '../../../utils/validator.util';
|
|
7
7
|
import { ALIGN_CARD_CENTER, ALIGN_CARD_CENTER_IMAGE, ALIGN_CENTERED, ALIGN_LEFT_FULL_IMAGE, ALIGN_RIGHT_FULL_IMAGE, DISPLAY_STYLE_COLLAPSED, RECAPTCHA_ACTION_CONTACT_FORM, TEXT_ONLY, } from '../../constants';
|
|
8
8
|
import { getRenderText, contentPaddingStyle as toContentPaddingStyle, mutedTextForBackground, backgroundColorFromStyle, } from '@brand-page/utils';
|
|
9
|
-
import { hasRTEContent
|
|
9
|
+
import { hasRTEContent } from '@brand-page-maker/utils';
|
|
10
10
|
import { useReCaptcha } from '../../composables/recaptcha.composable';
|
|
11
11
|
export default defineComponent({
|
|
12
12
|
props: {
|
|
@@ -120,10 +120,7 @@ export default defineComponent({
|
|
|
120
120
|
isEmail(this.viewModel.responseEmail));
|
|
121
121
|
},
|
|
122
122
|
title() {
|
|
123
|
-
|
|
124
|
-
// throw — read the visible text via getPlainTextFromRTE to decide
|
|
125
|
-
// whether to fall back to the default.
|
|
126
|
-
return getPlainTextFromRTE(this.viewModel.title)
|
|
123
|
+
return this.viewModel.title && this.viewModel.title.trim() !== ''
|
|
127
124
|
? this.viewModel.title
|
|
128
125
|
: 'Contact Us';
|
|
129
126
|
},
|
|
@@ -196,7 +193,9 @@ export default defineComponent({
|
|
|
196
193
|
}));
|
|
197
194
|
},
|
|
198
195
|
mounted() {
|
|
199
|
-
if (this.context?.recaptchaSiteKey &&
|
|
196
|
+
if (this.context?.recaptchaSiteKey &&
|
|
197
|
+
!isPreviewMode(this.context) &&
|
|
198
|
+
this.recaptcha) {
|
|
200
199
|
this.recaptcha.initialise({ siteKey: this.context.recaptchaSiteKey });
|
|
201
200
|
}
|
|
202
201
|
},
|
|
@@ -206,7 +205,7 @@ export default defineComponent({
|
|
|
206
205
|
if (this.hasFormError) {
|
|
207
206
|
return;
|
|
208
207
|
}
|
|
209
|
-
if (this.
|
|
208
|
+
if (isPreviewMode(this.context) || !this.context.brandPageToken) {
|
|
210
209
|
if (process.env.NODE_ENV !== 'production' &&
|
|
211
210
|
!this.context.brandPageSlug) {
|
|
212
211
|
console.error('brandPageToken is not defined');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent } from 'vue';
|
|
2
2
|
import brandPageClient from '../../clients/brand-page.client';
|
|
3
|
-
import { getEmailValidationError, contentPaddingStyle as toContentPaddingStyle, mutedTextForBackground, backgroundColorFromStyle, } from '@brand-page/utils';
|
|
3
|
+
import { getEmailValidationError, contentPaddingStyle as toContentPaddingStyle, isPreviewMode, mutedTextForBackground, backgroundColorFromStyle, } from '@brand-page/utils';
|
|
4
4
|
import { contentSettingsTr, mailingListTr, } from '@src/composables/useTranslate';
|
|
5
5
|
import { useReCaptcha } from '../../composables/recaptcha.composable';
|
|
6
6
|
import { RECAPTCHA_ACTION_MAILING_LIST } from '../../constants';
|
|
@@ -46,7 +46,9 @@ export default defineComponent({
|
|
|
46
46
|
},
|
|
47
47
|
mounted() {
|
|
48
48
|
this.show = true;
|
|
49
|
-
if (this.context?.recaptchaSiteKey &&
|
|
49
|
+
if (this.context?.recaptchaSiteKey &&
|
|
50
|
+
!isPreviewMode(this.context) &&
|
|
51
|
+
this.recaptcha) {
|
|
50
52
|
this.recaptcha.initialise({ siteKey: this.context.recaptchaSiteKey });
|
|
51
53
|
}
|
|
52
54
|
},
|
|
@@ -103,7 +105,7 @@ export default defineComponent({
|
|
|
103
105
|
},
|
|
104
106
|
isFormDisabled() {
|
|
105
107
|
return (this.hasFormError ||
|
|
106
|
-
this.
|
|
108
|
+
isPreviewMode(this.context) ||
|
|
107
109
|
!this.brandPageToken ||
|
|
108
110
|
this.isSubmitting);
|
|
109
111
|
},
|
|
@@ -125,7 +127,7 @@ export default defineComponent({
|
|
|
125
127
|
if (this.hasFormError) {
|
|
126
128
|
return;
|
|
127
129
|
}
|
|
128
|
-
if (this.
|
|
130
|
+
if (isPreviewMode(this.context) || !this.brandPageToken) {
|
|
129
131
|
return;
|
|
130
132
|
}
|
|
131
133
|
this.isSubmitting = true;
|
|
@@ -20,6 +20,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
20
20
|
default: boolean;
|
|
21
21
|
};
|
|
22
22
|
}>, {}, {}, {
|
|
23
|
+
isInPreviewMode(): boolean;
|
|
23
24
|
containerStyle(): BrandPageCssStyle;
|
|
24
25
|
socialLinksIconStyle(): BrandPageCssStyle;
|
|
25
26
|
isDisplayStyleCentered(): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineComponent } from 'vue';
|
|
2
|
-
import { getRenderText } from '@brand-page/utils';
|
|
2
|
+
import { getRenderText, isPreviewMode } from '@brand-page/utils';
|
|
3
3
|
import { FOOTER_DISPLAY } from '../../constants';
|
|
4
4
|
export default defineComponent({
|
|
5
5
|
props: {
|
|
@@ -23,6 +23,9 @@ export default defineComponent({
|
|
|
23
23
|
},
|
|
24
24
|
emits: ['on-logo-click', 'footer-container-click'],
|
|
25
25
|
computed: {
|
|
26
|
+
isInPreviewMode() {
|
|
27
|
+
return isPreviewMode(this.context);
|
|
28
|
+
},
|
|
26
29
|
containerStyle() {
|
|
27
30
|
return this.viewModel.backgroundStyle;
|
|
28
31
|
},
|
|
@@ -2,6 +2,7 @@ import { defineComponent } from 'vue';
|
|
|
2
2
|
import brandPageClient from '../../clients/brand-page.client';
|
|
3
3
|
import { DISPLAY_STYLE_COLLAPSED, DISPLAY_STYLE_PREVIEW, paymentProviders, } from '../../constants';
|
|
4
4
|
import raygunUtil from '@brand-page/utils/raygun.util';
|
|
5
|
+
import { isPreviewMode } from '@brand-page/utils';
|
|
5
6
|
import { paymentTr } from '@src/composables/useTranslate';
|
|
6
7
|
const DEFAULT_PAYMENT_SUCCESS_MESSAGE = paymentTr(`defaultPaymentSuccessMessage`);
|
|
7
8
|
const PAYMENT_CONFIG_ACTIVE = 'Active';
|
|
@@ -60,10 +61,10 @@ export default defineComponent({
|
|
|
60
61
|
}
|
|
61
62
|
},
|
|
62
63
|
canMakePayment() {
|
|
63
|
-
return !this.context
|
|
64
|
+
return !isPreviewMode(this.context) && this.isPaymentConfigActive;
|
|
64
65
|
},
|
|
65
66
|
showPaymentBlock() {
|
|
66
|
-
return this.context
|
|
67
|
+
return isPreviewMode(this.context) || this.isPaymentConfigActive;
|
|
67
68
|
},
|
|
68
69
|
paymentOptions() {
|
|
69
70
|
return this.paymentConfig.paymentOptions;
|
|
@@ -147,7 +148,7 @@ export default defineComponent({
|
|
|
147
148
|
this.state = paymentConfigId
|
|
148
149
|
? paymentState.PaymentOptionSelection
|
|
149
150
|
: paymentState.IncompleteConfig;
|
|
150
|
-
if (this.context
|
|
151
|
+
if (isPreviewMode(this.context) || !paymentConfigId) {
|
|
151
152
|
return;
|
|
152
153
|
}
|
|
153
154
|
try {
|
|
@@ -2,7 +2,7 @@ import { defineComponent } from 'vue';
|
|
|
2
2
|
import { PAYMENT_OPTION_DISPLAY_TYPES, PAYMENT_OPTION_IMAGE_TYPES, } from '../../../models';
|
|
3
3
|
import { DEFAULT_CURRENCY_SYMBOL } from '../../../constants';
|
|
4
4
|
import { addOpacityToHex } from '../../../utils/color.util';
|
|
5
|
-
import { contentPaddingStyle as toContentPaddingStyle } from '../../../utils';
|
|
5
|
+
import { contentPaddingStyle as toContentPaddingStyle, isPreviewMode, } from '../../../utils';
|
|
6
6
|
import { RGBAtoHex } from '@utils/helpers';
|
|
7
7
|
const MAX_CUSTOM_REQUEST_CHARS = 500;
|
|
8
8
|
export default defineComponent({
|
|
@@ -29,6 +29,9 @@ export default defineComponent({
|
|
|
29
29
|
};
|
|
30
30
|
},
|
|
31
31
|
computed: {
|
|
32
|
+
isInPreviewMode() {
|
|
33
|
+
return isPreviewMode(this.context);
|
|
34
|
+
},
|
|
32
35
|
contentPaddingStyle() {
|
|
33
36
|
return toContentPaddingStyle(this.viewModel);
|
|
34
37
|
},
|
|
@@ -4,8 +4,10 @@ export declare const useConsent: () => {
|
|
|
4
4
|
updateConsent: import("vue").Ref<(c: ConsentType) => void, (c: ConsentType) => void>;
|
|
5
5
|
featureEnabled: import("vue").Ref<boolean, boolean>;
|
|
6
6
|
showConsentModal: import("vue").Ref<boolean, boolean>;
|
|
7
|
+
persist: import("vue").Ref<boolean, boolean>;
|
|
7
8
|
initialise: (options: {
|
|
8
9
|
featureEnabled: boolean;
|
|
10
|
+
persist?: boolean;
|
|
9
11
|
}) => ConsentType;
|
|
10
12
|
grant: (cb?: () => unknown) => void;
|
|
11
13
|
deny: (cb?: () => unknown) => void;
|
|
@@ -28,6 +28,7 @@ const store = reactive({
|
|
|
28
28
|
consent: undefined,
|
|
29
29
|
featureEnabled: false,
|
|
30
30
|
showConsentModal: false,
|
|
31
|
+
persist: true,
|
|
31
32
|
updateConsent(c) {
|
|
32
33
|
this.consent = c;
|
|
33
34
|
},
|
|
@@ -38,7 +39,8 @@ export const useConsent = () => {
|
|
|
38
39
|
return undefined;
|
|
39
40
|
}
|
|
40
41
|
store.featureEnabled = options.featureEnabled;
|
|
41
|
-
store.
|
|
42
|
+
store.persist = options.persist ?? true;
|
|
43
|
+
store.consent = store.persist ? getStoredConsent() : undefined;
|
|
42
44
|
store.showConsentModal =
|
|
43
45
|
options.featureEnabled && !accepted.value && !declined.value;
|
|
44
46
|
return store.consent;
|
|
@@ -46,13 +48,17 @@ export const useConsent = () => {
|
|
|
46
48
|
const accepted = computed(() => Boolean(store.consent && store.consent === 'granted'));
|
|
47
49
|
const declined = computed(() => Boolean(store.consent && store.consent === 'denied'));
|
|
48
50
|
const grant = (cb) => {
|
|
49
|
-
|
|
51
|
+
if (store.persist) {
|
|
52
|
+
storeConsent('granted');
|
|
53
|
+
}
|
|
50
54
|
store.updateConsent('granted');
|
|
51
55
|
store.showConsentModal = store.featureEnabled && !accepted.value;
|
|
52
56
|
cb && cb();
|
|
53
57
|
};
|
|
54
58
|
const deny = (cb) => {
|
|
55
|
-
|
|
59
|
+
if (store.persist) {
|
|
60
|
+
storeConsent('denied');
|
|
61
|
+
}
|
|
56
62
|
store.updateConsent('denied');
|
|
57
63
|
store.showConsentModal = false;
|
|
58
64
|
cb && cb();
|
|
@@ -47,6 +47,13 @@ export type MediaSizes = keyof typeof MEDIA_SIZES;
|
|
|
47
47
|
export interface BrandPageContext {
|
|
48
48
|
isTemplate: boolean;
|
|
49
49
|
isPreview: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Rendered as a customer-facing live preview (safe/inert actions, no
|
|
52
|
+
* watermark, ephemeral consent). Distinct from the editor `isPreview`, which
|
|
53
|
+
* also drives editor/thumbnail-only behaviour. Use `isPreviewMode()` to gate
|
|
54
|
+
* inert-action behaviour that applies to both.
|
|
55
|
+
*/
|
|
56
|
+
isLivePreview?: boolean;
|
|
50
57
|
/** @deprecated should be used on maker only */
|
|
51
58
|
isMobile?: boolean;
|
|
52
59
|
isDesignCom: boolean;
|
|
@@ -7,14 +7,6 @@ import { TextStyles } from './styles.model';
|
|
|
7
7
|
import { LogoStyles } from './logo.model';
|
|
8
8
|
import type { LogoImageModel, LogoTemplateImageModel } from './logo.model';
|
|
9
9
|
import type { BrandPagePaymentConfig } from './payment.model';
|
|
10
|
-
import type { JSONContent } from '@tiptap/vue-3';
|
|
11
|
-
/**
|
|
12
|
-
* BP-5787 — a rich-text field is either a legacy inline-HTML string or a
|
|
13
|
-
* Tiptap JSON document. Typing RTE content fields as RichTextValue (instead of
|
|
14
|
-
* `string`) forces every consumer to handle both forms — surfacing at compile
|
|
15
|
-
* time any code that assumes a plain string (e.g. `.replace`, `.length`).
|
|
16
|
-
*/
|
|
17
|
-
export type RichTextValue = string | JSONContent;
|
|
18
10
|
export * from './brand-page-context.model';
|
|
19
11
|
export * from './payment.model';
|
|
20
12
|
export * from './content.model';
|
|
@@ -156,7 +148,7 @@ export interface TextContent extends Content {
|
|
|
156
148
|
/**
|
|
157
149
|
* For BrandPage/BrandContact only
|
|
158
150
|
*/
|
|
159
|
-
text:
|
|
151
|
+
text: string;
|
|
160
152
|
/**
|
|
161
153
|
* For BrandSite
|
|
162
154
|
*/
|
|
@@ -179,9 +171,9 @@ export interface TextContent extends Content {
|
|
|
179
171
|
}
|
|
180
172
|
export interface ProfileContent extends Content {
|
|
181
173
|
avatarImageUrl: string;
|
|
182
|
-
name:
|
|
183
|
-
title:
|
|
184
|
-
description:
|
|
174
|
+
name: string;
|
|
175
|
+
title: string;
|
|
176
|
+
description: string;
|
|
185
177
|
backgroundColor: BrandPageCssStyle;
|
|
186
178
|
colorReplacements: ColorReplacement[];
|
|
187
179
|
mediaType?: string;
|
|
@@ -199,7 +191,7 @@ export interface MapContent extends Content {
|
|
|
199
191
|
}
|
|
200
192
|
export interface MailingListContent extends Content {
|
|
201
193
|
acceptedFields?: 'emailOnly' | 'nameAndEmail';
|
|
202
|
-
title:
|
|
194
|
+
title: string;
|
|
203
195
|
buttonText: string;
|
|
204
196
|
titleStyle: TextStyleDeclaration;
|
|
205
197
|
buttonTextStyle: TextStyleDeclaration;
|
|
@@ -251,10 +243,10 @@ export interface FormField {
|
|
|
251
243
|
export interface ContactFormContent extends Content {
|
|
252
244
|
type: 'contact-form';
|
|
253
245
|
displayStyle: string;
|
|
254
|
-
title:
|
|
255
|
-
description:
|
|
246
|
+
title: string;
|
|
247
|
+
description: string;
|
|
256
248
|
buttonText: string;
|
|
257
|
-
successMessage:
|
|
249
|
+
successMessage: string;
|
|
258
250
|
fields: FormField[];
|
|
259
251
|
responseEmail: string;
|
|
260
252
|
imageUrl?: string;
|
|
@@ -273,8 +265,8 @@ export interface ContactFormContent extends Content {
|
|
|
273
265
|
export interface BannerSectionContent extends Content {
|
|
274
266
|
type: 'banner-section';
|
|
275
267
|
imageUrl: string;
|
|
276
|
-
title:
|
|
277
|
-
description:
|
|
268
|
+
title: string;
|
|
269
|
+
description: string;
|
|
278
270
|
buttonText: string | false;
|
|
279
271
|
url: string;
|
|
280
272
|
email?: string;
|
|
@@ -301,8 +293,8 @@ export declare const MEDIA_TYPES: {
|
|
|
301
293
|
};
|
|
302
294
|
export type MediaType = keyof typeof MEDIA_TYPES;
|
|
303
295
|
export interface TextMediaItem extends ImageItem {
|
|
304
|
-
title:
|
|
305
|
-
paragraph:
|
|
296
|
+
title: string;
|
|
297
|
+
paragraph: string;
|
|
306
298
|
itemsId: number;
|
|
307
299
|
buttonText?: string | false;
|
|
308
300
|
buttonPageId?: string;
|
|
@@ -321,8 +313,8 @@ export interface TextShapeItem extends TextMediaItem {
|
|
|
321
313
|
export interface ShapeItem extends ImageItem {
|
|
322
314
|
colorReplacements: ColorReplacement[];
|
|
323
315
|
mediaType: MediaType;
|
|
324
|
-
title?:
|
|
325
|
-
paragraph?:
|
|
316
|
+
title?: string;
|
|
317
|
+
paragraph?: string;
|
|
326
318
|
titleOverride?: string;
|
|
327
319
|
paragraphOverride?: string;
|
|
328
320
|
}
|
|
@@ -330,9 +322,9 @@ export interface TestimonialItems {
|
|
|
330
322
|
/** Stable per-item identifier. See ImageItem.id. */
|
|
331
323
|
id: string;
|
|
332
324
|
imageUrl: string;
|
|
333
|
-
name:
|
|
334
|
-
position:
|
|
335
|
-
testimonials:
|
|
325
|
+
name: string;
|
|
326
|
+
position: string;
|
|
327
|
+
testimonials: string;
|
|
336
328
|
colorReplacements: ColorReplacement[];
|
|
337
329
|
mediaType: string;
|
|
338
330
|
size?: string;
|
|
@@ -345,7 +337,7 @@ export interface TestimonialItems {
|
|
|
345
337
|
export interface TextItem {
|
|
346
338
|
/** Stable per-item identifier. See ImageItem.id. */
|
|
347
339
|
id: string;
|
|
348
|
-
text:
|
|
340
|
+
text: string;
|
|
349
341
|
textStyle: TextStyleDeclaration;
|
|
350
342
|
textOverride?: string;
|
|
351
343
|
}
|
|
@@ -362,8 +354,8 @@ export interface ImagesSectionContent extends Content, MediaSection {
|
|
|
362
354
|
enablePopup: boolean;
|
|
363
355
|
}
|
|
364
356
|
export interface MediaSection extends Content {
|
|
365
|
-
title:
|
|
366
|
-
description:
|
|
357
|
+
title: string;
|
|
358
|
+
description: string;
|
|
367
359
|
displayStyle: ImagesSectionContentDisplayStyle;
|
|
368
360
|
items: TextShapeItem[] | TextMediaItem[];
|
|
369
361
|
titleStyle: TextStyleDeclaration;
|
|
@@ -380,7 +372,7 @@ export interface ColorReplacement {
|
|
|
380
372
|
}
|
|
381
373
|
export interface TestimonialSectionContent extends Content {
|
|
382
374
|
type: 'testimonial-section';
|
|
383
|
-
title:
|
|
375
|
+
title: string;
|
|
384
376
|
displayStyle: string;
|
|
385
377
|
items: TestimonialItems[];
|
|
386
378
|
titleStyle: TextStyleDeclaration;
|
|
@@ -394,8 +386,8 @@ export interface TestimonialSectionContent extends Content {
|
|
|
394
386
|
export interface AboutSectionContent extends Content {
|
|
395
387
|
type: 'about-section';
|
|
396
388
|
imageUrl: string;
|
|
397
|
-
title:
|
|
398
|
-
paragraph:
|
|
389
|
+
title: string;
|
|
390
|
+
paragraph: string;
|
|
399
391
|
displayStyle: string;
|
|
400
392
|
titleStyle: TextStyleDeclaration;
|
|
401
393
|
paragraphStyle: TextStyleDeclaration;
|
|
@@ -419,7 +411,7 @@ export declare const SOCIAL_LINKS_ICON_DISPLAY_STYLES: {
|
|
|
419
411
|
export type SocialLinksIconDisplayStyle = keyof typeof SOCIAL_LINKS_ICON_DISPLAY_STYLES;
|
|
420
412
|
export interface SocialLinksContent extends Content {
|
|
421
413
|
type: 'social-links';
|
|
422
|
-
title:
|
|
414
|
+
title: string;
|
|
423
415
|
links: LinksItem[];
|
|
424
416
|
iconDisplayStyle: SocialLinksIconDisplayStyle;
|
|
425
417
|
iconFillStyles: BrandPageCssStyle;
|
|
@@ -442,8 +434,8 @@ export interface DividerSectionContent extends Content {
|
|
|
442
434
|
}
|
|
443
435
|
export interface BookingSectionContent extends Content {
|
|
444
436
|
type: 'booking-section';
|
|
445
|
-
title:
|
|
446
|
-
description:
|
|
437
|
+
title: string;
|
|
438
|
+
description: string;
|
|
447
439
|
buttonText: string;
|
|
448
440
|
url: string;
|
|
449
441
|
email?: string;
|
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
import type { BrandPageContext } from '../models';
|
|
2
2
|
export declare const getSlugFromContext: (context: BrandPageContext) => string;
|
|
3
|
+
/**
|
|
4
|
+
* True when interactive actions must be inert and payment/shop blocks always
|
|
5
|
+
* shown — i.e. the render is a preview, not a live site. Covers both the
|
|
6
|
+
* editor preview (`isPreview`) and the customer live-preview
|
|
7
|
+
* (`isLivePreview`). Editor-only artifacts (cursor, nav interception,
|
|
8
|
+
* placeholders) must keep reading `context.isPreview` directly.
|
|
9
|
+
*/
|
|
10
|
+
export declare const isPreviewMode: (context: BrandPageContext) => boolean;
|
|
@@ -4,3 +4,11 @@ export const getSlugFromContext = (context) => {
|
|
|
4
4
|
}
|
|
5
5
|
return context.brandPageSlug;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* True when interactive actions must be inert and payment/shop blocks always
|
|
9
|
+
* shown — i.e. the render is a preview, not a live site. Covers both the
|
|
10
|
+
* editor preview (`isPreview`) and the customer live-preview
|
|
11
|
+
* (`isLivePreview`). Editor-only artifacts (cursor, nav interception,
|
|
12
|
+
* placeholders) must keep reading `context.isPreview` directly.
|
|
13
|
+
*/
|
|
14
|
+
export const isPreviewMode = (context) => !!(context.isPreview || context.isLivePreview);
|
|
@@ -22,7 +22,6 @@ import { migration16 } from './migration/migration-16';
|
|
|
22
22
|
import { migration17 } from './migration/migration-17';
|
|
23
23
|
import { migration18 } from './migration/migration-18';
|
|
24
24
|
import { migration19 } from './migration/migration-19';
|
|
25
|
-
import { migration20 } from './migration/migration-20';
|
|
26
25
|
const MIGRATION_TABLE = [
|
|
27
26
|
{
|
|
28
27
|
version: 1,
|
|
@@ -150,16 +149,6 @@ const MIGRATION_TABLE = [
|
|
|
150
149
|
runAlways: true,
|
|
151
150
|
description: 'BP-5800: seed the button fill colour as each block’s own container colour so it is independent of the site button (existing sites render unchanged) — backgroundStyle for mailing-list, request-payment and support-me (all types); cardStyle for the BP/BC contact form (skipped on brand-site)',
|
|
152
151
|
},
|
|
153
|
-
{
|
|
154
|
-
version: 20,
|
|
155
|
-
migrateFn: migration20,
|
|
156
|
-
// One-time versioned migration (NOT runAlways): legacy sites (v < 20)
|
|
157
|
-
// convert on their first load in any environment — the maker (browser DOM)
|
|
158
|
-
// and web-renderer SSR (migration-20 installs a jsdom window). It no longer
|
|
159
|
-
// needs to re-run every load because the AI section builders now emit Tiptap
|
|
160
|
-
// JSON directly, so there is no recurring post-load source of HTML to catch.
|
|
161
|
-
description: 'BP-5787: convert inline-HTML RTE content to Tiptap JSON on first load (client or server); AI builders emit JSON directly, so this runs once per site',
|
|
162
|
-
},
|
|
163
152
|
];
|
|
164
153
|
export const GetLatestModelVersion = () => Math.max(...MIGRATION_TABLE.map((x) => x.version));
|
|
165
154
|
export const migrateBrandPageModel = async (brandPageModel, options) => {
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
export declare const getRenderText: (text: string) => string;
|
|
2
|
-
export declare const escapeContentText: (text:
|
|
3
|
-
/**
|
|
4
|
-
* Character length of RTE content as the *editor* counts it — ProseMirror
|
|
5
|
-
* `doc.textContent`: text nodes concatenated with NO separator. This is the
|
|
6
|
-
* metric the MaxLength extension gates on, so length indicators must use it too.
|
|
7
|
-
*
|
|
8
|
-
* Do NOT use escapeContentText/jsonDocPlainText for length limiting: those
|
|
9
|
-
* join text nodes with a space for readable plain-text extraction, so they
|
|
10
|
-
* over-count by one character per inline mark boundary. Converting a word to a
|
|
11
|
-
* hyperlink (or bolding it, etc.) splits its text node, making the counter
|
|
12
|
-
* report length+1 for content the editor considers exactly at the cap (BP-5787).
|
|
13
|
-
*/
|
|
14
|
-
export declare const getContentTextLength: (value: unknown) => number;
|
|
2
|
+
export declare const escapeContentText: (text: string | undefined) => string | undefined;
|
|
15
3
|
export declare const decodeHtmlEntities: (text: string) => string;
|
|
16
4
|
export declare const unescapeContentText: (text: string) => string;
|
|
17
5
|
export declare const encodeContentText: (text: string | undefined) => string | undefined;
|