@designcrowd/library.brand-page 5.18.6 → 5.18.7-ast-padding-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 (218) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DlYq1LAT.js → CreatedOnBrandCrowd-de-de-Cn8zNuGM.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BssRIQqn.js → CreatedOnBrandCrowd-en-us-CP8xAFc-.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BGF9pptH.js → CreatedOnBrandCrowd-es-es-Ds8NijwP.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-Caupqu2Z.js → CreatedOnBrandCrowd-fr-ca-BiVV_7lj.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-Caupqu2Z.js → CreatedOnBrandCrowd-fr-fr-BiVV_7lj.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-s9q4uJ4u.js → CreatedOnBrandCrowd-pt-br-CjjrYojo.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-s9q4uJ4u.js → CreatedOnBrandCrowd-pt-pt-CjjrYojo.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-UnYnZbA7.js → CreatedOnDcom-de-de-ChR5jvlP.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-rDv6H12L.js → CreatedOnDcom-en-us-C4rO1BMA.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DKPLaT6o.js → CreatedOnDcom-es-es-DxGMS6JK.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DAv34bG7.js → CreatedOnDcom-fr-ca-n31u4t7u.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DsOHnS8q.js → CreatedOnDcom-fr-fr-gwdsX7YV.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-DpjDBCLj.js → CreatedOnDcom-pt-br-iZjFp--s.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-rFG0unf1.js → CreatedOnDcom-pt-pt-B3Z3-RLC.js} +1 -1
  15. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +4 -0
  16. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +8 -4
  17. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.d.ts +4 -0
  18. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.js +4 -0
  19. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +4 -0
  20. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +4 -1
  21. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +4 -0
  22. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +4 -0
  23. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +4 -0
  24. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +4 -1
  25. package/lib/src/brand-page/components/video/Video.mixin.d.ts +4 -0
  26. package/lib/src/brand-page/components/video/Video.mixin.js +4 -0
  27. package/lib/src/brand-page/constants/misc.constants.d.ts +26 -0
  28. package/lib/src/brand-page/constants/misc.constants.js +42 -0
  29. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  30. package/lib/src/brand-page/utils/content-padding.util.d.ts +13 -0
  31. package/lib/src/brand-page/utils/content-padding.util.js +10 -0
  32. package/lib/src/brand-page/utils/index.d.ts +1 -0
  33. package/lib/src/brand-page/utils/index.js +1 -0
  34. package/lib/src/brand-page/utils/migration/migration-17.d.ts +2 -0
  35. package/lib/src/brand-page/utils/migration/migration-17.js +48 -0
  36. package/lib/src/brand-page/utils/migration.util.js +10 -0
  37. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +7 -2
  38. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +2 -0
  39. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +19 -2
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +8 -0
  41. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +7 -2
  42. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +1 -0
  43. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +104 -2
  44. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +5 -0
  45. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +7 -2
  46. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +3 -0
  47. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.js +11 -0
  48. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +7 -2
  49. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +7 -2
  50. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +7 -2
  51. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +7 -2
  52. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +9 -0
  53. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +21 -1
  54. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +20 -0
  55. package/lib/src/brand-page-maker/composables/useEventTracker.js +17 -0
  56. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.d.ts +17 -0
  57. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.js +25 -0
  58. package/lib/src/brand-page-maker/constants/config-settings-constant.js +38 -0
  59. package/lib/src/brand-page-maker/convertors/about-display-style.convertor.js +9 -1
  60. package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +7 -1
  61. package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +6 -1
  62. package/lib/src/brand-page-maker/models/content-settings.js +36 -2
  63. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +12 -0
  64. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +41 -2
  65. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +307 -5
  66. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +86 -0
  67. package/lib/src/brand-page-maker/stores/history/history-store.js +501 -0
  68. package/lib/src/brand-page-maker/stores/logo-store/logo-store.d.ts +1 -0
  69. package/lib/src/brand-page-maker/stores/user/user-store.js +1 -0
  70. package/lib/src/bundled-translations-BUyt4scr.js +175 -0
  71. package/lib/src/bundled-translations.de-DE-DEw_OVai.js +175 -0
  72. package/lib/src/bundled-translations.es-ES-CFKWmkgY.js +175 -0
  73. package/lib/src/bundled-translations.fr-CA-DCl5LJS4.js +175 -0
  74. package/lib/src/bundled-translations.fr-FR-B5BjgllA.js +175 -0
  75. package/lib/src/bundled-translations.pt-BR-5PWpMPuM.js +175 -0
  76. package/lib/src/bundled-translations.pt-PT-B9_wN0HR.js +175 -0
  77. package/lib/src/bundles/bundled-translations.de-DE.json +5 -1
  78. package/lib/src/bundles/bundled-translations.es-ES.json +5 -1
  79. package/lib/src/bundles/bundled-translations.fr-CA.json +5 -1
  80. package/lib/src/bundles/bundled-translations.fr-FR.json +5 -1
  81. package/lib/src/bundles/bundled-translations.json +5 -1
  82. package/lib/src/bundles/bundled-translations.pt-BR.json +5 -1
  83. package/lib/src/bundles/bundled-translations.pt-PT.json +5 -1
  84. package/lib/src/constants/ui.d.ts +1 -0
  85. package/lib/src/css/library.brand-page-brandCrowd.min.css +128 -131
  86. package/lib/src/css/library.brand-page-brandPage.min.css +128 -132
  87. package/lib/src/css/library.brand-page-designCom.min.css +128 -131
  88. package/lib/src/css/library.brand-page-preview.min.css +128 -131
  89. package/lib/src/index.mjs +1 -1
  90. package/lib/src/{lib-ngdDRkSL.js → lib-CIj_C38s.js} +36378 -35591
  91. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +104 -2
  92. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +5 -0
  93. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.stories.js +1 -0
  94. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +37 -2
  95. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +28 -0
  96. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +19 -2
  97. package/lib/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.d.ts +3 -0
  98. package/lib/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.js +19 -2
  99. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +12 -0
  100. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.js +18 -8
  101. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +67 -0
  102. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.js +6 -0
  103. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +9 -0
  104. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +12 -0
  105. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +19 -0
  106. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +11 -0
  107. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +10 -2
  108. package/lib/src/shared/logo-settings/store/editable-logo-store.d.ts +5 -1
  109. package/lib/src/shared/logo-settings/store/editable-logo-store.js +31 -0
  110. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +40 -2
  111. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +24 -2
  112. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +23 -2
  113. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +16 -0
  114. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +23 -2
  115. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +16 -0
  116. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  117. package/package.json +1 -1
  118. package/src/brand-page/components/about-section/AboutSection.vue +10 -4
  119. package/src/brand-page/components/banner-section/BannerSection.vue +11 -4
  120. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  121. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +12 -6
  122. package/src/brand-page/components/contact-form/ContactForm.vue +105 -104
  123. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  124. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  125. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  126. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  127. package/src/brand-page/components/map/Map.vue +5 -1
  128. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  129. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  130. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  131. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  132. package/src/brand-page/components/shop/Shop.vue +7 -2
  133. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  134. package/src/brand-page/components/text/Text.vue +12 -5
  135. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  136. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  137. package/src/brand-page/components/video/Video.vue +1 -1
  138. package/src/brand-page/constants/misc.constants.ts +48 -0
  139. package/src/brand-page/models/content.model.ts +2 -0
  140. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +9 -3
  141. package/src/brand-page/utils/content-padding.util.test.ts +29 -0
  142. package/src/brand-page/utils/content-padding.util.ts +13 -0
  143. package/src/brand-page/utils/index.ts +1 -0
  144. package/src/brand-page/utils/migration/migration-17.ts +65 -0
  145. package/src/brand-page/utils/migration.util.test.ts +195 -0
  146. package/src/brand-page/utils/migration.util.ts +11 -0
  147. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +9 -0
  148. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +2 -3
  149. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +1 -0
  150. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +5 -0
  151. package/src/brand-page-maker/components/cookie-collection/CookieSettings.vue +18 -17
  152. package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.ts +13 -0
  153. package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.vue +26 -3
  154. package/src/brand-page-maker/components/quick-link-bar/RedoButton.vue +66 -0
  155. package/src/brand-page-maker/components/quick-link-bar/UndoButton.vue +66 -0
  156. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.de-DE.json +6 -4
  157. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.es-ES.json +6 -4
  158. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.fr-CA.json +6 -4
  159. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.fr-FR.json +6 -4
  160. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.json +3 -1
  161. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.pt-BR.json +6 -4
  162. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.pt-PT.json +6 -4
  163. package/src/brand-page-maker/components/quick-link-bar/undo-redo-buttons.test.ts +116 -0
  164. package/src/brand-page-maker/components/save-contact/SaveContact.vue +12 -19
  165. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +10 -0
  166. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +28 -1
  167. package/src/brand-page-maker/composables/useEventTracker.ts +29 -0
  168. package/src/brand-page-maker/composables/useUndoRedoFlag.ts +30 -0
  169. package/src/brand-page-maker/constants/config-settings-constant.ts +44 -0
  170. package/src/brand-page-maker/convertors/about-display-style.convertor.ts +10 -0
  171. package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +8 -0
  172. package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +50 -0
  173. package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +8 -0
  174. package/src/brand-page-maker/models/content-settings.ts +38 -2
  175. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +334 -0
  176. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +371 -4
  177. package/src/brand-page-maker/stores/history/history-store.test.ts +1120 -0
  178. package/src/brand-page-maker/stores/history/history-store.ts +666 -0
  179. package/src/brand-page-maker/stores/logo-store/logo-store.ts +5 -0
  180. package/src/brand-page-maker/stores/user/user-store.ts +1 -0
  181. package/src/bundles/bundled-translations.de-DE.json +5 -1
  182. package/src/bundles/bundled-translations.es-ES.json +5 -1
  183. package/src/bundles/bundled-translations.fr-CA.json +5 -1
  184. package/src/bundles/bundled-translations.fr-FR.json +5 -1
  185. package/src/bundles/bundled-translations.json +5 -1
  186. package/src/bundles/bundled-translations.pt-BR.json +5 -1
  187. package/src/bundles/bundled-translations.pt-PT.json +5 -1
  188. package/src/constants/ui.ts +1 -0
  189. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +5 -0
  190. package/src/shared/content-settings/components/content-settings/ContentSettings.stories.ts +1 -0
  191. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +2 -0
  192. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +2 -0
  193. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +2 -0
  194. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +2 -0
  195. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  196. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +2 -0
  197. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +2 -0
  198. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
  199. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.ts +19 -2
  200. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.vue +1 -1
  201. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
  202. package/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.ts +26 -10
  203. package/src/shared/content-settings/components/logo-selection-field/LogoSelection.vue +63 -48
  204. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +4 -0
  205. package/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.ts +7 -0
  206. package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +9 -0
  207. package/src/shared/content-settings/components/text-field/TextField.vue +1 -0
  208. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +33 -4
  209. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +11 -0
  210. package/src/shared/logo-settings/store/editable-logo-store.ts +42 -1
  211. package/src/utils/minify-brand-page-metadata.ts +11 -1
  212. package/lib/src/bundled-translations-B5Fkt3qd.js +0 -175
  213. package/lib/src/bundled-translations.de-DE-DpdVePM9.js +0 -175
  214. package/lib/src/bundled-translations.es-ES-BsIcrzZF.js +0 -175
  215. package/lib/src/bundled-translations.fr-CA-G1XCp2Qh.js +0 -175
  216. package/lib/src/bundled-translations.fr-FR-BdwLXOnB.js +0 -175
  217. package/lib/src/bundled-translations.pt-BR-Bvn5ePe7.js +0 -175
  218. package/lib/src/bundled-translations.pt-PT-CDtkb2k1.js +0 -175
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "Mi página web:",
1128
1128
  "copyButton": "Copiar",
