comand-component-library 3.1.73 → 3.1.76
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.
- 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/CmdSlideshow.vue +6 -6
- 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 +2 -2
- package/src/documentation/generated/CmdBankAccountDataPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdBoxPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdBoxSiteSearchPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdCookieDisclaimerPropertyDescriptions.json +7 -2
- package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +7 -2
- package/src/documentation/generated/CmdHeadlinePropertyDescriptions.json +22 -0
- package/src/documentation/generated/CmdInputGroupPropertyDescriptions.json +32 -1
- package/src/documentation/generated/CmdListOfLinksPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdListOfRequirementsPropertyDescriptions.json +32 -0
- package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +4 -4
- package/src/documentation/generated/CmdOpeningHoursPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdSiteFooterPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdSystemMessagePropertyDescriptions.json +5 -0
- package/src/documentation/generated/CmdTabsPropertyDescriptions.json +2 -2
- package/src/documentation/generated/CmdTooltipForInputElementsPropertyDescriptions.json +42 -0
- package/src/documentation/generated/CmdTooltipPropertyDescriptions.json +1 -1
- package/src/documentation/generated/CmdUploadFormPropertyDescriptions.json +14 -14
- 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
|
},
|