cja-phoenix 0.6.0 → 0.6.2

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 (283) hide show
  1. package/dist/cja-phoenix.es.js +3816 -4306
  2. package/dist/style.css +1 -0
  3. package/dist/types/components/composite/CheckoutCrossSell.vue.d.ts +29 -0
  4. package/dist/types/components/composite/CheckoutLayout.vue.d.ts +23 -0
  5. package/dist/types/components/composite/CheckoutMilestones.vue.d.ts +16 -0
  6. package/dist/types/components/composite/CjaFooter.vue.d.ts +34 -0
  7. package/dist/types/components/composite/CjaMenuBar.vue.d.ts +52 -0
  8. package/dist/types/components/composite/FunnelLayout.vue.d.ts +35 -0
  9. package/dist/types/components/composite/FunnelSubmit.vue.d.ts +26 -0
  10. package/dist/types/components/composite/FunnelSummary.vue.d.ts +77 -0
  11. package/dist/types/components/composite/FunnelTitle.vue.d.ts +19 -0
  12. package/dist/types/components/composite/InfoShowcase.vue.d.ts +25 -0
  13. package/dist/types/components/composite/JourneyMacroSteps.vue.d.ts +16 -0
  14. package/dist/types/components/composite/ResultsSidebar.vue.d.ts +9 -0
  15. package/dist/types/components/forms/CheckboxInput.vue.d.ts +41 -0
  16. package/dist/types/components/forms/CurrencyInput.vue.d.ts +65 -0
  17. package/dist/types/components/forms/FileInput.vue.d.ts +89 -0
  18. package/dist/types/components/forms/NumberInput.vue.d.ts +58 -0
  19. package/dist/types/components/forms/PhoneInput.vue.d.ts +69 -0
  20. package/dist/types/components/forms/RadioInput.vue.d.ts +43 -0
  21. package/dist/types/components/forms/RadioInputList.vue.d.ts +65 -0
  22. package/dist/types/components/forms/SelectInput.vue.d.ts +80 -0
  23. package/dist/types/components/forms/SelectionTiles.vue.d.ts +51 -0
  24. package/dist/types/components/forms/TextInput.vue.d.ts +76 -0
  25. package/dist/types/components/forms/TileCheckboxInput.vue.d.ts +23 -0
  26. package/dist/types/components/forms/ToggleInput.vue.d.ts +51 -0
  27. package/dist/types/components/forms/structure/InputContainer.vue.d.ts +22 -0
  28. package/dist/types/components/forms/structure/InputError.vue.d.ts +15 -0
  29. package/dist/types/components/forms/structure/InputTitle.vue.d.ts +21 -0
  30. package/dist/types/components/structural/CjaButton.vue.d.ts +59 -0
  31. package/dist/types/components/structural/CollapseContainer.vue.d.ts +51 -0
  32. package/dist/{components → types/components}/structural/ContentTabs.vue.d.ts +17 -20
  33. package/dist/types/components/structural/FixedContainer.vue.d.ts +68 -0
  34. package/dist/types/components/structural/GridContainer.vue.d.ts +36 -0
  35. package/dist/types/components/structural/GridItem.vue.d.ts +26 -0
  36. package/dist/types/components/structural/InfoMessage.vue.d.ts +30 -0
  37. package/dist/types/components/structural/LoadingSpinner.vue.d.ts +17 -0
  38. package/dist/types/components/structural/Modal.vue.d.ts +65 -0
  39. package/dist/types/components/structural/Scaffold.vue.d.ts +9 -0
  40. package/dist/types/index.d.ts +16 -7
  41. package/dist/types/stories/CjaButton.story.vue.d.ts +2 -0
  42. package/dist/types/stories/ContentTabs.story.vue.d.ts +2 -0
  43. package/dist/types/stories/Modal.story.vue.d.ts +2 -0
  44. package/dist/types/stories/RadioInputList.story.vue.d.ts +2 -0
  45. package/dist/types/{Router.d.ts → types/Router.d.ts} +1 -0
  46. package/dist/types/types/index.d.ts +7 -0
  47. package/dist/{utils → types/utils}/formValidations.d.ts +3 -0
  48. package/package.json +21 -30
  49. package/src/assets/backdrop.scss +10 -0
  50. package/src/assets/breakpoints.scss +12 -0
  51. package/src/assets/fonts.scss +1 -0
  52. package/src/assets/forms.scss +97 -0
  53. package/src/assets/grid.scss +14 -0
  54. package/src/assets/iconia/Read Me.txt +7 -0
  55. package/src/assets/iconia/demo-files/demo.css +155 -0
  56. package/src/assets/iconia/demo-files/demo.js +30 -0
  57. package/src/assets/iconia/demo.html +7055 -0
  58. package/src/assets/iconia/fonts/CGG-icomoon.eot +0 -0
  59. package/src/assets/iconia/fonts/CGG-icomoon.svg +513 -0
  60. package/src/assets/iconia/fonts/CGG-icomoon.ttf +0 -0
  61. package/src/assets/iconia/fonts/CGG-icomoon.woff +0 -0
  62. package/src/assets/iconia/selection.json +1 -0
  63. package/src/assets/iconia/style.css +1547 -0
  64. package/src/assets/iconia/style.scss +2556 -0
  65. package/src/assets/iconia/variables.scss +507 -0
  66. package/src/assets/main.scss +30 -0
  67. package/src/assets/radioOld.scss +52 -0
  68. package/src/assets/shadows.scss +3 -0
  69. package/src/assets/tippy.scss +45 -0
  70. package/src/assets/vars/development.scss +4 -0
  71. package/src/assets/vars/production.scss +4 -0
  72. package/src/components/composite/CheckoutCrossSell.vue +478 -0
  73. package/src/components/composite/CheckoutLayout.vue +59 -0
  74. package/src/components/composite/CheckoutMilestones.vue +161 -0
  75. package/src/components/composite/CjaFooter.vue +223 -0
  76. package/src/components/composite/CjaMenuBar.vue +543 -0
  77. package/src/components/composite/FunnelLayout.vue +197 -0
  78. package/src/components/composite/FunnelSubmit.vue +53 -0
  79. package/src/components/composite/FunnelSummary.vue +198 -0
  80. package/src/components/composite/FunnelTitle.vue +59 -0
  81. package/src/components/composite/InfoShowcase.vue +87 -0
  82. package/src/components/composite/JourneyMacroSteps.vue +104 -0
  83. package/src/components/composite/ProductDetails.vue +149 -0
  84. package/src/components/composite/ResultsLayout.vue +156 -0
  85. package/src/components/composite/ResultsSidebar.vue +74 -0
  86. package/src/components/forms/CheckboxInput.vue +103 -0
  87. package/src/components/forms/CurrencyInput.vue +126 -0
  88. package/src/components/forms/FileInput.vue +250 -0
  89. package/src/components/forms/NumberInput.vue +165 -0
  90. package/src/components/forms/PhoneInput.vue +122 -0
  91. package/src/components/forms/RadioInput.vue +98 -0
  92. package/src/components/forms/RadioInputList.vue +156 -0
  93. package/src/components/forms/SelectInput.vue +392 -0
  94. package/src/components/forms/SelectionTiles.vue +196 -0
  95. package/src/components/forms/TextInput.vue +144 -0
  96. package/src/components/forms/TileCheckboxInput.vue +96 -0
  97. package/src/components/forms/ToggleInput.vue +88 -0
  98. package/src/components/forms/structure/InputContainer.vue +28 -0
  99. package/src/components/forms/structure/InputError.vue +26 -0
  100. package/src/components/forms/structure/InputTitle.vue +52 -0
  101. package/src/components/index.ts +73 -0
  102. package/src/components/structural/CjaButton.vue +332 -0
  103. package/src/components/structural/CollapseContainer.vue +141 -0
  104. package/src/components/structural/ContentTabs.vue +105 -0
  105. package/src/components/structural/FixedContainer.vue +107 -0
  106. package/src/components/structural/GridContainer.vue +70 -0
  107. package/src/components/structural/GridItem.vue +47 -0
  108. package/src/components/structural/InfoMessage.vue +105 -0
  109. package/src/components/structural/LoadingSpinner.vue +39 -0
  110. package/src/components/structural/Modal.vue +209 -0
  111. package/src/components/structural/Scaffold.vue +3 -0
  112. package/src/constants/MyConstants.ts +1 -0
  113. package/src/constants/index.ts +5 -0
  114. package/src/env.d.ts +11 -0
  115. package/src/index.ts +31 -0
  116. package/src/stories/CjaButton.story.vue +192 -0
  117. package/src/stories/ContentTabs.story.vue +59 -0
  118. package/src/stories/Modal.story.vue +127 -0
  119. package/src/stories/RadioInputList.story.vue +61 -0
  120. package/src/types/CheckoutMilestone.ts +5 -0
  121. package/src/types/Footer.ts +17 -0
  122. package/src/types/Menu.ts +19 -0
  123. package/src/types/RadioOption.ts +7 -0
  124. package/src/types/Router.ts +19 -0
  125. package/src/types/SelectOption.ts +6 -0
  126. package/src/types/StoreDataValue.ts +12 -0
  127. package/src/types/Storyblok.ts +10 -0
  128. package/src/types/TileOption.ts +8 -0
  129. package/src/types/index.ts +19 -0
  130. package/src/utils/cjaRouter.ts +74 -0
  131. package/src/utils/cjaStore.ts +43 -0
  132. package/src/utils/findScrollAncestor.ts +16 -0
  133. package/src/utils/formValidations.ts +192 -0
  134. package/src/utils/generateRoutes.ts +36 -0
  135. package/src/utils/getFromUrl.ts +25 -0
  136. package/src/utils/getMessages.ts +23 -0
  137. package/src/utils/gtm.ts +158 -0
  138. package/src/utils/index.ts +31 -0
  139. package/src/utils/jsonReviver.ts +20 -0
  140. package/src/utils/storyblokLink.ts +4 -0
  141. package/src/utils/updateForm.ts +40 -0
  142. package/src/utils/uploadFile.ts +25 -0
  143. package/src/utils/useGlobalProperties.ts +11 -0
  144. package/src/utils/useViewportDetector.ts +35 -0
  145. package/dist/cja-phoenix.cjs.js +0 -44
  146. package/dist/cja-phoenix.d.ts +0 -3
  147. package/dist/cja-phoenix.umd.js +0 -45
  148. package/dist/components/composite/CheckoutCrossSell.vue.d.ts +0 -36
  149. package/dist/components/composite/CheckoutLayout.vue.d.ts +0 -20
  150. package/dist/components/composite/CheckoutMilestones.vue.d.ts +0 -13
  151. package/dist/components/composite/CjaFooter.vue.d.ts +0 -29
  152. package/dist/components/composite/CjaMenuBar.vue.d.ts +0 -53
  153. package/dist/components/composite/FunnelLayout.vue.d.ts +0 -38
  154. package/dist/components/composite/FunnelSubmit.vue.d.ts +0 -25
  155. package/dist/components/composite/FunnelSummary.vue.d.ts +0 -76
  156. package/dist/components/composite/FunnelTitle.vue.d.ts +0 -24
  157. package/dist/components/composite/InfoShowcase.vue.d.ts +0 -28
  158. package/dist/components/composite/JourneyMacroSteps.vue.d.ts +0 -13
  159. package/dist/components/forms/CheckboxInput.vue.d.ts +0 -38
  160. package/dist/components/forms/CurrencyInput.vue.d.ts +0 -92
  161. package/dist/components/forms/FileInput.vue.d.ts +0 -118
  162. package/dist/components/forms/NumberInput.vue.d.ts +0 -73
  163. package/dist/components/forms/PhoneInput.vue.d.ts +0 -104
  164. package/dist/components/forms/RadioInputList.vue.d.ts +0 -96
  165. package/dist/components/forms/SelectInput.vue.d.ts +0 -121
  166. package/dist/components/forms/SelectionTiles.vue.d.ts +0 -64
  167. package/dist/components/forms/TextInput.vue.d.ts +0 -127
  168. package/dist/components/forms/TileCheckboxInput.vue.d.ts +0 -34
  169. package/dist/components/forms/ToggleInput.vue.d.ts +0 -70
  170. package/dist/components/forms/structure/InputContainer.vue.d.ts +0 -17
  171. package/dist/components/forms/structure/InputError.vue.d.ts +0 -12
  172. package/dist/components/forms/structure/InputTitle.vue.d.ts +0 -30
  173. package/dist/components/structural/CjaButton.vue.d.ts +0 -66
  174. package/dist/components/structural/CollapseContainer.vue.d.ts +0 -40
  175. package/dist/components/structural/FixedContainer.vue.d.ts +0 -69
  176. package/dist/components/structural/GridContainer.vue.d.ts +0 -21
  177. package/dist/components/structural/GridItem.vue.d.ts +0 -29
  178. package/dist/components/structural/InfoMessage.vue.d.ts +0 -39
  179. package/dist/components/structural/LoadingSpinner.vue.d.ts +0 -16
  180. package/dist/components/structural/Modal.vue.d.ts +0 -50
  181. package/dist/components/structural/Scaffold.vue.d.ts +0 -3
  182. package/dist/components/structural/Scaffold.vue.d.ts.map +0 -1
  183. package/dist/index.d.ts +0 -14
  184. package/dist/src/components/composite/CheckoutCrossSell.vue.d.ts +0 -5
  185. package/dist/src/components/composite/CheckoutCrossSell.vue.d.ts.map +0 -1
  186. package/dist/src/components/composite/CheckoutLayout.vue.d.ts +0 -5
  187. package/dist/src/components/composite/CheckoutLayout.vue.d.ts.map +0 -1
  188. package/dist/src/components/composite/CheckoutMilestones.vue.d.ts +0 -5
  189. package/dist/src/components/composite/CheckoutMilestones.vue.d.ts.map +0 -1
  190. package/dist/src/components/composite/CjaFooter.vue.d.ts +0 -5
  191. package/dist/src/components/composite/CjaFooter.vue.d.ts.map +0 -1
  192. package/dist/src/components/composite/CjaMenuBar.vue.d.ts +0 -5
  193. package/dist/src/components/composite/CjaMenuBar.vue.d.ts.map +0 -1
  194. package/dist/src/components/composite/FunnelLayout.vue.d.ts +0 -5
  195. package/dist/src/components/composite/FunnelLayout.vue.d.ts.map +0 -1
  196. package/dist/src/components/composite/FunnelSubmit.vue.d.ts +0 -5
  197. package/dist/src/components/composite/FunnelSubmit.vue.d.ts.map +0 -1
  198. package/dist/src/components/composite/FunnelSummary.vue.d.ts +0 -5
  199. package/dist/src/components/composite/FunnelSummary.vue.d.ts.map +0 -1
  200. package/dist/src/components/composite/FunnelTitle.vue.d.ts +0 -5
  201. package/dist/src/components/composite/FunnelTitle.vue.d.ts.map +0 -1
  202. package/dist/src/components/composite/InfoShowcase.vue.d.ts +0 -5
  203. package/dist/src/components/composite/InfoShowcase.vue.d.ts.map +0 -1
  204. package/dist/src/components/composite/JourneyMacroSteps.vue.d.ts +0 -5
  205. package/dist/src/components/composite/JourneyMacroSteps.vue.d.ts.map +0 -1
  206. package/dist/src/components/composite/ProductDetails.vue.d.ts +0 -5
  207. package/dist/src/components/composite/ProductDetails.vue.d.ts.map +0 -1
  208. package/dist/src/components/composite/ResultsLayout.vue.d.ts +0 -5
  209. package/dist/src/components/composite/ResultsLayout.vue.d.ts.map +0 -1
  210. package/dist/src/components/forms/CheckboxInput.vue.d.ts +0 -5
  211. package/dist/src/components/forms/CheckboxInput.vue.d.ts.map +0 -1
  212. package/dist/src/components/forms/CurrencyInput.vue.d.ts +0 -5
  213. package/dist/src/components/forms/CurrencyInput.vue.d.ts.map +0 -1
  214. package/dist/src/components/forms/FileInput.vue.d.ts +0 -5
  215. package/dist/src/components/forms/FileInput.vue.d.ts.map +0 -1
  216. package/dist/src/components/forms/NumberInput.vue.d.ts +0 -5
  217. package/dist/src/components/forms/NumberInput.vue.d.ts.map +0 -1
  218. package/dist/src/components/forms/PhoneInput.vue.d.ts +0 -5
  219. package/dist/src/components/forms/PhoneInput.vue.d.ts.map +0 -1
  220. package/dist/src/components/forms/RadioInputList.vue.d.ts +0 -5
  221. package/dist/src/components/forms/RadioInputList.vue.d.ts.map +0 -1
  222. package/dist/src/components/forms/SelectInput.vue.d.ts +0 -5
  223. package/dist/src/components/forms/SelectInput.vue.d.ts.map +0 -1
  224. package/dist/src/components/forms/SelectionTiles.vue.d.ts +0 -5
  225. package/dist/src/components/forms/SelectionTiles.vue.d.ts.map +0 -1
  226. package/dist/src/components/forms/TextInput.vue.d.ts +0 -5
  227. package/dist/src/components/forms/TextInput.vue.d.ts.map +0 -1
  228. package/dist/src/components/forms/TileCheckboxInput.vue.d.ts +0 -5
  229. package/dist/src/components/forms/TileCheckboxInput.vue.d.ts.map +0 -1
  230. package/dist/src/components/forms/ToggleInput.vue.d.ts +0 -5
  231. package/dist/src/components/forms/ToggleInput.vue.d.ts.map +0 -1
  232. package/dist/src/components/forms/structure/InputContainer.vue.d.ts +0 -5
  233. package/dist/src/components/forms/structure/InputContainer.vue.d.ts.map +0 -1
  234. package/dist/src/components/forms/structure/InputError.vue.d.ts +0 -5
  235. package/dist/src/components/forms/structure/InputError.vue.d.ts.map +0 -1
  236. package/dist/src/components/forms/structure/InputTitle.vue.d.ts +0 -5
  237. package/dist/src/components/forms/structure/InputTitle.vue.d.ts.map +0 -1
  238. package/dist/src/components/structural/CjaButton.vue.d.ts +0 -5
  239. package/dist/src/components/structural/CjaButton.vue.d.ts.map +0 -1
  240. package/dist/src/components/structural/CollapseContainer.vue.d.ts +0 -5
  241. package/dist/src/components/structural/CollapseContainer.vue.d.ts.map +0 -1
  242. package/dist/src/components/structural/ContentTabs.vue.d.ts +0 -5
  243. package/dist/src/components/structural/ContentTabs.vue.d.ts.map +0 -1
  244. package/dist/src/components/structural/FixedContainer.vue.d.ts +0 -5
  245. package/dist/src/components/structural/FixedContainer.vue.d.ts.map +0 -1
  246. package/dist/src/components/structural/GridContainer.vue.d.ts +0 -5
  247. package/dist/src/components/structural/GridContainer.vue.d.ts.map +0 -1
  248. package/dist/src/components/structural/GridItem.vue.d.ts +0 -5
  249. package/dist/src/components/structural/GridItem.vue.d.ts.map +0 -1
  250. package/dist/src/components/structural/InfoMessage.vue.d.ts +0 -5
  251. package/dist/src/components/structural/InfoMessage.vue.d.ts.map +0 -1
  252. package/dist/src/components/structural/LoadingSpinner.vue.d.ts +0 -5
  253. package/dist/src/components/structural/LoadingSpinner.vue.d.ts.map +0 -1
  254. package/dist/src/components/structural/Modal.vue.d.ts +0 -5
  255. package/dist/src/components/structural/Modal.vue.d.ts.map +0 -1
  256. package/dist/styles.css +0 -1
  257. /package/dist/{components → types/components}/composite/ProductDetails.vue.d.ts +0 -0
  258. /package/dist/{components → types/components}/composite/ResultsLayout.vue.d.ts +0 -0
  259. /package/dist/{components → types/components}/index.d.ts +0 -0
  260. /package/dist/{constants → types/constants}/MyConstants.d.ts +0 -0
  261. /package/dist/{constants → types/constants}/index.d.ts +0 -0
  262. /package/dist/types/{CheckoutMilestone.d.ts → types/CheckoutMilestone.d.ts} +0 -0
  263. /package/dist/types/{Footer.d.ts → types/Footer.d.ts} +0 -0
  264. /package/dist/types/{Menu.d.ts → types/Menu.d.ts} +0 -0
  265. /package/dist/types/{RadioOption.d.ts → types/RadioOption.d.ts} +0 -0
  266. /package/dist/types/{SelectOption.d.ts → types/SelectOption.d.ts} +0 -0
  267. /package/dist/types/{StoreDataValue.d.ts → types/StoreDataValue.d.ts} +0 -0
  268. /package/dist/types/{Storyblok.d.ts → types/Storyblok.d.ts} +0 -0
  269. /package/dist/types/{TileOption.d.ts → types/TileOption.d.ts} +0 -0
  270. /package/dist/{utils → types/utils}/cjaRouter.d.ts +0 -0
  271. /package/dist/{utils → types/utils}/cjaStore.d.ts +0 -0
  272. /package/dist/{utils → types/utils}/findScrollAncestor.d.ts +0 -0
  273. /package/dist/{utils → types/utils}/generateRoutes.d.ts +0 -0
  274. /package/dist/{utils → types/utils}/getFromUrl.d.ts +0 -0
  275. /package/dist/{utils → types/utils}/getMessages.d.ts +0 -0
  276. /package/dist/{utils → types/utils}/gtm.d.ts +0 -0
  277. /package/dist/{utils → types/utils}/index.d.ts +0 -0
  278. /package/dist/{utils → types/utils}/jsonReviver.d.ts +0 -0
  279. /package/dist/{utils → types/utils}/storyblokLink.d.ts +0 -0
  280. /package/dist/{utils → types/utils}/updateForm.d.ts +0 -0
  281. /package/dist/{utils → types/utils}/uploadFile.d.ts +0 -0
  282. /package/dist/{utils → types/utils}/useGlobalProperties.d.ts +0 -0
  283. /package/dist/{utils → types/utils}/useViewportDetector.d.ts +0 -0