1129
- "copiedButton": "¡Copiado!"
1129
+ "copiedButton": "¡Copiado!",
1130
+ "undoLabel": "Deshacer",
1131
+ "redoLabel": "Rehacer"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Permite que los visitantes guarden tu información de contacto al ver tu tarjeta de visita digital.",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Color de relleno del icono",
1528
1530
  "iconBackgroundColorTitle": "Color de fondo del icono",
1529
1531
  "paddingTitle": "Relleno",
1532
+ "topPaddingTitle": "Relleno superior",
1533
+ "bottomPaddingTitle": "Relleno inferior",
1530
1534
  "dividerStyleTitle": "Estilo del divisor",
1531
1535
  "dividerColorTitle": "Color del separador",
1532
1536
  "addItemTitle": "Añadir artículo",
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "Ma page Web :",
1128
1128
  "copyButton": "Copier",
1129
- "copiedButton": "Copié !"
1129
+ "copiedButton": "Copié !",
1130
+ "undoLabel": "Annuler",
1131
+ "redoLabel": "Rétablir"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Permettez aux visiteurs d'enregistrer vos coordonnées lorsqu'ils consultent votre carte professionnelle numérique",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1528
1530
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1529
1531
  "paddingTitle": "Marges intérieures",
1532
+ "topPaddingTitle": "Marge intérieure supérieure",
1533
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1530
1534
  "dividerStyleTitle": "Style de séparateur",
