comand-component-library 4.0.1 → 4.0.3
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +32 -32
- package/dist/comand-component-library.js +3227 -1413
- package/dist/comand-component-library.umd.cjs +3 -4
- package/dist/index.html +16 -16
- package/dist/style.css +1 -1
- package/dist/styles/demopage-only.css +4 -0
- package/dist/styles/templates/casual.css +3 -0
- package/package.json +4 -4
- package/src/App.vue +2117 -0
- package/src/ComponentLibrary.vue +150 -586
- package/src/assets/data/fake-select-options.json +3 -2
- package/src/assets/data/form-elements.json +1 -1
- package/src/assets/styles/global-styles.scss +14 -10
- package/src/componentSettingsDataAndControls.vue +705 -0
- package/src/components/CmdAddressData.vue +1 -2
- package/src/components/CmdBox.vue +60 -42
- package/src/components/CmdCopyrightInformation.vue +5 -3
- package/src/components/CmdFakeSelect.vue +138 -67
- package/src/components/CmdFancyBox.vue +2 -2
- package/src/components/CmdFormElement.vue +53 -27
- package/src/components/CmdGoogleMaps.vue +5 -0
- package/src/components/CmdHeadline.vue +13 -5
- package/src/components/CmdIcon.vue +6 -2
- package/src/components/CmdImage.vue +6 -1
- package/src/components/CmdImageGallery.vue +15 -4
- package/src/components/CmdInputGroup.vue +76 -24
- package/src/components/CmdListOfLinks.vue +20 -7
- package/src/components/CmdListOfRequirements.vue +10 -18
- package/src/components/CmdLoginForm.vue +14 -2
- package/src/components/CmdMainNavigation.vue +5 -1
- package/src/components/CmdMultistepFormProgressBar.vue +12 -7
- package/src/components/CmdOpeningHoursItem.vue +1 -3
- package/src/components/CmdPagination.vue +5 -1
- package/src/components/CmdSiteFooter.vue +11 -1
- package/src/components/CmdSiteHeader.vue +2 -0
- package/src/components/CmdSlideButton.vue +7 -1
- package/src/components/CmdSlideshow.vue +33 -5
- package/src/components/CmdSocialNetworks.vue +18 -13
- package/src/components/CmdSocialNetworksItem.vue +5 -1
- package/src/components/CmdSystemMessage.vue +7 -1
- package/src/components/CmdTabs.vue +5 -5
- package/src/components/CmdTextImageBlock.vue +11 -2
- package/src/components/CmdThumbnailScroller.vue +22 -4
- package/src/components/CmdTooltip.vue +49 -14
- package/src/components/CmdTooltipForFormElements.vue +96 -0
- package/src/components/CmdUploadForm.vue +25 -20
- package/src/components/CmdWidthLimitationWrapper.vue +1 -1
- package/src/components/ComponentSettings.vue +1 -1
- package/src/main.js +1 -1
- package/src/assets/data/accordion.json +0 -45
@@ -20,8 +20,8 @@
|
|
20
20
|
<span class="label-text">
|
21
21
|
<span :id="htmlId">{{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup></span>
|
22
22
|
|
23
|
-
<!-- begin
|
24
|
-
<
|
23
|
+
<!-- begin CmdTooltipForFormElements -->
|
24
|
+
<CmdTooltipForFormElements
|
25
25
|
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
26
26
|
ref="tooltip"
|
27
27
|
:validationStatus="validationStatus"
|
@@ -30,9 +30,9 @@
|
|
30
30
|
:cmdListOfRequirements="listOfRequirements"
|
31
31
|
:role="validationStatus === 'error' ? 'alert' : 'dialog'"
|
32
32
|
/>
|
33
|
-
<!-- end
|
33
|
+
<!-- end CmdTooltipForFormElements -->
|
34
34
|
|
35
|
-
<a v-if="$attrs.required || inputRequirements.length"
|
35
|
+
<a v-if="($attrs.required || inputRequirements.length) && showStatusIcon"
|
36
36
|
href="#"
|
37
37
|
@click.prevent
|
38
38
|
:title="!useCustomTooltip ? getValidationMessage : ''"
|
@@ -40,8 +40,8 @@
|
|
40
40
|
aria-live="assertive"
|
41
41
|
:id="tooltipId">
|
42
42
|
<!-- begin CmdIcon -->
|
43
|
-
<CmdIcon :iconClass="getStatusIconClass"
|
44
|
-
|
43
|
+
<CmdIcon :iconClass="getStatusIconClass"/>
|
44
|
+
<!-- end CmdIcon -->
|
45
45
|
</a>
|
46
46
|
</span>
|
47
47
|
<!-- end label -->
|
@@ -51,7 +51,8 @@
|
|
51
51
|
<!-- begin default/selected-option -->
|
52
52
|
<a href="#" @click.prevent="toggleOptions" @blur="onBlur" :title="optionIcon?.tooltip">
|
53
53
|
<!-- begin show flag -->
|
54
|
-
<img v-if="type === 'country' && optionCountry" :src="pathFlag(optionCountry)" :alt="optionCountry"
|
54
|
+
<img v-if="type === 'country' && optionCountry" :src="pathFlag(optionCountry)" :alt="optionCountry"
|
55
|
+
:class="['flag', optionCountry]"/>
|
55
56
|
<!-- end show flag -->
|
56
57
|
|
57
58
|
<!-- begin show color-box -->
|
@@ -60,7 +61,8 @@
|
|
60
61
|
|
61
62
|
<!-- begin optional icon -->
|
62
63
|
<!-- begin CmdIcon -->
|
63
|
-
<CmdIcon v-if="optionIcon?.iconClass" :type="optionIcon?.iconType"
|
64
|
+
<CmdIcon v-if="optionIcon?.iconClass" :type="optionIcon?.iconType"
|
65
|
+
:iconClass="optionIcon?.iconClass"/>
|
64
66
|
<!-- end CmdIcon -->
|
65
67
|
<!-- end optional icon -->
|
66
68
|
|
@@ -83,7 +85,8 @@
|
|
83
85
|
|
84
86
|
<!-- begin default dropdown (incl. optional icon) -->
|
85
87
|
<ul v-if="type === 'default' && showOptions" role="listbox">
|
86
|
-
<li v-for="(option, index) in selectData" :key="index" role="option"
|
88
|
+
<li v-for="(option, index) in selectData" :key="index" role="option"
|
89
|
+
:aria-selected="option.value === modelValue">
|
87
90
|
<!-- begin type 'href' -->
|
88
91
|
<a v-if="optionLinkType === 'href'"
|
89
92
|
href="#" @click.prevent="selectOption(option.value)"
|
@@ -91,16 +94,18 @@
|
|
91
94
|
:title="option.tooltip"
|
92
95
|
>
|
93
96
|
<!-- begin CmdIcon -->
|
94
|
-
<CmdIcon v-if="option.iconClass" :iconClass="option.iconClass" :type="option.iconType"
|
97
|
+
<CmdIcon v-if="option.iconClass" :iconClass="option.iconClass" :type="option.iconType"/>
|
95
98
|
<!-- end CmdIcon -->
|
96
99
|
<span v-if="option.text">{{ option.text }}</span>
|
97
100
|
</a>
|
98
101
|
<!-- end type 'href' -->
|
99
102
|
|
100
103
|
<!-- begin type 'router' -->
|
101
|
-
<router-link v-if="optionLinkType === 'router'" to="#"
|
104
|
+
<router-link v-if="optionLinkType === 'router'" to="#"
|
105
|
+
@click.prevent="selectOption(option.value)"
|
106
|
+
:class="{'active' : option.value === modelValue}">
|
102
107
|
<!-- begin CmdIcon -->
|
103
|
-
<CmdIcon v-if="option.iconClass" :iconClass="option.iconClass" :type="option.iconType"
|
108
|
+
<CmdIcon v-if="option.iconClass" :iconClass="option.iconClass" :type="option.iconType"/>
|
104
109
|
<!-- end CmdIcon -->
|
105
110
|
<span>{{ option.text }}</span>
|
106
111
|
</router-link>
|
@@ -110,10 +115,12 @@
|
|
110
115
|
<!-- end default dropdown (incl. optional icon) -->
|
111
116
|
|
112
117
|
<!-- begin dropdown with checkboxes/countries/colors -->
|
113
|
-
<ul v-else-if="type !== 'default' && type !== 'content' && showOptions"
|
118
|
+
<ul v-else-if="type !== 'default' && type !== 'content' && showOptions"
|
119
|
+
:class="{'checkbox-options': type === 'checkboxOptions'}" :aria-expanded="showOptions">
|
114
120
|
<li v-for="(option, index) in selectData" :key="index">
|
115
121
|
<!-- begin checkboxes -->
|
116
|
-
<label v-if="type === 'checkboxOptions'" :for="'option-' + (index + 1)"
|
122
|
+
<label v-if="type === 'checkboxOptions'" :for="'option-' + (index + 1)"
|
123
|
+
:class="{'active' : modelValue.includes(`${option.value}`)}">
|
117
124
|
<input type="checkbox" :value="option.value" @change="optionSelect"
|
118
125
|
:checked="compareValues(option.value)" :id="'option-' + (index + 1)"/>
|
119
126
|
<span>{{ option.text }}</span>
|
@@ -122,7 +129,8 @@
|
|
122
129
|
|
123
130
|
<!-- begin country-flags -->
|
124
131
|
<a v-else-if="type === 'country'" href="#"
|
125
|
-
@click.prevent="selectOption(option.value)"
|
132
|
+
@click.prevent="selectOption(option.value)"
|
133
|
+
:class="{'active' : option.value === modelValue}">
|
126
134
|
<img class="flag" :src="pathFlag(option.value)"
|
127
135
|
:alt="option.text"/>
|
128
136
|
<span>{{ option.text }}</span>
|
@@ -130,7 +138,8 @@
|
|
130
138
|
<!-- end country-flags -->
|
131
139
|
|
132
140
|
<!-- begin color-boxes -->
|
133
|
-
<a v-else-if="type === 'color'" href="#" @click.prevent="selectOption(option.value)"
|
141
|
+
<a v-else-if="type === 'color'" href="#" @click.prevent="selectOption(option.value)"
|
142
|
+
:class="{'active' : option.value === modelValue}">
|
134
143
|
<span class="color" :style="'background: ' + option.value"></span>
|
135
144
|
<span>{{ option.text }}</span>
|
136
145
|
</a>
|
@@ -141,8 +150,10 @@
|
|
141
150
|
<li v-if="showSelectAllOptions && type === 'checkboxOptions'" class="select-all-options">
|
142
151
|
<a href="#" @click.prevent="toggleAllOptions">
|
143
152
|
<!-- begin CmdIcon -->
|
144
|
-
<CmdIcon v-if="!allOptionsSelected" :iconClass="iconSelectAllOptions.iconClass"
|
145
|
-
|
153
|
+
<CmdIcon v-if="!allOptionsSelected" :iconClass="iconSelectAllOptions.iconClass"
|
154
|
+
:type="iconSelectAllOptions.iconType"/>
|
155
|
+
<CmdIcon v-else :iconClass="iconDeselectAllOptions.iconClass"
|
156
|
+
:type="iconDeselectAllOptions.iconType"/>
|
146
157
|
<!-- end CmdIcon -->
|
147
158
|
<span>{{ selectAllOptionsText }}</span>
|
148
159
|
</a>
|
@@ -191,11 +202,18 @@ export default {
|
|
191
202
|
/**
|
192
203
|
* set different default selectbox-types for
|
193
204
|
*
|
194
|
-
* @allowedValues: default, color, country, checkboxOptions
|
205
|
+
* @allowedValues: default, color, country, content, checkboxOptions
|
195
206
|
*/
|
196
207
|
type: {
|
197
208
|
type: String,
|
198
|
-
default: "default"
|
209
|
+
default: "default",
|
210
|
+
validator(value) {
|
211
|
+
return value === "default" ||
|
212
|
+
value === "color" ||
|
213
|
+
value === "country" ||
|
214
|
+
value === "content" ||
|
215
|
+
value === "checkboxOptions"
|
216
|
+
}
|
199
217
|
},
|
200
218
|
/**
|
201
219
|
* set type of option-links
|
@@ -204,7 +222,11 @@ export default {
|
|
204
222
|
*/
|
205
223
|
optionLinkType: {
|
206
224
|
type: String,
|
207
|
-
default: "href"
|
225
|
+
default: "href",
|
226
|
+
validator(value) {
|
227
|
+
return value === "href" ||
|
228
|
+
value === "router"
|
229
|
+
}
|
208
230
|
},
|
209
231
|
/**
|
210
232
|
* set default v-model (must be named modelValue in Vue3)
|
@@ -234,12 +256,19 @@ export default {
|
|
234
256
|
/**
|
235
257
|
* status (i.e. for validation)
|
236
258
|
*
|
237
|
-
* @allowedValues: error, warning, success, info
|
259
|
+
* @allowedValues: "" , error, warning, success, info
|
238
260
|
* @affectsStyling: true
|
239
261
|
*/
|
240
262
|
status: {
|
241
263
|
type: String,
|
242
|
-
required: false
|
264
|
+
required: false,
|
265
|
+
validator(value) {
|
266
|
+
return value === "" ||
|
267
|
+
value === "error" ||
|
268
|
+
value === "warning" ||
|
269
|
+
value === "success" ||
|
270
|
+
value === "info"
|
271
|
+
}
|
243
272
|
},
|
244
273
|
/**
|
245
274
|
* icon for dropdown-icon (i.e. an angle/arrow)
|
@@ -273,6 +302,13 @@ export default {
|
|
273
302
|
type: Boolean,
|
274
303
|
default: true
|
275
304
|
},
|
305
|
+
/**
|
306
|
+
* activate if interactive status-icon (to show requirements) should be shown inline with label
|
307
|
+
*/
|
308
|
+
showStatusIcon: {
|
309
|
+
type: Boolean,
|
310
|
+
default: true
|
311
|
+
},
|
276
312
|
/**
|
277
313
|
* path to flag-files (will be combined with flag isoCode to load svg)
|
278
314
|
*/
|
@@ -284,8 +320,8 @@ export default {
|
|
284
320
|
* default text if no option is selected (and first option is not used)
|
285
321
|
*/
|
286
322
|
textPleaseSelect: {
|
287
|
-
|
288
|
-
|
323
|
+
type: String,
|
324
|
+
default: "Please select\u2026"
|
289
325
|
},
|
290
326
|
/**
|
291
327
|
* set icon for "select all"-option
|
@@ -334,7 +370,7 @@ export default {
|
|
334
370
|
|
335
371
|
// if find() returns some data, return this data
|
336
372
|
if (result) {
|
337
|
-
|
373
|
+
return result.text
|
338
374
|
}
|
339
375
|
}
|
340
376
|
|
@@ -369,7 +405,7 @@ export default {
|
|
369
405
|
},
|
370
406
|
optionCountry() {
|
371
407
|
if (this.type === "country") {
|
372
|
-
|
408
|
+
return this.modelValue || this.selectData?.[0]?.value
|
373
409
|
}
|
374
410
|
return null
|
375
411
|
},
|
@@ -498,17 +534,11 @@ export default {
|
|
498
534
|
}
|
499
535
|
</script>
|
500
536
|
|
501
|
-
<style
|
537
|
+
<style>
|
502
538
|
/* begin cmd-fake-select ------------------------------------------------------------------------------------------ */
|
503
|
-
@mixin disabled-styles {
|
504
|
-
color: var(--disabled-color);
|
505
|
-
border-color: var(--disabled-color);
|
506
|
-
background: var(--disabled-background-color);
|
507
|
-
}
|
508
|
-
|
509
539
|
.cmd-fake-select {
|
510
540
|
align-self: flex-end;
|
511
|
-
border-radius: var(--border-radius);
|
541
|
+
border-radius: var(--default-border-radius);
|
512
542
|
|
513
543
|
> span:first-child {
|
514
544
|
a {
|
@@ -522,10 +552,11 @@ export default {
|
|
522
552
|
display: block;
|
523
553
|
min-width: 0;
|
524
554
|
box-shadow: none;
|
525
|
-
border-radius: var(--border-radius);
|
555
|
+
border-radius: var(--default-border-radius);
|
526
556
|
|
527
557
|
> li {
|
528
558
|
height: 100%;
|
559
|
+
border-radius: var(--default-border-radius);
|
529
560
|
|
530
561
|
&:first-child {
|
531
562
|
> a {
|
@@ -533,6 +564,7 @@ export default {
|
|
533
564
|
border: var(--default-border);
|
534
565
|
background: var(--color-scheme-background-color);
|
535
566
|
color: var(--color-scheme-text-color);
|
567
|
+
border-radius: var(--default-border-radius);
|
536
568
|
|
537
569
|
span, [class*="icon"] {
|
538
570
|
color: var(--color-scheme-text-color);
|
@@ -562,11 +594,27 @@ export default {
|
|
562
594
|
|
563
595
|
&.open {
|
564
596
|
border-bottom: 0;
|
597
|
+
ul {
|
598
|
+
border-bottom-left-radius: var(--default-border-radius);
|
599
|
+
border-bottom-right-radius: var(--default-border-radius);
|
600
|
+
|
601
|
+
> li {
|
602
|
+
&:first-child {
|
603
|
+
> a {
|
604
|
+
border-color: var(--primary-color);
|
605
|
+
border-bottom-left-radius: 0;
|
606
|
+
border-bottom-right-radius: 0;
|
607
|
+
}
|
608
|
+
}
|
609
|
+
}
|
610
|
+
|
611
|
+
> li:last-child {
|
612
|
+
border-bottom-left-radius: inherit;
|
613
|
+
border-bottom-right-radius: inherit;
|
565
614
|
|
566
|
-
> li {
|
567
|
-
&:first-child {
|
568
615
|
> a {
|
569
|
-
border-
|
616
|
+
border-bottom-left-radius: inherit;
|
617
|
+
border-bottom-right-radius: inherit;
|
570
618
|
}
|
571
619
|
}
|
572
620
|
}
|
@@ -586,7 +634,6 @@ export default {
|
|
586
634
|
border-bottom: var(--default-border);
|
587
635
|
text-decoration: none;
|
588
636
|
|
589
|
-
|
590
637
|
&:hover, &:active, &:focus {
|
591
638
|
background: var(--primary-color);
|
592
639
|
|
@@ -638,8 +685,8 @@ export default {
|
|
638
685
|
z-index: 10;
|
639
686
|
min-width: 100%;
|
640
687
|
margin: 0;
|
641
|
-
border-bottom-right-radius: var(--border-radius);
|
642
|
-
border-bottom-left-radius: var(--border-radius);
|
688
|
+
border-bottom-right-radius: var(--default-border-radius);
|
689
|
+
border-bottom-left-radius: var(--default-border-radius);
|
643
690
|
background: var(--color-scheme-background-color);
|
644
691
|
border: var(--primary-border);
|
645
692
|
|
@@ -672,45 +719,36 @@ export default {
|
|
672
719
|
}
|
673
720
|
}
|
674
721
|
|
675
|
-
|
722
|
+
/* use additional class in selector to gain high specificity */
|
676
723
|
&.has-state.label {
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
border-color: var(--status-color);
|
681
|
-
|
682
|
-
> span, [class*="icon-"] {
|
683
|
-
color: var(--status-color);
|
684
|
-
}
|
724
|
+
&.error * {
|
725
|
+
--status-color: var(--error-color);
|
726
|
+
}
|
685
727
|
|
686
|
-
|
687
|
-
|
728
|
+
&.success * {
|
729
|
+
--status-color: var(--success-color);
|
730
|
+
}
|
688
731
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
}
|
693
|
-
}
|
732
|
+
.label-text {
|
733
|
+
> span, [class*="icon-"] {
|
734
|
+
color: var(--status-color);
|
694
735
|
}
|
695
736
|
}
|
696
|
-
}
|
697
737
|
|
698
|
-
&.disabled {
|
699
738
|
> ul {
|
700
|
-
> li {
|
739
|
+
> li:first-child {
|
701
740
|
> a {
|
702
|
-
|
741
|
+
border-color: var(--status-color);
|
703
742
|
|
704
|
-
span {
|
705
|
-
color: var(--
|
743
|
+
> span, [class*="icon-"] {
|
744
|
+
color: var(--status-color);
|
706
745
|
}
|
707
746
|
|
708
747
|
&:hover, &:active, &:focus {
|
709
|
-
|
710
|
-
@include disabled-styles;
|
748
|
+
background: var(--color-scheme-background-color);
|
711
749
|
|
712
750
|
span {
|
713
|
-
color: var(--
|
751
|
+
color: var(--status-color);
|
714
752
|
}
|
715
753
|
}
|
716
754
|
}
|
@@ -748,6 +786,39 @@ export default {
|
|
748
786
|
}
|
749
787
|
}
|
750
788
|
}
|
789
|
+
</style>
|
790
|
+
|
791
|
+
<style lang="scss">
|
792
|
+
@mixin disabled-styles {
|
793
|
+
color: var(--disabled-color);
|
794
|
+
border-color: var(--disabled-color);
|
795
|
+
background: var(--disabled-background-color);
|
796
|
+
}
|
797
|
+
|
798
|
+
.cmd-fake-select {
|
799
|
+
&.disabled {
|
800
|
+
> ul {
|
801
|
+
> li {
|
802
|
+
> a {
|
803
|
+
@include disabled-styles;
|
804
|
+
|
805
|
+
span {
|
806
|
+
color: var(--disabled-color);
|
807
|
+
}
|
808
|
+
|
809
|
+
&:hover, &:active, &:focus {
|
810
|
+
cursor: not-allowed;
|
811
|
+
@include disabled-styles;
|
812
|
+
|
813
|
+
span {
|
814
|
+
color: var(--disabled-color);
|
815
|
+
}
|
816
|
+
}
|
817
|
+
}
|
818
|
+
}
|
819
|
+
}
|
820
|
+
}
|
821
|
+
}
|
751
822
|
|
752
823
|
/* end cmd-fake-select ------------------------------------------------------------------------------------------ */
|
753
824
|
</style>
|
@@ -480,7 +480,7 @@ export default FancyBox
|
|
480
480
|
min-width: 30vw;
|
481
481
|
min-height: 30vh;
|
482
482
|
background: var(--pure-white);
|
483
|
-
border-radius: var(--border-radius);
|
483
|
+
border-radius: var(--default-border-radius);
|
484
484
|
overflow: hidden;
|
485
485
|
gap: calc(var(--default-gap) / 2);
|
486
486
|
|
@@ -569,7 +569,7 @@ export default FancyBox
|
|
569
569
|
min-height: 0;
|
570
570
|
|
571
571
|
&[class*="print"] > [class*="icon-"] {
|
572
|
-
color: var(--text-color);
|
572
|
+
color: var(--default-text-color);
|
573
573
|
}
|
574
574
|
|
575
575
|
&.print-grayscale {
|
@@ -28,17 +28,16 @@
|
|
28
28
|
<sup v-if="$attrs.required" aria-hidden="true">*</sup>
|
29
29
|
</span>
|
30
30
|
|
31
|
-
<!-- begin
|
32
|
-
<
|
31
|
+
<!-- begin CmdTooltipForFormElements -->
|
32
|
+
<CmdTooltipForFormElements
|
33
33
|
v-if="useCustomTooltip && (validationStatus === '' || validationStatus === 'error')"
|
34
34
|
ref="tooltip"
|
35
35
|
:validationStatus="validationStatus"
|
36
|
-
:validationMessage="getValidationMessage"
|
37
36
|
:relatedId="tooltipId"
|
38
37
|
:cmdListOfRequirements="listOfRequirements"
|
39
38
|
:role="validationStatus === 'error' ? 'alert' : 'dialog'"
|
40
39
|
/>
|
41
|
-
<!-- end
|
40
|
+
<!-- end CmdTooltipForFormElements -->
|
42
41
|
|
43
42
|
<a v-if="($attrs.required || inputRequirements.length) && showStatusIcon"
|
44
43
|
href="#"
|
@@ -163,22 +162,27 @@
|
|
163
162
|
:id="htmlId"
|
164
163
|
@blur="onBlur"
|
165
164
|
@change="$emit('update:modelValue', $event.target.value)">
|
166
|
-
<option
|
167
|
-
|
165
|
+
<option
|
166
|
+
v-for="(option, index) in selectOptions"
|
167
|
+
:key="index"
|
168
|
+
:value="option.value"
|
169
|
+
:selected="option.value === modelValue"
|
170
|
+
>
|
171
|
+
{{ option.text }}
|
168
172
|
</option>
|
169
173
|
</select>
|
170
174
|
<!-- end selectbox -->
|
171
175
|
|
172
176
|
<!-- begin textarea -->
|
173
|
-
<textarea
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
177
|
+
<textarea
|
178
|
+
v-if="element === 'textarea'"
|
179
|
+
v-bind="elementAttributes"
|
180
|
+
:id="htmlId"
|
181
|
+
:value="modelValue"
|
182
|
+
:maxlength="getMaxLength()"
|
183
|
+
@input="onInput"
|
184
|
+
@focus="tooltip = true"
|
185
|
+
@blur="onBlur"></textarea><!-- no line-break to avoid empty spaces inside textarea -->
|
182
186
|
<span v-if="element === 'textarea' && showCharactersTextarea" class="characters-left-wrapper">
|
183
187
|
<span v-if="textCharactersLeft">{{ textCharactersLeft }}</span>
|
184
188
|
<span :class="['characters-left', {error: charactersLeft === 0}]">{{ charactersLeft }}</span>
|
@@ -390,7 +394,7 @@ export default {
|
|
390
394
|
required: false
|
391
395
|
},
|
392
396
|
/**
|
393
|
-
* activate if interactive status-icon (to show requirements) should be shown
|
397
|
+
* activate if interactive status-icon (to show requirements) should be shown inline with label
|
394
398
|
*/
|
395
399
|
showStatusIcon: {
|
396
400
|
type: Boolean,
|
@@ -441,13 +445,20 @@ export default {
|
|
441
445
|
/**
|
442
446
|
* set status for label and form-element
|
443
447
|
*
|
444
|
-
* @allowedValues: error, warning, success, info
|
448
|
+
* @allowedValues: "", error, warning, success, info
|
445
449
|
*
|
446
450
|
* @affectsStyling: true
|
447
451
|
*/
|
448
452
|
status: {
|
449
453
|
type: String,
|
450
|
-
required: false
|
454
|
+
required: false,
|
455
|
+
validator(value) {
|
456
|
+
return value === "" ||
|
457
|
+
value === "error" ||
|
458
|
+
value === "warning" ||
|
459
|
+
value === "success" ||
|
460
|
+
value === "info"
|
461
|
+
}
|
451
462
|
},
|
452
463
|
/**
|
453
464
|
* toggle display of number of used and allowed characters for textarea
|
@@ -513,7 +524,7 @@ export default {
|
|
513
524
|
* icon for error-validated items in list-of-requirements
|
514
525
|
*
|
515
526
|
* element-property must be set to 'input'
|
516
|
-
* showRequirements-subproperty (of CmdListOfRequirements)
|
527
|
+
* showRequirements-subproperty (of CmdListOfRequirements) must be set to 'true'
|
517
528
|
*
|
518
529
|
*/
|
519
530
|
iconHasStateError: {
|
@@ -720,6 +731,9 @@ export default {
|
|
720
731
|
}
|
721
732
|
},
|
722
733
|
methods: {
|
734
|
+
setFocus() {
|
735
|
+
this.$refs.label.querySelector("input, select, textarea")?.focus()
|
736
|
+
},
|
723
737
|
additionalStandardRequirements() {
|
724
738
|
const requirements = []
|
725
739
|
// check if field is type "email"
|
@@ -852,10 +866,19 @@ export default {
|
|
852
866
|
/* icon right aligned in input */
|
853
867
|
input + .place-inside {
|
854
868
|
left: auto;
|
855
|
-
right: .5rem
|
869
|
+
right: .5rem;
|
870
|
+
color: var(--hyperlink-color);
|
871
|
+
|
872
|
+
span {
|
873
|
+
color: inherit;
|
874
|
+
}
|
856
875
|
}
|
857
876
|
|
858
877
|
&.has-state, & + .cmd-tooltip {
|
878
|
+
* {
|
879
|
+
--status-color: var(--error-color);
|
880
|
+
}
|
881
|
+
|
859
882
|
::placeholder {
|
860
883
|
color: var(--status-color);
|
861
884
|
}
|
@@ -864,9 +887,13 @@ export default {
|
|
864
887
|
color: var(--status-color);
|
865
888
|
|
866
889
|
&.place-inside {
|
867
|
-
|
890
|
+
color: inherit;
|
868
891
|
}
|
869
892
|
}
|
893
|
+
|
894
|
+
&.success * {
|
895
|
+
--status-color: var(--success-color);
|
896
|
+
}
|
870
897
|
}
|
871
898
|
|
872
899
|
:is(input[type="checkbox"], input[type="radio"]):checked {
|
@@ -886,6 +913,10 @@ export default {
|
|
886
913
|
.search-field-wrapper {
|
887
914
|
margin: 0;
|
888
915
|
|
916
|
+
input[type="search"] {
|
917
|
+
border-radius: var(--default-border-radius);
|
918
|
+
}
|
919
|
+
|
889
920
|
a {
|
890
921
|
position: absolute;
|
891
922
|
top: 50%;
|
@@ -893,7 +924,7 @@ export default {
|
|
893
924
|
transform: translateY(-50%);
|
894
925
|
z-index: 100;
|
895
926
|
|
896
|
-
|
927
|
+
/* set styles to avoid overwriting by has-state-colors */
|
897
928
|
&.button {
|
898
929
|
span {
|
899
930
|
color: var(--color-scheme-background-color);
|
@@ -907,11 +938,6 @@ export default {
|
|
907
938
|
}
|
908
939
|
}
|
909
940
|
|
910
|
-
input:not(:only-child) {
|
911
|
-
border-top-right-radius: 0;
|
912
|
-
border-bottom-right-radius: 0;
|
913
|
-
}
|
914
|
-
|
915
941
|
a.button {
|
916
942
|
right: 0;
|
917
943
|
|
@@ -34,6 +34,11 @@ export default {
|
|
34
34
|
/* begin cmd-google-maps ---------------------------------------------------------------------------------------- */
|
35
35
|
.cmd-google-maps {
|
36
36
|
border: var(--default-border);
|
37
|
+
border-radius: var(--default-border-radius);
|
38
|
+
|
39
|
+
iframe {
|
40
|
+
border-radius: inherit;
|
41
|
+
}
|
37
42
|
}
|
38
43
|
/* end cmd-google-maps ------------------------------------------------------------------------------------------ */
|
39
44
|
</style>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<template>
|
2
|
+
<!-- begin default-view -->
|
2
3
|
<div v-if="!editModeContext || settingsContext || mainSidebarContext"
|
3
4
|
:class="['cmd-headline', {'has-pre-headline-text': preHeadlineText, 'has-icon': headlineIcon?.iconClass}, getTextAlign]">
|
4
|
-
|
5
5
|
<template v-if="preHeadlineText">
|
6
6
|
<component v-if="headlineText" :is="headlineTag">
|
7
7
|
<!-- begin CmdIcon -->
|
@@ -21,17 +21,20 @@
|
|
21
21
|
</span>
|
22
22
|
</component>
|
23
23
|
</template>
|
24
|
-
<component
|
24
|
+
<component :is="headlineTag">
|
25
25
|
<!-- begin CmdIcon -->
|
26
26
|
<CmdIcon v-if="headlineIcon" :iconClass="headlineIcon?.iconClass" :type="headlineIcon?.iconType"/>
|
27
27
|
<!-- end CmdIcon -->
|
28
|
+
|
28
29
|
<span>
|
29
|
-
|
30
|
-
|
30
|
+
<!-- being slot -->
|
31
|
+
<slot>{{ headlineText }}</slot>
|
31
32
|
<!-- end slot -->
|
32
33
|
</span>
|
33
34
|
</component>
|
34
35
|
</div>
|
36
|
+
<!-- end default-view -->
|
37
|
+
|
35
38
|
<!-- begin edit-mode -->
|
36
39
|
<EditComponentWrapper
|
37
40
|
v-else
|
@@ -142,7 +145,12 @@ export default {
|
|
142
145
|
*/
|
143
146
|
textAlign: {
|
144
147
|
type: String,
|
145
|
-
default: null
|
148
|
+
default: null,
|
149
|
+
validator(value) {
|
150
|
+
return value === "left" ||
|
151
|
+
value === "center" ||
|
152
|
+
value === "right"
|
153
|
+
}
|
146
154
|
}
|
147
155
|
},
|
148
156
|
computed: {
|