@designcrowd/library.brand-page 6.2.9 → 6.2.10-ast-faq-2
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-9uC6t5HU.js → CreatedOnBrandCrowd-de-de-BZrMq1gI.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-P6TzcklZ.js → CreatedOnBrandCrowd-en-us-DPC8TAr4.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DimkGb1_.js → CreatedOnBrandCrowd-es-es-B94gSf_i.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-CL_iFuJw.js → CreatedOnBrandCrowd-fr-ca-DziGGjA1.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-CL_iFuJw.js → CreatedOnBrandCrowd-fr-fr-DziGGjA1.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-DSIjEoMv.js → CreatedOnBrandCrowd-pt-br-CfTCQ9nC.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-DSIjEoMv.js → CreatedOnBrandCrowd-pt-pt-CfTCQ9nC.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-CKRvl9Ky.js → CreatedOnDcom-de-de-C22-PnKc.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-ChplPDfS.js → CreatedOnDcom-en-us-CZqr71VB.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-DCIXsW9X.js → CreatedOnDcom-es-es-BinRuIc_.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-lakt1nLU.js → CreatedOnDcom-fr-ca-DYYBqMhv.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-RsGK1y5g.js → CreatedOnDcom-fr-fr-3ytJgZBj.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-DyA4XodM.js → CreatedOnDcom-pt-br-D1UqN_eq.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-BK51dTyw.js → CreatedOnDcom-pt-pt-BnIpbt_8.js} +1 -1
- package/lib/src/brand-page/constants/misc.constants.d.ts +8 -0
- package/lib/src/brand-page/constants/misc.constants.js +7 -0
- package/lib/src/brand-page/constants/styles.constants.d.ts +2 -0
- package/lib/src/brand-page/constants/styles.constants.js +2 -0
- package/lib/src/brand-page/models/content.model.d.ts +1 -0
- package/lib/src/brand-page/models/content.model.js +1 -0
- package/lib/src/brand-page/models/index.d.ts +22 -0
- package/lib/src/brand-page/utils/content-callback-util.d.ts +2 -1
- package/lib/src/brand-page/utils/content-callback-util.js +3 -0
- package/lib/src/brand-page/utils/view-model.util.js +22 -0
- package/lib/src/brand-page/view-models.d.ts +7 -2
- package/lib/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.d.ts +3 -0
- package/lib/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.js +4 -0
- package/lib/src/brand-page-maker/assessors/index.d.ts +1 -0
- package/lib/src/brand-page-maker/assessors/index.js +1 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +9 -5
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +9 -5
- package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +6 -5
- package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +7 -5
- package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +5 -0
- package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +6 -5
- package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +6 -5
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +6 -5
- package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +6 -5
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +13 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +33 -12
- package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +2 -1
- package/lib/src/brand-page-maker/constants/config-settings-constant.js +103 -4
- package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.d.ts +3 -0
- package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.js +49 -0
- package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -0
- package/lib/src/brand-page-maker/models/content-settings-configs.js +1 -0
- package/lib/src/brand-page-maker/models/content-settings.d.ts +4 -1
- package/lib/src/brand-page-maker/models/content-settings.js +47 -1
- package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +7 -6
- package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +52 -5
- package/lib/src/brand-page-maker/utils/apply-color-strategy.js +45 -17
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +6 -0
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +24 -1
- package/lib/src/brand-page-maker/validators/field.validator.js +2 -0
- package/lib/src/{bundled-translations-zfiA5Tsw.js → bundled-translations-CUJ-udgD.js} +17 -17
- package/lib/src/{bundled-translations.de-DE-ChsdSyAP.js → bundled-translations.de-DE-Ch7Y_CCO.js} +22 -22
- package/lib/src/{bundled-translations.es-ES-DflsWQK0.js → bundled-translations.es-ES-B4CWkXkC.js} +30 -30
- package/lib/src/{bundled-translations.fr-CA-fpDRuZ52.js → bundled-translations.fr-CA-Drtb5hJ2.js} +9 -9
- package/lib/src/{bundled-translations.fr-FR-Bub73Zt-.js → bundled-translations.fr-FR-CImFpWT4.js} +29 -29
- package/lib/src/{bundled-translations.pt-BR-BlnWE9TB.js → bundled-translations.pt-BR-BHluaLc_.js} +15 -15
- package/lib/src/{bundled-translations.pt-PT-DmzXlnaS.js → bundled-translations.pt-PT-BxL2VvW4.js} +37 -37
- package/lib/src/bundles/bundled-translations.de-DE.json +13 -5
- package/lib/src/bundles/bundled-translations.es-ES.json +14 -6
- package/lib/src/bundles/bundled-translations.fr-CA.json +14 -6
- package/lib/src/bundles/bundled-translations.fr-FR.json +14 -6
- package/lib/src/bundles/bundled-translations.json +9 -1
- package/lib/src/bundles/bundled-translations.pt-BR.json +13 -5
- package/lib/src/bundles/bundled-translations.pt-PT.json +13 -5
- 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 +164 -53
- package/lib/src/css/library.brand-page-brandPage.min.css +164 -53
- package/lib/src/css/library.brand-page-designCom.min.css +164 -53
- package/lib/src/css/library.brand-page-preview.min.css +164 -53
- package/lib/src/index.mjs +161 -160
- package/lib/src/{lib-Ca7GMpcR.js → lib-nAkVtlza.js} +34006 -33265
- package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +1 -1
- package/lib/src/shared/color-strategies/color-strategies.js +4 -0
- package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +12 -0
- package/lib/src/shared/color-strategies/rte-field-pairs.js +10 -0
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +3 -0
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +4 -1
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +3 -0
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +3 -0
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +3 -0
- package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +12 -0
- package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +8 -0
- package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +6 -5
- package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +12 -0
- package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.js +5 -0
- package/lib/src/shared/content-settings/models.d.ts +6 -0
- package/lib/src/shared/content-settings/store/content-settings-store.d.ts +5 -1
- package/lib/src/shared/content-settings/store/content-settings-store.js +12 -0
- package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +6 -5
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +9 -5
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +9 -5
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +6 -5
- package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +6 -5
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +6 -5
- package/package.json +2 -2
- package/src/brand-page/components/faq-section/FaqSection.test.ts +403 -0
- package/src/brand-page/components/faq-section/FaqSection.vue +315 -0
- package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +1 -0
- package/src/brand-page/components/page/PageComponent.vue +2 -0
- package/src/brand-page/constants/misc.constants.ts +12 -0
- package/src/brand-page/constants/styles.constants.ts +2 -0
- package/src/brand-page/models/content.model.ts +1 -0
- package/src/brand-page/models/index.ts +24 -0
- package/src/brand-page/utils/content-callback-util.ts +5 -0
- package/src/brand-page/utils/view-model.util.test.ts +102 -0
- package/src/brand-page/utils/view-model.util.ts +43 -0
- package/src/brand-page/view-models.ts +10 -1
- package/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.ts +9 -0
- package/src/brand-page-maker/assessors/index.ts +1 -0
- package/src/brand-page-maker/components/brandpage-settings/BrandPageSettings.test.ts +323 -0
- package/src/brand-page-maker/components/brandpage-settings/BrandPageSettings.vue +3 -3
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.test.ts +165 -0
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +11 -4
- package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +23 -3
- package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +5 -0
- package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +2 -0
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +48 -12
- package/src/brand-page-maker/constants/config-settings-constant.ts +107 -1
- package/src/brand-page-maker/constants/faq-section-config.test.ts +108 -0
- package/src/brand-page-maker/convertors/faq-display-style.convertor.ts +61 -0
- package/src/brand-page-maker/convertors/i18n/converter.de-DE.json +23 -23
- package/src/brand-page-maker/convertors/i18n/converter.es-ES.json +23 -23
- package/src/brand-page-maker/convertors/i18n/converter.fr-CA.json +23 -23
- package/src/brand-page-maker/convertors/i18n/converter.fr-FR.json +23 -23
- package/src/brand-page-maker/convertors/i18n/converter.pt-BR.json +23 -23
- package/src/brand-page-maker/convertors/i18n/converter.pt-PT.json +23 -23
- package/src/brand-page-maker/models/content-settings-configs.ts +1 -0
- package/src/brand-page-maker/models/content-settings.ts +59 -0
- package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.save.test.ts +332 -1
- package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +83 -5
- package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +3820 -300
- package/src/brand-page-maker/utils/apply-color-strategy.test.ts +123 -2
- package/src/brand-page-maker/utils/apply-color-strategy.ts +73 -19
- package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +110 -0
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +66 -0
- package/src/brand-page-maker/validators/field.validator.ts +2 -0
- package/src/bundles/bundled-translations.de-DE.json +13 -5
- package/src/bundles/bundled-translations.es-ES.json +14 -6
- package/src/bundles/bundled-translations.fr-CA.json +14 -6
- package/src/bundles/bundled-translations.fr-FR.json +14 -6
- package/src/bundles/bundled-translations.json +9 -1
- package/src/bundles/bundled-translations.pt-BR.json +13 -5
- package/src/bundles/bundled-translations.pt-PT.json +13 -5
- package/src/composables/useTranslate.ts +2 -1
- package/src/metadata-builder/builders/item-id-utils.test.ts +24 -0
- package/src/metadata-builder/parsers/section-tool-arguments.ts +2 -1
- package/src/shared/color-picker/components/i18n/color-picker.de-DE.json +12 -11
- package/src/shared/color-picker/components/i18n/color-picker.es-ES.json +12 -11
- package/src/shared/color-picker/components/i18n/color-picker.fr-CA.json +12 -11
- package/src/shared/color-picker/components/i18n/color-picker.fr-FR.json +12 -11
- package/src/shared/color-picker/components/i18n/color-picker.pt-BR.json +12 -11
- package/src/shared/color-picker/components/i18n/color-picker.pt-PT.json +12 -11
- package/src/shared/color-strategies/color-strategies.ts +4 -0
- package/src/shared/color-strategies/rte-field-pairs.test.ts +2 -0
- package/src/shared/color-strategies/rte-field-pairs.ts +23 -0
- package/src/shared/content-settings/components/color-field/ColorField.test.ts +29 -0
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +10 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +10 -1
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +2 -0
- package/src/shared/content-settings/components/faq-items-field/FaqItemsField.test.ts +357 -0
- package/src/shared/content-settings/components/faq-items-field/FaqItemsField.vue +274 -0
- package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +1 -0
- package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +8 -0
- package/src/shared/content-settings/components/items-field/ItemsField.test.ts +117 -0
- package/src/shared/content-settings/components/items-field/ItemsField.vue +9 -3
- package/src/shared/content-settings/components/textarea-field/TextareaField.mixin.ts +6 -0
- package/src/shared/content-settings/components/textarea-field/TextareaField.vue +1 -0
- package/src/shared/content-settings/models.ts +7 -0
- package/src/shared/content-settings/store/content-settings-store.test.ts +49 -0
- package/src/shared/content-settings/store/content-settings-store.ts +28 -0
- package/src/utils/minify-brand-page-metadata.test.ts +35 -0
|
@@ -77,6 +77,14 @@ export declare const IMAGE_RESOLUTION_PRESETS: {
|
|
|
77
77
|
readonly ULTRA_HD: "q=80&w=2160";
|
|
78
78
|
};
|
|
79
79
|
export type ImagesSectionContentDisplayStyle = (typeof IMAGES_SECTION_CONTENT_DISPLAY_STYLES)[number];
|
|
80
|
+
/** Centered and split are accordions; grid shows every answer. */
|
|
81
|
+
export declare const FAQ_DISPLAY_STYLES: Readonly<{
|
|
82
|
+
readonly centered: "faq-centered";
|
|
83
|
+
readonly split: "faq-split";
|
|
84
|
+
readonly grid: "faq-grid";
|
|
85
|
+
}>;
|
|
86
|
+
export type FaqDisplayStyle = (typeof FAQ_DISPLAY_STYLES)[keyof typeof FAQ_DISPLAY_STYLES];
|
|
87
|
+
export declare const FAQ_MAX_ITEMS = 6;
|
|
80
88
|
export declare const HEADER_CSRF_TOKEN = "csrf-token";
|
|
81
89
|
export declare const STYLE_THEME_KEYS: Readonly<{
|
|
82
90
|
LogoTextColor: "logo-text-color";
|
|
@@ -103,6 +103,13 @@ export const IMAGE_RESOLUTION_PRESETS = {
|
|
|
103
103
|
FULL_HD: 'q=80&w=1080',
|
|
104
104
|
ULTRA_HD: 'q=80&w=2160',
|
|
105
105
|
};
|
|
106
|
+
/** Centered and split are accordions; grid shows every answer. */
|
|
107
|
+
export const FAQ_DISPLAY_STYLES = Object.freeze({
|
|
108
|
+
centered: 'faq-centered',
|
|
109
|
+
split: 'faq-split',
|
|
110
|
+
grid: 'faq-grid',
|
|
111
|
+
});
|
|
112
|
+
export const FAQ_MAX_ITEMS = 6;
|
|
106
113
|
export const HEADER_CSRF_TOKEN = 'csrf-token';
|
|
107
114
|
export const STYLE_THEME_KEYS = Object.freeze({
|
|
108
115
|
LogoTextColor: 'logo-text-color',
|
|
@@ -33,5 +33,7 @@ export declare const CONTENT_TEXT_STYLE_PROPERTY_KEYS: {
|
|
|
33
33
|
readonly buttonTextStyle: "buttonTextStyle";
|
|
34
34
|
readonly copyrightStyle: "copyrightStyle";
|
|
35
35
|
readonly successMessageStyle: "successMessageStyle";
|
|
36
|
+
readonly questionStyle: "questionStyle";
|
|
37
|
+
readonly answerStyle: "answerStyle";
|
|
36
38
|
};
|
|
37
39
|
export type ContentTextStylePropertyKey = keyof typeof CONTENT_TEXT_STYLE_PROPERTY_KEYS;
|
|
@@ -31,6 +31,7 @@ export declare const CONTENT_TYPES: {
|
|
|
31
31
|
readonly 'shapes-section': "shapes-section";
|
|
32
32
|
readonly 'shop-section': "shop-section";
|
|
33
33
|
readonly 'booking-section': "booking-section";
|
|
34
|
+
readonly 'faq-section': "faq-section";
|
|
34
35
|
};
|
|
35
36
|
export type ContentType = keyof typeof CONTENT_TYPES;
|
|
36
37
|
export declare const PERSONALISATION_ROLES: {
|
|
@@ -478,6 +478,28 @@ export interface BookingSectionContent extends Content {
|
|
|
478
478
|
buttonLinkType: ButtonLinkType;
|
|
479
479
|
buttonTextStyle: TextStyleDeclaration;
|
|
480
480
|
}
|
|
481
|
+
export interface FaqItem {
|
|
482
|
+
/** Stable per-item identifier. See ImageItem.id. */
|
|
483
|
+
id: string;
|
|
484
|
+
question: RichTextValue;
|
|
485
|
+
questionStyle: TextStyleDeclaration;
|
|
486
|
+
answer: RichTextValue;
|
|
487
|
+
answerStyle: TextStyleDeclaration;
|
|
488
|
+
}
|
|
489
|
+
export interface FaqSectionContent extends Content {
|
|
490
|
+
type: 'faq-section';
|
|
491
|
+
title: RichTextValue;
|
|
492
|
+
description: RichTextValue;
|
|
493
|
+
displayStyle: string;
|
|
494
|
+
items: FaqItem[];
|
|
495
|
+
titleStyle: TextStyleDeclaration;
|
|
496
|
+
descriptionStyle: TextStyleDeclaration;
|
|
497
|
+
backgroundStyle: BrandPageCssStyle;
|
|
498
|
+
/** `{ color }` for the +/- toggle. */
|
|
499
|
+
iconColor: BrandPageCssStyle;
|
|
500
|
+
/** `{ backgroundColor }`, the Divider section's shape. `'transparent'` hides the line. */
|
|
501
|
+
dividerColor: BrandPageCssStyle;
|
|
502
|
+
}
|
|
481
503
|
export declare class PageModel {
|
|
482
504
|
title: string;
|
|
483
505
|
contents: Content[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProfileContent, TextContent, ContactFormContent, ImageContent, BannerSectionContent, SocialLinksContent, ImageGalleryContent, TestimonialSectionContent, AboutSectionContent, ImagesSectionContent, MailingListContent, SupportMeContent, RequestPaymentContent, ShapesSectionContent, ShopContent, ButtonContent, PageModel, BookingSectionContent } from '../models';
|
|
1
|
+
import type { ProfileContent, TextContent, ContactFormContent, ImageContent, BannerSectionContent, SocialLinksContent, ImageGalleryContent, TestimonialSectionContent, AboutSectionContent, ImagesSectionContent, MailingListContent, SupportMeContent, RequestPaymentContent, ShapesSectionContent, ShopContent, ButtonContent, PageModel, BookingSectionContent, FaqSectionContent } from '../models';
|
|
2
2
|
export type ContentCallback = {
|
|
3
3
|
profileContentCallback: (content: ProfileContent) => void;
|
|
4
4
|
textContentCallback: (content: TextContent) => void;
|
|
@@ -17,5 +17,6 @@ export type ContentCallback = {
|
|
|
17
17
|
shopSectionContentCallback: (content: ShopContent) => void;
|
|
18
18
|
buttonContentCallback: (content: ButtonContent) => void;
|
|
19
19
|
bookingSectionContentCallback: (content: BookingSectionContent) => void;
|
|
20
|
+
faqSectionContentCallback: (content: FaqSectionContent) => void;
|
|
20
21
|
};
|
|
21
22
|
export declare const forEachPageCallContentCallback: (page: PageModel, callbacks: ContentCallback) => void;
|
|
@@ -49,6 +49,9 @@ export const forEachPageCallContentCallback = (page, callbacks) => {
|
|
|
49
49
|
case 'booking-section':
|
|
50
50
|
callbacks.bookingSectionContentCallback(content);
|
|
51
51
|
break;
|
|
52
|
+
case 'faq-section':
|
|
53
|
+
callbacks.faqSectionContentCallback(content);
|
|
54
|
+
break;
|
|
52
55
|
case 'general-link':
|
|
53
56
|
case 'website':
|
|
54
57
|
case 'email':
|
|
@@ -611,6 +611,26 @@ const mapToTestimonialSectionViewModel = (content, styles) => {
|
|
|
611
611
|
isFullWidth: true,
|
|
612
612
|
}, styles);
|
|
613
613
|
};
|
|
614
|
+
// An item's question/answer styles are CONTENT_TEXT_STYLE_PROPERTY_KEYS, so the section
|
|
615
|
+
// resolver handles them when handed the item.
|
|
616
|
+
const mapFaqItem = (item, styles) => applyViewModelTextStyles({
|
|
617
|
+
...item,
|
|
618
|
+
questionStyle: { ...item.questionStyle },
|
|
619
|
+
answerStyle: { ...item.answerStyle },
|
|
620
|
+
}, styles);
|
|
621
|
+
const mapToFaqSectionViewModel = (content, styles, brandPageType) => {
|
|
622
|
+
return applyViewModelTextStyles({
|
|
623
|
+
...content,
|
|
624
|
+
role: content.type,
|
|
625
|
+
type: 'faq-section',
|
|
626
|
+
// No `color` pre-seed, as in the testimonial mapper: it would read as an override.
|
|
627
|
+
titleStyle: { ...content.titleStyle },
|
|
628
|
+
descriptionStyle: { ...content.descriptionStyle },
|
|
629
|
+
items: (content.items ?? []).map((item) => mapFaqItem(item, styles)),
|
|
630
|
+
isFullWidth: true,
|
|
631
|
+
isStacked: brandPageType !== BRAND_PAGE_TYPES.brandSite,
|
|
632
|
+
}, styles);
|
|
633
|
+
};
|
|
614
634
|
const mapToSocialLinksViewModel = (content, styles, brandPageType) => {
|
|
615
635
|
return applyViewModelTextStyles({
|
|
616
636
|
...content,
|
|
@@ -872,6 +892,8 @@ export const mapToViewModel = (styles, brandPageType, options) => (content) => {
|
|
|
872
892
|
return mapToBannerSectionViewModel(content, styles, options);
|
|
873
893
|
case 'booking-section':
|
|
874
894
|
return mapToBookingSectionViewModel(content, styles);
|
|
895
|
+
case 'faq-section':
|
|
896
|
+
return mapToFaqSectionViewModel(content, styles, brandPageType);
|
|
875
897
|
case 'about-section':
|
|
876
898
|
return mapToAboutSectionViewModel(content, styles);
|
|
877
899
|
case 'images-section':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ButtonWithModalContent, ProfileContent, TextContent, VideoContent, ImageContent, ContentType, ButtonStyles, LogoStyles, MapContent, ImageGalleryContent, GalleryStyles, MailingListContent, RequestPaymentContent, ShopContent, SupportMeContent, ContactFormContent, BannerSectionContent, BrandPageType, SocialLinksContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ButtonLinkType, PageHeaderMobile, PageHeaderDesktop, PageFooterMobile, PageFooterDesktop, TextMediaItem, TextShapeItem, TextStyleDeclaration, AspectRatio, LogoImageModel, LogoTemplateImageModel, CookieOptions, BookingSectionContent, MediaTypes, TextStyles, BackgroundStyle, BackgroundShape, PersonalisationRole, SaveContactOptions, ColorItem, RichTextValue } from './models';
|
|
1
|
+
import type { ButtonWithModalContent, ProfileContent, TextContent, VideoContent, ImageContent, ContentType, ButtonStyles, LogoStyles, MapContent, ImageGalleryContent, GalleryStyles, MailingListContent, RequestPaymentContent, ShopContent, SupportMeContent, ContactFormContent, BannerSectionContent, BrandPageType, SocialLinksContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ButtonLinkType, PageHeaderMobile, PageHeaderDesktop, PageFooterMobile, PageFooterDesktop, TextMediaItem, TextShapeItem, TextStyleDeclaration, AspectRatio, LogoImageModel, LogoTemplateImageModel, CookieOptions, BookingSectionContent, FaqSectionContent, MediaTypes, TextStyles, BackgroundStyle, BackgroundShape, PersonalisationRole, SaveContactOptions, ColorItem, RichTextValue } from './models';
|
|
2
2
|
import type { ImagesSectionContentDisplayStyle } from './constants';
|
|
3
|
-
export type ViewModelType = 'button' | 'image' | 'image-gallery' | 'logo' | 'map' | 'mailing-list' | 'profile' | 'support-me' | 'request-payment' | 'text' | 'video' | 'contact-form' | 'banner-section' | 'images-section' | 'about-section' | 'divider-section' | 'testimonial-section' | 'social-links' | 'shapes-section' | 'shop-section' | 'booking-section';
|
|
3
|
+
export type ViewModelType = 'button' | 'image' | 'image-gallery' | 'logo' | 'map' | 'mailing-list' | 'profile' | 'support-me' | 'request-payment' | 'text' | 'video' | 'contact-form' | 'banner-section' | 'images-section' | 'about-section' | 'divider-section' | 'testimonial-section' | 'social-links' | 'shapes-section' | 'shop-section' | 'booking-section' | 'faq-section';
|
|
4
4
|
export interface ContentViewModel {
|
|
5
5
|
id: string;
|
|
6
6
|
type: ViewModelType;
|
|
@@ -132,6 +132,11 @@ export interface BookingSectionViewModel extends ContentViewModel, Omit<BookingS
|
|
|
132
132
|
buttonViewModel: ButtonViewModel;
|
|
133
133
|
isFullWidth: boolean;
|
|
134
134
|
}
|
|
135
|
+
export interface FaqSectionViewModel extends ContentViewModel, Omit<FaqSectionContent, 'type'> {
|
|
136
|
+
isFullWidth: boolean;
|
|
137
|
+
/** brand.page / brand.contact: split and grid always use their stacked layout. */
|
|
138
|
+
isStacked: boolean;
|
|
139
|
+
}
|
|
135
140
|
export interface PageHeaderViewModel extends Omit<PageHeaderDesktop | PageHeaderMobile, 'logoImage' | 'logoImageStyle' | 'isLogoOptional' | 'viewport' | 'isLogoVisible' | 'logoTemplateImage' | 'logoImageHeight' | 'logoImageWidth' | 'headerButton' | 'backgroundStyle'> {
|
|
136
141
|
logo: LogoViewModel;
|
|
137
142
|
pages: PageViewModel[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FAQ_DISPLAY_STYLES } from '@brand-page/constants';
|
|
2
|
+
// Icon and divider colours paint the accordion toggle and its item dividers;
|
|
3
|
+
// grid shows neither, so the fields have nothing to colour there.
|
|
4
|
+
export const faqAccordionColorFieldVisibilityAssessor = (content) => content?.displayStyle !== FAQ_DISPLAY_STYLES.grid;
|
|
@@ -8,6 +8,7 @@ export * from './media-section-items-field.assessor';
|
|
|
8
8
|
export * from './shape-section-items-field.assessor';
|
|
9
9
|
export * from './shape-size-visibility.assessor';
|
|
10
10
|
export * from './divider-toggle-field-visibility.assessor';
|
|
11
|
+
export * from './faq-accordion-color-field-visibility.assessor';
|
|
11
12
|
export * from './color-replacement-visibility.assessor';
|
|
12
13
|
export * from './color-replacement-profile-visibility.assessor';
|
|
13
14
|
export * from './color-replacement-icon-visibility.assessor';
|
|
@@ -8,6 +8,7 @@ export * from './media-section-items-field.assessor';
|
|
|
8
8
|
export * from './shape-section-items-field.assessor';
|
|
9
9
|
export * from './shape-size-visibility.assessor';
|
|
10
10
|
export * from './divider-toggle-field-visibility.assessor';
|
|
11
|
+
export * from './faq-accordion-color-field-visibility.assessor';
|
|
11
12
|
export * from './color-replacement-visibility.assessor';
|
|
12
13
|
export * from './color-replacement-profile-visibility.assessor';
|
|
13
14
|
export * from './color-replacement-icon-visibility.assessor';
|
|
@@ -552,13 +552,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
552
552
|
startBrandPageSlugEditMode(): void;
|
|
553
553
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
554
554
|
unpublishBrandPage(): Promise<void>;
|
|
555
|
-
updateBrandPageSettings(
|
|
556
|
-
description:
|
|
557
|
-
title:
|
|
555
|
+
updateBrandPageSettings(payload: {
|
|
556
|
+
description: string;
|
|
557
|
+
title: string;
|
|
558
558
|
}): Promise<void>;
|
|
559
|
-
updateSensitiveContent(
|
|
560
|
-
sensitiveContent:
|
|
559
|
+
updateSensitiveContent(payload: {
|
|
560
|
+
sensitiveContent: import("@brand-page").SensitiveContent;
|
|
561
561
|
}): Promise<void>;
|
|
562
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
562
563
|
createBrandPageCustomDomain({ domainName }: {
|
|
563
564
|
domainName: any;
|
|
564
565
|
}): Promise<false | undefined>;
|
|
@@ -950,6 +951,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
950
951
|
}): void;
|
|
951
952
|
updateTextItemTextStyleType({ id, name, value, index, isHydrationWrite, }: import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
|
|
952
953
|
updateTextItemTextStyleTypeWithStyles({ id, name, value, index, isHydrationWrite, }: import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
|
|
954
|
+
updateListItemTextStyles({ id, name, value, target, isHydrationWrite, }: Omit<import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>, "index"> & {
|
|
955
|
+
target: import("../../../shared/content-settings/models").RteItemStyleTarget;
|
|
956
|
+
}): void;
|
|
953
957
|
_setActiveCategoryTab({ activeCategoryTab, }: {
|
|
954
958
|
activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
|
|
955
959
|
}): void;
|
package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts
CHANGED
|
@@ -413,6 +413,9 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
413
413
|
}): void;
|
|
414
414
|
updateTextItemTextStyleType({ id, name, value, index, isHydrationWrite, }: import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
|
|
415
415
|
updateTextItemTextStyleTypeWithStyles({ id, name, value, index, isHydrationWrite, }: import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
|
|
416
|
+
updateListItemTextStyles({ id, name, value, target, isHydrationWrite, }: Omit<import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>, "index"> & {
|
|
417
|
+
target: import("@shared/content-settings/models").RteItemStyleTarget;
|
|
418
|
+
}): void;
|
|
416
419
|
_setActiveCategoryTab({ activeCategoryTab, }: {
|
|
417
420
|
activeCategoryTab: import("../../models").ItemCategory;
|
|
418
421
|
}): void;
|
|
@@ -966,13 +969,14 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
966
969
|
startBrandPageSlugEditMode(): void;
|
|
967
970
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
968
971
|
unpublishBrandPage(): Promise<void>;
|
|
969
|
-
updateBrandPageSettings(
|
|
970
|
-
description:
|
|
971
|
-
title:
|
|
972
|
+
updateBrandPageSettings(payload: {
|
|
973
|
+
description: string;
|
|
974
|
+
title: string;
|
|
972
975
|
}): Promise<void>;
|
|
973
|
-
updateSensitiveContent(
|
|
974
|
-
sensitiveContent:
|
|
976
|
+
updateSensitiveContent(payload: {
|
|
977
|
+
sensitiveContent: import("@brand-page").SensitiveContent;
|
|
975
978
|
}): Promise<void>;
|
|
979
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
976
980
|
createBrandPageCustomDomain({ domainName }: {
|
|
977
981
|
domainName: any;
|
|
978
982
|
}): Promise<false | undefined>;
|
|
@@ -338,13 +338,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
338
338
|
startBrandPageSlugEditMode(): void;
|
|
339
339
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
340
340
|
unpublishBrandPage(): Promise<void>;
|
|
341
|
-
updateBrandPageSettings(
|
|
342
|
-
description:
|
|
343
|
-
title:
|
|
341
|
+
updateBrandPageSettings(payload: {
|
|
342
|
+
description: string;
|
|
343
|
+
title: string;
|
|
344
344
|
}): Promise<void>;
|
|
345
|
-
updateSensitiveContent(
|
|
346
|
-
sensitiveContent:
|
|
345
|
+
updateSensitiveContent(payload: {
|
|
346
|
+
sensitiveContent: import("../../../brand-page").SensitiveContent;
|
|
347
347
|
}): Promise<void>;
|
|
348
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
348
349
|
createBrandPageCustomDomain({ domainName }: {
|
|
349
350
|
domainName: any;
|
|
350
351
|
}): Promise<false | undefined>;
|
|
@@ -354,13 +354,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
354
354
|
startBrandPageSlugEditMode(): void;
|
|
355
355
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
356
356
|
unpublishBrandPage(): Promise<void>;
|
|
357
|
-
updateBrandPageSettings(
|
|
358
|
-
description:
|
|
359
|
-
title:
|
|
357
|
+
updateBrandPageSettings(payload: {
|
|
358
|
+
description: string;
|
|
359
|
+
title: string;
|
|
360
360
|
}): Promise<void>;
|
|
361
|
-
updateSensitiveContent(
|
|
362
|
-
sensitiveContent:
|
|
361
|
+
updateSensitiveContent(payload: {
|
|
362
|
+
sensitiveContent: import("../../../brand-page").SensitiveContent;
|
|
363
363
|
}): Promise<void>;
|
|
364
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
364
365
|
createBrandPageCustomDomain({ domainName }: {
|
|
365
366
|
domainName: any;
|
|
366
367
|
}): Promise<false | undefined>;
|
|
@@ -542,6 +543,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
542
543
|
descriptionError(): any;
|
|
543
544
|
metaKeywordsError(): any;
|
|
544
545
|
isPublishing(): any;
|
|
546
|
+
isSaving(): boolean;
|
|
545
547
|
isUpdateButtonEnabled(): any;
|
|
546
548
|
isDirty(): boolean;
|
|
547
549
|
}, {
|
|
@@ -89,11 +89,16 @@ export default defineComponent({
|
|
|
89
89
|
isPublishing() {
|
|
90
90
|
return this.brandPageContainerStore.isPublishing;
|
|
91
91
|
},
|
|
92
|
+
// Scoped to isMaker: the Manage page's save must never gate on the maker's own in-flight state.
|
|
93
|
+
isSaving() {
|
|
94
|
+
return this.isMaker && this.brandPageContainerStore.isSaving;
|
|
95
|
+
},
|
|
92
96
|
isUpdateButtonEnabled() {
|
|
93
97
|
return ((this.myPageDescription?.length ?? 0) <=
|
|
94
98
|
BRANDPAGE_DESCRIPTION_CHARACTER_LIMIT &&
|
|
95
99
|
(this.myPageTitle?.length ?? 0) <= BRANDPAGE_TITLE_CHARACTER_LIMIT &&
|
|
96
100
|
!this.brandPageContainerStore.isPublishing &&
|
|
101
|
+
!this.isSaving &&
|
|
97
102
|
this.isDirty &&
|
|
98
103
|
this.isInternalDescriptionValid &&
|
|
99
104
|
this.isInternalTitleValid);
|
|
@@ -359,13 +359,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
359
359
|
startBrandPageSlugEditMode(): void;
|
|
360
360
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
361
361
|
unpublishBrandPage(): Promise<void>;
|
|
362
|
-
updateBrandPageSettings(
|
|
363
|
-
description:
|
|
364
|
-
title:
|
|
362
|
+
updateBrandPageSettings(payload: {
|
|
363
|
+
description: string;
|
|
364
|
+
title: string;
|
|
365
365
|
}): Promise<void>;
|
|
366
|
-
updateSensitiveContent(
|
|
367
|
-
sensitiveContent:
|
|
366
|
+
updateSensitiveContent(payload: {
|
|
367
|
+
sensitiveContent: import("../../../brand-page").SensitiveContent;
|
|
368
368
|
}): Promise<void>;
|
|
369
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
369
370
|
createBrandPageCustomDomain({ domainName }: {
|
|
370
371
|
domainName: any;
|
|
371
372
|
}): Promise<false | undefined>;
|
|
@@ -340,13 +340,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
340
340
|
startBrandPageSlugEditMode(): void;
|
|
341
341
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
342
342
|
unpublishBrandPage(): Promise<void>;
|
|
343
|
-
updateBrandPageSettings(
|
|
344
|
-
description:
|
|
345
|
-
title:
|
|
343
|
+
updateBrandPageSettings(payload: {
|
|
344
|
+
description: string;
|
|
345
|
+
title: string;
|
|
346
346
|
}): Promise<void>;
|
|
347
|
-
updateSensitiveContent(
|
|
348
|
-
sensitiveContent:
|
|
347
|
+
updateSensitiveContent(payload: {
|
|
348
|
+
sensitiveContent: import("../../../brand-page").SensitiveContent;
|
|
349
349
|
}): Promise<void>;
|
|
350
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
350
351
|
createBrandPageCustomDomain({ domainName }: {
|
|
351
352
|
domainName: any;
|
|
352
353
|
}): Promise<false | undefined>;
|
|
@@ -408,13 +408,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
408
408
|
startBrandPageSlugEditMode(): void;
|
|
409
409
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
410
410
|
unpublishBrandPage(): Promise<void>;
|
|
411
|
-
updateBrandPageSettings(
|
|
412
|
-
description:
|
|
413
|
-
title:
|
|
411
|
+
updateBrandPageSettings(payload: {
|
|
412
|
+
description: string;
|
|
413
|
+
title: string;
|
|
414
414
|
}): Promise<void>;
|
|
415
|
-
updateSensitiveContent(
|
|
416
|
-
sensitiveContent:
|
|
415
|
+
updateSensitiveContent(payload: {
|
|
416
|
+
sensitiveContent: import("@brand-page").SensitiveContent;
|
|
417
417
|
}): Promise<void>;
|
|
418
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
418
419
|
createBrandPageCustomDomain({ domainName }: {
|
|
419
420
|
domainName: any;
|
|
420
421
|
}): Promise<false | undefined>;
|
|
@@ -335,13 +335,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
335
335
|
startBrandPageSlugEditMode(): void;
|
|
336
336
|
triggerLockedContentClickedEvent(contentType: string): Promise<void>;
|
|
337
337
|
unpublishBrandPage(): Promise<void>;
|
|
338
|
-
updateBrandPageSettings(
|
|
339
|
-
description:
|
|
340
|
-
title:
|
|
338
|
+
updateBrandPageSettings(payload: {
|
|
339
|
+
description: string;
|
|
340
|
+
title: string;
|
|
341
341
|
}): Promise<void>;
|
|
342
|
-
updateSensitiveContent(
|
|
343
|
-
sensitiveContent:
|
|
342
|
+
updateSensitiveContent(payload: {
|
|
343
|
+
sensitiveContent: import("../../../brand-page").SensitiveContent;
|
|
344
344
|
}): Promise<void>;
|
|
345
|
+
saveSiteBeforeFirstSettingsWrite(): Promise<boolean>;
|
|
345
346
|
createBrandPageCustomDomain({ domainName }: {
|
|
346
347
|
domainName: any;
|
|
347
348
|
}): Promise<false | undefined>;
|
|
@@ -4,6 +4,8 @@ import type { StyleTextFontFamilyOption } from '@shared/style-settings/models';
|
|
|
4
4
|
import type { HyperlinkType, TextStyleOption } from '@brand-page';
|
|
5
5
|
import { type TextItem, type TextStyleDeclaration } from '@brand-page';
|
|
6
6
|
import type { ButtonGroupOption } from '@brand-page-maker/models/button-group.model';
|
|
7
|
+
import { useUiContentSettingsStore } from '@shared/content-settings/store';
|
|
8
|
+
import type { RteItemStyleTarget } from '@shared/content-settings/models';
|
|
7
9
|
interface UseRichTextEditorReturn {
|
|
8
10
|
editor: Editor;
|
|
9
11
|
onFocus: () => void;
|
|
@@ -55,6 +57,16 @@ interface EditorOptionType {
|
|
|
55
57
|
export declare const useExternalRichTextEditor: () => {
|
|
56
58
|
externalEditor: Editor;
|
|
57
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Saves a field's style. An editor bound to a list item (`itemStyleTarget`) saves to that
|
|
62
|
+
* item's own style instead of the section's `${name}Style`.
|
|
63
|
+
*/
|
|
64
|
+
export declare const updateFieldTextStyles: (store: ReturnType<typeof useUiContentSettingsStore>, itemStyleTarget: RteItemStyleTarget | undefined, payload: {
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
value: TextStyleDeclaration;
|
|
68
|
+
isHydrationWrite?: boolean;
|
|
69
|
+
}) => void;
|
|
58
70
|
export declare const useRichTextEditor: (model: ModelRef<any>, props: {
|
|
59
71
|
id: string;
|
|
60
72
|
name: string;
|
|
@@ -66,6 +78,7 @@ export declare const useRichTextEditor: (model: ModelRef<any>, props: {
|
|
|
66
78
|
textItemIndex: number;
|
|
67
79
|
item: TextItem;
|
|
68
80
|
contentType: string;
|
|
81
|
+
itemStyleTarget?: RteItemStyleTarget;
|
|
69
82
|
}, emit: (event: "focus" | "blur" | "update:modelValue", ...args: any[]) => void, fontSettings: {
|
|
70
83
|
selectedTextStyle: string;
|
|
71
84
|
selectedFont: string;
|