1531
1535
  "dividerColorTitle": "Couleur du séparateur",
1532
1536
  "addItemTitle": "Ajouter un article",
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "Ma page Web :",
1128
1128
  "copyButton": "Copier",
1129
- "copiedButton": "Copié !"
1129
+ "copiedButton": "Copié !",
1130
+ "undoLabel": "Annuler",
1131
+ "redoLabel": "Rétablir"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Permettez aux visiteurs d'enregistrer vos coordonnées lorsqu'ils consultent votre carte de visite numérique",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1528
1530
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1529
1531
  "paddingTitle": "Marges intérieures",
1532
+ "topPaddingTitle": "Marges intérieures supérieures",
1533
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1530
1534
  "dividerStyleTitle": "Style de séparateur",
1531
1535
  "dividerColorTitle": "Couleur du séparateur",
1532
1536
  "addItemTitle": "Ajouter un article",
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "My web page:",
1128
1128
  "copyButton": "Copy",
1129
- "copiedButton": "Copied!"
1129
+ "copiedButton": "Copied!",
1130
+ "undoLabel": "Undo",
1131
+ "redoLabel": "Redo"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Let visitors save your contact information when they view your Digital Business Card",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Icon fill color",
1528
1530
  "iconBackgroundColorTitle": "Icon background color",
