@designcrowd/library.brand-page 5.18.9 → 5.19.1-error-html2canvas-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 (142) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-CDdi84ti.js → CreatedOnBrandCrowd-de-de-CxCJU9cc.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BvRiqC8_.js → CreatedOnBrandCrowd-en-us-zDJCWP5n.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BGjpqIbV.js → CreatedOnBrandCrowd-es-es-DNna1Sh9.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-BSLrflaD.js → CreatedOnBrandCrowd-fr-ca-C5XVf_hD.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-BSLrflaD.js → CreatedOnBrandCrowd-fr-fr-C5XVf_hD.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-CYdUgcJs.js → CreatedOnBrandCrowd-pt-br-9eUHV_M3.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-CYdUgcJs.js → CreatedOnBrandCrowd-pt-pt-9eUHV_M3.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-D3gzpYgh.js → CreatedOnDcom-de-de-D9HMpK8Q.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-V6QwvLNX.js → CreatedOnDcom-en-us-BCTkchV5.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-BmgxqURo.js → CreatedOnDcom-es-es-B0N7VoTp.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DEAawXEa.js → CreatedOnDcom-fr-ca-Gi4oz_Mm.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-Da7MhYpI.js → CreatedOnDcom-fr-fr-DJI8eJo1.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-D6WUdxFK.js → CreatedOnDcom-pt-br-YNWMAuQf.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CS5m0sQX.js → CreatedOnDcom-pt-pt-DCIIK3sy.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/font.constants.d.ts +4 -4
  28. package/lib/src/brand-page/constants/font.constants.js +4 -4
  29. package/lib/src/brand-page/constants/misc.constants.d.ts +35 -0
  30. package/lib/src/brand-page/constants/misc.constants.js +51 -0
  31. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  32. package/lib/src/brand-page/utils/content-padding.util.d.ts +13 -0
  33. package/lib/src/brand-page/utils/content-padding.util.js +10 -0
  34. package/lib/src/brand-page/utils/index.d.ts +1 -0
  35. package/lib/src/brand-page/utils/index.js +1 -0
  36. package/lib/src/brand-page/utils/migration/migration-17.d.ts +2 -0
  37. package/lib/src/brand-page/utils/migration/migration-17.js +60 -0
  38. package/lib/src/brand-page/utils/migration.util.js +10 -0
  39. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +2 -0
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +12 -0
  41. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +14 -0
  42. package/lib/src/brand-page-maker/constants/config-settings-constant.js +39 -0
  43. package/lib/src/brand-page-maker/convertors/about-display-style.convertor.js +9 -1
  44. package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +7 -1
  45. package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +6 -1
  46. package/lib/src/brand-page-maker/models/content-settings.js +39 -2
  47. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +12 -0
  48. package/lib/src/{bundled-translations-D1q3rSEz.js → bundled-translations-BUyt4scr.js} +9 -9
  49. package/lib/src/{bundled-translations.de-DE-BxqLLwbh.js → bundled-translations.de-DE-DEw_OVai.js} +1 -1
  50. package/lib/src/{bundled-translations.es-ES-uh249NlJ.js → bundled-translations.es-ES-CFKWmkgY.js} +17 -17
  51. package/lib/src/{bundled-translations.fr-CA-BEQmv2fX.js → bundled-translations.fr-CA-DCl5LJS4.js} +1 -1
  52. package/lib/src/{bundled-translations.fr-FR-BnNuCojH.js → bundled-translations.fr-FR-B5BjgllA.js} +1 -1
  53. package/lib/src/{bundled-translations.pt-BR-CJUOxVlq.js → bundled-translations.pt-BR-5PWpMPuM.js} +1 -1
  54. package/lib/src/{bundled-translations.pt-PT-Ds9cMEqK.js → bundled-translations.pt-PT-B9_wN0HR.js} +9 -9
  55. package/lib/src/bundles/bundled-translations.de-DE.json +2 -0
  56. package/lib/src/bundles/bundled-translations.es-ES.json +2 -0
  57. package/lib/src/bundles/bundled-translations.fr-CA.json +2 -0
  58. package/lib/src/bundles/bundled-translations.fr-FR.json +2 -0
  59. package/lib/src/bundles/bundled-translations.json +2 -0
  60. package/lib/src/bundles/bundled-translations.pt-BR.json +2 -0
  61. package/lib/src/bundles/bundled-translations.pt-PT.json +2 -0
  62. package/lib/src/clients/asset-library-clients.js +19 -12
  63. package/lib/src/composables/useSnapshot.js +18 -18
  64. package/lib/src/css/library.brand-page-brandCrowd.min.css +141 -155
  65. package/lib/src/css/library.brand-page-brandPage.min.css +141 -155
  66. package/lib/src/css/library.brand-page-designCom.min.css +141 -155
  67. package/lib/src/css/library.brand-page-preview.min.css +141 -155
  68. package/lib/src/index.mjs +1 -1
  69. package/lib/src/{lib--1xJXw4j.js → lib-CaY174HB.js} +21176 -21027
  70. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +14 -0
  71. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +14 -0
  72. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +12 -0
  73. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +12 -0
  74. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +12 -0
  75. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +9 -0
  76. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +12 -0
  77. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +16 -0
  78. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +14 -0
  79. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  80. package/package.json +1 -1
  81. package/src/brand-page/components/about-section/AboutSection.vue +10 -4
  82. package/src/brand-page/components/banner-section/BannerSection.vue +11 -4
  83. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  84. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +12 -6
  85. package/src/brand-page/components/contact-form/ContactForm.vue +105 -104
  86. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  87. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  88. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  89. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  90. package/src/brand-page/components/map/Map.vue +5 -1
  91. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  92. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  93. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  94. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  95. package/src/brand-page/components/shop/Shop.vue +7 -2
  96. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  97. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +120 -11
  98. package/src/brand-page/components/text/Text.vue +12 -5
  99. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  100. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  101. package/src/brand-page/components/video/Video.vue +1 -1
  102. package/src/brand-page/constants/font.constants.ts +4 -4
  103. package/src/brand-page/constants/misc.constants.ts +58 -0
  104. package/src/brand-page/models/content.model.ts +2 -0
  105. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +9 -3
  106. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +6 -6
  107. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +12 -12
  108. package/src/brand-page/utils/content-padding.util.test.ts +29 -0
  109. package/src/brand-page/utils/content-padding.util.ts +13 -0
  110. package/src/brand-page/utils/index.ts +1 -0
  111. package/src/brand-page/utils/migration/migration-17.ts +77 -0
  112. package/src/brand-page/utils/migration.util.test.ts +290 -0
  113. package/src/brand-page/utils/migration.util.ts +11 -0
  114. package/src/brand-page-maker/constants/config-settings-constant.ts +45 -0
  115. package/src/brand-page-maker/convertors/about-display-style.convertor.ts +10 -0
  116. package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +8 -0
  117. package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +50 -0
  118. package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +8 -0
  119. package/src/brand-page-maker/models/content-settings.ts +43 -2
  120. package/src/bundles/bundled-translations.de-DE.json +2 -0
  121. package/src/bundles/bundled-translations.es-ES.json +2 -0
  122. package/src/bundles/bundled-translations.fr-CA.json +2 -0
  123. package/src/bundles/bundled-translations.fr-FR.json +2 -0
  124. package/src/bundles/bundled-translations.json +2 -0
  125. package/src/bundles/bundled-translations.pt-BR.json +2 -0
  126. package/src/bundles/bundled-translations.pt-PT.json +2 -0
  127. package/src/clients/asset-library-clients.ts +26 -13
  128. package/src/composables/useSnapshot.ts +19 -22
  129. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +2 -0
  130. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +2 -0
  131. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +2 -0
  132. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +2 -0
  133. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  134. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +2 -0
  135. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +2 -0
  136. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
  137. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
  138. package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +9 -0
  139. package/src/utils/minify-brand-page-metadata.ts +11 -1
  140. package/lib/src/brand-page/components/testimonial-section/TestimonialSection.mixin.d.ts +0 -97
  141. package/lib/src/brand-page/components/testimonial-section/TestimonialSection.mixin.js +0 -112
  142. package/src/brand-page/components/testimonial-section/TestimonialSection.mixin.ts +0 -132
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Color de relleno del icono",
1530
1530
  "iconBackgroundColorTitle": "Color de fondo del icono",
