@designcrowd/library.brand-page 6.2.14 → 6.2.16-ast-faq

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 (622) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Deoc6s8r.js → CreatedOnBrandCrowd-de-de-CNsnP62Q.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BxDzsLl-.js → CreatedOnBrandCrowd-en-us-DXhRk85B.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-B-5VS2MV.js → CreatedOnBrandCrowd-es-es-CR2tUzfv.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-C6h05sUZ.js → CreatedOnBrandCrowd-fr-ca-DG77i_Vv.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-C6h05sUZ.js → CreatedOnBrandCrowd-fr-fr-DG77i_Vv.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BC6XU3ev.js → CreatedOnBrandCrowd-pt-br-vs4USh7U.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BC6XU3ev.js → CreatedOnBrandCrowd-pt-pt-vs4USh7U.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-dUTedh8v.js → CreatedOnDcom-de-de-B0ruQ6jj.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DY0jkOeW.js → CreatedOnDcom-en-us-y9qeDmk4.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DRioej2A.js → CreatedOnDcom-es-es-skWVem_b.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-CcglfcUU.js → CreatedOnDcom-fr-ca-CTa0nLIm.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-B7v_e6HI.js → CreatedOnDcom-fr-fr-9Xas5Xgk.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-5XGcKJb7.js → CreatedOnDcom-pt-br-BLKLqoQS.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DepC53tO.js → CreatedOnDcom-pt-pt-CVOLjp2Y.js} +1 -1
  15. package/lib/src/about-CpfAzHYI.js +13 -0
  16. package/lib/src/add-page-Cam6psWp.js +13 -0
  17. package/lib/src/ai-DdiAsyYj.js +13 -0
  18. package/lib/src/align-center-BNwE0ZtQ.js +14 -0
  19. package/lib/src/align-justify-Cexjtj02.js +14 -0
  20. package/lib/src/align-left-CNqHW5sh.js +14 -0
  21. package/lib/src/align-right-D5yzRPUd.js +14 -0
  22. package/lib/src/animate-Clk90STT.js +14 -0
  23. package/lib/src/annotate-heart-DJxtsIXE.js +14 -0
  24. package/lib/src/arrow-down-KlrcGl_u.js +13 -0
  25. package/lib/src/arrow-left-CxZzXfas.js +14 -0
  26. package/lib/src/arrow-right-JOOwygRE.js +14 -0
  27. package/lib/src/arrow-top-right-ClDYepSz.js +13 -0
  28. package/lib/src/arrow-up-4vVvj7lh.js +14 -0
  29. package/lib/src/arrow-up-underline-C22tTO7_.js +14 -0
  30. package/lib/src/attach-2t4zVhNZ.js +13 -0
  31. package/lib/src/auth-facebook-CLoGcA0H.js +16 -0
  32. package/lib/src/auth-facebook-white-vj-ltMW0.js +24 -0
  33. package/lib/src/auth-google-DrtiO6LL.js +16 -0
  34. package/lib/src/award-CKwCoing.js +14 -0
  35. package/lib/src/background-Eu-soBOY.js +14 -0
  36. package/lib/src/badge-DMiNPqcq.js +15 -0
  37. package/lib/src/ban-BWYVUslW.js +10 -0
  38. package/lib/src/banner-Dke3L8Vw.js +14 -0
  39. package/lib/src/banner-centered-i0OzWZQw.js +28 -0
  40. package/lib/src/banner-left-2iajZ5gF.js +28 -0
  41. package/lib/src/bar-DrvKpwo1.js +31 -0
  42. package/lib/src/bc-mast-CK_DMyjz.js +14 -0
  43. package/lib/src/bezier-curve-go28-L4O.js +14 -0
  44. package/lib/src/bezier-curve-outline-Imcah2Qa.js +14 -0
  45. package/lib/src/bold-CZfYruyy.js +14 -0
  46. package/lib/src/brand-page/constants/misc.constants.d.ts +7 -0
  47. package/lib/src/brand-page/constants/misc.constants.js +7 -0
  48. package/lib/src/brand-page/constants/styles.constants.d.ts +2 -0
  49. package/lib/src/brand-page/constants/styles.constants.js +2 -0
  50. package/lib/src/brand-page/models/content.model.d.ts +1 -0
  51. package/lib/src/brand-page/models/content.model.js +1 -0
  52. package/lib/src/brand-page/models/index.d.ts +26 -0
  53. package/lib/src/brand-page/utils/container-text-color.util.js +12 -0
  54. package/lib/src/brand-page/utils/content-callback-util.d.ts +2 -1
  55. package/lib/src/brand-page/utils/content-callback-util.js +3 -0
  56. package/lib/src/brand-page/utils/migration/migration-22.d.ts +10 -4
  57. package/lib/src/brand-page/utils/migration/migration-22.js +59 -5
  58. package/lib/src/brand-page/utils/view-model.util.js +16 -0
  59. package/lib/src/brand-page/view-models.d.ts +5 -2
  60. package/lib/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.d.ts +3 -0
  61. package/lib/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.js +4 -0
  62. package/lib/src/brand-page-maker/assessors/index.d.ts +1 -0
  63. package/lib/src/brand-page-maker/assessors/index.js +1 -0
  64. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +1 -0
  65. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +1 -0
  66. package/lib/src/brand-page-maker/composables/ai-chat/aiErrorCopy.d.ts +1 -1
  67. package/lib/src/brand-page-maker/composables/ai-chat/aiErrorCopy.js +2 -2
  68. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +2 -2
  69. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +2 -0
  70. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +2 -1
  71. package/lib/src/brand-page-maker/constants/config-settings-constant.js +116 -4
  72. package/lib/src/brand-page-maker/constants/personalisation.constant.d.ts +2 -2
  73. package/lib/src/brand-page-maker/constants/personalisation.constant.js +3 -2
  74. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.d.ts +3 -0
  75. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.js +49 -0
  76. package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -0
  77. package/lib/src/brand-page-maker/models/content-settings-configs.js +1 -0
  78. package/lib/src/brand-page-maker/models/content-settings.d.ts +2 -1
  79. package/lib/src/brand-page-maker/models/content-settings.js +46 -1
  80. package/lib/src/brand-page-maker/utils/apply-color-strategy.js +41 -17
  81. package/lib/src/brand-page-maker/utils/rte-authoring.util.js +9 -1
  82. package/lib/src/brand-page-maker/validators/field.validator.js +2 -0
  83. package/lib/src/briefcase-C5316IlB.js +14 -0
  84. package/lib/src/browser-K7TgGegK.js +14 -0
  85. package/lib/src/brush-DlV0f4mG.js +13 -0
  86. package/lib/src/building-CPQAQm6Z.js +10 -0
  87. package/lib/src/bulb-D0JiMyD0.js +14 -0
  88. package/lib/src/{bundled-translations-yGrvPE5i.js → bundled-translations-LMpZwTQ3.js} +15 -15
  89. package/lib/src/{bundled-translations.de-DE-L4Znf8Hs.js → bundled-translations.de-DE-Dz0bbwo3.js} +35 -35
  90. package/lib/src/{bundled-translations.es-ES-D6iticrK.js → bundled-translations.es-ES-DxFSGNeu.js} +21 -21
  91. package/lib/src/{bundled-translations.fr-CA-BgAVE-9k.js → bundled-translations.fr-CA-CArr9KG-.js} +33 -33
  92. package/lib/src/{bundled-translations.fr-FR-B8GbyqxQ.js → bundled-translations.fr-FR-Ci7-8b_w.js} +9 -9
  93. package/lib/src/{bundled-translations.pt-BR-DjPU3Db7.js → bundled-translations.pt-BR-BmPWrJ7g.js} +31 -31
  94. package/lib/src/{bundled-translations.pt-PT-BaepaDpr.js → bundled-translations.pt-PT-DS8g_MFC.js} +31 -31
  95. package/lib/src/bundles/bundled-translations.de-DE.json +9 -1
  96. package/lib/src/bundles/bundled-translations.es-ES.json +9 -1
  97. package/lib/src/bundles/bundled-translations.fr-CA.json +9 -1
  98. package/lib/src/bundles/bundled-translations.fr-FR.json +9 -1
  99. package/lib/src/bundles/bundled-translations.json +9 -1
  100. package/lib/src/bundles/bundled-translations.pt-BR.json +9 -1
  101. package/lib/src/bundles/bundled-translations.pt-PT.json +9 -1
  102. package/lib/src/business-D63jEgaI.js +13 -0
  103. package/lib/src/business-card-filled-Bd3FwP3f.js +10 -0
  104. package/lib/src/button-D1ZOr9bt.js +15 -0
  105. package/lib/src/button-arrow-CFDzyc9H.js +19 -0
  106. package/lib/src/button-arrow-left-Y0ZZCpSh.js +19 -0
  107. package/lib/src/button-arrow-right-fXDw8Ql2.js +19 -0
  108. package/lib/src/button-brushstroke-left-hz3Vb0Te.js +14 -0
  109. package/lib/src/button-brushstroke-right-BP1dqsnH.js +14 -0
  110. package/lib/src/button-brushstroke-vKjg5mzf.js +21 -0
  111. package/lib/src/button-dashed-oval-BSMrbcJ0.js +25 -0
  112. package/lib/src/button-dashed-rectangle-6SlatyIq.js +24 -0
  113. package/lib/src/button-dashed-rounded-BQXDSnt4.js +25 -0
  114. package/lib/src/button-doubleline-oval-8F9K1Wle.js +23 -0
  115. package/lib/src/button-doubleline-rectangle-CN0amDxf.js +29 -0
  116. package/lib/src/button-doubleline-rounded-B_AL4dtA.js +23 -0
  117. package/lib/src/button-justified-BNeosmm8.js +33 -0
  118. package/lib/src/button-paper-BA6ZBxmv.js +16 -0
  119. package/lib/src/button-paper-bottom-C3AnFPFh.js +12 -0
  120. package/lib/src/button-paper-top-CFLVNlHH.js +12 -0
  121. package/lib/src/button-softshadow-oval-DVQRnsf6.js +16 -0
  122. package/lib/src/button-softshadow-rectangle-D4ex7sUX.js +16 -0
  123. package/lib/src/button-softshadow-rounded-4_WRQ5FH.js +16 -0
  124. package/lib/src/calculator-jInjHAgL.js +10 -0
  125. package/lib/src/calendar-D3ZcQwPh.js +10 -0
  126. package/lib/src/callout-error-B2MsA_sn.js +13 -0
  127. package/lib/src/callout-info-Hp_yr5C2.js +13 -0
  128. package/lib/src/callout-success-D9cZc_kL.js +13 -0
  129. package/lib/src/callout-warning-CxoFgVaS.js +13 -0
  130. package/lib/src/cap-D-GPcxZm.js +27 -0
  131. package/lib/src/card-B37KadHf.js +19 -0
  132. package/lib/src/card-vertical-150X06Zi.js +14 -0
  133. package/lib/src/cart-empty-B1DFd2ao.js +16 -0
  134. package/lib/src/chart-bar-Cmi595KD.js +16 -0
  135. package/lib/src/chart-column-BQzSYPPR.js +16 -0
  136. package/lib/src/chart-fE4AJSLl.js +12 -0
  137. package/lib/src/chart-line-5IKpJMG5.js +14 -0
  138. package/lib/src/chart-pie-bHsK4W7x.js +14 -0
  139. package/lib/src/check-BgPl2Xg1.js +13 -0
  140. package/lib/src/check-circle-light-C79DsOqM.js +14 -0
  141. package/lib/src/check-rounded-BFeTKJ33.js +14 -0
  142. package/lib/src/check-thin-BpTwk0Qp.js +14 -0
  143. package/lib/src/chevron-down-DzTbBI_D.js +14 -0
  144. package/lib/src/chevron-left-CBOyk_SJ.js +14 -0
  145. package/lib/src/chevron-right-Dt4fKTtQ.js +13 -0
  146. package/lib/src/chevron-right-wide-DzFQ5Tfb.js +10 -0
  147. package/lib/src/chevron-up-CVHffidi.js +14 -0
  148. package/lib/src/clients/websocket-gateway-client.d.ts +1 -5
  149. package/lib/src/clipboard-check-BQA5PWe2.js +14 -0
  150. package/lib/src/clock-BMhgBwjR.js +10 -0
  151. package/lib/src/close-8dkHpZ6Z.js +13 -0
  152. package/lib/src/coins-sparkle-Blp7skne.js +21 -0
  153. package/lib/src/column-1-CmO2lXqg.js +23 -0
  154. package/lib/src/column-2-CFbzp1kU.js +29 -0
  155. package/lib/src/column-3-DBQGt9Ys.js +35 -0
  156. package/lib/src/column-4-Eu7-xTR5.js +41 -0
  157. package/lib/src/community-CXzJtu4U.js +10 -0
  158. package/lib/src/contact-message-DLib7GN3.js +13 -0
  159. package/lib/src/content-B6xdgFxg.js +14 -0
  160. package/lib/src/copy-CtyrDfn7.js +13 -0
  161. package/lib/src/crop-ws-CCOzp.js +13 -0
  162. package/lib/src/crown-DL2Wieha.js +13 -0
  163. package/lib/src/crown-alt-bvONz0E4.js +10 -0
  164. package/lib/src/css/library.brand-page-brandCrowd.min.css +272 -71
  165. package/lib/src/css/library.brand-page-brandPage.min.css +273 -72
  166. package/lib/src/css/library.brand-page-designCom.min.css +272 -71
  167. package/lib/src/css/library.brand-page-preview.min.css +272 -71
  168. package/lib/src/custom-landscape-A7ZKk9ed.js +10 -0
  169. package/lib/src/delete-C37OBRZ0.js +13 -0
  170. package/lib/src/designs-DIv1BqF0.js +13 -0
  171. package/lib/src/desktop-SJDj7Goi.js +14 -0
  172. package/lib/src/desktop-hamburger-display-style-1-CNKw15XK.js +31 -0
  173. package/lib/src/desktop-hamburger-display-style-2-2ewrYd_A.js +31 -0
  174. package/lib/src/desktop-hamburger-display-style-with-button-1-B0qruTHB.js +16 -0
  175. package/lib/src/desktop-hamburger-display-style-with-button-2-xe0oYLtw.js +16 -0
  176. package/lib/src/desktop-tab-display-style-1-BY-aPYPx.js +31 -0
  177. package/lib/src/desktop-tab-display-style-2-f24u0Du0.js +31 -0
  178. package/lib/src/desktop-tab-display-style-3-nRdjnye_.js +27 -0
  179. package/lib/src/desktop-tab-display-style-4-BMH5EYio.js +27 -0
  180. package/lib/src/desktop-tab-display-style-5-CTIrYIXI.js +31 -0
  181. package/lib/src/desktop-tab-display-style-6-DAWtQWOv.js +31 -0
  182. package/lib/src/desktop-tab-display-style-7-DVWU4RYB.js +35 -0
  183. package/lib/src/desktop-tab-display-style-8-tEXK5Soy.js +31 -0
  184. package/lib/src/desktop-tab-display-style-with-button-1-C35AMknu.js +35 -0
  185. package/lib/src/desktop-tab-display-style-with-button-2-CB738FG_.js +35 -0
  186. package/lib/src/desktop-tab-display-style-with-button-3-cI6j48XP.js +35 -0
  187. package/lib/src/desktop-tab-display-style-with-button-4-BhdhvqIj.js +31 -0
  188. package/lib/src/desktop-tab-display-style-with-button-5-CCGMoPQq.js +16 -0
  189. package/lib/src/desktop-tab-display-style-with-button-6-DszQ0mPS.js +16 -0
  190. package/lib/src/diamond-D4lqI2nA.js +14 -0
  191. package/lib/src/digital-business-card-filled-VZeDwcSJ.js +33 -0
  192. package/lib/src/display-style-1-CXn-kKwy.js +39 -0
  193. package/lib/src/display-style-1-DOqTIy6E.js +31 -0
  194. package/lib/src/display-style-1-v1n446Tu.js +16 -0
  195. package/lib/src/display-style-2-BK1j0nmz.js +31 -0
  196. package/lib/src/display-style-2-Bjo5lGIq.js +27 -0
  197. package/lib/src/display-style-2-BkR9tBo8.js +16 -0
  198. package/lib/src/display-style-3-CMZ_nGLN.js +31 -0
  199. package/lib/src/display-style-4-C-JBN6g6.js +31 -0
  200. package/lib/src/display-style-about-1-BSelGHIQ.js +31 -0
  201. package/lib/src/display-style-about-2-CnNlIOrY.js +31 -0
  202. package/lib/src/display-style-about-3-l5zdL0GD.js +31 -0
  203. package/lib/src/display-style-about-4-C5mWY7om.js +16 -0
  204. package/lib/src/display-style-about-5-DQk_43QL.js +15 -0
  205. package/lib/src/display-style-about-6-IMmTLRe3.js +15 -0
  206. package/lib/src/display-style-banner-1-PGva4TIp.js +31 -0
  207. package/lib/src/display-style-banner-10-CamQlng4.js +31 -0
  208. package/lib/src/display-style-banner-11-CJcECZiv.js +31 -0
  209. package/lib/src/display-style-banner-12-5MLNTATn.js +31 -0
  210. package/lib/src/display-style-banner-13-BCzBw-hw.js +32 -0
  211. package/lib/src/display-style-banner-14-f3ezdwQH.js +33 -0
  212. package/lib/src/display-style-banner-15-CL0nAJ8m.js +33 -0
  213. package/lib/src/display-style-banner-2-Ca3E2eve.js +31 -0
  214. package/lib/src/display-style-banner-3-BMBdaJ21.js +31 -0
  215. package/lib/src/display-style-banner-4-BXjwxyEf.js +31 -0
  216. package/lib/src/display-style-banner-5-H1R0nSeM.js +31 -0
  217. package/lib/src/display-style-banner-6-DOflsFNa.js +16 -0
  218. package/lib/src/display-style-banner-7-CthNa7Un.js +16 -0
  219. package/lib/src/display-style-banner-8-BKXplCsT.js +31 -0
  220. package/lib/src/display-style-banner-9-DrMPF9eR.js +31 -0
  221. package/lib/src/display-style-contact-1-B_8Jc01j.js +16 -0
  222. package/lib/src/display-style-contact-2-Ba03F0gV.js +16 -0
  223. package/lib/src/display-style-contact-4-DCaEimSF.js +16 -0
  224. package/lib/src/display-style-contact-5-B767fCRm.js +16 -0
  225. package/lib/src/display-style-contact-6-od3McHkx.js +16 -0
  226. package/lib/src/display-style-faq-1-CqKJ4Ly3.js +16 -0
  227. package/lib/src/display-style-faq-2-CSarOHJb.js +16 -0
  228. package/lib/src/display-style-faq-3-DOjdJS_z.js +16 -0
  229. package/lib/src/display-style-images-1-DT0GVNgS.js +16 -0
  230. package/lib/src/display-style-images-2-46MrwLIl.js +16 -0
  231. package/lib/src/display-style-images-3-DHPFnVE3.js +16 -0
  232. package/lib/src/display-style-images-4-DC_T8nsk.js +27 -0
  233. package/lib/src/display-style-images-5-xE96EO5b.js +16 -0
  234. package/lib/src/display-style-images-6-Du7t1XD5.js +16 -0
  235. package/lib/src/divider-DnOAve5X.js +14 -0
  236. package/lib/src/divider-thick-C2lmrfm6.js +23 -0
  237. package/lib/src/divider-thin-BaKizph2.js +23 -0
  238. package/lib/src/donate-lpJFY2mx.js +13 -0
  239. package/lib/src/download-BzZa5drX.js +14 -0
  240. package/lib/src/duplicate-D5g-oYG8.js +13 -0
  241. package/lib/src/edit-DkE5zh8K.js +13 -0
  242. package/lib/src/edit-line-DX3WfIZz.js +16 -0
  243. package/lib/src/ellipsis-CCqPS0WG.js +13 -0
  244. package/lib/src/email-DKZ0xXxy.js +10 -0
  245. package/lib/src/email-symbol-CASzuu-D.js +10 -0
  246. package/lib/src/envelope-email-AnqDBUyb.js +16 -0
  247. package/lib/src/eraser-Bwx1HZwy.js +10 -0
  248. package/lib/src/error-DiqaFC9b.js +13 -0
  249. package/lib/src/etsy-KyCQUiIK.js +10 -0
  250. package/lib/src/eye-crossed-D8Sbdxyj.js +14 -0
  251. package/lib/src/eye-open-BicHubIM.js +24 -0
  252. package/lib/src/facebook-DkBk7LLr.js +10 -0
  253. package/lib/src/favicon-Hcq_3Vdi.js +14 -0
  254. package/lib/src/fees--vANdnYL.js +13 -0
  255. package/lib/src/file-C0f_ltyT.js +14 -0
  256. package/lib/src/file-box-BV8JnPxx.js +13 -0
  257. package/lib/src/file-empty-i7TZU2IX.js +14 -0
  258. package/lib/src/filter-BERckCWX.js +13 -0
  259. package/lib/src/filter-Cs-uNY1P.js +14 -0
  260. package/lib/src/filters-JWLwl8i1.js +13 -0
  261. package/lib/src/flag-DteG9L_P.js +16 -0
  262. package/lib/src/flip-horizontal-C1mOkUzH.js +14 -0
  263. package/lib/src/flip-vertical-DLl4gtbx.js +14 -0
  264. package/lib/src/flyer-BvyfgyXO.js +14 -0
  265. package/lib/src/folder-BXP2I936.js +13 -0
  266. package/lib/src/font-I0Sh9XMI.js +14 -0
  267. package/lib/src/footer-centered-NzzNbRSz.js +35 -0
  268. package/lib/src/footer-left-BJMF268B.js +35 -0
  269. package/lib/src/form-aHaZlMzS.js +10 -0
  270. package/lib/src/form-message-BeICFs8u.js +13 -0
  271. package/lib/src/fullscreen-DcEOjC0U.js +10 -0
  272. package/lib/src/fullscreen-exit-CjmzcvGM.js +10 -0
  273. package/lib/src/gift-certificate-B5V9rQI5.js +10 -0
  274. package/lib/src/globe-B490Q0bP.js +13 -0
  275. package/lib/src/globe-ChUZiM8T.js +10 -0
  276. package/lib/src/globe-DFmpHm_2.js +13 -0
  277. package/lib/src/group-Dc9mVFcn.js +13 -0
  278. package/lib/src/hamburger-1-BEphoioj.js +17 -0
  279. package/lib/src/hamburger-2-BKM_rVbZ.js +19 -0
  280. package/lib/src/hamburger-3-DdKjmZIq.js +19 -0
  281. package/lib/src/hamburger-4-B9I8jfhD.js +15 -0
  282. package/lib/src/hamburger-Bh0ZrW-q.js +19 -0
  283. package/lib/src/hamburger-DTY0Ei2b.js +31 -0
  284. package/lib/src/hamburger-display-style-no-logo-1-CFqOI__z.js +27 -0
  285. package/lib/src/hamburger-display-style-no-logo-2-ehHmBkpj.js +27 -0
  286. package/lib/src/hamburger-display-style-no-logo-3-DFwQsoLo.js +27 -0
  287. package/lib/src/headphones-BuaNMDAX.js +14 -0
  288. package/lib/src/heart-DfKlyjTE.js +14 -0
  289. package/lib/src/history-DzA2mbFQ.js +41 -0
  290. package/lib/src/home-1VhJeefA.js +14 -0
  291. package/lib/src/home-Bd9BVHpE.js +13 -0
  292. package/lib/src/home-outline-BL952wup.js +13 -0
  293. package/lib/src/icon-style-circle-bg-CBWQYcrG.js +29 -0
  294. package/lib/src/icon-style-no-bg-C4MeLrLN.js +23 -0
  295. package/lib/src/icon-style-square-bg-UdoKx2BD.js +29 -0
  296. package/lib/src/image-Cs0pdxPf.js +14 -0
  297. package/lib/src/image-DqPmgaR6.js +14 -0
  298. package/lib/src/image-gallery-carousel-DaELueRy.js +22 -0
  299. package/lib/src/image-gallery-grid-ELbA0rME.js +32 -0
  300. package/lib/src/image-gallery-masonry-D6XVOAt2.js +26 -0
  301. package/lib/src/images-Cxdq_QJe.js +14 -0
  302. package/lib/src/images-gallery-C2KGX0Vt.js +10 -0
  303. package/lib/src/index.mjs +164 -163
  304. package/lib/src/info-Cr06f_5z.js +21 -0
  305. package/lib/src/infographics-0jyqJpXQ.js +10 -0
  306. package/lib/src/instagram-CDTb1tul.js +14 -0
  307. package/lib/src/invitation-CJ2b0dEg.js +10 -0
  308. package/lib/src/invoice-Bz3oJMGM.js +10 -0
  309. package/lib/src/italic-zzxZZ1V9.js +14 -0
  310. package/lib/src/jobs-DCcoHrcd.js +13 -0
  311. package/lib/src/layer-D3VQznB9.js +13 -0
  312. package/lib/src/layer-bring-front-CYHkW1aU.js +13 -0
  313. package/lib/src/layer-send-back-C3drjWFm.js +13 -0
  314. package/lib/src/layout-hmiB9k-2.js +10 -0
  315. package/lib/src/layout-icon-bottom-normal-text-center-normal-D3hEgZK9.js +35 -0
  316. package/lib/src/layout-icon-bottom-normal-text-center-small-Dp-Vb_JO.js +35 -0
  317. package/lib/src/layout-icon-bottom-small-text-center-normal-2HbtnXAz.js +35 -0
  318. package/lib/src/layout-icon-center-normal-curved-text-bottom-D3Hiqz97.js +33 -0
  319. package/lib/src/layout-icon-center-normal-curved-text-circle-S1_fqA4X.js +26 -0
  320. package/lib/src/layout-icon-center-normal-curved-text-top-biDDTKKy.js +33 -0
  321. package/lib/src/layout-icon-left-normal-text-center-normal-CH5BA1-c.js +35 -0
  322. package/lib/src/layout-icon-left-normal-text-justify-normal-DOio-vV6.js +35 -0
  323. package/lib/src/layout-icon-left-normal-text-left-normal-B6l03sC6.js +35 -0
  324. package/lib/src/layout-icon-left-small-text-left-normal-NX5SzzGS.js +35 -0
  325. package/lib/src/layout-icon-right-normal-text-center-normal-B2k4L1WG.js +35 -0
  326. package/lib/src/layout-icon-right-normal-text-justify-normal-DdID8PMH.js +35 -0
  327. package/lib/src/layout-icon-right-normal-text-right-normal-Di1gAWYq.js +35 -0
  328. package/lib/src/layout-icon-right-small-text-right-normal-B1mG18Vb.js +35 -0
  329. package/lib/src/layout-icon-top-normal-text-center-normal-5EEqhHVH.js +35 -0
  330. package/lib/src/layout-icon-top-normal-text-center-small-Dj6bcJ3s.js +35 -0
  331. package/lib/src/layout-icon-top-normal-text-justify-normal-B-P9nfe-.js +35 -0
  332. package/lib/src/layout-icon-top-small-text-center-normal-DdsQTBL-.js +35 -0
  333. package/lib/src/letterhead-filled-D4rd6pcx.js +10 -0
  334. package/lib/src/{lib-CidddZOL.js → lib-DY_vUnHe.js} +34371 -39600
  335. package/lib/src/lightning-CNaQjC0I.js +14 -0
  336. package/lib/src/link-Bo9vrCM3.js +13 -0
  337. package/lib/src/link-in-bio-filled-BX1nNPjw.js +33 -0
  338. package/lib/src/link-r1vG56Yd.js +14 -0
  339. package/lib/src/linkedin-DMKOtaHb.js +14 -0
  340. package/lib/src/list-bullet-CMqM9RJ4.js +18 -0
  341. package/lib/src/list-numbered-sfs2qGQR.js +26 -0
  342. package/lib/src/location-BYSwhflT.js +13 -0
  343. package/lib/src/lock-DOQ8Aptn.js +13 -0
  344. package/lib/src/logo-DtFxKnSI.js +14 -0
  345. package/lib/src/logo-oLXFk3s8.js +10 -0
  346. package/lib/src/mac-command-BTYTb8Go.js +15 -0
  347. package/lib/src/map-Cm9rzaO2.js +13 -0
  348. package/lib/src/media-RV2wDZJ2.js +10 -0
  349. package/lib/src/menu-DFQn79Rh.js +10 -0
  350. package/lib/src/message-wluIKTox.js +13 -0
  351. package/lib/src/metadata-builder/builders/section-field-maps.d.ts +1 -1
  352. package/lib/src/metadata-builder/builders/section-field-maps.js +1 -1
  353. package/lib/src/metadata-builder/builders/undo-builder.d.ts +2 -2
  354. package/lib/src/metadata-builder/builders/undo-builder.js +2 -2
  355. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +3 -3
  356. package/lib/src/metadata-builder/parsers/section-tool-arguments.js +1 -1
  357. package/lib/src/microphone-BufgUGWy.js +10 -0
  358. package/lib/src/microphone-bold-DUZ5AJ3L.js +14 -0
  359. package/lib/src/minus-DzUgQkSZ.js +13 -0
  360. package/lib/src/minus-circle-light-BD7eKYN_.js +14 -0
  361. package/lib/src/mobile-DiGgp18z.js +10 -0
  362. package/lib/src/mobile-hamburger-display-style-1-CQ75ElwZ.js +31 -0
  363. package/lib/src/mobile-hamburger-display-style-2-BMfiAsHx.js +31 -0
  364. package/lib/src/mobile-hamburger-display-style-3-DUIm2W30.js +31 -0
  365. package/lib/src/mobile-hamburger-display-style-4-2CWklt_-.js +31 -0
  366. package/lib/src/mobile-tab-display-style-1-DKNcJVTr.js +31 -0
  367. package/lib/src/mobile-tab-display-style-2-Zw9TZTqF.js +31 -0
  368. package/lib/src/mobile-tab-display-style-with-button-1-CTg6eMbx.js +16 -0
  369. package/lib/src/mobile-tab-display-style-with-button-2-Ce3-f5-6.js +16 -0
  370. package/lib/src/mug-iuzAhgRH.js +35 -0
  371. package/lib/src/opacity-DkJsMJ9I.js +13 -0
  372. package/lib/src/other-DS5FhtzA.js +29 -0
  373. package/lib/src/page-blank-yUM2mL5m.js +13 -0
  374. package/lib/src/page-buttons-1037-dTh.js +18 -0
  375. package/lib/src/page-hamburger-DkJsogq5.js +37 -0
  376. package/lib/src/page-tabs-Dkndr8Oi.js +39 -0
  377. package/lib/src/pages-BUSKFx1a.js +13 -0
  378. package/lib/src/paint-brush-BKdwdV0n.js +10 -0
  379. package/lib/src/palette-DFdykQVv.js +14 -0
  380. package/lib/src/palette-outline-KhG2vx5d.js +14 -0
  381. package/lib/src/pause-CL9k8Lxp.js +10 -0
  382. package/lib/src/pause-ConKkY5J.js +10 -0
  383. package/lib/src/payment-D8YtsaSZ.js +21 -0
  384. package/lib/src/payments-featured-D3j5mAnz.js +27 -0
  385. package/lib/src/payments-textonly-CKhoipuI.js +40 -0
  386. package/lib/src/payments-thumbnail-CVpl0W7T.js +29 -0
  387. package/lib/src/pen-Bm0z5q9V.js +14 -0
  388. package/lib/src/pen-outline-BQ4LiADk.js +14 -0
  389. package/lib/src/pen-sparkle-mIwxLCyz.js +26 -0
  390. package/lib/src/pen-tool-wfdF0pPI.js +14 -0
  391. package/lib/src/phone-BfSQEe_W.js +13 -0
  392. package/lib/src/phone-DE95BDb8.js +10 -0
  393. package/lib/src/pinterest-D9vv_pEN.js +10 -0
  394. package/lib/src/play-CdFTEnxv.js +10 -0
  395. package/lib/src/plus-BeGokSus.js +10 -0
  396. package/lib/src/plus-circle-PD_0a-0C.js +14 -0
  397. package/lib/src/plus-circle-light-DM1PO4pd.js +15 -0
  398. package/lib/src/plus-light-CKTu3H3S.js +14 -0
  399. package/lib/src/poll-DLh3fJen.js +10 -0
  400. package/lib/src/portfolio-BpYfEehk.js +13 -0
  401. package/lib/src/postcard-BKMsUt9B.js +10 -0
  402. package/lib/src/poster-mCJ7GDzF.js +14 -0
  403. package/lib/src/premium-content-B2eoJWcY.js +21 -0
  404. package/lib/src/preview-_hMOqL1k.js +13 -0
  405. package/lib/src/printing-DmUmKyu0.js +13 -0
  406. package/lib/src/processing-DJFlKthj.js +10 -0
  407. package/lib/src/profile-C0IBq6Hd.js +10 -0
  408. package/lib/src/qrcode-Cp1XqCr3.js +10 -0
  409. package/lib/src/question-6jQ6MdC-.js +21 -0
  410. package/lib/src/question-alt-DUboGm-r.js +29 -0
  411. package/lib/src/question-circle-filled-D79nKcJq.js +14 -0
  412. package/lib/src/quote-BDZO3VeB.js +12 -0
  413. package/lib/src/ratio-1-1-XQaJGx-L.js +15 -0
  414. package/lib/src/ratio-16-9-jP4b4Ck3.js +15 -0
  415. package/lib/src/ratio-2-3-cb2qs0Mu.js +15 -0
  416. package/lib/src/ratio-3-2-25W8PMlp.js +15 -0
  417. package/lib/src/ratio-3-4-V2HzLIfA.js +15 -0
  418. package/lib/src/ratio-4-3-DrZKJj8a.js +15 -0
  419. package/lib/src/ratio-9-16-CXrTJW1K.js +15 -0
  420. package/lib/src/ratio-circle-C_TFvDGj.js +15 -0
  421. package/lib/src/ratio-original-jfbH-aUV.js +23 -0
  422. package/lib/src/redo-CTCSmHGx.js +13 -0
  423. package/lib/src/refresh-DxmnDGz7.js +13 -0
  424. package/lib/src/reload-DYtQKAAu.js +13 -0
  425. package/lib/src/reorderable-CsG17jAV.js +10 -0
  426. package/lib/src/request-payment-DRTcxo7j.js +13 -0
  427. package/lib/src/reset-QvKUGqRZ.js +13 -0
  428. package/lib/src/resize-fbekkz02.js +25 -0
  429. package/lib/src/roller-brush-DqV6McUG.js +10 -0
  430. package/lib/src/save-Dpo36uBX.js +13 -0
  431. package/lib/src/search-Wkqsltj5.js +14 -0
  432. package/lib/src/secure-D33nyNa2.js +14 -0
  433. package/lib/src/select-all-B1fbNSBq.js +24 -0
  434. package/lib/src/send-BolZZD8V.js +23 -0
  435. package/lib/src/services-t81drp50.js +12 -0
  436. package/lib/src/settings-ZuwLZxG-.js +15 -0
  437. package/lib/src/shape-DgnWUfL0.js +10 -0
  438. package/lib/src/share-PhTQCMEH.js +17 -0
  439. package/lib/src/shared/color-strategies/color-strategies.js +4 -0
  440. package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +11 -0
  441. package/lib/src/shared/color-strategies/rte-field-pairs.js +23 -0
  442. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +1 -0
  443. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +2 -1
  444. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +1 -0
  445. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +1 -0
  446. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +1 -0
  447. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +1 -0
  448. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +3 -0
  449. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +2 -0
  450. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +2 -0
  451. package/lib/src/shared/content-settings/store/content-settings-store.js +23 -3
  452. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +1 -0
  453. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +1 -0
  454. package/lib/src/shield-tick-CfRvQxPo.js +13 -0
  455. package/lib/src/shop-BnIqxTf7.js +13 -0
  456. package/lib/src/size-auto-CFYbPP8b.js +10 -0
  457. package/lib/src/size-landscape-BfkTcvD3.js +10 -0
  458. package/lib/src/size-portrait-B5aeleHm.js +10 -0
  459. package/lib/src/size-square-Cgy1sF5M.js +10 -0
  460. package/lib/src/sms-BiKhz6nM.js +10 -0
  461. package/lib/src/snapchat-Cjv2_4Yb.js +10 -0
  462. package/lib/src/social-facebook-4ppvxwKP.js +10 -0
  463. package/lib/src/social-facebook-Drs9nDyg.js +13 -0
  464. package/lib/src/social-facebook-color-76JrtzHS.js +25 -0
  465. package/lib/src/social-google-7QL97me7.js +10 -0
  466. package/lib/src/social-google-D5Knsr7g.js +13 -0
  467. package/lib/src/social-instagram-_klL3uhy.js +13 -0
  468. package/lib/src/social-instagram-color-DAFyYA6l.js +62 -0
  469. package/lib/src/social-linkedin-color-2IhPEkoY.js +21 -0
  470. package/lib/src/social-share-D_z23xdt.js +12 -0
  471. package/lib/src/social-twitter-C32TsK-S.js +13 -0
  472. package/lib/src/social-twitter-color-BgoJgmHR.js +25 -0
  473. package/lib/src/social-youtube-CqIe-oK0.js +13 -0
  474. package/lib/src/sort-WQM55Znq.js +10 -0
  475. package/lib/src/soundcloud-D_rPYnz_.js +14 -0
  476. package/lib/src/spacing-apx-l3Xv.js +27 -0
  477. package/lib/src/sparkle-square-CLmdD9Qx.js +31 -0
  478. package/lib/src/squares-mnDAYZDI.js +14 -0
  479. package/lib/src/star-filled-hzNMrvuj.js +13 -0
  480. package/lib/src/star-hollow-qqeiBIkV.js +13 -0
  481. package/lib/src/sticker-ComycVrN.js +35 -0
  482. package/lib/src/stop-DVIru9yN.js +10 -0
  483. package/lib/src/strikethrough-CJNP8SGy.js +14 -0
  484. package/lib/src/styles-DTDjHHxb.js +10 -0
  485. package/lib/src/submit-CYR7u_CG.js +10 -0
  486. package/lib/src/t-shirt-BsZg0Cfc.js +39 -0
  487. package/lib/src/tab-display-style-no-logo-1-B2O1FVFu.js +27 -0
  488. package/lib/src/tab-display-style-no-logo-2-BSHYuWQd.js +27 -0
  489. package/lib/src/tab-display-style-no-logo-3-yqgKXdTk.js +27 -0
  490. package/lib/src/templates-Bga3FRYs.js +14 -0
  491. package/lib/src/testimonial-big-image-CRV62bPm.js +36 -0
  492. package/lib/src/testimonial-centered-BB5ZrjVC.js +32 -0
  493. package/lib/src/testimonial-columns-B-wNsh6Q.js +40 -0
  494. package/lib/src/text-CLykMXpS.js +14 -0
  495. package/lib/src/text-DAZYK490.js +14 -0
  496. package/lib/src/text-background-color-DbwcAD-t.js +21 -0
  497. package/lib/src/text-color-6gy1VHg2.js +23 -0
  498. package/lib/src/text-image-center-CGlaeD5R.js +28 -0
  499. package/lib/src/text-image-f5-27VsG.js +44 -0
  500. package/lib/src/text-image-justified-DKNa4g0x.js +35 -0
  501. package/lib/src/text-image-left--D7gYeGu.js +29 -0
  502. package/lib/src/text-image-only-CTWr51rN.js +21 -0
  503. package/lib/src/text-image-right-CwHE1ANa.js +29 -0
  504. package/lib/src/thankyou-card-2FndEbnv.js +10 -0
  505. package/lib/src/thumbs-up-BGOaudWH.js +10 -0
  506. package/lib/src/tiktok-B7Q9t0LQ.js +10 -0
  507. package/lib/src/time-CZtBVf6n.js +13 -0
  508. package/lib/src/tools-2R2R_xSB.js +10 -0
  509. package/lib/src/tooltip-bottom-76kaSvpy.js +12 -0
  510. package/lib/src/tooltip-left-DnqlXRbf.js +12 -0
  511. package/lib/src/tooltip-right-De3IVoPH.js +12 -0
  512. package/lib/src/tooltip-top-BcBMxm6e.js +12 -0
  513. package/lib/src/transition-BB5rBqiy.js +27 -0
  514. package/lib/src/tumblr-DKDzUME6.js +10 -0
  515. package/lib/src/twitch-B0zCOTGw.js +14 -0
  516. package/lib/src/twitter-CRTGZZIs.js +10 -0
  517. package/lib/src/underline-Cvau1mZf.js +14 -0
  518. package/lib/src/undo-Bj9NTZW6.js +13 -0
  519. package/lib/src/upgrade-BfixCoxO.js +16 -0
  520. package/lib/src/upgrade-alt-BwwKsh2K.js +14 -0
  521. package/lib/src/upgrade-to-add-page-BsS2Hhvw.js +57 -0
  522. package/lib/src/upgrade-to-contact-form-BRN2Rejc.js +95 -0
  523. package/lib/src/upgrade-to-google-ad-DBOKNd-L.js +129 -0
  524. package/lib/src/upgrade-to-maps-Cig6c1LO.js +56 -0
  525. package/lib/src/upgrade-to-publish-B-d3aORY.js +119 -0
  526. package/lib/src/upgrade-to-remove-watermark-BF-P0J7e.js +108 -0
  527. package/lib/src/upgrade-to-videos-CcnXS-0r.js +54 -0
  528. package/lib/src/upload-DgBY7irZ.js +10 -0
  529. package/lib/src/upload-arrow-kvBFT3Oa.js +10 -0
  530. package/lib/src/uppercase-BT4dJAup.js +24 -0
  531. package/lib/src/user-accounts-BiEVlJJq.js +10 -0
  532. package/lib/src/user-headset-BlZeYCqo.js +57 -0
  533. package/lib/src/users-2-BKiuVLCy.js +15 -0
  534. package/lib/src/users-DMJEhWSj.js +14 -0
  535. package/lib/src/video-C3HNFBVB.js +10 -0
  536. package/lib/src/volume-DAaP2Yxi.js +10 -0
  537. package/lib/src/volume-muted-AmP9KNUG.js +10 -0
  538. package/lib/src/watchlist-filled-kZ28HiCq.js +24 -0
  539. package/lib/src/watchlist-hollow-CeOpNctW.js +13 -0
  540. package/lib/src/watchlist-hollow-alt-Ba7RimtB.js +24 -0
  541. package/lib/src/website-Cs7nmJ0F.js +13 -0
  542. package/lib/src/website-filled-IcFTJE0J.js +10 -0
  543. package/lib/src/whatsapp-CGGNCvUj.js +14 -0
  544. package/lib/src/wholesale-Dpn61RgC.js +13 -0
  545. package/lib/src/wrap-text-1c4j5CQf.js +15 -0
  546. package/lib/src/youtube-DouyWVkL.js +10 -0
  547. package/lib/src/zoom-B7pl1jZp.js +10 -0
  548. package/lib/src/zoom-CzeslImn.js +16 -0
  549. package/lib/src/zoom-in-B38FEljT.js +10 -0
  550. package/lib/src/zoom-out-DS76wW6N.js +10 -0
  551. package/package.json +2 -2
  552. package/src/brand-page/components/faq-section/FaqSection.test.ts +196 -0
  553. package/src/brand-page/components/faq-section/FaqSection.vue +315 -0
  554. package/src/brand-page/components/page/PageComponent.vue +2 -0
  555. package/src/brand-page/constants/misc.constants.ts +9 -0
  556. package/src/brand-page/constants/styles.constants.ts +2 -0
  557. package/src/brand-page/models/content.model.ts +1 -0
  558. package/src/brand-page/models/index.ts +29 -0
  559. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +1 -0
  560. package/src/brand-page/utils/container-text-color.util.test.ts +81 -0
  561. package/src/brand-page/utils/container-text-color.util.ts +16 -0
  562. package/src/brand-page/utils/content-callback-util.ts +5 -0
  563. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/edited-brandsite-sections.v22.json +6 -3
  564. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandcontact-every-section.v22.json +26 -13
  565. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandpage-every-section.v22.json +24 -12
  566. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandsite-every-section.v22.json +24 -12
  567. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandcontact.v22.json +8 -4
  568. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-general-link.v22.json +6 -3
  569. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-links.v22.json +6 -3
  570. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-header-banner.v22.json +2 -1
  571. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-sections.v22.json +6 -3
  572. package/src/brand-page/utils/migration/migration-22.ts +103 -4
  573. package/src/brand-page/utils/personalisation.util.test.ts +53 -0
  574. package/src/brand-page/utils/view-model.util.ts +26 -0
  575. package/src/brand-page/view-models.ts +8 -1
  576. package/src/brand-page-maker/assessors/faq-accordion-color-field-visibility.assessor.ts +9 -0
  577. package/src/brand-page-maker/assessors/index.ts +1 -0
  578. package/src/brand-page-maker/composables/ai-chat/aiErrorCopy.ts +2 -2
  579. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +2 -2
  580. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +2 -0
  581. package/src/brand-page-maker/constants/config-settings-constant.ts +122 -1
  582. package/src/brand-page-maker/constants/faq-section-config.test.ts +22 -0
  583. package/src/brand-page-maker/constants/personalisation.constant.ts +5 -3
  584. package/src/brand-page-maker/convertors/faq-display-style.convertor.ts +61 -0
  585. package/src/brand-page-maker/models/content-settings-configs.ts +1 -0
  586. package/src/brand-page-maker/models/content-settings.test.ts +6 -0
  587. package/src/brand-page-maker/models/content-settings.ts +51 -0
  588. package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +2940 -300
  589. package/src/brand-page-maker/utils/apply-color-strategy.test.ts +93 -2
  590. package/src/brand-page-maker/utils/apply-color-strategy.ts +69 -19
  591. package/src/brand-page-maker/utils/rte-authoring.util.test.ts +30 -0
  592. package/src/brand-page-maker/utils/rte-authoring.util.ts +14 -0
  593. package/src/brand-page-maker/validators/field.validator.ts +2 -0
  594. package/src/bundles/bundled-translations.de-DE.json +9 -1
  595. package/src/bundles/bundled-translations.es-ES.json +9 -1
  596. package/src/bundles/bundled-translations.fr-CA.json +9 -1
  597. package/src/bundles/bundled-translations.fr-FR.json +9 -1
  598. package/src/bundles/bundled-translations.json +9 -1
  599. package/src/bundles/bundled-translations.pt-BR.json +9 -1
  600. package/src/bundles/bundled-translations.pt-PT.json +9 -1
  601. package/src/clients/websocket-gateway-client.ts +0 -5
  602. package/src/metadata-builder/builders/section-field-maps.ts +1 -1
  603. package/src/metadata-builder/builders/undo-builder.ts +2 -2
  604. package/src/metadata-builder/parsers/section-tool-arguments.ts +6 -5
  605. package/src/shared/color-strategies/color-strategies.ts +4 -0
  606. package/src/shared/color-strategies/rte-field-pairs.test.ts +2 -0
  607. package/src/shared/color-strategies/rte-field-pairs.ts +35 -0
  608. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +10 -1
  609. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +10 -1
  610. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +10 -1
  611. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +10 -1
  612. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +10 -1
  613. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +10 -1
  614. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +10 -1
  615. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +2 -0
  616. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.test.ts +162 -0
  617. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.vue +287 -0
  618. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +1 -0
  619. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +3 -0
  620. package/src/shared/content-settings/components/items-field/ItemsField.vue +13 -3
  621. package/src/shared/content-settings/store/content-settings-store.test.ts +86 -0
  622. package/src/shared/content-settings/store/content-settings-store.ts +39 -4
