comand-component-library 3.1.72 → 3.1.75
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/comand-component-library.css +1 -1
- package/dist/comand-component-library.umd.min.js +1 -1
- package/package.json +3 -3
- package/src/App.vue +112 -79
- package/src/assets/data/cookie-disclaimer.json +7 -6
- package/src/assets/data/input-group-radiobuttons.json +23 -0
- package/src/assets/data/input-group-replaced-radiobuttons.json +23 -0
- package/src/assets/data/input-group-toggle-switch-radiobuttons.json +23 -0
- package/src/assets/styles/global-styles.scss +20 -59
- package/src/components/CmdAddressData.vue +7 -7
- package/src/components/CmdBankAccountData.vue +7 -7
- package/src/components/CmdBox.vue +25 -31
- package/src/components/CmdBoxSiteSearch.vue +9 -9
- package/src/components/CmdCookieDisclaimer.vue +93 -25
- package/src/components/CmdFakeSelect.vue +36 -52
- package/src/components/CmdFormElement.vue +36 -57
- package/src/components/{CmdCustomHeadline.vue → CmdHeadline.vue} +1 -1
- package/src/components/CmdInputGroup.vue +156 -24
- package/src/components/CmdListOfLinks.vue +8 -8
- package/src/components/CmdListOfRequirements.vue +150 -0
- package/src/components/CmdLoginForm.vue +17 -17
- package/src/components/CmdMainNavigation.vue +2 -2
- package/src/components/CmdOpeningHours.vue +5 -5
- package/src/components/CmdSiteFooter.vue +76 -0
- package/src/components/CmdSiteHeader.vue +2 -1
- package/src/components/CmdSystemMessage.vue +28 -11
- package/src/components/CmdTabs.vue +8 -8
- package/src/components/CmdToggleDarkMode.vue +42 -5
- package/src/components/CmdTooltip.vue +13 -13
- package/src/components/CmdTooltipForInputElements.vue +122 -0
- package/src/components/CmdUploadForm.vue +32 -32
- package/src/components/CmdWidthLimitationWrapper.vue +0 -17
- package/src/documentation/generated/CmdAddressDataPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdBackToTopButtonPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdBankAccountDataPropertyDescriptions.json +34 -0
- package/src/documentation/generated/CmdBoxPropertyDescriptions.json +96 -0
- package/src/documentation/generated/CmdBoxSiteSearchPropertyDescriptions.json +79 -0
- package/src/documentation/generated/CmdBoxWrapperPropertyDescriptions.json +47 -0
- package/src/documentation/generated/CmdBreadcrumbsPropertyDescriptions.json +17 -0
- package/src/documentation/generated/CmdCompanyLogoPropertyDescriptions.json +27 -0
- package/src/documentation/generated/CmdCookieDisclaimerPropertyDescriptions.json +37 -0
- package/src/documentation/generated/CmdCustomHeadlinePropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdFakeSelectPropertyDescriptions.json +84 -0
- package/src/documentation/generated/CmdFancyBoxPropertyDescriptions.json +62 -0
- package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +258 -0
- package/src/documentation/generated/CmdFormFiltersPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdFormPropertyDescriptions.json +40 -0
- package/src/documentation/generated/CmdGoogleMapsPropertyDescriptions.json +7 -0
- package/src/documentation/generated/CmdHeadlinePropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdImageGalleryPropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdImageZoomPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdInputGroupPropertyDescriptions.json +117 -0
- package/src/documentation/generated/CmdListOfLinksPropertyDescriptions.json +60 -0
- package/src/documentation/generated/CmdListOfRequirementsPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +90 -0
- package/src/documentation/generated/CmdMainNavigationPropertyDescriptions.json +62 -0
- package/src/documentation/generated/CmdMultistepFormProgressBarPropertyDescriptions.json +17 -0
- package/src/documentation/generated/CmdOpeningHoursPropertyDescriptions.json +42 -0
- package/src/documentation/generated/CmdPagerPropertyDescriptions.json +37 -0
- package/src/documentation/generated/CmdProgressBarPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdShareButtonsPropertyDescriptions.json +34 -0
- package/src/documentation/generated/CmdSiteFooterPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdSiteHeaderPropertyDescriptions.json +27 -0
- package/src/documentation/generated/CmdSlideButtonPropertyDescriptions.json +25 -0
- package/src/documentation/generated/CmdSlideshowPropertyDescriptions.json +42 -0
- package/src/documentation/generated/CmdSwitchLanguagePropertyDescriptions.json +7 -0
- package/src/documentation/generated/CmdSystemMessagePropertyDescriptions.json +45 -0
- package/src/documentation/generated/CmdTablePropertyDescriptions.json +72 -0
- package/src/documentation/generated/CmdTabsPropertyDescriptions.json +27 -0
- package/src/documentation/generated/CmdThumbnailScrollerPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdTooltipForInputElementsPropertyDescriptions.json +42 -0
- package/src/documentation/generated/CmdTooltipPropertyDescriptions.json +17 -0
- package/src/documentation/generated/CmdUploadFormPropertyDescriptions.json +175 -0
- package/src/documentation/generated/CmdWidthLimitationWrapperPropertyDescriptions.json +41 -0
- package/src/index.js +2 -1
- package/src/mixins/CmdCookieDisclaimer/DefaultMessageProperties.js +10 -0
- package/src/mixins/FieldValidation.js +16 -6
- package/src/mixins/Tooltip.js +1 -1
@@ -9,6 +9,7 @@
|
|
9
9
|
disabled: $attrs.disabled
|
10
10
|
}
|
11
11
|
]"
|
12
|
+
:title="$attrs.title"
|
12
13
|
:aria-labelledby="labelId"
|
13
14
|
:aria-required="$attrs.required !== undefined"
|
14
15
|
ref="fakeselect"
|
@@ -17,6 +18,23 @@
|
|
17
18
|
<!-- begin label -->
|
18
19
|
<span class="label-text" :id="labelId">
|
19
20
|
<span>{{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup></span>
|
21
|
+
|
22
|
+
<!-- begin CmdTooltipForInputElements -->
|
23
|
+
<CmdTooltipForInputElements
|
24
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
25
|
+
ref="tooltip"
|
26
|
+
:showRequirements="showRequirements"
|
27
|
+
:inputRequirements="inputRequirements"
|
28
|
+
:validationStatus="validationStatus"
|
29
|
+
:validationMessage="getValidationMessage"
|
30
|
+
:validationTooltip="validationTooltip"
|
31
|
+
:inputAttributes="$attrs"
|
32
|
+
:inputModelValue="modelValue"
|
33
|
+
:helplink="helplink"
|
34
|
+
:relatedId="tooltipId"
|
35
|
+
/>
|
36
|
+
<!-- end CmdTooltipForInputElements -->
|
37
|
+
|
20
38
|
<a v-if="$attrs.required || inputRequirements.length"
|
21
39
|
href="#"
|
22
40
|
@click.prevent
|
@@ -102,51 +120,6 @@
|
|
102
120
|
</li>
|
103
121
|
</ul>
|
104
122
|
</div>
|
105
|
-
<!-- begin CmdTooltip -->
|
106
|
-
<CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
|
107
|
-
<!-- begin CmdSystemMessage -->
|
108
|
-
<CmdSystemMessage
|
109
|
-
v-if="getValidationMessage"
|
110
|
-
:message="getValidationMessage"
|
111
|
-
:validationStatus="validationStatus"
|
112
|
-
:iconClose="{show: false}"
|
113
|
-
/>
|
114
|
-
<!-- end CmdSystemMessage -->
|
115
|
-
|
116
|
-
<template v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')">
|
117
|
-
<!-- begin list of requirements -->
|
118
|
-
<h6>{{ getMessage("cmdfakeselect.headline.requirements_for_input") }}<br/>"{{ labelText }}"</h6>
|
119
|
-
<dl class="list-of-requirements">
|
120
|
-
<template v-for="(requirement, index) in inputRequirements" :key="index">
|
121
|
-
<dt aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">{{ requirement.message }}:</dt>
|
122
|
-
<dd :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">
|
123
|
-
<span aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'icon-check-circle' : 'icon-error-circle'"
|
124
|
-
:title="requirement.valid(modelValue, $attrs) ? 'success' : 'error'"></span>
|
125
|
-
</dd>
|
126
|
-
</template>
|
127
|
-
</dl>
|
128
|
-
<!-- end list of requirements -->
|
129
|
-
|
130
|
-
<!-- begin helplink -->
|
131
|
-
<template v-if="helplink">
|
132
|
-
<hr v-if="helplink.show"/>
|
133
|
-
<a v-if="helplink.show && helplink.url"
|
134
|
-
:href="helplink.url"
|
135
|
-
:target="helplink.target"
|
136
|
-
@click.prevent>
|
137
|
-
<span v-if="helplink.icon?.iconClass"
|
138
|
-
:class="helplink.icon?.iconClass"
|
139
|
-
:title="helplink.icon?.tooltip">
|
140
|
-
</span>
|
141
|
-
<span v-if="helplink.text">
|
142
|
-
{{ helplink.text }}
|
143
|
-
</span>
|
144
|
-
</a>
|
145
|
-
</template>
|
146
|
-
<!-- end helplink -->
|
147
|
-
</template>
|
148
|
-
</CmdTooltip>
|
149
|
-
<!-- end CmdTooltip -->
|
150
123
|
</template>
|
151
124
|
|
152
125
|
<script>
|
@@ -155,13 +128,12 @@ import {createUuid} from "../utils/common.js"
|
|
155
128
|
|
156
129
|
// import mixins
|
157
130
|
import I18n from "../mixins/I18n"
|
158
|
-
import DefaultMessageProperties from "../mixins/
|
131
|
+
import DefaultMessageProperties from "../mixins/CmdFakeSelect/DefaultMessageProperties"
|
159
132
|
import FieldValidation from "../mixins/FieldValidation.js"
|
160
133
|
import Tooltip from "../mixins/Tooltip.js"
|
161
134
|
|
162
135
|
// import components
|
163
|
-
import
|
164
|
-
import CmdTooltip from "./CmdTooltip"
|
136
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
165
137
|
|
166
138
|
export default {
|
167
139
|
name: 'CmdFakeSelect',
|
@@ -173,8 +145,7 @@ export default {
|
|
173
145
|
Tooltip
|
174
146
|
],
|
175
147
|
components: {
|
176
|
-
|
177
|
-
CmdTooltip
|
148
|
+
CmdTooltipForInputElements
|
178
149
|
},
|
179
150
|
data() {
|
180
151
|
return {
|
@@ -277,6 +248,19 @@ export default {
|
|
277
248
|
}
|
278
249
|
},
|
279
250
|
computed: {
|
251
|
+
validationTooltip() {
|
252
|
+
if (!this.useCustomTooltip) {
|
253
|
+
return this.getValidationMessage
|
254
|
+
}
|
255
|
+
|
256
|
+
// set default-tooltip if customTooltip is not set
|
257
|
+
if (this.validationStatus === 'error') {
|
258
|
+
return this.getMessage("cmdformelement.validationTooltip.an_error_occurred")
|
259
|
+
} else if (this.validationStatus === 'success') {
|
260
|
+
return this.getMessage("cmdformelement.validationTooltip.information_is_filled_correctly")
|
261
|
+
}
|
262
|
+
return this.getMessage("cmdformelement.validationTooltip.open_field_requirements")
|
263
|
+
},
|
280
264
|
// get the displayed option name
|
281
265
|
optionName() {
|
282
266
|
// fake a native selectbox
|
@@ -334,7 +318,7 @@ export default {
|
|
334
318
|
},
|
335
319
|
// get ID for accessibility
|
336
320
|
labelId() {
|
337
|
-
if(this.$attrs.id !== undefined) {
|
321
|
+
if (this.$attrs.id !== undefined) {
|
338
322
|
return this.$attrs.id
|
339
323
|
}
|
340
324
|
return "label-" + createUuid()
|
@@ -577,7 +561,7 @@ export default {
|
|
577
561
|
margin: 0;
|
578
562
|
border-bottom-right-radius: var(--border-radius);
|
579
563
|
border-bottom-left-radius: var(--border-radius);
|
580
|
-
background: var(--
|
564
|
+
background: var(--color-scheme-background-color);
|
581
565
|
border: var(--primary-border);
|
582
566
|
|
583
567
|
li {
|
@@ -13,8 +13,10 @@
|
|
13
13
|
on: colored && isChecked,
|
14
14
|
off: colored && !isChecked,
|
15
15
|
'has-state': validationStatus
|
16
|
-
}
|
16
|
+
}
|
17
|
+
]"
|
17
18
|
:for="labelId"
|
19
|
+
:title="$attrs.title"
|
18
20
|
ref="label">
|
19
21
|
|
20
22
|
<!-- begin label-text (+ required asterisk) -->
|
@@ -22,44 +24,21 @@
|
|
22
24
|
:class="['label-text', !showLabel ? 'hidden' : undefined]">
|
23
25
|
<span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
|
24
26
|
|
25
|
-
<!-- begin
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
"{{ labelText }}"
|
41
|
-
</h6>
|
42
|
-
<dl class="list-of-requirements">
|
43
|
-
<template v-for="(requirement, index) in inputRequirements" :key="index">
|
44
|
-
<dt aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">{{ requirement.message }}:</dt>
|
45
|
-
<dd :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">
|
46
|
-
<span aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.iconClass : iconHasStateError.iconClass"
|
47
|
-
:title="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.tooltip : iconHasStateError.tooltip"></span>
|
48
|
-
</dd>
|
49
|
-
</template>
|
50
|
-
</dl>
|
51
|
-
<!-- end list of requirements -->
|
52
|
-
|
53
|
-
<!-- begin helplink -->
|
54
|
-
<hr v-if="helplink?.show"/>
|
55
|
-
<a v-if="helplink?.show && helplink?.url" :href="helplink.url" :target="helplink.target" @click.prevent>
|
56
|
-
<span v-if="helplink.icon?.iconClass" :class="helplink.icon?.iconClass" :title="helplink.icon?.tooltip"></span>
|
57
|
-
<span v-if="helplink.text">{{ helplink.text }}</span>
|
58
|
-
</a>
|
59
|
-
<!-- end helplink -->
|
60
|
-
</template>
|
61
|
-
</CmdTooltip>
|
62
|
-
<!-- end CmdTooltip -->
|
27
|
+
<!-- begin CmdTooltipForInputElements -->
|
28
|
+
<CmdTooltipForInputElements
|
29
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
30
|
+
ref="tooltip"
|
31
|
+
:showRequirements="showRequirements"
|
32
|
+
:inputRequirements="inputRequirements"
|
33
|
+
:validationStatus="validationStatus"
|
34
|
+
:validationMessage="getValidationMessage"
|
35
|
+
:validationTooltip="validationTooltip"
|
36
|
+
:inputAttributes="$attrs"
|
37
|
+
:inputModelValue="modelValue"
|
38
|
+
:helplink="helplink"
|
39
|
+
:relatedId="tooltipId"
|
40
|
+
/>
|
41
|
+
<!-- end CmdTooltipForInputElements -->
|
63
42
|
|
64
43
|
<a v-if="$attrs.required || inputRequirements.length"
|
65
44
|
href="#"
|
@@ -226,15 +205,13 @@ import FieldValidation from "../mixins/FieldValidation.js"
|
|
226
205
|
import Tooltip from "../mixins/Tooltip.js"
|
227
206
|
|
228
207
|
// import components
|
229
|
-
import
|
230
|
-
import CmdTooltip from "./CmdTooltip"
|
208
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
231
209
|
|
232
210
|
export default {
|
233
211
|
inheritAttrs: false,
|
234
212
|
name: "FormElement",
|
235
213
|
components: {
|
236
|
-
|
237
|
-
CmdTooltip
|
214
|
+
CmdTooltipForInputElements
|
238
215
|
},
|
239
216
|
mixins: [
|
240
217
|
I18n,
|
@@ -281,6 +258,8 @@ export default {
|
|
281
258
|
},
|
282
259
|
/**
|
283
260
|
* text for label
|
261
|
+
*
|
262
|
+
* @requiredForAccessibility: true
|
284
263
|
*/
|
285
264
|
labelText: {
|
286
265
|
type: String,
|
@@ -425,7 +404,7 @@ export default {
|
|
425
404
|
/**
|
426
405
|
* set status for label and form-element
|
427
406
|
*
|
428
|
-
* @allowedValues: error, success
|
407
|
+
* @allowedValues: error, warning, success, info
|
429
408
|
*
|
430
409
|
* @affectsStyling: true
|
431
410
|
*/
|
@@ -715,12 +694,11 @@ export default {
|
|
715
694
|
}
|
716
695
|
return null
|
717
696
|
},
|
718
|
-
|
697
|
+
validateInput(event) {
|
719
698
|
// check if surrounding form with data-use-validation exists
|
720
699
|
const useValidation = event.target.closest("form")?.dataset.useValidation === "true"
|
721
700
|
|
722
701
|
if (useValidation) {
|
723
|
-
this.tooltip = false
|
724
702
|
this.validationStatus = ""
|
725
703
|
|
726
704
|
// if input is filled, set status to success (expect for checkboxes and radiobuttons)
|
@@ -745,6 +723,14 @@ export default {
|
|
745
723
|
}
|
746
724
|
}
|
747
725
|
},
|
726
|
+
onBlur(event) {
|
727
|
+
this.validateInput(event)
|
728
|
+
this.closeTooltipOnBlur()
|
729
|
+
},
|
730
|
+
onInput(event) {
|
731
|
+
this.validateInput(event)
|
732
|
+
this.$emit('update:modelValue', event.target.value)
|
733
|
+
},
|
748
734
|
onChange(event) {
|
749
735
|
if (typeof this.modelValue === "boolean") {
|
750
736
|
this.$emit("update:modelValue", event.target.checked)
|
@@ -766,9 +752,6 @@ export default {
|
|
766
752
|
this.$refs.label.focus()
|
767
753
|
}
|
768
754
|
},
|
769
|
-
onInput(event) {
|
770
|
-
this.$emit('update:modelValue', event.target.value)
|
771
|
-
},
|
772
755
|
showPassword() {
|
773
756
|
// get password-field
|
774
757
|
const passwordField = this.$refs.input
|
@@ -789,6 +772,10 @@ export default {
|
|
789
772
|
},
|
790
773
|
executeSearch() {
|
791
774
|
this.$emit("search", this.value)
|
775
|
+
},
|
776
|
+
closeTooltipOnBlur() {
|
777
|
+
// close tooltip by calling function from CmdTooltipForInputElements using $refs
|
778
|
+
this.$refs.tooltip.hideTooltip()
|
792
779
|
}
|
793
780
|
},
|
794
781
|
watch: {
|
@@ -810,14 +797,6 @@ export default {
|
|
810
797
|
right: .5rem
|
811
798
|
}
|
812
799
|
|
813
|
-
.cmd-tooltip {
|
814
|
-
position: absolute;
|
815
|
-
right: 0;
|
816
|
-
transform: translateY(calc(-100% - calc(var(--default-margin) / 2)));
|
817
|
-
left: auto !important;
|
818
|
-
top: 0 !important;
|
819
|
-
}
|
820
|
-
|
821
800
|
&.has-state, & + .cmd-tooltip {
|
822
801
|
::placeholder {
|
823
802
|
color: var(--status-color);
|
@@ -1,18 +1,54 @@
|
|
1
1
|
<template>
|
2
|
-
<div :class="[
|
2
|
+
<div :class="[
|
3
|
+
'cmd-input-group label',
|
4
|
+
validationStatus,
|
5
|
+
{inline: labelInline,
|
6
|
+
'multiple-switch': multipleSwitch,
|
7
|
+
disabled: disabled,
|
8
|
+
'toggle-switch': toggleSwitch,
|
9
|
+
'has-state': validationStatus
|
10
|
+
}
|
11
|
+
]">
|
3
12
|
<span :class="['label-text', { hidden: !showLabel}]" :id="labelId" :aria-labelledby="labelId">
|
4
|
-
<span>{{ labelText }}<sup v-if="
|
13
|
+
<span>{{ labelText }}<sup v-if="required">*</sup></span>
|
14
|
+
|
15
|
+
<!-- begin CmdTooltipForInputElements -->
|
16
|
+
<CmdTooltipForInputElements
|
17
|
+
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
18
|
+
ref="tooltip"
|
19
|
+
:showRequirements="showRequirements"
|
20
|
+
:inputRequirements="inputRequirements"
|
21
|
+
:validationStatus="validationStatus"
|
22
|
+
:validationMessage="getValidationMessage"
|
23
|
+
:validationTooltip="validationTooltip"
|
24
|
+
:inputAttributes="$attrs"
|
25
|
+
:inputModelValue="modelValue"
|
26
|
+
:helplink="helplink"
|
27
|
+
:relatedId="tooltipId"
|
28
|
+
/>
|
29
|
+
<!-- end CmdTooltipForInputElements -->
|
30
|
+
|
31
|
+
<a v-if="required || inputRequirements.length"
|
32
|
+
href="#"
|
33
|
+
@click.prevent
|
34
|
+
:class="getStatusIconClass"
|
35
|
+
:title="validationTooltip"
|
36
|
+
:aria-errormessage="getValidationMessage"
|
37
|
+
aria-live="assertive"
|
38
|
+
:id="tooltipId"
|
39
|
+
:role="validationStatus === 'error' ? 'alert' : 'dialog'">
|
40
|
+
</a>
|
5
41
|
</span>
|
6
42
|
<span v-if="!useSlot" :class="['flex-container', {'no-flex': !stretchHorizontally, 'no-gap': multipleSwitch}]">
|
7
43
|
<label v-for="(inputElement, index) in inputElements" :key="index" :for="inputElement.id">
|
8
44
|
<input
|
9
45
|
:type="inputTypes"
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
46
|
+
:id="inputElement.id"
|
47
|
+
:name="inputElement.name"
|
48
|
+
:value="inputElement.value"
|
49
|
+
v-model="inputValue"
|
50
|
+
:disabled="disabled"
|
51
|
+
:class="{'replace-input-type': replaceInputType, 'toggle-switch': toggleSwitch}"
|
16
52
|
/>
|
17
53
|
<span v-if="multipleSwitch && inputElement.iconClass" :class="inputElement.iconClass"></span>
|
18
54
|
<span v-if="inputElement.labelText">{{ inputElement.labelText }}</span>
|
@@ -32,7 +68,21 @@
|
|
32
68
|
<script>
|
33
69
|
import {createUuid} from "../utils/common"
|
34
70
|
|
71
|
+
// import mixins
|
72
|
+
import FieldValidation from "../mixins/FieldValidation.js"
|
73
|
+
import Tooltip from "../mixins/Tooltip.js"
|
74
|
+
|
75
|
+
// import components
|
76
|
+
import CmdTooltipForInputElements from "./CmdTooltipForInputElements"
|
77
|
+
|
35
78
|
export default {
|
79
|
+
components: {
|
80
|
+
CmdTooltipForInputElements
|
81
|
+
},
|
82
|
+
mixins: [
|
83
|
+
FieldValidation,
|
84
|
+
Tooltip
|
85
|
+
],
|
36
86
|
data() {
|
37
87
|
return {
|
38
88
|
value: ""
|
@@ -46,14 +96,21 @@ export default {
|
|
46
96
|
type: [Array, String],
|
47
97
|
required: false
|
48
98
|
},
|
99
|
+
/**
|
100
|
+
* set if input-group should be required
|
101
|
+
*/
|
102
|
+
required: {
|
103
|
+
type: Boolean,
|
104
|
+
default: false
|
105
|
+
},
|
49
106
|
/**
|
50
107
|
* list of input-elements inside group
|
51
108
|
*
|
52
109
|
* useSlot-property must be set to 'false'
|
53
110
|
*/
|
54
111
|
inputElements: {
|
55
|
-
|
56
|
-
|
112
|
+
type: Array,
|
113
|
+
required: false
|
57
114
|
},
|
58
115
|
/**
|
59
116
|
* set type for inputs in group
|
@@ -64,15 +121,39 @@ export default {
|
|
64
121
|
type: String,
|
65
122
|
default: "radio"
|
66
123
|
},
|
124
|
+
/**
|
125
|
+
* set status for label and inner form-elements
|
126
|
+
*
|
127
|
+
* @allowedValues: error, warning, success, info
|
128
|
+
*
|
129
|
+
* @affectsStyling: true
|
130
|
+
*/
|
131
|
+
status: {
|
132
|
+
type: String,
|
133
|
+
required: false
|
134
|
+
},
|
67
135
|
/**
|
68
136
|
* for replacing native checkboxes/radio-buttons by custom ones (based on frontend-framework)
|
69
137
|
*
|
138
|
+
* toggleSwitch-property must be set to 'false'
|
139
|
+
*
|
70
140
|
* @affectsStyling: true
|
71
141
|
*/
|
72
142
|
replaceInputType: {
|
73
143
|
type: Boolean,
|
74
144
|
default: false
|
75
145
|
},
|
146
|
+
/**
|
147
|
+
* for replacing native checkboxes/radio-buttons by toggle-switches (based on frontend-framework)
|
148
|
+
*
|
149
|
+
* replaceInputType-property must be set to 'false'
|
150
|
+
*
|
151
|
+
* @affectsStyling: true
|
152
|
+
*/
|
153
|
+
toggleSwitch: {
|
154
|
+
type: Boolean,
|
155
|
+
default: false
|
156
|
+
},
|
76
157
|
/**
|
77
158
|
* activate if input-elements should be given by slot
|
78
159
|
*/
|
@@ -131,10 +212,36 @@ export default {
|
|
131
212
|
default: false
|
132
213
|
}
|
133
214
|
},
|
215
|
+
methods: {
|
216
|
+
updateStatus() {
|
217
|
+
if (this.required) {
|
218
|
+
if(this.inputValue?.length) {
|
219
|
+
this.validationStatus = ""
|
220
|
+
return
|
221
|
+
}
|
222
|
+
this.validationStatus = "error"
|
223
|
+
return
|
224
|
+
}
|
225
|
+
this.validationStatus = this.status
|
226
|
+
}
|
227
|
+
},
|
134
228
|
computed: {
|
229
|
+
validationTooltip() {
|
230
|
+
if (!this.useCustomTooltip) {
|
231
|
+
return this.getValidationMessage
|
232
|
+
}
|
233
|
+
|
234
|
+
// set default-tooltip if customTooltip is not set
|
235
|
+
if (this.validationStatus === 'error') {
|
236
|
+
return this.getMessage("cmdformelement.validationTooltip.an_error_occurred")
|
237
|
+
} else if (this.validationStatus === 'success') {
|
238
|
+
return this.getMessage("cmdformelement.validationTooltip.information_is_filled_correctly")
|
239
|
+
}
|
240
|
+
return this.getMessage("cmdformelement.validationTooltip.open_field_requirements")
|
241
|
+
},
|
135
242
|
// get ID for accessibility
|
136
243
|
labelId() {
|
137
|
-
if(this.$attrs.id !== undefined) {
|
244
|
+
if (this.$attrs.id !== undefined) {
|
138
245
|
return this.$attrs.id
|
139
246
|
}
|
140
247
|
return "label-" + createUuid()
|
@@ -150,19 +257,18 @@ export default {
|
|
150
257
|
}
|
151
258
|
}
|
152
259
|
},
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
this
|
157
|
-
}
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
}
|
260
|
+
watch: {
|
261
|
+
status: {
|
262
|
+
handler() {
|
263
|
+
this.updateStatus()
|
264
|
+
},
|
265
|
+
immediate: true
|
266
|
+
},
|
267
|
+
modelValue: {
|
268
|
+
handler() {
|
269
|
+
this.updateStatus()
|
270
|
+
},
|
271
|
+
immediate: true
|
166
272
|
}
|
167
273
|
}
|
168
274
|
}
|
@@ -174,5 +280,31 @@ export default {
|
|
174
280
|
display: flex;
|
175
281
|
gap: var(--default-gap);
|
176
282
|
}
|
283
|
+
|
284
|
+
/* overwrite default behavior from frontend-framework */
|
285
|
+
&.toggle-switch {
|
286
|
+
display: block;
|
287
|
+
}
|
288
|
+
|
289
|
+
/* overwrite default behavior from frontend-framework */
|
290
|
+
.label-text {
|
291
|
+
display: inline-flex;
|
292
|
+
|
293
|
+
> a[class*="icon"] {
|
294
|
+
margin-left: calc(var(--default-margin) / 2);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
|
298
|
+
&.has-state {
|
299
|
+
label {
|
300
|
+
color: var(--status-color);
|
301
|
+
}
|
302
|
+
|
303
|
+
&.multiple-switch {
|
304
|
+
label {
|
305
|
+
border-color: var(--status-color);
|
306
|
+
}
|
307
|
+
}
|
308
|
+
}
|
177
309
|
}
|
178
310
|
</style>
|
@@ -1,9 +1,9 @@
|
|
1
1
|
<template>
|
2
2
|
<div :class="['cmd-list-of-links', 'align-' + align, {box: styleAsBox, horizontal: orientation === 'horizontal', 'section-anchors': sectionAnchors}]">
|
3
|
-
<!-- begin
|
4
|
-
<
|
5
|
-
v-bind="
|
6
|
-
<!-- end
|
3
|
+
<!-- begin CmdHeadline -->
|
4
|
+
<CmdHeadline v-if="CmdHeadline"
|
5
|
+
v-bind="CmdHeadline" />
|
6
|
+
<!-- end CmdHeadline -->
|
7
7
|
|
8
8
|
<!-- begin list of links -->
|
9
9
|
<ul :class="['flex-container', {'no-gap': !useGap}]">
|
@@ -39,12 +39,12 @@ import {getRoute} from "../utilities.js"
|
|
39
39
|
import {openFancyBox} from "./CmdFancyBox.vue"
|
40
40
|
|
41
41
|
// import components
|
42
|
-
import
|
42
|
+
import CmdHeadline from "./CmdHeadline"
|
43
43
|
|
44
44
|
export default {
|
45
45
|
name: "CmdListOfLinks",
|
46
46
|
components: {
|
47
|
-
|
47
|
+
CmdHeadline
|
48
48
|
},
|
49
49
|
props: {
|
50
50
|
/**
|
@@ -75,9 +75,9 @@ export default {
|
|
75
75
|
default: "left"
|
76
76
|
},
|
77
77
|
/**
|
78
|
-
* properties for
|
78
|
+
* properties for CmdHeadline-component
|
79
79
|
*/
|
80
|
-
|
80
|
+
CmdHeadline: {
|
81
81
|
type: Object,
|
82
82
|
required: false
|
83
83
|
},
|