@designcrowd/library.brand-page 5.16.40 → 5.16.41-ast-save-editor

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 (135) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-vWrciv1K.js → CreatedOnBrandCrowd-de-de-CTss-YbX.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-CiUzGXrM.js → CreatedOnBrandCrowd-en-us-CRYD0nIh.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CQ_M759G.js → CreatedOnBrandCrowd-es-es-0d_UQqrW.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CEw4k-zI.js → CreatedOnBrandCrowd-fr-ca-Wiunuwtv.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CEw4k-zI.js → CreatedOnBrandCrowd-fr-fr-Wiunuwtv.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BtQHkNJN.js → CreatedOnBrandCrowd-pt-br-M0Z7C_A-.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BtQHkNJN.js → CreatedOnBrandCrowd-pt-pt-M0Z7C_A-.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-Dgwq4Oag.js → CreatedOnDcom-de-de-awZDhF-b.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DdZdyc5P.js → CreatedOnDcom-en-us-BsP-Z_n_.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-C-aCNCpD.js → CreatedOnDcom-es-es-BXHvmN0D.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-B5iMZBjO.js → CreatedOnDcom-fr-ca-Wubn5VPf.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-BJ1tQ9JZ.js → CreatedOnDcom-fr-fr-EuX5FuWa.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Du7XfRcQ.js → CreatedOnDcom-pt-br-B5lpw2s_.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DgZRV8bR.js → CreatedOnDcom-pt-pt-CMVb29wY.js} +1 -1
  15. package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -0
  16. package/lib/src/brand-page/components/page/Page.mixin.js +7 -2
  17. package/lib/src/brand-page/components/page/Page.stories.js +4 -0
  18. package/lib/src/brand-page/models/index.d.ts +5 -0
  19. package/lib/src/brand-page/models/index.js +2 -0
  20. package/lib/src/brand-page/utils/view-model.util.js +6 -0
  21. package/lib/src/brand-page/view-models.d.ts +2 -1
  22. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +6 -0
  23. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +7 -1
  24. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +6 -0
  25. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +8 -1
  26. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +6 -0
  27. package/lib/src/brand-page-maker/components/preview/Preview.mixin.js +1 -1
  28. package/lib/src/brand-page-maker/components/preview/Preview.stories.js +4 -0
  29. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +1 -1
  30. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +7 -1
  31. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +7 -1
  32. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +1 -1
  33. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +6 -0
  34. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +7 -1
  35. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +1 -1
  36. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +1 -1
  37. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +3 -0
  38. package/lib/src/brand-page-maker/composables/useEventTracker.js +3 -0
  39. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +1 -1
  40. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +2 -2
  41. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +8 -1
  42. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +18 -2
  43. package/lib/src/brand-page-maker/stores/brandpage-settings/brandpage-settings-store.d.ts +14 -0
  44. package/lib/src/brand-page-maker/stores/brandpage-settings/brandpage-settings-store.js +20 -0
  45. package/lib/src/brand-page-maker/stores/brandpage-settings/models.d.ts +11 -0
  46. package/lib/src/brand-page-maker/stores/brandpage-settings/models.js +10 -0
  47. package/lib/src/brand-page-maker/stores/index.d.ts +2 -0
  48. package/lib/src/brand-page-maker/stores/index.js +2 -0
  49. package/lib/src/bundled-translations-CdtzrOW9.js +169 -0
  50. package/lib/src/bundled-translations.de-DE-D-unzXs5.js +169 -0
  51. package/lib/src/bundled-translations.es-ES-CNpB01CC.js +169 -0
  52. package/lib/src/bundled-translations.fr-CA-dN5zQUnQ.js +169 -0
  53. package/lib/src/{bundled-translations.fr-FR-NgI1lWQl.js → bundled-translations.fr-FR-C-8tirhy.js} +110 -108
  54. package/lib/src/bundled-translations.pt-BR-DxsZYUMZ.js +169 -0
  55. package/lib/src/bundled-translations.pt-PT-DjzGtLBI.js +169 -0
  56. package/lib/src/bundles/bundled-translations.de-DE.json +9 -1
  57. package/lib/src/bundles/bundled-translations.es-ES.json +9 -1
  58. package/lib/src/bundles/bundled-translations.fr-CA.json +9 -1
  59. package/lib/src/bundles/bundled-translations.fr-FR.json +10 -2
  60. package/lib/src/bundles/bundled-translations.json +8 -0
  61. package/lib/src/bundles/bundled-translations.pt-BR.json +9 -1
  62. package/lib/src/bundles/bundled-translations.pt-PT.json +9 -1
  63. package/lib/src/clients/design-template-client.d.ts +1 -1
  64. package/lib/src/clients/design-template-client.js +4 -1
  65. package/lib/src/composables/useTranslate.d.ts +2 -1
  66. package/lib/src/composables/useTranslate.js +2 -1
  67. package/lib/src/css/library.brand-page-brandCrowd.min.css +66 -52
  68. package/lib/src/css/library.brand-page-brandPage.min.css +66 -52
  69. package/lib/src/css/library.brand-page-designCom.min.css +66 -52
  70. package/lib/src/css/library.brand-page-preview.min.css +66 -52
  71. package/lib/src/index.mjs +1 -1
  72. package/lib/src/{lib-BbIDNZyu.js → lib-DmwZVoNR.js} +19793 -19449
  73. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +6 -0
  74. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +6 -0
  75. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +6 -0
  76. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +1 -1
  77. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +7 -1
  78. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +7 -1
  79. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +7 -1
  80. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +7 -1
  81. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +1 -1
  82. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +7 -1
  83. package/package.json +5 -4
  84. package/src/brand-page/components/page/Page.mixin.ts +7 -1
  85. package/src/brand-page/components/page/Page.stories.ts +4 -0
  86. package/src/brand-page/components/page/Page.vue +1 -0
  87. package/src/brand-page/components/save-contact/SaveContactWidget.vue +28 -6
  88. package/src/brand-page/components/save-contact/i18n/save-contact.de-DE.json +1 -1
  89. package/src/brand-page/components/save-contact/i18n/save-contact.es-ES.json +1 -1
  90. package/src/brand-page/components/save-contact/i18n/save-contact.fr-CA.json +1 -1
  91. package/src/brand-page/components/save-contact/i18n/save-contact.fr-FR.json +2 -2
  92. package/src/brand-page/components/save-contact/i18n/save-contact.pt-BR.json +1 -1
  93. package/src/brand-page/components/save-contact/i18n/save-contact.pt-PT.json +1 -1
  94. package/src/brand-page/models/index.ts +9 -0
  95. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +9 -6
  96. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +3 -2
  97. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +6 -4
  98. package/src/brand-page/utils/view-model.util.ts +6 -0
  99. package/src/brand-page/view-models.ts +2 -0
  100. package/src/brand-page-maker/components/brandpage-settings/BrandPageSettings.vue +58 -2
  101. package/src/brand-page-maker/components/preview/Preview.mixin.ts +1 -1
  102. package/src/brand-page-maker/components/preview/Preview.stories.ts +4 -0
  103. package/src/brand-page-maker/components/save-contact/SaveContact.vue +163 -0
  104. package/src/brand-page-maker/components/save-contact/i18n/save-settings.de-DE.json +10 -0
  105. package/src/brand-page-maker/components/save-contact/i18n/save-settings.es-ES.json +10 -0
  106. package/src/brand-page-maker/components/save-contact/i18n/save-settings.fr-CA.json +10 -0
  107. package/src/brand-page-maker/components/save-contact/i18n/save-settings.fr-FR.json +10 -0
  108. package/src/brand-page-maker/components/save-contact/i18n/save-settings.json +10 -0
  109. package/src/brand-page-maker/components/save-contact/i18n/save-settings.pt-BR.json +10 -0
  110. package/src/brand-page-maker/components/save-contact/i18n/save-settings.pt-PT.json +10 -0
  111. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +1 -1
  112. package/src/brand-page-maker/composables/useEventTracker.ts +5 -0
  113. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +2 -1
  114. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +25 -2
  115. package/src/brand-page-maker/stores/brandpage-settings/brandpage-settings-store.ts +39 -0
  116. package/src/brand-page-maker/stores/brandpage-settings/models.ts +13 -0
  117. package/src/brand-page-maker/stores/index.ts +2 -0
  118. package/src/bundles/bundled-translations.de-DE.json +9 -1
  119. package/src/bundles/bundled-translations.es-ES.json +9 -1
  120. package/src/bundles/bundled-translations.fr-CA.json +9 -1
  121. package/src/bundles/bundled-translations.fr-FR.json +10 -2
  122. package/src/bundles/bundled-translations.json +8 -0
  123. package/src/bundles/bundled-translations.pt-BR.json +9 -1
  124. package/src/bundles/bundled-translations.pt-PT.json +9 -1
  125. package/src/clients/design-template-client.ts +6 -0
  126. package/src/composables/useTranslate.ts +3 -0
  127. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +2 -1
  128. package/src/shared/content-settings/components/generate-ai-button/GenerateAiButton.vue +3 -0
  129. package/src/shared/content-settings/components/generate-ai-modal/GenerateAiModal.vue +5 -0
  130. package/lib/src/bundled-translations-EqxiRIwA.js +0 -167
  131. package/lib/src/bundled-translations.de-DE-BKqVO-q2.js +0 -167
  132. package/lib/src/bundled-translations.es-ES-DwKrkWcX.js +0 -167
  133. package/lib/src/bundled-translations.fr-CA-BZtZzL79.js +0 -167
  134. package/lib/src/bundled-translations.pt-BR-DuqcSme7.js +0 -167
  135. package/lib/src/bundled-translations.pt-PT-DDsgh_7r.js +0 -167
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as e, openBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-BbIDNZyu.js";
2
+ import { _ as t } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-BbIDNZyu.js";
2
+ import { _ as e } from "./lib-DmwZVoNR.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-BbIDNZyu.js";
2
+ import { _ as e } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-BbIDNZyu.js";
2
+ import { _ as e } from "./lib-DmwZVoNR.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-BbIDNZyu.js";
2
+ import { _ as e } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-BbIDNZyu.js";
2
+ import { _ as e } from "./lib-DmwZVoNR.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-BbIDNZyu.js";
2
+ import { _ as M } from "./lib-DmwZVoNR.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock as H, openBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-BbIDNZyu.js";
2
+ import { _ as M } from "./lib-DmwZVoNR.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -75,6 +75,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
75
75
  slug(): string;
