comand-component-library 3.1.67 → 3.1.70

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) 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 +214 -146
  5. package/src/assets/fonts/iconfonts/logos-iconfont/icomoon.woff +0 -0
  6. package/src/assets/fonts/iconfonts/logos-iconfont/selection.json +1 -0
  7. package/src/assets/styles/global-styles.scss +30 -48
  8. package/src/assets/styles/logos-iconfont.css +47 -32
  9. package/src/components/CmdBackToTopButton.vue +1 -1
  10. package/src/components/CmdBox.vue +47 -25
  11. package/src/components/CmdBoxSiteSearch.vue +228 -46
  12. package/src/components/CmdCompanyLogo.vue +34 -9
  13. package/src/components/CmdCookieDisclaimer.vue +0 -17
  14. package/src/components/CmdCustomHeadline.vue +1 -1
  15. package/src/components/CmdFakeSelect.vue +19 -19
  16. package/src/components/CmdFormElement.vue +135 -112
  17. package/src/components/CmdInputGroup.vue +120 -4
  18. package/src/components/CmdListOfLinks.vue +6 -4
  19. package/src/components/CmdLoginForm.vue +4 -2
  20. package/src/components/CmdMultipleSwitch.vue +14 -2
  21. package/src/components/CmdMultistepFormProgressBar.vue +2 -2
  22. package/src/components/CmdSiteHeader.vue +13 -4
  23. package/src/components/CmdTabs.vue +3 -7
  24. package/src/components/CmdThumbnailScroller.vue +1 -1
  25. package/src/components/CmdToggleDarkMode.vue +66 -0
  26. package/src/components/CmdUploadForm.vue +5 -6
  27. package/src/index.js +0 -1
  28. package/src/mixins/FieldValidation.js +1 -1
  29. package/src/utils/{GetFileExtension.js → getFileExtension.js} +0 -0
  30. package/src/assets/fonts/iconfonts/logos-iconfont/logos-iconfont.json +0 -1
  31. package/src/components/CmdSwitchButton.vue +0 -181
@@ -13,52 +13,72 @@
13
13
 
14
14
  <!-- begin form-elements -->
15
15
  <div class="flex-container">
16
- <!-- begin CmdFormElement -->
16
+ <!-- begin CmdFormElement for first input -->
17
17
  <CmdFormElement
18
+ v-if="cmdFormElementInput1.show"
18
19
  element="input"
19
- type="text"
20
- :labelText="getMessage('cmdsitesearch.labeltext.what_to_search')"
21
- :placeholder="getMessage('cmdsitesearch.placeholder.what_to_search')"
20
+ :type="cmdFormElementInput1.type"
21
+ :show-label="cmdFormElementInput1.showLabel"
22
+ :labelText="cmdFormElementInput1.labelText"
23
+ :placeholder="cmdFormElementInput1.placeholder"
24
+ v-model="searchValue1"
22
25
  />
23
- <!-- end CmdFormElement -->
26
+ <!-- end CmdFormElement for first input -->
24
27
 
25
- <!-- begin CmdFormElement -->
26
- <CmdFormElement
27
- element="input"
28
- type="text"
29
- :labelText="getMessage('cmdsitesearch.labeltext.where_to_search')"
30
- :placeholder="getMessage('cmdsitesearch.placeholder.where_to_search')"
31
- />
32
- <!-- end CmdFormElement -->
28
+ <div class="flex-container no-gap">
29
+ <!-- begin CmdFormElement for second input -->
30
+ <CmdFormElement
31
+ v-if="cmdFormElementInput2.show"
32
+ element="input"
33
+ :type="cmdFormElementInput2.type"
34
+ :show-label="cmdFormElementInput2.showLabel"
35
+ :labelText="cmdFormElementInput2.labelText"
36
+ :placeholder="cmdFormElementInput2.placeholder"
37
+ v-model="searchValue2"
38
+ />
39
+ <!-- end CmdFormElement for second input -->
33
40
 
34
- <!-- begin CmdFormElement -->
41
+ <!-- begin CmdFormElement for radius -->
42
+ <CmdFormElement
43
+ v-if="cmdFormElementRadius.show"
44
+ element="select"
45
+ class="no-flex"
46
+ v-model="radius"
47
+ :show-label="cmdFormElementRadius.showLabel"
48
+ :labelText="cmdFormElementRadius.labelText"
49
+ :select-options="cmdFormElementRadius.selectOptions"
50
+ />
51
+ <!-- end CmdFormElement for radius -->
52
+ </div>
53
+
54
+ <!-- begin CmdFormElement for search-button -->
35
55
  <CmdFormElement
