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,227 @@
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
+ disabled
13
+ }"
14
+ >
15
+ <input
16
+ v-bind="{ id, type, placeholder, disabled, autocomplete, inputmode }"
17
+ ref="inputEl"
18
+ v-model="maskedModel"
19
+ v-maska="maskOptions"
20
+ :class="[`size-${size}`, `icon-${iconPosition}`, { 'has-icon': icon }]"
21
+ :aria-label="label || title"
22
+ @blur="handleBlur($event, validationMode == 'blur')"
23
+ >
24
+
25
+ <div
26
+ v-if="icon"
27
+ class="input-icon"
28
+ :class="[icon, `icon-${iconPosition}`, `size-${size}`]"
29
+ />
30
+
31
+ <div
32
+ v-if="suffix && iconPosition != 'right'"
33
+ ref="suffixEl"
34
+ class="input-suffix"
35
+ :class="[`size-${size}`]"
36
+ >
37
+ {{ suffix }}
38
+ </div>
39
+ </div>
40
+
41
+ <FormStructureError
42
+ v-if="errorMessage && errorDisplay"
43
+ v-bind="{ size, errorMessage }"
44
+ />
45
+ </FormStructureContainer>
46
+ </template>
47
+
48
+ <script setup>
49
+ import { useField } from "vee-validate";
50
+ import { computed, onMounted, ref, watch } from "vue";
51
+ import { vMaska } from "maska/vue";
52
+ const props = defineProps({
53
+ title: { type: String, required: false },
54
+ label: { type: String, required: false },
55
+ tooltip: { type: String, required: false },
56
+ placeholder: { type: null, required: false },
57
+ layout: { type: String, required: false, default: "vertical" },
58
+ size: { type: String, required: false, default: "md" },
59
+ validation: { type: Object, required: false },
60
+ validationMode: { type: String, required: false, default: "change" },
61
+ errorDisplay: { type: Boolean, required: false, default: true },
62
+ id: { type: null, required: false },
63
+ disabled: { type: null, required: false },
64
+ inputmode: { type: null, required: false },
65
+ type: { type: null, required: false, default: "text" },
66
+ autocomplete: { type: null, required: false },
67
+ suffix: { type: String, required: false },
68
+ icon: { type: null, required: false },
69
+ iconPosition: { type: String, required: false, default: "left" },
70
+ mask: { type: String, required: false },
71
+ numberOptions: { type: Object, required: false, default: () => ({
72
+ positiveOnly: true,
73
+ digits: 2
74
+ }) }
75
+ });
76
+ const model = defineModel({
77
+ required: true
78
+ });
79
+ const maskedModel = defineModel("masked", {
80
+ set: (v) => {
81
+ if (props.inputmode != "numeric" && props.inputmode != "decimal" && !props.mask) {
82
+ model.value = v;
83
+ }
84
+ return v;
85
+ }
86
+ });
87
+ watch(
88
+ model,
89
+ (n) => {
90
+ maskedModel.value = n && !props.mask && (props.inputmode == "numeric" || props.inputmode == "decimal") ? Intl.NumberFormat("de").format(n) : n;
91
+ },
92
+ {
93
+ immediate: true
94
+ }
95
+ );
96
+ const maskOptions = computed(() => {
97
+ if (props.mask) {
98
+ return {
99
+ mask: props.mask,
100
+ onMaska: (detail) => {
101
+ model.value = detail.masked;
102
+ }
103
+ };
104
+ } else if (props.inputmode == "numeric" || props.inputmode == "decimal") {
105
+ return {
106
+ onMaska: (detail) => {
107
+ const { unmasked } = detail;
108
+ model.value = unmasked && typeof unmasked == "string" ? Number.parseFloat(unmasked) : void 0;
109
+ },
110
+ number: {
111
+ locale: "de",
112
+ fraction: props.inputmode == "decimal" ? props.numberOptions.digits : 0,
113
+ unsigned: props.numberOptions.positiveOnly
114
+ }
115
+ };
116
+ }
117
+ return void 0;
118
+ });
119
+ const { errorMessage, meta, handleBlur, validate } = useField(
120
+ "input",
121
+ props.validation,
122
+ {
123
+ validateOnValueUpdate: props.validationMode == "change",
124
+ syncVModel: true
125
+ }
126
+ );
127
+ const inputEl = ref();
128
+ const suffixEl = ref();
129
+ onMounted(() => {
130
+ if (props.suffix && props.iconPosition != "right") {
131
+ const inputPadding = Number.parseInt(
132
+ window.getComputedStyle(inputEl.value).getPropertyValue("padding-right")
133
+ );
134
+ const suffixWidth = suffixEl.value.getBoundingClientRect().width;
135
+ inputEl.value.style.paddingRight = `${Math.ceil(
136
+ inputPadding * 2 + suffixWidth
137
+ )}px`;
138
+ }
139
+ });
140
+ defineExpose({ errorMessage, meta, validate });
141
+ </script>
142
+
143
+ <style lang="scss" scoped>
144
+ @use "sass:map";
145
+
146
+ .input-wrapper {
147
+ position: relative;
148
+
149
+ input {
150
+ @include input-template;
151
+
152
+ &[type="number"] {
153
+ /* Firefox */
154
+ -moz-appearance: textfield;
155
+
156
+ /* Chrome, Safari, Edge, Opera */
157
+ &::-webkit-outer-spin-button,
158
+ &::-webkit-inner-spin-button {
159
+ -webkit-appearance: none;
160
+ margin: 0;
161
+ }
162
+ }
163
+
164
+ &.has-icon {
165
+ @each $position in ("left", "right") {
166
+ &.icon-#{$position} {
167
+ @each $size-name, $size in $input-sizes {
168
+ &.size-#{$size-name} {
169
+ padding-#{$position}: map.get($size, padding-h) * 2 + 16px;
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+
177
+ &.error {
178
+ input {
179
+ @include input-error;
180
+ }
181
+ }
182
+
183
+ .input-suffix {
184
+ position: absolute;
185
+ top: 50%;
186
+ transform: translateY(-50%);
187
+ font-weight: 700;
188
+ pointer-events: none;
189
+ user-select: none;
190
+
191
+ @each $size-name, $size in $input-sizes {
192
+ &.size-#{$size-name} {
193
+ right: map.get($size, padding-h);
194
+ font-size: map.get($size, font-size);
195
+ line-height: map.get($size, font-size);
196
+ }
197
+ }
198
+ }
199
+
200
+ .input-icon {
201
+ position: absolute;
202
+ top: 50%;
203
+ transform: translateY(-50%);
204
+ pointer-events: none;
205
+
206
+ @each $size-name, $size in $input-sizes {
207
+ &.size-#{$size-name} {
208
+ font-size: map.get($size, font-size);
209
+ line-height: map.get($size, font-size);
210
+
211
+ @each $position in ("left", "right") {
212
+ &.icon-#{$position} {
213
+ #{$position}: map.get($size, padding-h);
214
+ }
215
+ }
216
+ }
217
+ }
218
+ }
219
+
220
+ &.disabled {
221
+ .input-suffix,
222
+ .input-icon {
223
+ color: $input-disabled-color;
224
+ }
225
+ }
226
+ }
227
+ </style>
@@ -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;
@@ -0,0 +1,37 @@
1
+ import type { TextareaHTMLAttributes } from 'vue';
2
+ import type { Lazy, Schema } from 'yup';
3
+ type __VLS_Props = {
4
+ title?: string;
5
+ label?: string;
6
+ tooltip?: string;
7
+ placeholder?: TextareaHTMLAttributes['placeholder'];
8
+ layout?: 'vertical' | 'horizontal';
9
+ size?: 'sm' | 'md' | 'lg';
10
+ validation?: Schema | Lazy<any>;
11
+ validationMode?: 'change' | 'blur' | 'none';
12
+ errorDisplay?: boolean;
13
+ id?: TextareaHTMLAttributes['id'];
14
+ disabled?: TextareaHTMLAttributes['disabled'];
15
+ rows?: TextareaHTMLAttributes['rows'];
16
+ };
17
+ type __VLS_ModelProps = {
18
+ modelValue: string;
19
+ };
20
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
21
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
23
+ meta: import("vee-validate").FieldMeta<unknown>;
24
+ validate: import("vee-validate").FieldValidator<unknown>;
25
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
+ "update:modelValue": (value: string) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
29
+ }>, {
30
+ size: "sm" | "md" | "lg";
31
+ errorDisplay: boolean;
32
+ validationMode: "change" | "blur" | "none";
33
+ layout: "vertical" | "horizontal";
34
+ rows: string | number;
35
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
+ declare const _default: typeof __VLS_export;
37
+ export default _default;
@@ -0,0 +1,76 @@
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
+ >
14
+ <textarea
15
+ v-bind="{ rows, id, disabled, placeholder }"
16
+ v-model="model"
17
+ :class="[`size-${size}`]"
18
+ :aria-label="label || title"
19
+ @blur="handleBlur($event, validationMode == 'blur')"
20
+ />
21
+ </div>
22
+
23
+ <FormStructureError
24
+ v-if="errorMessage && errorDisplay"
25
+ v-bind="{ size, errorMessage }"
26
+ />
27
+ </FormStructureContainer>
28
+ </template>
29
+
30
+ <script setup>
31
+ import { useField } from "vee-validate";
32
+ const props = defineProps({
33
+ title: { type: String, required: false },
34
+ label: { type: String, required: false },
35
+ tooltip: { type: String, required: false },
36
+ placeholder: { type: null, required: false },
37
+ layout: { type: String, required: false, default: "vertical" },
38
+ size: { type: String, required: false, default: "md" },
39
+ validation: { type: Object, required: false },
40
+ validationMode: { type: String, required: false, default: "change" },
41
+ errorDisplay: { type: Boolean, required: false, default: true },
42
+ id: { type: null, required: false },
43
+ disabled: { type: null, required: false },
44
+ rows: { type: null, required: false, default: 10 }
45
+ });
46
+ const model = defineModel({ type: String, ...{
47
+ required: true
48
+ } });
49
+ const { errorMessage, meta, handleBlur, validate } = useField(
50
+ "input",
51
+ props.validation,
52
+ {
53
+ validateOnValueUpdate: props.validationMode == "change",
54
+ syncVModel: true
55
+ }
56
+ );
57
+ defineExpose({ errorMessage, meta, validate });
58
+ </script>
59
+
60
+ <style lang="scss" scoped>
61
+ .input-wrapper {
62
+ position: relative;
63
+
64
+ textarea {
65
+ @include input-template;
66
+ resize: none;
67
+ display: block;
68
+ }
69
+
70
+ &.error {
71
+ textarea {
72
+ @include input-error;
73
+ }
74
+ }
75
+ }
76
+ </style>
@@ -0,0 +1,37 @@
1
+ import type { TextareaHTMLAttributes } from 'vue';
2
+ import type { Lazy, Schema } from 'yup';
3
+ type __VLS_Props = {
4
+ title?: string;
5
+ label?: string;
6
+ tooltip?: string;
7
+ placeholder?: TextareaHTMLAttributes['placeholder'];
8
+ layout?: 'vertical' | 'horizontal';
9
+ size?: 'sm' | 'md' | 'lg';
10
+ validation?: Schema | Lazy<any>;
11
+ validationMode?: 'change' | 'blur' | 'none';
12
+ errorDisplay?: boolean;
13
+ id?: TextareaHTMLAttributes['id'];
14
+ disabled?: TextareaHTMLAttributes['disabled'];
15
+ rows?: TextareaHTMLAttributes['rows'];
16
+ };
17
+ type __VLS_ModelProps = {
18
+ modelValue: string;
19
+ };
20
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
21
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
23
+ meta: import("vee-validate").FieldMeta<unknown>;
24
+ validate: import("vee-validate").FieldValidator<unknown>;
25
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
+ "update:modelValue": (value: string) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
+ "onUpdate:modelValue"?: ((value: string) => any) | undefined;
29
+ }>, {
30
+ size: "sm" | "md" | "lg";
31
+ errorDisplay: boolean;
32
+ validationMode: "change" | "blur" | "none";
33
+ layout: "vertical" | "horizontal";
34
+ rows: string | number;
35
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
+ declare const _default: typeof __VLS_export;
37
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import type { InputHTMLAttributes } from 'vue';
2
+ import type { Lazy, Schema } from 'yup';
3
+ type __VLS_Props = {
4
+ image?: string;
5
+ value: InputHTMLAttributes['value'];
6
+ label: string;
7
+ description?: string;
8
+ disabled?: InputHTMLAttributes['disabled'];
9
+ errorDisplay?: boolean;
10
+ validation?: Schema | Lazy<any>;
11
+ validationMode?: 'change' | 'none';
12
+ };
13
+ type __VLS_ModelProps = {
14
+ modelValue: boolean | string[];
15
+ };
16
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
+ declare var __VLS_1: {};
18
+ type __VLS_Slots = {} & {
19
+ default?: (props: typeof __VLS_1) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
23
+ meta: import("vee-validate").FieldMeta<unknown>;
24
+ validate: import("vee-validate").FieldValidator<unknown>;
25
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
+ "update:modelValue": (value: boolean | string[]) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
+ "onUpdate:modelValue"?: ((value: boolean | string[]) => any) | undefined;
29
+ }>, {
30
+ errorDisplay: boolean;
31
+ validationMode: "change" | "none";
32
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
+ declare const _default: typeof __VLS_export;
35
+ export default _default;
36
+ type __VLS_WithSlots<T, S> = T & {
37
+ new (): {
38
+ $slots: S;
39
+ };
40
+ };
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <label
3
+ class="tile-checkbox-container"
4
+ :class="{
5
+ checked: typeof model == 'boolean' ? model : model.includes(value)
6
+ }"
7
+ >
8
+ <div
9
+ v-if="image"
10
+ class="tile-image"
11
+ >
12
+ <img :src="image">
13
+ </div>
14
+ <div class="tile-label">
15
+ {{ label }}
16
+ </div>
17
+ <div
18
+ v-if="description || $slots.default"
19
+ class="tile-description"
20
+ >
21
+ <slot v-if="$slots.default" />
22
+ {{ description }}
23
+ </div>
24
+ <div class="tile-checkbox">
25
+ <FormCheckboxInput
26
+ v-model="model"
27
+ v-bind="{ value }"
28
+ />
29
+ </div>
30
+ </label>
31
+ </template>
32
+
33
+ <script setup>
34
+ import { useField } from "vee-validate";
35
+ const props = defineProps({
36
+ image: { type: String, required: false },
37
+ value: { type: null, required: true },
38
+ label: { type: String, required: true },
39
+ description: { type: String, required: false },
40
+ disabled: { type: null, required: false },
41
+ errorDisplay: { type: Boolean, required: false, default: true },
42
+ validation: { type: Object, required: false },
43
+ validationMode: { type: String, required: false, default: "change" }
44
+ });
45
+ const model = defineModel({ type: [Boolean, Array], ...{
46
+ required: true
47
+ } });
48
+ const { errorMessage, meta, validate } = useField("input", props.validation, {
49
+ validateOnValueUpdate: props.validationMode == "change",
50
+ syncVModel: true
51
+ });
52
+ defineExpose({ errorMessage, meta, validate });
53
+ </script>
54
+
55
+ <style lang="scss" scoped>
56
+ .tile-checkbox-container {
57
+ display: grid;
58
+ grid-template-columns: 32px 1fr 20px;
59
+ grid-template-rows: 32px auto;
60
+ align-items: center;
61
+ gap: 4px 8px;
62
+ cursor: pointer;
63
+ background: $white;
64
+ border: 1px solid $light-grey;
65
+ border-radius: 8px;
66
+ padding: 16px;
67
+ box-shadow: $box-shadow-s;
68
+ transition: all 0.3s ease-in-out;
69
+ user-select: none;
70
+
71
+ &.checked {
72
+ border: 1px solid $main-blue;
73
+ background-color: $extra-light-blue;
74
+ }
75
+
76
+ .tile-image {
77
+ img {
78
+ width: 32px;
79
+ height: 32px;
80
+ display: block;
81
+ }
82
+ }
83
+
84
+ .tile-label {
85
+ font-weight: 700;
86
+ font-size: 16px;
87
+ line-height: 19px;
88
+ color: $dark-blue;
89
+ grid-area: 1 / 2 / 2 / 3;
90
+ }
91
+
92
+ .tile-description {
93
+ grid-area: 2 / 1 / 3 / 4;
94
+ font-size: 14px;
95
+ line-height: 17px;
96
+
97
+ :deep(a) {
98
+ color: inherit;
99
+ font-weight: 700;
100
+ text-decoration: underline;
101
+
102
+ &:hover {
103
+ text-decoration: none;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ </style>
@@ -0,0 +1,40 @@
1
+ import type { InputHTMLAttributes } from 'vue';
2
+ import type { Lazy, Schema } from 'yup';
3
+ type __VLS_Props = {
4
+ image?: string;
5
+ value: InputHTMLAttributes['value'];
6
+ label: string;
7
+ description?: string;
8
+ disabled?: InputHTMLAttributes['disabled'];
9
+ errorDisplay?: boolean;
10
+ validation?: Schema | Lazy<any>;
11
+ validationMode?: 'change' | 'none';
12
+ };
13
+ type __VLS_ModelProps = {
14
+ modelValue: boolean | string[];
15
+ };
16
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
+ declare var __VLS_1: {};
18
+ type __VLS_Slots = {} & {
19
+ default?: (props: typeof __VLS_1) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
22
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
23
+ meta: import("vee-validate").FieldMeta<unknown>;
24
+ validate: import("vee-validate").FieldValidator<unknown>;
25
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
26
+ "update:modelValue": (value: boolean | string[]) => any;
27
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
28
+ "onUpdate:modelValue"?: ((value: boolean | string[]) => any) | undefined;
29
+ }>, {
30
+ errorDisplay: boolean;
31
+ validationMode: "change" | "none";
32
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
34
+ declare const _default: typeof __VLS_export;
35
+ export default _default;
36
+ type __VLS_WithSlots<T, S> = T & {
37
+ new (): {
38
+ $slots: S;
39
+ };
40
+ };
@@ -0,0 +1,43 @@
1
+ import type { InputHTMLAttributes } from 'vue';
2
+ import type { Lazy, Schema } from 'yup';
3
+ type __VLS_Props = {
4
+ size?: 'sm' | 'md' | 'lg';
5
+ value?: InputHTMLAttributes['value'];
6
+ disabled?: InputHTMLAttributes['disabled'];
7
+ name?: InputHTMLAttributes['name'];
8
+ label?: string;
9
+ fullWidth?: boolean;
10
+ validation?: Schema | Lazy<any>;
11
+ errorDisplay?: boolean;
12
+ validationMode?: 'change' | 'none';
13
+ };
14
+ type __VLS_ModelProps = {
15
+ modelValue: any;
16
+ };
17
+ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
18
+ declare var __VLS_8: {};
19
+ type __VLS_Slots = {} & {
20
+ default?: (props: typeof __VLS_8) => any;
21
+ };
22
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {
23
+ errorMessage: import("vue").Ref<string | undefined, string | undefined>;
24
+ meta: import("vee-validate").FieldMeta<unknown>;
25
+ validate: import("vee-validate").FieldValidator<unknown>;
26
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
27
+ "update:modelValue": (value: any) => any;
28
+ }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
29
+ "onUpdate:modelValue"?: ((value: any) => any) | undefined;
30
+ }>, {
31
+ size: "sm" | "md" | "lg";
32
+ errorDisplay: boolean;
33
+ validationMode: "change" | "none";
34
+ fullWidth: boolean;
35
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
36
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
37
+ declare const _default: typeof __VLS_export;
38
+ export default _default;
39
+ type __VLS_WithSlots<T, S> = T & {
40
+ new (): {
41
+ $slots: S;
42
+ };
43
+ };