comand-component-library 3.1.69 → 3.1.72
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 +2 -2
- package/src/App.vue +468 -288
- package/src/assets/data/list-of-links.json +0 -1
- package/src/assets/fonts/iconfonts/logos-iconfont/icomoon.woff +0 -0
- package/src/assets/fonts/iconfonts/logos-iconfont/selection.json +1 -0
- package/src/assets/styles/global-styles.scss +26 -0
- package/src/assets/styles/logos-iconfont.css +47 -32
- package/src/components/CmdBox.vue +19 -7
- package/src/components/CmdCompanyLogo.vue +3 -3
- package/src/components/CmdCookieDisclaimer.vue +20 -4
- package/src/components/CmdFakeSelect.vue +31 -26
- package/src/components/CmdFormElement.vue +147 -129
- package/src/components/CmdInputGroup.vue +134 -3
- package/src/components/CmdMultistepFormProgressBar.vue +1 -1
- package/src/components/CmdProgressBar.vue +2 -2
- package/src/components/CmdTable.vue +1 -1
- package/src/components/CmdTabs.vue +0 -4
- package/src/components/CmdToggleDarkMode.vue +30 -10
- package/src/components/CmdTooltip.vue +1 -1
- package/src/components/CmdUploadForm.vue +1 -1
- package/src/index.js +1 -1
- package/src/mixins/CmdFormElement/DefaultMessageProperties.js +1 -1
- package/src/mixins/FieldValidation.js +1 -1
- package/src/mixins/GlobalDefaultMessageProperties.js +1 -2
- package/src/mixins/I18n.js +12 -2
- package/src/utils/{GetFileExtension.js → getFileExtension.js} +0 -0
- package/src/assets/fonts/iconfonts/logos-iconfont/logos-iconfont.json +0 -1
@@ -19,50 +19,81 @@
|
|
19
19
|
|
20
20
|
<!-- begin label-text (+ required asterisk) -->
|
21
21
|
<span v-if="labelText && $attrs.type !== 'checkbox' && $attrs.type !== 'radio'"
|
22
|
-
:class="!showLabel ? 'hidden' : undefined">
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
22
|
+
:class="['label-text', !showLabel ? 'hidden' : undefined]">
|
23
|
+
<span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
|
24
|
+
|
25
|
+
<!-- begin CmdTooltip -->
|
26
|
+
<CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
|
27
|
+
<!-- begin CmdSystemMessage -->
|
28
|
+
<CmdSystemMessage
|
29
|
+
v-if="getValidationMessage"
|
30
|
+
:message="getValidationMessage"
|
31
|
+
:validation-status="validationStatus"
|
32
|
+
:iconClose="{show: false}"
|
33
|
+
/>
|
34
|
+
<!-- end CmdSystemMessage -->
|
35
|
+
|
36
|
+
<template v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')">
|
37
|
+
<!-- begin list of requirements -->
|
38
|
+
<h6>
|
39
|
+
{{ getMessage("cmdformelement.headline.requirements_for_input") }}<br/>
|
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 -->
|
63
|
+
|
64
|
+
<a v-if="$attrs.required || inputRequirements.length"
|
65
|
+
href="#"
|
66
|
+
@click.prevent
|
67
|
+
:class="getStatusIconClass"
|
68
|
+
:title="validationTooltip"
|
69
|
+
:aria-errormessage="getValidationMessage"
|
70
|
+
aria-live="assertive"
|
71
|
+
:id="tooltipId"
|
72
|
+
:role="validationStatus === 'error' ? 'alert' : 'dialog'">
|
73
|
+
</a>
|
74
|
+
</span>
|
37
75
|
<!-- end label-text (+ required asterisk) -->
|
38
76
|
|
39
|
-
<!-- begin icon -->
|
40
|
-
<span
|
41
|
-
|
42
|
-
$attrs.type !== 'checkbox' &&
|
43
|
-
$attrs.type !== 'radio' &&
|
44
|
-
fieldIconClass
|
45
|
-
"
|
46
|
-
:class="['place-inside', fieldIconClass]"
|
47
|
-
></span>
|
48
|
-
<!-- end icon -->
|
77
|
+
<!-- begin icon inside field -->
|
78
|
+
<span v-if="$attrs.type !== 'checkbox' && $attrs.type !== 'radio' && fieldIconClass" :class="['place-inside', fieldIconClass]"></span>
|
79
|
+
<!-- end icon inside field -->
|
49
80
|
|
50
81
|
<!-- begin inputfield -->
|
51
|
-
<template
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
82
|
+
<template v-if="element === 'input' && $attrs.type !== 'checkbox' && $attrs.type !== 'radio' && $attrs.type !== 'search'">
|
83
|
+
<input
|
84
|
+
v-bind="elementAttributes"
|
85
|
+
:id="labelId"
|
86
|
+
:class="inputClass"
|
87
|
+
@focus="tooltip = true"
|
88
|
+
@blur="onBlur"
|
89
|
+
@input="onInput"
|
90
|
+
@mouseover="datalistFocus"
|
91
|
+
@keyup="checkForCapsLock"
|
92
|
+
:autocomplete="autocomplete"
|
93
|
+
:list="datalist ? datalist.id : null"
|
94
|
+
:value="modelValue"
|
95
|
+
:maxlength="getMaxLength()"
|
96
|
+
ref="input"
|
66
97
|
/>
|
67
98
|
</template>
|
68
99
|
<!-- end inputfield -->
|
@@ -90,18 +121,18 @@
|
|
90
121
|
<!-- begin checkbox and radiobutton -->
|
91
122
|
<template v-else-if="element === 'input' && ($attrs.type === 'checkbox' || $attrs.type === 'radio')">
|
92
123
|
<template v-if="!(onLabel && offLabel)">
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
124
|
+
<input
|
125
|
+
v-bind="elementAttributes"
|
126
|
+
@change="onChange"
|
127
|
+
@blur="onBlur"
|
128
|
+
:checked="isChecked"
|
129
|
+
:value="inputValue"
|
130
|
+
:class="[inputClass, validationStatus, toggleSwitchIconClass, { 'replace-input-type': replaceInputType, 'toggle-switch': toggleSwitch }]"
|
131
|
+
:id="labelId"
|
132
|
+
:disabled="$attrs.disabled"
|
133
|
+
:aria-invalid="validationStatus === 'error'"
|
134
|
+
/>
|
135
|
+
<span v-if="labelText" :class="['label-text', { hidden: !showLabel }]"><span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span></span>
|
105
136
|
</template>
|
106
137
|
<!-- begin labels for toggle-switch with switch-label -->
|
107
138
|
<template v-else-if="onLabel && offLabel">
|
@@ -113,12 +144,13 @@
|
|
113
144
|
:value="inputValue"
|
114
145
|
:class="{inputClass, validationStatus}"
|
115
146
|
:id="labelId"
|
147
|
+
:disabled="$attrs.disabled"
|
116
148
|
:aria-invalid="validationStatus === 'error'"
|
117
149
|
/>
|
118
|
-
<span class="label">{{ onLabel }}</span>
|
119
|
-
<span class="label">{{ offLabel }}</span>
|
150
|
+
<span class="label-text">{{ onLabel }}</span>
|
151
|
+
<span class="label-text">{{ offLabel }}</span>
|
120
152
|
</span>
|
121
|
-
<span v-if="labelText">
|
153
|
+
<span v-if="labelText" class="label-text">
|
122
154
|
<span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
|
123
155
|
</span>
|
124
156
|
</template>
|
@@ -154,19 +186,19 @@
|
|
154
186
|
|
155
187
|
<!-- begin searchfield -->
|
156
188
|
<template v-else-if="element === 'input' && $attrs.type === 'search'">
|
157
|
-
<
|
189
|
+
<span class="search-field-wrapper flex-container no-gap">
|
158
190
|
<input
|
159
191
|
v-bind="elementAttributes"
|
160
192
|
:id="labelId"
|
161
193
|
@input="onInput"
|
162
|
-
:maxlength="
|
194
|
+
:maxlength="getMaxLength()"
|
163
195
|
:value="modelValue"
|
164
196
|
/>
|
165
|
-
<a v-if="showSearchButton" href="#" class="button no-flex" :title="iconSearch.tooltip" @click.prevent="executeSearch">
|
197
|
+
<a v-if="showSearchButton" href="#" :class="['button no-flex', {disabled: $attrs.disabled}]" :title="iconSearch.tooltip" @click.prevent="executeSearch">
|
166
198
|
<span :class="iconSearch.iconClass"></span>
|
167
199
|
</a>
|
168
200
|
<a v-if="iconDelete.show" href="#" @click.prevent="$emit('update:modelValue', '')" :class="iconDelete.iconClass" :title="iconDelete.tooltip"></a>
|
169
|
-
</
|
201
|
+
</span>
|
170
202
|
</template>
|
171
203
|
</label>
|
172
204
|
<!-- end searchfield -->
|
@@ -181,45 +213,6 @@
|
|
181
213
|
<span v-if="nativeButton?.icon?.show && nativeButton?.icon?.position === 'after'" :class="nativeButton?.icon?.iconClass"></span>
|
182
214
|
</button>
|
183
215
|
<!-- end button -->
|
184
|
-
|
185
|
-
<!-- begin CmdTooltip -->
|
186
|
-
<CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
|
187
|
-
<!-- begin CmdSystemMessage -->
|
188
|
-
<CmdSystemMessage
|
189
|
-
v-if="getValidationMessage"
|
190
|
-
:message="getValidationMessage"
|
191
|
-
:validation-status="validationStatus"
|
192
|
-
:iconClose="{show: false}"
|
193
|
-
/>
|
194
|
-
<!-- end CmdSystemMessage -->
|
195
|
-
|
196
|
-
<template v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')">
|
197
|
-
<!-- begin list of requirements -->
|
198
|
-
<h6>
|
199
|
-
{{ getMessage("cmdformelement.headline.requirements_for_input") }}<br/>
|
200
|
-
"{{ labelText }}"
|
201
|
-
</h6>
|
202
|
-
<dl class="list-of-requirements">
|
203
|
-
<template v-for="(requirement, index) in inputRequirements" :key="index">
|
204
|
-
<dt aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">{{ requirement.message }}:</dt>
|
205
|
-
<dd :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">
|
206
|
-
<span aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.iconClass : iconHasStateError.iconClass"
|
207
|
-
:title="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.tooltip : iconHasStateError.tooltip"></span>
|
208
|
-
</dd>
|
209
|
-
</template>
|
210
|
-
</dl>
|
211
|
-
<!-- end list of requirements -->
|
212
|
-
|
213
|
-
<!-- begin helplink -->
|
214
|
-
<hr v-if="helplink?.show"/>
|
215
|
-
<a v-if="helplink?.show && helplink?.url" :href="helplink.url" :target="helplink.target" @click.prevent>
|
216
|
-
<span v-if="helplink.icon?.iconClass" :class="helplink.icon?.iconClass" :title="helplink.icon?.tooltip"></span>
|
217
|
-
<span v-if="helplink.text">{{ helplink.text }}</span>
|
218
|
-
</a>
|
219
|
-
<!-- end helplink -->
|
220
|
-
</template>
|
221
|
-
</CmdTooltip>
|
222
|
-
<!-- end CmdTooltip -->
|
223
216
|
</template>
|
224
217
|
|
225
218
|
<script>
|
@@ -228,7 +221,7 @@ import {createUuid} from "../utils/common.js"
|
|
228
221
|
|
229
222
|
// import mixins
|
230
223
|
import I18n from "../mixins/I18n"
|
231
|
-
import DefaultMessageProperties from "../mixins/
|
224
|
+
import DefaultMessageProperties from "../mixins/CmdFormElement/DefaultMessageProperties"
|
232
225
|
import FieldValidation from "../mixins/FieldValidation.js"
|
233
226
|
import Tooltip from "../mixins/Tooltip.js"
|
234
227
|
|
@@ -343,7 +336,7 @@ export default {
|
|
343
336
|
* allow checkbox/radio-buttons to get value from outside
|
344
337
|
*/
|
345
338
|
inputValue: {
|
346
|
-
type: String,
|
339
|
+
type: [String, Number],
|
347
340
|
required: false
|
348
341
|
},
|
349
342
|
/**
|
@@ -558,6 +551,33 @@ export default {
|
|
558
551
|
}
|
559
552
|
}
|
560
553
|
},
|
554
|
+
/**
|
555
|
+
* toggle if toggle-switch shows icons for checked/unchecked-status
|
556
|
+
*/
|
557
|
+
useIconsForToggleSwitch: {
|
558
|
+
type: Boolean,
|
559
|
+
default: false
|
560
|
+
},
|
561
|
+
/**
|
562
|
+
* icon for toggle-switch checked
|
563
|
+
*
|
564
|
+
* toggle-switch-property must be activated
|
565
|
+
* use-icons-for-toggle-switch-property must be activated
|
566
|
+
*/
|
567
|
+
toggleSwitchCheckedIconClass: {
|
568
|
+
type: String,
|
569
|
+
default: "icon-check-circle"
|
570
|
+
},
|
571
|
+
/**
|
572
|
+
* icon for toggle-switch unchecked
|
573
|
+
*
|
574
|
+
* toggle-switch-property must be activated
|
575
|
+
* use-icons-for-toggle-switch-property must be activated
|
576
|
+
*/
|
577
|
+
toggleSwitchUncheckedIconClass: {
|
578
|
+
type: String,
|
579
|
+
default: "icon-cancel-circle"
|
580
|
+
},
|
561
581
|
/**
|
562
582
|
* icon to toggle password-visibility
|
563
583
|
*
|
@@ -601,7 +621,7 @@ export default {
|
|
601
621
|
textarea: [...commonAttributes, "placeholder"]
|
602
622
|
}
|
603
623
|
const attrs = {}
|
604
|
-
if(attributes[this.element]) {
|
624
|
+
if (attributes[this.element]) {
|
605
625
|
Object.entries(this.$attrs).filter(([name]) => attributes[this.element].includes(name)).forEach(([name, value]) => attrs[name] = value)
|
606
626
|
}
|
607
627
|
return attrs
|
@@ -668,21 +688,31 @@ export default {
|
|
668
688
|
return this.$attrs.id
|
669
689
|
}
|
670
690
|
return "label-" + createUuid()
|
691
|
+
},
|
692
|
+
// toggle icons for toggle-switch
|
693
|
+
toggleSwitchIconClass() {
|
694
|
+
if(this.toggleSwitch && this.useIconsForToggleSwitch && this.toggleSwitchUncheckedIconClass && this.toggleSwitchCheckedIconClass) {
|
695
|
+
if(this.isChecked) {
|
696
|
+
return this.toggleSwitchCheckedIconClass
|
697
|
+
}
|
698
|
+
return this.toggleSwitchUncheckedIconClass
|
699
|
+
}
|
700
|
+
return null
|
671
701
|
}
|
672
702
|
},
|
673
703
|
methods: {
|
674
704
|
getDomElement() {
|
675
705
|
return this.$refs.label
|
676
706
|
},
|
707
|
+
// define max-length for different input-types
|
677
708
|
getMaxLength() {
|
678
709
|
if (this.$attrs.element === 'textarea') {
|
679
710
|
return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 5000
|
680
711
|
}
|
681
712
|
|
682
|
-
if (this.$attrs.type !== 'file') {
|
713
|
+
if (this.$attrs.type !== 'file' && this.$attrs.type !== 'number' && this.$attrs.type !== 'date') {
|
683
714
|
return this.$attrs.maxlength > 0 ? this.$attrs.maxlength : 255
|
684
715
|
}
|
685
|
-
|
686
716
|
return null
|
687
717
|
},
|
688
718
|
onBlur(event) {
|
@@ -773,29 +803,22 @@ export default {
|
|
773
803
|
</script>
|
774
804
|
|
775
805
|
<style lang="scss">
|
806
|
+
/* begin cmd-form-element ------------------------------------------------------------------------------------------ */
|
776
807
|
.cmd-form-element {
|
777
808
|
input + .place-inside[class*="icon"] {
|
778
809
|
left: auto;
|
779
810
|
right: .5rem
|
780
811
|
}
|
781
812
|
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
789
|
-
}
|
790
|
-
|
791
|
-
&.success {
|
792
|
-
--status-color: var(--success-color);
|
793
|
-
}
|
794
|
-
|
795
|
-
&.info {
|
796
|
-
--status-color: var(--info-color);
|
797
|
-
}
|
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
|
+
}
|
798
820
|
|
821
|
+
&.has-state, & + .cmd-tooltip {
|
799
822
|
::placeholder {
|
800
823
|
color: var(--status-color);
|
801
824
|
}
|
@@ -809,13 +832,9 @@ export default {
|
|
809
832
|
}
|
810
833
|
}
|
811
834
|
|
812
|
-
& + .cmd-tooltip {
|
813
|
-
border-color: var(--status-color);
|
814
|
-
}
|
815
|
-
|
816
835
|
&.inline {
|
817
836
|
& > span {
|
818
|
-
& > a {
|
837
|
+
& > a:not(.button) {
|
819
838
|
margin-left: calc(var(--default-margin) / 2);
|
820
839
|
}
|
821
840
|
}
|
@@ -841,7 +860,6 @@ export default {
|
|
841
860
|
|
842
861
|
.place-inside {
|
843
862
|
+ .search-field-wrapper {
|
844
|
-
|
845
863
|
input {
|
846
864
|
padding-left: calc(var(--default-padding) * 3);
|
847
865
|
}
|
@@ -857,7 +875,7 @@ export default {
|
|
857
875
|
border-color: var(--error-color);
|
858
876
|
|
859
877
|
span {
|
860
|
-
&.label {
|
878
|
+
&.label-text {
|
861
879
|
color: var(--error-color);
|
862
880
|
|
863
881
|
&::before {
|
@@ -874,7 +892,7 @@ export default {
|
|
874
892
|
border-color: var(--success-color);
|
875
893
|
|
876
894
|
span {
|
877
|
-
&.label {
|
895
|
+
&.label-text {
|
878
896
|
color: var(--success-color);
|
879
897
|
|
880
898
|
&::before {
|
@@ -887,7 +905,7 @@ export default {
|
|
887
905
|
}
|
888
906
|
}
|
889
907
|
}
|
890
|
-
|
891
|
-
/* end toggle-switch ------------------------------------------------------------------------------------------ */
|
908
|
+
/* end toggle-switch */
|
892
909
|
}
|
910
|
+
/* end cmd-form-element------------------------------------------------------------------------------------------ */
|
893
911
|
</style>
|
@@ -1,15 +1,94 @@
|
|
1
1
|
<template>
|
2
|
-
<div :class="['cmd-input-group', {inline: labelInline}]">
|
3
|
-
<span :class="['label', { hidden: !showLabel}]"
|
4
|
-
|
2
|
+
<div :class="['cmd-input-group label', {inline: labelInline, 'multiple-switch': multipleSwitch, disabled: disabled}]">
|
3
|
+
<span :class="['label-text', { hidden: !showLabel}]" :id="labelId" :aria-labelledby="labelId">
|
4
|
+
<span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
|
5
|
+
</span>
|
6
|
+
<span v-if="!useSlot" :class="['flex-container', {'no-flex': !stretchHorizontally, 'no-gap': multipleSwitch}]">
|
7
|
+
<label v-for="(inputElement, index) in inputElements" :key="index" :for="inputElement.id">
|
8
|
+
<input
|
9
|
+
:type="inputTypes"
|
10
|
+
:id="inputElement.id"
|
11
|
+
:name="inputElement.name"
|
12
|
+
:value="inputElement.value"
|
13
|
+
v-model="inputValue"
|
14
|
+
:disabled="disabled"
|
15
|
+
:class="{'replace-input-type': replaceInputType}"
|
16
|
+
/>
|
17
|
+
<span v-if="multipleSwitch && inputElement.iconClass" :class="inputElement.iconClass"></span>
|
18
|
+
<span v-if="inputElement.labelText">{{ inputElement.labelText }}</span>
|
19
|
+
</label>
|
20
|
+
</span>
|
21
|
+
|
22
|
+
<!-- begin useSlot -->
|
23
|
+
<div v-else class="flex-container no-flex">
|
24
|
+
<!-- begin slot -->
|
5
25
|
<slot></slot>
|
26
|
+
<!-- end slot -->
|
6
27
|
</div>
|
28
|
+
<!-- end useSlot -->
|
7
29
|
</div>
|
8
30
|
</template>
|
9
31
|
|
10
32
|
<script>
|
33
|
+
import {createUuid} from "../utils/common"
|
34
|
+
|
11
35
|
export default {
|
36
|
+
data() {
|
37
|
+
return {
|
38
|
+
value: ""
|
39
|
+
}
|
40
|
+
},
|
12
41
|
props: {
|
42
|
+
/**
|
43
|
+
* set value for v-model (must be named modelValue in vue3 if default v-model should be used)
|
44
|
+
*/
|
45
|
+
modelValue: {
|
46
|
+
type: [Array, String],
|
47
|
+
required: false
|
48
|
+
},
|
49
|
+
/**
|
50
|
+
* list of input-elements inside group
|
51
|
+
*
|
52
|
+
* useSlot-property must be set to 'false'
|
53
|
+
*/
|
54
|
+
inputElements: {
|
55
|
+
type: Array,
|
56
|
+
required: false
|
57
|
+
},
|
58
|
+
/**
|
59
|
+
* set type for inputs in group
|
60
|
+
*
|
61
|
+
* @allowedValues: checkbox, radio
|
62
|
+
*/
|
63
|
+
inputTypes: {
|
64
|
+
type: String,
|
65
|
+
default: "radio"
|
66
|
+
},
|
67
|
+
/**
|
68
|
+
* for replacing native checkboxes/radio-buttons by custom ones (based on frontend-framework)
|
69
|
+
*
|
70
|
+
* @affectsStyling: true
|
71
|
+
*/
|
72
|
+
replaceInputType: {
|
73
|
+
type: Boolean,
|
74
|
+
default: false
|
75
|
+
},
|
76
|
+
/**
|
77
|
+
* activate if input-elements should be given by slot
|
78
|
+
*/
|
79
|
+
useSlot: {
|
80
|
+
type: Boolean,
|
81
|
+
default: false
|
82
|
+
},
|
83
|
+
/**
|
84
|
+
* toggle multipleSwitch-styling
|
85
|
+
*
|
86
|
+
* @affectsStyling: true
|
87
|
+
*/
|
88
|
+
multipleSwitch: {
|
89
|
+
type: Boolean,
|
90
|
+
default: false
|
91
|
+
},
|
13
92
|
/**
|
14
93
|
* toggle label-text visibility
|
15
94
|
*/
|
@@ -32,6 +111,58 @@ export default {
|
|
32
111
|
labelInline: {
|
33
112
|
type: Boolean,
|
34
113
|
default: false
|
114
|
+
},
|
115
|
+
/**
|
116
|
+
* toggle if input-elements will be stretched horizontally
|
117
|
+
*
|
118
|
+
* @affectsStyling: true
|
119
|
+
*/
|
120
|
+
stretchHorizontally: {
|
121
|
+
type: Boolean,
|
122
|
+
default: false
|
123
|
+
},
|
124
|
+
/**
|
125
|
+
* define disabled-property to set disabled-style
|
126
|
+
*
|
127
|
+
* component cannot handle native disabled-attribute, because it is no native form-element
|
128
|
+
*/
|
129
|
+
disabled: {
|
130
|
+
type: Boolean,
|
131
|
+
default: false
|
132
|
+
}
|
133
|
+
},
|
134
|
+
computed: {
|
135
|
+
// get ID for accessibility
|
136
|
+
labelId() {
|
137
|
+
if(this.$attrs.id !== undefined) {
|
138
|
+
return this.$attrs.id
|
139
|
+
}
|
140
|
+
return "label-" + createUuid()
|
141
|
+
},
|
142
|
+
inputValue: {
|
143
|
+
// read inputValue
|
144
|
+
get() {
|
145
|
+
return this.modelValue
|
146
|
+
},
|
147
|
+
// set/write a value to update v-model for this component
|
148
|
+
set(value) {
|
149
|
+
this.$emit("update:modelValue", value)
|
150
|
+
}
|
151
|
+
}
|
152
|
+
},
|
153
|
+
methods: {
|
154
|
+
onChange(e) {
|
155
|
+
if (typeof this.value === "string") {
|
156
|
+
this.$emit("update:value", e.target.value)
|
157
|
+
} else if (this.value !== undefined) {
|
158
|
+
let values = [...this.value]
|
159
|
+
if (e.target.checked) {
|
160
|
+
values.push(e.target.value)
|
161
|
+
} else {
|
162
|
+
values = values.filter(value => value !== e.target.value)
|
163
|
+
}
|
164
|
+
this.$emit("update:modelValue", values)
|
165
|
+
}
|
35
166
|
}
|
36
167
|
}
|
37
168
|
}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<template>
|
2
2
|
<label class="cmd-progressbar" :for="id">
|
3
|
-
<span :class="{hidden: !showLabel}">{{ labelText }}</span>
|
3
|
+
<span :class="['label-text', {hidden: !showLabel}]">{{ labelText }}</span>
|
4
4
|
<span class="progressbar">
|
5
|
-
<span v-if="showLoadingStatus">{{ loadingStatus }}%</span><!-- do not place inside progress-tag (will not be displayed then) -->
|
5
|
+
<span v-if="showLoadingStatus">{{ loadingStatus }} %</span><!-- do not place inside progress-tag (will not be displayed then) -->
|
6
6
|
<progress v-bind="$attrs" :id="id" :value="loadingStatus"></progress>
|
7
7
|
</span>
|
8
8
|
</label>
|