@@ -0,0 +1,197 @@
1
+ <template>
2
+ <div class="funnel-container">
3
+ <GridContainer>
4
+ <GridItem
5
+ class="content-container"
6
+ :sizeSm="2"
7
+ :sizeMd="4"
8
+ :sizeLg="$slots.sidebar ? 8 : 12"
9
+ >
10
+ <div class="content-wrapper">
11
+ <div class="progress-container">
12
+ <div class="back-container">
13
+ <button
14
+ v-if="meta.displayStep && meta.displayStep > 1"
15
+ class="back-button"
16
+ @click="$emit('btn:previous')"
17
+ >
18
+ <em class="m-cgg-icon--chevron-left"></em>
19
+ Voltar
20
+ </button>
21
+ </div>
22
+ <div class="progress-bar">
23
+ <div class="progress" :style="{ width: progressWidth }"></div>
24
+ </div>
25
+ <div class="progress-details">
26
+ Passo {{ meta.displayStep }} de {{ meta.displayTotalSteps }}
27
+ </div>
28
+ </div>
29
+ <transition
30
+ :name="
31
+ meta.animation === 'slide-left' ? 'slide-left' : 'slide-right'
32
+ "
33
+ mode="out-in"
34
+ >
35
+ <div class="funnel-content" :key="path">
36
+ <slot name="content"></slot>
37
+ </div>
38
+ </transition>
39
+ </div>
40
+ </GridItem>
41
+ <GridItem v-if="activeViewport.lg && $slots.sidebar" :sizeLg="4">
42
+ <slot name="sidebar"></slot>
43
+ </GridItem>
44
+ </GridContainer>
45
+ </div>
46
+ </template>
47
+
48
+ <script lang="ts" setup>
49
+ import { computed } from "vue";
50
+ import GridContainer from "../structural/GridContainer.vue";
51
+ import GridItem from "../structural/GridItem.vue";
52
+ import { useViewportDetector } from "../../utils";
53
+
54
+ const { activeViewport } = useViewportDetector();
55
+
56
+ const props = defineProps<{
57
+ path: string;
58
+ meta: {
59
+ displayStep?: number;
60
+ displayTotalSteps?: number;
61
+ animation?: string;
62
+ };
63
+ }>();
64
+
65
+ const progressWidth = computed(() =>
66
+ props.meta.displayStep && props.meta.displayTotalSteps
67
+ ? `${(100 / props.meta.displayTotalSteps) * props.meta.displayStep}%`
68
+ : 0
69
+ );
70
+
71
+ defineEmits(["btn:previous"]);
72
+ </script>
73
+
74
+ <style lang="scss" scoped>
75
+ @import "../../assets/breakpoints.scss";
76
+
77
+ .funnel-container {
78
+ padding-bottom: 100px;
79
+
80
+ @media screen and (min-width: 1024px) {
81
+ padding-top: 40px;
82
+ padding-bottom: 40px;
83
+ }
84
+
85
+ .funnel-content {
86
+ transition: all 0.3s linear;
87
+
88
+ &.slide-right-enter-from,
89
+ &.slide-left-leave-to {
90
+ opacity: 0;
91
+ transform: translate(20%, 0);
92
+ }
93
+
94
+ &.slide-right-leave-to,
95
+ &.slide-left-enter-from {
96
+ opacity: 0;
97
+ transform: translate(-20%, 0);
98
+ }
99
+
100
+ &.slide-left-enter-to,
101
+ &.slide-right-enter-to {
102
+ opacity: 1;
103
+ transform: translate(0, 0);
104
+ }
105
+ }
106
+
107
+ .content-wrapper {
108
+ background: #ffffff;
109
+ padding: 20px 0;
110
+ overflow: hidden;
111
+
112
+ @media screen and (min-width: $break-md-min) {
113
+ padding: 30px 0;
114
+ }
115
+
116
+ @media screen and (min-width: 1024px) {
117
+ border: 1px solid #dedede;
118
+ box-shadow: 0px 4px 40px rgba(0, 0, 0, 0.15);
119
+ border-radius: 32px;
120
+ padding: 30px;
121
+ }
122
+ }
123
+ }
124
+
125
+ .progress-container {
126
+ display: grid;
127
+ gap: 10px;
128
+ grid-template-columns: 1fr 1fr;
129
+ align-items: center;
130
+ margin-bottom: 30px;
131
+
132
+ @media screen and (min-width: $break-md-min) {
133
+ gap: 20px;
134
+ grid-template-columns: 90px 1fr 90px;
135
+ padding-bottom: 20px;
136
+ border-bottom: 1px solid #dedede;
137
+ }
138
+
139
+ .back-container {
140
+ grid-area: 2 / 1 / 3 / 2;
141
+
142
+ @media screen and (min-width: $break-md-min) {
143
+ grid-area: 1 / 1 / 2 / 2;
144
+ }
145
+
146
+ .back-button {
147
+ color: #155072;
148
+ font-size: 16px;
149
+ line-height: 16px;
150
+ font-weight: 700;
151
+ padding: 0;
152
+ border: 0;
153
+ outline: none;
154
+ background-color: transparent;
155
+
156
+ em {
157
+ vertical-align: -2px;
158
+ margin-left: -6px;
159
+ font-weight: 700;
160
+ }
161
+ }
162
+ }
163
+
164
+ .progress-bar {
165
+ grid-area: 1 / 1 / 2 / 3;
166
+ background-color: #f4f9fc;
167
+ height: 16px;
168
+ border-radius: 30px;
169
+
170
+ @media screen and (min-width: $break-md-min) {
171
+ grid-area: 1 / 2 / 2 / 3;
172
+ }
173
+
174
+ .progress {
175
+ background: linear-gradient(218.56deg, #56924b 5.04%, #076b9c 62.92%);
176
+ height: 16px;
177
+ border-radius: 30px;
178
+ width: 0;
179
+ transition: width 0.5s;
180
+ -webkit-transition: width 0.5s;
181
+ }
182
+ }
183
+
184
+ .progress-details {
185
+ grid-area: 2 / 2 / 3 / 3;
186
+ text-align: right;
187
+ margin-left: auto;
188
+ font-size: 14px;
189
+ line-height: 14px;
190
+ color: #155072;
191
+
192
+ @media screen and (min-width: $break-md-min) {
193
+ grid-area: 1 / 3 / 2 / 4;
194
+ }
195
+ }
196
+ }
197
+ </style>
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <Teleport to="body" :disabled="activeViewport.lg">
3
+ <div class="button-container">
4
+ <CjaButton
5
+ :color="'orange'"
6
+ :size="'lg'"
7
+ :loading="loading"
8
+ :icon="icon"
9
+ @click="$emit('btn:click')"
10
+ >
11
+ <slot>Continuar</slot>
12
+ </CjaButton>
13
+ </div>
14
+ </Teleport>
15
+ </template>
16
+
17
+ <script setup lang="ts">
18
+ import CjaButton from "../structural/CjaButton.vue";
19
+ import { useViewportDetector } from "../../utils";
20
+
21
+ const { activeViewport } = useViewportDetector();
22
+
23
+ defineProps<{
24
+ loading?: boolean;
25
+ icon?: string;
26
+ }>();
27
+
28
+ defineEmits(["btn:click"]);
29
+ </script>
30
+
31
+ <style lang="scss" scoped>
32
+ @import "../../assets/shadows.scss";
33
+
34
+ .button-container {
35
+ position: fixed;
36
+ bottom: 0;
37
+ left: 0;
38
+ width: 100%;
39
+ padding: 20px 15px;
40
+ background-color: #fff;
41
+ display: flex;
42
+ flex-direction: row;
43
+ justify-content: center;
44
+ box-shadow: $box-shadow-m;
45
+
46
+ @media screen and (min-width: 1024px) {
47
+ position: static;
48
+ margin: 30px 0 0;
49
+ padding: 0;
50
+ box-shadow: none;
51
+ }
52
+ }
53
+ </style>
@@ -0,0 +1,198 @@
1
+ <template>
2
+ <div class="summary-container">
3
+ <div class="summary-wrapper">
4
+ <div class="title-container">
5
+ <h3>{{ title }}</h3>
6
+ <button @click="toggleEdit">
7
+ <span class="m-cgg-icon--edit"></span>
8
+ <span>{{ customText.edit }}</span>
9
+ </button>
10
+ </div>
11
+ <div class="info-container" :class="{ 'edit-mode': editMode }">
12
+ <div class="info-wrapper" v-for="info in infoList">
13
+ <div class="info-title">
14
+ {{ info.title }}
15
+ </div>
16
+ <div class="info-display" v-if="!editMode">
17
+ {{ info.value || "-" }}
18
+ </div>
19
+ <div class="info-edit" v-else>
20
+ <slot :name="info.control"></slot>
21
+ </div>
22
+ </div>
23
+ </div>
24
+ <div class="summary-footer" v-if="editMode">
25
+ <CjaButton :type="'secondary'" :size="'sm'" @click="cancelEdit">
26
+ {{ customText.cancel }}
27
+ </CjaButton>
28
+ <CjaButton :size="'sm'" @click="saveEdit">
29
+ {{ customText.save }}
30
+ </CjaButton>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </template>
35
+
36
+ <script lang="ts" setup>
37
+ import { ref } from "vue";
38
+ import CjaButton from "../structural/CjaButton.vue";
39
+
40
+ const editMode = ref(false);
41
+
42
+ const formLock = ref();
43
+
44
+ const props = withDefaults(
45
+ defineProps<{
46
+ title?: string;
47
+ customText?: {
48
+ edit?: string;
49
+ cancel?: string;
50
+ save?: string;
51
+ };
52
+ infoList: {
53
+ title: string;
54
+ value: any;
55
+ control: string;
56
+ }[];
57
+ validateForm?: () => boolean;
58
+ }>(),
59
+ {
60
+ title: "O seu resumo",
61
+ customText: () => ({
62
+ edit: "Editar",
63
+ cancel: "Cancelar",
64
+ save: "Guardar",
65
+ }),
66
+ }
67
+ );
68
+
69
+ const toggleEdit = () => {
70
+ editMode.value = true;
71
+ formLock.value = false;
72
+
73
+ emit("btn:edit");
74
+ };
75
+
76
+ const cancelEdit = () => {
77
+ if (!formLock.value) {
78
+ formLock.value = true;
79
+ editMode.value = false;
80
+
81
+ emit("btn:cancel");
82
+ }
83
+ };
84
+
85
+ const saveEdit = () => {
86
+ if ((props.validateForm ? props.validateForm() : true) && !formLock.value) {
87
+ formLock.value = true;
88
+ editMode.value = false;
89
+
90
+ emit("btn:save");
91
+ }
92
+ };
93
+
94
+ defineExpose({ editMode });
95
+
96
+ const emit = defineEmits(["btn:cancel", "btn:save", "btn:edit"]);
97
+ </script>
98
+
99
+ <style lang="scss" scoped>
100
+ @import "../../assets/shadows.scss";
101
+
102
+ .summary-container {
103
+ .summary-wrapper {
104
+ background: #ffffff;
105
+ border: 1px solid #dedede;
106
+ box-shadow: $box-shadow-m;
107
+ border-radius: 16px;
108
+ padding: 20px 30px;
109
+
110
+ .title-container {
111
+ display: flex;
112
+ flex-direction: row;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ padding-bottom: 10px;
116
+ margin-bottom: 10px;
117
+ border-bottom: 1px solid #dedede;
118
+
119
+ h3 {
120
+ font-weight: 700;
121
+ font-size: 16px;
122
+ line-height: 20px;
123
+ margin: 0;
124
+ }
125
+
126
+ button {
127
+ padding: 0;
128
+ border: none;
129
+ background: none;
130
+ color: #9fabbc;
131
+ font-size: 14px;
132
+ line-height: 14px;
133
+
134
+ &:focus,
135
+ &:focus-within {
136
+ outline: none;
137
+ }
138
+
139
+ span.m-cgg-icon--edit {
140
+ margin-right: 10px;
141
+ }
142
+ }
143
+ }
144
+
145
+ .info-container {
146
+ display: flex;
147
+ flex-direction: column;
148
+ gap: 20px;
149
+
150
+ .info-wrapper {
151
+ display: grid;
152
+ grid-template-columns: auto 1fr;
153
+ gap: 10px 20px;
154
+ font-size: 14px;
155
+ line-height: 14px;
156
+
157
+ .info-display {
158
+ text-align: right;
159
+ font-weight: 700;
160
+
161
+ &.active {
162
+ color: #56924b;
163
+ }
164
+ }
165
+
166
+ .info-error {
167
+ margin-top: 0;
168
+ }
169
+ }
170
+
171
+ &.edit-mode .info-wrapper {
172
+ grid-template-columns: 1fr 1fr;
173
+ align-items: center;
174
+
175
+ .info-title {
176
+ grid-area: 1 / 1 / 2 / 2;
177
+ }
178
+ .info-edit {
179
+ grid-area: 1 / 2 / 2 / 3;
180
+ }
181
+ .info-error {
182
+ grid-area: 2 / 1 / 3 / 3;
183
+ }
184
+ }
185
+ }
186
+
187
+ .summary-footer {
188
+ margin-top: 20px;
189
+ padding-top: 15px;
190
+ border-top: 1px solid #dedede;
191
+ display: flex;
192
+ flex-direction: row;
193
+ justify-content: flex-end;
194
+ gap: 10px;
195
+ }
196
+ }
197
+ }
198
+ </style>
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <div class="title-container">
3
+ <div class="title-wrapper">
4
+ <span>
5
+ {{ title }}
6
+ </span>
7
+ <span v-if="tooltip" class="m-cgg-icon--help" v-tippy="tooltip"></span>
8
+ </div>
9
+ <div class="description" v-if="description">
10
+ {{ description }}
11
+ </div>
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts" setup>
16
+ defineProps<{
17
+ title: string;
18
+ description?: string;
19
+ tooltip?: string;
20
+ }>();
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ @import "../../assets/breakpoints.scss";
25
+
26
+ .title-container {
27
+ text-align: center;
28
+ margin-bottom: 24px;
29
+
30
+ .title-wrapper {
31
+ display: flex;
32
+ flex-direction: row;
33
+ align-items: center;
34
+ justify-content: center;
35
+ font-size: 18px;
36
+ line-height: 20px;
37
+ font-weight: 700;
38
+ margin-bottom: 20px;
39
+ color: #076b9c;
40
+
41
+ @media screen and (min-width: $break-md-min) {
42
+ font-size: 26px;
43
+ line-height: 30px;
44
+ }
45
+
46
+ .m-cgg-icon--help {
47
+ flex-shrink: 0;
48
+ font-size: 20px;
49
+ color: #076b9c;
50
+ }
51
+ }
52
+
53
+ .description {
54
+ font-weight: 700;
55
+ font-size: 16px;
56
+ line-height: 20px;
57
+ }
58
+ }
59
+ </style>
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div class="info-showcase">
3
+ <h2>{{ title }}</h2>
4
+ <div class="showcase-list">
5
+ <div class="showcase-item" v-for="item in items">
6
+ <div class="image-container">
7
+ <img :src="item.image" />
8
+ </div>
9
+ <div class="text-container">
10
+ <div class="title">
11
+ {{ item.title }}
12
+ </div>
13
+ <div class="description">
14
+ {{ item.description }}
15
+ </div>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <script lang="ts" setup>
23
+ defineProps<{
24
+ title: string;
25
+ items: {
26
+ title: string;
27
+ description: string;
28
+ image: string;
29
+ }[];
30
+ }>();
31
+ </script>
32
+
33
+ <style lang="scss" scoped>
34
+ .info-showcase {
35
+ padding: 24px 36px;
36
+ background: #fff;
37
+ box-shadow: 0px 4px 40px rgba(0, 0, 0, 0.15);
38
+
39
+ h2 {
40
+ text-align: center;
41
+ font-weight: 700;
42
+ font-size: 24px;
43
+ line-height: 29px;
44
+ margin: 0 0 30px;
45
+ }
46
+
47
+ .showcase-list {
48
+ display: grid;
49
+ grid-template-columns: 1;
50
+ gap: 56px;
51
+ max-width: 1200px;
52
+ margin: 0 auto;
53
+
54
+ @media screen and (min-width: 1024px) {
55
+ grid-template-columns: repeat(3, 1fr);
56
+ }
57
+ }
58
+
59
+ .showcase-item {
60
+ display: grid;
61
+ align-items: center;
62
+ grid-template-columns: 80px 1fr;
63
+ gap: 24px;
64
+
65
+ .image-container {
66
+ img {
67
+ display: block;
68
+ max-width: 100%;
69
+ }
70
+ }
71
+
72
+ .text-container {
73
+ .title {
74
+ font-weight: 700;
75
+ font-size: 18px;
76
+ line-height: 22px;
77
+ margin-bottom: 10px;
78
+ }
79
+
80
+ .description {
81
+ font-size: 14px;
82
+ line-height: 17px;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ </style>
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <div class="macro-steps-container">
3
+ <div
4
+ class="macro-step"
5
+ :class="[`step-status-${step.status}`]"
6
+ v-for="(step, i) in stepList"
7
+ >
8
+ <a
9
+ class="step-description"
10
+ v-if="step.navigationUrl && step.status == 'past'"
11
+ :href="step.navigationUrl"
12
+ >
13
+ <span class="step-icon" :class="step.icon"></span>
14
+ <a class="step-label">{{ step.label }}</a>
15
+ </a>
16
+ <span class="step-description" v-else>
17
+ <span class="step-icon" :class="step.icon"></span>
18
+ <span class="step-label">{{ step.label }}</span>
19
+ </span>
20
+ <span
21
+ class="m-cgg-icon--chevron-right"
22
+ v-if="i < stepList.length - 1"
23
+ ></span>
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script lang="ts" setup>
29
+ import { MacroStep } from "../../types/Menu";
30
+
31
+ defineProps<{
32
+ stepList: MacroStep[];
33
+ }>();
34
+ </script>
35
+
36
+ <style lang="scss" scoped>
37
+ .macro-steps-container {
38
+ background: #fff;
39
+ padding: 16px;
40
+ border-bottom: 1px solid #dedede;
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ gap: 10px;
45
+
46
+ @media screen and (min-width: 1024px) {
47
+ border-bottom: none;
48
+ padding: 0 16px;
49
+ }
50
+
51
+ .macro-step {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 10px;
55
+
56
+ .step-description {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 10px;
60
+ font-size: 14px;
61
+ line-height: 17px;
62
+ transition: all 0.2s ease-in-out;
63
+
64
+ .step-label {
65
+ text-transform: uppercase;
66
+ display: none;
67
+
68
+ @media screen and (min-width: 1200px) {
69
+ display: block;
70
+ }
71
+ }
72
+ }
73
+
74
+ a {
75
+ text-decoration: none;
76
+ color: inherit;
77
+
78
+ span {
79
+ color: inherit;
80
+ }
81
+
82
+ &:hover {
83
+ cursor: pointer;
84
+ text-decoration: none;
85
+ color: #076b9c;
86
+ }
87
+ }
88
+
89
+ &.step-status-future {
90
+ color: #9fabbc;
91
+ }
92
+
93
+ &.step-status-current {
94
+ color: #076b9c;
95
+ font-weight: 700;
96
+
97
+ .step-label {
98
+ display: block;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ </style>
104
+ ../../types/Menu