cja-phoenix 0.7.13 → 0.7.15

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,10 +1,10 @@
1
1
  @font-face {
2
2
  font-family: 'CGG-icomoon';
3
- src: url('fonts/CGG-icomoon.eot?slsz2');
4
- src: url('fonts/CGG-icomoon.eot?slsz2#iefix') format('embedded-opentype'),
5
- url('fonts/CGG-icomoon.ttf?slsz2') format('truetype'),
6
- url('fonts/CGG-icomoon.woff?slsz2') format('woff'),
7
- url('fonts/CGG-icomoon.svg?slsz2#CGG-icomoon') format('svg');
3
+ src: url('fonts/CGG-icomoon.eot?o80s4a');
4
+ src: url('fonts/CGG-icomoon.eot?o80s4a#iefix') format('embedded-opentype'),
5
+ url('fonts/CGG-icomoon.ttf?o80s4a') format('truetype'),
6
+ url('fonts/CGG-icomoon.woff?o80s4a') format('woff'),
7
+ url('fonts/CGG-icomoon.svg?o80s4a#CGG-icomoon') format('svg');
8
8
  font-weight: normal;
9
9
  font-style: normal;
10
10
  font-display: block;
@@ -25,6 +25,9 @@
25
25
  -moz-osx-font-smoothing: grayscale;
26
26
  }
27
27
 
28
+ .m-cgg-icon--home:before {
29
+ content: "\ea2b";
30
+ }
28
31
  .m-cgg-icon--categories:before {
29
32
  content: "\ea39";
30
33
  }
@@ -70,9 +73,6 @@
70
73
  .m-cgg-icon--affiliates-dashboard:before {
71
74
  content: "\ea2a";
72
75
  }
73
- .m-cgg-icon--affiliates-home:before {
74
- content: "\ea2b";
75
- }
76
76
  .m-cgg-icon--affiliates-settings:before {
77
77
  content: "\ea2c";
78
78
  }
@@ -459,9 +459,6 @@
459
459
  .m-cgg-icon--arrow-right:before {
460
460
  content: "\e604";
461
461
  }
462
- .m-cgg-icon--home:before {
463
- content: "\e605";
464
- }
465
462
  .m-cgg-icon--cross:before {
466
463
  content: "\e606";
467
464
  }
@@ -2,11 +2,11 @@
2
2
 
3
3
  @font-face {
4
4
  font-family: '#{$icomoon-font-family}';
5
- src: url('#{$icomoon-font-path}/#{$icomoon-font-family}.eot?slsz2');
6
- src: url('#{$icomoon-font-path}/#{$icomoon-font-family}.eot?slsz2#iefix') format('embedded-opentype'),
7
- url('#{$icomoon-font-path}/#{$icomoon-font-family}.ttf?slsz2') format('truetype'),
8
- url('#{$icomoon-font-path}/#{$icomoon-font-family}.woff?slsz2') format('woff'),
9
- url('#{$icomoon-font-path}/#{$icomoon-font-family}.svg?slsz2##{$icomoon-font-family}') format('svg');
5
+ src: url('#{$icomoon-font-path}/#{$icomoon-font-family}.eot?o80s4a');
6
+ src: url('#{$icomoon-font-path}/#{$icomoon-font-family}.eot?o80s4a#iefix') format('embedded-opentype'),
7
+ url('#{$icomoon-font-path}/#{$icomoon-font-family}.ttf?o80s4a') format('truetype'),
8
+ url('#{$icomoon-font-path}/#{$icomoon-font-family}.woff?o80s4a') format('woff'),
9
+ url('#{$icomoon-font-path}/#{$icomoon-font-family}.svg?o80s4a##{$icomoon-font-family}') format('svg');
10
10
  font-weight: normal;
11
11
  font-style: normal;
12
12
  font-display: block;
@@ -27,6 +27,11 @@
27
27
  -moz-osx-font-smoothing: grayscale;
28
28
  }
29
29
 
30
+ .m-cgg-icon--home {
31
+ &:before {
32
+ content: $m-cgg-icon--home;
33
+ }
34
+ }
30
35
  .m-cgg-icon--categories {
31
36
  &:before {
32
37
  content: $m-cgg-icon--categories;
@@ -102,11 +107,6 @@
102
107
  content: $m-cgg-icon--affiliates-dashboard;
103
108
  }
104
109
  }
