project-booster-vue 10.12.0 → 10.13.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 (24) hide show
  1. package/package.json +1 -1
  2. package/src/components/question/incremental-amount-input/IncrementalAmount.ts +1 -0
  3. package/src/components/question/space-input/SpaceInput.ts +10 -0
  4. package/src/components/rework/products/MPbProducts.vue +15 -5
  5. package/src/components/rework/question/MPbQuestion.vue +13 -2
  6. package/src/components/rework/question/city-search/MPbCitySearch.vue +98 -20
  7. package/src/components/rework/question/city-search/default-payload.json +15 -1
  8. package/src/components/rework/question/incremental-amount-input/MPbIncrementalAmountInput.vue +79 -40
  9. package/src/components/rework/question/incremental-amount-input/default-payload.json +1 -1
  10. package/src/components/rework/question/space-input/MPbSpaceInput.vue +167 -94
  11. package/src/components/rework/question/space-input/SpaceInput.ts +25 -0
  12. package/src/components/rework/question/space-input/default-payload.json +16 -1
  13. package/src/components/rework/styles/global.scss +12 -0
  14. package/src/components/rework/types/genericPayload.ts +5 -2
  15. package/src/components/scenario/PbScenario-Attic-Insulation.stories.mdx +245 -0
  16. package/src/components/scenario/PbScenario-Estimator-External-Wall-Insulation.stories.mdx +245 -0
  17. package/src/components/scenario/{PbScenario-Estimator-Attic-Insulation.stories.mdx → PbScenario-Estimator-Woodstore.stories.mdx} +3 -3
  18. package/src/components/scenario/PbScenario-Estimator-hpwa.stories.mdx +245 -0
  19. package/src/components/scenario/scenarii/attic-insulation.json +2485 -0
  20. package/src/components/scenario/scenarii/estimator-external-wall-insulation.json +2545 -0
  21. package/src/components/scenario/scenarii/estimator-hpwa.json +734 -517
  22. package/src/components/scenario/scenarii/pellet-boiler.json +379 -266
  23. package/src/components/scenario/scenarii/wood-stove.json +2729 -0
  24. package/src/types/pb/Scenario.ts +17 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-booster-vue",
