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.
@@ -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
- <div
14
- class="content-container macro-steps"
15
- v-if="activeViewport.lg && macroStepList"
16
- >
17
- <JourneyMacroSteps :stepList="macroStepList" />
18
- </div>
19
- <div class="content-container" v-else-if="$slots.content">
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
- <div class="content-container macro-steps">
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: 20px;
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: 18px;
122
- line-height: 22px;
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: 16px;
155
- line-height: 16px;
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
- <span :class="step.icon"></span>
9
- <span class="step-label">{{ step.label }}</span>
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
- padding: 0 10px;
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-label {
39
- margin-left: 10px;
57
+ .step-description {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 10px;
40
61
  font-size: 14px;
41
62
  line-height: 17px;
42
- text-transform: uppercase;
43
- display: none;
63
+ transition: all 0.2s ease-in-out;
44
64
 
45
- @media screen and (min-width: 1024px) {
46
- font-size: 14px;
47
- line-height: 17px;
48
- }
65
+ .step-label {
66
+ text-transform: uppercase;
67
+ display: none;
49
68
 
50
- @media screen and (min-width: 1200px) {
51
- display: block;
69
+ @media screen and (min-width: 1200px) {
70
+ display: block;
71
+ }
52
72
  }
53
73
  }
54
74
 
55
- .m-cgg-icon--chevron-right {
56
- margin-left: 10px;
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 {
@@ -69,6 +69,7 @@ const emit = defineEmits(["update:modelValue"]);
69
69
  .radio-icon {
70
70
  width: 20px;
71
71
  height: 20px;
72
+ flex-shrink: 0;
72
73
  border: 1px solid #64748b;
73
74
  border-radius: 50%;
74
75
  }
@@ -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: 18px;
69
- line-height: 20px;
70
- padding: 6px 12px;
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: 20px;
77
- padding: 10px 20px;
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: 20px;
83
- line-height: 20px;
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-color: #076b9c;
121
+ background: #076b9c;
91
122
  border-color: #076b9c;
92
123
  color: #fff;
93
124
 
94
125
  &:hover {
95
- background-color: #0d2745;
126
+ background: #0d2745;
96
127
  border-color: #0d2745;
97
128
  }
98
129
 
99
130
  &:focus {
100
- background-color: #155072;
131
+ background: #155072;
101
132
  border-color: #155072;
102
133
  }
103
134
  }
104
135
 
105
136
  &.btn-color-orange:not(:disabled) {
106
- background-color: #f58423;
137
+ background: #f58423;
107
138
  border-color: #f58423;
108
139
  color: #fff;
109
140
 
110
141
  &:hover {
111
- background-color: #ea730b;
142
+ background: #ea730b;
112
143
  border-color: #ea730b;
113
144
  }
114
145
 
115
146
  &:focus {
116
- background-color: #f9b377;
147
+ background: #f9b377;
117
148
  border-color: #f9b377;
118
149
  }
119
150
  }
120
151
 
121
152
  &.btn-color-white:not(:disabled) {
122
- background-color: #fff;
153
+ background: #fff;
123
154
  border-color: #fff;
124
155
  color: #0d2745;
125
156
 
126
157
  &:hover {
127
- background-color: #ebebeb;
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-color: #f4f9fc;
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="tab.control"
7
- :class="{ active: activeTab == tab.control }"
5
+ v-for="(tab, i) in tabs"
6
+ :key="i"
7
+ :class="{ active: activeTab == i }"
8
8
  @click="
9
- activeTab = tab.control;
10
- $emit('tab:changed');
9
+ activeTab = i;
10
+ $emit('tab:changed', i);
11
11
  "
12
12
  >
13
- {{ tab.label }}
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="tab.control"
21
- v-show="activeTab == tab.control"
22
- :class="`tab-${tab.control}`"
19
+ v-for="(tab, i) in tabs"
20
+ :key="i"
21
+ v-show="activeTab == i"
22
+ :class="`tab-${i}`"
23
23
  >
24
- <slot :name="tab.control"></slot>
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
- default: string;
37
- tabs: Tab[];
35
+ defaultTab: number;
36
+ tabs: string[];
38
37
  }>();
39
- const activeTab = ref(props.default);
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 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
 
@@ -21,7 +21,7 @@ defineProps<{
21
21
  width: 80px;
22
22
  height: 80px;
23
23
  border: 7px solid #b5e187;
24
- border-top: 7px solid transparent;
24
+ border-top: 7px solid rgba(255, 255, 255, 0.2);
25
25
  border-radius: 50%;
26
26
  animation: spin 1s infinite;
27
27
  animation-timing-function: linear;
@@ -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" :class="class" ref="modalContainer">
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
- const props = defineProps<{
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 });
@@ -0,0 +1,2 @@
1
+ import "./assets/main.scss";
2
+ import "./assets/iconia/style.scss";