105
- .m-cgg-icon--affiliates-home {
106
- &:before {
107
- content: $m-cgg-icon--affiliates-home;
108
- }
109
- }
110
110
  .m-cgg-icon--affiliates-settings {
111
111
  &:before {
112
112
  content: $m-cgg-icon--affiliates-settings;
@@ -743,11 +743,6 @@
743
743
  content: $m-cgg-icon--arrow-right;
744
744
  }
745
745
  }
746
- .m-cgg-icon--home {
747
- &:before {
748
- content: $m-cgg-icon--home;
749
- }
750
- }
751
746
  .m-cgg-icon--cross {
752
747
  &:before {
753
748
  content: $m-cgg-icon--cross;
@@ -1,6 +1,7 @@
1
1
  $icomoon-font-family: "CGG-icomoon" !default;
2
2
  $icomoon-font-path: "fonts" !default;
3
3
 
4
+ $m-cgg-icon--home: "\ea2b";
4
5
  $m-cgg-icon--categories: "\ea39";
5
6
  $m-cgg-icon--facebook-2: "\ea33";
6
7
  $m-cgg-icon--linkedin-2: "\ea34";
@@ -16,7 +17,6 @@ $m-cgg-icon--macro-step-results: "\ea2f";
16
17
  $m-cgg-icon--macro-step-funnel: "\ea30";
17
18
  $m-cgg-icon--affiliates-add: "\e900";
18
19
  $m-cgg-icon--affiliates-dashboard: "\ea2a";
19
- $m-cgg-icon--affiliates-home: "\ea2b";
20
20
  $m-cgg-icon--affiliates-settings: "\ea2c";
21
21
  $m-cgg-icon--tiktok: "\ea27";
22
22
  $m-cgg-icon--list-mode: "\ea22";
@@ -142,7 +142,6 @@ $m-cgg-icon--arrow-up: "\e601";
142
142
  $m-cgg-icon--arrow-left: "\e602";
143
143
  $m-cgg-icon--arrow-down: "\e603";
144
144
  $m-cgg-icon--arrow-right: "\e604";
145
- $m-cgg-icon--home: "\e605";
146
145
  $m-cgg-icon--cross: "\e606";
147
146
  $m-cgg-icon--signal: "\e607";
148
147
  $m-cgg-icon--gift: "\e608";
@@ -1,3 +1,5 @@
1
+ @use "sass:map";
2
+
1
3
  $extra-dark-blue: #0d2745;
2
4
  $dark-blue: #155072;
3
5
  $main-blue: #076b9c;
@@ -51,3 +53,37 @@ $gradient-en: linear-gradient(75deg, #fffbef, #fff);
51
53
  $gradient-bb: linear-gradient(75deg, #fff7f1, #fff);
52
54
  $gradient-cc: linear-gradient(75deg, #fff4ff, #fff);
53
55
  $gradient-cja-1: linear-gradient(90deg, #b5e187 2.5%, #076b9c 100%);
56
+
57
+ $colors: (
58
+ "extra-dark-blue": $extra-dark-blue,
59
+ "dark-blue": $dark-blue,
60
+ "main-blue": $main-blue,
61
+ "medium-blue": $medium-blue,
62
+ "bright-blue": $bright-blue,
63
+ "light-blue": $light-blue,
64
+ "extra-light-blue": $extra-light-blue,
65
+ "extra-dark-green": $extra-dark-green,
66
+ "dark-green": $dark-green,
67
+ "main-green": $main-green,
68
+ "bright-green": $bright-green,
69
+ "light-green": $light-green,
70
+ "extra-light-green": $extra-light-green,
71
+ "extra-dark-orange": $extra-dark-orange,
72
+ "dark-orange": $dark-orange,
73
+ "main-orange": $main-orange,
74
+ "bright-orange": $bright-orange,
75
+ "light-orange": $light-orange,
76
+ "main-yellow": $main-yellow,
77
+ "main-purple": $main-purple,
78
+ "medium-purple": $medium-purple,
79
+ "bright-purple": $bright-purple,
80
+ );
81
+
82
+ $gradients: (
83
+ "hl": $gradient-hl,
84
+ "pl": $gradient-pl,
85
+ "in": $gradient-in,
86
+ "en": $gradient-en,
87
+ "bb": $gradient-bb,
88
+ "cc": $gradient-cc,
89
+ );
@@ -11,10 +11,11 @@
11
11
  <input
12
12
  :class="[`size-${size}`]"
13
13
  type="text"
14
+ :value="processedValue"
14
15
  :id="id"
15
- :placeholder="placeholder && placeholder"
16
+ :placeholder="placeholder"
16
17
  :disabled="disabled"
17
- ref="inputRef"
18
+ @input="updateValue"
18
19
  />
19
20
 
20
21
  <span class="input-currency">
@@ -28,11 +29,11 @@
28
29
 
29
30
  <script lang="ts" setup>
30
31
  import { useField } from "vee-validate";
31
- import { InputHTMLAttributes, watch } from "vue";
32
- import { CurrencyDisplay, useCurrencyInput } from "vue-currency-input";
32
+ import { InputHTMLAttributes } from "vue";
33
33
  import InputContainer from "./structure/InputContainer.vue";
34
34
  import InputTitle from "./structure/InputTitle.vue";
35
35
  import InputError from "./structure/InputError.vue";
36
+ import { computed } from "vue";
36
37
 
37
38
  const props = withDefaults(
38
39
  defineProps<{
@@ -56,29 +57,28 @@ const props = withDefaults(
56
57
  }
57
58
  );
58
59
 
59
- const { inputRef, setValue: setCurrency } = useCurrencyInput({
60
- currency: "EUR",
61
- locale: "de-DE",
62
- hideCurrencySymbolOnFocus: false,
63
- hideGroupingSeparatorOnFocus: false,
64
- currencyDisplay: CurrencyDisplay.hidden,
65
- });
66
-
67
- const { errorMessage, meta, validate, setValue } = useField(
60
+ const { value, errorMessage, meta, validate, handleChange } = useField(
68
61
  "input",
69
62
  props.validation,
70
63
  { initialValue: props.modelValue }
71
64
  );
72
65
 
73
- watch(
74
- () => props.modelValue,
75
- (newVal) => {
76
- setValue(newVal);
77
- setCurrency(newVal);
78
- }
66
+ const processedValue = computed(() =>
67
+ Intl.NumberFormat("de-DE", { maximumFractionDigits: 2 }).format(
68
+ value.value || 0
69
+ )
79
70
  );
80
71
 
81
- const emit = defineEmits(["update:modelValue", "change"]);
72
+ const updateValue = (e: Event) => {
73
+ const parsedValue = parseFloat(
74
+ (e.target as HTMLInputElement).value.replaceAll(".", "").replace(",", ".")
75
+ );
76
+
77
+ handleChange(parsedValue);
78
+ emit("update:modelValue", parsedValue);
79
+ };
80
+
81
+ const emit = defineEmits(["update:modelValue"]);
82
82
 
83
83
  defineExpose({ errorMessage, meta, validate });
84
84
  </script>
@@ -91,15 +91,33 @@ defineExpose({ errorMessage, meta, validate });
91
91
  @include input-template;
92
92
  padding-right: 24px;
93
93
 
94
- &:focus {
94
+ &:disabled {
95
95
  + .input-currency {
96
- color: $extra-dark-blue;
96
+ color: $input-disabled-color;
97
97
  }
98
98
  }
99
99
 
100
- &:disabled {
100
+ &.size-sm {
101
+ padding-right: $sm-padding-h * 2 + 10;
102
+
101
103
  + .input-currency {
102
- color: $input-disabled-color;
104
+ right: $sm-padding-h;
105
+ }
106
+ }
107
+
108
+ &.size-md {
109
+ padding-right: $md-padding-h * 2 + 10;
110
+
111
+ + .input-currency {
112
+ right: $md-padding-h;
113
+ }
114
+ }
115
+
116
+ &.size-lg {
117
+ padding-right: $lg-padding-h * 2 + 10;
118
+
119
+ + .input-currency {
120
+ right: $lg-padding-h;
103
121
  }
104
122
  }
105
123
  }
@@ -114,11 +132,8 @@ defineExpose({ errorMessage, meta, validate });
114
132
  position: absolute;
115
133
  top: 50%;
116
134
  transform: translateY(-50%);
117
- right: 8px;
118
- line-height: 16px;
119
- font-size: 16px;
120
- color: $blue-grey;
121
- transition: color 0.1s ease-in;
135
+ line-height: 12px;
136
+ font-size: 12px;
122
137
  }
123
138
  }
124
139
  </style>
@@ -0,0 +1,176 @@
1
+ <template>
2
+ <InputContainer v-bind="{ layout }">
3
+ <InputTitle v-bind="{ title, tooltip, size, disabled }" v-if="title" />
4
+
5
+ <div
6
+ class="input-wrapper"
7
+ :class="{
8
+ error: errorMessage,
9
+ }"
10
+ :style="`--slider-progress-value:${sliderProgressValue}`"
11
+ >
12
+ <input
13
+ ref="inputEl"
14
+ type="range"
15
+ :min="min"
16
+ :max="max"
17
+ :step="step"
18
+ :value="modelValue ? modelValue : 0"
19
+ @input="
20
+ emit(
21
+ 'update:modelValue',
22
+ (<HTMLInputElement>$event.target).valueAsNumber
23
+ )
24
+ "
25
+ />
26
+ </div>
27
+
28
+ <InputError :error="errorMessage" v-if="errorMessage && errorDisplay" />
29
+ </InputContainer>
30
+ </template>
31
+
32
+ <script lang="ts" setup>
33
+ import { useField } from "vee-validate";
34
+ import { InputHTMLAttributes, ref } from "vue";
35
+ import InputTitle from "./structure/InputTitle.vue";
36
+ import InputError from "./structure/InputError.vue";
37
+ import InputContainer from "./structure/InputContainer.vue";
38
+ import { computed } from "vue";
39
+
40
+ const props = withDefaults(
41
+ defineProps<{
42
+ title?: string;
43
+ tooltip?: string;
44
+ layout?: "vertical" | "horizontal";
45
+ size?: "sm" | "md" | "lg";
46
+ validation?: any;
47
+ errorDisplay?: boolean;
48
+ modelValue: InputHTMLAttributes["value"];
49
+ disabled?: InputHTMLAttributes["disabled"];
50
+ min: number;
51
+ max: number;
52
+ step: number;
53
+ }>(),
54
+ {
55
+ layout: "vertical",
56
+ size: "md",
57
+ type: "text",
58
+ errorDisplay: true,
59
+ }
60
+ );
61
+
62
+ const { value, errorMessage, meta, validate } = useField(
63
+ "input",
64
+ props.validation,
65
+ { initialValue: props.modelValue }
66
+ );
67
+
68
+ defineExpose({ errorMessage, meta, validate });
69
+
70
+ const emit = defineEmits(["update:modelValue"]);
71
+
72
+ const inputEl = ref();
73
+
74
+ const sliderProgressValue = computed(
75
+ () =>
76
+ (Math.round((props.modelValue / props.step) * props.step) - props.min) /
77
+ (props.max - props.min)
78
+ );
79
+ </script>
80
+
81
+ <style lang="scss" scoped>
82
+ $sliderHeight: 12px;
83
+ $sliderThumb: 20px;
84
+ $sliderProgress: calc(
85
+ 0.5 * #{$sliderThumb} + var(--slider-progress-value) * (100% - #{$sliderThumb})
86
+ );
87
+
88
+ .input-wrapper {
89
+ input {
90
+ display: block;
91
+ margin: 4px 0;
92
+ width: 100%;
93
+ appearance: none;
94
+ cursor: pointer;
95
+
96
+ &:focus {
97
+ outline: none;
98
+ }
99
+
100
+ &::-webkit-slider-thumb {
101
+ -webkit-appearance: none;
102
+ width: $sliderThumb;
103
+ height: $sliderThumb;
104
+ border-radius: 50%;
105
+ background: #77aa43;
106
+ border: none;
107
+ margin-top: calc($sliderHeight * 0.5 - $sliderThumb * 0.5);
108
+ cursor: grab;
109
+ }
110
+
111
+ &::-webkit-slider-runnable-track {
112
+ height: $sliderHeight;
113
+ border: none;
114
+ border-radius: $sliderHeight;
115
+ box-shadow: inset 0px 0px 10px rgba(129, 129, 129, 0.25);
116
+ background: linear-gradient(#b5e187, #b5e187) 0 / $sliderProgress 100%
117
+ no-repeat,
118
+ #eef4e8;
119
+ }
120
+
121
+ &::-moz-range-thumb {
122
+ width: $sliderThumb;
123
+ height: $sliderThumb;
124
+ border-radius: 50%;
125
+ background: #77aa43;
126
+ border: none;
127
+ cursor: grab;
128
+ }
129
+
130
+ &::-moz-range-track {
131
+ height: $sliderHeight;
132
+ border: none;
133
+ border-radius: $sliderHeight;
134
+ box-shadow: none;
135
+ background: linear-gradient(#b5e187, #b5e187) 0 / $sliderProgress 100%
136
+ no-repeat,
137
+ #eef4e8;
138
+ }
139
+
140
+ &::-ms-fill-upper {
141
+ background: transparent;
142
+ border-color: transparent;
143
+ }
144
+
145
+ &::-ms-fill-lower {
146
+ background: transparent;
147
+ border-color: transparent;
148
+ height: $sliderHeight;
149
+ border-radius: $sliderHeight 0 0 $sliderHeight;
150
+ background: #b5e187;
151
+ border: none;
152
+ border-right-width: 0;
153
+ }
154
+
155
+ &::-ms-thumb {
156
+ width: $sliderThumb;
157
+ height: $sliderThumb;
158
+ border-radius: 50%;
159
+ background: #77aa43;
160
+ border: none;
161
+ margin-top: 0;
162
+ box-sizing: border-box;
163
+ cursor: grab;
164
+ }
165
+
166
+ &::-ms-track {
167
+ height: $sliderHeight;
168
+ border-radius: $sliderHeight;
169
+ background: #eef4e8;
170
+ border: none;
171
+ box-shadow: none;
172
+ box-sizing: border-box;
173
+ }
174
+ }
175
+ }
176
+ </style>
@@ -103,12 +103,6 @@ const emit = defineEmits(["update:modelValue"]);
103
103
  input {
104
104
  @include input-template;
105
105
 
106
- &:focus {
107
- + .input-suffix {
108
- color: $extra-dark-blue;
109
- }
110
- }
111
-
112
106
  &[type="number"] {
113
107
  /* Firefox */
114
108
  -moz-appearance: textfield;
@@ -120,6 +114,24 @@ const emit = defineEmits(["update:modelValue"]);
120
114
  margin: 0;
121
115
  }
122
116
  }
117
+
118
+ &.size-sm {
119
+ + .input-suffix {
120
+ right: $sm-padding-h;
121
+ }
122
+ }
123
+
124
+ &.size-md {
125
+ + .input-suffix {
126
+ right: $md-padding-h;
127
+ }
128
+ }
129
+
130
+ &.size-lg {
131
+ + .input-suffix {
132
+ right: $lg-padding-h;
133
+ }
134
+ }
123
135
  }
124
136
 
125
137
  &.error {
@@ -132,11 +144,8 @@ const emit = defineEmits(["update:modelValue"]);
132
144
  position: absolute;
133
145
  top: 50%;
134
146
  transform: translateY(-50%);
135
- right: 8px;
136
- line-height: 11px;
137
- font-size: 11px;
138
- color: $blue-grey;
139
- transition: color 0.1s ease-in;
147
+ line-height: 12px;
148
+ font-size: 12px;
140
149
  }
141
150
  }
142
151
  </style>
@@ -19,8 +19,10 @@ import SelectInput from "./forms/SelectInput.vue";
19
19
  import FileInput from "./forms/FileInput.vue";
20
20
  import NumberInput from "./forms/NumberInput.vue";
21
21
  import ToggleInput from "./forms/ToggleInput.vue";
22
+ import SliderInput from "./forms/SliderInput.vue";
22
23
  import CurrencyInput from "./forms/CurrencyInput.vue";
23
24
  import SelectionTiles from "./forms/SelectionTiles.vue";
25
+ import InputError from "./forms/structure/InputError.vue";
24
26
 
25
27
  import JourneyMacroSteps from "./composite/JourneyMacroSteps.vue";
26
28
  import FunnelLayout from "./composite/FunnelLayout.vue";
@@ -48,10 +50,12 @@ export {
48
50
  SelectInput,
49
51
  CurrencyInput,
50
52
  SelectionTiles,
53
+ InputError,
51
54
  LoadingSpinner,
52
55
  Scaffold,
53
56
  ProductDetails,
54
57
  ToggleInput,
58
+ SliderInput,
55
59
  FileInput,
56
60
  ContentTabs,
57
61
  CollapseContainer,