@designcrowd/library.brand-page 6.2.6 → 6.2.7-ast-faq-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DpeSEnwP.js → CreatedOnBrandCrowd-de-de-7BhvVOyG.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-CxYv3NzT.js → CreatedOnBrandCrowd-en-us-DhKWkmpT.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CzQ1HRHw.js → CreatedOnBrandCrowd-es-es-B8vcPgJ5.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-J77YZaT1.js → CreatedOnBrandCrowd-fr-ca-DJywro34.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-J77YZaT1.js → CreatedOnBrandCrowd-fr-fr-DJywro34.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-1vh4Smqt.js → CreatedOnBrandCrowd-pt-br-8Fe-EYbW.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-1vh4Smqt.js → CreatedOnBrandCrowd-pt-pt-8Fe-EYbW.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CXX6W_29.js → CreatedOnDcom-de-de-CgIFS1rD.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-D78BmX6f.js → CreatedOnDcom-en-us-xfxOfOmI.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-FfbPM2vD.js → CreatedOnDcom-es-es-NUDILwyj.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-C6L60rxJ.js → CreatedOnDcom-fr-ca-DIC9p-8J.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-BEDnW9w-.js → CreatedOnDcom-fr-fr-CIAM16GN.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-CZXVvc1n.js → CreatedOnDcom-pt-br-CbVwaB2_.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-IQq744nb.js → CreatedOnDcom-pt-pt-ZrwJAVB-.js} +1 -1
  15. package/lib/src/brand-page/constants/misc.constants.d.ts +8 -0
  16. package/lib/src/brand-page/constants/misc.constants.js +7 -0
  17. package/lib/src/brand-page/constants/styles.constants.d.ts +2 -0
  18. package/lib/src/brand-page/constants/styles.constants.js +2 -0
  19. package/lib/src/brand-page/models/content.model.d.ts +1 -0
  20. package/lib/src/brand-page/models/content.model.js +1 -0
  21. package/lib/src/brand-page/models/index.d.ts +22 -0
  22. package/lib/src/brand-page/utils/content-callback-util.d.ts +2 -1
  23. package/lib/src/brand-page/utils/content-callback-util.js +3 -0
  24. package/lib/src/brand-page/utils/view-model.util.d.ts +2 -0
  25. package/lib/src/brand-page/utils/view-model.util.js +23 -0
  26. package/lib/src/brand-page/view-models.d.ts +9 -2
  27. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +10 -0
  28. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +10 -0
  29. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +13 -0
  30. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +33 -12
  31. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +2 -1
  32. package/lib/src/brand-page-maker/constants/config-settings-constant.js +100 -3
  33. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.d.ts +3 -0
  34. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.js +47 -0
  35. package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -0
  36. package/lib/src/brand-page-maker/models/content-settings-configs.js +1 -0
  37. package/lib/src/brand-page-maker/models/content-settings.d.ts +4 -1
  38. package/lib/src/brand-page-maker/models/content-settings.js +47 -1
  39. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +1 -0
  40. package/lib/src/brand-page-maker/utils/apply-color-strategy.js +45 -17
  41. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +6 -0
  42. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +24 -1
  43. package/lib/src/brand-page-maker/validators/field.validator.js +2 -0
  44. package/lib/src/bundled-translations-CRdqhLb8.js +179 -0
  45. package/lib/src/bundled-translations.de-DE-D2M0pfDi.js +179 -0
  46. package/lib/src/bundled-translations.es-ES-5kyERvJF.js +179 -0
  47. package/lib/src/bundled-translations.fr-CA-CC4ymJyN.js +179 -0
  48. package/lib/src/bundled-translations.fr-FR-yyt0xgH9.js +179 -0
  49. package/lib/src/bundled-translations.pt-BR-BOSy38EW.js +179 -0
  50. package/lib/src/bundled-translations.pt-PT-DIdAUI2B.js +179 -0
  51. package/lib/src/bundles/bundled-translations.de-DE.json +14 -2
  52. package/lib/src/bundles/bundled-translations.es-ES.json +14 -2
  53. package/lib/src/bundles/bundled-translations.fr-CA.json +14 -2
  54. package/lib/src/bundles/bundled-translations.fr-FR.json +14 -2
  55. package/lib/src/bundles/bundled-translations.json +14 -2
  56. package/lib/src/bundles/bundled-translations.pt-BR.json +14 -2
  57. package/lib/src/bundles/bundled-translations.pt-PT.json +14 -2
  58. package/lib/src/composables/useTranslate.d.ts +1 -1
  59. package/lib/src/composables/useTranslate.js +1 -1
  60. package/lib/src/css/library.brand-page-brandCrowd.min.css +343 -231
  61. package/lib/src/css/library.brand-page-brandPage.min.css +343 -231
  62. package/lib/src/css/library.brand-page-designCom.min.css +343 -231
  63. package/lib/src/css/library.brand-page-preview.min.css +343 -231
  64. package/lib/src/index.mjs +161 -160
  65. package/lib/src/{lib-CyVd3FMn.js → lib-DOlxnnrv.js} +26202 -25472
  66. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +1 -1
  67. package/lib/src/shared/color-strategies/color-strategies.js +4 -0
  68. package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +12 -0
  69. package/lib/src/shared/color-strategies/rte-field-pairs.js +10 -0
  70. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +10 -0
  71. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +11 -1
  72. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +10 -0
  73. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +10 -0
  74. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +10 -0
  75. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +14 -1
  76. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +11 -1
  77. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +12 -0
  78. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.js +5 -0
  79. package/lib/src/shared/content-settings/models.d.ts +6 -0
  80. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +14 -1
  81. package/lib/src/shared/content-settings/store/content-settings-store.js +19 -0
  82. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +10 -0
  83. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +10 -0
  84. package/package.json +4 -3
  85. package/src/brand-page/components/button/ButtonStyleWrapper.vue +4 -2
  86. package/src/brand-page/components/faq-section/FaqSection.test.ts +367 -0
  87. package/src/brand-page/components/faq-section/FaqSection.vue +337 -0
  88. package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +1 -0
  89. package/src/brand-page/components/page/PageComponent.vue +2 -0
  90. package/src/brand-page/components/page-header/HeaderLayout.vue +3 -3
  91. package/src/brand-page/constants/misc.constants.ts +12 -0
  92. package/src/brand-page/constants/styles.constants.ts +2 -0
  93. package/src/brand-page/models/content.model.ts +1 -0
  94. package/src/brand-page/models/index.ts +24 -0
  95. package/src/brand-page/utils/content-callback-util.ts +5 -0
  96. package/src/brand-page/utils/view-model.util.test.ts +112 -0
  97. package/src/brand-page/utils/view-model.util.ts +48 -0
  98. package/src/brand-page/view-models.ts +12 -1
  99. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.test.ts +165 -0
  100. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +13 -5
  101. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +48 -12
  102. package/src/brand-page-maker/constants/config-settings-constant.ts +104 -1
  103. package/src/brand-page-maker/constants/faq-section-config.test.ts +69 -0
  104. package/src/brand-page-maker/convertors/faq-display-style.convertor.ts +59 -0
  105. package/src/brand-page-maker/convertors/i18n/converter.de-DE.json +26 -23
  106. package/src/brand-page-maker/convertors/i18n/converter.es-ES.json +26 -23
  107. package/src/brand-page-maker/convertors/i18n/converter.fr-CA.json +26 -23
  108. package/src/brand-page-maker/convertors/i18n/converter.fr-FR.json +26 -23
  109. package/src/brand-page-maker/convertors/i18n/converter.json +4 -1
  110. package/src/brand-page-maker/convertors/i18n/converter.pt-BR.json +26 -23
  111. package/src/brand-page-maker/convertors/i18n/converter.pt-PT.json +26 -23
  112. package/src/brand-page-maker/models/content-settings-configs.ts +1 -0
  113. package/src/brand-page-maker/models/content-settings.ts +59 -0
  114. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +2 -0
  115. package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +3820 -300
  116. package/src/brand-page-maker/utils/apply-color-strategy.test.ts +123 -2
  117. package/src/brand-page-maker/utils/apply-color-strategy.ts +73 -19
  118. package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +110 -0
  119. package/src/brand-page-maker/utils/rich-text-editor.util.ts +66 -0
  120. package/src/brand-page-maker/validators/field.validator.ts +2 -0
  121. package/src/bundles/bundled-translations.de-DE.json +14 -2
  122. package/src/bundles/bundled-translations.es-ES.json +14 -2
  123. package/src/bundles/bundled-translations.fr-CA.json +14 -2
  124. package/src/bundles/bundled-translations.fr-FR.json +14 -2
  125. package/src/bundles/bundled-translations.json +14 -2
  126. package/src/bundles/bundled-translations.pt-BR.json +14 -2
  127. package/src/bundles/bundled-translations.pt-PT.json +14 -2
  128. package/src/composables/useTranslate.ts +2 -1
  129. package/src/metadata-builder/builders/item-id-utils.test.ts +24 -0
  130. package/src/metadata-builder/parsers/section-tool-arguments.ts +2 -1
  131. package/src/shared/color-strategies/color-strategies.ts +4 -0
  132. package/src/shared/color-strategies/rte-field-pairs.test.ts +2 -0
  133. package/src/shared/color-strategies/rte-field-pairs.ts +23 -0
  134. package/src/shared/content-settings/components/color-field/ColorField.test.ts +29 -0
  135. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +11 -1
  136. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +11 -1
  137. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +11 -1
  138. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +11 -1
  139. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +11 -1
  140. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +11 -1
  141. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +11 -1
  142. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +2 -0
  143. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.test.ts +331 -0
  144. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.vue +276 -0
  145. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +1 -0
  146. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +11 -1
  147. package/src/shared/content-settings/components/items-field/ItemsField.test.ts +106 -0
  148. package/src/shared/content-settings/components/items-field/ItemsField.vue +8 -2
  149. package/src/shared/content-settings/components/textarea-field/TextareaField.mixin.ts +6 -0
  150. package/src/shared/content-settings/components/textarea-field/TextareaField.vue +1 -0
  151. package/src/shared/content-settings/models.ts +7 -0
  152. package/src/shared/content-settings/store/content-settings-store.test.ts +49 -0
  153. package/src/shared/content-settings/store/content-settings-store.ts +37 -0
  154. package/src/utils/minify-brand-page-metadata.test.ts +35 -0
  155. package/lib/src/bundled-translations-BNA5h0Dx.js +0 -179
  156. package/lib/src/bundled-translations.de-DE-fyTHrRxT.js +0 -179
  157. package/lib/src/bundled-translations.es-ES-BMmvJGGC.js +0 -179
  158. package/lib/src/bundled-translations.fr-CA-Bo69L_BP.js +0 -179
  159. package/lib/src/bundled-translations.fr-FR-C4yTVFOW.js +0 -179
  160. package/lib/src/bundled-translations.pt-BR-CPMPfny0.js +0 -179
  161. package/lib/src/bundled-translations.pt-PT-C6ZwYs37.js +0 -179
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CyVd3FMn.js";
2
+ import { _ as t } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-CyVd3FMn.js";
2
+ import { _ as e } from "./lib-DOlxnnrv.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-CyVd3FMn.js";
2
+ import { _ as e } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-CyVd3FMn.js";
2
+ import { _ as e } from "./lib-DOlxnnrv.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-CyVd3FMn.js";
2
+ import { _ as e } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-CyVd3FMn.js";
2
+ import { _ as e } from "./lib-DOlxnnrv.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-CyVd3FMn.js";
2
+ import { _ as M } from "./lib-DOlxnnrv.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-CyVd3FMn.js";
2
+ import { _ as M } from "./lib-DOlxnnrv.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -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;
@@ -35,4 +35,6 @@ export const CONTENT_TEXT_STYLE_PROPERTY_KEYS = {
35
35
  buttonTextStyle: 'buttonTextStyle',
36
36
  copyrightStyle: 'copyrightStyle',
37
37
  successMessageStyle: 'successMessageStyle',
38
+ questionStyle: 'questionStyle',
39
+ answerStyle: 'answerStyle',
38
40
  };
