comand-component-library 3.1.71 → 3.1.74

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/dist/comand-component-library.css +1 -1
  2. package/dist/comand-component-library.umd.min.js +1 -1
  3. package/package.json +2 -2
  4. package/src/App.vue +314 -189
  5. package/src/assets/data/cookie-disclaimer.json +7 -6
  6. package/src/assets/styles/global-styles.scss +10 -40
  7. package/src/components/CmdBox.vue +7 -5
  8. package/src/components/CmdCookieDisclaimer.vue +76 -8
  9. package/src/components/CmdFakeSelect.vue +40 -50
  10. package/src/components/CmdFormElement.vue +32 -41
  11. package/src/components/CmdInputGroup.vue +158 -12
  12. package/src/components/CmdListOfRequirements.vue +128 -0
  13. package/src/components/CmdMainNavigation.vue +2 -2
  14. package/src/components/CmdToggleDarkMode.vue +27 -10
  15. package/src/components/CmdTooltip.vue +1 -1
  16. package/src/documentation/generated/CmdAddressDataPropertyDescriptions.json +32 -0
  17. package/src/documentation/generated/CmdBackToTopButtonPropertyDescriptions.json +12 -0
  18. package/src/documentation/generated/CmdBankAccountDataPropertyDescriptions.json +34 -0
  19. package/src/documentation/generated/CmdBoxPropertyDescriptions.json +96 -0
  20. package/src/documentation/generated/CmdBoxSiteSearchPropertyDescriptions.json +79 -0
  21. package/src/documentation/generated/CmdBoxWrapperPropertyDescriptions.json +47 -0
  22. package/src/documentation/generated/CmdBreadcrumbsPropertyDescriptions.json +17 -0
  23. package/src/documentation/generated/CmdCompanyLogoPropertyDescriptions.json +27 -0
  24. package/src/documentation/generated/CmdCookieDisclaimerPropertyDescriptions.json +37 -0
  25. package/src/documentation/generated/CmdCustomHeadlinePropertyDescriptions.json +22 -0
  26. package/src/documentation/generated/CmdFakeSelectPropertyDescriptions.json +84 -0
  27. package/src/documentation/generated/CmdFancyBoxPropertyDescriptions.json +62 -0
  28. package/src/documentation/generated/CmdFormElementPropertyDescriptions.json +253 -0
  29. package/src/documentation/generated/CmdFormFiltersPropertyDescriptions.json +32 -0
  30. package/src/documentation/generated/CmdFormPropertyDescriptions.json +40 -0
  31. package/src/documentation/generated/CmdGoogleMapsPropertyDescriptions.json +7 -0
  32. package/src/documentation/generated/CmdImageGalleryPropertyDescriptions.json +22 -0
  33. package/src/documentation/generated/CmdImageZoomPropertyDescriptions.json +12 -0
  34. package/src/documentation/generated/CmdInputGroupPropertyDescriptions.json +122 -0
  35. package/src/documentation/generated/CmdListOfLinksPropertyDescriptions.json +60 -0
  36. package/src/documentation/generated/CmdListOfRequirementsPropertyDescriptions.json +22 -0
  37. package/src/documentation/generated/CmdLoginFormPropertyDescriptions.json +90 -0
  38. package/src/documentation/generated/CmdMainNavigationPropertyDescriptions.json +62 -0
  39. package/src/documentation/generated/CmdMultistepFormProgressBarPropertyDescriptions.json +17 -0
  40. package/src/documentation/generated/CmdOpeningHoursPropertyDescriptions.json +42 -0
  41. package/src/documentation/generated/CmdPagerPropertyDescriptions.json +37 -0
  42. package/src/documentation/generated/CmdProgressBarPropertyDescriptions.json +32 -0
  43. package/src/documentation/generated/CmdShareButtonsPropertyDescriptions.json +34 -0
  44. package/src/documentation/generated/CmdSiteHeaderPropertyDescriptions.json +27 -0
  45. package/src/documentation/generated/CmdSlideButtonPropertyDescriptions.json +25 -0
  46. package/src/documentation/generated/CmdSlideshowPropertyDescriptions.json +42 -0
  47. package/src/documentation/generated/CmdSwitchLanguagePropertyDescriptions.json +7 -0
  48. package/src/documentation/generated/CmdSystemMessagePropertyDescriptions.json +40 -0
  49. package/src/documentation/generated/CmdTablePropertyDescriptions.json +72 -0
  50. package/src/documentation/generated/CmdTabsPropertyDescriptions.json +27 -0
  51. package/src/documentation/generated/CmdThumbnailScrollerPropertyDescriptions.json +32 -0
  52. package/src/documentation/generated/CmdTooltipPropertyDescriptions.json +17 -0
  53. package/src/documentation/generated/CmdUploadFormPropertyDescriptions.json +175 -0
  54. package/src/documentation/generated/CmdWidthLimitationWrapperPropertyDescriptions.json +41 -0
  55. package/src/mixins/CmdCookieDisclaimer/DefaultMessageProperties.js +10 -0
  56. package/src/mixins/FieldValidation.js +1 -1
