@designcrowd/library.brand-page 6.2.11 → 6.2.12
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-DDcraD5S.js → CreatedOnBrandCrowd-de-de-BtVKllNQ.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DtOeaisf.js → CreatedOnBrandCrowd-en-us-CX5V0v8u.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-BZpmJPew.js → CreatedOnBrandCrowd-es-es-CbA02PCL.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-CqRwC4e7.js → CreatedOnBrandCrowd-fr-ca-BQAKruBF.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-CqRwC4e7.js → CreatedOnBrandCrowd-fr-fr-BQAKruBF.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-DId9Dfjh.js → CreatedOnBrandCrowd-pt-br-Yk_yzB3s.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-DId9Dfjh.js → CreatedOnBrandCrowd-pt-pt-Yk_yzB3s.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-BTDfmOcm.js → CreatedOnDcom-de-de-DJZQbPSD.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-CeAu9Ayx.js → CreatedOnDcom-en-us-BJvNAa4l.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-WCv0K41H.js → CreatedOnDcom-es-es-CUwB1FRY.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-BlfevQDY.js → CreatedOnDcom-fr-ca-CK54U4oh.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-Cvt7MHPZ.js → CreatedOnDcom-fr-fr-DuUNBGrM.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-DipZuylv.js → CreatedOnDcom-pt-br-BfODpFNV.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-BCw4lcKN.js → CreatedOnDcom-pt-pt-Cf6u2GCg.js} +1 -1
- package/lib/src/brand-page/__fixtures__/production-text-style-resolver.fixture.d.ts +16 -0
- package/lib/src/brand-page/__fixtures__/production-text-style-resolver.fixture.js +35 -0
- package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +3 -0
- package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +19 -13
- package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +3 -1
- package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +17 -2
- package/lib/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.d.ts +11 -3
- package/lib/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.js +35 -1
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +8 -2
- package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +27 -3
- package/lib/src/brand-page/components/page/Page.mixin.d.ts +5 -2
- package/lib/src/brand-page/components/page/Page.mixin.js +33 -27
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.d.ts +7 -2
- package/lib/src/brand-page/components/page-footer/PageFooter.mixin.js +21 -1
- package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +5 -2
- package/lib/src/brand-page/components/payment/Payment.mixin.js +22 -2
- package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +6 -2
- package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +32 -1
- package/lib/src/brand-page/components/social-links/SocialLinks.stories.js +0 -3
- package/lib/src/brand-page/components/testimonial-section/__fixtures__/data.js +0 -3
- package/lib/src/brand-page/components/text/Text.stories.js +0 -17
- package/lib/src/brand-page/constants/font.constants.d.ts +62 -0
- package/lib/src/brand-page/constants/font.constants.js +35 -0
- package/lib/src/brand-page/models/index.d.ts +23 -24
- package/lib/src/brand-page/models/index.js +20 -7
- package/lib/src/brand-page/models/navigation-styles.model.d.ts +1 -1
- package/lib/src/brand-page/models/navigation-styles.model.js +17 -8
- package/lib/src/brand-page/models/payment.model.d.ts +11 -6
- package/lib/src/brand-page/models/styles.model.d.ts +53 -7
- package/lib/src/brand-page/models/styles.model.js +115 -27
- package/lib/src/brand-page/utils/color-palette.util.d.ts +43 -23
- package/lib/src/brand-page/utils/color-palette.util.js +65 -27
- package/lib/src/brand-page/utils/color.util.d.ts +13 -9
- package/lib/src/brand-page/utils/color.util.js +56 -15
- package/lib/src/brand-page/utils/container-text-color.util.d.ts +46 -13
- package/lib/src/brand-page/utils/container-text-color.util.js +321 -41
- package/lib/src/brand-page/utils/index.d.ts +1 -0
- package/lib/src/brand-page/utils/index.js +1 -0
- package/lib/src/brand-page/utils/migration/migration-20.js +6 -2
- package/lib/src/brand-page/utils/migration/migration-21.js +34 -6
- package/lib/src/brand-page/utils/migration/migration-22.d.ts +99 -0
- package/lib/src/brand-page/utils/migration/migration-22.js +909 -0
- package/lib/src/brand-page/utils/migration.util.js +17 -0
- package/lib/src/brand-page/utils/model.util.d.ts +4 -0
- package/lib/src/brand-page/utils/model.util.js +4 -0
- package/lib/src/brand-page/utils/personalisation.util.js +9 -1
- package/lib/src/brand-page/utils/rte-role-lift.util.d.ts +72 -0
- package/lib/src/brand-page/utils/rte-role-lift.util.js +275 -0
- package/lib/src/brand-page/utils/style.util.d.ts +5 -1
- package/lib/src/brand-page/utils/style.util.js +34 -11
- package/lib/src/brand-page/utils/text-role-css.util.d.ts +19 -0
- package/lib/src/brand-page/utils/text-role-css.util.js +186 -0
- package/lib/src/brand-page/utils/text-role-reconnect.util.d.ts +90 -0
- package/lib/src/brand-page/utils/text-role-reconnect.util.js +434 -0
- package/lib/src/brand-page/utils/text-style.util.d.ts +53 -23
- package/lib/src/brand-page/utils/text-style.util.js +122 -22
- package/lib/src/brand-page/utils/view-model.util.d.ts +9 -1
- package/lib/src/brand-page/utils/view-model.util.js +124 -111
- package/lib/src/brand-page/view-models.d.ts +1 -0
- package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +13 -2
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +4 -4
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +0 -10
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.js +0 -1
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +23 -138
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +0 -28
- package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +1 -1
- package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +5 -2
- package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +1 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +1 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.d.ts +16 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.js +61 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.d.ts +11 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.js +236 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/font.d.ts +2 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/font.js +25 -6
- package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.d.ts +17 -4
- package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.js +204 -17
- package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.js +29 -31
- package/lib/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.d.ts +20 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.js +60 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.d.ts +2 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.js +22 -6
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +10 -4
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +319 -275
- package/lib/src/brand-page-maker/constants/config-settings-constant.js +1 -5
- package/lib/src/brand-page-maker/convertors/text-css-style-options.convertor.js +6 -2
- package/lib/src/brand-page-maker/convertors/text-size-value.convertor.d.ts +1 -1
- package/lib/src/brand-page-maker/convertors/text-size-value.convertor.js +3 -1
- package/lib/src/brand-page-maker/default-getters/payment-text-and-border-color.default-getter.js +7 -14
- package/lib/src/brand-page-maker/default-getters/text-color.default-getter.js +6 -13
- package/lib/src/brand-page-maker/models/content-settings.d.ts +8 -0
- package/lib/src/brand-page-maker/models/content-settings.js +112 -81
- package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.d.ts +2 -2
- package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.js +5 -2
- package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.js +4 -3
- package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +1257 -117
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +6 -1
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +17 -9
- package/lib/src/brand-page-maker/stores/history/history-store.d.ts +59 -5
- package/lib/src/brand-page-maker/stores/history/history-store.js +22 -2
- package/lib/src/brand-page-maker/utils/apply-color-strategy.js +26 -8
- package/lib/src/brand-page-maker/utils/index.d.ts +2 -1
- package/lib/src/brand-page-maker/utils/index.js +2 -1
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +117 -15
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +435 -281
- package/lib/src/brand-page-maker/utils/rte-authoring.util.d.ts +4 -0
- package/lib/src/brand-page-maker/utils/rte-authoring.util.js +101 -0
- package/lib/src/brand-page-maker/utils/rte-clipboard.util.d.ts +126 -0
- package/lib/src/brand-page-maker/utils/rte-clipboard.util.js +307 -0
- package/lib/src/brand-page-maker/utils/rte-sanitize.util.js +13 -3
- package/lib/src/{bundled-translations-zfiA5Tsw.js → bundled-translations-yGrvPE5i.js} +17 -17
- package/lib/src/{bundled-translations.de-DE-ChsdSyAP.js → bundled-translations.de-DE-L4Znf8Hs.js} +17 -17
- package/lib/src/{bundled-translations.es-ES-DflsWQK0.js → bundled-translations.es-ES-D6iticrK.js} +15 -15
- package/lib/src/{bundled-translations.fr-CA-fpDRuZ52.js → bundled-translations.fr-CA-BgAVE-9k.js} +25 -25
- package/lib/src/{bundled-translations.fr-FR-Bub73Zt-.js → bundled-translations.fr-FR-B8GbyqxQ.js} +17 -17
- package/lib/src/{bundled-translations.pt-BR-BlnWE9TB.js → bundled-translations.pt-BR-DjPU3Db7.js} +25 -25
- package/lib/src/{bundled-translations.pt-PT-DmzXlnaS.js → bundled-translations.pt-PT-BaepaDpr.js} +23 -23
- package/lib/src/bundles/bundled-translations.de-DE.json +21 -2
- package/lib/src/bundles/bundled-translations.es-ES.json +21 -2
- package/lib/src/bundles/bundled-translations.fr-CA.json +21 -2
- package/lib/src/bundles/bundled-translations.fr-FR.json +21 -2
- package/lib/src/bundles/bundled-translations.json +21 -2
- package/lib/src/bundles/bundled-translations.pt-BR.json +21 -2
- package/lib/src/bundles/bundled-translations.pt-PT.json +21 -2
- package/lib/src/clients/ai-assistant-client.d.ts +1 -0
- package/lib/src/composables/useTranslate.d.ts +1 -1
- package/lib/src/composables/useTranslate.js +1 -1
- package/lib/src/css/library.brand-page-brandCrowd.min.css +303 -207
- package/lib/src/css/library.brand-page-brandPage.min.css +303 -207
- package/lib/src/css/library.brand-page-designCom.min.css +303 -207
- package/lib/src/css/library.brand-page-preview.min.css +303 -207
- package/lib/src/index.d.ts +2 -1
- package/lib/src/index.mjs +195 -191
- package/lib/src/{lib-1AqtEmvQ.js → lib-kGRlD3_P.js} +36855 -33893
- package/lib/src/lib.js +2 -1
- package/lib/src/metadata-builder/builders/footer-builder.js +4 -5
- package/lib/src/metadata-builder/builders/global-role-propagation.d.ts +58 -0
- package/lib/src/metadata-builder/builders/global-role-propagation.js +246 -0
- package/lib/src/metadata-builder/builders/global-styles-builder.d.ts +1 -0
- package/lib/src/metadata-builder/builders/global-styles-builder.js +116 -45
- package/lib/src/metadata-builder/builders/header-builder.js +13 -4
- package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +3 -3
- package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +3 -3
- package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +3 -3
- package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +4 -4
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +3 -3
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +2 -2
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +2 -2
- package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +4 -4
- package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +3 -3
- package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +8 -2
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +2 -2
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +60 -29
- package/lib/src/metadata-builder/builders/section-field-maps.js +1 -0
- package/lib/src/metadata-builder/builders/section-field-utils.d.ts +48 -19
- package/lib/src/metadata-builder/builders/section-field-utils.js +128 -52
- package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.d.ts +4 -2
- package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.js +28 -12
- package/lib/src/metadata-builder/builders/section-rules/social-links.rules.js +5 -1
- package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +1 -1
- package/lib/src/metadata-builder/helpers/rte.helpers.js +97 -40
- package/lib/src/metadata-builder/metadata-executor.js +23 -1
- package/lib/src/metadata-builder/models.d.ts +2 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +18 -19
- package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +18 -1
- package/lib/src/metadata-builder/sanitizers/rte-schema-check.js +1 -1
- package/lib/src/metadata-builder/sanitizers/sanitizer-rules.d.ts +0 -1
- package/lib/src/metadata-builder/sanitizers/sanitizer-rules.js +5 -8
- package/lib/src/metadata-builder/sanitizers/section-args-validator.d.ts +7 -16
- package/lib/src/metadata-builder/sanitizers/section-args-validator.js +95 -22
- package/lib/src/shared/color-palette/section-color-matches.js +9 -25
- package/lib/src/shared/color-strategies/color-strategies.d.ts +15 -0
- package/lib/src/shared/color-strategies/color-strategies.js +31 -0
- package/lib/src/shared/color-strategies/rte-color.d.ts +8 -0
- package/lib/src/shared/color-strategies/rte-color.js +16 -0
- package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +23 -0
- package/lib/src/shared/color-strategies/rte-field-pairs.js +28 -0
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +9 -135
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +1 -27
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +12 -2
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +7 -0
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +75 -6
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +18 -7
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +6 -1
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +0 -7
- package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +1 -0
- package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +8 -4
- package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +1255 -26
- package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.js +203 -59
- package/lib/src/shared/content-settings/store/content-settings-store.d.ts +6 -0
- package/lib/src/shared/content-settings/store/content-settings-store.js +105 -8
- package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +5 -1
- package/lib/src/shared/navigation-style-settings/store/index.d.ts +7 -3
- package/lib/src/shared/navigation-style-settings/store/index.js +40 -15
- package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
- package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +1 -0
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +17 -5
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +70 -13
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +10 -2
- package/lib/src/shared/page-settings/store/page-settings-store.d.ts +2 -1
- package/lib/src/shared/page-settings/store/page-settings-store.js +17 -0
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +4 -1
- package/lib/src/shared/rte-extensions/AutoLink.d.ts +17 -0
- package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/AutoLink.js +67 -51
- package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.js +4 -1
- package/lib/src/shared/rte-extensions/TextEffects.d.ts +28 -0
- package/lib/src/shared/rte-extensions/TextEffects.js +96 -0
- package/lib/src/shared/rte-extensions/ViewDomParser.d.ts +2 -0
- package/lib/src/shared/rte-extensions/ViewDomParser.js +21 -0
- package/lib/src/shared/rte-extensions.util.d.ts +25 -0
- package/lib/src/{brand-page-maker/composables/rich-text-editor/getRteExtensions.js → shared/rte-extensions.util.js} +62 -7
- package/lib/src/shared/rte-link.util.d.ts +1 -0
- package/lib/src/shared/rte-link.util.js +1 -0
- package/lib/src/shared/rte-render.util.d.ts +112 -0
- package/lib/src/shared/rte-render.util.js +255 -0
- package/lib/src/shared/rte-shape.util.d.ts +6 -0
- package/lib/src/shared/rte-shape.util.js +18 -0
- package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +2 -1
- package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +1 -0
- package/lib/src/shared/side-bar/store/side-bar-store.d.ts +2 -0
- package/lib/src/shared/side-bar/store/side-bar-store.js +9 -0
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +155 -15
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.js +7 -1
- package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -9
- package/lib/src/shared/style-settings/store/style-settings-store.js +3 -33
- package/lib/src/shared/style-settings/text-style-size-order.d.ts +2 -0
- package/lib/src/shared/style-settings/text-style-size-order.js +13 -0
- package/lib/src/shared/text-role-typography.util.d.ts +64 -0
- package/lib/src/shared/text-role-typography.util.js +183 -0
- package/lib/src/utils/minify-brand-page-metadata.d.ts +16 -1
- package/lib/src/utils/minify-brand-page-metadata.js +31 -9
- package/package.json +1 -1
- package/src/brand-page/__fixtures__/migration-22-v21/edited-brandsite-sections.v21.json +982 -0
- package/src/brand-page/__fixtures__/migration-22-v21/new-brandcontact-every-section.v21.json +1231 -0
- package/src/brand-page/__fixtures__/migration-22-v21/new-brandpage-every-section.v21.json +1231 -0
- package/src/brand-page/__fixtures__/migration-22-v21/new-brandsite-every-section.v21.json +1243 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandcontact.v21.json +755 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-general-link.v21.json +527 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-links.v21.json +755 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-social-links.v21.json +514 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-about.v21.json +459 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-footer.v21.json +469 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-header-banner.v21.json +481 -0
- package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-sections.v21.json +800 -0
- package/src/brand-page/__fixtures__/production-text-style-resolver.fixture.ts +52 -0
- package/src/brand-page/components/about-section/AboutSection.vue.test.ts +0 -10
- package/src/brand-page/components/contact-form/ContactForm.mixin.test.ts +127 -0
- package/src/brand-page/components/contact-form/ContactForm.mixin.ts +31 -14
- package/src/brand-page/components/contact-form/ContactForm.vue +26 -12
- package/src/brand-page/components/contact-form/ContactForm.vue.test.ts +60 -0
- package/src/brand-page/components/mailing-list/MailingList.mixin.test.ts +92 -0
- package/src/brand-page/components/mailing-list/MailingList.mixin.ts +28 -3
- package/src/brand-page/components/mailing-list/MailingList.vue +9 -4
- package/src/brand-page/components/mailing-list/MailingList.vue.test.ts +63 -0
- package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.ts +51 -1
- package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.test.ts +114 -0
- package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.vue +8 -2
- package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.test.ts +182 -0
- package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +59 -12
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +40 -3
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue +15 -7
- package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue.test.ts +133 -3
- package/src/brand-page/components/page/Page.mixin.ts +41 -34
- package/src/brand-page/components/page/Page.vue +17 -6
- package/src/brand-page/components/page/Page.vue.test.ts +91 -1
- package/src/brand-page/components/page-footer/PageFooter.mixin.ts +32 -2
- package/src/brand-page/components/page-footer/PageFooter.test.ts +79 -0
- package/src/brand-page/components/page-footer/PageFooter.vue +12 -4
- package/src/brand-page/components/payment/Payment.mixin.ts +34 -2
- package/src/brand-page/components/payment/Payment.test.ts +188 -0
- package/src/brand-page/components/payment/Payment.vue +12 -5
- package/src/brand-page/components/payment/RequestPaymentStripe.vue +1 -0
- package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +49 -2
- package/src/brand-page/components/payment/support-me/SupportMe.test.ts +100 -0
- package/src/brand-page/components/payment/support-me/SupportMe.vue +7 -1
- package/src/brand-page/components/payment/support-me/SupportMe.vue.test.ts +66 -0
- package/src/brand-page/components/save-contact/SaveContactWidget.test.ts +100 -0
- package/src/brand-page/components/save-contact/SaveContactWidget.vue +6 -3
- package/src/brand-page/components/shop/PaymentModal.vue +2 -6
- package/src/brand-page/components/shop/PaymentShippingAddress.vue +6 -0
- package/src/brand-page/components/shop/Shop.vue +15 -2
- package/src/brand-page/components/shop/Shop.vue.test.ts +74 -2
- package/src/brand-page/components/social-links/SocialLinks.stories.ts +0 -3
- package/src/brand-page/components/social-links/SocialLinks.vue.test.ts +0 -3
- package/src/brand-page/components/testimonial-section/__fixtures__/data.ts +0 -3
- package/src/brand-page/components/text/Text.stories.ts +0 -17
- package/src/brand-page/components/text-wrapper/TextWrapper.parity.test.ts +136 -0
- package/src/brand-page/components/text-wrapper/TextWrapper.test.ts +358 -0
- package/src/brand-page/components/text-wrapper/TextWrapper.vue +82 -22
- package/src/brand-page/constants/font.constants.ts +37 -0
- package/src/brand-page/models/footer-icon-color.test.ts +22 -0
- package/src/brand-page/models/index.ts +50 -28
- package/src/brand-page/models/navigation-styles.model.test.ts +77 -1
- package/src/brand-page/models/navigation-styles.model.ts +26 -9
- package/src/brand-page/models/payment.model.ts +15 -6
- package/src/brand-page/models/styles.model.test.ts +104 -0
- package/src/brand-page/models/styles.model.ts +181 -47
- package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +619 -115
- package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +150 -9
- package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +300 -18
- package/src/brand-page/utils/color-palette.util.test.ts +126 -1
- package/src/brand-page/utils/color-palette.util.ts +92 -26
- package/src/brand-page/utils/color.util.test.ts +62 -29
- package/src/brand-page/utils/color.util.ts +77 -14
- package/src/brand-page/utils/container-text-color.util.test.ts +672 -26
- package/src/brand-page/utils/container-text-color.util.ts +472 -46
- package/src/brand-page/utils/index.ts +1 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/edited-brandsite-sections.v22.json +1191 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandcontact-every-section.v22.json +2026 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandpage-every-section.v22.json +2017 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandsite-every-section.v22.json +2031 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandcontact.v22.json +1145 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-general-link.v22.json +645 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-links.v22.json +1136 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-social-links.v22.json +662 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-about.v22.json +638 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-footer.v22.json +610 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-header-banner.v22.json +660 -0
- package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-sections.v22.json +1132 -0
- package/src/brand-page/utils/migration/migration-01.ts +293 -237
- package/src/brand-page/utils/migration/migration-02.ts +8 -1
- package/src/brand-page/utils/migration/migration-20.ts +6 -3
- package/src/brand-page/utils/migration/migration-20_5.test.ts +5 -2
- package/src/brand-page/utils/migration/migration-21.test.ts +34 -0
- package/src/brand-page/utils/migration/migration-21.ts +46 -10
- package/src/brand-page/utils/migration/migration-22.fixed-input.test.ts +43 -0
- package/src/brand-page/utils/migration/migration-22.test.ts +4103 -0
- package/src/brand-page/utils/migration/migration-22.text-font-family.test.ts +72 -0
- package/src/brand-page/utils/migration/migration-22.ts +1336 -0
- package/src/brand-page/utils/migration.util.test.ts +146 -32
- package/src/brand-page/utils/migration.util.ts +18 -0
- package/src/brand-page/utils/model.util.ts +4 -0
- package/src/brand-page/utils/personalisation.util.test.ts +148 -3
- package/src/brand-page/utils/personalisation.util.ts +9 -1
- package/src/brand-page/utils/rte-role-lift.util.ts +409 -0
- package/src/brand-page/utils/style.util.test.ts +35 -2
- package/src/brand-page/utils/style.util.ts +45 -11
- package/src/brand-page/utils/text-role-css.util.test.ts +525 -0
- package/src/brand-page/utils/text-role-css.util.ts +321 -0
- package/src/brand-page/utils/text-role-reconnect.util.test.ts +604 -0
- package/src/brand-page/utils/text-role-reconnect.util.ts +727 -0
- package/src/brand-page/utils/text-style.util.test.ts +305 -0
- package/src/brand-page/utils/text-style.util.ts +198 -24
- package/src/brand-page/utils/view-model.page-data.test.ts +232 -0
- package/src/brand-page/utils/view-model.util.test.ts +954 -133
- package/src/brand-page/utils/view-model.util.ts +187 -139
- package/src/brand-page/view-models.ts +4 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.blank-site.test.ts +57 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +9 -5
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -10
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.ts +0 -1
- package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +0 -44
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +253 -200
- package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -0
- package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +1 -0
- package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +2 -0
- package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +1 -0
- package/src/brand-page-maker/composables/rich-text-editor/block-typography.test.ts +519 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.test.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/extensions/MaxLength.test.ts +26 -1
- package/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.test.ts +110 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.ts +99 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.ts +397 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/ViewDomParser.test.ts +139 -0
- package/src/brand-page-maker/composables/rich-text-editor/font.ts +36 -5
- package/src/brand-page-maker/composables/rich-text-editor/formatting.test.ts +375 -1
- package/src/brand-page-maker/composables/rich-text-editor/formatting.ts +301 -17
- package/src/brand-page-maker/composables/rich-text-editor/hyperlink.test.ts +82 -1
- package/src/brand-page-maker/composables/rich-text-editor/hyperlink.ts +28 -34
- package/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.test.ts +80 -0
- package/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.ts +75 -0
- package/src/brand-page-maker/composables/rich-text-editor/spacing.ts +31 -6
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.test.ts +2485 -0
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +435 -337
- package/src/brand-page-maker/constants/config-settings-constant.ts +0 -6
- package/src/brand-page-maker/convertors/text-css-style-options.convertor.test.ts +43 -0
- package/src/brand-page-maker/convertors/text-css-style-options.convertor.ts +6 -2
- package/src/brand-page-maker/convertors/text-size-value.convertor.test.ts +24 -0
- package/src/brand-page-maker/convertors/text-size-value.convertor.ts +17 -13
- package/src/brand-page-maker/default-getters/payment-text-and-border-color.default-getter.ts +7 -22
- package/src/brand-page-maker/default-getters/text-color.default-getter.ts +5 -21
- package/src/brand-page-maker/models/content-settings.test.ts +708 -0
- package/src/brand-page-maker/models/content-settings.ts +133 -82
- package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.test.ts +63 -1
- package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.ts +16 -3
- package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.test.ts +34 -0
- package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +4 -2
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +185 -1
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +22 -34
- package/src/brand-page-maker/stores/history/history-store.ts +35 -2
- package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +528 -0
- package/src/brand-page-maker/utils/__snapshots__/rte-render-parity.test.ts.snap +12 -0
- package/src/brand-page-maker/utils/apply-color-strategy.golden.test.ts +2 -0
- package/src/brand-page-maker/utils/apply-color-strategy.test.ts +181 -3
- package/src/brand-page-maker/utils/apply-color-strategy.ts +36 -4
- package/src/brand-page-maker/utils/index.ts +2 -1
- package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +447 -410
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +610 -506
- package/src/brand-page-maker/utils/rte-authoring.util.test.ts +244 -0
- package/src/brand-page-maker/utils/rte-authoring.util.ts +175 -0
- package/src/brand-page-maker/utils/rte-clipboard.util.test.ts +558 -0
- package/src/brand-page-maker/utils/rte-clipboard.util.ts +473 -0
- package/src/brand-page-maker/utils/rte-features.test.ts +99 -3
- package/src/brand-page-maker/utils/rte-render-parity.test.ts +1 -1
- package/src/brand-page-maker/utils/rte-render.util.test.ts +230 -0
- package/src/brand-page-maker/utils/rte-sanitize-json.test.ts +1 -1
- package/src/brand-page-maker/utils/rte-sanitize.util.ts +14 -3
- package/src/brand-page-maker/utils/rte-schema-version.test.ts +102 -0
- package/src/bundles/bundled-translations.de-DE.json +21 -2
- package/src/bundles/bundled-translations.es-ES.json +21 -2
- package/src/bundles/bundled-translations.fr-CA.json +21 -2
- package/src/bundles/bundled-translations.fr-FR.json +21 -2
- package/src/bundles/bundled-translations.json +21 -2
- package/src/bundles/bundled-translations.pt-BR.json +21 -2
- package/src/bundles/bundled-translations.pt-PT.json +21 -2
- package/src/clients/ai-assistant-client.ts +1 -0
- package/src/composables/useTranslate.ts +2 -1
- package/src/lib.ts +2 -2
- package/src/metadata-builder/builders/footer-builder.test.ts +70 -45
- package/src/metadata-builder/builders/footer-builder.ts +4 -8
- package/src/metadata-builder/builders/global-role-propagation.test.ts +907 -0
- package/src/metadata-builder/builders/global-role-propagation.ts +430 -0
- package/src/metadata-builder/builders/global-styles-builder.test.ts +1020 -0
- package/src/metadata-builder/builders/global-styles-builder.ts +194 -48
- package/src/metadata-builder/builders/header-builder.test.ts +112 -40
- package/src/metadata-builder/builders/header-builder.ts +18 -8
- package/src/metadata-builder/builders/section-builders/about-section-builder.ts +5 -3
- package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +5 -3
- package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +5 -3
- package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +7 -4
- package/src/metadata-builder/builders/section-builders/images-section-builder.ts +5 -3
- package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +7 -7
- package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +5 -3
- package/src/metadata-builder/builders/section-builders/social-links-builder.test.ts +2 -2
- package/src/metadata-builder/builders/section-builders/social-links-builder.ts +21 -10
- package/src/metadata-builder/builders/section-builders/support-me-builder.test.ts +10 -0
- package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +3 -2
- package/src/metadata-builder/builders/section-builders/text-section-builder.ts +111 -61
- package/src/metadata-builder/builders/section-field-maps.ts +1 -0
- package/src/metadata-builder/builders/section-field-utils.test.ts +545 -2
- package/src/metadata-builder/builders/section-field-utils.ts +202 -69
- package/src/metadata-builder/builders/section-rules/global-styles.rules.ts +38 -13
- package/src/metadata-builder/builders/section-rules/social-links.rules.ts +5 -0
- package/src/metadata-builder/helpers/rte.helpers.test.ts +101 -0
- package/src/metadata-builder/helpers/rte.helpers.ts +129 -43
- package/src/metadata-builder/metadata-executor.test.ts +167 -0
- package/src/metadata-builder/metadata-executor.ts +34 -1
- package/src/metadata-builder/models.ts +2 -0
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +23 -7
- package/src/metadata-builder/parsers/section-tool-arguments.ts +21 -1
- package/src/metadata-builder/sanitizers/__tests__/section-args-validator.test.ts +215 -0
- package/src/metadata-builder/sanitizers/rte-schema-check.ts +1 -1
- package/src/metadata-builder/sanitizers/sanitizer-rules.ts +4 -8
- package/src/metadata-builder/sanitizers/section-args-validator.ts +136 -53
- package/src/shared/color-palette/section-color-matches.test.ts +15 -11
- package/src/shared/color-palette/section-color-matches.ts +9 -28
- package/src/shared/color-strategies/color-strategies.ts +35 -0
- package/src/shared/color-strategies/rte-color.test.ts +1 -1
- package/src/shared/color-strategies/rte-color.ts +19 -0
- package/src/shared/color-strategies/rte-field-pairs.test.ts +26 -5
- package/src/shared/color-strategies/rte-field-pairs.ts +33 -0
- package/src/shared/content-settings/components/color-matches-panel/ColorMatchesPanel.test.ts +43 -66
- package/src/shared/content-settings/components/color-matches-panel/ColorMatchesPanel.vue +7 -1
- package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -48
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +33 -7
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.test.ts +128 -1
- package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.vue +1 -0
- package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +0 -6
- package/src/shared/content-settings/components/logo-selection-field/LogoSelection.vue +3 -0
- package/src/shared/content-settings/components/logo-size-field/LogoSizeSlider.vue +3 -0
- package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -0
- package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.vue +1 -0
- package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.test.ts +56 -3
- package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +11 -4
- package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.test.ts +335 -25
- package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.ts +248 -70
- package/src/shared/content-settings/components/text-style-field/TextStyleField.vue +113 -25
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.de-DE.json +17 -10
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.es-ES.json +17 -10
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.fr-CA.json +17 -10
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.fr-FR.json +17 -10
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.json +8 -1
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.pt-BR.json +17 -10
- package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.pt-PT.json +17 -10
- package/src/shared/content-settings/components/text-style-role-dropdown/TextStyleRoleDropdown.test.ts +141 -0
- package/src/shared/content-settings/components/text-style-role-dropdown/TextStyleRoleDropdown.vue +136 -0
- package/src/shared/content-settings/store/content-settings-store.test.ts +491 -6
- package/src/shared/content-settings/store/content-settings-store.ts +159 -17
- package/src/shared/logo-settings/components/EditLogoSettings.vue +1 -0
- package/src/shared/logo-settings/components/LogoVariations.vue +1 -0
- package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -0
- package/src/shared/navigation-style-settings/store/index.test.ts +295 -0
- package/src/shared/navigation-style-settings/store/index.ts +65 -15
- package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.vue +2 -0
- package/src/shared/page-settings/components/page-settings/PageElement.vue +1 -0
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.test.ts +44 -4
- package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.vue +13 -4
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.navigation.test.ts +89 -0
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.text-style.test.ts +91 -0
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +14 -2
- package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.vue +2 -0
- package/src/shared/page-settings/store/page-settings-store.text-style.test.ts +84 -0
- package/src/shared/page-settings/store/page-settings-store.ts +30 -1
- package/src/shared/rte-extensions/AutoLink.test.ts +98 -0
- package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/AutoLink.ts +87 -58
- package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.ts +4 -1
- package/src/shared/rte-extensions/TextEffects.ts +151 -0
- package/src/shared/rte-extensions/ViewDomParser.ts +27 -0
- package/src/{brand-page-maker/composables/rich-text-editor/getRteExtensions.ts → shared/rte-extensions.util.ts} +66 -9
- package/src/shared/rte-link.util.ts +2 -0
- package/src/shared/rte-render.util.ts +385 -0
- package/src/shared/rte-shape.util.ts +29 -0
- package/src/shared/side-bar/store/side-bar-store.test.ts +27 -1
- package/src/shared/side-bar/store/side-bar-store.ts +11 -0
- package/src/shared/style-settings/components/StyleSettings.mixin.ts +7 -3
- package/src/shared/style-settings/components/StyleSettings.test.ts +116 -0
- package/src/shared/style-settings/components/StyleSettings.vue +75 -25
- package/src/shared/style-settings/components/i18n/style-settings.de-DE.json +32 -20
- package/src/shared/style-settings/components/i18n/style-settings.es-ES.json +32 -20
- package/src/shared/style-settings/components/i18n/style-settings.fr-CA.json +32 -20
- package/src/shared/style-settings/components/i18n/style-settings.fr-FR.json +32 -20
- package/src/shared/style-settings/components/i18n/style-settings.json +13 -3
- package/src/shared/style-settings/components/i18n/style-settings.pt-BR.json +32 -20
- package/src/shared/style-settings/components/i18n/style-settings.pt-PT.json +32 -20
- package/src/shared/style-settings/components/text-style-options-settings-with-state/TextStyleOptionsSettingsWithState.vue +14 -34
- package/src/shared/style-settings/store/style-settings-store.ts +3 -49
- package/src/shared/style-settings/text-style-size-order.test.ts +76 -0
- package/src/shared/style-settings/text-style-size-order.ts +28 -0
- package/src/shared/template-settings/components/TemplatesSettings.vue +4 -0
- package/src/shared/text-role-typography.util.ts +277 -0
- package/src/utils/minify-brand-page-metadata.test.ts +102 -7
- package/src/utils/minify-brand-page-metadata.ts +62 -8
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/AutoLink.d.ts +0 -2
- package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.d.ts +0 -28
- 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 -106
- package/lib/src/brand-page-maker/utils/rte-shape.d.ts +0 -18
- package/lib/src/brand-page-maker/utils/rte-shape.js +0 -21
- package/lib/src/metadata-builder/builders/global-font-propagation.d.ts +0 -41
- package/lib/src/metadata-builder/builders/global-font-propagation.js +0 -146
- package/src/brand-page-maker/utils/rte-render.util.ts +0 -179
- package/src/brand-page-maker/utils/rte-shape.ts +0 -29
- package/src/metadata-builder/builders/global-font-propagation.test.ts +0 -401
- package/src/metadata-builder/builders/global-font-propagation.ts +0 -238
- package/src/shared/style-settings/components/StyleSettingsSection.vue +0 -8
- /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.d.ts +0 -0
- /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.js +0 -0
- /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.d.ts +0 -0
- /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.js +0 -0
- /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.d.ts +0 -0
- /package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.ts +0 -0
- /package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.ts +0 -0
|
@@ -28,6 +28,8 @@ export interface InitialisePayload {
|
|
|
28
28
|
logoVariationImageUrls: string[];
|
|
29
29
|
shopConfigData: string | ShopConfigData;
|
|
30
30
|
isServerRenderOverride?: boolean;
|
|
31
|
+
/** The maker had no saved data and built the site with `createInitialBrandPage`. */
|
|
32
|
+
isBlankSite?: boolean;
|
|
31
33
|
}
|
|
32
34
|
export interface SetIsSavingPayload {
|
|
33
35
|
isSaving: boolean;
|
|
@@ -139,6 +141,9 @@ export declare const useBrandPageMakerStore: import("pinia").StoreDefinition<"br
|
|
|
139
141
|
setHideBranding(payload: {
|
|
140
142
|
hideBranding: boolean;
|
|
141
143
|
}): void;
|
|
144
|
+
setSaveContactButtonTextStyle(payload: {
|
|
145
|
+
buttonTextStyle: SaveContactOptions["buttonTextStyle"];
|
|
146
|
+
}): void;
|
|
142
147
|
setSensitiveContent(payload: {
|
|
143
148
|
sensitiveContent: string;
|
|
144
149
|
}): void;
|
|
@@ -241,7 +246,7 @@ export declare const useBrandPageMakerStore: import("pinia").StoreDefinition<"br
|
|
|
241
246
|
brandPageType: BrandPageType;
|
|
242
247
|
}): void;
|
|
243
248
|
initialiseStoresByBrandPageModelAsync(brandPageModel: BrandPageModel): Promise<void>;
|
|
244
|
-
initialise({ brandPage, brandPageType, logoDraftDesignAttributes, unsplashApplicationName, templateCategories, personalisationData, isPersonalisationEnabled, userPromptContentKey, showAiTemplatesTab, businessName, industry, layout, logoVariationImageUrls, shopConfigData: _shopConfigData, isServerRenderOverride, }: InitialisePayload): Promise<void>;
|
|
249
|
+
initialise({ brandPage, brandPageType, logoDraftDesignAttributes, unsplashApplicationName, templateCategories, personalisationData, isPersonalisationEnabled, userPromptContentKey, showAiTemplatesTab, businessName, industry, layout, logoVariationImageUrls, shopConfigData: _shopConfigData, isServerRenderOverride, isBlankSite, }: InitialisePayload): Promise<void>;
|
|
245
250
|
initialisePages({ pages, sections, }: {
|
|
246
251
|
pages: PageModel[];
|
|
247
252
|
sections: PageSettingsStateSections;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EMPTY_LOGO_IMAGE_MODEL, SENSITIVE_CONTENT_TYPES,
|
|
1
|
+
import { EMPTY_LOGO_IMAGE_MODEL, SENSITIVE_CONTENT_TYPES, VIEWPORTS, } from '@brand-page';
|
|
2
2
|
import { BackgroundStyles, BRAND_PAGE_TYPES, BrandPageModel, CONTENT_TYPES, NavigationDesktop, NavigationMobile, } from '@brand-page';
|
|
3
3
|
import { useBrandPageMakerUserStore } from '../user';
|
|
4
4
|
import { useAiWebsiteBuilderThreadStore } from '../ai-thread/ai-website-builder-thread-store';
|
|
@@ -22,10 +22,10 @@ import { useUiContentSettingsStore } from '@shared/content-settings/store';
|
|
|
22
22
|
import { setContentSettingsAddContentOptions } from './brandpage-maker-store-utils';
|
|
23
23
|
import { useAdminLogoSettingsStore } from '../admin-logo-settings';
|
|
24
24
|
import { useUiPageSettingsStore } from '@shared/page-settings/store';
|
|
25
|
-
import { mapBrandPageContentToContentSettingsItem, removeContentFieldValues, removeLogoTemplateModel,
|
|
26
|
-
import { useExternalRichTextEditor } from '@brand-page-maker/composables/rich-text-editor/useRichTextEditor';
|
|
25
|
+
import { mapBrandPageContentToContentSettingsItem, removeContentFieldValues, removeLogoTemplateModel, } from '@brand-page-maker/utils';
|
|
27
26
|
import { UI_DEVICE_MODES, UI_SCREENSIZE_MODES, } from '@shared/models';
|
|
28
27
|
import { PAGE_SECTIONS } from '@shared/page-settings/models';
|
|
28
|
+
import { applyBlankSiteTextRoles } from '@brand-page-maker/models/content-settings';
|
|
29
29
|
import { toPageModels } from '@shared/page-settings/utils';
|
|
30
30
|
import { useUiTemplateSettingsStore } from '@shared/template-settings/store';
|
|
31
31
|
import { useBrandPageContainerStore } from '../brandpage-container';
|
|
@@ -119,6 +119,11 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
119
119
|
setHideBranding(payload) {
|
|
120
120
|
this.saveContactSettings.hideBranding = payload.hideBranding;
|
|
121
121
|
},
|
|
122
|
+
// No maker control writes it, so a load is its only way in. Set even when absent, so the
|
|
123
|
+
// previous site's value is never saved into this one.
|
|
124
|
+
setSaveContactButtonTextStyle(payload) {
|
|
125
|
+
this.saveContactSettings.buttonTextStyle = payload.buttonTextStyle;
|
|
126
|
+
},
|
|
122
127
|
setSensitiveContent(payload) {
|
|
123
128
|
this.sensitiveContent = payload.sensitiveContent;
|
|
124
129
|
},
|
|
@@ -882,6 +887,9 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
882
887
|
// dangling `var(--…)` refs. No `ensurePaletteRoles` — an applied model is
|
|
883
888
|
// already migrated; role top-up belongs on the initial load path only.
|
|
884
889
|
useUiColorPaletteStore().setColors(brandPageModel.styles?.colors ?? []);
|
|
890
|
+
this.setSaveContactButtonTextStyle({
|
|
891
|
+
buttonTextStyle: brandPageModel.saveContactSettings?.buttonTextStyle,
|
|
892
|
+
});
|
|
885
893
|
// Apply button style config CSS (border-radius, box-shadow) to match
|
|
886
894
|
// the selectedButtonStyleId. setState sets the raw model values but
|
|
887
895
|
// doesn't derive the config-specific CSS that setSelectedButtonStyle does.
|
|
@@ -890,13 +898,8 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
890
898
|
id: buttonStyles.selectedButtonStyleId,
|
|
891
899
|
});
|
|
892
900
|
}
|
|
893
|
-
const { externalEditor } = useExternalRichTextEditor();
|
|
894
|
-
transformToRTE(pageSettingsStore, externalEditor, undefined, undefined, TEXT_STYLE_TYPES.titles, textStyles.textStyleOptions.titles.style);
|
|
895
|
-
transformToRTE(pageSettingsStore, externalEditor, undefined, undefined, TEXT_STYLE_TYPES.headings, textStyles.textStyleOptions.headings.style);
|
|
896
|
-
transformToRTE(pageSettingsStore, externalEditor, undefined, undefined, TEXT_STYLE_TYPES.paragraphs, textStyles.textStyleOptions.paragraphs.style);
|
|
897
|
-
externalEditor.destroy();
|
|
898
901
|
},
|
|
899
|
-
async initialise({ brandPage, brandPageType, logoDraftDesignAttributes, unsplashApplicationName, templateCategories, personalisationData, isPersonalisationEnabled, userPromptContentKey, showAiTemplatesTab = false, businessName, industry, layout, logoVariationImageUrls, shopConfigData: _shopConfigData, isServerRenderOverride = false, }) {
|
|
902
|
+
async initialise({ brandPage, brandPageType, logoDraftDesignAttributes, unsplashApplicationName, templateCategories, personalisationData, isPersonalisationEnabled, userPromptContentKey, showAiTemplatesTab = false, businessName, industry, layout, logoVariationImageUrls, shopConfigData: _shopConfigData, isServerRenderOverride = false, isBlankSite = false, }) {
|
|
900
903
|
const brandPageContainerStore = useBrandPageContainerStore();
|
|
901
904
|
const userStore = useBrandPageMakerUserStore();
|
|
902
905
|
const uiStore = useUiStore();
|
|
@@ -932,6 +935,8 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
932
935
|
isUserDraft: this.isUserDraft,
|
|
933
936
|
isServerRender: isServerRenderOverride,
|
|
934
937
|
});
|
|
938
|
+
if (isBlankSite)
|
|
939
|
+
applyBlankSiteTextRoles(brandPageModel);
|
|
935
940
|
const userPersonalisation = personalisationData && personalisationData.length > 0
|
|
936
941
|
? personalisationData[await getAiContentIndexByTemplateTokenAndNumberOfVariations(this.selectedTemplateId, personalisationData.length)].userPersonalisation
|
|
937
942
|
: undefined;
|
|
@@ -1141,6 +1146,9 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
|
|
|
1141
1146
|
this.setHideBranding({
|
|
1142
1147
|
hideBranding: brandPageModel.saveContactSettings?.hideBranding ?? false,
|
|
1143
1148
|
});
|
|
1149
|
+
this.setSaveContactButtonTextStyle({
|
|
1150
|
+
buttonTextStyle: brandPageModel.saveContactSettings?.buttonTextStyle,
|
|
1151
|
+
});
|
|
1144
1152
|
this.businessName = businessName;
|
|
1145
1153
|
this.industry = industry;
|
|
1146
1154
|
}
|
|
@@ -29,6 +29,15 @@ export declare const useHistoryStore: import("pinia").StoreDefinition<"history",
|
|
|
29
29
|
isApplyingSnapshot: import("vue").Ref<boolean, boolean>;
|
|
30
30
|
snapshotAppliedToken: import("vue").Ref<number, number>;
|
|
31
31
|
rteResyncToken: import("vue").Ref<number, number>;
|
|
32
|
+
rteResyncExcept: import("vue").Ref<{
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
from: number;
|
|
36
|
+
} | undefined, {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
from: number;
|
|
40
|
+
} | undefined>;
|
|
32
41
|
baselineCaptured: import("vue").Ref<boolean, boolean>;
|
|
33
42
|
canUndo: import("vue").ComputedRef<boolean>;
|
|
34
43
|
canRedo: import("vue").ComputedRef<boolean>;
|
|
@@ -41,18 +50,36 @@ export declare const useHistoryStore: import("pinia").StoreDefinition<"history",
|
|
|
41
50
|
captureTemplateSwitch: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
42
51
|
captureAiChangeset: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
43
52
|
mergeNextMutation: () => void;
|
|
44
|
-
markRteResync: (
|
|
53
|
+
markRteResync: (options?: {
|
|
54
|
+
except?: {
|
|
55
|
+
id: string;
|
|
56
|
+
name: string;
|
|
57
|
+
};
|
|
58
|
+
}) => void;
|
|
59
|
+
isRteResyncExcepted: (field: {
|
|
60
|
+
id: string;
|
|
61
|
+
name: string;
|
|
62
|
+
}, sinceToken: number) => boolean;
|
|
45
63
|
undo: () => Promise<void>;
|
|
46
64
|
redo: () => Promise<void>;
|
|
47
65
|
reset: () => void;
|
|
48
66
|
getCurrentSizeBytes: () => number;
|
|
49
67
|
getCurrentEntryCount: () => number;
|
|
50
|
-
}, "entries" | "currentIndex" | "isApplyingSnapshot" | "snapshotAppliedToken" | "rteResyncToken" | "baselineCaptured">, Pick<{
|
|
68
|
+
}, "entries" | "currentIndex" | "isApplyingSnapshot" | "snapshotAppliedToken" | "rteResyncToken" | "rteResyncExcept" | "baselineCaptured">, Pick<{
|
|
51
69
|
entries: import("vue").ShallowRef<HistoryEntry[], HistoryEntry[]>;
|
|
52
70
|
currentIndex: import("vue").Ref<number, number>;
|
|
53
71
|
isApplyingSnapshot: import("vue").Ref<boolean, boolean>;
|
|
54
72
|
snapshotAppliedToken: import("vue").Ref<number, number>;
|
|
55
73
|
rteResyncToken: import("vue").Ref<number, number>;
|
|
74
|
+
rteResyncExcept: import("vue").Ref<{
|
|
75
|
+
id: string;
|
|
76
|
+
name: string;
|
|
77
|
+
from: number;
|
|
78
|
+
} | undefined, {
|
|
79
|
+
id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
from: number;
|
|
82
|
+
} | undefined>;
|
|
56
83
|
baselineCaptured: import("vue").Ref<boolean, boolean>;
|
|
57
84
|
canUndo: import("vue").ComputedRef<boolean>;
|
|
58
85
|
canRedo: import("vue").ComputedRef<boolean>;
|
|
@@ -65,7 +92,16 @@ export declare const useHistoryStore: import("pinia").StoreDefinition<"history",
|
|
|
65
92
|
captureTemplateSwitch: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
66
93
|
captureAiChangeset: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
67
94
|
mergeNextMutation: () => void;
|
|
68
|
-
markRteResync: (
|
|
95
|
+
markRteResync: (options?: {
|
|
96
|
+
except?: {
|
|
97
|
+
id: string;
|
|
98
|
+
name: string;
|
|
99
|
+
};
|
|
100
|
+
}) => void;
|
|
101
|
+
isRteResyncExcepted: (field: {
|
|
102
|
+
id: string;
|
|
103
|
+
name: string;
|
|
104
|
+
}, sinceToken: number) => boolean;
|
|
69
105
|
undo: () => Promise<void>;
|
|
70
106
|
redo: () => Promise<void>;
|
|
71
107
|
reset: () => void;
|
|
@@ -77,6 +113,15 @@ export declare const useHistoryStore: import("pinia").StoreDefinition<"history",
|
|
|
77
113
|
isApplyingSnapshot: import("vue").Ref<boolean, boolean>;
|
|
78
114
|
snapshotAppliedToken: import("vue").Ref<number, number>;
|
|
79
115
|
rteResyncToken: import("vue").Ref<number, number>;
|
|
116
|
+
rteResyncExcept: import("vue").Ref<{
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
from: number;
|
|
120
|
+
} | undefined, {
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
from: number;
|
|
124
|
+
} | undefined>;
|
|
80
125
|
baselineCaptured: import("vue").Ref<boolean, boolean>;
|
|
81
126
|
canUndo: import("vue").ComputedRef<boolean>;
|
|
82
127
|
canRedo: import("vue").ComputedRef<boolean>;
|
|
@@ -89,10 +134,19 @@ export declare const useHistoryStore: import("pinia").StoreDefinition<"history",
|
|
|
89
134
|
captureTemplateSwitch: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
90
135
|
captureAiChangeset: (label?: string) => "committed" | "oversized" | "noop" | "skipped";
|
|
91
136
|
mergeNextMutation: () => void;
|
|
92
|
-
markRteResync: (
|
|
137
|
+
markRteResync: (options?: {
|
|
138
|
+
except?: {
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
};
|
|
142
|
+
}) => void;
|
|
143
|
+
isRteResyncExcepted: (field: {
|
|
144
|
+
id: string;
|
|
145
|
+
name: string;
|
|
146
|
+
}, sinceToken: number) => boolean;
|
|
93
147
|
undo: () => Promise<void>;
|
|
94
148
|
redo: () => Promise<void>;
|
|
95
149
|
reset: () => void;
|
|
96
150
|
getCurrentSizeBytes: () => number;
|
|
97
151
|
getCurrentEntryCount: () => number;
|
|
98
|
-
}, "reset" | "captureBaseline" | "capture" | "captureTemplateSwitch" | "captureAiChangeset" | "mergeNextMutation" | "markRteResync" | "
|
|
152
|
+
}, "reset" | "undo" | "redo" | "captureBaseline" | "capture" | "captureTemplateSwitch" | "captureAiChangeset" | "mergeNextMutation" | "markRteResync" | "isRteResyncExcepted" | "getCurrentSizeBytes" | "getCurrentEntryCount">>;
|
|
@@ -45,6 +45,9 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
45
45
|
// (ephemeral, never part of a snapshot) so undo/redo can't restore a stale
|
|
46
46
|
// value and trigger a spurious re-seed.
|
|
47
47
|
const rteResyncToken = ref(0);
|
|
48
|
+
// The field (content id + field name) a resync leaves mounted: its own editor wrote the doc.
|
|
49
|
+
// `from` is the first token of the unbroken run of resyncs that each excepted it.
|
|
50
|
+
const rteResyncExcept = ref();
|
|
48
51
|
const baselineCaptured = ref(false);
|
|
49
52
|
const watcherInstalled = ref(false);
|
|
50
53
|
let baselineCapturedAt = 0;
|
|
@@ -503,8 +506,23 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
503
506
|
}
|
|
504
507
|
// Signal mounted RTE editors to re-seed from the store after an external
|
|
505
508
|
// (non-history) replacement of their content — see rteResyncToken.
|
|
506
|
-
function markRteResync() {
|
|
507
|
-
|
|
509
|
+
function markRteResync(options) {
|
|
510
|
+
const except = options?.except;
|
|
511
|
+
const current = rteResyncExcept.value;
|
|
512
|
+
const token = rteResyncToken.value + 1;
|
|
513
|
+
const continues = !!except && current?.id === except.id && current.name === except.name;
|
|
514
|
+
rteResyncExcept.value = except
|
|
515
|
+
? { ...except, from: continues ? current.from : token }
|
|
516
|
+
: undefined;
|
|
517
|
+
rteResyncToken.value = token;
|
|
518
|
+
}
|
|
519
|
+
// Watchers batch, so one reaction can cover several resyncs: a field stays mounted only if every
|
|
520
|
+
// resync after `sinceToken` excepted it.
|
|
521
|
+
function isRteResyncExcepted(field, sinceToken) {
|
|
522
|
+
const except = rteResyncExcept.value;
|
|
523
|
+
return (except?.id === field.id &&
|
|
524
|
+
except.name === field.name &&
|
|
525
|
+
except.from <= sinceToken + 1);
|
|
508
526
|
}
|
|
509
527
|
return {
|
|
510
528
|
// State
|
|
@@ -513,6 +531,7 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
513
531
|
isApplyingSnapshot,
|
|
514
532
|
snapshotAppliedToken,
|
|
515
533
|
rteResyncToken,
|
|
534
|
+
rteResyncExcept,
|
|
516
535
|
baselineCaptured,
|
|
517
536
|
// Getters
|
|
518
537
|
canUndo,
|
|
@@ -524,6 +543,7 @@ export const useHistoryStore = defineStore('history', () => {
|
|
|
524
543
|
captureAiChangeset,
|
|
525
544
|
mergeNextMutation,
|
|
526
545
|
markRteResync,
|
|
546
|
+
isRteResyncExcepted,
|
|
527
547
|
undo,
|
|
528
548
|
redo,
|
|
529
549
|
reset,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { BRAND_PAGE_TYPES } from '@brand-page';
|
|
2
|
-
import { FIELD_SLOT_MAP, raisedLayerFor, strategyRoleRefForField, } from '@shared/color-strategies/color-strategies';
|
|
2
|
+
import { FIELD_SLOT_MAP, raisedLayerFor, STYLE_FIELDS_OUTSIDE_CONFIG, strategyRoleRefForField, } from '@shared/color-strategies/color-strategies';
|
|
3
3
|
import { isTransparentDisabled, } from '@shared/content-settings/disable-transparent.util';
|
|
4
4
|
import { setRteTextColor } from '@shared/color-strategies/rte-color';
|
|
5
5
|
import { pairedRteTextField } from '@shared/color-strategies/rte-field-pairs';
|
|
6
|
+
import { isCanonicalTextStyleType } from '@brand-page/models/styles.model';
|
|
6
7
|
/**
|
|
7
8
|
* Field types a strategy can assign. `color` fields hold nothing but a colour and are
|
|
8
9
|
* REPLACED via their `valueConvertor`; `text-style` fields hold typography *and* a
|
|
@@ -14,11 +15,27 @@ const ASSIGNABLE_FIELD_TYPES = new Set(['color', 'text-style']);
|
|
|
14
15
|
* mapped to a slot, AND currently visible (the same `visibilityAssessor` the settings
|
|
15
16
|
* panel uses). Shared by the picker's visibility gate and the applier, so the picker is
|
|
16
17
|
* only shown when applying would actually change something.
|
|
18
|
+
*
|
|
19
|
+
* Plus any `STYLE_FIELDS_OUTSIDE_CONFIG` whose followed field made the list.
|
|
17
20
|
*/
|
|
18
|
-
const assignableColorFields = (config, content, context) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
const assignableColorFields = (config, content, context) => {
|
|
22
|
+
const assignable = Object.entries(config.fields).filter(([name, field]) => !!field?.type &&
|
|
23
|
+
ASSIGNABLE_FIELD_TYPES.has(field.type) &&
|
|
24
|
+
!!FIELD_SLOT_MAP[name] &&
|
|
25
|
+
(!field.visibilityAssessor || field.visibilityAssessor(content, context)));
|
|
26
|
+
// One with no canonical role yet is skipped: a colour written alone would link no role.
|
|
27
|
+
const outsideConfig = Object.entries(STYLE_FIELDS_OUTSIDE_CONFIG[config.type] ?? {})
|
|
28
|
+
.filter(([name, { follows }]) => {
|
|
29
|
+
const style = content?.[name];
|
|
30
|
+
return (isCanonicalTextStyleType(style?.textStyleType) &&
|
|
31
|
+
assignable.some(([assigned]) => assigned === follows));
|
|
32
|
+
})
|
|
33
|
+
.map(([name, { textField }]) => [
|
|
34
|
+
name,
|
|
35
|
+
{ type: 'text-style', textField },
|
|
36
|
+
]);
|
|
37
|
+
return [...assignable, ...outsideConfig];
|
|
38
|
+
};
|
|
22
39
|
/**
|
|
23
40
|
* Whether a strategy would actually assign at least one colour on THIS section as
|
|
24
41
|
* it stands (mapped + visible). Used to hide the picker where applying would be a
|
|
@@ -111,9 +128,10 @@ export const buildColorStrategyValues = (config, content, strategyId, context, a
|
|
|
111
128
|
// `setRteTextColor` returns undefined for a plain string or legacy HTML RTE, so
|
|
112
129
|
// that doubles as the "nothing to do" test — no separate type guard here.
|
|
113
130
|
const sectionType = contentRecord.type;
|
|
114
|
-
const textField =
|
|
115
|
-
|
|
116
|
-
|
|
131
|
+
const textField = field.textField ??
|
|
132
|
+
(typeof sectionType === 'string'
|
|
133
|
+
? pairedRteTextField(sectionType, name)
|
|
134
|
+
: undefined);
|
|
117
135
|
if (textField) {
|
|
118
136
|
const nextDoc = setRteTextColor(contentRecord[textField], ref);
|
|
119
137
|
if (nextDoc) {
|
|
@@ -5,5 +5,6 @@ export * from './url.util';
|
|
|
5
5
|
export * from './slug.util';
|
|
6
6
|
export * from './text.util';
|
|
7
7
|
export * from './rich-text-editor.util';
|
|
8
|
-
export * from '
|
|
8
|
+
export * from '@shared/rte-render.util';
|
|
9
9
|
export * from './rte-sanitize.util';
|
|
10
|
+
export * from './rte-authoring.util';
|
|
@@ -5,5 +5,6 @@ export * from './url.util';
|
|
|
5
5
|
export * from './slug.util';
|
|
6
6
|
export * from './text.util';
|
|
7
7
|
export * from './rich-text-editor.util';
|
|
8
|
-
export * from '
|
|
8
|
+
export * from '@shared/rte-render.util';
|
|
9
9
|
export * from './rte-sanitize.util';
|
|
10
|
+
export * from './rte-authoring.util';
|
|
@@ -1,21 +1,114 @@
|
|
|
1
1
|
import type { ChainedCommands, Editor, JSONContent } from '@tiptap/vue-3';
|
|
2
2
|
import type { EditorState, Transaction, Selection } from 'prosemirror-state';
|
|
3
|
-
import { type
|
|
4
|
-
import type {
|
|
5
|
-
import type { StyleSettingsState } from '@shared/style-settings/store';
|
|
6
|
-
import type { Mark } from 'prosemirror-model';
|
|
3
|
+
import { type TextStyleDeclaration, type RichTextValue } from '@brand-page';
|
|
4
|
+
import type { Mark, Node as ProseMirrorNode } from 'prosemirror-model';
|
|
7
5
|
import { type DOMPurify } from 'dompurify';
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
export { getRteJsonPlainText, isRteHtmlString, isTiptapDocument, } from '@shared/rte-shape.util';
|
|
7
|
+
/**
|
|
8
|
+
* BP-5969 (ADR-0019, Option B): a block linked to a CANONICAL role gets its typography
|
|
9
|
+
* from the page-scoped CSS class (`text-role-css.util`), so authoring must NOT bake
|
|
10
|
+
* family/size/spacing/line-height/weight/style/decoration into the marks — a value baked
|
|
11
|
+
* post-migration would pin the block forever (migration-22 never re-runs to strip it).
|
|
12
|
+
* Colour is exempt (it isn't in the class). Legacy/unlinked types have no class, so they
|
|
13
|
+
* still bake inline. Mirrors `TextWrapper`'s canonical-only `roleClass`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const isCanonicalLinked: (style: {
|
|
16
|
+
textStyleType?: string | undefined;
|
|
17
|
+
} | undefined) => boolean;
|
|
18
|
+
/** True when a mark value is a role reference (`var(--role-…)`) rather than a literal. */
|
|
19
|
+
export declare const isRoleVarRef: (value: unknown) => value is string;
|
|
20
|
+
/**
|
|
21
|
+
* Normalise a typography value for a role-equality compare: quote-strip + trim for fontFamily,
|
|
22
|
+
* trim otherwise, then fold a prop's default keyword (`normal`/`none`) to '' so it matches a role
|
|
23
|
+
* that leaves the prop unset (`'normal'`/`'none'`/absent are the same override-wise).
|
|
24
|
+
*/
|
|
25
|
+
export declare const normTypographyValue: (key: string, value?: string) => string;
|
|
26
|
+
/**
|
|
27
|
+
* BP-5969 — the RTE mark value to write for a typography attr change: the role var (so the run
|
|
28
|
+
* stays linked and follows role edits) when the picked value equals the linked role, else the
|
|
29
|
+
* literal raw override. `roleStyle` undefined (legacy/unlinked block, no role class to resolve a
|
|
30
|
+
* var) → always the literal. The equality test runs at the mutation point, per ADR-0019.
|
|
31
|
+
*/
|
|
32
|
+
export declare const roleVarOrLiteral: (markAttr: string, picked: string, roleStyle: TextStyleDeclaration | undefined) => string;
|
|
33
|
+
declare const BLOCK_TYPOGRAPHY_ATTRS: readonly ["fontFamily", "fontSize", "lineHeight", "letterSpacing", "fontWeight", "fontStyle", "textDecoration"];
|
|
34
|
+
type BlockTypographyAttr = (typeof BLOCK_TYPOGRAPHY_ATTRS)[number];
|
|
35
|
+
export declare const LEGACY_TYPOGRAPHY_MARKS: Partial<Record<BlockTypographyAttr, string[]>>;
|
|
36
|
+
/**
|
|
37
|
+
* A run's marks without the legacy semantic marks (`<strong>`/`<em>`/`<u>`/`<s>`) that compete with
|
|
38
|
+
* `attrs`. A link keeps its underline, as Reset does (`restoreLinkUnderlines`).
|
|
39
|
+
*/
|
|
40
|
+
export declare const withoutTypographyMarks: <M extends {
|
|
41
|
+
type: string;
|
|
42
|
+
}>(marks: readonly M[], attrs: readonly BlockTypographyAttr[], isLink: boolean) => M[];
|
|
43
|
+
/**
|
|
44
|
+
* One text run's typography: its `textStyle` attrs, falling back to a legacy semantic mark
|
|
45
|
+
* (`<strong>`/`<em>`/`<u>`/`<s>`) for un-migrated / pasted runs (mirrors `formatting.ts` `effective`).
|
|
46
|
+
* An absent attr is undefined — the run inherits the role class.
|
|
47
|
+
*/
|
|
48
|
+
export declare const runTypography: (node: ProseMirrorNode) => Record<BlockTypographyAttr, string | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* True when any run's typography differs from `role` — the role dropdown's asterisk. Unlike
|
|
51
|
+
* `readBlockTypography`, one bold word counts. Absent attrs and role refs follow the role.
|
|
52
|
+
*/
|
|
53
|
+
export declare const hasRunTypographyOverride: (editor: Editor, role: Record<string, unknown>) => boolean;
|
|
54
|
+
/**
|
|
55
|
+
* "Apply changes to all", on the live editor: every run value now equal to `role` becomes its
|
|
56
|
+
* `var(--role-*)` ref (or is unset when the role leaves the attr undefined), and the legacy mark it
|
|
57
|
+
* came from is dropped. A value that still differs — a word-level override — stays. Colour and the
|
|
58
|
+
* selection are untouched. The editor twin of `relinkRoleEqualMarks`; the caller runs the chain.
|
|
59
|
+
*/
|
|
60
|
+
export declare const relinkRoleEqualRunsChain: (editor: Editor, role: Record<string, unknown>, previousRole?: Record<string, unknown>) => ChainedCommands;
|
|
61
|
+
/**
|
|
62
|
+
* The block's whole-box typography — what "Apply changes to all" can promote into the role. A prop
|
|
63
|
+
* is included only when UNIFORM across every text run: one bold word has no single value to promote
|
|
64
|
+
* (`hasRunTypographyOverride` still flags it). A role-var ref rides through as the block value; the
|
|
65
|
+
* caller (`getTypographyOverride`) treats it as "linked", not an override.
|
|
66
|
+
*/
|
|
67
|
+
export declare const readBlockTypography: (editor: Editor) => Record<string, string>;
|
|
68
|
+
/**
|
|
69
|
+
* BP-5969 — build the "reset to role" chain for the whole selection: re-link every typography attr
|
|
70
|
+
* the role DEFINES to its `var(--role-*)` token (self-describing, follows future role edits), unset
|
|
71
|
+
* the attrs the role leaves undefined, and clear the legacy semantic marks (bold/italic/underline/
|
|
72
|
+
* strike) that the attr resets don't touch. Returns the un-run chain so the caller can wrap it in
|
|
73
|
+
* `skipStyleDetection` (keeping the role link) before running. Colour marks are left alone.
|
|
74
|
+
*/
|
|
75
|
+
export declare const relinkTypographyChain: (editor: Editor, role: Record<string, unknown> | undefined) => ChainedCommands;
|
|
76
|
+
/**
|
|
77
|
+
* A chain step that puts the underline back on link text that had one before the chain cleared
|
|
78
|
+
* every underline: a link's underline is its own look, not a typography choice (`typographyAttrsOf`).
|
|
79
|
+
* Captures the link ranges now, so build it before the chain changes the doc; mark steps keep
|
|
80
|
+
* positions, so the ranges still hold when it runs.
|
|
81
|
+
*/
|
|
82
|
+
export declare const restoreLinkUnderlines: (editor: Editor) => ((props: {
|
|
83
|
+
tr: Transaction;
|
|
84
|
+
}) => boolean);
|
|
85
|
+
/**
|
|
86
|
+
* The document-level twin of `relinkTypographyChain`, for a block that isn't being edited: each run's
|
|
87
|
+
* typography literal that equals any of `roles` (a literal the asterisk never counted as an override)
|
|
88
|
+
* becomes the `var(--role-*)` ref when `roles[0]` — the role the block links now — defines the attr,
|
|
89
|
+
* else it's unset. Literals that differ from every role, role refs, colour and link marks are left
|
|
90
|
+
* alone. Returns the same doc when nothing changes.
|
|
91
|
+
*/
|
|
92
|
+
export declare const relinkRoleEqualMarks: (doc: JSONContent, roles: readonly (Record<string, unknown> | undefined)[]) => JSONContent;
|
|
93
|
+
/**
|
|
94
|
+
* BP-5969 (R19) — the stored-document twin of `relinkTypographyChain`'s reset-to-role chain, for a
|
|
95
|
+
* doc that isn't mounted in an editor (the AI boundary's role switch). Unlike `relinkRoleEqualMarks`
|
|
96
|
+
* (which only relinks a literal that already equals a role), every run's typography is reset to
|
|
97
|
+
* `role` — a deliberate accent override included — mirroring the maker's Reset: a `var(--role-*)`
|
|
98
|
+
* ref where `role` defines the attr, else unset. The legacy semantic marks (bold/italic/underline/
|
|
99
|
+
* strike) that the attr resets don't touch are dropped too. Colour and link marks are left alone.
|
|
100
|
+
*
|
|
101
|
+
* `styleOverrides` is the call's own surviving style-object override — e.g. a switch call that
|
|
102
|
+
* also sends `fontFamily: 'Playfair Display'`. Those attrs are nulled, not ref'd: the render fill
|
|
103
|
+
* (`fillRteRunTypography`) treats a non-null mark value as final, so baking the ref here would bury
|
|
104
|
+
* the override under it; nulling leaves the render fill free to resolve the literal from the style
|
|
105
|
+
* object, same as any other block-level override.
|
|
106
|
+
*/
|
|
107
|
+
export declare const relinkDocToRole: (doc: JSONContent, role: Record<string, unknown> | undefined, styleOverrides?: Record<string, unknown>) => JSONContent;
|
|
10
108
|
export declare const RTE_ALLOWED_SECTION_TYPES: string[];
|
|
11
109
|
export declare const isRTEManagedStyleField: (sectionType: string, fieldName: string) => boolean;
|
|
12
110
|
export declare const isStyleChanged: (tr: Transaction) => boolean;
|
|
13
111
|
export declare const skipStyleDetection: (chain: ChainedCommands, marks?: Mark[]) => ChainedCommands;
|
|
14
|
-
/**
|
|
15
|
-
* Extract visible plain text from a Tiptap JSON document (concatenated text
|
|
16
|
-
* nodes). Dependency-free — no editor instantiation.
|
|
17
|
-
*/
|
|
18
|
-
export declare const getRteJsonPlainText: (doc: JSONContent) => string;
|
|
19
112
|
export declare const hasRTEContent: (content: unknown) => boolean;
|
|
20
113
|
export declare const getPlainTextFromRTE: (content: unknown) => string;
|
|
21
114
|
/**
|
|
@@ -36,10 +129,19 @@ export declare const getPlainTextFromRTE: (content: unknown) => string;
|
|
|
36
129
|
*/
|
|
37
130
|
export declare const getRteTextLength: (value: RichTextValue | null | undefined) => number;
|
|
38
131
|
export declare const replaceTextInRTE: (existingHtml: string, newText: string) => string;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
132
|
+
/**
|
|
133
|
+
* Helper to build stored marks from a style declaration. BP-5969: when `bakeTypography`
|
|
134
|
+
* is false (a canonical-role block — the class supplies typography), only colour and
|
|
135
|
+
* highlight are baked; family/size/spacing/line-height/weight/style/decoration are left
|
|
136
|
+
* to the role class so freshly-typed text follows the role and repaints on a role edit.
|
|
137
|
+
*/
|
|
138
|
+
export declare const buildInitialMarks: (state: EditorState, style: TextStyleDeclaration, bakeTypography?: boolean) => any[];
|
|
139
|
+
/**
|
|
140
|
+
* The first-type seed for an empty field, with what the customer picked before typing laid over it:
|
|
141
|
+
* a picked mark wins per attribute (its unset attrs keep the seed's), and a picked mark the seed
|
|
142
|
+
* lacks is added. With nothing picked, the seed as is.
|
|
143
|
+
*/
|
|
144
|
+
export declare const mergePickedMarks: (seed: readonly Mark[], picked: readonly Mark[] | null | undefined) => Mark[];
|
|
43
145
|
export declare const retainStyleOnEmptyLine: (editor: Editor, selection: Selection) => void;
|
|
44
146
|
export interface SanitizationResult {
|
|
45
147
|
sanitizedHtml: string;
|