76
76
  shouldShowSaveContactWidget(): boolean;
77
77
  isPremiumSubscription(): boolean;
78
+ shouldShowPopupBranding(): boolean;
78
79
  }, {
79
80
  openSideMenu(): void;
80
81
  onLogoClick(tabName: string): void;
@@ -266,11 +266,13 @@ export default defineComponent({
266
266
  },
267
267
  shouldShowSaveContactWidget() {
268
268
  try {
269
- if (this.context.isPreview ||
270
- this.context.options?.enableSaveContact === false ||
269
+ if (this.context.options?.enableSaveContact === false ||
271
270
  !this.context.isBrandContact) {
272
271
  return false;
273
272
  }
273
+ if (this.viewModel.saveContactSettings?.isSavingEnabled === false) {
274
+ return false;
275
+ }
274
276
  const brandPageData = { pages: this.context?.pages || [] };
275
277
  return checkHasProfileContent(brandPageData);
276
278
  }
@@ -282,6 +284,9 @@ export default defineComponent({
282
284
  isPremiumSubscription() {
283
285
  return !this.showBrandCrowdLogo;
284
286
  },
287
+ shouldShowPopupBranding() {
288
+ return this.viewModel.saveContactSettings.hideBranding;
289
+ },
285
290
  },
286
291
  watch: {
287
292
  rootElementStyles() {
@@ -28,6 +28,10 @@ const viewModel = {
28
28
  isCookieEnabled: false,
29
29
  isCookiePreviewEnabled: false,
30
30
  },
31
+ saveContactSettings: {
32
+ isSavingEnabled: true,
33
+ hideBranding: false,
34
+ },
31
35
  };
32
36
  const defaultSampleArgs = {
33
37
  viewModel,
@@ -522,6 +522,10 @@ export interface CookieOptions {
522
522
  isCookieEnabled: boolean;
523
523
  isCookiePreviewEnabled: boolean;
524
524
  }
525
+ export interface SaveContactOptions {
526
+ isSavingEnabled: boolean;
527
+ hideBranding: boolean;
528
+ }
525
529
  export declare class BrandPageModel {
526
530
  v: number;
527
531
  styles: PageStyles;
@@ -543,6 +547,7 @@ export declare class BrandPageModel {
543
547
  ogTitle?: string;
544
548
  ogDescription?: string;
545
549
  cookieOptions?: CookieOptions;
550
+ saveContactSettings?: SaveContactOptions;
546
551
  paymentConfig?: BrandPagePaymentConfig;
547
552
  constructor(options: BrandPageData);
548
553
  }
@@ -412,6 +412,7 @@ export class BrandPageModel {
412
412
  ogTitle;
413
413
  ogDescription;
414
414
  cookieOptions;
415
+ saveContactSettings;
415
416
  paymentConfig;
416
417
  constructor(options) {
417
418
  this.v = options.v || 0;
@@ -473,6 +474,7 @@ export class BrandPageModel {
473
474
  this.ogTitle = options.ogTitle;
474
475
  this.ogDescription = options.ogDescription;
475
476
  this.cookieOptions = options.cookieOptions;
477
+ this.saveContactSettings = options.saveContactSettings;
476
478
  this.paymentConfig = options.paymentConfig;
477
479
  }
478
480
  }
@@ -805,6 +805,12 @@ export const getBrandPageViewModelFromBrandPageModel = (model, brandPageToken, s
805
805
  isCookieEnabled: model.cookieOptions?.isCookieEnabled || false,
806
806
  isCookiePreviewEnabled: model.cookieOptions?.isCookiePreviewEnabled || false,
807
807
  },
808
+ saveContactSettings: model.saveContactSettings
809
+ ? {
810
+ isSavingEnabled: model.saveContactSettings.isSavingEnabled ?? true,
811
+ hideBranding: model.saveContactSettings.hideBranding ?? false,
812
+ }
813
+ : { isSavingEnabled: true, hideBranding: false },
808
814
  };
809
815
  };
810
816
  export const isLogoViewModel = (viewModel) => {
@@ -1,4 +1,4 @@
1
- import type { ButtonWithModalContent, ProfileContent, TextContent, VideoContent, ImageContent, ContentType, ButtonStyles, LogoStyles, MapContent, ImageGalleryContent, GalleryStyles, MailingListContent, RequestPaymentContent, ShopContent, SupportMeContent, ContactFormContent, BannerSectionContent, BrandPageType, SocialLinksContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ButtonLinkType, PageHeaderMobile, PageHeaderDesktop, PageFooterMobile, PageFooterDesktop, TextMediaItem, TextShapeItem, TextStyleDeclaration, AspectRatio, LogoImageModel, LogoTemplateImageModel, CookieOptions, BookingSectionContent, MediaTypes, TextStyles, BackgroundStyle, BackgroundShape, PersonalisationRole } from './models';
1
+ import type { ButtonWithModalContent, ProfileContent, TextContent, VideoContent, ImageContent, ContentType, ButtonStyles, LogoStyles, MapContent, ImageGalleryContent, GalleryStyles, MailingListContent, RequestPaymentContent, ShopContent, SupportMeContent, ContactFormContent, BannerSectionContent, BrandPageType, SocialLinksContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ButtonLinkType, PageHeaderMobile, PageHeaderDesktop, PageFooterMobile, PageFooterDesktop, TextMediaItem, TextShapeItem, TextStyleDeclaration, AspectRatio, LogoImageModel, LogoTemplateImageModel, CookieOptions, BookingSectionContent, MediaTypes, TextStyles, BackgroundStyle, BackgroundShape, PersonalisationRole, SaveContactOptions } from './models';
2
2
  import type { ImagesSectionContentDisplayStyle } from './constants';
3
3
  export type ViewModelType = 'button' | 'image' | 'image-gallery' | 'logo' | 'map' | 'mailing-list' | 'profile' | 'support-me' | 'request-payment' | 'text' | 'video' | 'contact-form' | 'banner-section' | 'images-section' | 'about-section' | 'divider-section' | 'testimonial-section' | 'social-links' | 'shapes-section' | 'shop-section' | 'booking-section';
4
4
  export interface ContentViewModel {
@@ -166,4 +166,5 @@ export interface BrandPageViewModel {
166
166
  ogTitle?: string;
167
167
  ogDescription?: string;
168
168
  cookieOptions: CookieOptions;
169
+ saveContactSettings: SaveContactOptions;
169
170
  }
@@ -59,6 +59,12 @@ declare const _default: import("vue").DefineComponent<{}, {
59
59
  setCookieEnabled(payload: {
60
60
  isCookieEnabled: boolean;
61
61
  }): void;
62
+ setSavingEnabled(payload: {
63
+ isSavingEnabled: boolean;
64
+ }): void;
65
+ setHideBranding(payload: {
66
+ hideBranding: boolean;
67
+ }): void;
62
68
  setSensitiveContent(payload: {
63
69
  sensitiveContent: string;
64
70
  }): void;
@@ -104,6 +104,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
104
104
  setCookieEnabled(payload: {
105
105
  isCookieEnabled: boolean;
106
106
  }): void;
107
+ setSavingEnabled(payload: {
108
+ isSavingEnabled: boolean;
109
+ }): void;
110
+ setHideBranding(payload: {
111
+ hideBranding: boolean;
112
+ }): void;
107
113
  setSensitiveContent(payload: {
108
114
  sensitiveContent: string;
109
115
  }): void;
@@ -395,7 +401,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
395
401
  setBrandPageStatus(status: any): Promise<void>;
396
402
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
397
403
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
398
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
404
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
399
405
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
400
406
  showStripeOnboardingModal(): void;
401
407
  closeStripeOnboardingModal(): void;
@@ -49,6 +49,12 @@ declare const _default: import("vue").DefineComponent<{}, {
49
49
  setCookieEnabled(payload: {
50
50
  isCookieEnabled: boolean;
51
51
  }): void;
52
+ setSavingEnabled(payload: {
53
+ isSavingEnabled: boolean;
54
+ }): void;
55
+ setHideBranding(payload: {
56
+ hideBranding: boolean;
57
+ }): void;
52
58
  setSensitiveContent(payload: {
53
59
  sensitiveContent: string;
54
60
  }): void;
@@ -555,6 +555,12 @@ declare const _default: import("vue").DefineComponent<{}, {
555
555
  setCookieEnabled(payload: {
556
556
  isCookieEnabled: boolean;
557
557
  }): void;
558
+ setSavingEnabled(payload: {
559
+ isSavingEnabled: boolean;
560
+ }): void;
561
+ setHideBranding(payload: {
562
+ hideBranding: boolean;
563
+ }): void;
558
564
  setSensitiveContent(payload: {
559
565
  sensitiveContent: string;
560
566
  }): void;
@@ -830,7 +836,7 @@ declare const _default: import("vue").DefineComponent<{}, {
830
836
  setBrandPageStatus(status: any): Promise<void>;
831
837
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
832
838
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
833
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
839
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
834
840
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
835
841
  showStripeOnboardingModal(): void;
836
842
  closeStripeOnboardingModal(): void;
@@ -1185,6 +1191,7 @@ declare const _default: import("vue").DefineComponent<{}, {
1185
1191
  slug(): string;
1186
1192
  shouldShowSaveContactWidget(): boolean;
1187
1193
  isPremiumSubscription(): boolean;
1194
+ shouldShowPopupBranding(): boolean;
1188
1195
  }, {
1189
1196
  openSideMenu(): void;
1190
1197
  onLogoClick(tabName: string): void;
@@ -55,6 +55,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
55
55
  setCookieEnabled(payload: {
56
56
  isCookieEnabled: boolean;
57
57
  }): void;
58
+ setSavingEnabled(payload: {
59
+ isSavingEnabled: boolean;
60
+ }): void;
61
+ setHideBranding(payload: {
62
+ hideBranding: boolean;
63
+ }): void;
58
64
  setSensitiveContent(payload: {
59
65
  sensitiveContent: string;
60
66
  }): void;
@@ -81,7 +81,7 @@ export default defineComponent({
81
81
  mediaSizes: MEDIA_SIZES.size1x,
82
82
  renderVideoAsImage: false,
83
83
  shouldPlayVideos: this.shouldPlayVideos,
84
- enableSaveContact: false,
84
+ enableSaveContact: true,
85
85
  },
86
86
  stripePublishableKey: undefined,
87
87
  runtimeEnvironment: this.runtimeEnvironment,
@@ -32,6 +32,10 @@ const viewModel = {
32
32
  isCookieEnabled: false,
33
33
  isCookiePreviewEnabled: false,
34
34
  },
35
+ saveContactSettings: {
36
+ isSavingEnabled: true,
37
+ hideBranding: false,
38
+ },
35
39
  };
36
40
  export const SampleDesktop = () => {
37
41
  const pinia = setupStoryPinia();
@@ -202,7 +202,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
202
202
  setBrandPageStatus(status: any): Promise<void>;
203
203
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
204
204
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
205
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
205
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
206
206
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
207
207
  showStripeOnboardingModal(): void;
208
208
  closeStripeOnboardingModal(): void;
@@ -218,7 +218,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
218
218
  setBrandPageStatus(status: any): Promise<void>;
219
219
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
220
220
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
221
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
221
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
222
222
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
223
223
  showStripeOnboardingModal(): void;
224
224
  closeStripeOnboardingModal(): void;
@@ -299,6 +299,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
299
299
  setCookieEnabled(payload: {
300
300
  isCookieEnabled: boolean;
301
301
  }): void;
302
+ setSavingEnabled(payload: {
303
+ isSavingEnabled: boolean;
304
+ }): void;
305
+ setHideBranding(payload: {
306
+ hideBranding: boolean;
307
+ }): void;
302
308
  setSensitiveContent(payload: {
303
309
  sensitiveContent: string;
304
310
  }): void;
@@ -223,7 +223,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
223
223
  setBrandPageStatus(status: any): Promise<void>;
224
224
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
225
225
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
226
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
226
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
227
227
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
228
228
  showStripeOnboardingModal(): void;
229
229
  closeStripeOnboardingModal(): void;
@@ -300,6 +300,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
300
300
  setCookieEnabled(payload: {
301
301
  isCookieEnabled: boolean;
302
302
  }): void;
303
+ setSavingEnabled(payload: {
304
+ isSavingEnabled: boolean;
305
+ }): void;
306
+ setHideBranding(payload: {
307
+ hideBranding: boolean;
308
+ }): void;
303
309
  setSensitiveContent(payload: {
304
310
  sensitiveContent: string;
305
311
  }): void;
@@ -199,7 +199,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
199
199
  setBrandPageStatus(status: any): Promise<void>;
200
200
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
201
201
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
202
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
202
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
203
203
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
204
204
  showStripeOnboardingModal(): void;
205
205
  closeStripeOnboardingModal(): void;
@@ -65,6 +65,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
65
65
  setCookieEnabled(payload: {
66
66
  isCookieEnabled: boolean;
67
67
  }): void;
68
+ setSavingEnabled(payload: {
69
+ isSavingEnabled: boolean;
70
+ }): void;
71
+ setHideBranding(payload: {
72
+ hideBranding: boolean;
73
+ }): void;
68
74
  setSensitiveContent(payload: {
69
75
  sensitiveContent: string;
70
76
  }): void;
@@ -274,7 +274,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
274
274
  setBrandPageStatus(status: any): Promise<void>;
275
275
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
276
276
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
277
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
277
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
278
278
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
279
279
  showStripeOnboardingModal(): void;
280
280
  closeStripeOnboardingModal(): void;
@@ -351,6 +351,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
351
351
  setCookieEnabled(payload: {
352
352
  isCookieEnabled: boolean;
353
353
  }): void;
354
+ setSavingEnabled(payload: {
355
+ isSavingEnabled: boolean;
356
+ }): void;
357
+ setHideBranding(payload: {
358
+ hideBranding: boolean;
359
+ }): void;
354
360
  setSensitiveContent(payload: {
355
361
  sensitiveContent: string;
356
362
  }): void;
@@ -118,7 +118,7 @@ export default defineComponent({
118
118
  disableNavigationSideMenu: true,
119
119
  mediaSizes: MEDIA_SIZES.sizeThumb,
120
120
  renderVideoAsImage: true,
121
- enableSaveContact: false,
121
+ enableSaveContact: true,
122
122
  },
123
123
  isCapturingPreview: false,
124
124
  };
@@ -199,7 +199,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
199
199
  setBrandPageStatus(status: any): Promise<void>;
200
200
  showPublishModal(eventButtonLocation?: string | undefined, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean | undefined): void;
201
201
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
202
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
202
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined, cta?: string | undefined): Promise<void>;
203
203
  getContextualUpgradeResponseAsync(): Promise<import("../../../clients/brand-page-client").getWebsiteContextualUpgradeResponse | undefined>;
204
204
  showStripeOnboardingModal(): void;
205
205
  closeStripeOnboardingModal(): void;
@@ -51,6 +51,8 @@ export declare const EVENTS: {
51
51
  WEBSITE_START_FOR_FREE: string;
52
52
  WEBSITE_MAKER_AI_CLICK_SUGGESTED_PROMPT: string;
53
53
  WEBSITE_MAKER_DOMAIN_UPSELL_MODAL: string;
54
+ WEBSITE_MAKER_DIGITAL_BUSINESS_CARDS_SAVE_CONTACT_TOGGLE: string;
55
+ WEBSITE_MAKER_DIGITAL_BUSINESS_CARDS_HIDE_POPUP: string;
54
56
  WEBSITE_MAKER_GETTY_VIDEO: string;
55
57
  };
56
58
  export declare const SELECT_LOCATIONS: {
@@ -72,6 +74,7 @@ export declare const UPGRADE_CTA_LOCATIONS: {
72
74
  SLUG_CHANGE_MANAGE_PAGE: string;
73
75
  GOOGLE_ADSENSE: string;
74
76
  QUICK_LINKS: string;
77
+ SAVE_CONTACT_SETTINGS: string;
75
78
  };
76
79
  export declare const GENERATE_AI_TEXT_CTA_LOCATIONS: {
77
80
  BANNER_DESCRIPTION: string;
@@ -34,6 +34,8 @@ export const EVENTS = {
34
34
  WEBSITE_START_FOR_FREE: 'website_start_for_free',
35
35
  WEBSITE_MAKER_AI_CLICK_SUGGESTED_PROMPT: 'website_maker_ai_click_suggested_prompt',
36
36
  WEBSITE_MAKER_DOMAIN_UPSELL_MODAL: 'website_domain_upsell_modal',
37
+ WEBSITE_MAKER_DIGITAL_BUSINESS_CARDS_SAVE_CONTACT_TOGGLE: 'website_maker_digital_business_cards_save_contact_toggle',
38
+ WEBSITE_MAKER_DIGITAL_BUSINESS_CARDS_HIDE_POPUP: 'website_maker_digital_business_cards_hide_popup',
37
39
  WEBSITE_MAKER_GETTY_VIDEO: 'website_maker_getty_video',
38
40
  };
39
41
  export const SELECT_LOCATIONS = {
@@ -55,6 +57,7 @@ export const UPGRADE_CTA_LOCATIONS = {
55
57
  SLUG_CHANGE_MANAGE_PAGE: 'slug_change_manage_page',
56
58
  GOOGLE_ADSENSE: 'google_adsense',
57
59
  QUICK_LINKS: 'quick_links',
60
+ SAVE_CONTACT_SETTINGS: 'save_contact_settings',
58
61
  };
59
62
  export const GENERATE_AI_TEXT_CTA_LOCATIONS = {
60
63
  BANNER_DESCRIPTION: 'banner_description',
@@ -270,7 +270,7 @@ export declare const useBrandPageContainerStore: import("pinia").StoreDefinition
270
270
  setBrandPageStatus(status: any): Promise<void>;
271
271
  showPublishModal(eventButtonLocation?: string, websiteUpsellModalViewModel?: any, isSubsequentPublish?: boolean): void;
272
272
  showBrandPageSlugEditModal(eventButtonLocation: string): Promise<void>;
273
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: WebsiteContextUpgradeType): Promise<void>;
273
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: WebsiteContextUpgradeType, cta?: string): Promise<void>;
274
274
  getContextualUpgradeResponseAsync(): Promise<getWebsiteContextualUpgradeResponse | undefined>;
275
275
  showStripeOnboardingModal(): void;
276
276
  closeStripeOnboardingModal(): void;
@@ -736,7 +736,7 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
736
736
  await this.startBrandPageSlugEditMode();
737
737
  await this.showPublishModal(eventButtonLocation);
738
738
  },
739
- async showUpgradeModalAndSaveAsync(contextualUpgradeType) {
739
+ async showUpgradeModalAndSaveAsync(contextualUpgradeType, cta) {
740
740
  const eventTracker = useEventTracker();
741
741
  const formatCtaLocation = (type) => {
742
742
  if (!type || typeof type !== 'string')
@@ -747,7 +747,7 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
747
747
  .isPublishUpgradeModal
748
748
  ? WEBSITE_UPGRADE_CONTEXT_TYPES.Publish
749
749
  : contextualUpgradeType;
750
- const cta_location = formatCtaLocation(requestedType);
750
+ const cta_location = cta ? cta : formatCtaLocation(requestedType);
751
751
  eventTracker.sendUpsellOpenEvent(cta_location);
752
752
  if (!this.isPrePurchase && requestedType) {
753
753
  const bucketResponse = await this.getContextualUpgradeResponseAsync();
@@ -1,4 +1,4 @@
1
- import type { BrandPageData, BrandPageType, BrandPageViewModel, CookieOptions, Content, PageModel, UserPersonalisationContent, ViewportsType, SensitiveContent } from '../../../brand-page';
1
+ import type { BrandPageData, BrandPageType, BrandPageViewModel, CookieOptions, Content, PageModel, UserPersonalisationContent, ViewportsType, SensitiveContent, SaveContactOptions } from '../../../brand-page';
2
2
  import { BrandPageModel } from '../../../brand-page';
3
3
  import type { InitialCategories, TemplateCategory } from '../../../shared/template-settings/models';
4
4
  import type { AdminPreviewLogoTemplateModel } from '../admin-logo-settings';
@@ -52,6 +52,7 @@ export interface BrandPageMakerState {
52
52
  businessName: string | undefined;
53
53
  industry: string | undefined;
54
54
  cookieOptions: CookieOptions;
55
+ saveContactSettings: SaveContactOptions;
55
56
  sensitiveContent: SensitiveContent;
56
57
  isBrandPage: boolean;
57
58
  isBrandPageOrIsBrandContact: boolean;
@@ -128,6 +129,12 @@ export declare const useBrandPageMakerStore: import("pinia").StoreDefinition<"br
128
129
  setCookieEnabled(payload: {
129
130
  isCookieEnabled: boolean;
130
131
  }): void;
132
+ setSavingEnabled(payload: {
133
+ isSavingEnabled: boolean;
134
+ }): void;
135
+ setHideBranding(payload: {
136
+ hideBranding: boolean;
137
+ }): void;
131
138
  setSensitiveContent(payload: {
132
139
  sensitiveContent: string;
133
140
  }): void;
@@ -26,8 +26,7 @@ import { useLocalisedRouteStore } from '../route/localised-route-store';
26
26
  import cloneDeep from 'lodash.clonedeep';
27
27
  import * as uuid from 'uuid';
28
28
  import { getAiContentIndexByTemplateTokenAndNumberOfVariations } from '../../utils/ai-content-selection.util';
29
- import { applyLogoTemplateImageToBrandPageTemplateModel, getOptimalLogoSize, recalculateLogoContentDimensions, recalculateHeaderLogoSizes, } from '../../../brand-page/utils/logo.util';
30
- import { FabricRenderClient } from '../../../clients/fabric-render-client';
29
+ import { applyLogoTemplateImageToBrandPageTemplateModel, recalculateLogoContentDimensions, recalculateHeaderLogoSizes, } from '../../../brand-page/utils/logo.util';
31
30
  import { useConsent } from '../../../brand-page/composables/consent.composable';
32
31
  import { commonTr, errorTr } from '../../../composables/useTranslate';
33
32
  import { UPGRADE_CTA_LOCATIONS } from '../../composables/useEventTracker';
@@ -75,6 +74,10 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
75
74
  isCookieEnabled: false,
76
75
  isCookiePreviewEnabled: false,
77
76
  },
77
+ saveContactSettings: {
78
+ isSavingEnabled: true,
79
+ hideBranding: false,
80
+ },
78
81
  }),
79
82
  actions: {
80
83
  setMode(payload) {
@@ -101,6 +104,12 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
101
104
  setCookieEnabled(payload) {
102
105
  this.cookieOptions.isCookieEnabled = payload.isCookieEnabled;
103
106
  },
107
+ setSavingEnabled(payload) {
108
+ this.saveContactSettings.isSavingEnabled = payload.isSavingEnabled;
109
+ },
110
+ setHideBranding(payload) {
111
+ this.saveContactSettings.hideBranding = payload.hideBranding;
112
+ },
104
113
  setSensitiveContent(payload) {
105
114
  this.sensitiveContent = payload.sensitiveContent;
106
115
  },
@@ -637,6 +646,12 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
637
646
  this.setCookiePreviewEnabled({
638
647
  isCookiePreviewEnabled: brandPageModel.cookieOptions?.isCookiePreviewEnabled,
639
648
  });
649
+ this.setSavingEnabled({
650
+ isSavingEnabled: brandPageModel.saveContactSettings?.isSavingEnabled ?? true,
651
+ });
652
+ this.setHideBranding({
653
+ hideBranding: brandPageModel.saveContactSettings?.hideBranding ?? false,
654
+ });
640
655
  this.businessName = businessName;
641
656
  this.industry = industry;
642
657
  }
@@ -834,6 +849,7 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
834
849
  ogTitle: this.ogTitle,
835
850
  ogDescription: this.ogDescription,
836
851
  cookieOptions: this.cookieOptions,
852
+ saveContactSettings: this.saveContactSettings,
837
853
  paymentConfig: shopStore.paymentConfig,
838
854
  };
839
855
  },