36
56
  element="button"
37
- :buttonText="buttonText"
38
- :buttonIcon="{iconClass: 'icon-search', iconPosition: 'before'}"
39
- @click="$emit('click', $event)"
57
+ :nativeButton="cmdFormElementSearchButton"
58
+ @click="onSearchButtonClick"
40
59
  aria-live="assertive"
41
60
  />
42
- <!-- end CmdFormElement -->
61
+ <!-- end CmdFormElement for search-button -->
62
+
43
63
  </div>
44
64
  <!-- end form-elements -->
45
65
 
46
66
  <!-- begin filters -->
47
- <template v-if="useFilters">
67
+ <template v-if="cmdFakeSelect?.show">
48
68
  <a href="#" @click.prevent="showFilters = !showFilters">
49
69
  <span :class="showFilters ? 'icon-single-arrow-up' : 'icon-single-arrow-down'"></span>
50
70
  <span v-if="showFilters">{{ getMessage("cmdsitesearch.hide_filter_options") }}</span>
51
71
  <span v-else>{{ getMessage("cmdsitesearch.show_filter_options") }}</span>
52
72
  </a>
53
73
  <transition name="fade">
54
- <div v-if="showFilters && listOfFilters.length" class="flex-container no-flex" aria-expanded="true">
74
+ <div v-if="showFilters && cmdFakeSelect?.selectData.length" class="flex-container no-flex" aria-expanded="true">
55
75
  <!-- begin CmdFakeSelect -->
56
76
  <CmdFakeSelect
57
- :selectData="listOfFilters"
58
- v-model="fakeSelectFilters"
59
- defaultOptionName="Select filters:"
60
- type="checkboxOptions"
61
- labelText="Filters:"
77
+ :selectData="cmdFakeSelect?.selectData"
78
+ v-model="searchFilters"
79
+ :defaultOptionName="cmdFakeSelect?.defaultOptionName"
80
+ :type="cmdFakeSelect?.type"
81
+ :labelText="cmdFakeSelect?.labelText"
62
82
  />
63
83
  <!-- end CmdFakeSelect -->
64
84
  </div>
@@ -66,7 +86,7 @@
66
86
  </template>
67
87
  <!-- end filters -->
68
88
  </fieldset>
69
- <CmdFormFilters v-if="useFilters" v-model="fakeSelectFilters" :selectedOptionsName="getOptionName"/>
89
+ <CmdFormFilters v-if="cmdFakeSelect?.show" v-model="searchFilters" :selectedOptionsName="getOptionName"/>
70
90
  </template>
71
91
 
72
92
  <script>
@@ -81,6 +101,13 @@ import CmdFormElement from "./CmdFormElement"
81
101
  import CmdFormFilters from "./CmdFormFilters"
82
102
 
