cja-phoenix 0.2.23 → 0.3.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.
- package/dist/cja-phoenix.es.js +1206 -1198
- package/dist/style.css +1 -1
- package/dist/types/components/structural/ContentTabs.vue.d.ts +6 -7
- package/dist/types/components/structural/Modal.vue.d.ts +0 -2
- package/dist/types/histoire.setup.d.ts +2 -0
- package/dist/types/stories/CjaButton.story.vue.d.ts +2 -0
- package/dist/types/stories/ContentTabs.story.vue.d.ts +2 -0
- package/dist/types/types/MacroStep.d.ts +1 -0
- package/dist/types/types/index.d.ts +1 -2
- package/dist/types/utils/gtm.d.ts +1 -0
- package/package.json +8 -9
- package/src/components/composite/CheckoutCrossSell.vue +4 -4
- package/src/components/composite/CheckoutMilestones.vue +14 -4
- package/src/components/composite/CjaMenuBar.vue +18 -31
- package/src/components/composite/FunnelSummary.vue +4 -4
- package/src/components/composite/JourneyMacroSteps.vue +46 -15
- package/src/components/forms/RadioInput.vue +1 -0
- package/src/components/structural/CjaButton.vue +150 -21
- package/src/components/structural/ContentTabs.vue +16 -16
- package/src/components/structural/LoadingSpinner.vue +1 -1
- package/src/components/structural/Modal.vue +6 -3
- package/src/histoire.setup.ts +2 -0
- package/src/stories/CjaButton.story.vue +180 -0
- package/src/stories/ContentTabs.story.vue +59 -0
- package/src/stories/Modal.story.vue +74 -4
- package/src/types/MacroStep.ts +1 -0
- package/src/types/index.ts +0 -2
- package/src/utils/gtm.ts +2 -0
- package/dist/types/types/Tab.d.ts +0 -4
- package/src/types/Tab.ts +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<header class="main-header-container" id="page-header">
|
|
2
|
+
<header class="main-header-container" id="page-header" ref="headerEl">
|
|
3
3
|
<FixedContainer :active="activeViewport.lg" :size="{ width: '100%' }">
|
|
4
4
|
<div class="main-header">
|
|
5
5
|
<div class="logo-container">
|
|
@@ -10,15 +10,15 @@
|
|
|
10
10
|
<img :src="baseImgUrl + 'CPJ-logo-header.svg'" v-else />
|
|
11
11
|
</div>
|
|
12
12
|
</div>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
<slot name="content"></slot>
|
|
13
|
+
|
|
14
|
+
<div class="content-container">
|
|
15
|
+
<JourneyMacroSteps
|
|
16
|
+
:stepList="macroStepList"
|
|
17
|
+
v-if="activeViewport.lg && macroStepList"
|
|
18
|
+
/>
|
|
19
|
+
<slot name="content" v-else-if="$slots.content"></slot>
|
|
21
20
|
</div>
|
|
21
|
+
|
|
22
22
|
<div class="side-info" v-if="sideInfo">
|
|
23
23
|
<slot name="side">
|
|
24
24
|
<div class="contact-container">
|
|
@@ -36,9 +36,7 @@
|
|
|
36
36
|
:size="{ width: '100%' }"
|
|
37
37
|
:position="{ left: '0', top: '0' }"
|
|
38
38
|
>
|
|
39
|
-
<
|
|
40
|
-
<JourneyMacroSteps :stepList="macroStepList" />
|
|
41
|
-
</div>
|
|
39
|
+
<JourneyMacroSteps :stepList="macroStepList" />
|
|
42
40
|
</FixedContainer>
|
|
43
41
|
</FixedContainer>
|
|
44
42
|
</header>
|
|
@@ -49,6 +47,9 @@ import { inject } from "vue";
|
|
|
49
47
|
import FixedContainer from "../structural/FixedContainer.vue";
|
|
50
48
|
import { MacroStep } from "../../types";
|
|
51
49
|
import JourneyMacroSteps from "./JourneyMacroSteps.vue";
|
|
50
|
+
import { ref } from "vue";
|
|
51
|
+
import { onMounted } from "vue";
|
|
52
|
+
import { provide } from "vue";
|
|
52
53
|
|
|
53
54
|
const activeViewport: any = inject("activeViewport");
|
|
54
55
|
withDefaults(
|
|
@@ -80,7 +81,7 @@ header.main-header-container {
|
|
|
80
81
|
flex-direction: row;
|
|
81
82
|
align-items: center;
|
|
82
83
|
justify-content: space-between;
|
|
83
|
-
gap:
|
|
84
|
+
gap: 16px;
|
|
84
85
|
background-color: #fff;
|
|
85
86
|
padding: 20px;
|
|
86
87
|
box-shadow: $box-shadow-m;
|
|
@@ -104,6 +105,10 @@ header.main-header-container {
|
|
|
104
105
|
}
|
|
105
106
|
}
|
|
106
107
|
|
|
108
|
+
.content-container {
|
|
109
|
+
flex-grow: 1;
|
|
110
|
+
}
|
|
111
|
+
|
|
107
112
|
.side-info {
|
|
108
113
|
@media screen and (min-width: 1024px) {
|
|
109
114
|
display: flex;
|
|
@@ -159,23 +164,5 @@ header.main-header-container {
|
|
|
159
164
|
}
|
|
160
165
|
}
|
|
161
166
|
}
|
|
162
|
-
|
|
163
|
-
.content-container {
|
|
164
|
-
background: #fff;
|
|
165
|
-
padding: 20px;
|
|
166
|
-
|
|
167
|
-
&.macro-steps {
|
|
168
|
-
border-bottom: 1px solid #dedede;
|
|
169
|
-
|
|
170
|
-
@media screen and (min-width: 1024px) {
|
|
171
|
-
border-bottom: none;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
@media screen and (min-width: 1024px) {
|
|
176
|
-
padding: 0;
|
|
177
|
-
flex-grow: 1;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
167
|
}
|
|
181
168
|
</style>
|
|
@@ -118,8 +118,8 @@ const emit = defineEmits(["btn:cancel", "btn:save", "btn:edit"]);
|
|
|
118
118
|
|
|
119
119
|
h3 {
|
|
120
120
|
font-weight: 700;
|
|
121
|
-
font-size:
|
|
122
|
-
line-height:
|
|
121
|
+
font-size: 16px;
|
|
122
|
+
line-height: 20px;
|
|
123
123
|
margin: 0;
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -151,8 +151,8 @@ const emit = defineEmits(["btn:cancel", "btn:save", "btn:edit"]);
|
|
|
151
151
|
display: grid;
|
|
152
152
|
grid-template-columns: auto 1fr;
|
|
153
153
|
gap: 10px 20px;
|
|
154
|
-
font-size:
|
|
155
|
-
line-height:
|
|
154
|
+
font-size: 14px;
|
|
155
|
+
line-height: 14px;
|
|
156
156
|
|
|
157
157
|
.info-display {
|
|
158
158
|
text-align: right;
|
|
@@ -5,8 +5,18 @@
|
|
|
5
5
|
:class="[`step-status-${step.status}`]"
|
|
6
6
|
v-for="(step, i) in stepList"
|
|
7
7
|
>
|
|
8
|
-
<
|
|
9
|
-
|
|
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>
|
|
10
20
|
<span
|
|
11
21
|
class="m-cgg-icon--chevron-right"
|
|
12
22
|
v-if="i < stepList.length - 1"
|
|
@@ -16,6 +26,7 @@
|
|
|
16
26
|
</template>
|
|
17
27
|
|
|
18
28
|
<script lang="ts" setup>
|
|
29
|
+
import { Scaffold } from "..";
|
|
19
30
|
import { MacroStep } from "../../types/MacroStep";
|
|
20
31
|
|
|
21
32
|
defineProps<{
|
|
@@ -25,35 +36,55 @@ defineProps<{
|
|
|
25
36
|
|
|
26
37
|
<style lang="scss" scoped>
|
|
27
38
|
.macro-steps-container {
|
|
39
|
+
background: #fff;
|
|
40
|
+
padding: 16px;
|
|
41
|
+
border-bottom: 1px solid #dedede;
|
|
28
42
|
display: flex;
|
|
29
43
|
align-items: center;
|
|
30
44
|
justify-content: center;
|
|
31
45
|
gap: 10px;
|
|
32
|
-
|
|
46
|
+
|
|
47
|
+
@media screen and (min-width: 1024px) {
|
|
48
|
+
border-bottom: none;
|
|
49
|
+
padding: 0 16px;
|
|
50
|
+
}
|
|
33
51
|
|
|
34
52
|
.macro-step {
|
|
35
53
|
display: flex;
|
|
36
54
|
align-items: center;
|
|
55
|
+
gap: 10px;
|
|
37
56
|
|
|
38
|
-
.step-
|
|
39
|
-
|
|
57
|
+
.step-description {
|
|
58
|
+
display: flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 10px;
|
|
40
61
|
font-size: 14px;
|
|
41
62
|
line-height: 17px;
|
|
42
|
-
|
|
43
|
-
display: none;
|
|
63
|
+
transition: all 0.2s ease-in-out;
|
|
44
64
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
65
|
+
.step-label {
|
|
66
|
+
text-transform: uppercase;
|
|
67
|
+
display: none;
|
|
49
68
|
|
|
50
|
-
|
|
51
|
-
|
|
69
|
+
@media screen and (min-width: 1200px) {
|
|
70
|
+
display: block;
|
|
71
|
+
}
|
|
52
72
|
}
|
|
53
73
|
}
|
|
54
74
|
|
|
55
|
-
|
|
56
|
-
|
|
75
|
+
a {
|
|
76
|
+
text-decoration: none;
|
|
77
|
+
color: inherit;
|
|
78
|
+
|
|
79
|
+
span {
|
|
80
|
+
color: inherit;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&:hover {
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
text-decoration: none;
|
|
86
|
+
color: #076b9c;
|
|
87
|
+
}
|
|
57
88
|
}
|
|
58
89
|
|
|
59
90
|
&.step-status-future {
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
`btn-size-${size}`,
|
|
7
7
|
`btn-color-${color}`,
|
|
8
8
|
`icon-${iconPosition}`,
|
|
9
|
-
{ 'btn-loading': loading },
|
|
9
|
+
{ 'btn-loading': loading, 'btn-icon-only': !$slots.default && icon },
|
|
10
10
|
]"
|
|
11
11
|
>
|
|
12
12
|
<Scaffold v-if="!loading">
|
|
13
|
-
<span><slot></slot></span>
|
|
13
|
+
<span v-if="$slots.default"><slot></slot></span>
|
|
14
14
|
<span v-if="icon" :class="icon"></span>
|
|
15
15
|
</Scaffold>
|
|
16
16
|
<div class="spinner" v-else></div>
|
|
@@ -46,7 +46,6 @@ withDefaults(
|
|
|
46
46
|
flex-direction: row;
|
|
47
47
|
justify-content: center;
|
|
48
48
|
align-items: center;
|
|
49
|
-
box-shadow: $box-shadow-s;
|
|
50
49
|
gap: 10px;
|
|
51
50
|
font-weight: 700;
|
|
52
51
|
cursor: pointer;
|
|
@@ -65,66 +64,103 @@ withDefaults(
|
|
|
65
64
|
}
|
|
66
65
|
|
|
67
66
|
&.btn-size-sm {
|
|
68
|
-
font-size:
|
|
69
|
-
line-height:
|
|
70
|
-
padding:
|
|
67
|
+
font-size: 14px;
|
|
68
|
+
line-height: 18px;
|
|
69
|
+
padding: 8px 12px;
|
|
71
70
|
border-radius: 8px;
|
|
71
|
+
|
|
72
|
+
&.btn-icon-only,
|
|
73
|
+
&.btn-loading {
|
|
74
|
+
padding: 4px;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&.btn-loading .spinner {
|
|
78
|
+
width: 14px;
|
|
79
|
+
height: 14px;
|
|
80
|
+
}
|
|
72
81
|
}
|
|
73
82
|
|
|
74
83
|
&.btn-size-md {
|
|
75
84
|
font-size: 18px;
|
|
76
|
-
line-height:
|
|
77
|
-
padding:
|
|
85
|
+
line-height: 18px;
|
|
86
|
+
padding: 8px 24px;
|
|
78
87
|
border-radius: 8px;
|
|
88
|
+
|
|
89
|
+
&.btn-icon-only,
|
|
90
|
+
&.btn-loading {
|
|
91
|
+
padding: 8px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
&.btn-loading .spinner {
|
|
95
|
+
width: 18px;
|
|
96
|
+
height: 18px;
|
|
97
|
+
}
|
|
79
98
|
}
|
|
80
99
|
|
|
81
100
|
&.btn-size-lg {
|
|
82
|
-
font-size:
|
|
83
|
-
line-height:
|
|
101
|
+
font-size: 22px;
|
|
102
|
+
line-height: 22px;
|
|
84
103
|
padding: 16px 32px;
|
|
85
104
|
border-radius: 8px;
|
|
105
|
+
|
|
106
|
+
&.btn-icon-only,
|
|
107
|
+
&.btn-loading {
|
|
108
|
+
padding: 16px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
&.btn-loading .spinner {
|
|
112
|
+
width: 22px;
|
|
113
|
+
height: 22px;
|
|
114
|
+
}
|
|
86
115
|
}
|
|
87
116
|
|
|
88
117
|
&.btn-primary {
|
|
118
|
+
box-shadow: $box-shadow-s;
|
|
119
|
+
|
|
89
120
|
&.btn-color-blue:not(:disabled) {
|
|
90
|
-
background
|
|
121
|
+
background: #076b9c;
|
|
91
122
|
border-color: #076b9c;
|
|
92
123
|
color: #fff;
|
|
93
124
|
|
|
94
125
|
&:hover {
|
|
95
|
-
background
|
|
126
|
+
background: #0d2745;
|
|
96
127
|
border-color: #0d2745;
|
|
97
128
|
}
|
|
98
129
|
|
|
99
130
|
&:focus {
|
|
100
|
-
background
|
|
131
|
+
background: #155072;
|
|
101
132
|
border-color: #155072;
|
|
102
133
|
}
|
|
103
134
|
}
|
|
104
135
|
|
|
105
136
|
&.btn-color-orange:not(:disabled) {
|
|
106
|
-
background
|
|
137
|
+
background: #f58423;
|
|
107
138
|
border-color: #f58423;
|
|
108
139
|
color: #fff;
|
|
109
140
|
|
|
110
141
|
&:hover {
|
|
111
|
-
background
|
|
142
|
+
background: #ea730b;
|
|
112
143
|
border-color: #ea730b;
|
|
113
144
|
}
|
|
114
145
|
|
|
115
146
|
&:focus {
|
|
116
|
-
background
|
|
147
|
+
background: #f9b377;
|
|
117
148
|
border-color: #f9b377;
|
|
118
149
|
}
|
|
119
150
|
}
|
|
120
151
|
|
|
121
152
|
&.btn-color-white:not(:disabled) {
|
|
122
|
-
background
|
|
153
|
+
background: #fff;
|
|
123
154
|
border-color: #fff;
|
|
124
155
|
color: #0d2745;
|
|
125
156
|
|
|
126
157
|
&:hover {
|
|
127
|
-
background
|
|
158
|
+
background: #fafafa;
|
|
159
|
+
border-color: #fafafa;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
&:focus {
|
|
163
|
+
background: #ebebeb;
|
|
128
164
|
border-color: #ebebeb;
|
|
129
165
|
}
|
|
130
166
|
}
|
|
@@ -143,14 +179,12 @@ withDefaults(
|
|
|
143
179
|
}
|
|
144
180
|
|
|
145
181
|
&.btn-secondary {
|
|
146
|
-
// Implement bordered buttons
|
|
147
|
-
|
|
148
182
|
&.btn-color-blue:not(:disabled) {
|
|
149
183
|
border-color: #076b9c;
|
|
150
184
|
color: #076b9c;
|
|
151
185
|
|
|
152
186
|
&:hover {
|
|
153
|
-
background
|
|
187
|
+
background: #f4f9fc;
|
|
154
188
|
border-color: #155072;
|
|
155
189
|
color: #155072;
|
|
156
190
|
}
|
|
@@ -160,6 +194,101 @@ withDefaults(
|
|
|
160
194
|
color: #0d2745;
|
|
161
195
|
}
|
|
162
196
|
}
|
|
197
|
+
|
|
198
|
+
&.btn-color-orange:not(:disabled) {
|
|
199
|
+
border-color: #f58423;
|
|
200
|
+
color: #f58423;
|
|
201
|
+
|
|
202
|
+
&:hover {
|
|
203
|
+
background: #fdf1e2;
|
|
204
|
+
border-color: #f9b377;
|
|
205
|
+
color: #f9b377;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
&:focus {
|
|
209
|
+
border-color: #ea730b;
|
|
210
|
+
color: #ea730b;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
&.btn-color-white:not(:disabled) {
|
|
215
|
+
border-color: #fff;
|
|
216
|
+
color: #fff;
|
|
217
|
+
|
|
218
|
+
&:hover {
|
|
219
|
+
background: #ebebeb;
|
|
220
|
+
border-color: #fafafa;
|
|
221
|
+
color: #fafafa;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
&:focus {
|
|
225
|
+
border-color: #ebebeb;
|
|
226
|
+
color: #ebebeb;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
&:disabled {
|
|
231
|
+
border-color: #9fabbc;
|
|
232
|
+
color: #9fabbc;
|
|
233
|
+
cursor: auto;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
&.btn-loading .spinner {
|
|
237
|
+
border-top-color: rgba(255, 255, 255, 0.2);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
&.btn-tertiary {
|
|
242
|
+
&.btn-color-blue:not(:disabled) {
|
|
243
|
+
color: #076b9c;
|
|
244
|
+
|
|
245
|
+
&:hover {
|
|
246
|
+
box-shadow: $box-shadow-s;
|
|
247
|
+
color: #155072;
|
|
248
|
+
background: #f4f9fc;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
&:focus {
|
|
252
|
+
color: #0d2745;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
&.btn-color-orange:not(:disabled) {
|
|
257
|
+
color: #f58423;
|
|
258
|
+
|
|
259
|
+
&:hover {
|
|
260
|
+
box-shadow: $box-shadow-s;
|
|
261
|
+
color: #f9b377;
|
|
262
|
+
background: #fdf1e2;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
&:focus {
|
|
266
|
+
color: #ea730b;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
&.btn-color-white:not(:disabled) {
|
|
271
|
+
color: #fff;
|
|
272
|
+
|
|
273
|
+
&:hover {
|
|
274
|
+
box-shadow: $box-shadow-s;
|
|
275
|
+
color: #0d2745;
|
|
276
|
+
background: #fafafa;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
&:focus {
|
|
280
|
+
color: #ebebeb;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
&:disabled {
|
|
285
|
+
color: #9fabbc;
|
|
286
|
+
cursor: auto;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
&.btn-loading .spinner {
|
|
290
|
+
border-top-color: rgba(255, 255, 255, 0.2);
|
|
291
|
+
}
|
|
163
292
|
}
|
|
164
293
|
|
|
165
294
|
&.icon-left {
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
<div class="content-tabs">
|
|
3
3
|
<div class="control-container">
|
|
4
4
|
<button
|
|
5
|
-
v-for="tab in tabs"
|
|
6
|
-
:key="
|
|
7
|
-
:class="{ active: activeTab ==
|
|
5
|
+
v-for="(tab, i) in tabs"
|
|
6
|
+
:key="i"
|
|
7
|
+
:class="{ active: activeTab == i }"
|
|
8
8
|
@click="
|
|
9
|
-
activeTab =
|
|
10
|
-
$emit('tab:changed');
|
|
9
|
+
activeTab = i;
|
|
10
|
+
$emit('tab:changed', i);
|
|
11
11
|
"
|
|
12
12
|
>
|
|
13
|
-
{{ tab
|
|
13
|
+
{{ tab }}
|
|
14
14
|
</button>
|
|
15
15
|
</div>
|
|
16
16
|
<div class="content-container">
|
|
17
17
|
<TransitionGroup name="fade">
|
|
18
18
|
<div
|
|
19
|
-
v-for="tab in tabs"
|
|
20
|
-
:key="
|
|
21
|
-
v-show="activeTab ==
|
|
22
|
-
:class="`tab-${
|
|
19
|
+
v-for="(tab, i) in tabs"
|
|
20
|
+
:key="i"
|
|
21
|
+
v-show="activeTab == i"
|
|
22
|
+
:class="`tab-${i}`"
|
|
23
23
|
>
|
|
24
|
-
<slot :name="
|
|
24
|
+
<slot :name="i"></slot>
|
|
25
25
|
</div>
|
|
26
26
|
</TransitionGroup>
|
|
27
27
|
</div>
|
|
@@ -30,13 +30,12 @@
|
|
|
30
30
|
|
|
31
31
|
<script lang="ts" setup>
|
|
32
32
|
import { ref } from "vue";
|
|
33
|
-
import { Tab } from "../../types/Tab";
|
|
34
33
|
|
|
35
34
|
const props = defineProps<{
|
|
36
|
-
|
|
37
|
-
tabs:
|
|
35
|
+
defaultTab: number;
|
|
36
|
+
tabs: string[];
|
|
38
37
|
}>();
|
|
39
|
-
const activeTab = ref(props.
|
|
38
|
+
const activeTab = ref(props.defaultTab);
|
|
40
39
|
|
|
41
40
|
defineEmits(["tab:changed"]);
|
|
42
41
|
defineExpose({ activeTab });
|
|
@@ -55,7 +54,7 @@ defineExpose({ activeTab });
|
|
|
55
54
|
outline: none;
|
|
56
55
|
background: none;
|
|
57
56
|
font-weight: 700;
|
|
58
|
-
padding: 0 5px
|
|
57
|
+
padding: 0 5px 7px;
|
|
59
58
|
font-size: 16px;
|
|
60
59
|
line-height: 19px;
|
|
61
60
|
text-align: center;
|
|
@@ -66,6 +65,7 @@ defineExpose({ activeTab });
|
|
|
66
65
|
|
|
67
66
|
&.active {
|
|
68
67
|
color: #076b9c;
|
|
68
|
+
padding: 0 5px 5px;
|
|
69
69
|
border-bottom: 3px solid #076b9c;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<Transition name="fade">
|
|
4
4
|
<div v-show="active" class="modal-backdrop">
|
|
5
5
|
<div class="modal-overlay" @click.self="closeModal">
|
|
6
|
-
<div class="modal-container"
|
|
6
|
+
<div class="modal-container" ref="modalContainer">
|
|
7
7
|
<button
|
|
8
8
|
type="button"
|
|
9
9
|
class="btn-close"
|
|
@@ -31,9 +31,8 @@
|
|
|
31
31
|
<script lang="ts" setup>
|
|
32
32
|
import { ref, watch } from "vue";
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
defineProps<{
|
|
35
35
|
title?: string;
|
|
36
|
-
class?: string;
|
|
37
36
|
}>();
|
|
38
37
|
|
|
39
38
|
const active = ref(false);
|
|
@@ -65,6 +64,10 @@ const closeModal = () => {
|
|
|
65
64
|
|
|
66
65
|
const toggleModal = () => {
|
|
67
66
|
active.value = !active.value;
|
|
67
|
+
|
|
68
|
+
if (!active.value) {
|
|
69
|
+
emit("close");
|
|
70
|
+
}
|
|
68
71
|
};
|
|
69
72
|
|
|
70
73
|
defineExpose({ active, openModal, closeModal, toggleModal });
|