@@ -4,10 +4,10 @@
4
4
  "cookies": [
5
5
  {
6
6
  "id": "cookie-sessionid",
7
+ "value": "sessionid",
7
8
  "description": "This cookie is required for functionality",
8
9
  "labelText": "SessionID",
9
- "checked": true,
10
- "status": "disabled",
10
+ "disabled": true,
11
11
  "linkDataPrivacy": {
12
12
  "label": "Details for this cookie:",
13
13
  "link": "/content/data-privacy-en.html",
@@ -16,10 +16,10 @@
16
16
  },
17
17
  {
18
18
  "id": "cookie-google-recaptcha",
19
+ "value": "google-recaptcha",
19
20
  "description": "This cookie prevents bots from sending forms",
20
21
  "labelText": "Google reCaptcha™",
21
- "checked": true,
22
- "status": "disabled",
22
+ "disabled": true,
23
23
  "linkDataPrivacy": {
24
24
  "label": "Details for this cookie:",
25
25
  "link": "https://policies.google.com/privacy?hl=en-US",
@@ -34,9 +34,10 @@
34
34
  "cookies": [
35
35
  {
36
36
  "id": "cookie-google-maps",
37
+ "value": "google-maps",
37
38
  "description": "This cookie enables the Google Map™",
38
39
  "labelText": "Google Maps™",
39
- "checked": false,
40
+ "disabled": false,
40
41
  "linkDataPrivacy": {
41
42
  "label": "Details for this cookie:",
42
43
  "link": "https://policies.google.com/privacy?hl=en-US",
@@ -46,9 +47,9 @@
46
47
  },
47
48
  {
48
49
  "id": "cookie-google-analytics",
50
+ "value": "google-analytics",
49
51
  "description": "This cookie collects anonymous data for statistics and improvements",
50
52
  "labelText": "Google Analytics™",
51
- "checked": false,
52
53
  "linkDataPrivacy": {
53
54
  "label": "Details for this cookie:",
54
55
  "link": "https://policies.google.com/privacy?hl=en-US",
@@ -173,7 +173,14 @@ body.avoid-scrolling {
173
173
  /* end product-listing --------------------------------------------------------------------------------------------------------------------------------------------------- */
174
174
 
175
175
  /* begin tooltip for cmd-form-element and cmd-fake-select ---------------------------------------------------------------------------------------------------------------- */
176
- .cmd-form-element, .cmd-fake-select {
176
+ .cmd-form-element, .cmd-fake-select, .cmd-input-group {
177
+ .cmd-tooltip {
178
+ position: absolute;
179
+ right: 0;
180
+ transform: translateY(calc(-100% - calc(var(--default-margin) / 2)));
181
+ left: auto !important; /* overwrite calculated inline-styles from javascript for cmd-tooltip-component */
182
+ top: 0 !important; /* overwrite calculated inline-styles from javascript for cmd-tooltip-component */
183
+ }
177
184
 
178
185
  &.has-state, & + .cmd-tooltip {
179
186
  .label-text {
@@ -190,7 +197,6 @@ body.avoid-scrolling {
190
197
  --status-color: var(--warning-color);
191
198
  }
192
199
 
193
-
194
200
  &.success {
195
201
  --status-color: var(--success-color);
196
202
  }
@@ -202,44 +208,6 @@ body.avoid-scrolling {
202
208
 
203
209
  & + .cmd-tooltip {
204
210
  border-color: var(--status-color);
205
-
206
- h6:last-of-type {
207
- margin-top: 0;
208
- }
209
-
210
- .list-of-requirements {
211
- .error {
212
- color: var(--error-color);
213
- }
214
-
215
- .warning {
216
- color: var(--warning-color);
217
- }
218
-
219
- .success {
220
- color: var(--success-color);
221
- }
222
-
223
- .info {
224
- color: var(--info-color);
225
- }
226
-
227
- span[class*="icon"] {
228
- font-size: 1.2rem;
229
- }
230
-
231
- & ~ a {
232
- display: flex;
233
- align-items: center;
234
- justify-content: center;
235
- text-align: center;
236
- text-decoration: none;
237
-
238
- span[class*="icon"] {
239
- font-size: 1.2rem;
240
- }
241
- }
242
- }
243
211
  }
244
212
  }
245
213
  /* end tooltip for cmd-form-element and cmd-fake-select ------------------------------------------------------------------------------------------------------------------ */
@@ -300,6 +268,7 @@ html {
300
268
  &.light-mode {
301
269
  /* assign default colors for custom light-mode set by class */
302
270
  --color-scheme-text-color: var(--light-mode-text-color);
271
+ --color-scheme-text-color-buttons: var(--light-mode-text-color-buttons);
303
272
  --color-scheme-background-color: var(--light-mode-background-color);
304
273
  --color-scheme-text-color-inverted: var(--dark-mode-text-color);
305
274
  --color-scheme-background-inverted: var(--dark-mode-background-color);
@@ -309,6 +278,7 @@ html {
309
278
  &.dark-mode {
310
279
  /* assign default colors for custom dark-mode set by class */
311
280
  --color-scheme-text-color: var(--dark-mode-text-color);
281
+ --color-scheme-text-color-buttons: var(--dark-mode-background-color);
312
282
  --color-scheme-background-color: var(--dark-mode-background-color);
313
283
  --color-scheme-text-color-inverted: var(--light-mode-text-color);
314
284
  --color-scheme-background-inverted: var(--light-mode-background-color);
@@ -8,9 +8,10 @@
8
8
  <slot name="header"></slot>
9
9
  <!-- end slot 'header' -->
10
10
  <a href="#"
11
+ class="toggle-icon"
11
12
  :title="open ? iconOpen.tooltip : iconClosed.tooltip"
12
13
  @click.prevent="toggleContentVisibility">
13
- <span class="toggle-icon" :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
14
+ <span :class="[open ? iconOpen.iconClass : iconClosed.iconClass]"></span>
14
15
  </a>
15
16
  </div>
16
17
  <!-- end collapsible header with slot -->
@@ -43,7 +44,7 @@
43
44
  </template>
44
45
 
45
46
  <!-- begin box-body -->
46
- <div v-if="open" class="box-body" aria-expanded="true">
47
+ <div v-if="open" class="box-body" aria-expanded="true" role="article">
47
48
  <!-- begin slot 'body' -->
48
49
  <slot name="body">
49
50
  <transition :name="toggleTransition">
@@ -313,8 +314,8 @@ export default {
313
314
  margin-bottom: 0;
314
315
  }
315
316
 
316
- &:not(.open):last-child {
317
- margin-top: auto;
317
+ &:not(.open) {
318
+ justify-content: flex-start;
318
319
  }
319
320
  }
320
321
 
@@ -334,9 +335,10 @@ export default {
334
335
 
335
336
  * {
336
337
  color: var(--pure-white);
338
+ margin-bottom: 0;
337
339
  }
338
340
 
339
- > [class*="icon"]:last-child {
341
+ > .toggle-icon, .toggle-icon > [class*="icon"] {
340
342
  font-size: 1rem;
341
343
  margin-left: auto;
342
344
  }
@@ -12,6 +12,7 @@
12
12
 
13
13
  <!-- begin slot for cookie-options -->
14
14
  <slot name="cookie-options">
15
+ <!-- begin required cookies -->
15
16
  <div v-if="cookieOptions.required" class="flex-container vertical">
16
17
  <CmdCustomHeadline v-if="cmdBoxRequiredCookies?.showHeadline" :headline-text="cmdBoxRequiredCookies?.headlineText" :headline-level="cmdBoxRequiredCookies?.headlineLevel "/>
17
18
  <!-- begin CmdBox -->
@@ -25,9 +26,13 @@
25
26
  <CmdFormElement
26
27
  element="input"
27
28
  type="checkbox"
28
- labelText="Google Analytics"
29
- id="google-analytics"
29
+ v-model="acceptedCookies"
30
+ :inputValue="cookie.value"
31
+ :labelText="cookie.labelText"
32
+ :disabled="cookie.disabled"
33
+ :id="cookie.id"
30
34
  :toggleSwitch="true"
35
+ :title="getMessage('cmdcookiedisclaimer.title.cookie_cannot_be_disabled')"
31
36
  />
32
37
  <!-- end CmdFormElement -->
33
38
  </template>
@@ -46,7 +51,11 @@
46
51
  </CmdBox>
47
52
  <!-- end CmdBox -->
48
53
  </div>
54
+ <!-- end required cookies -->
55
+
49
56
  <hr/>
57
+
58
+ <!-- begin optional cookies -->
50
59
  <div v-if="cookieOptions.optional" class="flex-container vertical">
51
60
  <CmdCustomHeadline v-if="cmdBoxOptionalCookies?.showHeadline" :headline-text="cmdBoxOptionalCookies?.headlineText" :headline-level="cmdBoxOptionalCookies?.headlineLevel "/>
52
61
  <!-- begin CmdBox -->
@@ -60,9 +69,13 @@
60
69
  <CmdFormElement
61
70
  element="input"
62
71
  type="checkbox"
63
- labelText="Google Analytics"
64
- id="google-analytics"
72
+ v-model="acceptedCookies"
73
+ :inputValue="cookie.value"
74
+ :labelText="cookie.labelText"
75
+ :disabled="cookie.disabled"
76
+ :id="cookie.id"
65
77
  :toggleSwitch="true"
78
+ :title="getMessage('cmdcookiedisclaimer.title.toggle_to_accept_cookie')"
66
79
  />
67
80
  <!-- end CmdFormElement -->
68
81
  </template>
@@ -81,6 +94,7 @@
81
94
  </CmdBox>
82
95
  <!-- end CmdBox -->
83
96
  </div>
97
+ <!-- end optional cookies -->
84
98
  </slot>
85
99
  <!-- end slot for cookie-options -->
86
100
 
@@ -90,10 +104,10 @@
90
104
 
91
105
  <!-- begin button-wrapper for 'accept'-buttons -->
92
106
  <div class="button-wrapper align-center">
93
- <button v-if="buttonLabelAcceptCurrentSettings" type="button" @click="acceptCookies('currentSettings')">
107
+ <button v-if="buttonLabelAcceptCurrentSettings" type="button" @click="acceptCurrentCookies">
94
108
  <span>{{ buttonLabelAcceptCurrentSettings }}</span>
95
109
  </button>
96
- <button v-if="buttonLabelAcceptAllCookies" type="button" class="primary" @click="acceptCookies('allCookies')">
110
+ <button v-if="buttonLabelAcceptAllCookies" type="button" class="primary" @click="acceptAllCookies">
97
111
  <span>{{ buttonLabelAcceptAllCookies }}</span>
98
112
  </button>
99
113
  </div>
@@ -103,6 +117,10 @@
103
117
  </template>
104
118
 
105
119
  <script>
120
+ // import mixins
121
+ import I18n from "../mixins/I18n"
122
+ import DefaultMessageProperties from "../mixins/CmdCookieDisclaimer/DefaultMessageProperties"
123
+
106
124
  // import components
107
125
  import CmdBox from "./CmdBox"
108
126
  import CmdCustomHeadline from "./CmdCustomHeadline"
@@ -110,6 +128,7 @@ import CmdFormElement from "./CmdFormElement"
110
128
 
111
129
  export default {
112
130
  name: "CmdCookieDisclaimer",
131
+ mixins: [I18n, DefaultMessageProperties],
113
132
  components: {
114
133
  CmdBox,
115
134
  CmdCustomHeadline,
@@ -122,6 +141,13 @@ export default {
122
141
  }
123
142
  },
124
143
  props: {
144
+ /**
145
+ * set default v-model (must be named modelValue in Vue3)
146
+ */
147
+ modelValue: {
148
+ type: Array,
149
+ required: false
150
+ },
125
151
  /**
126
152
  * properties for CmdCustomHeadline-component at top of cookie disclaimer
127
153
  */
@@ -185,9 +211,43 @@ export default {
185
211
  default: "Proceed with current settings!"
186
212
  }
187
213
  },
214
+ computed: {
215
+ acceptedCookies: {
216
+ get() {
217
+ const cookies = this.modelValue ? [...this.modelValue] : []
218
+ const requiredCookies = this.cookieOptions?.required?.cookies || []
219
+ for (let i = 0; i < requiredCookies.length; i++) {
220
+ if(!cookies.includes(requiredCookies[i].value)) {
221
+ cookies.push(requiredCookies[i].value)
222
+ }
223
+ }
224
+ return cookies
225
+ },
226
+ set(value) {
227
+ this.$emit("update:modelValue", value)
228
+ }
229
+ }
230
+ },
188
231
  methods: {
189
- acceptCookies(cookies) {
190
- this.$emit("close-cookie-disclaimer", cookies)
232
+ acceptCurrentCookies() {
233
+ this.$emit("close-cookie-disclaimer", this.acceptedCookies)
234
+ },
235
+ acceptAllCookies() {
236
+ const allCookies = []
237
+
238
+ // push all required cookies to array
239
+ const requiredCookies = this.cookieOptions?.required?.cookies
240
+ for(let i = 0; i < requiredCookies.length ; i++) {
241
+ allCookies.push(requiredCookies[i].value)
242
+ }
243
+
244
+ // push all optional cookies to array
245
+ const optionalCookies = this.cookieOptions?.optional?.cookies
246
+ for(let i = 0; i < optionalCookies.length ; i++) {
247
+ allCookies.push(optionalCookies[i].value)
248
+ }
249
+
250
+ this.$emit("close-cookie-disclaimer", allCookies)
191
251
  },
192
252
  openDataPrivacy(event) {
193
253
  /* first 'target' = clicked-element, second 'target' = target-attribute */
@@ -215,6 +275,14 @@ export default {
215
275
  top: auto;
216
276
 
217
277
  .cmd-box {
278
+ .box-header {
279
+ label.disabled {
280
+ .label-text span {
281
+ color: var(--pure-white) !important;
282
+ }
283
+ }
284
+ }
285
+
218
286
  .box-body {
219
287
  padding: var(--default-padding);
220
288
  }
@@ -5,7 +5,8 @@
5
5
  'cmd-fake-select label',
6
6
  {
7
7
  color: type === 'color',
8
- 'has-state': validationStatus && validationStatus !== 'none'
8
+ 'has-state': validationStatus && validationStatus !== 'none',
9
+ disabled: $attrs.disabled
9
10
  }
10
11
  ]"
11
12
  :aria-labelledby="labelId"
@@ -16,6 +17,30 @@
16
17
  <!-- begin label -->
17
18
  <span class="label-text" :id="labelId">
18
19
  <span>{{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup></span>
20
+
21
+ <!-- begin CmdTooltip -->
22
+ <CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
23
+ <!-- begin CmdSystemMessage -->
24
+ <CmdSystemMessage
25
+ v-if="getValidationMessage"
26
+ :message="getValidationMessage"
27
+ :validation-status="validationStatus"
28
+ :iconClose="{show: false}"
29
+ />
30
+ <!-- end CmdSystemMessage -->
31
+
32
+ <!-- begin CmdListOfRequirements -->
33
+ <CmdListOfRequirements
34
+ v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')"
35
+ :inputRequirements="inputRequirements"
36
+ :inputModelValue="modelValue"
37
+ :inputAttributes="$attrs"
38
+ :helplink="helplink"
39
+ />
40
+ <!-- end CmdListOfRequirements -->
41
+ </CmdTooltip>
42
+ <!-- end CmdTooltip -->
43
+
19
44
  <a v-if="$attrs.required || inputRequirements.length"
20
45
  href="#"
21
46
  @click.prevent
@@ -101,51 +126,6 @@
101
126
  </li>
102
127
  </ul>
103
128
  </div>
104
- <!-- begin CmdTooltip -->
105
- <CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
106
- <!-- begin CmdSystemMessage -->
107
- <CmdSystemMessage
108
- v-if="getValidationMessage"
109
- :message="getValidationMessage"
110
- :validationStatus="validationStatus"
111
- :iconClose="{show: false}"
112
- />
113
- <!-- end CmdSystemMessage -->
114
-
115
- <template v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')">
116
- <!-- begin list of requirements -->
117
- <h6>{{ getMessage("cmdfakeselect.headline.requirements_for_input") }}<br/>"{{ labelText }}"</h6>
118
- <dl class="list-of-requirements">
119
- <template v-for="(requirement, index) in inputRequirements" :key="index">
120
- <dt aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">{{ requirement.message }}:</dt>
121
- <dd :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">
122
- <span aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'icon-check-circle' : 'icon-error-circle'"
123
- :title="requirement.valid(modelValue, $attrs) ? 'success' : 'error'"></span>
124
- </dd>
125
- </template>
126
- </dl>
127
- <!-- end list of requirements -->
128
-
129
- <!-- begin helplink -->
130
- <template v-if="helplink">
131
- <hr v-if="helplink.show"/>
132
- <a v-if="helplink.show && helplink.url"
133
- :href="helplink.url"
134
- :target="helplink.target"
135
- @click.prevent>
136
- <span v-if="helplink.icon?.iconClass"
137
- :class="helplink.icon?.iconClass"
138
- :title="helplink.icon?.tooltip">
139
- </span>
140
- <span v-if="helplink.text">
141
- {{ helplink.text }}
142
- </span>
143
- </a>
144
- </template>
145
- <!-- end helplink -->
146
- </template>
147
- </CmdTooltip>
148
- <!-- end CmdTooltip -->
149
129
  </template>
150
130
 
151
131
  <script>
@@ -154,11 +134,12 @@ import {createUuid} from "../utils/common.js"
154
134
 
155
135
  // import mixins
156
136
  import I18n from "../mixins/I18n"
157
- import DefaultMessageProperties from "../mixins/CmdBox/DefaultMessageProperties"
137
+ import DefaultMessageProperties from "../mixins/CmdFakeSelect/DefaultMessageProperties"
158
138
  import FieldValidation from "../mixins/FieldValidation.js"
159
139
  import Tooltip from "../mixins/Tooltip.js"
160
140
 
161
141
  // import components
142
+ import CmdListOfRequirements from "./CmdListOfRequirements"
162
143
  import CmdSystemMessage from "./CmdSystemMessage"
163
144
  import CmdTooltip from "./CmdTooltip"
164
145
 
@@ -172,6 +153,7 @@ export default {
172
153
  Tooltip
173
154
  ],
174
155
  components: {
156
+ CmdListOfRequirements,
175
157
  CmdSystemMessage,
176
158
  CmdTooltip
177
159
  },
@@ -229,7 +211,7 @@ export default {
229
211
  /**
230
212
  * status (i.e. for validation)
231
213
  *
232
- * @allowedValues: error, success, disabled
214
+ * @allowedValues: error, warning, success, info
233
215
  * @affectsStyling: true
234
216
  */
235
217
  status: {
@@ -333,7 +315,7 @@ export default {
333
315
  },
334
316
  // get ID for accessibility
335
317
  labelId() {
336
- if(this.$attrs.id !== undefined) {
318
+ if (this.$attrs.id !== undefined) {
337
319
  return this.$attrs.id
338
320
  }
339
321
  return "label-" + createUuid()
@@ -372,7 +354,7 @@ export default {
372
354
  }
373
355
  },
374
356
  toggleOptions() {
375
- if (this.status !== 'disabled') {
357
+ if (this.$attrs.disabled !== 'disabled') {
376
358
  this.showOptions = !this.showOptions
377
359
  }
378
360
  },
@@ -546,8 +528,16 @@ export default {
546
528
  &.active {
547
529
  background: var(--light-gray);
548
530
 
531
+ span {
532
+ color: var(--text-color);
533
+ }
534
+
549
535
  &:hover, &:active, &:focus {
550
536
  background: var(--primary-color);
537
+
538
+ span {
539
+ color: var(--pure-white);
540
+ }
551
541
  }
552
542
  }
553
543
  }
@@ -15,12 +15,38 @@
15
15
  'has-state': validationStatus
16
16
  }]"
17
17
  :for="labelId"
18
+ :title="$attrs.title"
18
19
  ref="label">
19
20
 
20
21
  <!-- begin label-text (+ required asterisk) -->
21
22
  <span v-if="labelText && $attrs.type !== 'checkbox' && $attrs.type !== 'radio'"
22
23
  :class="['label-text', !showLabel ? 'hidden' : undefined]">
23
24
  <span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span>
25
+
26
+ <!-- begin CmdTooltip -->
27
+ <CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
28
+ <!-- begin CmdSystemMessage -->
29
+ <CmdSystemMessage
30
+ v-if="getValidationMessage"
31
+ :message="getValidationMessage"
32
+ :validation-status="validationStatus"
33
+ :iconClose="{show: false}"
34
+ />
35
+ <!-- end CmdSystemMessage -->
36
+
37
+ <!-- begin CmdListOfRequirements -->
38
+ <CmdListOfRequirements
39
+ v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')"
40
+ :inputRequirements="inputRequirements"
41
+ :helplink="helplink"
42
+ :inputModelValue="modelValue"
43
+ :inputAttributes="$attrs"
44
+ :validationTooltip="validationTooltip"
45
+ />
46
+ <!-- end CmdListOfRequirements -->
47
+ </CmdTooltip>
48
+ <!-- end CmdTooltip -->
49
+
24
50
  <a v-if="$attrs.required || inputRequirements.length"
25
51
  href="#"
26
52
  @click.prevent
@@ -89,6 +115,7 @@
89
115
  :value="inputValue"
90
116
  :class="[inputClass, validationStatus, toggleSwitchIconClass, { 'replace-input-type': replaceInputType, 'toggle-switch': toggleSwitch }]"
91
117
  :id="labelId"
118
+ :disabled="$attrs.disabled"
92
119
  :aria-invalid="validationStatus === 'error'"
93
120
  />
94
121
  <span v-if="labelText" :class="['label-text', { hidden: !showLabel }]"><span>{{ labelText }}<sup v-if="$attrs.required">*</sup></span></span>
@@ -103,6 +130,7 @@
103
130
  :value="inputValue"
104
131
  :class="{inputClass, validationStatus}"
105
132
  :id="labelId"
133
+ :disabled="$attrs.disabled"
106
134
  :aria-invalid="validationStatus === 'error'"
107
135
  />
108
136
  <span class="label-text">{{ onLabel }}</span>
@@ -152,7 +180,7 @@
152
180
  :maxlength="getMaxLength()"
153
181
  :value="modelValue"
154
182
  />
155
- <a v-if="showSearchButton" href="#" class="button no-flex" :title="iconSearch.tooltip" @click.prevent="executeSearch">
183
+ <a v-if="showSearchButton" href="#" :class="['button no-flex', {disabled: $attrs.disabled}]" :title="iconSearch.tooltip" @click.prevent="executeSearch">
156
184
  <span :class="iconSearch.iconClass"></span>
157
185
  </a>
158
186
  <a v-if="iconDelete.show" href="#" @click.prevent="$emit('update:modelValue', '')" :class="iconDelete.iconClass" :title="iconDelete.tooltip"></a>
@@ -171,45 +199,6 @@
171
199
  <span v-if="nativeButton?.icon?.show && nativeButton?.icon?.position === 'after'" :class="nativeButton?.icon?.iconClass"></span>
172
200
  </button>
173
201
  <!-- end button -->
174
-
175
- <!-- begin CmdTooltip -->
176
- <CmdTooltip v-if="useCustomTooltip" class="box" :class="validationStatus" :relatedId="tooltipId" :toggle-visibility-by-click="true">
177
- <!-- begin CmdSystemMessage -->
178
- <CmdSystemMessage
179
- v-if="getValidationMessage"
180
- :message="getValidationMessage"
181
- :validation-status="validationStatus"
182
- :iconClose="{show: false}"
183
- />
184
- <!-- end CmdSystemMessage -->
185
-
186
- <template v-if="showRequirements && (validationStatus === '' || validationStatus === 'error')">
187
- <!-- begin list of requirements -->
188
- <h6>
189
- {{ getMessage("cmdformelement.headline.requirements_for_input") }}<br/>
190
- "{{ labelText }}"
191
- </h6>
192
- <dl class="list-of-requirements">
193
- <template v-for="(requirement, index) in inputRequirements" :key="index">
194
- <dt aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">{{ requirement.message }}:</dt>
195
- <dd :class="requirement.valid(modelValue, $attrs) ? 'success' : 'error'">
196
- <span aria-live="assertive" :class="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.iconClass : iconHasStateError.iconClass"
197
- :title="requirement.valid(modelValue, $attrs) ? iconHasStateSuccess.tooltip : iconHasStateError.tooltip"></span>
198
- </dd>
199
- </template>
200
- </dl>
201
- <!-- end list of requirements -->
202
-
203
- <!-- begin helplink -->
204
- <hr v-if="helplink?.show"/>
205
- <a v-if="helplink?.show && helplink?.url" :href="helplink.url" :target="helplink.target" @click.prevent>
206
- <span v-if="helplink.icon?.iconClass" :class="helplink.icon?.iconClass" :title="helplink.icon?.tooltip"></span>
207
- <span v-if="helplink.text">{{ helplink.text }}</span>
208
- </a>
209
- <!-- end helplink -->
210
- </template>
211
- </CmdTooltip>
212
- <!-- end CmdTooltip -->
213
202
  </template>
214
203
 
215
204
  <script>
@@ -223,6 +212,7 @@ import FieldValidation from "../mixins/FieldValidation.js"
223
212
  import Tooltip from "../mixins/Tooltip.js"
224
213
 
225
214
  // import components
215
+ import CmdListOfRequirements from "./CmdListOfRequirements"
226
216
  import CmdSystemMessage from "./CmdSystemMessage"
227
217
  import CmdTooltip from "./CmdTooltip"
228
218
 
@@ -230,6 +220,7 @@ export default {
230
220
  inheritAttrs: false,
231
221
  name: "FormElement",
232
222
  components: {
223
+ CmdListOfRequirements,
233
224
  CmdSystemMessage,
234
225
  CmdTooltip
235
226
  },
@@ -422,7 +413,7 @@ export default {
422
413
  /**
423
414
  * set status for label and form-element
424
415
  *
425
- * @allowedValues: error, success
416
+ * @allowedValues: error, warning, success, info
426
417
  *
427
418
  * @affectsStyling: true
428
419
  */