@@ -2,6 +2,7 @@ import { BrandPageModel, BRAND_PAGE_TYPES } from '../models';
2
2
  import type {
3
3
  BannerSectionContent,
4
4
  EmailContent,
5
+ FaqSectionContent,
5
6
  GeneralLinkContent,
6
7
  ImageGalleryContent,
7
8
  ImagesSectionContent,
@@ -28,6 +29,7 @@ import {
28
29
  createInitialTestimonialSectionContent,
29
30
  createInitialProfileContent,
30
31
  createInitialButtonContent,
32
+ createInitialFaqSectionContent,
31
33
  } from '@brand-page-maker/models';
32
34
  import { faker } from '@faker-js/faker';
33
35
  import { isTiptapDocument } from '@brand-page-maker/utils';
@@ -860,6 +862,57 @@ describe('personalisation.util', async () => {
860
862
  );
861
863
  });
862
864
 
865
+ test('applyUserPersonalisationToBrandPageModelAsync personalises an FAQ title, description and each item', async () => {
866
+ const faq = createInitialFaqSectionContent();
867
+ const faqContent = {
868
+ ...faq,
869
+ title: 'title',
870
+ description: 'description',
871
+ items: [
872
+ {
873
+ ...faq.items[0],
874
+ id: 'q1',
875
+ question: 'Question 1',
876
+ answer: 'Answer 1',
877
+ },
878
+ {
879
+ ...faq.items[0],
880
+ id: 'q2',
881
+ question: 'Question 2',
882
+ answer: 'Answer 2',
883
+ },
884
+ ],
885
+ personalisationRole: 'about',
886
+ } as FaqSectionContent;
887
+
888
+ const model = new BrandPageModel({
889
+ brandPageType: BRAND_PAGE_TYPES.brandSite,
890
+ pages: [{ title: 'home', slug: 'home', contents: [faqContent] }],
891
+ });
892
+
893
+ const result = await applyUserPersonalisationToBrandPageModelAsync(
894
+ PERSONALISATION,
895
+ model,
896
+ );
897
+
898
+ const personalised = result.model.pages[0].contents[0] as FaqSectionContent;
899
+ const sourceItems = PERSONALISATION.aboutSection.items!;
900
+
901
+ expect(result.isModified).toBe(true);
902
+ expect(personalised.title).toBe(PERSONALISATION.aboutSection.title);
903
+ expect(personalised.description).toBe(
904
+ PERSONALISATION.aboutSection.descriptionShort,
905
+ );
906
+ expect(personalised.items.map((item) => item.question)).toEqual([
907
+ sourceItems[0].itemTitle,
908
+ sourceItems[1].itemTitle,
909
+ ]);
910
+ expect(personalised.items.map((item) => item.answer)).toEqual([
911
+ sourceItems[0].itemDescription,
912
+ sourceItems[1].itemDescription,
913
+ ]);
914
+ });
915
+
863
916
  test('applyUserPersonalisationToBrandPageModelAsync should not personlise certain element if override has `none`', async () => {
864
917
  // Arrange
865
918
  const textContent = {
@@ -38,6 +38,7 @@ import type {
38
38
  LogoTemplateImageModel,
39
39
  ShopContent,
40
40
  BookingSectionContent,
41
+ FaqSectionContent,
41
42
  TextShapeItem,
42
43
  GettyVideoMedia,
43
44
  AbstractMedia,
@@ -94,6 +95,7 @@ import type {
94
95
  ShapesSectionViewModel,
95
96
  ShopViewModel,
96
97
  BookingSectionViewModel,
98
+ FaqSectionViewModel,
97
99
  GettyVideoViewModel,
98
100
  PageStylesViewModel,
99
101
  BackgroundStylesViewModel,
@@ -1080,6 +1082,27 @@ const mapToTestimonialSectionViewModel = (
1080
1082
  );
1081
1083
  };
1082
1084
 
1085
+ const mapToFaqSectionViewModel = (
1086
+ content: FaqSectionContent,
1087
+ styles: PageStyles,
1088
+ ): FaqSectionViewModel => {
1089
+ return applyViewModelTextStyles(
1090
+ {
1091
+ ...content,
1092
+ role: content.type,
1093
+ type: 'faq-section',
1094
+ // No `color` pre-seed, as in the testimonial mapper: it would read as an override.
1095
+ titleStyle: { ...content.titleStyle },
1096
+ descriptionStyle: { ...content.descriptionStyle },
1097
+ questionStyle: { ...content.questionStyle },
1098
+ answerStyle: { ...content.answerStyle },
1099
+ items: content.items ?? [],
1100
+ isFullWidth: true,
1101
+ },
1102
+ styles,
1103
+ );
1104
+ };
1105
+
1083
1106
  const mapToSocialLinksViewModel = (
1084
1107
  content: SocialLinksContent,
1085
1108
  styles: PageStyles,
@@ -1570,6 +1593,9 @@ export const mapToViewModel =
1570
1593
  styles,
1571
1594
  );
1572
1595
 
1596
+ case 'faq-section':
1597
+ return mapToFaqSectionViewModel(content as FaqSectionContent, styles);
1598
+
1573
1599
  case 'about-section':
1574
1600
  return mapToAboutSectionViewModel(
1575
1601
  content as AboutSectionContent,
@@ -35,6 +35,7 @@ import type {
35
35
  LogoTemplateImageModel,
36
36
  CookieOptions,
37
37
  BookingSectionContent,
38
+ FaqSectionContent,
38
39
  MediaTypes,
39
40
  TextStyles,
40
41
  BackgroundStyle,
@@ -67,7 +68,8 @@ export type ViewModelType =
67
68
  | 'social-links'
68
69
  | 'shapes-section'
69
70
  | 'shop-section'
70
- | 'booking-section';
71
+ | 'booking-section'
72
+ | 'faq-section';
71
73
 
72
74
  export interface ContentViewModel {
73
75
  id: string;
@@ -253,6 +255,11 @@ export interface BookingSectionViewModel
253
255
  isFullWidth: boolean;
254
256
  }
255
257
 
258
+ export interface FaqSectionViewModel
259
+ extends ContentViewModel, Omit<FaqSectionContent, 'type'> {
260
+ isFullWidth: boolean;
261
+ }
262
+
256
263
  export interface PageHeaderViewModel extends Omit<
257
264
  PageHeaderDesktop | PageHeaderMobile,
258
265
  | 'logoImage'
@@ -0,0 +1,9 @@
1
+ import type { FaqSectionContent } from '@brand-page';
2
+ import { FAQ_DISPLAY_STYLES } from '@brand-page/constants';
3
+ import type { VisibilityAssessor } from '../models';
4
+
5
+ // Icon and divider colours paint the accordion toggle and its item dividers;
6
+ // grid shows neither, so the fields have nothing to colour there.
7
+ export const faqAccordionColorFieldVisibilityAssessor: VisibilityAssessor<
8
+ FaqSectionContent | undefined
9
+ > = (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';
@@ -1,7 +1,7 @@
1
1
  // REL 1 Phase 1 / 1.5 — friendly chat copy keyed by the backend `code` field.
2
2
  //
3
3
  // Backend returns `{ error, code, message }` for known failure paths
4
- // (both HTTP responses and WebSocket build_error / server_error frames).
4
+ // (both HTTP responses and WebSocket build_error frames).
5
5
  // We look up the code first, then fall back to message → error → generic.
6
6
  // English-only for now; Phase 2 promotes this to proper i18n keys.
7
7
 
@@ -50,7 +50,7 @@ export function pickErrorMessage(error: unknown): string {
50
50
  * Pick a friendly chat message from a WebSocket error frame.
51
51
  *
52
52
  * Reads `msg.{code, message, error}` directly — the shape pushed by the
53
- * ai-pipelines build_error / server_error WebSocket frames.
53
+ * ai-pipelines build_error WebSocket frames.
54
54
  */
55
55
  export function pickWsErrorMessage(
56
56
  msg: ErrorPayload | undefined | null,
@@ -886,7 +886,7 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
886
886
  return;
887
887
  }
888
888
 
889
- if (msg.type === 'server_error' || msg.type === 'build_error') {
889
+ if (msg.type === 'build_error') {
890
890
  handleBuildError(msg);
891
891
 
892
892
  return;
@@ -999,7 +999,7 @@ export function useAiWebsiteBuilderChat(): UseAiChatResult {
999
999
  threadItems.value[messageIndex].isTyping = false;
1000
1000
 
1001
1001
  // Honour the isError flag set by error paths in callApiBuildAsync
1002
- // (apply-failure catch, server_error / build_error WS frames).
1002
+ // (apply-failure catch, build_error WS frames).
1003
1003
  // Without this, error text would render as a normal AI reply.
1004
1004
  if (result.isError) {
1005
1005
  threadItems.value[messageIndex].isError = true;
@@ -873,6 +873,8 @@ export const useRichTextEditor = (
873
873
  id: props.rawId,
874
874
  name: props.name,
875
875
  index: props.textItemIndex,
876
+ // An FAQ question's editor is bound to its item; Apply to all keeps that item's live doc.
877
+ itemId: props.item?.id,
876
878
  doc: sanitizeRteJson(editor.getJSON()),
877
879
  });
878
880
  };
@@ -35,8 +35,10 @@ import type {
35
35
  Content,
36
36
  ShopContent,
37
37
  BookingSectionContent,
38
+ FaqSectionContent,
38
39
  } from '@brand-page';
39
40
  import {
41
+ FAQ_DISPLAY_STYLES,
40
42
  SOCIAL_LINKS_ICON_DISPLAY_STYLES,
41
43
  BRAND_PAGE_TYPES,
42
44
  DIVIDER_STYLES,
@@ -82,6 +84,7 @@ import {
82
84
  VARIANT_DISPLAY_MODES,
83
85
  createInitialShopContent,
84
86
  createInitialBookingSectionContent,
87
+ createInitialFaqSectionContent,
85
88
  } from '../models';
86
89
  import * as uuid from 'uuid';
87
90
  import type {
@@ -122,6 +125,7 @@ import {
122
125
  cardFillVisibilityAssessor,
123
126
  mediaSectionItemsFieldTypeAssessor,
124
127
  dividerToggleFieldVisibilityAssessor,
128
+ faqAccordionColorFieldVisibilityAssessor,
125
129
  shapeSectionItemsFieldTypeAssessor,
126
130
  colorReplacementVisibilityTypeAssessor,
127
131
  colorReplacementProfileVisibilityTypeAssessor,
@@ -147,6 +151,7 @@ import {
147
151
  import { socialLinksIconDisplayStyleConvertor } from '../convertors/social-links-icon-display-style.convertor';
148
152
  import { getTextMediaOptionsConverterByMediaType } from '../convertors/text-image-display-style.convertor';
149
153
  import { testimonialDisplayStyleConvertor } from '../convertors/testimonial-display-style-convertor';
154
+ import { faqDisplayStyleConvertor } from '../convertors/faq-display-style.convertor';
150
155
  import { pageValidator, urlValidator } from '../validators';
151
156
  import { imagesSectionAspectRatioVisibilityAssessor } from '../assessors/images-section-aspect-ratio-visibility.assessor';
152
157
  import {
@@ -167,7 +172,7 @@ import {
167
172
  brandPageOrbrandContactTypeVisibilityAssessor,
168
173
  brandSiteTypeVisibilityAssessor,
169
174
  } from '../assessors/brand-page-type-visibility.assessor';
170
- import { contentSettingsTr } from '@src/composables/useTranslate';
175
+ import { commonTr, contentSettingsTr } from '@src/composables/useTranslate';
171
176
  import type { GettyVideoMediaSelectedPayload } from '@shared/my-uploads/models';
172
177
 
173
178
  const MediaFieldNames = {
@@ -3289,6 +3294,121 @@ export const BOOKING_SECTION_SETTINGS_CONFIG =
3289
3294
  isLocked: false,
3290
3295
  });
3291
3296
 
3297
+ const FAQ_FIELD_GROUP_IDS = {
3298
+ settings: 'settings',
3299
+ items: 'items',
3300
+ style: 'style',
3301
+ } as const;
3302
+
3303
+ export const FAQ_SECTION_SETTINGS_CONFIG =
3304
+ (): ContentSettingsConfig<FaqSectionContent> => ({
3305
+ type: 'faq-section',
3306
+ category: 'general',
3307
+ createInitialContent: createInitialFaqSectionContent,
3308
+ displayMode: CONTENT_SETTINGS_DISPLAY_MODES.focused,
3309
+ defaultIconName: 'question-circle-filled',
3310
+ displayName: contentSettingsTr(`faqSectionDisplayName`),
3311
+ fieldGroups: [
3312
+ {
3313
+ id: FAQ_FIELD_GROUP_IDS.settings,
3314
+ displayName: contentSettingsTr(`settingsDisplayName`),
3315
+ isCollapsed: false,
3316
+ },
3317
+ {
3318
+ id: FAQ_FIELD_GROUP_IDS.items,
3319
+ displayName: contentSettingsTr(`faqItemsDisplayName`),
3320
+ isCollapsed: false,
3321
+ },
3322
+ {
3323
+ id: FAQ_FIELD_GROUP_IDS.style,
3324
+ displayName: contentSettingsTr(`styleDisplayName`),
3325
+ isCollapsed: true,
3326
+ },
3327
+ ],
3328
+ fields: {
3329
+ titleStyle: DEFAULT_TITLE_STYLE_SETTINGS_FILED_WITH_TITLE(),
3330
+ descriptionStyle: DEFAULT_DESCRIPTION_STYLE_FILED(),
3331
+ // Edited in each item's editor (FaqItemsField), not as section fields.
3332
+ questionStyle: undefined,
3333
+ answerStyle: undefined,
3334
+ title: {
3335
+ type: 'text',
3336
+ placeholder: contentSettingsTr(`titlePlaceholder`),
3337
+ title: contentSettingsTr(`titleTitle`),
3338
+ groupId: FAQ_FIELD_GROUP_IDS.settings,
3339
+ maxLength: 200,
3340
+ },
3341
+ titleOverride: {
3342
+ type: 'personalisation-override',
3343
+ groupId: FAQ_FIELD_GROUP_IDS.settings,
3344
+ visibilityAssessor: (c, b) =>
3345
+ personalisationOverrideVisibility(c, b, 'title'),
3346
+ },
3347
+ description: {
3348
+ type: 'textarea',
3349
+ placeholder: contentSettingsTr(`descriptionPlaceholder`),
3350
+ title: contentSettingsTr(`descriptionTitle`),
3351
+ groupId: FAQ_FIELD_GROUP_IDS.settings,
3352
+ maxLength: 1000,
3353
+ },
3354
+ descriptionOverride: {
3355
+ type: 'personalisation-override',
3356
+ groupId: FAQ_FIELD_GROUP_IDS.settings,
3357
+ visibilityAssessor: (c, b) =>
3358
+ personalisationOverrideVisibility(c, b, 'description'),
3359
+ },
3360
+ // FaqItemsField owns the question/answer inputs and the FAQ_MAX_ITEMS cap.
3361
+ items: {
3362
+ type: 'faq-items',
3363
+ defaultValue: [],
3364
+ groupId: FAQ_FIELD_GROUP_IDS.items,
3365
+ },
3366
+ displayStyle: {
3367
+ type: 'radio',
3368
+ role: 'multi',
3369
+ defaultValue: FAQ_DISPLAY_STYLES.centered,
3370
+ title: contentSettingsTr(`displayStyleTitle`),
3371
+ optionsConvertor: faqDisplayStyleConvertor,
3372
+ groupId: FAQ_FIELD_GROUP_IDS.style,
3373
+ variant: 'icon',
3374
+ },
3375
+ ...PADDING_CONTROL_FIELDS(FAQ_FIELD_GROUP_IDS.style),
3376
+ iconColor: {
3377
+ type: 'color',
3378
+ groupId: FAQ_FIELD_GROUP_IDS.style,
3379
+ defaultValue: {},
3380
+ isInline: true,
3381
+ showToggle: false,
3382
+ disableTransparent: true,
3383
+ visibilityAssessor: faqAccordionColorFieldVisibilityAssessor,
3384
+ title: commonTr(`iconColor`),
3385
+ valueConvertor: colorConvertor,
3386
+ },
3387
+ // Transparent allowed on purpose (it hides the line), unlike the Divider section's field.
3388
+ dividerColor: {
3389
+ type: 'color',
3390
+ groupId: FAQ_FIELD_GROUP_IDS.style,
3391
+ defaultValue: {},
3392
+ isInline: true,
3393
+ showToggle: false,
3394
+ visibilityAssessor: faqAccordionColorFieldVisibilityAssessor,
3395
+ title: contentSettingsTr(`dividerColorTitle`),
3396
+ valueConvertor: backgroundColorConvertor,
3397
+ },
3398
+ backgroundStyle: {
3399
+ type: 'color',
3400
+ groupId: FAQ_FIELD_GROUP_IDS.style,
3401
+ defaultValue: {},
3402
+ isInline: true,
3403
+ showToggle: false,
3404
+ title: contentSettingsTr(`backgroundColorTitle`),
3405
+ valueConvertor: backgroundColorConvertor,
3406
+ },
3407
+ },
3408
+ isEnabled: true,
3409
+ isLocked: false,
3410
+ });
3411
+
3292
3412
  export const CONTENT_SETTINGS_CONFIGS = (): Record<
3293
3413
  ContentType,
3294
3414
  ContentSettingsConfig<any>
@@ -3325,4 +3445,5 @@ export const CONTENT_SETTINGS_CONFIGS = (): Record<
3325
3445
  'shapes-section': SHAPES_SECTION_SETTINGS_CONFIG(),
3326
3446
  'shop-section': SHOP_SECTION_SETTINGS_CONFIG(),
3327
3447
  'booking-section': BOOKING_SECTION_SETTINGS_CONFIG(),
3448
+ 'faq-section': FAQ_SECTION_SETTINGS_CONFIG(),
3328
3449
  });
@@ -0,0 +1,22 @@
1
+ import { FAQ_DISPLAY_STYLES } from '@brand-page';
2
+ import { faqDisplayStyleConvertor } from '../convertors/faq-display-style.convertor';
3
+
4
+ describe('faqDisplayStyleConvertor', () => {
5
+ test.each([
6
+ [FAQ_DISPLAY_STYLES.centered, 'center'],
7
+ [FAQ_DISPLAY_STYLES.split, 'left'],
8
+ [FAQ_DISPLAY_STYLES.grid, 'center'],
9
+ ])(
10
+ 'switching to %s only moves the display style and heading alignment',
11
+ (value, textAlign) => {
12
+ const config = faqDisplayStyleConvertor.convert(value);
13
+ const result = faqDisplayStyleConvertor.convertBack(config);
14
+
15
+ expect(result).toEqual({
16
+ displayStyle: value,
17
+ titleStyle: { textAlign },
18
+ descriptionStyle: { textAlign },
19
+ });
20
+ },
21
+ );
22
+ });
@@ -1,5 +1,6 @@
1
1
  import type {
2
2
  ButtonContent,
3
+ FaqItem,
3
4
  PersonalisationMappingType,
4
5
  TestimonialItems,
5
6
  TextItem,
@@ -38,10 +39,10 @@ export const DEFAULT_PERSONALISATION_MAPPING: ContentPersonalisationMapping<any>
38
39
  };
39
40
 
40
41
  export const TEXT_MEDIA_ITEMS_PERSONALISATION_MAPPING: ContentPersonalisationMapping<
41
- TextMediaItem & TestimonialItems & TextItem
42
+ TextMediaItem & TestimonialItems & TextItem & FaqItem
42
43
  > = {
43
- itemTitle: ['title', 'imageTitle', 'name'],
44
- itemDescription: ['paragraph', 'testimonials', 'text'],
44
+ itemTitle: ['title', 'imageTitle', 'name', 'question'],
45
+ itemDescription: ['paragraph', 'testimonials', 'text', 'answer'],
45
46
  itemDescriptionShort: ['position'],
46
47
  imageUrls: ['imageUrl'],
47
48
  };
@@ -53,6 +54,7 @@ export const TEXT_MEDIA_CONTENT_TYPES: PersonalisationMappingType[] = [
53
54
  'text-media-items',
54
55
  'image-gallery',
55
56
  'text',
57
+ 'faq-section',
56
58
  ];
57
59
 
58
60
  export const PERSONALISATION_MAPPINGS: Partial<
@@ -0,0 +1,61 @@
1
+ import type { ButtonGroupConfig, ValueConvertor } from '../models';
2
+ import { FAQ_DISPLAY_STYLES } from '@brand-page/constants';
3
+ import type { FaqSectionContent } from '@brand-page/models';
4
+
5
+ const ICON_VIEW_BOX = '0 0 96 56';
6
+
7
+ export const faqDisplayStyleConvertor: ValueConvertor<
8
+ string | null,
9
+ ButtonGroupConfig,
10
+ Partial<FaqSectionContent>
11
+ > = {
12
+ convertBackToMultipleValues: true,
13
+ convert(value: string | null): ButtonGroupConfig {
14
+ return {
15
+ options: [
16
+ // An empty title suppresses ButtonGroup's label-under-icon paragraph.
17
+ {
18
+ title: '',
19
+ value: FAQ_DISPLAY_STYLES.centered,
20
+ isSelected: value === FAQ_DISPLAY_STYLES.centered,
21
+ iconName: 'display-style-faq-1',
22
+ iconViewBox: ICON_VIEW_BOX,
23
+ dataAttribute: 'data-test-btn-faq-centered',
24
+ },
25
+ {
26
+ title: '',
27
+ value: FAQ_DISPLAY_STYLES.split,
28
+ isSelected: value === FAQ_DISPLAY_STYLES.split,
29
+ iconName: 'display-style-faq-2',
30
+ iconViewBox: ICON_VIEW_BOX,
31
+ dataAttribute: 'data-test-btn-faq-split',
32
+ },
33
+ {
34
+ title: '',
35
+ value: FAQ_DISPLAY_STYLES.grid,
36
+ isSelected: value === FAQ_DISPLAY_STYLES.grid,
37
+ iconName: 'display-style-faq-3',
38
+ iconViewBox: ICON_VIEW_BOX,
39
+ dataAttribute: 'data-test-btn-faq-grid',
40
+ },
41
+ ],
42
+ // Label-less buttons only fill their slot in ButtonGroup's grid mode.
43
+ columns: 3,
44
+ };
45
+ },
46
+
47
+ // The heading sits left beside the accordion in split, centred above it otherwise.
48
+ convertBack(config: ButtonGroupConfig): Partial<FaqSectionContent> {
49
+ const displayStyle =
50
+ config.options.find((v) => v.isSelected)?.value ??
51
+ FAQ_DISPLAY_STYLES.centered;
52
+ const textAlign =
53
+ displayStyle === FAQ_DISPLAY_STYLES.split ? 'left' : 'center';
54
+
55
+ return {
56
+ displayStyle,
57
+ titleStyle: { textAlign },
58
+ descriptionStyle: { textAlign },
59
+ };
60
+ },
61
+ };
@@ -86,6 +86,7 @@ export const ITEM_FIELD_TYPES = {
86
86
  'color-replacements': 'color-replacements',
87
87
  'testimonial-items': 'testimonial-items',
88
88
  'text-items': 'text-items',
89
+ 'faq-items': 'faq-items',
89
90
  'page-dropdown': 'page-dropdown',
90
91
  'personalisation-override': 'personalisation-override',
91
92
  } as const;
@@ -699,6 +699,12 @@ describe('add content — every text starts on its pinned role', () => {
699
699
  descriptionStyle: TEXT_STYLE_TYPES.paragraph2,
700
700
  buttonTextStyle: TEXT_STYLE_TYPES.button,
701
701
  },
702
+ 'faq-section': {
703
+ titleStyle: TEXT_STYLE_TYPES.heading4,
704
+ descriptionStyle: TEXT_STYLE_TYPES.paragraph2,
705
+ questionStyle: TEXT_STYLE_TYPES.heading5,
706
+ answerStyle: TEXT_STYLE_TYPES.paragraph2,
707
+ },
702
708
  };
703
709
 
704
710
  // Mirrors getEnabledContentSettingsConfigs's website-type filter (the feature-flag term left out,
@@ -24,6 +24,7 @@ import {
24
24
  SENSITIVE_CONTENT_TYPES,
25
25
  CONTACT_FORM_LAYOUT_DEFAULT_PADDING,
26
26
  TESTIMONIAL_DEFAULT_PADDING,
27
+ FAQ_DISPLAY_STYLES,
27
28
  } from '@brand-page';
28
29
  import type {
29
30
  ButtonContent,
@@ -52,6 +53,7 @@ import type {
52
53
  ShopContent,
53
54
  BookingSectionContent,
54
55
  TextStyleDeclaration,
56
+ FaqSectionContent,
55
57
  TextStyleType,
56
58
  } from '@brand-page';
57
59
  import * as uuid from 'uuid';
@@ -683,6 +685,55 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
683
685
  };
684
686
  };
685
687
 
688
+ export const createInitialFaqSectionContent: CreateInitialContentFunction<
689
+ FaqSectionContent
690
+ > = (options?: CreateInitialContentOptions) => {
691
+ const applyAutoScale = options?.brandPageType === BRAND_PAGE_TYPES.brandSite;
692
+
693
+ return {
694
+ id: uuid.v4(),
695
+ type: 'faq-section',
696
+ title: rteDoc(contentSettingsTr(`defaultFaqTitle`)),
697
+ description: rteDoc(contentSettingsTr(`defaultFaqDescription`)),
698
+ displayStyle: FAQ_DISPLAY_STYLES.centered,
699
+ topPadding: 32,
700
+ bottomPadding: 32,
701
+ // One sample item; the design's four are only there to show a longer list.
702
+ items: [
703
+ {
704
+ id: uuid.v4(),
705
+ question: rteDoc(contentSettingsTr(`defaultFaqQuestion`)),
706
+ answer: rteDoc(contentSettingsTr(`defaultFaqAnswer`)),
707
+ },
708
+ ],
709
+ // Every question shares one style and every answer another (closest to the old Headings and
710
+ // Paragraphs); a question's own formatting lives in its doc.
711
+ questionStyle: {
712
+ applyAutoScale,
713
+ textStyleType: TEXT_STYLE_TYPES.heading5,
714
+ textAlign: 'left',
715
+ },
716
+ answerStyle: {
717
+ applyAutoScale,
718
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
719
+ textAlign: 'left',
720
+ },
721
+ titleStyle: {
722
+ applyAutoScale,
723
+ textStyleType: TEXT_STYLE_TYPES.heading4,
724
+ textAlign: 'center',
725
+ },
726
+ descriptionStyle: {
727
+ applyAutoScale,
728
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
729
+ textAlign: 'center',
730
+ },
731
+ backgroundStyle: {},
732
+ iconColor: {},
733
+ dividerColor: {},
734
+ };
735
+ };
736
+
686
737
  export const createInitialImagesSectionContent: CreateInitialContentFunction<
687
738
  ImagesSectionContent
688
739
  > = (options?: CreateInitialContentOptions) => {