1529
1531
  "paddingTitle": "Padding",
1532
+ "topPaddingTitle": "Top padding",
1533
+ "bottomPaddingTitle": "Bottom padding",
1530
1534
  "dividerStyleTitle": "Divider Style",
1531
1535
  "dividerColorTitle": "Divider color",
1532
1536
  "addItemTitle": "Add Item",
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "Minha página web:",
1128
1128
  "copyButton": "Copiar",
1129
- "copiedButton": "Copiado!"
1129
+ "copiedButton": "Copiado!",
1130
+ "undoLabel": "Desfazer",
1131
+ "redoLabel": "Refazer"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Permita que os visitantes salvem suas informações de contato quando visualizarem seu cartão de visita digital",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1528
1530
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1529
1531
  "paddingTitle": "Preenchimento",
1532
+ "topPaddingTitle": "Preenchimento superior",
1533
+ "bottomPaddingTitle": "Preenchimento inferior",
1530
1534
  "dividerStyleTitle": "Estilo do separador",
1531
1535
  "dividerColorTitle": "Cor do separador",
1532
1536
  "addItemTitle": "Adicionar item",
@@ -1126,7 +1126,9 @@
1126
1126
  "quickLinkBar": {
1127
1127
  "myWebPageLabel": "A minha página Web:",
1128
1128
  "copyButton": "Copiar",
1129
- "copiedButton": "Copiado!"
1129
+ "copiedButton": "Copiado!",
1130
+ "undoLabel": "Desfazer",
1131
+ "redoLabel": "Refazer"
1130
1132
  },
