@designcrowd/library.brand-page 5.18.9-ast-padding-2 → 5.18.9
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.
- package/lib/src/{CreatedOnBrandCrowd-de-de-BmLOUBDj.js → CreatedOnBrandCrowd-de-de-CDdi84ti.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DGCwedd5.js → CreatedOnBrandCrowd-en-us-BvRiqC8_.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-qfWIO62h.js → CreatedOnBrandCrowd-es-es-BGjpqIbV.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-Bh6tQfv-.js → CreatedOnBrandCrowd-fr-ca-BSLrflaD.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-Bh6tQfv-.js → CreatedOnBrandCrowd-fr-fr-BSLrflaD.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-DBF_gR3z.js → CreatedOnBrandCrowd-pt-br-CYdUgcJs.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-DBF_gR3z.js → CreatedOnBrandCrowd-pt-pt-CYdUgcJs.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-B1ZibTqN.js → CreatedOnDcom-de-de-D3gzpYgh.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-4qS61Om_.js → CreatedOnDcom-en-us-V6QwvLNX.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-yX1FaMrI.js → CreatedOnDcom-es-es-BmgxqURo.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-h5RbgiUo.js → CreatedOnDcom-fr-ca-DEAawXEa.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-4cJbiAWr.js → CreatedOnDcom-fr-fr-Da7MhYpI.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-C0FUKVjn.js → CreatedOnDcom-pt-br-D6WUdxFK.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-CFstpuvQ.js → CreatedOnDcom-pt-pt-CS5m0sQX.js} +1 -1
- package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +4 -8
- package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.js +0 -4
- package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +1 -4
- package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +0 -4
- package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +1 -4
- package/lib/src/brand-page/components/testimonial-section/TestimonialSection.mixin.d.ts +97 -0
- package/lib/src/brand-page/components/testimonial-section/TestimonialSection.mixin.js +112 -0
- package/lib/src/brand-page/components/video/Video.mixin.d.ts +0 -4
- package/lib/src/brand-page/components/video/Video.mixin.js +0 -4
- package/lib/src/brand-page/constants/font.constants.d.ts +4 -4
- package/lib/src/brand-page/constants/font.constants.js +4 -4
- package/lib/src/brand-page/constants/misc.constants.d.ts +0 -35
- package/lib/src/brand-page/constants/misc.constants.js +0 -51
- package/lib/src/brand-page/models/content.model.d.ts +0 -2
- package/lib/src/brand-page/utils/index.d.ts +0 -1
- package/lib/src/brand-page/utils/index.js +0 -1
- package/lib/src/brand-page/utils/migration.util.js +0 -10
- package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +0 -2
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +0 -12
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +0 -14
- package/lib/src/brand-page-maker/constants/config-settings-constant.js +0 -39
- package/lib/src/brand-page-maker/convertors/about-display-style.convertor.js +1 -9
- package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +1 -7
- package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +1 -6
- package/lib/src/brand-page-maker/models/content-settings.js +2 -39
- package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +0 -12
- package/lib/src/{bundled-translations-BUyt4scr.js → bundled-translations-D1q3rSEz.js} +9 -9
- package/lib/src/{bundled-translations.de-DE-DEw_OVai.js → bundled-translations.de-DE-BxqLLwbh.js} +1 -1
- package/lib/src/{bundled-translations.es-ES-CFKWmkgY.js → bundled-translations.es-ES-uh249NlJ.js} +17 -17
- package/lib/src/{bundled-translations.fr-CA-DCl5LJS4.js → bundled-translations.fr-CA-BEQmv2fX.js} +1 -1
- package/lib/src/{bundled-translations.fr-FR-B5BjgllA.js → bundled-translations.fr-FR-BnNuCojH.js} +1 -1
- package/lib/src/{bundled-translations.pt-BR-5PWpMPuM.js → bundled-translations.pt-BR-CJUOxVlq.js} +1 -1
- package/lib/src/{bundled-translations.pt-PT-B9_wN0HR.js → bundled-translations.pt-PT-Ds9cMEqK.js} +9 -9
- package/lib/src/bundles/bundled-translations.de-DE.json +0 -2
- package/lib/src/bundles/bundled-translations.es-ES.json +0 -2
- package/lib/src/bundles/bundled-translations.fr-CA.json +0 -2
- package/lib/src/bundles/bundled-translations.fr-FR.json +0 -2
- package/lib/src/bundles/bundled-translations.json +0 -2
- package/lib/src/bundles/bundled-translations.pt-BR.json +0 -2
- package/lib/src/bundles/bundled-translations.pt-PT.json +0 -2
- package/lib/src/css/library.brand-page-brandCrowd.min.css +155 -141
- package/lib/src/css/library.brand-page-brandPage.min.css +155 -141
- package/lib/src/css/library.brand-page-designCom.min.css +155 -141
- package/lib/src/css/library.brand-page-preview.min.css +155 -141
- package/lib/src/index.mjs +1 -1
- package/lib/src/{lib-B3NH7cmE.js → lib--1xJXw4j.js} +21010 -21158
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +0 -14
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +0 -14
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +0 -12
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +0 -12
- package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +0 -12
- package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +0 -9
- package/lib/src/shared/content-settings/store/content-settings-store.d.ts +0 -12
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +0 -16
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +0 -14
- package/lib/src/utils/minify-brand-page-metadata.js +1 -11
- package/package.json +1 -1
- package/src/brand-page/components/about-section/AboutSection.vue +4 -10
- package/src/brand-page/components/banner-section/BannerSection.vue +4 -11
- package/src/brand-page/components/booking-section/BookingSection.vue +3 -11
- package/src/brand-page/components/contact-form/ContactForm.mixin.ts +6 -12
- package/src/brand-page/components/contact-form/ContactForm.vue +104 -105
- package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +0 -5
- package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
- package/src/brand-page/components/mailing-list/MailingList.mixin.ts +1 -8
- package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
- package/src/brand-page/components/map/Map.vue +1 -5
- package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +0 -5
- package/src/brand-page/components/payment/request-payment/RequestPayment.vue +0 -1
- package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +1 -8
- package/src/brand-page/components/payment/support-me/SupportMe.vue +0 -1
- package/src/brand-page/components/shop/Shop.vue +2 -7
- package/src/brand-page/components/social-links/SocialLinks.vue +3 -7
- package/src/brand-page/components/testimonial-section/TestimonialSection.mixin.ts +132 -0
- package/src/brand-page/components/testimonial-section/TestimonialSection.vue +11 -120
- package/src/brand-page/components/text/Text.vue +5 -12
- package/src/brand-page/components/text-media-section/TextMediaSection.vue +3 -11
- package/src/brand-page/components/video/Video.mixin.ts +0 -5
- package/src/brand-page/components/video/Video.vue +1 -1
- package/src/brand-page/constants/font.constants.ts +4 -4
- package/src/brand-page/constants/misc.constants.ts +0 -58
- package/src/brand-page/models/content.model.ts +0 -2
- package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -9
- package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +6 -6
- package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +12 -12
- package/src/brand-page/utils/index.ts +0 -1
- package/src/brand-page/utils/migration.util.test.ts +0 -290
- package/src/brand-page/utils/migration.util.ts +0 -11
- package/src/brand-page-maker/constants/config-settings-constant.ts +0 -45
- package/src/brand-page-maker/convertors/about-display-style.convertor.ts +0 -10
- package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +0 -8
- package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +0 -8
- package/src/brand-page-maker/models/content-settings.ts +2 -43
- package/src/bundles/bundled-translations.de-DE.json +0 -2
- package/src/bundles/bundled-translations.es-ES.json +0 -2
- package/src/bundles/bundled-translations.fr-CA.json +0 -2
- package/src/bundles/bundled-translations.fr-FR.json +0 -2
- package/src/bundles/bundled-translations.json +0 -2
- package/src/bundles/bundled-translations.pt-BR.json +0 -2
- package/src/bundles/bundled-translations.pt-PT.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +0 -2
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +0 -2
- package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
- package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
- package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +0 -9
- package/src/utils/minify-brand-page-metadata.ts +1 -11
- package/lib/src/brand-page/utils/content-padding.util.d.ts +0 -13
- package/lib/src/brand-page/utils/content-padding.util.js +0 -10
- package/lib/src/brand-page/utils/migration/migration-17.d.ts +0 -2
- package/lib/src/brand-page/utils/migration/migration-17.js +0 -60
- package/src/brand-page/utils/content-padding.util.test.ts +0 -29
- package/src/brand-page/utils/content-padding.util.ts +0 -13
- package/src/brand-page/utils/migration/migration-17.ts +0 -77
- package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +0 -50
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { defineComponent } from 'vue';
|
|
2
|
+
import type { PropType } from 'vue';
|
|
3
|
+
import ComponentCommonMixin from '../mixins/component-common.mixin';
|
|
4
|
+
import type { TestimonialSectionViewModel } from '@brand-page/view-models';
|
|
5
|
+
import type { BrandPageContext } from '@brand-page/models';
|
|
6
|
+
import { getRenderText } from '@brand-page/utils';
|
|
7
|
+
import type { DebounceHandle } from 'lodash.debounce';
|
|
8
|
+
import debounce from 'lodash.debounce';
|
|
9
|
+
import { DEVICE_CSS_TRANSITION_DELAY } from '@brand-page-maker/constants';
|
|
10
|
+
|
|
11
|
+
const DEBOUNCE_WAIT_MS = 100;
|
|
12
|
+
|
|
13
|
+
export default defineComponent({
|
|
14
|
+
mixins: [ComponentCommonMixin],
|
|
15
|
+
props: {
|
|
16
|
+
viewModel: {
|
|
17
|
+
type: Object as PropType<TestimonialSectionViewModel>,
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
isPreview: {
|
|
21
|
+
type: Boolean,
|
|
22
|
+
required: false,
|
|
23
|
+
default: false,
|
|
24
|
+
},
|
|
25
|
+
context: {
|
|
26
|
+
type: Object as PropType<BrandPageContext>,
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
contentIndex: {
|
|
30
|
+
type: Number,
|
|
31
|
+
required: false,
|
|
32
|
+
default: undefined,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
data() {
|
|
36
|
+
return {
|
|
37
|
+
debouncedForceCarouselUpdate: undefined as DebounceHandle | undefined,
|
|
38
|
+
carouselRef: 'testimonial-carousel',
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
created() {
|
|
42
|
+
this.debouncedForceCarouselUpdate = debounce(() => {
|
|
43
|
+
this.forceCarouselUpdate();
|
|
44
|
+
}, DEBOUNCE_WAIT_MS);
|
|
45
|
+
},
|
|
46
|
+
computed: {
|
|
47
|
+
textAlignClass() {
|
|
48
|
+
return {
|
|
49
|
+
'c_testimonial-big-image-text-item':
|
|
50
|
+
this.viewModel.displayStyle === 'big-image',
|
|
51
|
+
'tw-mb-2': this.viewModel.displayStyle !== 'big-image',
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
navigationUniqueIndexer() {
|
|
55
|
+
return `testimonial-${this.viewModel.id}`;
|
|
56
|
+
},
|
|
57
|
+
swiperOptions() {
|
|
58
|
+
return {
|
|
59
|
+
autoHeight: true,
|
|
60
|
+
navigation: {
|
|
61
|
+
prevEl: `.carousel__button-prev--${this.navigationUniqueIndexer}`,
|
|
62
|
+
nextEl: `.carousel__button-next--${this.navigationUniqueIndexer}`,
|
|
63
|
+
},
|
|
64
|
+
pagination: {
|
|
65
|
+
el: `.pagination--${this.navigationUniqueIndexer}`,
|
|
66
|
+
clickable: true,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
methods: {
|
|
72
|
+
renderText(val: string): string {
|
|
73
|
+
if (val) {
|
|
74
|
+
return getRenderText(val);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return '';
|
|
78
|
+
},
|
|
79
|
+
forceCarouselUpdate() {
|
|
80
|
+
const shouldUpdateCarousel = Boolean(
|
|
81
|
+
this.isPreview &&
|
|
82
|
+
(this.viewModel.items.length > 1 ||
|
|
83
|
+
this.viewModel.displayStyle === 'big-image') &&
|
|
84
|
+
this.$refs[this.carouselRef],
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
if (shouldUpdateCarousel) {
|
|
88
|
+
this.$refs[this.carouselRef].update();
|
|
89
|
+
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return false;
|
|
94
|
+
},
|
|
95
|
+
forceCarouselUpdateSlideWidth() {
|
|
96
|
+
if (this.forceCarouselUpdate()) {
|
|
97
|
+
try {
|
|
98
|
+
const width =
|
|
99
|
+
this.$refs[this.carouselRef].swiper.slidesEl.scrollWidth;
|
|
100
|
+
|
|
101
|
+
this.$refs[this.carouselRef].swiper.slidesEl.children.forEach(
|
|
102
|
+
(slide: HTMLElement) => {
|
|
103
|
+
const slideWidth = parseFloat(slide.style.width);
|
|
104
|
+
|
|
105
|
+
if (slideWidth !== width) {
|
|
106
|
+
slide.style.width = width + 'px';
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
console.warn('Testimonial: Unable to auto update slide width');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
watch: {
|
|
117
|
+
viewModel: {
|
|
118
|
+
handler() {
|
|
119
|
+
this.debouncedForceCarouselUpdate();
|
|
120
|
+
},
|
|
121
|
+
deep: true,
|
|
122
|
+
},
|
|
123
|
+
isMobileDevice(next, old) {
|
|
124
|
+
if (next !== old) {
|
|
125
|
+
setTimeout(
|
|
126
|
+
this.forceCarouselUpdateSlideWidth,
|
|
127
|
+
DEVICE_CSS_TRANSITION_DELAY + 1,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
data-component="testimonial-section"
|
|
4
4
|
class="c_testimonial-image"
|
|
5
5
|
style="container-type: inline-size"
|
|
6
|
-
:style="
|
|
6
|
+
:style="viewModel.backgroundStyle"
|
|
7
7
|
>
|
|
8
8
|
<div
|
|
9
9
|
:class="{
|
|
@@ -201,127 +201,16 @@
|
|
|
201
201
|
</div>
|
|
202
202
|
</section>
|
|
203
203
|
</template>
|
|
204
|
-
<script
|
|
205
|
-
import { computed, ref, watch } from 'vue';
|
|
204
|
+
<script>
|
|
206
205
|
import { Carousel, Icon } from '@designcrowd/fe-shared-lib';
|
|
206
|
+
import TestimonialSectionMixin from './TestimonialSection.mixin.ts';
|
|
207
207
|
import Media from '../media/Media.vue';
|
|
208
208
|
import TextWrapper from '../text-wrapper/TextWrapper.vue';
|
|
209
|
-
import type { TestimonialSectionViewModel } from '@brand-page/view-models';
|
|
210
|
-
import type { BrandPageContext } from '@brand-page/models';
|
|
211
|
-
import {
|
|
212
|
-
getRenderText,
|
|
213
|
-
contentPaddingStyle as toContentPaddingStyle,
|
|
214
|
-
} from '@brand-page/utils';
|
|
215
|
-
import debounce from 'lodash.debounce';
|
|
216
|
-
import { DEVICE_CSS_TRANSITION_DELAY } from '@brand-page-maker/constants';
|
|
217
209
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
defineProps<{
|
|
222
|
-
viewModel: TestimonialSectionViewModel;
|
|
223
|
-
context: BrandPageContext;
|
|
224
|
-
isPreview?: boolean;
|
|
225
|
-
isMobileDevice?: boolean;
|
|
226
|
-
contentIndex?: number;
|
|
227
|
-
}>(),
|
|
228
|
-
{
|
|
229
|
-
isPreview: false,
|
|
230
|
-
isMobileDevice: undefined,
|
|
231
|
-
contentIndex: undefined,
|
|
232
|
-
},
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
const carouselRef = ref<any>();
|
|
236
|
-
|
|
237
|
-
const contentPaddingStyle = computed(() =>
|
|
238
|
-
toContentPaddingStyle(props.viewModel),
|
|
239
|
-
);
|
|
240
|
-
|
|
241
|
-
const textAlignClass = computed(() => ({
|
|
242
|
-
'c_testimonial-big-image-text-item':
|
|
243
|
-
props.viewModel.displayStyle === 'big-image',
|
|
244
|
-
'tw-mb-2': props.viewModel.displayStyle !== 'big-image',
|
|
245
|
-
}));
|
|
246
|
-
|
|
247
|
-
const navigationUniqueIndexer = computed(
|
|
248
|
-
() => `testimonial-${props.viewModel.id}`,
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
const swiperOptions = computed(() => ({
|
|
252
|
-
autoHeight: true,
|
|
253
|
-
navigation: {
|
|
254
|
-
prevEl: `.carousel__button-prev--${navigationUniqueIndexer.value}`,
|
|
255
|
-
nextEl: `.carousel__button-next--${navigationUniqueIndexer.value}`,
|
|
256
|
-
},
|
|
257
|
-
pagination: {
|
|
258
|
-
el: `.pagination--${navigationUniqueIndexer.value}`,
|
|
259
|
-
clickable: true,
|
|
260
|
-
},
|
|
261
|
-
}));
|
|
262
|
-
|
|
263
|
-
const renderText = (val: string): string => (val ? getRenderText(val) : '');
|
|
264
|
-
|
|
265
|
-
const forceCarouselUpdate = (): boolean => {
|
|
266
|
-
const shouldUpdateCarousel = Boolean(
|
|
267
|
-
props.isPreview &&
|
|
268
|
-
(props.viewModel.items.length > 1 ||
|
|
269
|
-
props.viewModel.displayStyle === 'big-image') &&
|
|
270
|
-
carouselRef.value,
|
|
271
|
-
);
|
|
272
|
-
|
|
273
|
-
if (shouldUpdateCarousel) {
|
|
274
|
-
carouselRef.value.update();
|
|
275
|
-
|
|
276
|
-
return true;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
return false;
|
|
280
|
-
};
|
|
281
|
-
|
|
282
|
-
const forceCarouselUpdateSlideWidth = (): void => {
|
|
283
|
-
if (forceCarouselUpdate()) {
|
|
284
|
-
try {
|
|
285
|
-
const width = carouselRef.value.swiper.slidesEl.scrollWidth;
|
|
286
|
-
|
|
287
|
-
carouselRef.value.swiper.slidesEl.children.forEach(
|
|
288
|
-
(slide: HTMLElement) => {
|
|
289
|
-
const slideWidth = parseFloat(slide.style.width);
|
|
290
|
-
|
|
291
|
-
if (slideWidth !== width) {
|
|
292
|
-
slide.style.width = width + 'px';
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
);
|
|
296
|
-
} catch (error) {
|
|
297
|
-
console.warn('Testimonial: Unable to auto update slide width');
|
|
298
|
-
}
|
|
299
|
-
}
|
|
210
|
+
export default {
|
|
211
|
+
components: { Carousel, Media, Icon, TextWrapper },
|
|
212
|
+
mixins: [TestimonialSectionMixin],
|
|
300
213
|
};
|
|
301
|
-
|
|
302
|
-
const debouncedForceCarouselUpdate = debounce(() => {
|
|
303
|
-
forceCarouselUpdate();
|
|
304
|
-
}, DEBOUNCE_WAIT_MS);
|
|
305
|
-
|
|
306
|
-
watch(
|
|
307
|
-
() => props.viewModel,
|
|
308
|
-
() => {
|
|
309
|
-
debouncedForceCarouselUpdate();
|
|
310
|
-
},
|
|
311
|
-
{ deep: true },
|
|
312
|
-
);
|
|
313
|
-
|
|
314
|
-
watch(
|
|
315
|
-
() => props.isMobileDevice,
|
|
316
|
-
(next, old) => {
|
|
317
|
-
if (next !== old) {
|
|
318
|
-
setTimeout(
|
|
319
|
-
forceCarouselUpdateSlideWidth,
|
|
320
|
-
DEVICE_CSS_TRANSITION_DELAY + 1,
|
|
321
|
-
);
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
|
-
);
|
|
325
214
|
</script>
|
|
326
215
|
|
|
327
216
|
<style scoped>
|
|
@@ -332,15 +221,17 @@ watch(
|
|
|
332
221
|
--line-height: 1.5;
|
|
333
222
|
--name-spacing: 0.75rem;
|
|
334
223
|
--title-spacing: 1rem;
|
|
335
|
-
@apply tw-relative tw-box-border tw-max-w-full;
|
|
336
|
-
|
|
337
|
-
|
|
224
|
+
@apply tw-relative tw-p-24 tw-box-border tw-max-w-full;
|
|
225
|
+
padding-top: 2rem;
|
|
226
|
+
padding-bottom: 2rem;
|
|
338
227
|
padding-left: 1.5rem;
|
|
339
228
|
padding-right: 1.5rem;
|
|
340
229
|
}
|
|
341
230
|
|
|
342
231
|
@media (min-width: 767px) {
|
|
343
232
|
.c_testimonial-image {
|
|
233
|
+
padding-top: 5rem;
|
|
234
|
+
padding-bottom: 5rem;
|
|
344
235
|
padding-left: 4rem;
|
|
345
236
|
padding-right: 4rem;
|
|
346
237
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<div>
|
|
3
3
|
<div
|
|
4
4
|
v-if="!context.isBrandSite"
|
|
5
|
-
:style="
|
|
5
|
+
:style="containerStyle"
|
|
6
6
|
:class="{
|
|
7
7
|
[containerClasses]: true,
|
|
8
8
|
}"
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
data-test-tag="text-content-text"
|
|
16
16
|
/>
|
|
17
17
|
</div>
|
|
18
|
-
<div v-else :style="
|
|
18
|
+
<div v-else :style="containerStyle">
|
|
19
19
|
<div
|
|
20
|
-
class="c-text-container tw-px-6 grid-container tw-gap-4"
|
|
20
|
+
class="c-text-container tw-py-3 tw-px-6 grid-container tw-gap-4"
|
|
21
21
|
:class="{
|
|
22
22
|
[containerClasses]: true,
|
|
23
23
|
[gridClass]: context.isBrandSite,
|
|
@@ -41,10 +41,7 @@
|
|
|
41
41
|
import TextWrapper from '../text-wrapper/TextWrapper.vue';
|
|
42
42
|
import { computed } from 'vue';
|
|
43
43
|
import type { TextViewModel } from '@brand-page/view-models';
|
|
44
|
-
import {
|
|
45
|
-
getRenderText,
|
|
46
|
-
contentPaddingStyle as toContentPaddingStyle,
|
|
47
|
-
} from '@brand-page/utils';
|
|
44
|
+
import { getRenderText } from '@brand-page/utils';
|
|
48
45
|
import type { BrandPageContext } from '@brand-page/models';
|
|
49
46
|
|
|
50
47
|
interface Props {
|
|
@@ -54,10 +51,6 @@ interface Props {
|
|
|
54
51
|
|
|
55
52
|
const props = defineProps<Props>();
|
|
56
53
|
|
|
57
|
-
const contentPaddingStyle = computed(() =>
|
|
58
|
-
toContentPaddingStyle(props.viewModel),
|
|
59
|
-
);
|
|
60
|
-
|
|
61
54
|
const containerStyle = computed<any>(() => {
|
|
62
55
|
const containerStyles = {} as BrandPageCssStyle;
|
|
63
56
|
|
|
@@ -90,7 +83,7 @@ const containerClasses = computed(() => {
|
|
|
90
83
|
return '';
|
|
91
84
|
}
|
|
92
85
|
|
|
93
|
-
return 'tw-px-6';
|
|
86
|
+
return 'tw-py-3 tw-px-6';
|
|
94
87
|
});
|
|
95
88
|
|
|
96
89
|
const renderText = computed(() => {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section data-component="text-media-section">
|
|
3
3
|
<div
|
|
4
|
-
class="tw-relative tw-w-full tw-box-border"
|
|
4
|
+
class="tw-relative tw-w-full tw-box-border tw-py-8"
|
|
5
5
|
:class="{
|
|
6
6
|
'tw-pl-0 tw-pr-0': hasNoPadding || !hasBrandSitePadding,
|
|
7
7
|
'tw-rounded-md': hasRoundedCorners,
|
|
8
8
|
}"
|
|
9
|
-
:style="
|
|
9
|
+
:style="viewModel.backgroundStyle"
|
|
10
10
|
>
|
|
11
11
|
<div
|
|
12
12
|
:class="[
|
|
@@ -148,11 +148,7 @@ import {
|
|
|
148
148
|
MEDIA_ONLY,
|
|
149
149
|
} from '../../constants';
|
|
150
150
|
import { isHexTransparent } from '@brand-page/utils/color.util';
|
|
151
|
-
import {
|
|
152
|
-
escapeContentText,
|
|
153
|
-
getRenderText,
|
|
154
|
-
contentPaddingStyle as toContentPaddingStyle,
|
|
155
|
-
} from '@brand-page/utils';
|
|
151
|
+
import { escapeContentText, getRenderText } from '@brand-page/utils';
|
|
156
152
|
|
|
157
153
|
const props = defineProps({
|
|
158
154
|
viewModel: {
|
|
@@ -175,10 +171,6 @@ const props = defineProps({
|
|
|
175
171
|
},
|
|
176
172
|
});
|
|
177
173
|
|
|
178
|
-
const contentPaddingStyle = computed(() =>
|
|
179
|
-
toContentPaddingStyle(props.viewModel),
|
|
180
|
-
);
|
|
181
|
-
|
|
182
174
|
const items = computed(() => props.viewModel.items);
|
|
183
175
|
|
|
184
176
|
const shouldDisplayText = computed(
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { defineComponent } from 'vue';
|
|
2
2
|
import type { PropType } from 'vue';
|
|
3
3
|
import type { VideoViewModel } from '@brand-page/view-models';
|
|
4
|
-
import { contentPaddingStyle as toContentPaddingStyle } from '@brand-page/utils';
|
|
5
4
|
import ComponentCommonMixin from '../mixins/component-common.mixin';
|
|
6
5
|
import {
|
|
7
6
|
DISPLAY_STYLE_PREVIEW,
|
|
@@ -23,10 +22,6 @@ export default defineComponent({
|
|
|
23
22
|
title: 'Video',
|
|
24
23
|
}),
|
|
25
24
|
computed: {
|
|
26
|
-
contentPaddingStyle(): { paddingTop: string; paddingBottom: string } {
|
|
27
|
-
return toContentPaddingStyle(this.viewModel);
|
|
28
|
-
},
|
|
29
|
-
|
|
30
25
|
arrowStyle(): BrandPageCssStyle {
|
|
31
26
|
return {
|
|
32
27
|
color: this.viewModel.buttonStyles.style?.color,
|
|
@@ -8,10 +8,10 @@ export const DISPlAY_TEXT_BUTTONS = 'Button Texts';
|
|
|
8
8
|
export const DEFAULT_TEXT_DECORATION = undefined;
|
|
9
9
|
export const DEFAULT_FONT_STYLE = undefined;
|
|
10
10
|
|
|
11
|
-
export const FONT_SIZE_TITLE = '2.
|
|
12
|
-
export const FONT_SIZE_HEADINGS = '1.
|
|
13
|
-
export const FONT_SIZE_BODY = '
|
|
14
|
-
export const FONT_SIZE_PROFILE_NAME = '1.
|
|
11
|
+
export const FONT_SIZE_TITLE = '2.25rem';
|
|
12
|
+
export const FONT_SIZE_HEADINGS = '1.5rem';
|
|
13
|
+
export const FONT_SIZE_BODY = '1rem';
|
|
14
|
+
export const FONT_SIZE_PROFILE_NAME = '1.5rem';
|
|
15
15
|
|
|
16
16
|
export const FONT_WEIGHT_PROFILE_NAME = '800';
|
|
17
17
|
export const FONT_WEIGHT_NORMAL = 'normal';
|
|
@@ -38,64 +38,6 @@ export const ALIGN_LEFT_FULL_IMAGE = 'left-aligned-full-image';
|
|
|
38
38
|
export const ALIGN_RIGHT_FULL_IMAGE = 'right-aligned-full-image';
|
|
39
39
|
export const ALTERNATE_IMAGE = 'alternate-image';
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* Padding Control (BP-5699): the top/bottom padding each Contact Form layout
|
|
43
|
-
* had hard-coded before the sliders existed. Single source for new-block
|
|
44
|
-
* defaults (content-settings) and the migration backfill for existing pages.
|
|
45
|
-
* The image layouts (full-image divided and card-over-image) are 0: the bg
|
|
46
|
-
* image expands with the section padding (banner-style), so the default starts
|
|
47
|
-
* flush at the edges; the spacing inside/over the image stays fixed.
|
|
48
|
-
*/
|
|
49
|
-
export const CONTACT_FORM_LAYOUT_DEFAULT_PADDING: Record<string, number> = {
|
|
50
|
-
'': 0, // collapsible (default on Brand Page / Brand Contact)
|
|
51
|
-
[ALIGN_CENTERED]: 32,
|
|
52
|
-
[ALIGN_CARD_CENTER]: 32,
|
|
53
|
-
[ALIGN_CARD_CENTER_IMAGE]: 0,
|
|
54
|
-
[TEXT_ONLY]: 32,
|
|
55
|
-
[ALIGN_LEFT_FULL_IMAGE]: 0,
|
|
56
|
-
[ALIGN_RIGHT_FULL_IMAGE]: 0,
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Banner: full-bleed display styles (divided + full-width stacked) render the
|
|
61
|
-
* image flush to the section edges, so their top/bottom padding defaults to 0 to
|
|
62
|
-
* match prod — the standard 32 would push the image off the edges. Every other
|
|
63
|
-
* banner style keeps 32. Used by the banner display-style convertor and the
|
|
64
|
-
* migration backfill, mirroring contact-form's per-layout map above.
|
|
65
|
-
*/
|
|
66
|
-
export const BANNER_DEFAULT_PADDING = 32;
|
|
67
|
-
export const BANNER_FULL_BLEED_DISPLAY_STYLES = [
|
|
68
|
-
ALIGN_LEFT_FULL_IMAGE,
|
|
69
|
-
ALIGN_RIGHT_FULL_IMAGE,
|
|
70
|
-
ALIGN_TOP_FULL_IMAGE,
|
|
71
|
-
ALIGN_BOTTOM_FULL_IMAGE,
|
|
72
|
-
ALIGN_MIDDLE_FULL_IMAGE,
|
|
73
|
-
];
|
|
74
|
-
export const bannerDisplayStyleDefaultPadding = (
|
|
75
|
-
displayStyle?: string,
|
|
76
|
-
): number =>
|
|
77
|
-
displayStyle && BANNER_FULL_BLEED_DISPLAY_STYLES.includes(displayStyle)
|
|
78
|
-
? 0
|
|
79
|
-
: BANNER_DEFAULT_PADDING;
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* About: a flat 32 for every display style, including the two full-image styles.
|
|
83
|
-
* The full-image About renders the image inside the padded container, so the
|
|
84
|
-
* standard 32 band is the intended look. Used by the About display-style
|
|
85
|
-
* convertor and the migration backfill.
|
|
86
|
-
*/
|
|
87
|
-
export const ABOUT_DEFAULT_PADDING = 32;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Testimonials: a single top/bottom value across both breakpoints, replacing the
|
|
91
|
-
* old 32px mobile / 80px desktop split. The same value applies to every display
|
|
92
|
-
* style (centered / big-image / columns) — they share one root, so padding does
|
|
93
|
-
* not vary by style. Used by the new-block default and the migration backfill.
|
|
94
|
-
* Default (BP-5703): 48px — the single value chosen for both breakpoints (replaces
|
|
95
|
-
* the old 32px mobile / 80px desktop split).
|
|
96
|
-
*/
|
|
97
|
-
export const TESTIMONIAL_DEFAULT_PADDING = 48;
|
|
98
|
-
|
|
99
41
|
export const BIG_IMAGE = 'big-image';
|
|
100
42
|
export const MEDIA_ONLY = 'media-only';
|
|
101
43
|
export const COLUMNS = 'columns';
|
|
@@ -292,7 +292,6 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
|
|
|
292
292
|
"contents": [
|
|
293
293
|
{
|
|
294
294
|
"backgroundStyle": {},
|
|
295
|
-
"bottomPadding": 32,
|
|
296
295
|
"buttonLinkType": "url",
|
|
297
296
|
"buttonPageId": "",
|
|
298
297
|
"buttonText": "Get Started",
|
|
@@ -331,7 +330,6 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
|
|
|
331
330
|
"textAlign": "center",
|
|
332
331
|
"wordBreak": "normal",
|
|
333
332
|
},
|
|
334
|
-
"topPadding": 32,
|
|
335
333
|
"type": "banner-section",
|
|
336
334
|
"url": "",
|
|
337
335
|
},
|
|
@@ -456,7 +454,7 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
|
|
|
456
454
|
},
|
|
457
455
|
},
|
|
458
456
|
},
|
|
459
|
-
"v":
|
|
457
|
+
"v": 16,
|
|
460
458
|
},
|
|
461
459
|
"useOldLogoRenderSize": true,
|
|
462
460
|
}
|
|
@@ -753,7 +751,6 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
753
751
|
{
|
|
754
752
|
"contents": [
|
|
755
753
|
{
|
|
756
|
-
"bottomPadding": 12,
|
|
757
754
|
"id": "bec5aca6-e3c5-4d4c-93fa-2894816a8040",
|
|
758
755
|
"text": "",
|
|
759
756
|
"textColor": {},
|
|
@@ -777,7 +774,6 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
777
774
|
"textAlign": "center",
|
|
778
775
|
"textStyleType": "paragraphs",
|
|
779
776
|
},
|
|
780
|
-
"topPadding": 12,
|
|
781
777
|
"type": "text",
|
|
782
778
|
},
|
|
783
779
|
],
|
|
@@ -901,7 +897,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
901
897
|
},
|
|
902
898
|
},
|
|
903
899
|
},
|
|
904
|
-
"v":
|
|
900
|
+
"v": 16,
|
|
905
901
|
},
|
|
906
902
|
"useOldLogoRenderSize": true,
|
|
907
903
|
}
|
|
@@ -1198,7 +1194,6 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
1198
1194
|
{
|
|
1199
1195
|
"contents": [
|
|
1200
1196
|
{
|
|
1201
|
-
"bottomPadding": 12,
|
|
1202
1197
|
"id": "bec5aca6-e3c5-4d4c-93fa-2894816a8040",
|
|
1203
1198
|
"text": "",
|
|
1204
1199
|
"textColor": {},
|
|
@@ -1229,7 +1224,6 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
1229
1224
|
"textAlign": "center",
|
|
1230
1225
|
"textStyleType": "paragraphs",
|
|
1231
1226
|
},
|
|
1232
|
-
"topPadding": 12,
|
|
1233
1227
|
"type": "text",
|
|
1234
1228
|
},
|
|
1235
1229
|
],
|
|
@@ -1353,7 +1347,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
|
|
|
1353
1347
|
},
|
|
1354
1348
|
},
|
|
1355
1349
|
},
|
|
1356
|
-
"v":
|
|
1350
|
+
"v": 16,
|
|
1357
1351
|
},
|
|
1358
1352
|
"useOldLogoRenderSize": true,
|
|
1359
1353
|
}
|
|
@@ -156,7 +156,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
156
156
|
"borderTopWidth": "0px",
|
|
157
157
|
"color": undefined,
|
|
158
158
|
"fontFamily": "Lato",
|
|
159
|
-
"fontSize": "
|
|
159
|
+
"fontSize": "1rem",
|
|
160
160
|
"fontStyle": undefined,
|
|
161
161
|
"fontWeight": "normal",
|
|
162
162
|
"textAlign": "center",
|
|
@@ -230,7 +230,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
230
230
|
"borderTopWidth": "0px",
|
|
231
231
|
"color": undefined,
|
|
232
232
|
"fontFamily": "Lato",
|
|
233
|
-
"fontSize": "
|
|
233
|
+
"fontSize": "1rem",
|
|
234
234
|
"fontStyle": undefined,
|
|
235
235
|
"fontWeight": "normal",
|
|
236
236
|
"textAlign": "center",
|
|
@@ -410,7 +410,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
410
410
|
"style": {
|
|
411
411
|
"color": undefined,
|
|
412
412
|
"fontFamily": "Lato",
|
|
413
|
-
"fontSize": "
|
|
413
|
+
"fontSize": "1rem",
|
|
414
414
|
"fontStyle": undefined,
|
|
415
415
|
"fontWeight": undefined,
|
|
416
416
|
"letterSpacing": undefined,
|
|
@@ -426,7 +426,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
426
426
|
"style": {
|
|
427
427
|
"color": undefined,
|
|
428
428
|
"fontFamily": "Lato",
|
|
429
|
-
"fontSize": "1.
|
|
429
|
+
"fontSize": "1.5rem",
|
|
430
430
|
"fontStyle": undefined,
|
|
431
431
|
"fontWeight": undefined,
|
|
432
432
|
"letterSpacing": undefined,
|
|
@@ -442,7 +442,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
442
442
|
"style": {
|
|
443
443
|
"color": undefined,
|
|
444
444
|
"fontFamily": "Lato",
|
|
445
|
-
"fontSize": "
|
|
445
|
+
"fontSize": "1rem",
|
|
446
446
|
"fontStyle": undefined,
|
|
447
447
|
"fontWeight": undefined,
|
|
448
448
|
"letterSpacing": undefined,
|
|
@@ -458,7 +458,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
|
|
|
458
458
|
"style": {
|
|
459
459
|
"color": undefined,
|
|
460
460
|
"fontFamily": "Lato",
|
|
461
|
-
"fontSize": "2.
|
|
461
|
+
"fontSize": "2.25rem",
|
|
462
462
|
"fontStyle": undefined,
|
|
463
463
|
"fontWeight": undefined,
|
|
464
464
|
"letterSpacing": undefined,
|