cja-phoenix 1.2.39 → 1.2.41

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 (184) hide show
  1. package/dist/module.d.mts +6 -2
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +29 -16
  4. package/dist/runtime/assets/iconia/fonts/CGG-icomoon.svg +94 -0
  5. package/dist/runtime/assets/iconia/fonts/CGG-icomoon.ttf +0 -0
  6. package/dist/runtime/assets/iconia/fonts/CGG-icomoon.woff +0 -0
  7. package/dist/runtime/assets/iconia/selection.json +1 -0
  8. package/dist/runtime/assets/iconia/style.css +281 -0
  9. package/dist/runtime/assets/scss/main.scss +6 -0
  10. package/dist/runtime/assets/scss/mixins/_funnel.scss +15 -0
  11. package/dist/runtime/assets/scss/mixins/_index.scss +46 -0
  12. package/dist/runtime/assets/scss/mixins/_media-queries.scss +109 -0
  13. package/dist/runtime/assets/scss/mixins/_results.scss +235 -0
  14. package/dist/runtime/assets/scss/tippy.scss +31 -0
  15. package/dist/runtime/assets/scss/variables/_breakpoints.scss +18 -0
  16. package/dist/runtime/assets/scss/variables/_colors.scss +100 -0
  17. package/dist/runtime/assets/scss/variables/_forms.scss +121 -0
  18. package/dist/runtime/assets/scss/variables/_grid.scss +12 -0
  19. package/dist/runtime/assets/scss/variables/_index.scss +6 -0
  20. package/dist/runtime/assets/scss/variables/_shadows.scss +7 -0
  21. package/dist/runtime/assets/scss/variables/_z-index.scss +6 -0
  22. package/dist/runtime/components/CjaButton.d.vue.ts +33 -0
  23. package/dist/runtime/components/CjaButton.vue +437 -0
  24. package/dist/runtime/components/CjaButton.vue.d.ts +33 -0
  25. package/dist/runtime/components/CollapseContainer.d.vue.ts +35 -0
  26. package/dist/runtime/components/CollapseContainer.vue +112 -0
  27. package/dist/runtime/components/CollapseContainer.vue.d.ts +35 -0
  28. package/dist/runtime/components/ContentTabs.d.vue.ts +23 -0
  29. package/dist/runtime/components/ContentTabs.vue +103 -0
  30. package/dist/runtime/components/ContentTabs.vue.d.ts +23 -0
  31. package/dist/runtime/components/Drawer.d.vue.ts +52 -0
  32. package/dist/runtime/components/Drawer.vue +169 -0
  33. package/dist/runtime/components/Drawer.vue.d.ts +52 -0
  34. package/dist/runtime/components/FixedContainer.d.vue.ts +37 -0
  35. package/dist/runtime/components/FixedContainer.vue +95 -0
  36. package/dist/runtime/components/FixedContainer.vue.d.ts +37 -0
  37. package/dist/runtime/components/GridContainer.d.vue.ts +13 -0
  38. package/dist/runtime/components/GridContainer.vue +37 -0
  39. package/dist/runtime/components/GridContainer.vue.d.ts +13 -0
  40. package/dist/runtime/components/GridItem.d.vue.ts +29 -0
  41. package/dist/runtime/components/GridItem.vue +93 -0
  42. package/dist/runtime/components/GridItem.vue.d.ts +29 -0
  43. package/dist/runtime/components/InfoMessage.d.vue.ts +28 -0
  44. package/dist/runtime/components/InfoMessage.vue +141 -0
  45. package/dist/runtime/components/InfoMessage.vue.d.ts +28 -0
  46. package/dist/runtime/components/LoadingSpinner.d.vue.ts +10 -0
  47. package/dist/runtime/components/LoadingSpinner.vue +39 -0
  48. package/dist/runtime/components/LoadingSpinner.vue.d.ts +10 -0
  49. package/dist/runtime/components/Modal.d.vue.ts +39 -0
  50. package/dist/runtime/components/Modal.vue +195 -0
  51. package/dist/runtime/components/Modal.vue.d.ts +39 -0
  52. package/dist/runtime/components/Scaffold.d.vue.ts +13 -0
  53. package/dist/runtime/components/Scaffold.vue +3 -0
  54. package/dist/runtime/components/Scaffold.vue.d.ts +13 -0
  55. package/dist/runtime/components/StickyContainer.d.vue.ts +21 -0
  56. package/dist/runtime/components/StickyContainer.vue +57 -0
  57. package/dist/runtime/components/StickyContainer.vue.d.ts +21 -0
  58. package/dist/runtime/components/form/CheckboxInput.d.vue.ts +42 -0
  59. package/dist/runtime/components/form/CheckboxInput.vue +163 -0
  60. package/dist/runtime/components/form/CheckboxInput.vue.d.ts +42 -0
  61. package/dist/runtime/components/form/CheckboxInputList.d.vue.ts +37 -0
  62. package/dist/runtime/components/form/CheckboxInputList.vue +84 -0
  63. package/dist/runtime/components/form/CheckboxInputList.vue.d.ts +37 -0
  64. package/dist/runtime/components/form/CurrencyInput.d.vue.ts +37 -0
  65. package/dist/runtime/components/form/CurrencyInput.vue +134 -0
  66. package/dist/runtime/components/form/CurrencyInput.vue.d.ts +37 -0
  67. package/dist/runtime/components/form/DateInput.d.vue.ts +40 -0
  68. package/dist/runtime/components/form/DateInput.vue +325 -0
  69. package/dist/runtime/components/form/DateInput.vue.d.ts +40 -0
  70. package/dist/runtime/components/form/FileInput.d.vue.ts +46 -0
  71. package/dist/runtime/components/form/FileInput.vue +202 -0
  72. package/dist/runtime/components/form/FileInput.vue.d.ts +46 -0
  73. package/dist/runtime/components/form/NumberInput.d.vue.ts +41 -0
  74. package/dist/runtime/components/form/NumberInput.vue +162 -0
  75. package/dist/runtime/components/form/NumberInput.vue.d.ts +41 -0
  76. package/dist/runtime/components/form/PhoneInput.d.vue.ts +44 -0
  77. package/dist/runtime/components/form/PhoneInput.vue +143 -0
  78. package/dist/runtime/components/form/PhoneInput.vue.d.ts +44 -0
  79. package/dist/runtime/components/form/RadioInput.d.vue.ts +42 -0
  80. package/dist/runtime/components/form/RadioInput.vue +181 -0
  81. package/dist/runtime/components/form/RadioInput.vue.d.ts +42 -0
  82. package/dist/runtime/components/form/RadioInputList.d.vue.ts +57 -0
  83. package/dist/runtime/components/form/RadioInputList.vue +130 -0
  84. package/dist/runtime/components/form/RadioInputList.vue.d.ts +57 -0
  85. package/dist/runtime/components/form/SelectInput.d.vue.ts +46 -0
  86. package/dist/runtime/components/form/SelectInput.vue +362 -0
  87. package/dist/runtime/components/form/SelectInput.vue.d.ts +46 -0
  88. package/dist/runtime/components/form/SelectionTiles.d.vue.ts +44 -0
  89. package/dist/runtime/components/form/SelectionTiles.vue +329 -0
  90. package/dist/runtime/components/form/SelectionTiles.vue.d.ts +44 -0
  91. package/dist/runtime/components/form/SliderInput.d.vue.ts +51 -0
  92. package/dist/runtime/components/form/SliderInput.vue +175 -0
  93. package/dist/runtime/components/form/SliderInput.vue.d.ts +51 -0
  94. package/dist/runtime/components/form/TextInput.d.vue.ts +56 -0
  95. package/dist/runtime/components/form/TextInput.vue +227 -0
  96. package/dist/runtime/components/form/TextInput.vue.d.ts +56 -0
  97. package/dist/runtime/components/form/TextareaInput.d.vue.ts +37 -0
  98. package/dist/runtime/components/form/TextareaInput.vue +76 -0
  99. package/dist/runtime/components/form/TextareaInput.vue.d.ts +37 -0
  100. package/dist/runtime/components/form/TileCheckboxInput.d.vue.ts +40 -0
  101. package/dist/runtime/components/form/TileCheckboxInput.vue +108 -0
  102. package/dist/runtime/components/form/TileCheckboxInput.vue.d.ts +40 -0
  103. package/dist/runtime/components/form/ToggleInput.d.vue.ts +43 -0
  104. package/dist/runtime/components/form/ToggleInput.vue +119 -0
  105. package/dist/runtime/components/form/ToggleInput.vue.d.ts +43 -0
  106. package/dist/runtime/components/form/structure/Container.d.vue.ts +16 -0
  107. package/dist/runtime/components/form/structure/Container.vue +31 -0
  108. package/dist/runtime/components/form/structure/Container.vue.d.ts +16 -0
  109. package/dist/runtime/components/form/structure/Description.d.vue.ts +9 -0
  110. package/dist/runtime/components/form/structure/Description.vue +26 -0
  111. package/dist/runtime/components/form/structure/Description.vue.d.ts +9 -0
  112. package/dist/runtime/components/form/structure/Error.d.vue.ts +9 -0
  113. package/dist/runtime/components/form/structure/Error.vue +23 -0
  114. package/dist/runtime/components/form/structure/Error.vue.d.ts +9 -0
  115. package/dist/runtime/components/form/structure/Title.d.vue.ts +12 -0
  116. package/dist/runtime/components/form/structure/Title.vue +43 -0
  117. package/dist/runtime/components/form/structure/Title.vue.d.ts +12 -0
  118. package/dist/runtime/components/funnel/Header.d.vue.ts +18 -0
  119. package/dist/runtime/components/funnel/Header.vue +62 -0
  120. package/dist/runtime/components/funnel/Header.vue.d.ts +18 -0
  121. package/dist/runtime/composables/useCjaGtm.d.ts +19 -0
  122. package/dist/runtime/composables/useCjaGtm.js +164 -0
  123. package/dist/runtime/composables/useFunnelConfig.d.ts +11 -0
  124. package/dist/runtime/composables/useFunnelConfig.js +51 -0
  125. package/dist/runtime/composables/useFunnelSummary.d.ts +14 -0
  126. package/dist/runtime/composables/useFunnelSummary.js +16 -0
  127. package/dist/runtime/composables/useHeaderHeight.d.ts +3 -0
  128. package/dist/runtime/composables/useHeaderHeight.js +24 -0
  129. package/dist/runtime/composables/useJourneyConfig.d.ts +11 -0
  130. package/dist/runtime/composables/useJourneyConfig.js +13 -0
  131. package/dist/runtime/composables/useValidateForm.d.ts +11 -0
  132. package/dist/runtime/composables/useValidateForm.js +33 -0
  133. package/dist/runtime/data/dialCodes.d.ts +7 -0
  134. package/dist/runtime/data/dialCodes.js +1466 -0
  135. package/dist/runtime/data/phoneDigits.d.ts +2 -0
  136. package/dist/runtime/data/phoneDigits.js +231 -0
  137. package/dist/runtime/plugins/tippy.d.ts +4 -0
  138. package/dist/runtime/plugins/tippy.js +12 -0
  139. package/dist/runtime/plugins/v-calendar.d.ts +3 -0
  140. package/dist/runtime/plugins/v-calendar.js +6 -0
  141. package/dist/runtime/server/tsconfig.json +3 -0
  142. package/dist/runtime/types/Form.d.ts +34 -0
  143. package/dist/runtime/types/Form.js +20 -0
  144. package/dist/runtime/types/Grid.d.ts +4 -0
  145. package/dist/runtime/types/Grid.js +0 -0
  146. package/dist/runtime/types/Icon.d.ts +2 -0
  147. package/dist/runtime/types/Icon.js +85 -0
  148. package/dist/runtime/types/JourneyConfig.d.ts +9 -0
  149. package/dist/runtime/types/JourneyConfig.js +0 -0
  150. package/dist/runtime/types/index.d.ts +4 -0
  151. package/dist/runtime/types/index.js +4 -0
  152. package/dist/runtime/utils/applyProductData.d.ts +10 -0
  153. package/dist/runtime/utils/applyProductData.js +22 -0
  154. package/dist/runtime/utils/convertDate.d.ts +5 -0
  155. package/dist/runtime/utils/convertDate.js +17 -0
  156. package/dist/runtime/utils/findScrollAncestor.d.ts +1 -0
  157. package/dist/runtime/utils/findScrollAncestor.js +14 -0
  158. package/dist/runtime/utils/formValidations.d.ts +78 -0
  159. package/dist/runtime/utils/formValidations.js +180 -0
  160. package/dist/runtime/utils/formatValue.d.ts +4 -0
  161. package/dist/runtime/utils/formatValue.js +20 -0
  162. package/dist/runtime/utils/getAbTestVersion.d.ts +9 -0
  163. package/dist/runtime/utils/getAbTestVersion.js +48 -0
  164. package/dist/runtime/utils/getCalendarUrl.d.ts +8 -0
  165. package/dist/runtime/utils/getCalendarUrl.js +24 -0
  166. package/dist/runtime/utils/getFromUrl.d.ts +2 -0
  167. package/dist/runtime/utils/getFromUrl.js +25 -0
  168. package/dist/runtime/utils/getStoryblokUrl.d.ts +71 -0
  169. package/dist/runtime/utils/getStoryblokUrl.js +35 -0
  170. package/dist/runtime/utils/jsonReviver.d.ts +1 -0
  171. package/dist/runtime/utils/jsonReviver.js +18 -0
  172. package/dist/runtime/utils/mediaBreakpoints.d.ts +28 -0
  173. package/dist/runtime/utils/mediaBreakpoints.js +28 -0
  174. package/dist/runtime/utils/toggleScroll.d.ts +1 -0
  175. package/dist/runtime/utils/toggleScroll.js +6 -0
  176. package/dist/runtime/utils/updateForm.d.ts +11 -0
  177. package/dist/runtime/utils/updateForm.js +74 -0
  178. package/dist/runtime/utils/updateMarketingConsent.d.ts +4 -0
  179. package/dist/runtime/utils/updateMarketingConsent.js +13 -0
  180. package/dist/runtime/utils/uploadFile.d.ts +8 -0
  181. package/dist/runtime/utils/uploadFile.js +13 -0
  182. package/dist/types.d.mts +6 -10
  183. package/package.json +9 -8
  184. package/dist/module.d.cts +0 -2