1531
1531
  "paddingTitle": "Relleno",
1532
+ "topPaddingTitle": "Relleno superior",
1533
+ "bottomPaddingTitle": "Relleno inferior",
1532
1534
  "dividerStyleTitle": "Estilo del divisor",
1533
1535
  "dividerColorTitle": "Color del separador",
1534
1536
  "addItemTitle": "Añadir artículo",
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1530
1530
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1531
1531
  "paddingTitle": "Marges intérieures",
1532
+ "topPaddingTitle": "Marge intérieure supérieure",
1533
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1532
1534
  "dividerStyleTitle": "Style de séparateur",
1533
1535
  "dividerColorTitle": "Couleur du séparateur",
1534
1536
  "addItemTitle": "Ajouter un article",
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1530
1530
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1531
1531
  "paddingTitle": "Marges intérieures",
1532
+ "topPaddingTitle": "Marges intérieures supérieures",
1533
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1532
1534
  "dividerStyleTitle": "Style de séparateur",
1533
1535
  "dividerColorTitle": "Couleur du séparateur",
1534
1536
  "addItemTitle": "Ajouter un article",
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Icon fill color",
1530
1530
  "iconBackgroundColorTitle": "Icon background color",
1531
1531
  "paddingTitle": "Padding",
1532
+ "topPaddingTitle": "Top padding",
1533
+ "bottomPaddingTitle": "Bottom padding",
1532
1534
  "dividerStyleTitle": "Divider Style",
1533
1535
  "dividerColorTitle": "Divider color",
1534
1536
  "addItemTitle": "Add Item",
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1530
1530
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1531
1531
  "paddingTitle": "Preenchimento",