1131
1133
  "saveContactSettings": {
1132
1134
  "saveContentInfo": "Permita que os visitantes guardem a sua informação de contacto quando visualizarem o seu cartão de visita digital",
@@ -1527,6 +1529,8 @@
1527
1529
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1528
1530
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1529
1531
  "paddingTitle": "Preenchimento",
1532
+ "topPaddingTitle": "Preenchimento superior",
1533
+ "bottomPaddingTitle": "Preenchimento inferior",
1530
1534
  "dividerStyleTitle": "Estilo do separador",
1531
1535
  "dividerColorTitle": "Cor do separador",
1532
1536
  "addItemTitle": "Adicionar Item",
@@ -14,6 +14,7 @@ export interface UIUserFeatures {
14
14
  canUseGettyVideos: boolean;
15
15
  canUseGoogleAdsense: boolean;
16
16
  googleAdsenseEnabled: boolean;
17
+ canUseUndoRedo: boolean;
17
18
  }
18
19
 
19
20
  export const TEMPLATE_FIRST_PAGE_NO = 1;
@@ -29,6 +29,7 @@ import {
29
29
  } from '@brand-page-maker/utils';
30
30
  import { useUiStyleSettingsStore } from '../../../style-settings/store';
31
31
  import { usePageNavigationStore } from '../../../../shared/page-navigation/store/page-navigation-store';
32
+ import { useHistoryStore } from '@brand-page-maker/stores/history/history-store';
32
33
 
33
34
  interface CategoryTab {
34
35
  category: string;
@@ -44,6 +45,7 @@ export default defineComponent({
44
45
  const styleSettingsStore = useUiStyleSettingsStore();
45
46
  const userStore = useBrandPageMakerUserStore();
46
47
  const eventTracker = useEventTracker();
48
+ const historyStore = useHistoryStore();
47
49
  const { externalEditor } = useExternalRichTextEditor();
48
50
 
49
51
  return {
@@ -65,6 +67,7 @@ export default defineComponent({
65
67
  pageSettingsStore,
66
68
  styleSettingsStore,
67
69
  eventTracker,
70
+ historyStore,
68
71
  externalEditor,
69
72
  };
70
73
  },
@@ -81,6 +84,8 @@ export default defineComponent({
81
84
  },
82
85
  mounted() {
83
86
  if (this.canUseRichTextEditor) {
87
+ // RTE rewrap on tab mount — fold into current head.
88
+ this.historyStore.mergeNextMutation();
84
89
  switchAllContentToRTE(
85
90
  this.pageSettingsStore,
86
91
  this.externalEditor,
@@ -32,6 +32,7 @@ export const Sample = (): any => {
32
32
  canUseGettyVideos: true,
33
33
  canUseGoogleAdsense: false,
34
34
  googleAdsenseEnabled: false,
35
+ canUseUndoRedo: false,
35
36
  };
36
37
 
37
38
  const pinia = setupStoryPinia();
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Farbe der Symbolfüllung",
114
114
  "iconBackgroundColorTitle": "Symbolhintergrundfarbe",
115
115
  "paddingTitle": "Polsterung",
116
+ "topPaddingTitle": "Polsterung oben",
117
+ "bottomPaddingTitle": "Polsterung unten",
116
118
  "dividerStyleTitle": "Trennlinienstil",
117
119
  "dividerColorTitle": "Trennlinienfarbe",
118
120
  "addItemTitle": "Artikel hinzufügen",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Color de relleno del icono",
114
114
  "iconBackgroundColorTitle": "Color de fondo del icono",
115
115
  "paddingTitle": "Relleno",
116
+ "topPaddingTitle": "Relleno superior",
117
+ "bottomPaddingTitle": "Relleno inferior",
116
118
  "dividerStyleTitle": "Estilo del divisor",
117
119
  "dividerColorTitle": "Color del separador",
118
120
  "addItemTitle": "Añadir artículo",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
114
114
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
115
115
  "paddingTitle": "Marges intérieures",
116
+ "topPaddingTitle": "Marge intérieure supérieure",
117
+ "bottomPaddingTitle": "Marges intérieures inférieures",
116
118
  "dividerStyleTitle": "Style de séparateur",
117
119
  "dividerColorTitle": "Couleur du séparateur",
118
120
  "addItemTitle": "Ajouter un article",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
114
114
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
115
115
  "paddingTitle": "Marges intérieures",
116
+ "topPaddingTitle": "Marges intérieures supérieures",
117
+ "bottomPaddingTitle": "Marges intérieures inférieures",
116
118
  "dividerStyleTitle": "Style de séparateur",
117
119
  "dividerColorTitle": "Couleur du séparateur",
118
120
  "addItemTitle": "Ajouter un article",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Icon fill color",
114
114
  "iconBackgroundColorTitle": "Icon background color",
115
115
  "paddingTitle": "Padding",
116
+ "topPaddingTitle": "Top padding",
117
+ "bottomPaddingTitle": "Bottom padding",
116
118
  "dividerStyleTitle": "Divider Style",
117
119
  "dividerColorTitle": "Divider color",
118
120
  "addItemTitle": "Add Item",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Cor de preenchimento do ícone",
114
114
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
115
115
  "paddingTitle": "Preenchimento",
116
+ "topPaddingTitle": "Preenchimento superior",
117
+ "bottomPaddingTitle": "Preenchimento inferior",
116
118
  "dividerStyleTitle": "Estilo do separador",
117
119
  "dividerColorTitle": "Cor do separador",
118
120
  "addItemTitle": "Adicionar item",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Cor de preenchimento do ícone",
114
114
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
115
115
  "paddingTitle": "Preenchimento",
116
+ "topPaddingTitle": "Preenchimento superior",
117
+ "bottomPaddingTitle": "Preenchimento inferior",
116
118
  "dividerStyleTitle": "Estilo do separador",
117
119
  "dividerColorTitle": "Cor do separador",
118
120
  "addItemTitle": "Adicionar Item",
@@ -56,7 +56,7 @@
56
56
  >
57
57
  <li
58
58
  v-for="(field, index) in fields"
59
- :key="`content-settings-item-field-${id}-${index}`"
59
+ :key="`content-settings-item-field-${id}-${field.name}`"
60
60
  class="tw-cursor-pointer"
61
61
  :class="{
62
62
  'tw-mb-3': index !== fields.length - 1,
@@ -76,6 +76,12 @@ export default defineComponent({
76
76
  schema: 'https',
77
77
  textIcon: 'globe',
78
78
  textIcons: [] as string[],
79
+ // Display-only override for the focused URL input. While a row is
80
+ // focused we strip the schema visually but MUST NOT mutate modelValue —
81
+ // doing so would land in the store and trigger a spurious undo/redo
82
+ // history entry between focus and blur (BP-5506).
83
+ focusedIndex: null as number | null,
84
+ focusedDisplay: '',
79
85
  }),
80
86
  computed: {
81
87
  items: {
@@ -162,15 +168,26 @@ export default defineComponent({
162
168
  },
163
169
 
164
170
  onFocusOverride(index: number, itemValue: string): void {
165
- const value = [...this.modelValue];
166
171
  const match = URL_RE.exec(itemValue);
167
172
 
168
173
  if (match) {
169
174
  this.schema = match[1];
170
- value[index][this.valuePropName] = match[2];
175
+ this.focusedIndex = index;
176
+ this.focusedDisplay = match[2];
177
+ } else {
178
+ this.focusedIndex = index;
179
+ this.focusedDisplay = itemValue;
171
180
  }
172
181
  },
182
+ inputDisplayValue(index: number): string {
183
+ return this.focusedIndex === index
184
+ ? this.focusedDisplay
185
+ : this.itemValue(index);
186
+ },
173
187
  onBlurOverride(index: number, itemValue: string): void {
188
+ this.focusedIndex = null;
189
+ this.focusedDisplay = '';
190
+
174
191
  const value = [...this.modelValue];
175
192
 
176
193
  let isValid = true;
@@ -70,7 +70,7 @@
70
70
  hasError[index],
71
71
  }"
72
72
  :placeholder="placeholderPrefix"
73
- :value="itemValue(index)"
73
+ :value="inputDisplayValue(index)"
74
74
  :data-test-tag="'image-url-text-input'"
75
75
  @focus="onFocusOverride(index, $event.target.value)"
76
76
  @blur="onBlurOverride(index, $event.target.value)"
@@ -25,8 +25,8 @@
25
25
  >
26
26
  <ul>
27
27
  <li
28
- v-for="(field, fieldIndex) in group.fields"
29
- :key="`content-settings-item-group-field-${id}-${group.id}-${fieldIndex}`"
28
+ v-for="field in group.fields"
29
+ :key="`content-settings-item-group-field-${id}-${group.id}-${field.name}`"
30
30
  >
31
31
  <ContentSettingsItemField
32
32
  v-if="
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref } from 'vue';
1
+ import { defineComponent, ref, watch } from 'vue';
2
2
  import type { PropType } from 'vue';
3
3
  import type { FormField } from '@brand-page';
4
4
  import { formFieldsTr } from '@src/composables/useTranslate';
@@ -49,18 +49,34 @@ export default defineComponent({
49
49
  },
50
50
  ];
51
51
 
52
+ const valueWithState = ref(
53
+ props.value.map((field) => ({
54
+ field,
55
+ isCollapsed: true,
56
+ isTypeDropdownOpen: false,
57
+ })),
58
+ );
59
+
60
+ // Re-sync when the store-bound value changes externally (e.g. undo/redo
61
+ // via history-store). Preserve per-row UI flags (isCollapsed,
62
+ // isTypeDropdownOpen) by index so an undo doesn't snap rows back to
63
+ // collapsed state.
64
+ watch(
65
+ () => props.value,
66
+ (newVal) => {
67
+ valueWithState.value = newVal.map((field, index) => ({
68
+ field,
69
+ isCollapsed: valueWithState.value[index]?.isCollapsed ?? true,
70
+ isTypeDropdownOpen:
71
+ valueWithState.value[index]?.isTypeDropdownOpen ?? false,
72
+ }));
73
+ },
74
+ );
75
+
52
76
  return {
53
77
  formFieldsTr,
54
78
  typeList,
55
- valueWithState: ref(
56
- props.value.map((field) => {
57
- return {
58
- field: field,
59
- isCollapsed: true,
60
- isTypeDropdownOpen: false,
61
- };
62
- }),
63
- ),
79
+ valueWithState,
64
80
  };
65
81
  },
66
82
  methods: {
@@ -59,7 +59,7 @@
59
59
  </template>
60
60
  </ButtonGroup>
61
61
  <div
62
- v-if="data.selectedOption === 1 && !containerStore.isPrePurchase"
62
+ v-if="selectedOption === 1 && !containerStore.isPrePurchase"
63
63
  class="tw-mb-4"
64
64
  >
65
65
  <div class="tw-flex tw-items-center">
@@ -90,7 +90,7 @@
90
90
  </div>
91
91
  </div>
92
92
  <div
93
- v-if="data.selectedOption === 1 && containerStore.isPrePurchase"
93
+ v-if="selectedOption === 1 && containerStore.isPrePurchase"
94
94
  class="tw-mb-4"
95
95
  >
96
96
  <LogoVariations
@@ -99,7 +99,7 @@
99
99
  @logo-variation-selected="onEditableLogoVariationSelected"
100
100
  />
101
101
  </div>
102
- <div v-if="data.selectedOption === 2" class="tw-mb-4">
102
+ <div v-if="selectedOption === 2" class="tw-mb-4">
103
103
  <UploadLogoModal>
104
104
  <template #main="mainProp">
105
105
  <LogoField
@@ -188,88 +188,100 @@ const logoTabs: Tab[] = reactive([
188
188
  ]);
189
189
 
190
190
  const data = reactive({
191
- selectedOption: 1,
192
- currentLogoIsByo: false,
191
+ // Sticky override for the "Logo / Upload" choice when isLogoVisible is true.
192
+ // Set when the user explicitly clicks Logo or Upload; cleared on undo/redo
193
+ // so the snapshot's logoDraftAsset.isByo decides instead. `null` means
194
+ // "derive from props".
195
+ manualVisibleChoice: null as null | 1 | 2,
193
196
  logoEditUrl: '',
194
197
  });
195
198
 
196
199
  const containerStore = useBrandPageContainerStore();
200
+ const logoStore = useLogoStore();
201
+ const editableLogoStore = useUiEditableLogoStore();
202
+ const sideBarStore = useUiSideBarStore();
203
+ const userStore = useBrandPageMakerUserStore();
204
+
205
+ const currentLogoIsByo = computed(() => {
206
+ const logoDraftAsset = logoStore.getLogoDraftAssetByToken(
207
+ props.selectedLogoDraftToken,
208
+ );
209
+
210
+ return !!logoDraftAsset?.isByo;
211
+ });
212
+
213
+ // Highlighted button. Derived purely from props + the user's most recent
214
+ // manual choice — never from event-handler-set local state. Undo/redo
215
+ // restores `props` from the history snapshot, which clears the manual
216
+ // override (see watcher below) so the highlight tracks whatever the
217
+ // snapshot says: None when isLogoVisible is false, Upload when the
218
+ // restored logo is BYO, Logo otherwise.
219
+ const selectedOption = computed<0 | 1 | 2>(() => {
220
+ if (!props.isLogoVisible) return 0;
221
+
222
+ if (currentLogoIsByo.value) return 2;
223
+
224
+ return data.manualVisibleChoice ?? 1;
225
+ });
197
226
 
198
227
  const options = computed<ButtonGroupOption[]>(() => {
199
228
  const optionList = [
200
229
  {
201
230
  label: commonTr('none'),
202
231
  value: '0',
203
- isSelected: data.selectedOption === 0,
232
+ isSelected: selectedOption.value === 0,
204
233
  iconName: `ban`,
205
234
  iconSize: 'sm',
206
235
  },
207
236
  {
208
237
  label: commonTr('logo'),
209
238
  value: '1',
210
- isSelected: data.selectedOption === 1,
239
+ isSelected: selectedOption.value === 1,
211
240
  iconName: `bc-mast`,
212
241
  iconSize: 'sm',
213
242
  },
214
243
  {
215
244
  label: commonTr('upload'),
216
245
  value: '2',
217
- isSelected: data.selectedOption === 2,
246
+ isSelected: selectedOption.value === 2,
218
247
  iconName: `upload-arrow`,
219
248
  iconSize: 'sm',
220
249
  },
221
250
  ];
222
251
 
223
- if (data.currentLogoIsByo) {
252
+ if (currentLogoIsByo.value) {
224
253
  return optionList.filter((x) => x.value !== '1');
225
254
  }
226
255
 
227
256
  return optionList;
228
257
  });
229
258
 
230
- const logoStore = useLogoStore();
231
- const editableLogoStore = useUiEditableLogoStore();
232
- const sideBarStore = useUiSideBarStore();
233
- const userStore = useBrandPageMakerUserStore();
234
-
235
- onMounted(() => updateState());
236
-
237
- watch(
238
- () => props.isLogoVisible,
239
- () => updateState(),
240
- );
241
-
242
- watch(
243
- () => props.selectedLogoDraftToken,
244
- () => updateState(),
245
- );
246
-
247
- watch(
248
- () => props.selectedLogo,
249
- () => updateState(),
250
- );
251
-
252
259
  const updateState = () => {
253
260
  const logoDraftAsset = logoStore.getLogoDraftAssetByToken(
254
261
  props.selectedLogoDraftToken,
255
262
  );
256
263
 
257
264
  data.logoEditUrl = logoDraftAsset?.logoEditUrl || '';
265
+ };
258
266
 
259
- if (!props.isLogoVisible) {
260
- data.selectedOption = 0;
261
- } else {
262
- if (logoDraftAsset?.isByo) {
263
- data.selectedOption = 2;
264
- } else {
265
- data.selectedOption = data.selectedOption || 1;
266
- }
267
- }
267
+ onMounted(() => updateState());
268
268
 
269
- if (logoDraftAsset?.isByo) {
270
- data.currentLogoIsByo = true;
271
- }
272
- };
269
+ // Only `selectedLogoDraftToken` clears the manual override — that's the
270
+ // signal for an *external* data change (upload landed, or undo/redo
271
+ // restored a different draft). `isLogoVisible` flips on the user's own
272
+ // click and propagates back through props, so resetting on it would
273
+ // clobber the choice the user just made (e.g. None → Upload would land
274
+ // on Logo because the watcher fires before the computed re-reads).
275
+ watch(
276
+ () => props.selectedLogoDraftToken,
277
+ () => {
278
+ data.manualVisibleChoice = null;
279
+ updateState();
280
+ },
281
+ );
282
+
283
+ watch(() => props.isLogoVisible, updateState);
284
+ watch(() => props.selectedLogo, updateState);
273
285
 
274
286
  const logoSettingStore = useUiLogoSettingsStore();
275
287
 
@@ -320,9 +332,14 @@ const onEditableLogoVariationSelected = (selectedLogoVariation: {
320
332
  };
321
333
 
322
334
  const onOptionSelected = (selected: ButtonGroupOption) => {
323
- data.selectedOption = parseInt(selected.value);
335
+ const next = parseInt(selected.value);
324
336
 
325
- emit('on-logo-visible-changed', data.selectedOption !== 0);
337
+ // Capture the user's choice between Logo (1) and Upload (2) so the
338
+ // highlight stays put while they interact with the visible options.
339
+ // `null` for None — the visibility flip handles that.
340
+ data.manualVisibleChoice = next === 1 || next === 2 ? next : null;
341
+
342
+ emit('on-logo-visible-changed', next !== 0);
326
343
  };
327
344
 
328
345
  const handleLogoVisibleToggle = () => {
@@ -363,8 +380,6 @@ const onLogoUpload = (response: CreateWebsiteByoUploadResult) => {
363
380
  if (response.logoDesignAttributes) {
364
381
  logoSettingStore.applyLogoDesignAttributes(response.logoDesignAttributes);
365
382
  }
366
-
367
- data.currentLogoIsByo = true;
368
383
  };
369
384
 
370
385
  const onEditLogoButtonClicked = () => {
@@ -24,6 +24,7 @@ import { Button } from '@designcrowd/fe-shared-lib';
24
24
  import { ref, computed, onMounted } from 'vue';
25
25
  import { useUiPageSettingsStore } from '../../../page-settings/store';
26
26
  import { useBrandPageMakerUserStore } from '../../../../brand-page-maker/stores';
27
+ import { useHistoryStore } from '../../../../brand-page-maker/stores/history/history-store';
27
28
  import { pageSettingTr } from '../../../../composables/useTranslate';
28
29
  import PageSelectorDropdown from '../../../page-navigation/PageSelectorDropdown.vue';
29
30
  import { usePageNavigationStore } from '../../../page-navigation/store/page-navigation-store';
@@ -50,6 +51,7 @@ const emit = defineEmits<{
50
51
  const pageNavigationStore = usePageNavigationStore();
51
52
  const pageSettingsStore = useUiPageSettingsStore();
52
53
  const userStore = useBrandPageMakerUserStore();
54
+ const historyStore = useHistoryStore();
53
55
 
54
56
  const selectedPage = ref('');
55
57
 
@@ -109,6 +111,8 @@ onMounted(() => {
109
111
  if (routeByPageId) {
110
112
  selectedPage.value = routeByPageId.displayName;
111
113
  } else {
114
+ // Stale page-id clear at mount — fold into current head.
115
+ historyStore.mergeNextMutation();
112
116
  emit('update:modelValue', {
113
117
  id: props.id,
114
118
  name: props.name,
@@ -15,6 +15,7 @@ import { useShopConfigStore } from '@shared/ecommerce-settings/store/shop-settin
15
15
  import { paymentConfigTr } from '@src/composables/useTranslate';
16
16
  import brandPageClient from '../../../../clients/brand-page-client';
17
17
  import { useUiPageSettingsStore } from '@shared/page-settings/store';
18
+ import { useHistoryStore } from '@brand-page-maker/stores/history/history-store';
18
19
 
19
20
  export default defineComponent({
20
21
  props: {
@@ -41,6 +42,7 @@ export default defineComponent({
41
42
  const uiPageSettingsStore = useUiPageSettingsStore();
42
43
  const eventManagerStore = useEventManagerStore();
43
44
  const shopConfigStore = useShopConfigStore();
45
+ const historyStore = useHistoryStore();
44
46
 
45
47
  return {
46
48
  brandPageToken: computed(() => brandPageContainerStore.brandPageToken),
@@ -51,6 +53,7 @@ export default defineComponent({
51
53
  eventManagerStore,
52
54
  shopConfigStore,
53
55
  uiPageSettingsStore,
56
+ historyStore,
54
57
  };
55
58
  },
56
59
  emits: ['update:modelValue'],
@@ -116,6 +119,10 @@ export default defineComponent({
116
119
  value,
117
120
  };
118
121
 
122
+ // Lazy paymentConfig hydration — fold into current head instead
123
+ // of pushing a phantom entry.
124
+ this.historyStore.mergeNextMutation();
125
+
119
126
  this.$emit('update:modelValue', payload);
120
127
  }
121
128
  },
@@ -45,6 +45,15 @@ export default defineComponent({
45
45
  sliderValue: value,
46
46
  };
47
47
  },
48
+ watch: {
49
+ // The value can change outside the slider (e.g. a layout switch
50
+ // re-applying default padding, or undo) — keep the display in sync.
51
+ value(newValue: string | undefined) {
52
+ this.sliderValue = this.valueConvertor
53
+ ? this.valueConvertor.convert(newValue as any)
54
+ : newValue;
55
+ },
56
+ },
48
57
  computed: {
49
58
  innerMinLength(): number {
50
59
  return this.minLength ?? 0;
@@ -3,6 +3,7 @@
3
3
  <RichTextEditor
4
4
  v-if="showRichTextEditor"
5
5
  :id="`${id}-${name}`"
6
+ ref="richTextEditorRef"
6
7
  v-model="text"
7
8
  :attrs="attrs"
8
9
  :label="label"