@designcrowd/library.brand-page 5.19.1-error-html2canvas-1 → 5.19.1-error-html2canvas-3
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-CxCJU9cc.js → CreatedOnBrandCrowd-de-de-BPP1Wtpt.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-en-us-zDJCWP5n.js → CreatedOnBrandCrowd-en-us-BlfpQiIg.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-es-es-DNna1Sh9.js → CreatedOnBrandCrowd-es-es-Tldy_pIo.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-C5XVf_hD.js → CreatedOnBrandCrowd-fr-ca-CHmb3VQE.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-C5XVf_hD.js → CreatedOnBrandCrowd-fr-fr-CHmb3VQE.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-9eUHV_M3.js → CreatedOnBrandCrowd-pt-br-XbU3eK3Z.js} +3 -3
- package/lib/src/{CreatedOnBrandCrowd-pt-br-9eUHV_M3.js → CreatedOnBrandCrowd-pt-pt-XbU3eK3Z.js} +3 -3
- package/lib/src/{CreatedOnDcom-de-de-D9HMpK8Q.js → CreatedOnDcom-de-de-BVMFbVbI.js} +3 -3
- package/lib/src/{CreatedOnDcom-en-us-BCTkchV5.js → CreatedOnDcom-en-us--kaKb1kI.js} +3 -3
- package/lib/src/{CreatedOnDcom-es-es-B0N7VoTp.js → CreatedOnDcom-es-es-XXVLpF2I.js} +3 -3
- package/lib/src/{CreatedOnDcom-fr-ca-Gi4oz_Mm.js → CreatedOnDcom-fr-ca-D-7vtMZ5.js} +3 -3
- package/lib/src/{CreatedOnDcom-fr-fr-DJI8eJo1.js → CreatedOnDcom-fr-fr-CM9oQk77.js} +3 -3
- package/lib/src/{CreatedOnDcom-pt-br-YNWMAuQf.js → CreatedOnDcom-pt-br-VVgu3BEa.js} +3 -3
- package/lib/src/{CreatedOnDcom-pt-pt-DCIIK3sy.js → CreatedOnDcom-pt-pt-CWhA8Vla.js} +3 -3
- package/lib/src/brand-page/clients/brand-page.client.d.ts +9 -9
- package/lib/src/brand-page/components/banner-section/BannerSection.mixin.d.ts +103 -0
- package/lib/src/brand-page/components/banner-section/BannerSection.mixin.js +178 -0
- package/lib/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.d.ts +0 -1
- package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.d.ts +4 -2
- package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.js +1 -0
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +4 -2
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +5 -4
- package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -1
- package/lib/src/brand-page/components/page/PageComponent.mixin.d.ts +1 -1
- package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +3 -3
- package/lib/src/brand-page/components/payment/__fixtures__/request-payment.d.ts +13 -13
- package/lib/src/brand-page/components/payment/__fixtures__/support-me.d.ts +13 -13
- package/lib/src/brand-page/constants/sections/footer-display.constants.js +1 -1
- package/lib/src/brand-page/models/index.d.ts +2 -1
- package/lib/src/brand-page/models/index.js +3 -0
- package/lib/src/brand-page/models/payment.model.d.ts +1 -1
- package/lib/src/brand-page/utils/personalisation.util.js +72 -14
- package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +21 -19
- package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +16 -10
- package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +3 -3
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +181 -170
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +12 -12
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.js +2 -2
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.js +0 -7
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +148 -149
- package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +21 -21
- package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.js +1 -1
- package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.d.ts +4 -2
- package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +4 -2
- package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.d.ts +5 -2
- package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.d.ts +4 -2
- package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/device/Device.mixin.d.ts +4 -2
- package/lib/src/brand-page-maker/components/device/Device.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +4 -2
- package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +3 -3
- package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +11 -11
- package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +27 -25
- package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +27 -27
- package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.js +1 -1
- package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +17 -12
- package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +12 -12
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +30 -32
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +16 -5
- package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +11 -11
- package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +1 -1
- 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 +6 -6
- package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -2
- package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +6 -6
- package/lib/src/brand-page-maker/constants/config-settings-constant.js +1 -1
- package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.d.ts +1 -1
- package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.js +1 -1
- package/lib/src/brand-page-maker/models/content-settings.d.ts +1 -1
- package/lib/src/brand-page-maker/models/navigation-style-configs.js +1 -1
- package/lib/src/brand-page-maker/routing/brand-page-maker-router.d.ts +1 -2
- package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +366 -360
- package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +5 -4
- package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -5
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +3 -1
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +7 -3
- package/lib/src/brand-page-maker/stores/history/history-store.d.ts +15 -15
- package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +6 -0
- package/lib/src/brand-page-maker/stores/ui/ui-store.js +8 -0
- package/lib/src/brand-page-maker/utils/content-settings.util.js +1 -1
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +1 -1
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +4 -4
- package/lib/src/clients/brand-page-client.d.ts +16 -15
- package/lib/src/clients/design-template-client.d.ts +3 -0
- package/lib/src/clients/media-client.d.ts +2 -2
- package/lib/src/clients/models.d.ts +2 -0
- package/lib/src/css/library.brand-page-brandCrowd.min.css +342 -324
- package/lib/src/css/library.brand-page-brandPage.min.css +620 -324
- package/lib/src/css/library.brand-page-designCom.min.css +342 -324
- package/lib/src/css/library.brand-page-preview.min.css +598 -324
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.mjs +16 -15
- package/lib/src/{lib-CaY174HB.js → lib-yEV1yYI5.js} +35293 -32254
- package/lib/src/lib.js +1 -1
- package/lib/src/metadata-builder/builders/footer-builder.js +103 -70
- package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
- package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
- package/lib/src/metadata-builder/builders/shape-color-utils.js +1 -1
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +3 -3
- package/lib/src/plugins/google-maps-plugin/google-maps-plugin.d.ts +1 -1
- package/lib/src/plugins/google-maps-plugin/google-maps-plugin.js +8 -8
- package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +13 -13
- package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -3
- package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +4 -2
- package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +2 -2
- package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.d.ts +4 -2
- package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.js +1 -0
- package/lib/src/shared/confirm-modal/ConfirmModal.mixin.d.ts +5 -2
- package/lib/src/shared/confirm-modal/ConfirmModal.mixin.js +1 -0
- package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +131 -129
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -1
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +111 -110
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +84 -81
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +5 -0
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +117 -109
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +1 -14
- package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +72 -70
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +4 -3
- package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.d.ts +4 -4
- package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.d.ts +3 -1
- package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.js +1 -0
- package/lib/src/shared/content-settings/components/images-field/ImagesField.mixin.d.ts +2 -2
- package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +4 -3
- package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +1 -1
- package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +40 -40
- package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigOptionField.mixin.d.ts +5 -6
- package/lib/src/shared/content-settings/components/shape-field/ShapeField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.d.ts +2 -2
- package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +1 -2
- package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +0 -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 -1
- package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +28 -28
- package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/toggle-field/ToggleField.mixin.d.ts +2 -2
- package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +0 -1
- package/lib/src/shared/content-settings/store/content-settings-store.d.ts +39 -39
- package/lib/src/shared/content-settings/utils.js +0 -1
- package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.d.ts +6 -4
- package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.js +1 -0
- package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.d.ts +4 -2
- package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.js +1 -0
- package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +29 -21
- package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +1 -1
- package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +50 -51
- package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.d.ts +6 -4
- package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.js +1 -0
- package/lib/src/shared/logo-settings/store/editable-logo-store.js +1 -1
- package/lib/src/shared/logo-settings/store/logo-settings-store.d.ts +1 -1
- package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +13 -5
- package/lib/src/shared/logo-versions/LogoVersions.mixin.js +1 -0
- package/lib/src/shared/models.d.ts +2 -0
- package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +14 -6
- package/lib/src/shared/my-designs/MyDesigns.mixin.js +1 -0
- package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +14 -5
- package/lib/src/shared/my-uploads/MyMedia.mixin.js +1 -0
- package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +14 -5
- package/lib/src/shared/my-uploads/MyUploads.mixin.js +1 -0
- package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +5 -3
- package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +1 -0
- package/lib/src/shared/navigation-style-settings/store/index.d.ts +2 -2
- package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -2
- package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +27 -28
- package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.js +0 -2
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +188 -177
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +181 -175
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +1 -1
- package/lib/src/shared/page-settings/store/page-settings-store.d.ts +9 -9
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +39 -39
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +0 -1
- package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +18 -18
- package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +6 -6
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +66 -60
- package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -1
- package/lib/src/shared/style-settings/store/style-settings-store.js +1 -1
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +20 -450
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +2 -2
- package/lib/src/shared/template-settings/models.d.ts +1 -0
- package/lib/src/shared/template-settings/store/template-settings-store.d.ts +4 -0
- package/lib/src/shared/template-settings/store/template-settings-store.js +79 -11
- package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +9 -4
- package/package.json +61 -57
- package/src/brand-page/components/about-section/AboutSection.vue.test.ts +7 -5
- package/src/brand-page/components/banner-section/BannerSection.mixin.ts +210 -0
- package/src/brand-page/components/brand-page-footer/BrandPageFooter.vue +1 -1
- package/src/brand-page/components/image/Image.mixin.ts +1 -1
- package/src/brand-page/components/image/Image.test.ts +1 -1
- package/src/brand-page/components/images-section/ImagesSection.vue +0 -1
- package/src/brand-page/components/logo/LogoRender.vue +188 -188
- package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.ts +1 -0
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +15 -6
- package/src/brand-page/components/page-footer/PageFooter.vue +1 -0
- package/src/brand-page/components/page-header/HeaderLayout.vue +12 -6
- package/src/brand-page/components/page-header/PageHeader.vue +1 -0
- package/src/brand-page/components/shapes-section/ShapesSection.vue +1 -1
- package/src/brand-page/components/shop/CartModal.vue +1 -3
- package/src/brand-page/components/shop/FeaturedDisplay.vue +2 -2
- package/src/brand-page/components/shop/PaymentModal.vue +1 -5
- package/src/brand-page/components/shop/ProductDetailModal.vue +1 -1
- package/src/brand-page/components/shop/Shop.vue +1 -1
- package/src/brand-page/components/shop/TextDisplay.vue +1 -1
- package/src/brand-page/components/shop/ThumbnailDisplay.vue +2 -2
- package/src/brand-page/components/testimonial-section/TestimonialSection.vue +3 -3
- package/src/brand-page/components/text-wrapper/TextWrapper.vue +3 -1
- package/src/brand-page/constants/sections/footer-display.constants.ts +1 -1
- package/src/brand-page/models/index.ts +4 -0
- package/src/brand-page/models/payment.model.ts +2 -1
- package/src/brand-page/models/shop.model.ts +0 -2
- package/src/brand-page/models/user-personalisation.model.ts +1 -2
- package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
- package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
- package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
- package/src/brand-page/utils/migration/migration-01_1.ts +1 -1
- package/src/brand-page/utils/migration/migration-02.ts +0 -1
- package/src/brand-page/utils/migration/migration-03.ts +0 -1
- package/src/brand-page/utils/migration/migration-04.ts +0 -1
- package/src/brand-page/utils/migration/migration-05.ts +1 -5
- package/src/brand-page/utils/migration/migration-05_2.ts +1 -1
- package/src/brand-page/utils/migration/migration-08.test.ts +1 -1
- package/src/brand-page/utils/personalisation.util.test.ts +35 -0
- package/src/brand-page/utils/personalisation.util.ts +119 -23
- package/src/brand-page/view-models.ts +38 -56
- package/src/brand-page-maker/assessors/banner-section-description-visibility.assessor.ts +6 -6
- package/src/brand-page-maker/assessors/color-replacement-icon-visibility.assessor.ts +2 -2
- package/src/brand-page-maker/assessors/color-replacement-profile-visibility.assessor.ts +2 -2
- package/src/brand-page-maker/assessors/color-replacement-visibility.assessor.ts +2 -2
- package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +14 -14
- package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +1 -0
- package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +1 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +5 -1
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.ts +2 -5
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -5
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.ts +0 -8
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-site-template.examples.ts +0 -2
- package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
- package/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.ts +1 -1
- package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +1 -2
- package/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.ts +1 -0
- package/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.ts +1 -0
- package/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.ts +1 -0
- package/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.ts +1 -0
- package/src/brand-page-maker/components/device/Device.mixin.ts +1 -0
- package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +1 -0
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +3 -1
- package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +1 -4
- package/src/brand-page-maker/components/seo-settings/DeleteDomainModal.vue +1 -1
- package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +1 -0
- package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +1 -1
- package/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.ts +0 -1
- package/src/brand-page-maker/components/seo-settings/UrlSettings.vue +0 -1
- package/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.vue +1 -5
- package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -1
- package/src/brand-page-maker/components/shop/ReplaceImageSettingsForShop.vue +1 -1
- package/src/brand-page-maker/components/social-share/SocialShare.vue +1 -1
- package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -8
- package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +5 -10
- package/src/brand-page-maker/components/template-preview/TemplatePreviewAiBadge.vue +12 -0
- package/src/brand-page-maker/components/video-play/VideoPlayButton.vue +1 -1
- package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +6 -6
- package/src/brand-page-maker/constants/config-settings-constant.ts +3 -3
- package/src/brand-page-maker/convertors/text-image-display-style.convertor.ts +1 -1
- package/src/brand-page-maker/models/button-styles-config.ts +4 -2
- package/src/brand-page-maker/models/content-settings-configs.ts +4 -2
- package/src/brand-page-maker/models/navigation-style-configs.ts +5 -6
- package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +0 -1
- package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +8 -5
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +1 -3
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +12 -4
- package/src/brand-page-maker/stores/ui/ui-store.ts +16 -0
- package/src/brand-page-maker/utils/content-settings.util.ts +1 -1
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +4 -4
- package/src/clients/design-template-client.ts +3 -0
- package/src/clients/models.ts +2 -0
- package/src/lib.ts +1 -0
- package/src/metadata-builder/builders/footer-builder.test.ts +200 -1
- package/src/metadata-builder/builders/footer-builder.ts +151 -95
- package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/images-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/text-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-field-utils.ts +1 -1
- package/src/metadata-builder/builders/shape-color-utils.ts +2 -2
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +3 -3
- package/src/plugins/google-maps-plugin/google-maps-plugin.ts +8 -8
- package/src/shared/background-settings/components/BackgroundSettings.vue +1 -1
- package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +1 -1
- package/src/shared/color-picker/components/ColorPicker.mixin.ts +2 -7
- package/src/shared/color-picker/components/ColorPickerSwatch.mixin.ts +1 -0
- package/src/shared/common/NumberInput.vue +1 -0
- package/src/shared/common/SideBarSettingsHeader.vue +2 -2
- package/src/shared/confirm-modal/ConfirmModal.mixin.ts +1 -0
- package/src/shared/content-settings/components/booking-url-field/BookingUrlField.vue +1 -0
- package/src/shared/content-settings/components/button-configuration-field/ButtonConfigurationField.vue +1 -0
- package/src/shared/content-settings/components/color-field/ColorField.vue +3 -10
- package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -1
- package/src/shared/content-settings/components/content-settings/ContentSettingsLockedButton.vue +1 -0
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +5 -0
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +1 -14
- package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +4 -6
- package/src/shared/content-settings/components/icon-library/IconLibrary.mixin.ts +1 -0
- package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +1 -1
- package/src/shared/content-settings/components/logo-selection-field/LogoSelectionField.vue +1 -1
- package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -1
- package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +1 -1
- package/src/shared/content-settings/components/personalisation-role-field/PersonalisationRoleField.vue +4 -4
- package/src/shared/content-settings/components/text-image-field/TextImageField.vue +2 -8
- package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -1
- package/src/shared/content-settings/models.ts +3 -2
- package/src/shared/content-settings/utils.ts +0 -1
- package/src/shared/dropzone-image-uploader/components/DropzoneImageUploader.vue +1 -0
- package/src/shared/ecommerce-settings/store/cart-store.test.ts +1 -1
- package/src/shared/font-family-selector/FontFamilySelector.mixin.ts +1 -0
- package/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.ts +1 -0
- package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +1 -1
- package/src/shared/logo-settings/components/LogoSettings.mixin.ts +0 -1
- package/src/shared/logo-settings/components/LogoSettingsHeader.mixin.ts +1 -0
- package/src/shared/logo-settings/components/LogoStyleSettingsWithState.vue +2 -2
- package/src/shared/logo-settings/components/LogoTemplateSearch.vue +1 -1
- package/src/shared/logo-settings/store/editable-logo-store.ts +1 -1
- package/src/shared/logo-settings/store/logo-settings-store.test.ts +4 -4
- package/src/shared/logo-versions/LogoVersions.mixin.ts +1 -0
- package/src/shared/models.ts +6 -0
- package/src/shared/my-designs/MyDesigns.mixin.ts +1 -0
- package/src/shared/my-uploads/MyMedia.mixin.ts +1 -0
- package/src/shared/my-uploads/MyMediaSelectionItem.vue +2 -1
- package/src/shared/my-uploads/MyUploads.mixin.ts +1 -0
- package/src/shared/my-uploads/models.ts +1 -2
- package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +1 -0
- package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -1
- package/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.ts +0 -3
- package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +1 -1
- package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -2
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +1 -1
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +1 -1
- package/src/shared/page-settings/store/page-settings-store.test.ts +4 -8
- package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +0 -1
- package/src/shared/shape-library/ShapeLibrary.vue +2 -2
- package/src/shared/style-settings/store/style-settings-store.ts +1 -1
- package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +2 -2
- package/src/shared/template-settings/models.ts +1 -0
- package/src/shared/template-settings/store/template-settings-store.ts +105 -18
- package/src/shared/unsplash-library/UnsplashLibrary.vue +2 -6
- package/src/shared/video-library/VideoLibrary.vue +1 -1
|
@@ -13,9 +13,19 @@ import type {
|
|
|
13
13
|
FooterSocialLinkItem,
|
|
14
14
|
} from '../parsers/ai-toolcall-parser';
|
|
15
15
|
import type { Logger } from '../logger';
|
|
16
|
-
import type {
|
|
16
|
+
import type {
|
|
17
|
+
TextStyleDeclaration,
|
|
18
|
+
TextStyleOptions,
|
|
19
|
+
} from '../../brand-page/models/styles.model';
|
|
17
20
|
import { FOOTER_CHECKS } from './section-rules/footer.rules';
|
|
18
|
-
import {
|
|
21
|
+
import {
|
|
22
|
+
applyDetachedStyleOverride,
|
|
23
|
+
normalizeStyleValue,
|
|
24
|
+
} from './section-field-utils';
|
|
25
|
+
|
|
26
|
+
type FooterSocialLink = NonNullable<
|
|
27
|
+
AbstractPageFooterStyles['socialLinks']
|
|
28
|
+
>[number];
|
|
19
29
|
|
|
20
30
|
const normaliseSocialUrl = (url: string): string => {
|
|
21
31
|
for (const prefix of ['mailto:', 'tel:']) {
|
|
@@ -25,107 +35,142 @@ const normaliseSocialUrl = (url: string): string => {
|
|
|
25
35
|
return url;
|
|
26
36
|
};
|
|
27
37
|
|
|
28
|
-
const
|
|
29
|
-
|
|
38
|
+
const makeSocialLink = (
|
|
39
|
+
icon: string | undefined,
|
|
40
|
+
url: string | undefined,
|
|
41
|
+
): FooterSocialLink =>
|
|
42
|
+
({
|
|
43
|
+
imageUrl: icon || '',
|
|
44
|
+
url: normaliseSocialUrl(url || ''),
|
|
45
|
+
imageTitle: '',
|
|
46
|
+
width: 0,
|
|
47
|
+
height: 0,
|
|
48
|
+
imageLink: '',
|
|
49
|
+
}) as FooterSocialLink;
|
|
50
|
+
|
|
51
|
+
const hasSocialLinkMutation = (args: UpdateFooterArguments): boolean =>
|
|
52
|
+
args._replace_social_links === true ||
|
|
53
|
+
(args._remove_social_link_indices?.length ?? 0) > 0 ||
|
|
54
|
+
(args._reorder_social_links?.length ?? 0) > 0 ||
|
|
55
|
+
(args.social_links?.length ?? 0) > 0;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Social links are a GLOBAL footer concern — one logical list that both
|
|
59
|
+
* viewports render identically. Derive the new list ONCE from the current one
|
|
60
|
+
* WITHOUT mutating the input, so the caller can assign an independent copy to
|
|
61
|
+
* each viewport.
|
|
62
|
+
*
|
|
63
|
+
* Why this can't mutate per-viewport in place: footers migrated from the legacy
|
|
64
|
+
* single `footerStyles` model (migration-01) share ONE `socialLinks` array
|
|
65
|
+
* reference across pageFooterDesktop and pageFooterMobile, and `cloneDeep`
|
|
66
|
+
* preserves that shared reference. Running an in-place `splice` once per
|
|
67
|
+
* viewport therefore applies it TWICE to the same array — e.g. one requested
|
|
68
|
+
* removal index drops two links. Compute-once + assign-fresh is correct for
|
|
69
|
+
* both shared (legacy) and independent (new-model) footers.
|
|
70
|
+
*/
|
|
71
|
+
const computeSocialLinks = (
|
|
72
|
+
current: FooterSocialLink[] | undefined,
|
|
30
73
|
args: UpdateFooterArguments,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
footer.copyrightStyle = applyDetachedStyleOverride(
|
|
38
|
-
footer.copyrightStyle,
|
|
39
|
-
{ fontFamily: args.copyright_text_font_family },
|
|
40
|
-
textStyleOptions,
|
|
74
|
+
): FooterSocialLink[] => {
|
|
75
|
+
// _replace_social_links: replace entire list (empty/absent social_links = clear all).
|
|
76
|
+
// A replacement supersedes every other social link mutation.
|
|
77
|
+
if (args._replace_social_links) {
|
|
78
|
+
return (args.social_links ?? []).map((l) =>
|
|
79
|
+
makeSocialLink(l.social_link_icon, l.url),
|
|
41
80
|
);
|
|
81
|
+
}
|
|
42
82
|
|
|
43
|
-
const links =
|
|
83
|
+
const links: FooterSocialLink[] = [...(current ?? [])];
|
|
44
84
|
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
footer.socialLinks = (links ?? []).map((l) => ({
|
|
50
|
-
imageUrl: l.social_link_icon || '',
|
|
51
|
-
url: normaliseSocialUrl(l.url || ''),
|
|
52
|
-
imageTitle: '',
|
|
53
|
-
width: 0,
|
|
54
|
-
height: 0,
|
|
55
|
-
imageLink: '',
|
|
56
|
-
}));
|
|
57
|
-
} else {
|
|
58
|
-
// Targeted mutations — only run when NOT replacing the entire list.
|
|
59
|
-
|
|
60
|
-
// item_index-based updates for existing links
|
|
61
|
-
if (links?.length) {
|
|
62
|
-
for (const link of links) {
|
|
63
|
-
if (link.item_index === undefined) continue;
|
|
64
|
-
|
|
65
|
-
const existing = footer.socialLinks?.[link.item_index];
|
|
66
|
-
|
|
67
|
-
if (!existing) continue;
|
|
68
|
-
|
|
69
|
-
if (link.social_link_icon !== undefined)
|
|
70
|
-
existing.imageUrl = link.social_link_icon;
|
|
71
|
-
|
|
72
|
-
if (link.url !== undefined) existing.url = normaliseSocialUrl(link.url);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
85
|
+
// item_index-based updates for existing links — replace the item reference
|
|
86
|
+
// (never mutate the original object, which may be shared across viewports).
|
|
87
|
+
for (const link of args.social_links ?? []) {
|
|
88
|
+
if (link.item_index === undefined) continue;
|
|
75
89
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
const existing = links[link.item_index];
|
|
91
|
+
|
|
92
|
+
if (!existing) continue;
|
|
93
|
+
|
|
94
|
+
links[link.item_index] = {
|
|
95
|
+
...existing,
|
|
96
|
+
...(link.social_link_icon !== undefined
|
|
97
|
+
? { imageUrl: link.social_link_icon }
|
|
98
|
+
: {}),
|
|
99
|
+
...(link.url !== undefined ? { url: normaliseSocialUrl(link.url) } : {}),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Remove by index (descending order to preserve indices during splice).
|
|
104
|
+
if (args._remove_social_link_indices?.length) {
|
|
105
|
+
const sorted = [...args._remove_social_link_indices].sort((a, b) => b - a);
|
|
81
106
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
footer.socialLinks.splice(idx, 1);
|
|
85
|
-
}
|
|
107
|
+
for (const idx of sorted) {
|
|
108
|
+
if (idx >= 0 && idx < links.length) links.splice(idx, 1);
|
|
86
109
|
}
|
|
110
|
+
}
|
|
87
111
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
112
|
+
// Insert new links (descending insert_at order to preserve positions).
|
|
113
|
+
const insertLinks = (args.social_links ?? []).filter(
|
|
114
|
+
(l): l is FooterSocialLinkItem & { insert_at: number } =>
|
|
115
|
+
l.insert_at !== undefined && l.item_index === undefined,
|
|
116
|
+
);
|
|
117
|
+
const sortedInserts = [...insertLinks].sort(
|
|
118
|
+
(a, b) => b.insert_at - a.insert_at,
|
|
119
|
+
);
|
|
96
120
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
0,
|
|
100
|
-
Math.min(link.insert_at, footer.socialLinks?.length ?? 0),
|
|
101
|
-
);
|
|
121
|
+
for (const link of sortedInserts) {
|
|
122
|
+
const pos = Math.max(0, Math.min(link.insert_at, links.length));
|
|
102
123
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
124
|
+
links.splice(pos, 0, makeSocialLink(link.social_link_icon, link.url));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Reorder (requires ALL indices — partial reorder is not supported).
|
|
128
|
+
if (args._reorder_social_links?.length) {
|
|
129
|
+
const newOrder = args._reorder_social_links;
|
|
130
|
+
const unique = new Set(newOrder);
|
|
131
|
+
|
|
132
|
+
if (
|
|
133
|
+
unique.size === newOrder.length &&
|
|
134
|
+
newOrder.every((idx) => idx >= 0 && idx < links.length)
|
|
135
|
+
) {
|
|
136
|
+
const reordered = newOrder.map((idx) => links[idx]);
|
|
137
|
+
|
|
138
|
+
if (reordered.length === links.length) return reordered;
|
|
112
139
|
}
|
|
140
|
+
}
|
|
113
141
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const newOrder = args._reorder_social_links;
|
|
117
|
-
const unique = new Set(newOrder);
|
|
142
|
+
return links;
|
|
143
|
+
};
|
|
118
144
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
145
|
+
const applyGlobalFooterChanges = (
|
|
146
|
+
footer: AbstractPageFooterStyles,
|
|
147
|
+
args: UpdateFooterArguments,
|
|
148
|
+
textStyleOptions: TextStyleOptions | undefined,
|
|
149
|
+
): void => {
|
|
150
|
+
if (args.copyright_text !== undefined)
|
|
151
|
+
footer.copyrightText = args.copyright_text;
|
|
152
|
+
|
|
153
|
+
// copyright_text_style is the same text-style object sections use (typography
|
|
154
|
+
// + colour). Normalise each value the way section styles are normalised
|
|
155
|
+
// (letterSpacing int→em, lineHeight snap, null→''), then detach from the
|
|
156
|
+
// global preset via the override helper so a single call resolves the preset
|
|
157
|
+
// and clears textStyleType once — see resolveGlobalPresetIntoStyle (BP-5420).
|
|
158
|
+
if (args.copyright_text_style) {
|
|
159
|
+
const updates: Partial<TextStyleDeclaration> = {};
|
|
124
160
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
161
|
+
for (const [key, value] of Object.entries(args.copyright_text_style)) {
|
|
162
|
+
const normalized = normalizeStyleValue(key, value);
|
|
163
|
+
|
|
164
|
+
if (normalized !== undefined)
|
|
165
|
+
(updates as Record<string, unknown>)[key] = normalized;
|
|
128
166
|
}
|
|
167
|
+
|
|
168
|
+
if (Object.keys(updates).length > 0)
|
|
169
|
+
footer.copyrightStyle = applyDetachedStyleOverride(
|
|
170
|
+
footer.copyrightStyle,
|
|
171
|
+
updates,
|
|
172
|
+
textStyleOptions,
|
|
173
|
+
);
|
|
129
174
|
}
|
|
130
175
|
};
|
|
131
176
|
|
|
@@ -150,12 +195,6 @@ const applyViewportFooterChanges = (
|
|
|
150
195
|
fill: overrides.icon_color,
|
|
151
196
|
};
|
|
152
197
|
|
|
153
|
-
if (overrides.copyright_text_color !== undefined)
|
|
154
|
-
footer.copyrightStyle = {
|
|
155
|
-
...footer.copyrightStyle,
|
|
156
|
-
color: overrides.copyright_text_color,
|
|
157
|
-
};
|
|
158
|
-
|
|
159
198
|
if (overrides.is_logo_visible !== undefined)
|
|
160
199
|
footer.isLogoVisible = overrides.is_logo_visible;
|
|
161
200
|
|
|
@@ -207,13 +246,30 @@ export class FooterBuilder extends BaseMetadataBuilder<UpdateFooterArguments> {
|
|
|
207
246
|
const args = this.request.payload ?? {};
|
|
208
247
|
const textStyleOptions = model.styles?.textStyles?.textStyleOptions;
|
|
209
248
|
|
|
210
|
-
// Global fields (
|
|
249
|
+
// Global scalar/style fields (copyright text + font) apply to both
|
|
250
|
+
// viewports. These are idempotent assignments, safe to run per-viewport.
|
|
211
251
|
if (model.pageFooterDesktop)
|
|
212
252
|
applyGlobalFooterChanges(model.pageFooterDesktop, args, textStyleOptions);
|
|
213
253
|
|
|
214
254
|
if (model.pageFooterMobile)
|
|
215
255
|
applyGlobalFooterChanges(model.pageFooterMobile, args, textStyleOptions);
|
|
216
256
|
|
|
257
|
+
// Social links are a single global list. Derive the new list ONCE, then
|
|
258
|
+
// assign an INDEPENDENT copy to each viewport — never mutate a (possibly
|
|
259
|
+
// shared) viewport array in place. See computeSocialLinks.
|
|
260
|
+
if (hasSocialLinkMutation(args)) {
|
|
261
|
+
const current =
|
|
262
|
+
model.pageFooterDesktop?.socialLinks ??
|
|
263
|
+
model.pageFooterMobile?.socialLinks;
|
|
264
|
+
const updated = computeSocialLinks(current, args);
|
|
265
|
+
|
|
266
|
+
if (model.pageFooterDesktop)
|
|
267
|
+
model.pageFooterDesktop.socialLinks = updated.map((l) => ({ ...l }));
|
|
268
|
+
|
|
269
|
+
if (model.pageFooterMobile)
|
|
270
|
+
model.pageFooterMobile.socialLinks = updated.map((l) => ({ ...l }));
|
|
271
|
+
}
|
|
272
|
+
|
|
217
273
|
// Viewport-specific styling via explicit sub-objects.
|
|
218
274
|
if (args.desktop && model.pageFooterDesktop)
|
|
219
275
|
applyViewportFooterChanges(model.pageFooterDesktop, args.desktop);
|
|
@@ -80,7 +80,7 @@ const mergeImageItems = (
|
|
|
80
80
|
...(existing || {}),
|
|
81
81
|
imageUrl: isValidUrl(item.image_url)
|
|
82
82
|
? item.image_url!
|
|
83
|
-
: existing?.imageUrl ?? '',
|
|
83
|
+
: (existing?.imageUrl ?? ''),
|
|
84
84
|
imageTitle: existing?.imageTitle ?? '',
|
|
85
85
|
width: existing?.width ?? 0,
|
|
86
86
|
height: existing?.height ?? 0,
|
|
@@ -128,7 +128,7 @@ const mergeTextItems = (
|
|
|
128
128
|
) as TextStyleDeclaration;
|
|
129
129
|
|
|
130
130
|
const resolved = item.text !== undefined ? resolveText(item.text) : null;
|
|
131
|
-
const text = resolved ? resolved.html : existing?.text ?? '';
|
|
131
|
+
const text = resolved ? resolved.html : (existing?.text ?? '');
|
|
132
132
|
|
|
133
133
|
return {
|
|
134
134
|
text,
|
|
@@ -109,7 +109,7 @@ export const applyScalarFields = (
|
|
|
109
109
|
* - null → '' (explicitly clear/reset the property)
|
|
110
110
|
* - everything else passes through as-is
|
|
111
111
|
*/
|
|
112
|
-
const normalizeStyleValue = (key: string, value: unknown): unknown => {
|
|
112
|
+
export const normalizeStyleValue = (key: string, value: unknown): unknown => {
|
|
113
113
|
if (value === null) return '';
|
|
114
114
|
|
|
115
115
|
if (value === undefined) return undefined;
|
|
@@ -68,8 +68,8 @@ export const applyColorThemeToReplacements = (
|
|
|
68
68
|
replacementColor:
|
|
69
69
|
replacements.length === 1
|
|
70
70
|
? colorTheme
|
|
71
|
-
: getNewColorBasedOnTargetColorTheme(
|
|
71
|
+
: (getNewColorBasedOnTargetColorTheme(
|
|
72
72
|
r.originalColor,
|
|
73
73
|
colorTheme,
|
|
74
|
-
)?.toString() ?? colorTheme,
|
|
74
|
+
)?.toString() ?? colorTheme),
|
|
75
75
|
}));
|
|
@@ -4,7 +4,7 @@ import type {
|
|
|
4
4
|
HeaderDisplayStyle,
|
|
5
5
|
NavigationDisplayType,
|
|
6
6
|
} from '../../brand-page/constants';
|
|
7
|
-
import type { SectionType } from './section-tool-arguments';
|
|
7
|
+
import type { SectionType, TextStyleArguments } from './section-tool-arguments';
|
|
8
8
|
|
|
9
9
|
// Tool names — must match the function names generated by the AI pipeline.
|
|
10
10
|
// Text element tools use camelCase names.
|
|
@@ -215,7 +215,6 @@ export interface FooterSocialLinkItem {
|
|
|
215
215
|
export interface ViewportFooterOverrides {
|
|
216
216
|
display_style?: FooterDisplayStyle;
|
|
217
217
|
background_color?: string | null;
|
|
218
|
-
copyright_text_color?: string;
|
|
219
218
|
icon_color?: string;
|
|
220
219
|
is_logo_visible?: boolean;
|
|
221
220
|
logo_image_height?: string;
|
|
@@ -224,7 +223,8 @@ export interface ViewportFooterOverrides {
|
|
|
224
223
|
|
|
225
224
|
export interface UpdateFooterArguments {
|
|
226
225
|
copyright_text?: string;
|
|
227
|
-
|
|
226
|
+
/** Copyright line text-style object (typography + colour) — same shape as a section's *_style. Global: applies to both viewports. */
|
|
227
|
+
copyright_text_style?: TextStyleArguments;
|
|
228
228
|
social_links?: FooterSocialLinkItem[];
|
|
229
229
|
_replace_social_links?: boolean;
|
|
230
230
|
_remove_social_link_indices?: number[];
|
|
@@ -31,10 +31,10 @@ export interface AddressDetails {
|
|
|
31
31
|
export class GoogleMapsPlugin {
|
|
32
32
|
private initialised = false;
|
|
33
33
|
private initialising = false;
|
|
34
|
-
private readonly
|
|
34
|
+
private readonly options: GoogleMapsPluginOptions;
|
|
35
35
|
|
|
36
36
|
constructor(options: GoogleMapsPluginOptions) {
|
|
37
|
-
this.
|
|
37
|
+
this.options = options;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
private async initialise(): Promise<void> {
|
|
@@ -111,7 +111,7 @@ export class GoogleMapsPlugin {
|
|
|
111
111
|
const { PlaceAutocompleteElement } = await this.getPlacesLibrary();
|
|
112
112
|
|
|
113
113
|
return new PlaceAutocompleteElement({
|
|
114
|
-
requestedLanguage: this.
|
|
114
|
+
requestedLanguage: this.options.locale,
|
|
115
115
|
...options,
|
|
116
116
|
});
|
|
117
117
|
}
|
|
@@ -149,17 +149,17 @@ export class GoogleMapsPlugin {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
private getGoogleScriptUrl(): string {
|
|
152
|
-
const baseUrl = `https://maps.googleapis.com/maps/api/js?key=${this.
|
|
152
|
+
const baseUrl = `https://maps.googleapis.com/maps/api/js?key=${this.options.apiKey}&libraries=places&loading=async`;
|
|
153
153
|
|
|
154
|
-
return this.
|
|
155
|
-
? `${baseUrl}&language=${this.
|
|
154
|
+
return this.options.locale
|
|
155
|
+
? `${baseUrl}&language=${this.options.locale}`
|
|
156
156
|
: baseUrl;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
159
|
getEmbedGoogleMapsSrc(options: GetEmbedGoogleMapsOptions): string {
|
|
160
160
|
const mapMode = options.mapMode || MAP_MODE_PLACE;
|
|
161
|
-
const locale = options.locale || this.
|
|
162
|
-
const baseUrl = `https://www.google.com/maps/embed/v1/${mapMode}?key=${this.
|
|
161
|
+
const locale = options.locale || this.options.locale;
|
|
162
|
+
const baseUrl = `https://www.google.com/maps/embed/v1/${mapMode}?key=${this.options.apiKey}&q=${options.query}`;
|
|
163
163
|
|
|
164
164
|
return locale ? `${baseUrl}&language=${locale}` : baseUrl;
|
|
165
165
|
}
|
|
@@ -174,7 +174,7 @@ const isPersonalisationEnabled = computed(
|
|
|
174
174
|
);
|
|
175
175
|
const isDesignCom = computed(() => containerStore.isDesignCom);
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
defineEmits(['on-intent-image-replace']);
|
|
178
178
|
|
|
179
179
|
const shapeTabs = [
|
|
180
180
|
backgroundSettingsTr(`background`),
|
package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
</div>
|
|
23
23
|
</template>
|
|
24
24
|
<script setup lang="ts">
|
|
25
|
-
import { computed
|
|
25
|
+
import { computed } from 'vue';
|
|
26
26
|
import { HelloBar } from '@designcrowd/fe-shared-lib';
|
|
27
27
|
import { useUiBackgroundSettingsStore } from '../../store';
|
|
28
28
|
import ColorField from '../../../content-settings/components/color-field/ColorField.vue';
|
|
@@ -3,15 +3,9 @@ import { Icon } from '@designcrowd/fe-shared-lib';
|
|
|
3
3
|
import ColorPickerSwatch from './ColorPickerSwatch.vue';
|
|
4
4
|
import type { ColorValue, ColorGroupItem, ColorGroup } from '../models';
|
|
5
5
|
import { DEFAULT_COLORS, DEFAULT_GRADIENT_COLORS } from '../constants';
|
|
6
|
-
import {
|
|
7
|
-
RGBAtoHex,
|
|
8
|
-
hexToRGB,
|
|
9
|
-
arrayToLinearGradient,
|
|
10
|
-
isRgbColor,
|
|
11
|
-
} from '@utils/helpers';
|
|
6
|
+
import { RGBAtoHex, arrayToLinearGradient, isRgbColor } from '@utils/helpers';
|
|
12
7
|
import { normalizeColorToHex, colorsMatch } from '@brand-page/utils/style.util';
|
|
13
8
|
import { colorPickerTr } from '@src/composables/useTranslate';
|
|
14
|
-
import { useUiStyleSettingsStore } from '../../style-settings/store';
|
|
15
9
|
|
|
16
10
|
// Simple session storage for newColors (persists during browser session, clears on refresh)
|
|
17
11
|
let sessionNewColors: ColorGroupItem[] = [];
|
|
@@ -53,6 +47,7 @@ export default defineComponent({
|
|
|
53
47
|
default: () => false,
|
|
54
48
|
},
|
|
55
49
|
},
|
|
50
|
+
emits: ['on-color-select'],
|
|
56
51
|
data() {
|
|
57
52
|
const groups: ColorGroup[] = [];
|
|
58
53
|
const newColors: ColorGroupItem[] = [];
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
</template>
|
|
34
34
|
<script setup lang="ts">
|
|
35
35
|
import { Button } from '@designcrowd/fe-shared-lib';
|
|
36
|
-
import {
|
|
36
|
+
import { commonTr } from '@src/composables/useTranslate';
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
defineProps({
|
|
39
39
|
showBackButton: {
|
|
40
40
|
type: Boolean,
|
|
41
41
|
required: false,
|
|
@@ -70,14 +70,7 @@
|
|
|
70
70
|
</template>
|
|
71
71
|
|
|
72
72
|
<script setup lang="ts">
|
|
73
|
-
import {
|
|
74
|
-
ref,
|
|
75
|
-
computed,
|
|
76
|
-
watch,
|
|
77
|
-
onMounted,
|
|
78
|
-
onBeforeMount,
|
|
79
|
-
type PropType,
|
|
80
|
-
} from 'vue';
|
|
73
|
+
import { ref, computed, watch, onMounted, onBeforeMount } from 'vue';
|
|
81
74
|
import { Toggle } from '@designcrowd/fe-shared-lib';
|
|
82
75
|
import {
|
|
83
76
|
addTransparentAlphaChannelToHex,
|
|
@@ -320,8 +313,8 @@ onBeforeMount(() => {
|
|
|
320
313
|
onMounted(() => {
|
|
321
314
|
const toggleState = Boolean(
|
|
322
315
|
color.value &&
|
|
323
|
-
|
|
324
|
-
|
|
316
|
+
typeof color.value === 'string' &&
|
|
317
|
+
!isHexTransparent(color.value),
|
|
325
318
|
);
|
|
326
319
|
|
|
327
320
|
emit('on-toggle-state-change', toggleState);
|
|
@@ -17,7 +17,6 @@ import {
|
|
|
17
17
|
import { SIDE_BAR_CONTENT_ID } from '../../constants';
|
|
18
18
|
import type { ComponentPublicInstance } from '@vue/runtime-core';
|
|
19
19
|
import {
|
|
20
|
-
EVENTS,
|
|
21
20
|
SELECT_LOCATIONS,
|
|
22
21
|
useEventTracker,
|
|
23
22
|
} from '@brand-page-maker/composables/useEventTracker';
|
|
@@ -37,6 +36,7 @@ interface CategoryTab {
|
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
export default defineComponent({
|
|
39
|
+
emits: ['capture-preview-snapshot'],
|
|
40
40
|
setup() {
|
|
41
41
|
const brandPageMakerStore = useBrandPageMakerStore();
|
|
42
42
|
const contentSettingsStore = useUiContentSettingsStore();
|
package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts
CHANGED
|
@@ -49,6 +49,11 @@ export default defineComponent({
|
|
|
49
49
|
required: true,
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
|
+
emits: [
|
|
53
|
+
'on-delete',
|
|
54
|
+
'capture-snapshot-before-modal',
|
|
55
|
+
'capture-preview-snapshot',
|
|
56
|
+
],
|
|
52
57
|
setup() {
|
|
53
58
|
const contentSettingsStore = useUiContentSettingsStore();
|
|
54
59
|
const sideBarStore = useUiSideBarStore();
|
|
@@ -16,7 +16,6 @@ import { SIDE_BAR_TAB_NAMES } from '@brand-page-maker/constants';
|
|
|
16
16
|
import { ITEM_FIELD_TYPES, type ItemFieldType } from '@brand-page-maker/models';
|
|
17
17
|
import { useUiPageSettingsStore } from '../../../page-settings/store';
|
|
18
18
|
import { PAGE_SECTIONS } from '../../../page-settings/models';
|
|
19
|
-
import { commonTr } from '@src/composables/useTranslate';
|
|
20
19
|
import {
|
|
21
20
|
getPlainTextFromRTE,
|
|
22
21
|
replaceTextInRTE,
|
|
@@ -26,19 +25,6 @@ import {
|
|
|
26
25
|
import { isDefaultContentText } from '@shared/content-settings/utils';
|
|
27
26
|
import { useUiLogoSettingsStore } from '../../../logo-settings/store';
|
|
28
27
|
|
|
29
|
-
const RTE_DISALLOWED_STYLE_FIELD_NAMES = [
|
|
30
|
-
'descriptionStyle',
|
|
31
|
-
'titleStyle',
|
|
32
|
-
'textStyle',
|
|
33
|
-
'paragraphStyle',
|
|
34
|
-
];
|
|
35
|
-
const AI_ALLOWED_SECTION_TYPES = [
|
|
36
|
-
'banner-section',
|
|
37
|
-
'text',
|
|
38
|
-
'about-section',
|
|
39
|
-
'testimonials-section',
|
|
40
|
-
];
|
|
41
|
-
const AI_ALLOWED_FIELD_NAMES = ['description', 'title', 'text', 'paragraph'];
|
|
42
28
|
const RTE_DISALLOWED_FIELD_NAMES = ['buttonText'];
|
|
43
29
|
|
|
44
30
|
export default defineComponent({
|
|
@@ -62,6 +48,7 @@ export default defineComponent({
|
|
|
62
48
|
default: undefined,
|
|
63
49
|
},
|
|
64
50
|
},
|
|
51
|
+
emits: ['capture-preview-snapshot'],
|
|
65
52
|
setup() {
|
|
66
53
|
const contentSettingsStore = useUiContentSettingsStore();
|
|
67
54
|
const brandPageMakerStore = useBrandPageMakerStore();
|
|
@@ -25,20 +25,18 @@ import {
|
|
|
25
25
|
type PersonalisationRole,
|
|
26
26
|
} from '@brand-page';
|
|
27
27
|
import { buildRelativePathFromParams } from '@brand-page/utils/route.util';
|
|
28
|
-
import {
|
|
29
|
-
switchAllContentToRTE,
|
|
30
|
-
isRTEManagedStyleField,
|
|
31
|
-
} from '@brand-page-maker/utils';
|
|
28
|
+
import { isRTEManagedStyleField } from '@brand-page-maker/utils';
|
|
32
29
|
import { useUiPageSettingsStore } from '@shared/page-settings/store';
|
|
33
30
|
import { useExternalRichTextEditor } from '@brand-page-maker/composables/rich-text-editor/useRichTextEditor';
|
|
34
31
|
import { useUiStyleSettingsStore } from '@shared/style-settings/store';
|
|
35
32
|
|
|
36
33
|
export default defineComponent({
|
|
34
|
+
emits: ['capture-preview-snapshot'],
|
|
37
35
|
setup() {
|
|
38
36
|
const contentSettingsStore = useUiContentSettingsStore();
|
|
39
37
|
const brandPageMakerStore = useBrandPageMakerStore();
|
|
40
|
-
const
|
|
41
|
-
const
|
|
38
|
+
const _pageSettingsStore = useUiPageSettingsStore();
|
|
39
|
+
const _styleSettingsStore = useUiStyleSettingsStore();
|
|
42
40
|
|
|
43
41
|
const userStore = useBrandPageMakerUserStore();
|
|
44
42
|
const uiStore = useUiStore();
|