1532
+ "topPaddingTitle": "Preenchimento superior",
1533
+ "bottomPaddingTitle": "Preenchimento inferior",
1532
1534
  "dividerStyleTitle": "Estilo do separador",
1533
1535
  "dividerColorTitle": "Cor do separador",
1534
1536
  "addItemTitle": "Adicionar item",
@@ -1529,6 +1529,8 @@
1529
1529
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1530
1530
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1531
1531
  "paddingTitle": "Preenchimento",
1532
+ "topPaddingTitle": "Preenchimento superior",
1533
+ "bottomPaddingTitle": "Preenchimento inferior",
1532
1534
  "dividerStyleTitle": "Estilo do separador",
1533
1535
  "dividerColorTitle": "Cor do separador",
1534
1536
  "addItemTitle": "Adicionar Item",
@@ -74,18 +74,25 @@ export default class AssetLibraryClient {
74
74
  });
75
75
  }
76
76
  async getBrandPageMetadataAsync(s3Url) {
77
- try {
78
- const response = await axios.get(s3Url, {
79
- timeout: 10000,
80
- headers: {
81
- Accept: 'application/json',
82
- },
83
- });
84
- return response.data;
85
- }
86
- catch (error) {
87
- console.error('Error fetching brand page metadata:', error);
88
- return null;
77
+ const maxAttempts = 2;
78
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
79
+ try {
80
+ const response = await axios.get(s3Url, {
81
+ timeout: 30000,
82
+ headers: {
83
+ Accept: 'application/json',
84
+ },
85
+ });
86
+ return response.data;
87
+ }
88
+ catch (error) {
89
+ console.error(`Error fetching brand page metadata (attempt ${attempt}/${maxAttempts}):`, error);
90
+ if (attempt === maxAttempts) {
91
+ return null;
92
+ }
93
+ await new Promise((resolve) => setTimeout(resolve, 500));
94
+ }
89
95
  }
96
+ return null;
90
97
  }
91
98
  }
@@ -131,13 +131,17 @@ export function useSnapshot() {
131
131
  // the width crisp and let MAX_SNAPSHOT_HEIGHT bound the cost.
132
132
  const captureWidth = target.clientWidth || target.offsetWidth || 1;
133
133
  const scale = Math.min(1, SNAPSHOT_TARGET_WIDTH / captureWidth);
134
- // Pre-fetch blob-backed SVGs from content shape <object> elements so they
135
- // can be rendered as <img> in the clone (html2canvas can't reach into the
136
- // isolated DOM inside <object>). Background-shape blob <img>s are NOT
137
- // converted: html2canvas renders them no differently with or without the
138
- // conversion, so it'd just be wasted fetches.
134
+ // Inline every shape's blob-backed SVG as a data: URI up front. Shapes
135
+ // (content + background) render their coloured SVG via an <img> whose src
136
+ // is a `blob:` URL from URL.createObjectURL. The owning component revokes
137
+ // that blob on re-render (colour/size/imageUrl change) and on unmount —
138
+ // exactly what an AI "change all my contents" run triggers right before we
139
+ // capture. html2canvas fetches each <img> src ASYNCHRONOUSLY while
140
+ // rendering, so a concurrent revoke leaves it fetching a dead blob URL →
141
+ // the shape 404s and snapshots blank. A data: URI can't be revoked, so
142
+ // swapping the blob for one in the clone removes the race.
139
143
  const blobSvgUris = new Map();
140
- const blobSources = Array.from(element.querySelectorAll('.c-shape-object object')).map((o) => o.getAttribute('data'));
144
+ const blobSources = Array.from(element.querySelectorAll('.c-shape-object img')).map((img) => img.getAttribute('src'));
141
145
  for (const src of blobSources) {
142
146
  if (src && src.startsWith('blob:') && !blobSvgUris.has(src)) {
143
147
  try {
@@ -245,19 +249,15 @@ export function useSnapshot() {
245
249
  height: 'auto',
246
250
  overflow: 'visible',
247
251
  });
248
- // Swap content shape <object>s for <img> using the pre-fetched data
249
- // URIs (html2canvas can't render <object> SVGs directly).
252
+ // Repoint each shape <img> from its (revocable) blob: src to the
253
+ // pre-fetched data: URI so html2canvas never fetches a blob that may
254
+ // have been revoked mid-capture.
250
255
  _doc
251
- .querySelectorAll('.c-shape-object object')
252
- .forEach((obj) => {
253
- const dataUrl = obj.getAttribute('data');
254
- if (dataUrl && blobSvgUris.has(dataUrl)) {
255
- const img = _doc.createElement('img');
256
- img.src = blobSvgUris.get(dataUrl);
257
- const style = obj.getAttribute('style');
258
- if (style)
259
- img.setAttribute('style', style);
260
- obj.parentNode?.replaceChild(img, obj);
256
+ .querySelectorAll('.c-shape-object img')
257
+ .forEach((img) => {
258
+ const src = img.getAttribute('src');
259
+ if (src && blobSvgUris.has(src)) {
260
+ img.src = blobSvgUris.get(src);
261
261
  }
262
262
  });
263
263
  // Replace object-fit images with a background-size div so they