@@ -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: {
@@ -31,6 +31,7 @@ export const CONTENT_TYPES = {
31
31
  'shapes-section': 'shapes-section',
32
32
  'shop-section': 'shop-section',
33
33
  'booking-section': 'booking-section',
34
+ 'faq-section': 'faq-section',
34
35
  };
35
36
  export const PERSONALISATION_ROLES = {
36
37
  profile: 'profile',
@@ -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':
@@ -29,6 +29,8 @@ interface ViewModelMappingOptions {
29
29
  previewImageUrl: string;
30
30
  };
31
31
  setVideoUrlsWithToken?: (token: string, videoUrl: string, previewImageUrl: string, assetId: string) => void;
32
+ /** Maker-only UI state: content id → the item its settings panel has open. Never persisted. */
33
+ activeItemIdByContentId?: Record<string, string | undefined>;
32
34
  }
33
35
  export declare const getBrandPageViewModelFromBrandPageModel: (model: BrandPageModel, brandPageToken: string | undefined, showBrandCrowdLogo: boolean | undefined, options: ViewModelMappingOptions) => BrandPageViewModel;
34
36
  export declare const resolvePageIdsInRteJson: (doc: unknown, nav: NavViewModel, options: ViewModelMappingOptions) => unknown;
@@ -611,6 +611,27 @@ 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, options) => {
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
+ activeItemId: options.activeItemIdByContentId?.[content.id],
633
+ }, styles);
634
+ };
614
635
  const mapToSocialLinksViewModel = (content, styles, brandPageType) => {
615
636
  return applyViewModelTextStyles({
616
637
  ...content,
@@ -872,6 +893,8 @@ export const mapToViewModel = (styles, brandPageType, options) => (content) => {
872
893
  return mapToBannerSectionViewModel(content, styles, options);
873
894
  case 'booking-section':
874
895
  return mapToBookingSectionViewModel(content, styles);
896
+ case 'faq-section':
897
+ return mapToFaqSectionViewModel(content, styles, brandPageType, options);
875
898
  case 'about-section':
876
899
  return mapToAboutSectionViewModel(content, styles);
877
900
  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,13 @@ 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
+ /** Maker-only: the item the settings panel has open, so the canvas shows it. */
140
+ activeItemId?: string;
141
+ }
135
142
  export interface PageHeaderViewModel extends Omit<PageHeaderDesktop | PageHeaderMobile, 'logoImage' | 'logoImageStyle' | 'isLogoOptional' | 'viewport' | 'isLogoVisible' | 'logoTemplateImage' | 'logoImageHeight' | 'logoImageWidth' | 'headerButton' | 'backgroundStyle'> {
136
143
  logo: LogoViewModel;
137
144
  pages: PageViewModel[];
@@ -627,6 +627,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
627
627
  selectedItemValue: string | null;
628
628
  selectedItemIndex: number | null;
629
629
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
630
+ activeItemIdByContentId: Record<string, string | undefined>;
630
631
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => import("@brand-page").Content | undefined;
631
632
  getFieldSettings(state: {
632
633
  addContentOptions: {
@@ -678,6 +679,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
678
679
  selectedItemValue: string | null;
679
680
  selectedItemIndex: number | null;
680
681
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
682
+ activeItemIdByContentId: Record<string, string | undefined>;
681
683
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, fieldName: string) => import("../../../shared/content-settings/models").ContentItemFieldSettings | undefined;
682
684
  getItem(state: {
683
685
  addContentOptions: {
@@ -729,6 +731,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
729
731
  selectedItemValue: string | null;
730
732
  selectedItemIndex: number | null;
731
733
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
734
+ activeItemIdByContentId: Record<string, string | undefined>;
732
735
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => import("../../../shared/content-settings/models").ContentItem<any> | undefined;
733
736
  getValue(state: {
734
737
  addContentOptions: {
@@ -780,6 +783,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
780
783
  selectedItemValue: string | null;
781
784
  selectedItemIndex: number | null;
782
785
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
786
+ activeItemIdByContentId: Record<string, string | undefined>;
783
787
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, fieldName: string) => import("@brand-page").Content | string | undefined;
784
788
  getItemState(state: {
785
789
  addContentOptions: {
@@ -831,6 +835,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
831
835
  selectedItemValue: string | null;
832
836
  selectedItemIndex: number | null;
833
837
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
838
+ activeItemIdByContentId: Record<string, string | undefined>;
834
839
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => import("../../../shared/content-settings/models").ContentSettingsItemState;
835
840
  getItemGroupState(state: {
836
841
  addContentOptions: {
@@ -882,11 +887,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
882
887
  selectedItemValue: string | null;
883
888
  selectedItemIndex: number | null;
884
889
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
890
+ activeItemIdByContentId: Record<string, string | undefined>;
885
891
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, groupId: string) => import("../../../shared/content-settings/models").ContentSettingsItemGroupState;
886
892
  mode(): import("@shared/content-settings/store").ContentSettingsMode;
887
893
  selectedItem(): import("../../../shared/content-settings/models").ContentItem<any> | undefined;
888
894
  selectedItemTemplate(): import("@brand-page-maker/models").ContentSettingsConfig<any> | undefined;
889
895
  }, {
896
+ setActiveItem(contentId: string, itemId: string | undefined): void;
890
897
  onContentChanged(): void;
891
898
  _addItem({ item, index, }: {
892
899
  item: import("../../../shared/content-settings/models").ContentItem<any>;
@@ -950,6 +957,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
950
957
  }): void;
951
958
  updateTextItemTextStyleType({ id, name, value, index, isHydrationWrite, }: import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
952
959
  updateTextItemTextStyleTypeWithStyles({ id, name, value, index, isHydrationWrite, }: import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
960
+ updateListItemTextStyles({ id, name, value, target, isHydrationWrite, }: Omit<import("../../../shared/content-settings/models").UpdateMultipleItemValuesPayload<any>, "index"> & {
961
+ target: import("../../../shared/content-settings/models").RteItemStyleTarget;
962
+ }): void;
953
963
  _setActiveCategoryTab({ activeCategoryTab, }: {
954
964
  activeCategoryTab: import("@brand-page-maker/models").ItemCategory;
955
965
  }): void;
@@ -90,6 +90,7 @@ declare const _default: import("vue").DefineComponent<{}, {
90
90
  selectedItemValue: string | null;
91
91
  selectedItemIndex: number | null;
92
92
  activeCategoryTab: import("../../models").ItemCategory;
93
+ activeItemIdByContentId: Record<string, string | undefined>;
93
94
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => Content | undefined;
94
95
  getFieldSettings(state: {
95
96
  addContentOptions: {
@@ -141,6 +142,7 @@ declare const _default: import("vue").DefineComponent<{}, {
141
142
  selectedItemValue: string | null;
142
143
  selectedItemIndex: number | null;
143
144
  activeCategoryTab: import("../../models").ItemCategory;
145
+ activeItemIdByContentId: Record<string, string | undefined>;
144
146
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, fieldName: string) => import("@shared/content-settings/models").ContentItemFieldSettings | undefined;
145
147
  getItem(state: {
146
148
  addContentOptions: {
@@ -192,6 +194,7 @@ declare const _default: import("vue").DefineComponent<{}, {
192
194
  selectedItemValue: string | null;
193
195
  selectedItemIndex: number | null;
194
196
  activeCategoryTab: import("../../models").ItemCategory;
197
+ activeItemIdByContentId: Record<string, string | undefined>;
195
198
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => ContentItem<any> | undefined;
196
199
  getValue(state: {
197
200
  addContentOptions: {
@@ -243,6 +246,7 @@ declare const _default: import("vue").DefineComponent<{}, {
243
246
  selectedItemValue: string | null;
244
247
  selectedItemIndex: number | null;
245
248
  activeCategoryTab: import("../../models").ItemCategory;
249
+ activeItemIdByContentId: Record<string, string | undefined>;
246
250
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, fieldName: string) => Content | string | undefined;
247
251
  getItemState(state: {
248
252
  addContentOptions: {
@@ -294,6 +298,7 @@ declare const _default: import("vue").DefineComponent<{}, {
294
298
  selectedItemValue: string | null;
295
299
  selectedItemIndex: number | null;
296
300
  activeCategoryTab: import("../../models").ItemCategory;
301
+ activeItemIdByContentId: Record<string, string | undefined>;
297
302
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string) => import("@shared/content-settings/models").ContentSettingsItemState;
298
303
  getItemGroupState(state: {
299
304
  addContentOptions: {
@@ -345,11 +350,13 @@ declare const _default: import("vue").DefineComponent<{}, {
345
350
  selectedItemValue: string | null;
346
351
  selectedItemIndex: number | null;
347
352
  activeCategoryTab: import("../../models").ItemCategory;
353
+ activeItemIdByContentId: Record<string, string | undefined>;
348
354
  } & import("pinia").PiniaCustomStateProperties<import("@shared/content-settings/store").ContentSettingsState>): (id: string, groupId: string) => import("@shared/content-settings/models").ContentSettingsItemGroupState;
349
355
  mode(): import("@shared/content-settings/store").ContentSettingsMode;
350
356
  selectedItem(): ContentItem<any> | undefined;
351
357
  selectedItemTemplate(): import("../../models").ContentSettingsConfig<any> | undefined;
352
358
  }, {
359
+ setActiveItem(contentId: string, itemId: string | undefined): void;
353
360
  onContentChanged(): void;
354
361
  _addItem({ item, index, }: {
355
362
  item: ContentItem<any>;
@@ -413,6 +420,9 @@ declare const _default: import("vue").DefineComponent<{}, {
413
420
  }): void;
414
421
  updateTextItemTextStyleType({ id, name, value, index, isHydrationWrite, }: import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
415
422
  updateTextItemTextStyleTypeWithStyles({ id, name, value, index, isHydrationWrite, }: import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>): void;
423
+ updateListItemTextStyles({ id, name, value, target, isHydrationWrite, }: Omit<import("@shared/content-settings/models").UpdateMultipleItemValuesPayload<any>, "index"> & {
424
+ target: import("@shared/content-settings/models").RteItemStyleTarget;
425
+ }): void;
416
426
  _setActiveCategoryTab({ activeCategoryTab, }: {
417
427
  activeCategoryTab: import("../../models").ItemCategory;
418
428
  }): void;
@@ -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;
@@ -24,6 +24,18 @@ export const useExternalRichTextEditor = () => {
24
24
  externalEditor,
25
25
  };
26
26
  };
27
+ /**
28
+ * Saves a field's style. An editor bound to a list item (`itemStyleTarget`) saves to that
29
+ * item's own style instead of the section's `${name}Style`.
30
+ */
31
+ export const updateFieldTextStyles = (store, itemStyleTarget, payload) => {
32
+ if (itemStyleTarget) {
33
+ store.updateListItemTextStyles({ ...payload, target: itemStyleTarget });
34
+ }
35
+ else {
36
+ store.updateTextStyles(payload);
37
+ }
38
+ };
27
39
  export const useRichTextEditor = (model, props, emit, fontSettings, fontStyleDropdownRef,
28
40
  // One entry of `textStyleOptions`; `undefined` when the selection is "none".
29
41
  selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyleTypeOptions, markedText, isHyperlinkPopupOpen, selectedLinkTypeValue) => {
@@ -204,6 +216,21 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
204
216
  });
205
217
  }
206
218
  });
219
+ // Set while a toolbar command runs. The toolbar has taken focus by then, so
220
+ // `isFocused` alone would tag the command's write as hydration and fold it into
221
+ // the previous undo entry — hidden only when a style write rides along and opens
222
+ // an entry of its own. Synchronous commands only: the spacing sliders dispatch
223
+ // after a debounce and are not covered.
224
+ let isRunningToolbarCommand = false;
225
+ const runAsToolbarCommand = (command) => {
226
+ isRunningToolbarCommand = true;
227
+ try {
228
+ return command();
229
+ }
230
+ finally {
231
+ isRunningToolbarCommand = false;
232
+ }
233
+ };
207
234
  // Update model when editor content changes. RTE content is stored as Tiptap
208
235
  // JSON (BP-5787). getJSON() is already in hand (the editor holds the doc) and
209
236
  // is sanitised natively — no getHTML(), no DOMPurify, no extra editor — so
@@ -217,15 +244,9 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
217
244
  // field → store chain and arms the history merge at the moment of the
218
245
  // store write — arming here at emit time would lapse before the
219
246
  // debounce fires. Genuine edits happen while focused and commit
220
- // normally.
221
- //
222
- // Known limitation: a programmatic toolbar command run on an editor the
223
- // user hasn't focused yet would also merge (losing that undo step). Today
224
- // the RTE only mounts inside an already-open settings drawer and the user
225
- // focuses it before formatting, so this doesn't occur — revisit if a
226
- // consumer ever drives toolbar actions on an unfocused editor.
247
+ // normally, and so do synchronous toolbar commands (isRunningToolbarCommand).
227
248
  emit('update:modelValue', sanitizeRteJson(editor.getJSON()), {
228
- isHydrationWrite: !editor.isFocused,
249
+ isHydrationWrite: !editor.isFocused && !isRunningToolbarCommand,
229
250
  });
230
251
  });
231
252
  editor.on('selectionUpdate', () => {
@@ -303,7 +324,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
303
324
  // write lands ~100ms BEFORE the editor's canonical text write-back, and
304
325
  // an unflagged write here would open a plain capture burst that
305
326
  // swallows the flagged text write into a phantom entry (BP-5810).
306
- contentSettingStore.updateTextStyles({
327
+ updateFieldTextStyles(contentSettingStore, props.itemStyleTarget, {
307
328
  id: props.rawId,
308
329
  name: props.name,
309
330
  value: {
@@ -488,7 +509,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
488
509
  });
489
510
  }
490
511
  else {
491
- contentSettingStore.updateTextStyles({
512
+ updateFieldTextStyles(contentSettingStore, props.itemStyleTarget, {
492
513
  id: props.rawId,
493
514
  name: props.name,
494
515
  value: {
@@ -584,7 +605,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
584
605
  editor,
585
606
  onFocus,
586
607
  onBlur,
587
- triggerEditorStyleChange,
608
+ triggerEditorStyleChange: (editorOption) => runAsToolbarCommand(() => triggerEditorStyleChange(editorOption)),
588
609
  toggleBold,
589
610
  toggleItalic,
590
611
  toggleUnderline,
@@ -601,7 +622,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
601
622
  setInitialStyleSettings,
602
623
  copyGlobalStyleSettings,
603
624
  unsetAllMarks,
604
- handleHyperlink,
625
+ handleHyperlink: (...args) => runAsToolbarCommand(() => handleHyperlink(...args)),
605
626
  hyperlinkValue,
606
627
  setHyperlinkUrlValue,
607
628
  shouldShow,
@@ -1,4 +1,4 @@
1
- import type { LogoContent, FacebookContent, GeneralLinkContent, PhoneContent, EmailContent, ImageContent, InstagramContent, LinkedInContent, PinterestContent, ProfileContent, TextContent, TiktokContent, TwitchContent, XContent, VideoContent, WebsiteContent, YoutubeContent, ContentType, MapContent, ImageGalleryContent, MailingListContent, RequestPaymentContent, SupportMeContent, ContactFormContent, BannerSectionContent, SocialLinksContent, ImagesSectionContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ShopContent, BookingSectionContent } from '@brand-page';
1
+ import type { LogoContent, FacebookContent, GeneralLinkContent, PhoneContent, EmailContent, ImageContent, InstagramContent, LinkedInContent, PinterestContent, ProfileContent, TextContent, TiktokContent, TwitchContent, XContent, VideoContent, WebsiteContent, YoutubeContent, ContentType, MapContent, ImageGalleryContent, MailingListContent, RequestPaymentContent, SupportMeContent, ContactFormContent, BannerSectionContent, SocialLinksContent, ImagesSectionContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ShopContent, BookingSectionContent, FaqSectionContent } from '@brand-page';
2
2
  import type { ContentSettingsConfig, ContentSettingsField, ContentSettingsMultiField } from '../models';
3
3
  export declare const LOGO_SETTINGS_CONFIG: () => ContentSettingsConfig<Omit<LogoContent, "version" | "logoVariation" | "logoImageHeight" | "logoImageWidth" | "logoLastUpdate" | "logoImageBase64Url">>;
4
4
  export declare const GENERAL_LINK_CONTENT_SETTINGS_CONFIG: () => ContentSettingsConfig<GeneralLinkContent>;
@@ -51,4 +51,5 @@ export declare const SHOP_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<S
51
51
  isShippingEnabled: boolean;
52
52
  }>;
53
53
  export declare const BOOKING_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<BookingSectionContent>;
54
+ export declare const FAQ_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<FaqSectionContent>;
54
55
  export declare const CONTENT_SETTINGS_CONFIGS: () => Record<ContentType, ContentSettingsConfig<any>>;