@lightspeed/crane 1.1.1 → 1.1.3

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 (132) hide show
  1. package/dist/app.d.mts +76 -8
  2. package/dist/app.d.ts +76 -8
  3. package/dist/app.mjs +1 -1
  4. package/dist/cli.mjs +10 -23
  5. package/package.json +6 -5
  6. package/template/footers/example-footer/ExampleFooter.vue +12 -2
  7. package/template/footers/example-footer/assets/cart.svg +19 -0
  8. package/template/footers/example-footer/component/LegalLinks.vue +20 -0
  9. package/template/footers/example-footer/component/MadeWith.vue +23 -0
  10. package/template/footers/example-footer/component/ReportAbuse.vue +4 -3
  11. package/template/footers/example-footer/showcases/1.ts +1 -1
  12. package/template/headers/example-header/ExampleHeader.vue +38 -4
  13. package/template/headers/example-header/assets/account_icon.svg +11 -0
  14. package/template/headers/example-header/assets/lightspeed_logo.png +0 -0
  15. package/template/headers/example-header/component/Account.vue +20 -0
  16. package/template/headers/example-header/component/Cart.vue +14 -33
  17. package/template/headers/example-header/component/Logo.vue +95 -0
  18. package/template/headers/example-header/component/NavigationMenu.vue +53 -0
  19. package/template/headers/example-header/settings/translations.ts +6 -2
  20. package/template/headers/example-header/showcases/1.ts +32 -3
  21. package/template/headers/example-header/showcases/2.ts +42 -0
  22. package/template/headers/example-header/showcases/translations.ts +14 -2
  23. package/template/package.json +1 -1
  24. package/template/reference/sections/about-us/AboutUs.vue +73 -0
  25. package/template/reference/sections/about-us/assets/our_company_in_numbers.jpg +0 -0
  26. package/template/reference/sections/about-us/assets/our_company_in_numbers_preview.jpg +0 -0
  27. package/template/reference/sections/about-us/assets/our_team.jpg +0 -0
  28. package/template/reference/sections/about-us/assets/our_team_preview.jpg +0 -0
  29. package/template/reference/sections/about-us/client.ts +6 -0
  30. package/template/reference/sections/about-us/component/Image.vue +94 -0
  31. package/template/reference/sections/about-us/component/Stats.vue +155 -0
  32. package/template/reference/sections/about-us/component/Title.vue +32 -0
  33. package/template/reference/sections/about-us/server.ts +6 -0
  34. package/template/reference/sections/about-us/settings/content.ts +64 -0
  35. package/template/reference/sections/about-us/settings/design.ts +74 -0
  36. package/template/reference/sections/about-us/settings/layout.ts +12 -0
  37. package/template/reference/sections/about-us/settings/translations.ts +151 -0
  38. package/template/reference/sections/about-us/showcases/1.ts +176 -0
  39. package/template/reference/sections/about-us/showcases/2.ts +160 -0
  40. package/template/reference/sections/about-us/showcases/translations.ts +259 -0
  41. package/template/reference/sections/about-us/type.ts +5 -0
  42. package/template/reference/sections/about-us/util/visibility-provider.ts +27 -0
  43. package/template/reference/sections/intro-slider/IntroSlider.vue +77 -0
  44. package/template/reference/sections/intro-slider/assets/bike_1.jpg +0 -0
  45. package/template/reference/sections/intro-slider/assets/bike_1@2x.jpg +0 -0
  46. package/template/reference/sections/intro-slider/assets/bike_2.jpg +0 -0
  47. package/template/reference/sections/intro-slider/assets/bike_2@2x.jpg +0 -0
  48. package/template/reference/sections/intro-slider/assets/bike_3.jpg +0 -0
  49. package/template/reference/sections/intro-slider/assets/bike_3@2x.jpg +0 -0
  50. package/template/reference/sections/intro-slider/assets/bike_4.jpg +0 -0
  51. package/template/reference/sections/intro-slider/assets/bike_4@2x.jpg +0 -0
  52. package/template/reference/sections/intro-slider/assets/bike_5.jpg +0 -0
  53. package/template/reference/sections/intro-slider/assets/bike_5@2x.jpg +0 -0
  54. package/template/reference/sections/intro-slider/assets/bike_6.jpg +0 -0
  55. package/template/reference/sections/intro-slider/assets/bike_6@2x.jpg +0 -0
  56. package/template/reference/sections/intro-slider/assets/category_1.jpg +0 -0
  57. package/template/reference/sections/intro-slider/assets/category_1@2x.jpg +0 -0
  58. package/template/reference/sections/intro-slider/assets/category_2.jpg +0 -0
  59. package/template/reference/sections/intro-slider/assets/category_2@2x.jpg +0 -0
  60. package/template/reference/sections/intro-slider/assets/category_3.jpg +0 -0
  61. package/template/reference/sections/intro-slider/assets/category_3@2x.jpg +0 -0
  62. package/template/reference/sections/intro-slider/assets/category_5.jpg +0 -0
  63. package/template/reference/sections/intro-slider/assets/category_5@2x.jpg +0 -0
  64. package/template/reference/sections/intro-slider/assets/category_6.jpg +0 -0
  65. package/template/reference/sections/intro-slider/assets/category_6@2x.jpg +0 -0
  66. package/template/reference/sections/intro-slider/assets/custom_section_showcase_1_preview.png +0 -0
  67. package/template/reference/sections/intro-slider/assets/custom_section_showcase_2_preview.png +0 -0
  68. package/template/reference/sections/intro-slider/client.ts +5 -0
  69. package/template/reference/sections/intro-slider/component/Slider.vue +235 -0
  70. package/template/reference/sections/intro-slider/component/Title.vue +106 -0
  71. package/template/reference/sections/intro-slider/entity/color.ts +4 -0
  72. package/template/reference/sections/intro-slider/server.ts +5 -0
  73. package/template/reference/sections/intro-slider/settings/content.ts +43 -0
  74. package/template/reference/sections/intro-slider/settings/design.ts +88 -0
  75. package/template/reference/sections/intro-slider/settings/layout.ts +12 -0
  76. package/template/reference/sections/intro-slider/settings/translations.ts +53 -0
  77. package/template/reference/sections/intro-slider/showcases/1.ts +274 -0
  78. package/template/reference/sections/intro-slider/showcases/2.ts +270 -0
  79. package/template/reference/sections/intro-slider/showcases/translations.ts +88 -0
  80. package/template/reference/sections/intro-slider/type.ts +5 -0
  81. package/template/reference/sections/tag-lines/TagLines.vue +158 -0
  82. package/template/reference/sections/tag-lines/assets/explore_our_holiday_gift_guide.jpg +0 -0
  83. package/template/reference/sections/tag-lines/assets/fall_is_here.jpg +0 -0
  84. package/template/reference/sections/tag-lines/assets/fall_is_here_preview.jpg +0 -0
  85. package/template/reference/sections/tag-lines/assets/folding_bikes.jpg +0 -0
  86. package/template/reference/sections/tag-lines/assets/hybrid_bikes.jpg +0 -0
  87. package/template/reference/sections/tag-lines/assets/mountain_and_road_bikes.jpg +0 -0
  88. package/template/reference/sections/tag-lines/assets/shop_chelsea_boots.jpg +0 -0
  89. package/template/reference/sections/tag-lines/assets/sweater_weather.jpg +0 -0
  90. package/template/reference/sections/tag-lines/assets/what_we_sell.jpg +0 -0
  91. package/template/reference/sections/tag-lines/assets/what_we_sell_preview.jpg +0 -0
  92. package/template/reference/sections/tag-lines/client.ts +5 -0
  93. package/template/reference/sections/tag-lines/component/HighlightedText.vue +50 -0
  94. package/template/reference/sections/tag-lines/component/SectionImage.vue +78 -0
  95. package/template/reference/sections/tag-lines/component/Title.vue +51 -0
  96. package/template/reference/sections/tag-lines/composables/highlighted-text-image-list.ts +34 -0
  97. package/template/reference/sections/tag-lines/server.ts +5 -0
  98. package/template/reference/sections/tag-lines/settings/content.ts +37 -0
  99. package/template/reference/sections/tag-lines/settings/design.ts +81 -0
  100. package/template/reference/sections/tag-lines/settings/layout.ts +12 -0
  101. package/template/reference/sections/tag-lines/settings/translations.ts +61 -0
  102. package/template/reference/sections/tag-lines/showcases/1.ts +190 -0
  103. package/template/reference/sections/tag-lines/showcases/2.ts +190 -0
  104. package/template/reference/sections/tag-lines/showcases/translations.ts +49 -0
  105. package/template/reference/sections/tag-lines/type.ts +5 -0
  106. package/template/reference/shared/components/Button.vue +151 -0
  107. package/template/reference/shared/components/SectionWrapper.vue +26 -0
  108. package/template/reference/shared/components/Tagline.vue +45 -0
  109. package/template/reference/shared/utils/color.ts +16 -0
  110. package/template/reference/shared/utils/styles.ts +12 -0
  111. package/template/reference/templates/assets/reference_template_apparel_cover_image.jpg +0 -0
  112. package/template/reference/templates/assets/reference_template_bike_cover_image.jpg +0 -0
  113. package/template/reference/templates/reference-template-apparel.ts +44 -0
  114. package/template/reference/templates/reference-template-bike.ts +44 -0
  115. package/template/sections/example-section/ExampleSection.vue +8 -19
  116. package/template/sections/example-section/assets/bike_accessories_high.jpg +0 -0
  117. package/template/sections/example-section/assets/bike_accessories_low.jpg +0 -0
  118. package/template/sections/example-section/assets/bike_new_arrivals_high.jpg +0 -0
  119. package/template/sections/example-section/assets/bike_new_arrivals_low.jpg +0 -0
  120. package/template/sections/example-section/assets/custom_section_showcase_3_preview.jpg +0 -0
  121. package/template/sections/example-section/assets/fixed_gears_high.jpg +0 -0
  122. package/template/sections/example-section/assets/fixed_gears_low.jpg +0 -0
  123. package/template/sections/example-section/assets/repair_service_high.jpg +0 -0
  124. package/template/sections/example-section/assets/repair_service_low.jpg +0 -0
  125. package/template/sections/example-section/settings/translations.ts +39 -7
  126. package/template/sections/example-section/showcases/3.ts +198 -0
  127. package/template/sections/example-section/showcases/translations.ts +49 -1
  128. package/template/shared/components/LanguageSelector.vue +75 -0
  129. package/template/shared/components/SectionWrapper.vue +26 -0
  130. package/template/templates/template.ts +28 -43
  131. package/types.d.ts +264 -141
  132. package/template/headers/example-header/component/SampleComponent.vue +0 -11
