@lightspeed/crane 1.1.2 → 1.2.0

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 (134) hide show
  1. package/bin/crane.js +0 -1
  2. package/dist/app.d.mts +20 -2
  3. package/dist/app.d.ts +20 -2
  4. package/dist/app.mjs +1 -1
  5. package/dist/cli.mjs +10 -23
  6. package/package.json +10 -5
  7. package/template/footers/example-footer/ExampleFooter.vue +6 -1
  8. package/template/footers/example-footer/assets/cart.svg +19 -0
  9. package/template/footers/example-footer/component/LegalLinks.vue +2 -2
  10. package/template/footers/example-footer/component/MadeWith.vue +23 -0
  11. package/template/footers/example-footer/component/ReportAbuse.vue +4 -3
  12. package/template/footers/example-footer/showcases/1.ts +1 -1
  13. package/template/headers/example-header/ExampleHeader.vue +17 -2
  14. package/template/headers/example-header/component/Account.vue +4 -4
  15. package/template/headers/example-header/component/Cart.vue +14 -33
  16. package/template/headers/example-header/settings/content.ts +1 -9
  17. package/template/headers/example-header/settings/design.ts +1 -23
  18. package/template/package.json +1 -1
  19. package/template/reference/sections/about-us/AboutUs.vue +73 -0
  20. package/template/reference/sections/about-us/assets/our_company_in_numbers.jpg +0 -0
  21. package/template/reference/sections/about-us/assets/our_company_in_numbers_preview.jpg +0 -0
  22. package/template/reference/sections/about-us/assets/our_team.jpg +0 -0
  23. package/template/reference/sections/about-us/assets/our_team_preview.jpg +0 -0
  24. package/template/reference/sections/about-us/client.ts +6 -0
  25. package/template/reference/sections/about-us/component/Image.vue +94 -0
  26. package/template/reference/sections/about-us/component/Stats.vue +155 -0
  27. package/template/reference/sections/about-us/component/Title.vue +32 -0
  28. package/template/reference/sections/about-us/server.ts +6 -0
  29. package/template/reference/sections/about-us/settings/content.ts +64 -0
  30. package/template/reference/sections/about-us/settings/design.ts +74 -0
  31. package/template/reference/sections/about-us/settings/layout.ts +12 -0
  32. package/template/reference/sections/about-us/settings/translations.ts +151 -0
  33. package/template/reference/sections/about-us/showcases/1.ts +155 -0
  34. package/template/reference/sections/about-us/showcases/2.ts +143 -0
  35. package/template/reference/sections/about-us/showcases/translations.ts +259 -0
  36. package/template/reference/sections/about-us/type.ts +5 -0
  37. package/template/reference/sections/about-us/util/visibility-provider.ts +27 -0
  38. package/template/reference/sections/intro-slider/IntroSlider.vue +77 -0
  39. package/template/reference/sections/intro-slider/assets/bike_1.jpg +0 -0
  40. package/template/reference/sections/intro-slider/assets/bike_1@2x.jpg +0 -0
  41. package/template/reference/sections/intro-slider/assets/bike_2.jpg +0 -0
  42. package/template/reference/sections/intro-slider/assets/bike_2@2x.jpg +0 -0
  43. package/template/reference/sections/intro-slider/assets/bike_3.jpg +0 -0
  44. package/template/reference/sections/intro-slider/assets/bike_3@2x.jpg +0 -0
  45. package/template/reference/sections/intro-slider/assets/bike_4.jpg +0 -0
  46. package/template/reference/sections/intro-slider/assets/bike_4@2x.jpg +0 -0
  47. package/template/reference/sections/intro-slider/assets/bike_5.jpg +0 -0
  48. package/template/reference/sections/intro-slider/assets/bike_5@2x.jpg +0 -0
  49. package/template/reference/sections/intro-slider/assets/bike_6.jpg +0 -0
  50. package/template/reference/sections/intro-slider/assets/bike_6@2x.jpg +0 -0
  51. package/template/reference/sections/intro-slider/assets/category_1.jpg +0 -0
  52. package/template/reference/sections/intro-slider/assets/category_1@2x.jpg +0 -0
  53. package/template/reference/sections/intro-slider/assets/category_2.jpg +0 -0
  54. package/template/reference/sections/intro-slider/assets/category_2@2x.jpg +0 -0
  55. package/template/reference/sections/intro-slider/assets/category_3.jpg +0 -0
  56. package/template/reference/sections/intro-slider/assets/category_3@2x.jpg +0 -0
  57. package/template/reference/sections/intro-slider/assets/category_5.jpg +0 -0
  58. package/template/reference/sections/intro-slider/assets/category_5@2x.jpg +0 -0
  59. package/template/reference/sections/intro-slider/assets/category_6.jpg +0 -0
  60. package/template/reference/sections/intro-slider/assets/category_6@2x.jpg +0 -0
  61. package/template/reference/sections/intro-slider/assets/custom_section_showcase_1_preview.png +0 -0
  62. package/template/reference/sections/intro-slider/assets/custom_section_showcase_2_preview.png +0 -0
  63. package/template/reference/sections/intro-slider/client.ts +5 -0
  64. package/template/reference/sections/intro-slider/component/Slider.vue +235 -0
  65. package/template/reference/sections/intro-slider/component/Title.vue +106 -0
  66. package/template/reference/sections/intro-slider/entity/color.ts +4 -0
  67. package/template/reference/sections/intro-slider/server.ts +5 -0
  68. package/template/reference/sections/intro-slider/settings/content.ts +43 -0
  69. package/template/reference/sections/intro-slider/settings/design.ts +88 -0
  70. package/template/reference/sections/intro-slider/settings/layout.ts +12 -0
  71. package/template/reference/sections/intro-slider/settings/translations.ts +53 -0
  72. package/template/reference/sections/intro-slider/showcases/1.ts +275 -0
  73. package/template/reference/sections/intro-slider/showcases/2.ts +271 -0
  74. package/template/reference/sections/intro-slider/showcases/translations.ts +88 -0
  75. package/template/reference/sections/intro-slider/type.ts +5 -0
  76. package/template/reference/sections/tag-lines/TagLines.vue +158 -0
  77. package/template/reference/sections/tag-lines/assets/explore_our_holiday_gift_guide.jpg +0 -0
  78. package/template/reference/sections/tag-lines/assets/fall_is_here.jpg +0 -0
  79. package/template/reference/sections/tag-lines/assets/fall_is_here_preview.jpg +0 -0
  80. package/template/reference/sections/tag-lines/assets/folding_bikes.jpg +0 -0
  81. package/template/reference/sections/tag-lines/assets/hybrid_bikes.jpg +0 -0
  82. package/template/reference/sections/tag-lines/assets/mountain_and_road_bikes.jpg +0 -0
  83. package/template/reference/sections/tag-lines/assets/shop_chelsea_boots.jpg +0 -0
  84. package/template/reference/sections/tag-lines/assets/sweater_weather.jpg +0 -0
  85. package/template/reference/sections/tag-lines/assets/what_we_sell.jpg +0 -0
  86. package/template/reference/sections/tag-lines/assets/what_we_sell_preview.jpg +0 -0
  87. package/template/reference/sections/tag-lines/client.ts +5 -0
  88. package/template/reference/sections/tag-lines/component/HighlightedText.vue +50 -0
  89. package/template/reference/sections/tag-lines/component/SectionImage.vue +78 -0
  90. package/template/reference/sections/tag-lines/component/Title.vue +51 -0
  91. package/template/reference/sections/tag-lines/composables/highlighted-text-image-list.ts +34 -0
  92. package/template/reference/sections/tag-lines/server.ts +5 -0
  93. package/template/reference/sections/tag-lines/settings/content.ts +37 -0
  94. package/template/reference/sections/tag-lines/settings/design.ts +81 -0
  95. package/template/reference/sections/tag-lines/settings/layout.ts +12 -0
  96. package/template/reference/sections/tag-lines/settings/translations.ts +61 -0
  97. package/template/reference/sections/tag-lines/showcases/1.ts +190 -0
  98. package/template/reference/sections/tag-lines/showcases/2.ts +190 -0
  99. package/template/reference/sections/tag-lines/showcases/translations.ts +49 -0
  100. package/template/reference/sections/tag-lines/type.ts +5 -0
  101. package/template/reference/shared/components/Button.vue +151 -0
  102. package/template/reference/shared/components/SectionWrapper.vue +26 -0
  103. package/template/reference/shared/components/Tagline.vue +45 -0
  104. package/template/reference/shared/utils/color.ts +16 -0
  105. package/template/reference/shared/utils/styles.ts +12 -0
  106. package/template/reference/templates/assets/reference_template_apparel_cover_image.jpg +0 -0
  107. package/template/reference/templates/assets/reference_template_bike_cover_image.jpg +0 -0
  108. package/template/reference/templates/reference-template-apparel.ts +44 -0
  109. package/template/reference/templates/reference-template-bike.ts +44 -0
  110. package/template/sections/example-section/ExampleSection.vue +21 -24
  111. package/template/sections/example-section/assets/arrow.svg +3 -0
  112. package/template/sections/example-section/assets/bike_accessories_high.jpg +0 -0
  113. package/template/sections/example-section/assets/bike_accessories_low.jpg +0 -0
  114. package/template/sections/example-section/assets/bike_new_arrivals_high.jpg +0 -0
  115. package/template/sections/example-section/assets/bike_new_arrivals_low.jpg +0 -0
  116. package/template/sections/example-section/assets/custom_section_showcase_3_preview.jpg +0 -0
  117. package/template/sections/example-section/assets/fixed_gears_high.jpg +0 -0
  118. package/template/sections/example-section/assets/fixed_gears_low.jpg +0 -0
  119. package/template/sections/example-section/assets/repair_service_high.jpg +0 -0
  120. package/template/sections/example-section/assets/repair_service_low.jpg +0 -0
  121. package/template/sections/example-section/component/button/Button.vue +87 -0
  122. package/template/sections/example-section/component/selectbox/Selectbox.vue +45 -0
  123. package/template/sections/example-section/component/toggle/Toggle.vue +110 -0
  124. package/template/sections/example-section/settings/content.ts +45 -0
  125. package/template/sections/example-section/settings/translations.ts +87 -7
  126. package/template/sections/example-section/showcases/1.ts +43 -0
  127. package/template/sections/example-section/showcases/2.ts +43 -0
  128. package/template/sections/example-section/showcases/3.ts +241 -0
  129. package/template/sections/example-section/showcases/translations.ts +205 -1
  130. package/template/shared/{LanguageSelector.vue → components/LanguageSelector.vue} +5 -5
  131. package/template/shared/components/SectionWrapper.vue +26 -0
  132. package/template/shared/utils.ts +28 -0
  133. package/template/templates/template.ts +2 -1
  134. package/types.d.ts +96 -70