@@ -0,0 +1,329 @@
1
+ <template>
2
+ <FormStructureContainer layout="vertical">
3
+ <div
4
+ v-if="options"
5
+ class="tiles-container"
6
+ :class="[`layout-${layout}`, `size-${size}`]"
7
+ :style="cssVars"
8
+ >
9
+ <div
10
+ v-for="(option, idx) in options"
11
+ :key="idx"
12
+ v-tippy="option.tooltip ? { content: option.tooltip } : void 0"
13
+ class="tile"
14
+ :class="{
15
+ active: props.multiselect ? model.includes(option.value) : option.value == value,
16
+ 'has-image': option.image
17
+ }"
18
+ @click="handleChange(option.value)"
19
+ >
20
+ <input
21
+ :type="multiselect ? 'checkbox' : 'radio'"
22
+ :value="option.value"
23
+ :checked="
24
+ multiselect ? model.includes(option.value) : model == option.value
25
+ "
26
+ :aria-label="option.label"
27
+ v-bind="{ name }"
28
+ />
29
+
30
+ <div v-if="option.image" class="image-container">
31
+ <img :src="option.image" :alt="option.label" />
32
+ </div>
33
+
34
+ <div
35
+ v-if="layout != 'image' || layout == 'image' && !option.image"
36
+ class="text-wrapper"
37
+ >
38
+ <div class="upper-text">
39
+ <span class="title">{{ option.label }}</span>
40
+ <span v-if="option.description" class="description">
41
+ {{ option.description }}
42
+ </span>
43
+ </div>
44
+ <div
45
+ v-if="option.descriptionLong && layout == 'list'"
46
+ class="long-description"
47
+ v-html="option.descriptionLong"
48
+ />
49
+ </div>
50
+
51
+ <span v-if="layout == 'list' && icon" :class="[icon, 'icon']" />
52
+ </div>
53
+ </div>
54
+ <FormStructureError
55
+ v-if="errorMessage && errorDisplay"
56
+ v-bind="{ errorMessage }"
57
+ />
58
+ </FormStructureContainer>
59
+ </template>
60
+
61
+ <script setup>
62
+ import { computed } from "vue";
63
+ import { useField } from "vee-validate";
64
+ const props = defineProps({
65
+ name: { type: String, required: true },
66
+ icon: { type: null, required: false, default: "m-cgg-icon--chevron-right" },
67
+ layout: { type: String, required: false, default: "list" },
68
+ options: { type: Array, required: false },
69
+ gridColumns: { type: Object, required: false },
70
+ size: { type: String, required: false, default: "md" },
71
+ multiselect: { type: Boolean, required: false },
72
+ validation: { type: Object, required: false },
73
+ validationMode: { type: String, required: false, default: "change" },
74
+ errorDisplay: { type: Boolean, required: false, default: true }
75
+ });
76
+ const model = defineModel({ type: null, ...{
77
+ required: true
78
+ } });
79
+ const cssVars = computed(() => ({
80
+ "--xs-grid-columns": props.gridColumns?.xs,
81
+ "--sm-grid-columns": props.gridColumns?.sm,
82
+ "--md-grid-columns": props.gridColumns?.md,
83
+ "--lg-grid-columns": props.gridColumns?.lg,
84
+ "--xl-grid-columns": props.gridColumns?.xl
85
+ }));
86
+ const { value, errorMessage, meta, validate } = useField(
87
+ "input",
88
+ props.validation,
89
+ {
90
+ validateOnValueUpdate: props.validationMode == "change",
91
+ syncVModel: true
92
+ }
93
+ );
94
+ const handleChange = (value2) => {
95
+ model.value = (() => {
96
+ if (props.multiselect) {
97
+ const curV = [...model.value];
98
+ if (curV.includes(value2)) {
99
+ curV.splice(curV.indexOf(value2), 1);
100
+ } else {
101
+ curV.push(value2);
102
+ }
103
+ return curV;
104
+ }
105
+ return value2;
106
+ })();
107
+ emit("click:option", value2);
108
+ };
109
+ defineExpose({ errorMessage, meta, validate });
110
+ const emit = defineEmits(["click:option"]);
111
+ </script>
112
+
113
+ <style lang="scss" scoped>
114
+ .tiles-container {
115
+ display: grid;
116
+ width: 100%;
117
+ gap: 16px;
118
+
119
+ &.size-sm {
120
+ .tile {
121
+ padding: 12px;
122
+
123
+ .text-wrapper {
124
+ .upper-text {
125
+ font-size: 14px;
126
+ line-height: 18px;
127
+ }
128
+
129
+ .long-description {
130
+ font-size: 13px;
131
+ line-height: 17px;
132
+ }
133
+ }
134
+ }
135
+
136
+ &.layout-list {
137
+ .tile.has-image {
138
+ grid-template-columns: 30px 1fr auto;
139
+
140
+ .image-container img {
141
+ width: 30px;
142
+ height: 30px;
143
+ }
144
+ }
145
+ }
146
+ }
147
+
148
+ &.size-md {
149
+ .tile {
150
+ padding: 20px 24px;
151
+
152
+ .text-wrapper {
153
+ .upper-text {
154
+ font-size: 16px;
155
+ line-height: 20px;
156
+ }
157
+
158
+ .long-description {
159
+ font-size: 14px;
160
+ line-height: 18px;
161
+ }
162
+ }
163
+ }
164
+
165
+ &.layout-list {
166
+ .tile.has-image {
167
+ grid-template-columns: 32px 1fr auto;
168
+
169
+ .image-container img {
170
+ width: 32px;
171
+ height: 32px;
172
+ }
173
+ }
174
+ }
175
+ }
176
+
177
+ &.size-lg {
178
+ .tile {
179
+ padding: 20px 24px;
180
+
181
+ .text-wrapper {
182
+ .upper-text {
183
+ font-size: 18px;
184
+ line-height: 22px;
185
+ }
186
+
187
+ .long-description {
188
+ font-size: 16px;
189
+ line-height: 20px;
190
+ }
191
+ }
192
+ }
193
+
194
+ &.layout-list {
195
+ .tile.has-image {
196
+ grid-template-columns: 40px 1fr auto;
197
+
198
+ .image-container img {
199
+ width: 40px;
200
+ height: 40px;
201
+ }
202
+ }
203
+ }
204
+ }
205
+
206
+ .tile {
207
+ position: relative;
208
+ display: flex;
209
+ flex-direction: row;
210
+ align-items: center;
211
+ gap: 16px;
212
+ border: 1px solid $light-grey;
213
+ border-radius: 10px;
214
+ cursor: pointer;
215
+ user-select: none;
216
+ overflow-x: hidden;
217
+ color: $extra-dark-blue;
218
+ transition: all 0.3s ease-in-out;
219
+ background-color: $white;
220
+
221
+ input {
222
+ position: absolute;
223
+ opacity: 0;
224
+ pointer-events: none;
225
+ }
226
+
227
+ @mixin activeStyle {
228
+ box-shadow: $box-shadow-m;
229
+ background-color: $extra-light-blue;
230
+ border-color: $main-blue;
231
+ }
232
+
233
+ &.active {
234
+ @include activeStyle;
235
+ }
236
+
237
+ @media (any-hover: hover) {
238
+ &:hover {
239
+ @include activeStyle;
240
+ }
241
+ }
242
+
243
+ .text-wrapper {
244
+ display: flex;
245
+ flex-direction: column;
246
+ gap: 4px;
247
+
248
+ .title {
249
+ font-weight: 700;
250
+ }
251
+ }
252
+
253
+ .icon {
254
+ font-size: 14px;
255
+ }
256
+ }
257
+
258
+ &.layout-grid,
259
+ &.layout-image {
260
+ grid-template-columns: var(--xs-grid-columns);
261
+
262
+ @include screen-xs-min {
263
+ grid-template-columns: var(--sm-grid-columns);
264
+ }
265
+
266
+ @include screen-md-min {
267
+ grid-template-columns: var(--md-grid-columns);
268
+ }
269
+
270
+ @include screen-lg-min {
271
+ grid-template-columns: var(--lg-grid-columns);
272
+ }
273
+
274
+ @include screen-xl-min {
275
+ grid-template-columns: var(--xl-grid-columns);
276
+ }
277
+ }
278
+
279
+ &.layout-list {
280
+ grid-template-columns: 1fr;
281
+
282
+ .tile {
283
+ display: grid;
284
+ grid-template-columns: 1fr auto;
285
+
286
+ .text-wrapper {
287
+ .description:before {
288
+ content: "-";
289
+ margin: 0 5px;
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ &.layout-grid {
296
+ .text-wrapper .upper-text {
297
+ display: flex;
298
+ flex-direction: column;
299
+ gap: 5px;
300
+
301
+ .title {
302
+ font-size: 15px;
303
+ line-height: 18px;
304
+ }
305
+
306
+ .description {
307
+ font-size: 12px;
308
+ line-height: 12px;
309
+ }
310
+ }
311
+ }
312
+
313
+ &.layout-image {
314
+ .tile {
315
+ justify-content: center;
316
+ text-align: center;
317
+
318
+ .image-container img {
319
+ display: block;
320
+ max-width: 100%;
321
+ }
322
+ }
323
+ }
324
+ }
325
+
326
+ .input-error {
327
+ text-align: center;
328
+ }
329
+ </style>
@@ -0,0 +1,44 @@
1
+ import type { Icon } from "../../types/Icon.js";
2
+ import type { TileOption } from "../../types/Form.js";
3
+ import type { Lazy, Schema } from "yup";
4
+ type __VLS_Props = {
5
+ name: string;
6
+ icon?: Icon;
7
+ layout?: "list" | "grid" | "image";
8
+ options?: TileOption[];
9
+ gridColumns?: {
10
+ xs?: string;
11
+ sm?: string;
12
+ md?: string;
13
+ lg?: string;
14
+ xl?: string;
15
+ };
16
+ size?: "sm" | "md" | "lg";
17
+ multiselect?: boolean;
18
+ validation?: Schema | Lazy<any>;
19
+ validationMode?: "change" | "none";
20
+ errorDisplay?: boolean;
21
+ };
22
+ type __VLS_ModelProps = {
23
+ modelValue: any | any[];
24
+ };
25
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
26
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
27
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
28
+ meta: import("vee-validate").FieldMeta<unknown>;
29
+ validate: import("vee-validate").FieldValidator<unknown>;
30
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
31
+ "click:option": (...args: any[]) => void;
32
+ "update:modelValue": (value: any) => void;
33
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
34
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
35
+ "onClick:option"?: ((...args: any[]) => any) | undefined;
36
+ }>, {
37
+ size: "sm" | "md" | "lg";
38
+ icon: Icon;
39
+ errorDisplay: boolean;
40
+ validationMode: "change" | "none";
41
+ layout: "list" | "grid" | "image";
42
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
43
+ declare const _default: typeof __VLS_export;
44
+ export default _default;
@@ -0,0 +1,51 @@
1
+ import { type InputHTMLAttributes } from "vue";
2
+ import type { Lazy, Schema } from "yup";
3
+ type __VLS_Props = {
4
+ title?: string;
5
+ label?: string;
6
+ tooltip?: string;
7
+ layout?: "vertical" | "horizontal";
8
+ size?: "sm" | "md" | "lg";
9
+ disabled?: InputHTMLAttributes["disabled"];
10
+ min: number;
11
+ max: number;
12
+ step: number;
13
+ validation?: Schema | Lazy<any>;
14
+ validationMode?: "change" | "none";
15
+ errorDisplay?: boolean;
16
+ };
17
+ declare const __VLS_defaultModels: {
18
+ modelValue: number;
19
+ };
20
+ type __VLS_ModelProps = {
21
+ modelValue: typeof __VLS_defaultModels['modelValue'];
22
+ };
23
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
24
+ declare var __VLS_13: {}, __VLS_15: {};
25
+ type __VLS_Slots = {} & {
26
+ min?: (props: typeof __VLS_13) => any;
27
+ } & {
28
+ max?: (props: typeof __VLS_15) => any;
29
+ };
30
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
31
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
32
+ meta: import("vee-validate").FieldMeta<unknown>;
33
+ validate: import("vee-validate").FieldValidator<unknown>;
34
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
35
+ "update:modelValue": (value: number) => any;
36
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
+ "onUpdate:modelValue"?: ((value: number) => any) | undefined;
38
+ }>, {
39
+ size: "sm" | "md" | "lg";
40
+ errorDisplay: boolean;
41
+ validationMode: "change" | "none";
42
+ layout: "vertical" | "horizontal";
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
45
+ declare const _default: typeof __VLS_export;
46
+ export default _default;
47
+ type __VLS_WithSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -0,0 +1,175 @@
1
+ <template>
2
+ <FormStructureContainer v-bind="{ layout }">
3
+ <FormStructureTitle
4
+ v-if="title"
5
+ v-bind="{ title, tooltip, size, disabled }"
6
+ />
7
+
8
+ <div
9
+ class="input-wrapper"
10
+ :class="{
11
+ error: errorMessage
12
+ }"
13
+ :style="sliderProgress"
14
+ >
15
+ <input
16
+ ref="inputEl"
17
+ v-bind="{ min, max, step, disabled }"
18
+ v-model="model"
19
+ type="range"
20
+ :aria-label="label || title"
21
+ />
22
+ <div v-if="$slots.max || $slots.min" class="label-container">
23
+ <div v-if="$slots.min" class="min">
24
+ <slot name="min" />
25
+ </div>
26
+ <div v-if="$slots.max" class="max">
27
+ <slot name="max" />
28
+ </div>
29
+ </div>
30
+ </div>
31
+
32
+ <FormStructureError
33
+ v-if="errorMessage && errorDisplay"
34
+ v-bind="{ size, errorMessage }"
35
+ />
36
+ </FormStructureContainer>
37
+ </template>
38
+
39
+ <script setup>
40
+ import { useField } from "vee-validate";
41
+ import { computed, ref } from "vue";
42
+ const props = defineProps({
43
+ title: { type: String, required: false },
44
+ label: { type: String, required: false },
45
+ tooltip: { type: String, required: false },
46
+ layout: { type: String, required: false, default: "vertical" },
47
+ size: { type: String, required: false, default: "md" },
48
+ disabled: { type: null, required: false },
49
+ min: { type: Number, required: true },
50
+ max: { type: Number, required: true },
51
+ step: { type: Number, required: true },
52
+ validation: { type: Object, required: false },
53
+ validationMode: { type: String, required: false, default: "change" },
54
+ errorDisplay: { type: Boolean, required: false, default: true }
55
+ });
56
+ const model = defineModel({
57
+ required: true,
58
+ default: 0
59
+ });
60
+ const { errorMessage, meta, validate } = useField("input", props.validation, {
61
+ validateOnValueUpdate: props.validationMode == "change",
62
+ syncVModel: true
63
+ });
64
+ defineExpose({ errorMessage, meta, validate });
65
+ const inputEl = ref();
66
+ const sliderProgress = computed(() => ({
67
+ "--slider-progress-value": (Math.round(model.value / props.step * props.step) - props.min) / (props.max - props.min)
68
+ }));
69
+ </script>
70
+
71
+ <style lang="scss" scoped>
72
+ $sliderHeight: 12px;
73
+ $sliderThumb: 20px;
74
+ $sliderProgress: calc(
75
+ 0.5 * #{$sliderThumb} + var(--slider-progress-value) * (100% - #{$sliderThumb})
76
+ );
77
+
78
+ .input-wrapper {
79
+ input {
80
+ display: block;
81
+ margin: 4px 0;
82
+ width: 100%;
83
+ appearance: none;
84
+ cursor: pointer;
85
+
86
+ &:focus {
87
+ outline: none;
88
+ }
89
+
90
+ &::-webkit-slider-thumb {
91
+ -webkit-appearance: none;
92
+ width: $sliderThumb;
93
+ height: $sliderThumb;
94
+ border-radius: 50%;
95
+ background: $dark-green;
96
+ border: none;
97
+ margin-top: calc($sliderHeight * 0.5 - $sliderThumb * 0.5);
98
+ cursor: grab;
99
+ }
100
+
101
+ &::-webkit-slider-runnable-track {
102
+ height: $sliderHeight;
103
+ border: none;
104
+ border-radius: $sliderHeight;
105
+ box-shadow: inset 0px 0px 10px rgba(129, 129, 129, 0.25);
106
+ background: linear-gradient($bright-green, $bright-green) 0 /
107
+ $sliderProgress 100% no-repeat,
108
+ $light-green;
109
+ }
110
+
111
+ &::-moz-range-thumb {
112
+ width: $sliderThumb;
113
+ height: $sliderThumb;
114
+ border-radius: 50%;
115
+ background: $dark-green;
116
+ border: none;
117
+ cursor: grab;
118
+ }
119
+
120
+ &::-moz-range-track {
121
+ height: $sliderHeight;
122
+ border: none;
123
+ border-radius: $sliderHeight;
124
+ box-shadow: none;
125
+ background: linear-gradient($bright-green, $bright-green) 0 /
126
+ $sliderProgress 100% no-repeat,
127
+ $light-green;
128
+ }
129
+
130
+ &:disabled {
131
+ &::-webkit-slider-thumb {
132
+ background: $dark-grey;
133
+ cursor: auto;
134
+ }
135
+
136
+ &::-moz-range-thumb {
137
+ background: $dark-grey;
138
+ cursor: auto;
139
+ }
140
+
141
+ &::-webkit-slider-runnable-track {
142
+ background: linear-gradient($light-grey, $light-grey) 0 /
143
+ $sliderProgress 100% no-repeat,
144
+ $disabled-grey;
145
+ cursor: auto;
146
+ }
147
+
148
+ &::-moz-range-track {
149
+ background: linear-gradient($light-grey, $light-grey) 0 /
150
+ $sliderProgress 100% no-repeat,
151
+ $disabled-grey;
152
+ cursor: auto;
153
+ }
154
+ }
155
+ }
156
+
157
+ .label-container {
158
+ display: grid;
159
+ grid-template-columns: repeat(2, 1fr);
160
+ gap: 16px;
161
+ margin-top: 12px;
162
+ font-size: 14px;
163
+ line-height: 18px;
164
+
165
+ .min {
166
+ grid-column: 1 / 2;
167
+ }
168
+
169
+ .max {
170
+ text-align: right;
171
+ grid-column: 2 / 3;
172
+ }
173
+ }
174
+ }
175
+ </style>
@@ -0,0 +1,51 @@
1
+ import { type InputHTMLAttributes } from "vue";
2
+ import type { Lazy, Schema } from "yup";
3
+ type __VLS_Props = {
4
+ title?: string;
5
+ label?: string;
6
+ tooltip?: string;
7
+ layout?: "vertical" | "horizontal";
8
+ size?: "sm" | "md" | "lg";
9
+ disabled?: InputHTMLAttributes["disabled"];
10
+ min: number;
11
+ max: number;
12
+ step: number;
13
+ validation?: Schema | Lazy<any>;
14
+ validationMode?: "change" | "none";
15
+ errorDisplay?: boolean;
16
+ };
17
+ declare const __VLS_defaultModels: {
18
+ modelValue: number;
19
+ };
20
+ type __VLS_ModelProps = {
21
+ modelValue: typeof __VLS_defaultModels['modelValue'];
22
+ };
23
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
24
+ declare var __VLS_13: {}, __VLS_15: {};
25
+ type __VLS_Slots = {} & {
26
+ min?: (props: typeof __VLS_13) => any;
27
+ } & {
28
+ max?: (props: typeof __VLS_15) => any;
29
+ };
30
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
31
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
32
+ meta: import("vee-validate").FieldMeta<unknown>;
33
+ validate: import("vee-validate").FieldValidator<unknown>;
34
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
35
+ "update:modelValue": (value: number) => any;
36
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
37
+ "onUpdate:modelValue"?: ((value: number) => any) | undefined;
38
+ }>, {
39
+ size: "sm" | "md" | "lg";
40
+ errorDisplay: boolean;
41
+ validationMode: "change" | "none";
42
+ layout: "vertical" | "horizontal";
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
45
+ declare const _default: typeof __VLS_export;
46
+ export default _default;
47
+ type __VLS_WithSlots<T, S> = T & {
48
+ new (): {
49
+ $slots: S;
50
+ };
51
+ };
@@ -0,0 +1,56 @@
1
+ import { type InputHTMLAttributes } from 'vue';
2
+ import type { Icon } from '../../types/Icon.js';
3
+ import type { Lazy, Schema } from 'yup';
4
+ type __VLS_Props = {
5
+ title?: string;
6
+ label?: string;
7
+ tooltip?: string;
8
+ placeholder?: InputHTMLAttributes['placeholder'];
9
+ layout?: 'vertical' | 'horizontal';
10
+ size?: 'sm' | 'md' | 'lg';
11
+ validation?: Schema | Lazy<any>;
12
+ validationMode?: 'change' | 'blur' | 'none';
13
+ errorDisplay?: boolean;
14
+ id?: InputHTMLAttributes['id'];
15
+ disabled?: InputHTMLAttributes['disabled'];
16
+ inputmode?: InputHTMLAttributes['inputmode'];
17
+ type?: InputHTMLAttributes['type'];
18
+ autocomplete?: InputHTMLAttributes['autocomplete'];
19
+ suffix?: string;
20
+ icon?: Icon;
21
+ iconPosition?: 'left' | 'right';
22
+ mask?: string;
23
+ numberOptions?: {
24
+ positiveOnly?: boolean;
25
+ digits?: number;
26
+ };
27
+ };
28
+ type __VLS_ModelProps = {
29
+ modelValue: any;
30
+ 'masked'?: any;
31
+ };
32
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
33
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
34
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
35
+ meta: import("vee-validate").FieldMeta<unknown>;
36
+ validate: import("vee-validate").FieldValidator<unknown>;
37
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
38
+ "update:modelValue": (value: any) => any;
39
+ "update:masked": (value: any) => any;
40
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
41
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
42
+ "onUpdate:masked"?: ((value: any) => any) | undefined;
43
+ }>, {
44
+ type: import("vue").InputTypeHTMLAttribute;
45
+ size: "sm" | "md" | "lg";
46
+ errorDisplay: boolean;
47
+ validationMode: "change" | "blur" | "none";
48
+ layout: "vertical" | "horizontal";
49
+ iconPosition: "left" | "right";
50
+ numberOptions: {
51
+ positiveOnly?: boolean;
52
+ digits?: number;
53
+ };
54
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
55
+ declare const _default: typeof __VLS_export;
56
+ export default _default;