@@ -0,0 +1,235 @@
1
+ <template>
2
+ <div class="slider-container">
3
+ <div class="slider-track" :style="animationStyle">
4
+ <div
5
+ v-for="(image, index) in repeatedItems"
6
+ :key="`${image.text?.value}__${index}`"
7
+ :class="sliderItemClass"
8
+ >
9
+ <img
10
+ v-if="slideImageDesign.visible && image.content?.hasContent"
11
+ class="slider-item__image"
12
+ :src="image.content.highResolutionMobileImage"
13
+ loading="lazy"
14
+ :alt="image.text?.value"
15
+ />
16
+
17
+ <div class="slider-item__wrapper">
18
+ <div
19
+ v-if="slideTextDesign.visible"
20
+ class="slider-item__text"
21
+ >
22
+ {{ image.text?.value }}
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </template>
29
+
30
+ <script setup lang="ts">
31
+ import {
32
+ ref,
33
+ computed,
34
+ onMounted,
35
+ onBeforeUnmount,
36
+ CSSProperties,
37
+ watch,
38
+ } from 'vue';
39
+ import {
40
+ useDeckElementContent,
41
+ EditorTypes,
42
+ Card,
43
+ TextAreaContent,
44
+ ImageContent,
45
+ useLayoutElementDesign,
46
+ useImageElementDesign,
47
+ useTextElementDesign,
48
+ } from '@lightspeed/crane';
49
+ import { Content, Design } from '../type.ts';
50
+
51
+ type Slide = {
52
+ text?: TextAreaContent;
53
+ content?: ImageContent;
54
+ }
55
+
56
+ const slideImageDesign = useImageElementDesign<Design>('image_content');
57
+ const slideTextDesign = useTextElementDesign<Design>('image_text');
58
+
59
+ const slideOverlayConfig = computed(() => ({
60
+ solidOverlay: (slideImageDesign.overlay?.solid?.color as Color).raw,
61
+ gradientOverlay: 'linear-gradient(180deg, '
62
+ + `${(slideImageDesign.overlay?.gradient?.fromColor as Color).raw}1A 0%, `
63
+ + `${(slideImageDesign.overlay?.gradient?.toColor as Color).raw}70 100%)`,
64
+ }));
65
+
66
+ const slideImageStyles = computed<CSSProperties>(() => {
67
+ const style: CSSProperties = {};
68
+
69
+ if (slideImageDesign.overlay?.type === 'gradient') {
70
+ style.background = slideOverlayConfig.value.gradientOverlay;
71
+ }
72
+ if (slideImageDesign.overlay?.type === 'solid') {
73
+ style.background = slideOverlayConfig.value.solidOverlay;
74
+ }
75
+
76
+ return style;
77
+ });
78
+
79
+ const slideTextStyles = computed<CSSProperties>(() => ({
80
+ fontSize: `${slideTextDesign.size}px`,
81
+ fontFamily: slideTextDesign.font,
82
+ color: (slideTextDesign.color as Color).hex,
83
+ fontStyle: slideTextDesign.italic ? 'italic' : 'normal',
84
+ fontWeight: slideTextDesign.bold ? 'bold' : 'normal',
85
+ }));
86
+
87
+ const sliderContent = useDeckElementContent<Content>('slider');
88
+
89
+ const slides = computed<Slide[]>(() => (
90
+ (sliderContent?.cards?.map((card: Card) => ({
91
+ text: sliderContent.getReactiveRef(card, EditorTypes.TEXTAREA, 'image_text') as TextAreaContent | undefined,
92
+ content: sliderContent.getReactiveRef(card, EditorTypes.IMAGE, 'image_content') as ImageContent | undefined,
93
+ })) ?? []).filter((image) => (image.content !== undefined && image.content.hasContent))
94
+ ));
95
+
96
+ const layoutDesign = useLayoutElementDesign();
97
+ const sliderItemClass = computed(() => [
98
+ 'slider-item',
99
+ {
100
+ 'slider-item--with-border-radius': layoutDesign.layout === 'Narrow_Title_And_Images_With_Border_Radius',
101
+ },
102
+ ]);
103
+
104
+ const windowWidth = ref<number>(typeof window !== 'undefined' ? window.innerWidth : 0);
105
+
106
+ const repeatedItems = ref<Slide[]>([]);
107
+
108
+ const isSmallWindow = computed<boolean>(() => windowWidth.value < 800);
109
+
110
+ const slideWidth = computed<number>(() => (isSmallWindow.value ? 167 : 256));
111
+ const formattedSlideWidth = computed<string>(() => `${slideWidth.value}px`);
112
+
113
+ const slideGap = computed<number>(() => (isSmallWindow.value ? 20 : 32));
114
+ const formattedSlideGap = computed<string>(() => `${slideGap.value}px`);
115
+
116
+ const slideSize = computed<number>(() => slideWidth.value + slideGap.value);
117
+
118
+ function initializeItems(): void {
119
+ windowWidth.value = window.innerWidth;
120
+ const minItemsToFillViewport = Math.ceil(windowWidth.value / slideSize.value);
121
+ const repeats = Math.ceil(minItemsToFillViewport / (slides.value?.length as number)) + 1;
122
+
123
+ repeatedItems.value = Array(repeats).fill(slides.value).flat();
124
+ }
125
+
126
+ const animationStyle = computed<CSSProperties>(() => {
127
+ const totalWidth = repeatedItems.value.length * slideSize.value;
128
+
129
+ return {
130
+ width: `${totalWidth}px`,
131
+ };
132
+ });
133
+
134
+ watch(slides, initializeItems);
135
+
136
+ onMounted(() => {
137
+ initializeItems();
138
+ window.addEventListener('resize', initializeItems);
139
+ });
140
+
141
+ onBeforeUnmount(() => {
142
+ window.removeEventListener('resize', initializeItems);
143
+ });
144
+ </script>
145
+
146
+ <style lang="scss" scoped>
147
+ .slider-container {
148
+ overflow: hidden;
149
+ width: 100%;
150
+ white-space: nowrap;
151
+ margin-top: 48px;
152
+
153
+ --slide-width: v-bind(formattedSlideWidth);
154
+ --slide-gap: v-bind(formattedSlideGap);
155
+ }
156
+
157
+ .slider-track {
158
+ display: flex;
159
+ align-items: center;
160
+ animation: scroll 40s linear infinite 1s;
161
+ -webkit-animation: scroll 40s linear infinite 1s;
162
+ }
163
+
164
+ .slider-item {
165
+ position: relative;
166
+ display: flex;
167
+ flex-direction: column;
168
+ align-items: center;
169
+ width: var(--slide-width);
170
+ margin-right: var(--slide-gap);
171
+ height: 218px;
172
+
173
+ flex-shrink: 0;
174
+ overflow: hidden;
175
+
176
+ &--with-border-radius {
177
+ border-radius: 16px;
178
+ }
179
+
180
+ @media screen and (min-width: 800px) {
181
+ height: 334px;
182
+
183
+ &--with-border-radius {
184
+ border-radius: 24px;
185
+ }
186
+ }
187
+
188
+ &__wrapper {
189
+ --slider-item-background: v-bind(slideImageStyles.background);
190
+
191
+ position: absolute;
192
+ display: flex;
193
+ width: 100%;
194
+ height: 100%;
195
+ left: 0;
196
+ bottom: 0;
197
+ padding: 16px;
198
+ background: var(--slider-item-background);
199
+ }
200
+
201
+ &__text {
202
+ --slider-item-text-font-size: v-bind(slideTextStyles.fontSize);
203
+ --slider-item-text-font-family: v-bind(slideTextStyles.fontFamily);
204
+ --slider-item-text-color: v-bind(slideTextStyles.color);
205
+ --slider-item-text-font-style: v-bind(slideTextStyles.fontStyle);
206
+ --slider-item-text-font-weight: v-bind(slideTextStyles.fontWeight);
207
+
208
+ margin: auto 0 0;
209
+ line-height: normal;
210
+ overflow: hidden;
211
+ text-overflow: ellipsis;
212
+ font-family: var(--slider-item-text-font-family);
213
+ font-size: var(--slider-item-text-font-size);
214
+ font-style: var(--slider-item-text-font-style);
215
+ font-weight: var(--slider-item-text-font-weight);
216
+ color: var(--slider-item-text-color);
217
+ }
218
+
219
+ &__image {
220
+ width: 100%;
221
+ height: 100%;
222
+ object-fit: cover;
223
+ }
224
+ }
225
+
226
+ @keyframes scroll {
227
+ 0% {
228
+ transform: translateX(0);
229
+ }
230
+
231
+ 100% {
232
+ transform: translateX(-50%);
233
+ }
234
+ }
235
+ </style>
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div :class="titleClass">
3
+ <h1 v-if="showTitle">
4
+ {{ titleContent.value }}
5
+ </h1>
6
+ <p v-if="showDescription">
7
+ {{ descriptionContent.value }}
8
+ </p>
9
+ </div>
10
+ </template>
11
+
12
+ <script setup lang="ts">
13
+ import { computed, CSSProperties } from 'vue';
14
+ import {
15
+ useLayoutElementDesign,
16
+ useTextareaElementContent, useTextareaElementDesign,
17
+ } from '@lightspeed/crane';
18
+ import { Content, Design } from '../type.ts';
19
+
20
+ const titleContent = useTextareaElementContent<Content>('section_title');
21
+ const descriptionContent = useTextareaElementContent<Content>('section_description');
22
+
23
+ const titleDesign = useTextareaElementDesign<Design>('section_title');
24
+ const descriptionDesign = useTextareaElementDesign<Design>('section_description');
25
+
26
+ const showTitle = computed<boolean>(() => titleDesign.visible && titleContent.hasContent);
27
+ const showDescription = computed<boolean>(() => descriptionDesign.visible && descriptionContent.hasContent);
28
+
29
+ const layoutDesign = useLayoutElementDesign();
30
+ const titleClass = computed(() => [
31
+ 'title',
32
+ {
33
+ 'title--narrow': layoutDesign.layout === 'Narrow_Title_And_Images_With_Border_Radius',
34
+ },
35
+ ]);
36
+
37
+ const titleStyle = computed<CSSProperties>(() => ({
38
+ fontSize: `${titleDesign.size}px`,
39
+ fontFamily: titleDesign.font,
40
+ color: (titleDesign.color as Color).hex,
41
+ fontStyle: titleDesign.italic ? 'italic' : 'normal',
42
+ fontWeight: titleDesign.bold ? 'bold' : 'normal',
43
+ }));
44
+
45
+ const descriptionStyle = computed<CSSProperties>(() => ({
46
+ fontSize: `${descriptionDesign.size}px`,
47
+ fontFamily: descriptionDesign.font,
48
+ color: (descriptionDesign.color as Color).hex,
49
+ fontStyle: descriptionDesign.italic ? 'italic' : 'normal',
50
+ fontWeight: descriptionDesign.bold ? 'bold' : 'normal',
51
+ }));
52
+ </script>
53
+
54
+ <style lang="scss" scoped>
55
+ .title {
56
+ text-align: center;
57
+ white-space: break-spaces;
58
+ word-break: break-word;
59
+ overflow-wrap: break-word;
60
+ padding: 0 20px;
61
+
62
+ &--narrow {
63
+ max-width: 660px;
64
+ }
65
+
66
+ h1 {
67
+ --font-size: v-bind(titleStyle.fontSize);
68
+ --font-family: v-bind(titleStyle.fontFamily);
69
+ --color: v-bind(titleStyle.color);
70
+ --font-style: v-bind(titleStyle.fontStyle);
71
+ --font-weight: v-bind(titleStyle.fontWeight);
72
+ --font-size-multiplier: 1;
73
+
74
+ font-size: calc(var(--font-size) * var(--font-size-multiplier));
75
+ font-family: var(--font-family);
76
+ color: var(--color);
77
+ font-style: var(--font-style);
78
+ font-weight: var(--font-weight);
79
+ line-height: 1.3;
80
+ margin-bottom: 24px;
81
+
82
+ @media screen and (max-width: 768px) {
83
+ --font-size-multiplier: 0.7;
84
+ }
85
+ }
86
+
87
+ p {
88
+ --font-size: v-bind(descriptionStyle.fontSize);
89
+ --font-family: v-bind(descriptionStyle.fontFamily);
90
+ --color: v-bind(descriptionStyle.color);
91
+ --font-style: v-bind(descriptionStyle.fontStyle);
92
+ --font-weight: v-bind(descriptionStyle.fontWeight);
93
+ --font-size-multiplier: 1;
94
+
95
+ font-size: calc(var(--font-size) * var(--font-size-multiplier));
96
+ font-family: var(--font-family);
97
+ color: var(--color);
98
+ font-style: var(--font-style);
99
+ font-weight: var(--font-weight);
100
+
101
+ @media screen and (max-width: 768px) {
102
+ --font-size-multiplier: 1.25;
103
+ }
104
+ }
105
+ }
106
+ </style>
@@ -0,0 +1,4 @@
1
+ export enum ColorType {
2
+ SOLID = 'solid',
3
+ GRADIENT = 'gradient',
4
+ }
@@ -0,0 +1,5 @@
1
+ import { createVueServerApp } from '@lightspeed/crane';
2
+ import ExampleSection from './IntroSlider.vue';
3
+ import { Content, Design } from './type.ts';
4
+
5
+ export default createVueServerApp<Content, Design>(ExampleSection);
@@ -0,0 +1,43 @@
1
+ export default {
2
+ section_title: {
3
+ type: 'TEXTAREA',
4
+ label: '$label.section_title.label',
5
+ placeholder: '$label.section_title.placeholder',
6
+ },
7
+ section_description: {
8
+ type: 'TEXTAREA',
9
+ label: '$label.section_description.label',
10
+ placeholder: '$label.section_description.placeholder',
11
+ },
12
+ section_tagline: {
13
+ type: 'INPUTBOX',
14
+ label: '$label.section_tagline.label',
15
+ placeholder: '$label.section_tagline.placeholder',
16
+ },
17
+ section_button: {
18
+ type: 'BUTTON',
19
+ label: '$label.section_button.label',
20
+ title: '$label.section_button.title',
21
+ },
22
+ slider: {
23
+ type: 'DECK',
24
+ label: '$label.slider.title',
25
+ addButtonLabel: '$label.slider.add_slide',
26
+ maxCards: 6,
27
+ cards: {
28
+ defaultCardContent: {
29
+ label: '$label.slider.slide_title',
30
+ settings: {
31
+ image_content: {
32
+ type: 'IMAGE',
33
+ label: '$label.slide_content.label',
34
+ },
35
+ image_text: {
36
+ type: 'TEXTAREA',
37
+ label: '$label.slide_text.label',
38
+ },
39
+ },
40
+ },
41
+ },
42
+ },
43
+ } as const;
@@ -0,0 +1,88 @@
1
+ export default {
2
+ section_title: {
3
+ type: 'TEXT',
4
+ label: '$label.section_title.label',
5
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
6
+ sizes: [18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60],
7
+ defaults: {
8
+ font: 'noto_serif',
9
+ size: 48,
10
+ bold: true,
11
+ italic: false,
12
+ color: '#000000',
13
+ visible: true,
14
+ },
15
+ },
16
+ section_description: {
17
+ type: 'TEXT',
18
+ label: '$label.section_description.label',
19
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
20
+ sizes: [12, 13, 14, 15, 16, 17, 18, 20],
21
+ defaults: {
22
+ font: 'inter',
23
+ size: 16,
24
+ bold: true,
25
+ italic: false,
26
+ color: '#000000',
27
+ visible: true,
28
+ },
29
+ },
30
+ section_tagline: {
31
+ type: 'TEXT',
32
+ label: '$label.section_tagline.label',
33
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
34
+ sizes: [12, 13, 14, 15, 16, 17, 18, 20],
35
+ defaults: {
36
+ font: 'noto_serif',
37
+ size: 16,
38
+ bold: false,
39
+ italic: false,
40
+ color: '#C8D9FF',
41
+ visible: true,
42
+ },
43
+ },
44
+ section_button: {
45
+ type: 'BUTTON',
46
+ label: '$label.section_button.label',
47
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
48
+ defaults: {
49
+ appearance: 'SOLID',
50
+ size: 'MEDIUM',
51
+ style: 'pill',
52
+ color: '#000000',
53
+ visible: true,
54
+ },
55
+ },
56
+ background: {
57
+ type: 'BACKGROUND',
58
+ label: '$label.background.label',
59
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
60
+ defaults: {
61
+ style: 'COLOR',
62
+ color: '#F4EFE3',
63
+ },
64
+ },
65
+ image_text: {
66
+ type: 'TEXT',
67
+ label: '$label.section_image_text.label',
68
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
69
+ sizes: [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
70
+ defaults: {
71
+ font: 'noto_serif',
72
+ size: 24,
73
+ bold: true,
74
+ italic: false,
75
+ color: '#FFFFFF',
76
+ visible: true,
77
+ },
78
+ },
79
+ image_content: {
80
+ type: 'IMAGE',
81
+ label: '$label.section_image.label',
82
+ colors: ['#000000', '#FFFFFF', '#C8D9FF', '#FFB92E', '#F4EFE3'],
83
+ defaults: {
84
+ overlay: 'GRADIENT',
85
+ color: ['#000000', '#000000'],
86
+ },
87
+ },
88
+ } as const;
@@ -0,0 +1,12 @@
1
+ export default [
2
+ {
3
+ layoutId: 'Narrow_Title_And_Images_With_Border_Radius',
4
+ selectedContentSettings: [],
5
+ selectedDesignSettings: [],
6
+ },
7
+ {
8
+ layoutId: 'Wide_Title_And_Images_Without_Border_Radius',
9
+ selectedContentSettings: [],
10
+ selectedDesignSettings: [],
11
+ },
12
+ ];
@@ -0,0 +1,53 @@
1
+ export default {
2
+ en: {
3
+ '$label.section_title.label': 'Main title',
4
+ '$label.section_title.placeholder': 'This will be the main title for this section',
5
+ '$label.section_description.label': 'Description',
6
+ '$label.section_description.placeholder': 'This description will be displayed below the title',
7
+ '$label.section_tagline.label': 'Tagline',
8
+ '$label.section_tagline.placeholder': 'This label will be displayed above the title',
9
+ '$label.section_button.label': 'Button',
10
+ '$label.section_image_text.label': 'Image title',
11
+ '$label.section_image.label': 'Image',
12
+
13
+ '$label.slider.title': 'Slider',
14
+ '$label.slider.slide_title': 'Slide',
15
+ '$label.slider.add_slide': 'Add slide',
16
+ '$label.slide_text.label': 'Text on a slide',
17
+ '$label.slide_content.label': 'Slide image',
18
+
19
+ '$label.background.label': 'Background',
20
+ },
21
+
22
+ nl: {
23
+ '$label.showcase_1.blockName': 'Hoe we werken',
24
+ '$label.showcase_1.section_tagline.text': 'Seizoensgebonden',
25
+ '$label.showcase_1.section_title.text': 'De herfst is hier:',
26
+ '$label.showcase_1.highlighted_text_1.text': 'trui weer',
27
+ '$label.showcase_1.highlighted_text_2.text': 'shop chelsea boots',
28
+ '$label.showcase_1.highlighted_text_3.text': 'ontdek onze vakantiecadeaugids',
29
+
30
+ '$label.showcase_2.blockName': 'Hoe we werken',
31
+ '$label.showcase_2.section_tagline.text': 'Onze fietsen',
32
+ '$label.showcase_2.section_title.text': 'Wat we verkopen:',
33
+ '$label.showcase_2.highlighted_text_1.text': 'mountain- en racefietsen',
34
+ '$label.showcase_2.highlighted_text_2.text': 'hybride fietsen',
35
+ '$label.showcase_2.highlighted_text_3.text': 'vouwfietsen',
36
+ },
37
+
38
+ fr: {
39
+ '$label.showcase_1.blockName': 'Comment nous travaillons',
40
+ '$label.showcase_1.section_tagline.text': 'Saisonnier',
41
+ '$label.showcase_1.section_title.text': 'L\'automne est là:',
42
+ '$label.showcase_1.highlighted_text_1.text': 'temps des pulls',
43
+ '$label.showcase_1.highlighted_text_2.text': 'achetez des bottes chelsea',
44
+ '$label.showcase_1.highlighted_text_3.text': 'découvrez notre guide des cadeaux de vacances',
45
+
46
+ '$label.showcase_2.blockName': 'Comment nous travaillons',
47
+ '$label.showcase_2.section_tagline.text': 'Nos vélos',
48
+ '$label.showcase_2.section_title.text': 'Ce que nous vendons:',
49
+ '$label.showcase_2.highlighted_text_1.text': 'vélos de montagne et de route',
50
+ '$label.showcase_2.highlighted_text_2.text': 'vélos hybrides',
51
+ '$label.showcase_2.highlighted_text_3.text': 'vélos pliants',
52
+ },
53
+ } as const;