@@ -0,0 +1,259 @@
1
+ export default {
2
+ en: {
3
+ '$label.showcase_1.blockName': 'Reference Section – About us',
4
+
5
+ '$label.showcase_1.section_title.text': 'Our company in numbers',
6
+
7
+ '$label.showcase_1.stat_value_1.label': 'Value',
8
+ '$label.showcase_1.stat_value_1.placeholder': 'Value',
9
+ '$label.showcase_1.stat_value.default_1.text': '120',
10
+
11
+ '$label.showcase_1.stat_caption_1.label': 'Caption',
12
+ '$label.showcase_1.stat_caption_1.placeholder': 'Caption',
13
+ '$label.showcase_1.stat_caption_1.default.text': 'People',
14
+
15
+ '$label.showcase_1.stat_value_2.label': 'Value',
16
+ '$label.showcase_1.stat_value_2.placeholder': 'Value',
17
+ '$label.showcase_1.stat_value.default_2.text': '1500',
18
+
19
+ '$label.showcase_1.stat_caption_2.label': 'Caption',
20
+ '$label.showcase_1.stat_caption_2.placeholder': 'Caption',
21
+ '$label.showcase_1.stat_caption_2.default.text': 'Customers per month',
22
+
23
+ '$label.showcase_1.stat_value_3.label': 'Value',
24
+ '$label.showcase_1.stat_value_3.placeholder': 'Value',
25
+ '$label.showcase_1.stat_value.default_3.text': '1500000',
26
+
27
+ '$label.showcase_1.stat_caption_3.label': 'Caption',
28
+ '$label.showcase_1.stat_caption_3.placeholder': 'Caption',
29
+ '$label.showcase_1.stat_caption_3.default.text': 'Unique customers so far',
30
+
31
+ '$label.showcase_1.stat_value_4.label': 'Value',
32
+ '$label.showcase_1.stat_value_4.placeholder': 'Value',
33
+ '$label.showcase_1.stat_value.default_4.text': '3.3',
34
+
35
+ '$label.showcase_1.stat_caption_4.label': 'Caption',
36
+ '$label.showcase_1.stat_caption_4.placeholder': 'Caption',
37
+ '$label.showcase_1.stat_caption_4.default.text': 'Items per order in average',
38
+
39
+ '$label.showcase_1.stat_value_5.label': 'Value',
40
+ '$label.showcase_1.stat_value_5.placeholder': 'Value',
41
+ '$label.showcase_1.stat_value.default_5.text': '15',
42
+
43
+ '$label.showcase_1.stat_caption_5.label': 'Caption',
44
+ '$label.showcase_1.stat_caption_5.placeholder': 'Caption',
45
+ '$label.showcase_1.stat_caption_5.default.text': 'Warehouses',
46
+
47
+ '$label.showcase_1.button_content.title': 'Learn more',
48
+
49
+ '$label.showcase_2.blockName': 'Our team',
50
+
51
+ '$label.showcase_2.section_title.text': 'Our team',
52
+
53
+ '$label.showcase_2.stat_value_1.label': 'Value',
54
+ '$label.showcase_2.stat_value_1.placeholder': 'Value',
55
+ '$label.showcase_2.stat_value.default_1.text': '45',
56
+
57
+ '$label.showcase_2.stat_caption_1.label': 'Caption',
58
+ '$label.showcase_2.stat_caption_1.placeholder': 'Caption',
59
+ '$label.showcase_2.stat_caption_1.default.text': 'People',
60
+
61
+ '$label.showcase_2.stat_value_2.label': 'Value',
62
+ '$label.showcase_2.stat_value_2.placeholder': 'Value',
63
+ '$label.showcase_2.stat_value.default_2.text': '15',
64
+
65
+ '$label.showcase_2.stat_caption_2.label': 'Caption',
66
+ '$label.showcase_2.stat_caption_2.placeholder': 'Caption',
67
+ '$label.showcase_2.stat_caption_2.default.text': 'Nationalities',
68
+
69
+ '$label.showcase_2.stat_value_3.label': 'Value',
70
+ '$label.showcase_2.stat_value_3.placeholder': 'Value',
71
+ '$label.showcase_2.stat_value.default_3.text': '0',
72
+
73
+ '$label.showcase_2.stat_caption_3.label': 'Caption',
74
+ '$label.showcase_2.stat_caption_3.placeholder': 'Caption',
75
+ '$label.showcase_2.stat_caption_3.default.text': 'Managers',
76
+
77
+ '$label.showcase_2.stat_value_4.label': 'Value',
78
+ '$label.showcase_2.stat_value_4.placeholder': 'Value',
79
+ '$label.showcase_2.stat_value.default_4.text': '75',
80
+
81
+ '$label.showcase_2.stat_caption_4.label': 'Caption',
82
+ '$label.showcase_2.stat_caption_4.placeholder': 'Caption',
83
+ '$label.showcase_2.stat_caption_4.default.text': 'Bikes team members have',
84
+
85
+ '$label.showcase_2.button_content.title': 'Learn more',
86
+ },
87
+
88
+ nl: {
89
+ '$label.showcase_1.blockName': 'Referentie Sectie – Over ons',
90
+
91
+ '$label.showcase_1.section_title.text': 'Ons bedrijf in cijfers',
92
+
93
+ '$label.showcase_1.stat_value_1.label': 'Waarde',
94
+ '$label.showcase_1.stat_value_1.placeholder': 'Waarde',
95
+ '$label.showcase_1.stat_value.default_1.text': '120',
96
+
97
+ '$label.showcase_1.stat_caption_1.label': 'Bijschrift',
98
+ '$label.showcase_1.stat_caption_1.placeholder': 'Bijschrift',
99
+ '$label.showcase_1.stat_caption_1.default.text': 'Mensen',
100
+
101
+ '$label.showcase_1.stat_value_2.label': 'Waarde',
102
+ '$label.showcase_1.stat_value_2.placeholder': 'Waarde',
103
+ '$label.showcase_1.stat_value.default_2.text': '1500',
104
+
105
+ '$label.showcase_1.stat_caption_2.label': 'Bijschrift',
106
+ '$label.showcase_1.stat_caption_2.placeholder': 'Bijschrift',
107
+ '$label.showcase_1.stat_caption_2.default.text': 'Klanten per maand',
108
+
109
+ '$label.showcase_1.stat_value_3.label': 'Waarde',
110
+ '$label.showcase_1.stat_value_3.placeholder': 'Waarde',
111
+ '$label.showcase_1.stat_value.default_3.text': '1500000',
112
+
113
+ '$label.showcase_1.stat_caption_3.label': 'Bijschrift',
114
+ '$label.showcase_1.stat_caption_3.placeholder': 'Bijschrift',
115
+ '$label.showcase_1.stat_caption_3.default.text': 'Unieke klanten tot nu toe',
116
+
117
+ '$label.showcase_1.stat_value_4.label': 'Waarde',
118
+ '$label.showcase_1.stat_value_4.placeholder': 'Waarde',
119
+ '$label.showcase_1.stat_value.default_4.text': '3.3',
120
+
121
+ '$label.showcase_1.stat_caption_4.label': 'Bijschrift',
122
+ '$label.showcase_1.stat_caption_4.placeholder': 'Bijschrift',
123
+ '$label.showcase_1.stat_caption_4.default.text': 'Artikelen per bestelling gemiddeld',
124
+
125
+ '$label.showcase_1.stat_value_5.label': 'Waarde',
126
+ '$label.showcase_1.stat_value_5.placeholder': 'Waarde',
127
+ '$label.showcase_1.stat_value.default_5.text': '15',
128
+
129
+ '$label.showcase_1.stat_caption_5.label': 'Bijschrift',
130
+ '$label.showcase_1.stat_caption_5.placeholder': 'Bijschrift',
131
+ '$label.showcase_1.stat_caption_5.default.text': 'Magazijnen',
132
+
133
+ '$label.showcase_1.button_content.title': 'Meer informatie',
134
+
135
+ '$label.showcase_2.blockName': 'Referentie Sectie – Ons team',
136
+
137
+ '$label.showcase_2.section_title.text': 'Ons team',
138
+
139
+ '$label.showcase_2.stat_value_1.label': 'Waarde',
140
+ '$label.showcase_2.stat_value_1.placeholder': 'Waarde',
141
+ '$label.showcase_2.stat_value.default_1.text': '45',
142
+
143
+ '$label.showcase_2.stat_caption_1.label': 'Bijschrift',
144
+ '$label.showcase_2.stat_caption_1.placeholder': 'Bijschrift',
145
+ '$label.showcase_2.stat_caption_1.default.text': 'Mensen',
146
+
147
+ '$label.showcase_2.stat_value_2.label': 'Waarde',
148
+ '$label.showcase_2.stat_value_2.placeholder': 'Waarde',
149
+ '$label.showcase_2.stat_value.default_2.text': '15',
150
+
151
+ '$label.showcase_2.stat_caption_2.label': 'Bijschrift',
152
+ '$label.showcase_2.stat_caption_2.placeholder': 'Bijschrift',
153
+ '$label.showcase_2.stat_caption_2.default.text': 'Nationaliteiten',
154
+
155
+ '$label.showcase_2.stat_value_3.label': 'Waarde',
156
+ '$label.showcase_2.stat_value_3.placeholder': 'Waarde',
157
+ '$label.showcase_2.stat_value.default_3.text': '0',
158
+
159
+ '$label.showcase_2.stat_caption_3.label': 'Bijschrift',
160
+ '$label.showcase_2.stat_caption_3.placeholder': 'Bijschrift',
161
+ '$label.showcase_2.stat_caption_3.default.text': 'Managers',
162
+
163
+ '$label.showcase_2.stat_value_4.label': 'Waarde',
164
+ '$label.showcase_2.stat_value_4.placeholder': 'Waarde',
165
+ '$label.showcase_2.stat_value.default_4.text': '75',
166
+
167
+ '$label.showcase_2.stat_caption_4.label': 'Bijschrift',
168
+ '$label.showcase_2.stat_caption_4.placeholder': 'Bijschrift',
169
+ '$label.showcase_2.stat_caption_4.default.text': 'Fietsen die teamleden hebben',
170
+
171
+ '$label.showcase_2.button_content.title': 'Meer informatie',
172
+ },
173
+
174
+ fr: {
175
+ '$label.showcase_1.blockName': 'Section de référence – À propos de nous',
176
+
177
+ '$label.showcase_1.section_title.text': 'Notre entreprise en chiffres',
178
+
179
+ '$label.showcase_1.stat_value_1.label': 'Valeur',
180
+ '$label.showcase_1.stat_value_1.placeholder': 'Valeur',
181
+ '$label.showcase_1.stat_value.default_1.text': '120',
182
+
183
+ '$label.showcase_1.stat_caption_1.label': 'Légende',
184
+ '$label.showcase_1.stat_caption_1.placeholder': 'Légende',
185
+ '$label.showcase_1.stat_caption_1.default.text': 'Personnes',
186
+
187
+ '$label.showcase_1.stat_value_2.label': 'Valeur',
188
+ '$label.showcase_1.stat_value_2.placeholder': 'Valeur',
189
+ '$label.showcase_1.stat_value.default_2.text': '1500',
190
+
191
+ '$label.showcase_1.stat_caption_2.label': 'Légende',
192
+ '$label.showcase_1.stat_caption_2.placeholder': 'Légende',
193
+ '$label.showcase_1.stat_caption_2.default.text': 'Clients par mois',
194
+
195
+ '$label.showcase_1.stat_value_3.label': 'Valeur',
196
+ '$label.showcase_1.stat_value_3.placeholder': 'Valeur',
197
+ '$label.showcase_1.stat_value.default_3.text': '1500000',
198
+
199
+ '$label.showcase_1.stat_caption_3.label': 'Légende',
200
+ '$label.showcase_1.stat_caption_3.placeholder': 'Légende',
201
+ '$label.showcase_1.stat_caption_3.default.text': 'Clients uniques jusqu\'à présent',
202
+
203
+ '$label.showcase_1.stat_value_4.label': 'Valeur',
204
+ '$label.showcase_1.stat_value_4.placeholder': 'Valeur',
205
+ '$label.showcase_1.stat_value.default_4.text': '3.3',
206
+
207
+ '$label.showcase_1.stat_caption_4.label': 'Légende',
208
+ '$label.showcase_1.stat_caption_4.placeholder': 'Légende',
209
+ '$label.showcase_1.stat_caption_4.default.text': 'Articles par commande en moyenne',
210
+
211
+ '$label.showcase_1.stat_value_5.label': 'Valeur',
212
+ '$label.showcase_1.stat_value_5.placeholder': 'Valeur',
213
+ '$label.showcase_1.stat_value.default_5.text': '15',
214
+
215
+ '$label.showcase_1.stat_caption_5.label': 'Légende',
216
+ '$label.showcase_1.stat_caption_5.placeholder': 'Légende',
217
+ '$label.showcase_1.stat_caption_5.default.text': 'Entrepôts',
218
+
219
+ '$label.showcase_1.button_content.title': 'En savoir plus',
220
+
221
+ '$label.showcase_2.blockName': 'Section de référence – Notre équipe',
222
+
223
+ '$label.showcase_2.section_title.text': 'Notre équipe',
224
+
225
+ '$label.showcase_2.stat_value_1.label': 'Valeur',
226
+ '$label.showcase_2.stat_value_1.placeholder': 'Valeur',
227
+ '$label.showcase_2.stat_value.default_1.text': '45',
228
+
229
+ '$label.showcase_2.stat_caption_1.label': 'Légende',
230
+ '$label.showcase_2.stat_caption_1.placeholder': 'Légende',
231
+ '$label.showcase_2.stat_caption_1.default.text': 'Personnes',
232
+
233
+ '$label.showcase_2.stat_value_2.label': 'Valeur',
234
+ '$label.showcase_2.stat_value_2.placeholder': 'Valeur',
235
+ '$label.showcase_2.stat_value.default_2.text': '15',
236
+
237
+ '$label.showcase_2.stat_caption_2.label': 'Légende',
238
+ '$label.showcase_2.stat_caption_2.placeholder': 'Légende',
239
+ '$label.showcase_2.stat_caption_2.default.text': 'Nationalités',
240
+
241
+ '$label.showcase_2.stat_value_3.label': 'Valeur',
242
+ '$label.showcase_2.stat_value_3.placeholder': 'Valeur',
243
+ '$label.showcase_2.stat_value.default_3.text': '0',
244
+
245
+ '$label.showcase_2.stat_caption_3.label': 'Légende',
246
+ '$label.showcase_2.stat_caption_3.placeholder': 'Légende',
247
+ '$label.showcase_2.stat_caption_3.default.text': 'Managers',
248
+
249
+ '$label.showcase_2.stat_value_4.label': 'Valeur',
250
+ '$label.showcase_2.stat_value_4.placeholder': 'Valeur',
251
+ '$label.showcase_2.stat_value.default_4.text': '75',
252
+
253
+ '$label.showcase_2.stat_caption_4.label': 'Légende',
254
+ '$label.showcase_2.stat_caption_4.placeholder': 'Légende',
255
+ '$label.showcase_2.stat_caption_4.default.text': 'Vélos que les membres de l\'équipe possèdent',
256
+
257
+ '$label.showcase_2.button_content.title': 'En savoir plus',
258
+ },
259
+ } as const;
@@ -0,0 +1,5 @@
1
+ import type ContentSettings from './settings/content.ts';
2
+ import type DesignSettings from './settings/design.ts';
3
+
4
+ export type Content = InferContentType<typeof ContentSettings>;
5
+ export type Design = InferDesignType<typeof DesignSettings>;
@@ -0,0 +1,27 @@
1
+ import {
2
+ useButtonElementContent, useButtonElementDesign,
3
+ useImageElementContent,
4
+ useImageElementDesign,
5
+ useInputboxElementContent,
6
+ useTextElementDesign,
7
+ } from '@lightspeed/crane';
8
+ import { computed } from 'vue';
9
+
10
+ import type { Content, Design } from '../type.ts';
11
+
12
+ export const useVisibilityProvider = () => {
13
+ const titleContent = useInputboxElementContent<Content>('title');
14
+ const titleDesign = useTextElementDesign<Design>('title');
15
+ const imageContent = useImageElementContent<Content>('image');
16
+ const imageDesign = useImageElementDesign<Design>('image');
17
+ const buttonContent = useButtonElementContent<Content>('button');
18
+ const buttonDesign = useButtonElementDesign<Design>('button');
19
+
20
+ return {
21
+ isTitleVisible: computed(() => titleDesign.visible && titleContent.hasContent),
22
+ isImageVisible: computed(() => imageDesign.visible && imageContent.hasContent),
23
+ isButtonVisible: computed(() => buttonDesign.visible && buttonContent.hasTitle),
24
+ };
25
+ };
26
+
27
+ export default {};
@@ -0,0 +1,77 @@
1
+ <template>
2
+ <section class="intro-slider-section" :style="backgroundStyle">
3
+ <Tagline
4
+ v-if="taglineDesign.visible"
5
+ :design="taglineDesign"
6
+ >
7
+ {{ taglineContent.value }}
8
+ </Tagline>
9
+
10
+ <Title />
11
+
12
+ <Button
13
+ v-if="buttonDesign.visible"
14
+ class="intro-slider-section__button"
15
+ :design="buttonDesign"
16
+ :content="buttonContent"
17
+ />
18
+ <Slider />
19
+ </section>
20
+ </template>
21
+
22
+ <script setup lang="ts">
23
+ import {
24
+ useBackgroundElementDesign,
25
+ useInputboxElementContent,
26
+ useTextElementDesign,
27
+ useButtonElementContent,
28
+ useButtonElementDesign,
29
+ ButtonContent,
30
+ } from '@lightspeed/crane';
31
+ import { computed } from 'vue';
32
+ import { Content, Design } from './type.ts';
33
+ import Slider from './component/Slider.vue';
34
+ import Title from './component/Title.vue';
35
+ import Tagline from '../../shared/components/Tagline.vue';
36
+ import Button from '../../shared/components/Button.vue';
37
+
38
+ const backgroundDesign = useBackgroundElementDesign<Design>('background');
39
+ const background = computed(() => ({
40
+ type: backgroundDesign.background?.type,
41
+ solidColor: backgroundDesign.background?.solid?.color as Color,
42
+ fromColor: backgroundDesign.background?.gradient?.fromColor as Color,
43
+ toColor: backgroundDesign.background?.gradient?.toColor as Color,
44
+ }));
45
+
46
+ const backgroundStyle = computed(() => {
47
+ if (background.value.type === 'gradient') {
48
+ return { 'background-image': `linear-gradient(to right, ${background.value.fromColor.hex}, ${background.value.toColor.hex})` };
49
+ }
50
+
51
+ return { 'background-color': background.value.solidColor.hex };
52
+ });
53
+
54
+ const taglineContent = useInputboxElementContent<Content>('section_tagline');
55
+ const taglineDesign = useTextElementDesign<Design>('section_tagline') as TextDesignData;
56
+
57
+ const buttonContent = useButtonElementContent<Content>('section_button') as ButtonContent;
58
+ const buttonDesign = useButtonElementDesign<Design>('section_button') as ButtonDesignData;
59
+ </script>
60
+
61
+ <style scoped lang="scss">
62
+ .intro-slider-section {
63
+ min-height: 810px;
64
+ width: 100%;
65
+ padding: 110px 0 80px;
66
+ display: flex;
67
+ flex-direction: column;
68
+ align-items: center;
69
+ gap: 24px;
70
+
71
+ &__button {
72
+ margin: auto;
73
+ width: fit-content;
74
+ max-width: 360px;
75
+ }
76
+ }
77
+ </style>
@@ -0,0 +1,5 @@
1
+ import { createVueClientApp } from '@lightspeed/crane';
2
+ import ExampleSection from './IntroSlider.vue';
3
+ import { Content, Design } from './type.ts';
4
+
5
+ export default createVueClientApp<Content, Design>(ExampleSection);
@@ -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>