3
- "version": "10.12.0",
3
+ "version": "10.13.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "vue-cli-service serve",
@@ -9,6 +9,7 @@ export interface IncrementalAmountValidation {
9
9
 
10
10
  export interface IncrementalAmountViewModel {
11
11
  backLabel: string;
12
+ hideBackButton?: boolean;
12
13
  label: string;
13
14
  subtitle: string;
14
15
  actionLabel: string;
@@ -1,3 +1,5 @@
1
+ import { HelpArea } from '@/components/rework/question/space-input/SpaceInput';
2
+ import { PayloadAction } from '@/components/rework/types/genericPayload';
1
3
  import { ScenarioStepSkippableOptions } from '@/types/pb/Scenario';
2
4
 
3
5
  export interface SpaceInputValidation {
@@ -11,10 +13,17 @@ export interface SpaceInputValidation {
11
13
 
12
14
  export interface SpaceInputViewModel {
13
15
  backLabel: string;
16
+ hideBackButton?: boolean;
14
17
  label: string;
18
+ subtitle: string;
15
19
  placeholder: string;
16
20
  actionLabel: string;
17
21
  validation: SpaceInputValidation;
22
+ forceBackButton?: boolean;
23
+ callToActions: PayloadAction[];
24
+ analytics: {
25
+ funnel_name: string;
26
+ };
18
27
  footer?: {
19
28
  label: string;
20
29
  conditions: string[];
@@ -26,4 +35,5 @@ export interface SpaceInputPayload {
26
35
  value: { space: string };
27
36
  defaultDecoratorValue: string;
28
37
  skippable?: ScenarioStepSkippableOptions;
38
+ helpArea?: HelpArea[];
29
39
  }
@@ -17,12 +17,18 @@
17
17
  {{ payload.viewModel.label }}
18
18
  </div>
19
19
 
20
- <div class="pb-products__body__item" v-if="product">
21
- <div class="pb-products__body__item__thumbnail">
20
+ <div class="pb-products__body__item" v-if="product.designation">
21
+ <div class="pb-products__body__item__thumbnail" v-if="product?.photo">
22
22
  <img :src="product.photo" alt="" />
23
23
  </div>
24
24
  <div class="pb-products__body__item__title">{{ product.designation }}</div>
25
25
  </div>
26
+ <div class="pb-products__body__item" v-else>
27
+ <div class="pb-products__body__item__thumbnail">
28
+ <img :src="payload.viewModel.defaultProduct.photo" alt="" />
29
+ </div>
30
+ <div class="pb-products__body__item__title">{{ payload.viewModel.defaultProduct.designation }}</div>
31
+ </div>
26
32
 
27
33
  <div class="pb-products__container--button">
28
34
  <m-button
@@ -50,8 +56,8 @@
50
56
  <script lang="ts" setup>
51
57
  import { useStore } from 'vuex';
52
58
  import { MButton, MLink } from '@mozaic-ds/vue-3';
53
- import { ScenarioStepAnswer } from '@/types/pb/Scenario';
54
- import { defineProps, PropType, onMounted, ref } from 'vue';
59
+ import { ScenarioProduct, ScenarioStepAnswer } from '@/types/pb/Scenario';
60
+ import { defineProps, PropType, onMounted, ref, Ref } from 'vue';
55
61
  import { PayloadAction } from '../types/genericPayload';
56
62
  import { formatEvent, EventTypeEnum } from '../services/event';
57
63
 
@@ -60,7 +66,11 @@ const emit = defineEmits(['go-back', 'step-completed']);
60
66
  const store = useStore();
61
67
  const metadata = store.getters['metaData/metaData'];
62
68
  const refProduct = store.getters['products/getRefProduct'];
63
- const product = ref({});
69
+ const product: Ref<ScenarioProduct> = ref({
70
+ photo: '',
71
+ designation: '',
72
+ value: '',
73
+ });
64
74
 
65
75
  const props = defineProps({
66
76
  /**
@@ -155,8 +155,9 @@
155
155
  size="l"
156
156
  theme="primary"
157
157
  @click="handleHelpClick(helpItem.action)"
158
- >{{ helpItem.label }}</m-link
159
158
  >
159
+ {{ helpItem.label }}
160
+ </m-link>
160
161
  </div>
161
162
  </div>
162
163
  </div>
@@ -183,6 +184,15 @@
183
184
  width-from-xxl="full"
184
185
  width-from-l="full"
185
186
  :href="notification.buttonHref"
187
+ v-if="notification.buttonHref"
188
+ :label="notification.buttonText"
189
+ />
190
+ <m-button
191
+ width="full"
192
+ width-from-xxl="full"
193
+ width-from-l="full"
194
+ v-else-if="notification?.buttonStep"
195
+ @click.prevent="callAction(notification?.buttonStep, [], $emit)"
186
196
  :label="notification.buttonText"
187
197
  />
188
198
  </div>
@@ -315,7 +325,7 @@
315
325
  </m-modal>
316
326
 
317
327
  <m-modal
318
- :modalTitle="helpDialog?.viewModelDialog.headerTitle"
328
+ :modalTitle="helpDialog?.viewModelDialog.watermark || helpDialog?.viewModelDialog.headerTitle"
319
329
  :open="displayDialogHelp"
320
330
  @update:open="displayDialogHelp = false"
321
331
  class="mc-modal--overflow"
@@ -449,6 +459,7 @@ import {
449
459
  } from '@/types/pb/Scenario';
450
460
  import { useStore } from 'vuex';
451
461
  import { EventTypeEnum, formatEvent } from '../services/event';
462
+ import { callAction } from '../services/navigate';
452
463
 
453
464
  const BACK_ICON =
454
465
  'https://storage.googleapis.com/project-booster-media/mozaic-icons/svg/Navigation_Arrow_Arrow--Left_16px.svg';
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <form class="pb-city-search" @submit.prevent="handleFormValidation">
3
- <m-flex class="pb-city-search__back-button-container" align-items="stretch">
3
+ <div class="pb-city-search__back-button-container row-flex align-stretch">
4
4
  <m-link
5
5
  :left-icon="BACK_ICON"
6
6
  :class="{
@@ -11,21 +11,16 @@
11
11
  @click.once="$emit('go-back')"
12
12
  >{{ computedPayload.viewModel.backLabel }}</m-link
13
13
  >
14
- </m-flex>
14
+ </div>
15
15
  <div class="pb-city-search__form">
16
16
  <div class="pb-city-search__title">
17
17
  {{ computedPayload.viewModel.label }}
18
18
  </div>
19
- <m-flex class="pb-city-search__header" ref="pbCitySearchHeader" direction="column">
20
- <m-flex
21
- v-if="computedPayload.viewModel.image"
22
- class="pb-city-search__image"
23
- direction="column"
24
- align-items="center"
25
- >
19
+ <div class="pb-city-search__header" ref="pbCitySearchHeader row-flex column">
20
+ <div v-if="computedPayload.viewModel.image" class="pb-city-search__image row-flex column align-center">
26
21
  <img :src="computedPayload.viewModel.image" @onloadend="updateHeaderHeight()" />
27
- </m-flex>
28
- </m-flex>
22
+ </div>
23
+ </div>
29
24
  <transition name="pb-city-search__results-overlay--animate">
30
25
  <div
31
26
  v-if="focused || displaySuggestions"
@@ -45,7 +40,7 @@
45
40
  >
46
41
  <transition name="pb-city-search__results-container--animate">
47
42
  <div v-if="displaySuggestions && !forceHideSuggestions" class="pb-city-search__results-container">
48
- <m-flex v-if="suggestions && suggestions.length > 0" class="pb-city-search__results" direction="column">
43
+ <div v-if="suggestions && suggestions.length > 0" class="pb-city-search__results row flex column">
49
44
  <div
50
45
  class="pb-city-search__results-item"
51
46
  v-for="(suggestion, index) in suggestions"
@@ -57,14 +52,14 @@
57
52
  >
58
53
  {{ formatSuggestion(suggestion) }}
59
54
  </div>
60
- </m-flex>
61
- <div v-else-if="this.searchKeyword" class="pb-city-search__results-empty-state">
55
+ </div>
56
+ <div v-else-if="searchKeyword" class="pb-city-search__results-empty-state">
62
57
  <span v-if="loadingSuggestions">Chargement...</span>
63
58
  <span v-else>Aucune commune correspondante</span>
64
59
  </div>
65
60
  </div>
66
61
  </transition>
67
- <m-flex>
62
+ <div>
68
63
  <m-text-input
69
64
  type="search"
70
65
  ref="pbCitySearchTextInput"
@@ -76,7 +71,7 @@
76
71
  tabindex="1"
77
72
  :data-cerberus="sanitizeCerberusAttribut('MPB-CITY-SEARCH', 'INPUT')"
78
73
  />
79
- </m-flex>
74
+ </div>
80
75
  </div>
81
76
  <div v-if="selectedCity" class="pb-city-search__selected-city">
82
77
  <!-- prettier-ignore -->
@@ -84,7 +79,7 @@
84
79
  Votre construction sera réalisée dans la commune de&nbsp;<strong>{{ selectedCity.name }}</strong>,&nbsp;<strong>{{ selectedCity.region }}</strong>.
85
80
  </span>
86
81
  </div>
87
- <m-flex class="pb-city-search__buttons-container" direction="column">
82
+ <!-- <div class="pb-city-search__buttons-container" direction="column">
88
83
  <m-button
89
84
  :disabled="!selectedCity"
90
85
  class="pb-city-search__button"
@@ -93,7 +88,29 @@
93
88
  @click="handleFormValidation"
94
89
  :data-cerberus="sanitizeCerberusAttribut('MPB-CITY-SEARCH', 'BUTTON')"
95
90
  />
96
- </m-flex>
91
+ </div> -->
92
+
93
+ <div class="pb-city-search__buttons-container row-flex align-center" v-if="payload">
94
+ <div
95
+ v-for="button in payload.viewModel.callToActions"
96
+ class="pb-city-search__buttons-container__button row-flex"
97
+ >
98
+ <m-button
99
+ :label="button.label"
100
+ @click="callAction(button)"
101
+ :theme="button.theme"
102
+ :icon="button.icon"
103
+ :iconPosition="button.iconPosition"
104
+ style="margin-left: 1rem"
105
+ :data-cerberus="sanitizeCerberusAttribut('MPB-SPACE-INPUT', button.label)"
106
+ class="js-cdl"
107
+ data-cdl-click-type="cdl_event"
108
+ :data-cdl-click-data="
109
+ formatEvent({ button_name: button.label, button_location: stepLocation }, EventTypeEnum.BUTTON)
110
+ "
111
+ />
112
+ </div>
113
+ </div>
97
114
  </div>
98
115
  </form>
99
116
  </template>
@@ -113,6 +130,8 @@ import { DebouncedFunc } from 'lodash-es';
113
130
  import { decorate } from '@/services/decorate';
114
131
  import { ScenarioStepAnswer } from '@/types/pb/Scenario';
115
132
  import { MButton, MLink } from '@mozaic-ds/vue-3';
133
+ import { EventTypeEnum, formatEvent } from '../../services/event';
134
+ import { PayloadAction } from '../../types/genericPayload';
116
135
 
117
136
  const BACK_ICON =
118
137
  'https://storage.googleapis.com/project-booster-media/mozaic-icons/svg/Navigation_Arrow_Arrow--Left_16px.svg';
@@ -165,6 +184,10 @@ export default defineComponent({
165
184
  type: Object as PropType<Map<string, ScenarioStepAnswer[]>>,
166
185
  default: () => new Map<string, ScenarioStepAnswer[]>(),
167
186
  },
187
+ stepLocation: {
188
+ type: String,
189
+ default: '',
190
+ },
168
191
  },
169
192
 
170
193
  data: () => ({
@@ -188,6 +211,7 @@ export default defineComponent({
188
211
  loadingCityInfo: false,
189
212
  headerHeight: 0,
190
213
  debouncedGetSuggestions: undefined as DebouncedFunc<() => Promise<void>> | undefined,
214
+ EventTypeEnum,
191
215
  }),
192
216
 
193
217
  computed: {
@@ -397,7 +421,18 @@ export default defineComponent({
397
421
  selectedCityToKeyword(): string {
398
422
  return this.selectedCity?.postalCode + ' ' + this.selectedCity?.name + ', ' + this.selectedCity?.region;
399
423
  },
424
+ callAction(button: PayloadAction) {
425
+ if (button.nextStep.code != '__BACK__') {
426
+ this.$emit('step-completed', {
427
+ answers: null,
428
+ nextStep: button.code,
429
+ });
430
+ } else {
431
+ this.$emit('go-back');
432
+ }
433
+ },
400
434
  sanitizeCerberusAttribut,
435
+ formatEvent,
401
436
  },
402
437
  });
403
438
  </script>
@@ -406,6 +441,7 @@ export default defineComponent({
406
441
  @import 'pb-variables';
407
442
 
408
443
  $responsive-breakpoint: 'm';
444
+ @import '../../styles/global.scss';
409
445
 
410
446
  .pb-city-search {
411
447
  @include set-font-face('regular');
@@ -460,7 +496,7 @@ $responsive-breakpoint: 'm';
460
496
  width: 100%;
461
497
 
462
498
  @include set-from-screen($responsive-breakpoint) {
463
- width: 565px;
499
+ width: 720px;
464
500
  }
465
501
  }
466
502
 
@@ -473,7 +509,7 @@ $responsive-breakpoint: 'm';
473
509
  width: 384px;
474
510
 
475
511
  @include set-from-screen($responsive-breakpoint) {
476
- @include set-font-scale('06', 'l');
512
+ @include set-font-scale('07', 'l');
477
513
 
478
514
  padding: $mu250 0 $mu050 0;
479
515
  width: auto;
@@ -637,6 +673,48 @@ $responsive-breakpoint: 'm';
637
673
  position: sticky;
638
674
  width: 100%;
639
675
  z-index: 1;
676
+ flex-direction: column;
677
+
678
+ @include set-from-screen($responsive-breakpoint) {
679
+ flex-direction: row;
680
+ }
681
+
682
+ button {
683
+ margin-left: 0 !important;
684
+ width: 100%;
685
+
686
+ @include set-from-screen($responsive-breakpoint) {
687
+ width: auto;
688
+ }
689
+ }
690
+
691
+ &__button {
692
+ width: 100%;
693
+
694
+ @include set-from-screen($responsive-breakpoint) {
695
+ width: 50%;
696
+ }
697
+
698
+ &:first-child {
699
+ justify-content: flex-start;
700
+ margin-top: $mu050;
701
+ order: 2;
702
+
703
+ @include set-from-screen($responsive-breakpoint) {
704
+ margin-top: 0;
705
+ order: 1;
706
+ }
707
+ }
708
+
709
+ &:last-child {
710
+ justify-content: flex-end;
711
+ order: 1;
712
+
713
+ @include set-from-screen($responsive-breakpoint) {
714
+ order: 2;
715
+ }
716
+ }
717
+ }
640
718
  }
641
719
  }
642
720
  </style>
@@ -4,6 +4,20 @@
4
4
  "label": "Dans quelle ville aura lieu les travaux ?",
5
5
  "subtitle": "Cette information nous aide à identifier les aides dont vous pourriez profiter",
6
6
  "placeholder": "Code postal, ville",
7
- "actionLabel": "Continuer"
7
+ "actionLabel": "Étape suivante",
8
+ "callToActions": [
9
+ {
10
+ "label": "Précédent",
11
+ "nextStep": "Code",
12
+ "theme": "bordered-primary-02",
13
+ "icon": "ArrowBack48"
14
+ },
15
+ {
16
+ "label": "Etape suivante",
17
+ "nextStep": "Code",
18
+ "icon": "ArrowNext48",
19
+ "iconPosition": "right"
20
+ }
21
+ ]
8
22
  }
9
23
  }
@@ -1,18 +1,5 @@
1
1
  <template>
2
2
  <div class="pb-incremental-amount-input row-flex column align-center">
3
- <div class="pb-incremental-amount-input__back-button-container row-flex align-stretch">
4
- <m-link
5
- icon="ArrowBack48"
6
- :class="{
7
- 'pb-incremental-amount-input__back-button': true,
8
- 'pb-incremental-amount-input__back-button--hidden':
9
- !showBackButton && !decorate(answers, runtimeOptions, payload.viewModel.forceBackButton),
10
- }"
11
- @click.once="$emit('go-back')"
12
- >{{ computedPayload.viewModel.backLabel }}</m-link
13
- >
14
- </div>
15
-
16
3
  <form
17
4
  class="pb-incremental-amount-input__form-container"
18
5
  ref="pbDimensionsInputFormContainerObserver"
@@ -32,30 +19,40 @@
32
19
  />
33
20
  </div>
34
21
 
35
- <div class="pb-incremental-amount-input__buttons-container row-flex flex-start">
36
- <m-button
37
- class="pb-incremental-amount-input__button"
38
- :label="computedPayload.viewModel.actionLabel"
39
- size="l"
40
- type="submit"
41
- />
22
+ <div class="pb-incremental-amount-input__buttons-container">
23
+ <div class="pb-incremental-amount-input__buttons-container__left">
24
+ <m-button
25
+ label="Précédent"
26
+ theme="bordered-neutral"
27
+ class="pb-city-search__button"
28
+ size="m"
29
+ size-from-l="l"
30
+ @click="$emit('go-back')"
31
+ v-if="!payload.viewModel.hideBackButton"
32
+ icon="ArrowBack48"
33
+ >
34
+ </m-button>
35
+ </div>
36
+ <div class="pb-incremental-amount-input__buttons-container__right">
37
+ <m-button class="pb-city-search__button" :label="computedPayload.viewModel.actionLabel" size="m" />
38
+ </div>
42
39
  </div>
43
40
  </form>
44
41
  </div>
45
42
  </template>
46
43
 
47
44
  <script lang="ts" setup>
48
- import { computed, onMounted, ComputedRef, PropType } from 'vue';
45
+ import { IncrementalAmountPayload } from '@/components/question/incremental-amount-input/IncrementalAmount';
46
+ import { decorate } from '@/services/decorate';
47
+ import { ScenarioStepAnswer } from '@/types/pb/Scenario';
48
+ import { MButton } from '@mozaic-ds/vue-3';
49
49
  import cloneDeep from 'lodash.clonedeep';
50
50
  import merge from 'lodash.merge';
51
- import DEFAULT_PAYLOAD from './default-payload.json';
52
- import { ref } from 'vue';
53
- import { ScenarioStepAnswer } from '@/types/pb/Scenario';
54
- import { decorate } from '@/services/decorate';
51
+ import { ComputedRef, PropType, computed, onMounted, ref } from 'vue';
52
+ import MFlex from '../../../mozaic/flex/MFlex.vue';
55
53
  import MQuantitySelector from '../../../mozaic/quantityselector/MQuantitySelector.vue';
56
- import { IncrementalAmountPayload } from '@/components/question/incremental-amount-input/IncrementalAmount';
57
54
  import { EmitEventName } from '../../services/emit';
58
- import { MLink, MButton } from '@mozaic-ds/vue-3';
55
+ import DEFAULT_PAYLOAD from './default-payload.json';
59
56
 
60
57
  const BACK_ICON =
61
58
  'https://storage.googleapis.com/project-booster-media/mozaic-icons/svg/Navigation_Arrow_Arrow--Left_16px.svg';
@@ -195,6 +192,7 @@ $responsive-breakpoint: 'm';
195
192
 
196
193
  @include set-from-screen($responsive-breakpoint) {
197
194
  padding-top: 0;
195
+ margin-top: $mu150;
198
196
  }
199
197
 
200
198
  &__back-button-container {
@@ -259,9 +257,10 @@ $responsive-breakpoint: 'm';
259
257
  flex-direction: column;
260
258
  flex-grow: 1;
261
259
  padding: 0 $mu050;
260
+ width: 100%;
262
261
 
263
262
  @include set-from-screen($responsive-breakpoint) {
264
- width: 565px;
263
+ width: 720px;
265
264
  }
266
265
  }
267
266
 
@@ -280,33 +279,27 @@ $responsive-breakpoint: 'm';
280
279
  padding: 0;
281
280
 
282
281
  @include set-from-screen($responsive-breakpoint) {
283
- @include set-font-scale('06', 'm');
282
+ @include set-font-scale('07', 'm');
284
283
 
285
284
  margin-bottom: 0;
286
- padding: $mu250 0 $mu100 0;
285
+ padding: $mu050 0 $mu100 0;
287
286
  }
288
287
  }
289
288
 
290
289
  &__subtitle {
291
- color: $color-grey-700;
290
+ color: $color-grey-900;
292
291
  max-width: 100%;
293
292
  padding: 0 0 $mu250 0;
294
293
  }
295
294
 
296
295
  &__image {
297
- padding-bottom: $mu200;
298
-
299
296
  img {
300
- display: none;
301
- width: 70%;
297
+ width: 50%;
298
+ margin: 0 auto;
302
299
 
303
300
  @include set-from-screen($small-responsive-breakpoint) {
304
301
  display: block;
305
- width: 70%;
306
- }
307
-
308
- @include set-from-screen($responsive-breakpoint) {
309
- width: 90%;
302
+ width: 60%;
310
303
  }
311
304
  }
312
305
  }
@@ -327,12 +320,58 @@ $responsive-breakpoint: 'm';
327
320
  }
328
321
 
329
322
  &__buttons-container {
323
+ display: flex;
330
324
  margin-bottom: $mu100;
331
325
  position: sticky;
332
326
  z-index: 1;
327
+ flex-direction: column;
328
+
329
+ &__left,
330
+ &__right {
331
+ width: 100%;
332
+
333
+ @include set-from-screen($responsive-breakpoint) {
334
+ width: 50%;
335
+ }
336
+ }
337
+
338
+ &__left {
339
+ order: 2;
340
+
341
+ @include set-from-screen($responsive-breakpoint) {
342
+ order: 1;
343
+ }
344
+ }
345
+
346
+ &__right {
347
+ display: flex;
348
+ justify-content: flex-end;
349
+ order: 1;
350
+
351
+ @include set-from-screen($responsive-breakpoint) {
352
+ order: 2;
353
+ }
354
+ }
355
+
356
+ button {
357
+ width: 100%;
358
+
359
+ @include set-from-screen($responsive-breakpoint) {
360
+ width: auto;
361
+ }
362
+
363
+ &:first-child {
364
+ margin-top: $mu050;
365
+
366
+ @include set-from-screen($responsive-breakpoint) {
367
+ margin-top: 0;
368
+ }
369
+ }
370
+ }
333
371
 
334
372
  @include set-from-screen($responsive-breakpoint) {
335
373
  width: 100%;
374
+ flex-direction: row;
336
375
  }
337
376
  }
338
377
 
@@ -3,7 +3,7 @@
3
3
  "backLabel": "Question précédente",
4
4
  "label": "Combien de personnes vivent dans votre foyer fiscal ?",
5
5
  "subtitle": "Cette information est utile pour le calcul des aides",
6
- "actionLabel": "Continuer",
6
+ "actionLabel": "Étape suivante",
7
7
  "image": "https://storage.googleapis.com/project-booster-media/new-house/Estimation%20Construction%20Neuve%20-%20Localisation.png",
8
8
  "minValue": 1,
9
9
  "maxValue": 20,