83
103
  export default {
104
+ emits: [
105
+ "search",
106
+ "update:modelValueInput1",
107
+ "update:modelValueInput2",
108
+ "update:modelValueRadius",
109
+ "update:modelValueSearchFilters"
110
+ ],
84
111
  name: "CmdBoxSiteSearch",
85
112
  mixins: [I18n, DefaultMessageProperties],
86
113
  components: {
@@ -91,34 +118,45 @@ export default {
91
118
  },
92
119
  data() {
93
120
  return {
94
- showFilters: false,
95
- fakeSelectFilters: []
121
+ showFilters: false
96
122
  }
97
123
  },
98
124
  props: {
99
125
  /**
100
- * the native modelValue for v-model given from outside for pre-sets
126
+ * custom modelValue for first input-field
101
127
  */
102
- modelValue: {
103
- type: Array,
128
+ modelValueInput1: {
129
+ type: String,
104
130
  required: false
105
131
  },
106
132
  /**
107
- * toggle use of filters (must configured)
133
+ * custom modelValue for second input-field
108
134
  */
109
- useFilters: {
110
- type: Boolean,
111
- default: true
135
+ modelValueInput2: {
136
+ type: String,
137
+ required: false
112
138
  },
113
139
  /**
114
- * set list of filters
115
- *
116
- * useFilters-property must be activated
140
+ * custom modelValue for radius
141
+ */
142
+ modelValueRadius: {
143
+ type: [String, Number],
144
+ required: false
145
+ },
146
+ /**
147
+ * custom modelValue for search-filters
117
148
  */
118
- listOfFilters: {
149
+ modelValueSearchFilters: {
119
150
  type: Array,
120
151
  required: false
121
152
  },
153
+ /**
154
+ * toggle use of filters (must configured)
155
+ */
156
+ useFilters: {
157
+ type: Boolean,
158
+ default: true
159
+ },
122
160
  /**
123
161
  * text for legend
124
162
  *
@@ -150,31 +188,168 @@ export default {
150
188
  cmdCustomHeadline: {
151
189
  type: Object,
152
190
  required: false
191
+ },
192
+ /**
193
+ * properties for CmdFormElement-component first search-field
194
+ */
195
+ cmdFormElementInput1: {
196
+ type: Object,
197
+ default() {
198
+ return {
199
+ show: true,
200
+ type: "text",
201
+ showLabel: true,
202
+ labelText: "What do you like to search for?",
203
+ placeholder: "Search"
204
+ }
205
+ }
206
+ },
207
+ /**
208
+ * properties for CmdFormElement-component for second search-field
209
+ */
210
+ cmdFormElementInput2: {
211
+ type: Object,
212
+ default() {
213
+ return {
214
+ show: true,
215
+ type: "text",
216
+ showLabel: true,
217
+ labelText: "Where do you like to search?",
218
+ placeholder: "City, Zip"
219
+ }
220
+ }
221
+ },
222
+ /**
223
+ * properties for CmdFormElement-component for radius
224
+ */
225
+ cmdFormElementRadius: {
226
+ type: Object,
227
+ default() {
228
+ return {
229
+ show: true,
230
+ showLabel: true,
231
+ labelText: "Radius",
232
+ selectOptions: [
233
+ {
234
+ text: "5 Km",
235
+ value: 5
236
+ },
237
+ {
238
+ text: "10 Km",
239
+ value: 10
240
+ },
241
+ {
242
+ text: "15 Km",
243
+ value: 15
244
+ },
245
+ {
246
+ text: "50 Km",
247
+ value: 50
248
+ },
249
+ {
250
+ text: "100 Km",
251
+ value: 100
252
+ }
253
+ ]
254
+ }
255
+ }
256
+ },
257
+ /**
258
+ * properties for CmdFormElement-component for search-button
259
+ */
260
+ cmdFormElementSearchButton: {
261
+ type: Object,
262
+ default() {
263
+ return {
264
+ icon: {
265
+ show: true,
266
+ position: "before",
267
+ iconClass: "icon-search"
268
+ },
269
+ text: "Search"
270
+ }
271
+ }
272
+ },
273
+ /**
274
+ * properties for CmdFakeSelect-component for filters
275
+ */
276
+ cmdFakeSelect: {
277
+ type: Object,
278
+ required: false
153
279
  }
154
280
  },
155
281
  computed: {
156
- buttonText() {
157
- if (this.results) {
158
- return this.results + " Results"
282
+ searchValue1: {
283
+ get() {
284
+ return this.modelValueInput1
285
+ },
286
+ set(value) {
287
+ this.$emit("update:modelValueInput1", value)
288
+ }
289
+ },
290
+ searchValue2: {
291
+ get() {
292
+ return this.modelValueInput2
293
+ },
294
+ set(value) {
295
+ this.$emit("update:modelValueInput2", value)
296
+ }
297
+ },
298
+ radius: {
299
+ get() {
300
+ return this.modelValueRadius
301
+ },
302
+ set(value) {
303
+ this.$emit("update:modelValueRadius", value)
304
+ }
305
+ },
306
+ searchFilters: {
307
+ get() {
308
+ return this.modelValueSearchFilters
309
+ },
310
+ set(value) {
311
+ this.$emit("update:modelValueSearchFilters", value)
159
312
  }
160
- return "Search"
161
313
  }
162
314
  },
163
315
  methods: {
316
+ onSearchButtonClick() {
317
+ this.$emit("search", {
318
+ searchValue1: this.searchValue1,
319
+ searchValue2: this.searchValue2,
320
+ searchFilters: this.searchFilters,
321
+ radius: this.radius
322
+ })
323
+ },
164
324
  getOptionName(option) {
165
- for (let i = 0; i < this.listOfFilters.length; i++) {
166
- if (option === this.listOfFilters[i].value) {
167
- return this.listOfFilters[i].text
325
+ for (let i = 0; i < this.cmdFakeSelect.selectData.length; i++) {
326
+ if (option === this.cmdFakeSelect.selectData[i].value) {
327
+ return this.cmdFakeSelect.selectData[i].text
168
328
  }
169
329
  }
170
330
  return null
171
331
  }
332
+ },
333
+ watch: {
334
+ cmdFormElementRadius: {
335
+ handler() {
336
+ if (this.cmdFormElementRadius?.selectOptions && this.cmdFormElementRadius?.selectOptions.length && this.modelValueRadius == null) {
337
+ this.radius = this.cmdFormElementRadius.selectOptions[0].value
338
+ }
339
+ },
340
+ immediate: true,
341
+ deep: true
342
+ }
172
343
  }
173
344
  }
174
345
  </script>
175
346
 
176
347
  <style lang="scss">
348
+ /* begin cmd-box-site-search ---------------------------------------------------------------------------------------- */
349
+ @import '../assets/styles/variables';
177
350
  .cmd-box-site-search {
351
+ flex-wrap: nowrap;
352
+
178
353
  > a {
179
354
  [class*='icon'] {
180
355
  font-size: 1rem;
@@ -185,4 +360,11 @@ export default {
185
360
  align-self: flex-end;
186
361
  }
187
362
  }
363
+
364
+ @media only screen and (max-width: $small-max-width) {
365
+ .cmd-box-site-search {
366
+ flex-wrap: nowrap;
367
+ }
368
+ }
369
+ /* end cmd-box-site-search ---------------------------------------------------------------------------------------- */
188
370
  </style>
@@ -53,26 +53,51 @@ export default {
53
53
  },
54
54
  computed: {
55
55
  pathCurrentLogo() {
56
- if (this.prefersColorScheme === 'light' || !this.pathDarkmodeLogo) {
56
+ if (this.prefersColorScheme === "light" || !this.pathDarkmodeLogo) {
57
57
  return this.pathDefaultLogo
58
58
  }
59
59
  return this.pathDarkmodeLogo
60
60
  }
61
61
  },
62
62
  created() {
63
- if (matchMedia('(prefers-color-scheme: light)').matches) {
64
- this.prefersColorScheme = "light"
65
- } else {
66
- this.prefersColorScheme = "dark"
67
- }
63
+ this.toggleColorScheme()
64
+
65
+ window.matchMedia("(prefers-color-scheme: light)").addEventListener("change", this.onColorSchemeChange)
68
66
 
69
- window.matchMedia('(prefers-color-scheme: light)').addEventListener('change', e => {
70
- this.prefersColorScheme = e.matches ? "light" : "dark"
71
- });
67
+ /* observe if class changes in html-tag */
68
+ const htmlTag = document.querySelector("html")
69
+ this.$_observer = new MutationObserver(this.observeDom)
70
+ this.$_observer.observe(htmlTag, {attributes: true})
71
+ },
72
+ beforeUnmount() {
73
+ window.matchMedia("(prefers-color-scheme: light)").removeEventListener("change", this.onColorSchemeChange)
74
+ this.$_observer.disconnect()
72
75
  },
73
76
  methods: {
77
+ onColorSchemeChange(event) {
78
+ this.prefersColorScheme = event.matches ? "light" : "dark"
79
+ },
80
+ observeDom(mutationList) {
81
+ for(let i = 0; i < mutationList.length; i++) {
82
+ if(mutationList[i].type === 'attributes') {
83
+ this.toggleColorScheme()
84
+ break
85
+ }
86
+ }
87
+ },
74
88
  getRoute(language) {
75
89
  return getRoute(language)
90
+ },
91
+ toggleColorScheme() {
92
+ if (document.querySelector("html").classList.contains("light-mode")) {
93
+ this.prefersColorScheme = "light"
94
+ } else if(document.querySelector("html").classList.contains("dark-mode")) {
95
+ this.prefersColorScheme = "dark"
96
+ } else if (matchMedia("(prefers-color-scheme: light)").matches) {
97
+ this.prefersColorScheme = "light"
98
+ } else {
99
+ this.prefersColorScheme = "dark"
100
+ }
76
101
  }
77
102
  }
78
103
  }
@@ -22,14 +22,6 @@
22
22
  >
23
23
  <template v-slot:header>
24
24
  <!-- begin CmdSwitchButton -->
25
- <CmdSwitchButton
26
- type="checkbox"
27
- :id="cookie.id"
28
- :labelText="cookie.labelText"
29
- v-model="cookie.checked"
30
- :status="cookie.status"
31
- disabled="disabled"
32
- />
33
25
  <!-- end CmdSwitchButton -->
34
26
  </template>
35
27
  <template v-slot:body>
@@ -58,13 +50,6 @@
58
50
  >
59
51
  <template v-slot:header>
60
52
  <!-- begin CmdSwitchButton -->
61
- <CmdSwitchButton
62
- type="checkbox"
63
- :id="cookie.id"
64
- :labelText="cookie.labelText"
65
- v-model="cookie.checked"
66
- :status="cookie.status"
67
- />
68
53
  <!-- end CmdSwitchButton -->
69
54
  </template>
70
55
  <template v-slot:body>
@@ -107,14 +92,12 @@
107
92
  // import components
108
93
  import CmdBox from "./CmdBox"
109
94
  import CmdCustomHeadline from "./CmdCustomHeadline"
110
- import CmdSwitchButton from "./CmdSwitchButton"
111
95
 
112
96
  export default {
113
97
  name: "CmdCookieDisclaimer",
114
98
  components: {
115
99
  CmdBox,
116
100
  CmdCustomHeadline,
117
- CmdSwitchButton
118
101
  },
119
102
  data() {
120
103
  return {
@@ -74,7 +74,7 @@ export default {
74
74
  margin-bottom: 0;
75
75
  }
76
76
 
77
- h1, h2, h3, h4, h5 ,h6 {
77
+ h1, h2, h3, h4, h5, h6 {
78
78
  margin: 0;
79
79
  display: flex;
80
80
  align-items: center;
@@ -12,24 +12,24 @@
12
12
  :aria-required="$attrs.required !== undefined"
13
13
  ref="fakeselect"
14
14
  >
15
- <span v-if="showLabel">
15
+ <template v-if="showLabel">
16
16
  <!-- begin label -->
17
- <span :id="labelId">
18
- {{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup>
17
+ <span class="label-text" :id="labelId">
18
+ <span>{{ labelText }}<sup v-if="$attrs.required !== undefined">*</sup></span>
19
+ <a v-if="$attrs.required || inputRequirements.length"
20
+ href="#"
21
+ @click.prevent
22
+ :class="getStatusIconClass"
23
+ :title="!useCustomTooltip ? getValidationMessage : ''"
24
+ :aria-errormessage="getValidationMessage"
25
+ aria-live="assertive"
26
+ :id="tooltipId"
27
+ :role="validationStatus === 'error' ? 'alert' : 'dialog'">
28
+ </a>
19
29
  </span>
20
30
  <!-- end label -->
21
- <a v-if="$attrs.required || inputRequirements.length"
22
- href="#"
23
- @click.prevent
24
- :class="getStatusIconClass"
25
- :title="!useCustomTooltip ? getValidationMessage : ''"
26
- :aria-errormessage="getValidationMessage"
27
- aria-live="assertive"
28
- :id="tooltipId"
29
- :role="validationStatus === 'error' ? 'alert' : 'dialog'">
30
- </a>
31
- </span>
32
- <ul :class="{'open': showOptions}" @clickout="closeOptions">
31
+ </template>
32
+ <ul :class="{'open': showOptions}" @clickout="closeOptions" :aria-expanded="showOptions">
33
33
  <li>
34
34
  <!-- begin default/selected-option -->
35
35
  <a href="#" @click.prevent="toggleOptions" @blur="onBlur">
@@ -42,8 +42,8 @@
42
42
  <!-- end default/selected-option-->
43
43
 
44
44
  <!-- begin default dropdown (incl. optional icon) -->
45
- <ul v-if="type === 'default' && showOptions" :aria-expanded="showOptions">
46
- <li v-for="(option, index) in selectData" :key="index" role="option">
45
+ <ul v-if="type === 'default' && showOptions" role="listbox">
46
+ <li v-for="(option, index) in selectData" :key="index" role="option" :aria-selected="option.value === modelValue">
47
47
  <!-- begin type 'href' -->
48
48
  <a v-if="optionLinkType === 'href'" href="#" @click.prevent="selectOption(option.value)" :class="{'active' : option.value === modelValue}">
49
49
  <span v-if="option.iconClass" :class="option.iconClass"></span>
@@ -475,7 +475,7 @@ export default {
475
475
  margin: 0;
476
476
  display: block;
477
477
  min-width: 0;
478
- background: var(--pure-white);
478
+ background: var(--color-scheme-background-color);
479
479
  box-shadow: none;
480
480
  border-radius: var(--border-radius);
481
481
 
@@ -524,7 +524,7 @@ export default {
524
524
  padding-top: .8rem;
525
525
  outline: none;
526
526
  border-bottom: var(--default-border);
527
- color: var(--text-color);
527
+ color: var(--color-scheme-text-color);
528
528
  text-decoration: none;
529
529
 
530
530
  &:hover, &:active, &:focus {