comand-component-library 3.1.69 → 3.1.72
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 +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>
|