comand-component-library 4.3.26 → 4.3.28

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.
Files changed (50) hide show
  1. package/dist/comand-component-library.css +1 -1
  2. package/dist/comand-component-library.js +8574 -8438
  3. package/dist/styles/demopage-only.css +48 -0
  4. package/package.json +2 -2
  5. package/src/ComponentLibrary.vue +1923 -1881
  6. package/src/assets/data/text-image-block.json +3 -1
  7. package/src/assets/data/thumbnail-scroller-images.json +1 -1
  8. package/src/components/CmdAccordion.vue +1 -1
  9. package/src/components/CmdAddressData.vue +60 -72
  10. package/src/components/CmdBankAccountData.vue +55 -33
  11. package/src/components/CmdBasicForm.vue +19 -7
  12. package/src/components/CmdBox.vue +8 -0
  13. package/src/components/CmdBoxWrapper.vue +14 -0
  14. package/src/components/CmdBreadcrumbs.vue +10 -27
  15. package/src/components/CmdCompanyLogo.vue +3 -0
  16. package/src/components/CmdContainer.vue +21 -2
  17. package/src/components/CmdCookieDisclaimer.vue +5 -5
  18. package/src/components/CmdFakeSelect.vue +27 -17
  19. package/src/components/CmdFancyBox.vue +73 -85
  20. package/src/components/CmdFootnote.vue +2 -1
  21. package/src/components/CmdForm.vue +118 -160
  22. package/src/components/CmdFormFilters.vue +1 -0
  23. package/src/components/CmdGoogleMaps.vue +9 -2
  24. package/src/components/CmdHeadline.vue +10 -9
  25. package/src/components/CmdImage.vue +44 -21
  26. package/src/components/CmdImageGallery.vue +13 -8
  27. package/src/components/CmdLink.vue +20 -5
  28. package/src/components/CmdList.vue +7 -2
  29. package/src/components/CmdLoginForm.vue +156 -255
  30. package/src/components/CmdMailToolEntry.vue +2 -1
  31. package/src/components/CmdMultistepFormProgressBar.vue +2 -2
  32. package/src/components/CmdMultistepFormWrapper.vue +2 -6
  33. package/src/components/CmdOpeningHours.vue +14 -2
  34. package/src/components/CmdSidebar.vue +2 -2
  35. package/src/components/CmdSiteWrapper.vue +66 -58
  36. package/src/components/CmdSlideshow.vue +5 -0
  37. package/src/components/CmdSocialNetworks.vue +27 -17
  38. package/src/components/CmdSwitchLanguage.vue +16 -19
  39. package/src/components/CmdSystemMessage.vue +71 -66
  40. package/src/components/CmdTable.vue +42 -24
  41. package/src/components/CmdTabs.vue +15 -7
  42. package/src/components/CmdTag.vue +28 -23
  43. package/src/components/CmdTextImageBlock.vue +62 -53
  44. package/src/components/CmdThumbnailScroller.vue +18 -6
  45. package/src/components/CmdToast.vue +60 -17
  46. package/src/components/CmdToggleDarkMode.vue +31 -32
  47. package/src/components/CmdTooltip.vue +33 -20
  48. package/src/components/CmdUploadForm.vue +212 -183
  49. package/src/components/CmdWidthLimitationWrapper.vue +19 -3
  50. package/dist/styles/templates/casual.css +0 -3
@@ -16,5 +16,7 @@
16
16
  "show": true
17
17
  }
18
18
  },
19
- "htmlContent": "This text is given as plain text and show below an optional image."
19
+ "cmdParagraph": {
20
+ "content": "This text is given as plain text and show below an optional image."
21
+ }
20
22
  }
@@ -24,7 +24,7 @@
24
24
  "figcaption": {
25
25
  "show": true,
26
26
  "position": "bottom",
27
- "text": "Figcaption 2",
27
+ "text": "Figcaption 2 with long text",
28
28
  "textAlign": "center"
29
29
  }
30
30
  },
@@ -53,7 +53,7 @@ export default {
53
53
  /**
54
54
  * set highlight-level for headline
55
55
  *
56
- * @allowedValues: "", "primary", "secondary", "tertiary"
56
+ * @allowedValues: null, "primary", "secondary", "tertiary"
57
57
  */
58
58
  highlightLevel: {
59
59
  type: String,
@@ -1,60 +1,39 @@
1
1
  <template>
2
2
  <!-- begin CmdAddressData ---------------------------------------------------------------------------------------- -->
3
- <div :class="['cmd-address-data vcard', {box: styleAsBox}]">
4
- <!-- begin slot -->
5
- <template v-if="useSlot">
6
- <slot></slot>
7
- </template>
8
- <!-- end slot -->
9
-
10
- <template v-else>
11
- <!-- begin cmd-headline -->
12
- <CmdHeadline
13
- v-if="cmdHeadline?.headlineText || editModeContext" v-bind="cmdHeadline"
14
- />
15
- <!-- end cmd-headline -->
3
+ <div :class="['cmd-address-data vcard', { box: styleAsBox }]">
4
+ <slot>
5
+ <CmdHeadline v-if="(cmdHeadlineProperties?.show && cmdHeadlineProperties?.headlineText) || editModeContext"
6
+ v-bind="cmdHeadlineProperties" />
16
7
 
17
8
  <!-- begin address-data in vCard microformat -->
18
9
  <address class="adr">
19
10
  <!-- begin list with labels -->
20
- <template v-if="showLabels && (showLabelTexts|| showLabelIcons) && !showIconsOnly">
11
+ <template v-if="showLabels && (showLabelTexts || showLabelIcons) && !showIconsOnly">
21
12
  <!-- begin default view -->
22
- <dl v-if="!editModeContext" :class="{'auto-columns': contentOrientation === 'horizontal'}">
13
+ <dl v-if="!editModeContext" :class="{ 'auto-columns': contentOrientation === 'horizontal' }">
23
14
  <!-- begin cmd-address-data-item -->
24
- <CmdAddressDataItem
25
- v-for="(entry, index) in addressData"
26
- :key="index" :addressEntry="entry"
27
- :showLabelIcons="showLabelIcons"
28
- :showLabelTexts="showLabelTexts"
29
- :showCityBeforeZip="showCityBeforeZip"
30
- />
15
+ <CmdAddressDataItem v-for="(entry, index) in addressData" :key="index" :addressEntry="entry"
16
+ :showLabelIcons="showLabelIcons" :showLabelTexts="showLabelTexts"
17
+ :showCityBeforeZip="showCityBeforeZip" />
31
18
  <!-- end cmd-address-data-item -->
32
19
  </dl>
33
20
  <!-- end default view -->
34
21
 
35
22
  <!-- begin edit-mode -->
36
23
  <template v-else>
37
- <button v-if="addressData.length === 0" type="button" class="button confirm small" @click="onAddItem">
24
+ <button v-if="addressData.length === 0" type="button" class="button confirm small"
25
+ @click="onAddItem">
38
26
  <span class="icon-plus"></span>
39
27
  <span>Add new entry</span>
40
28
  </button>
41
- <EditComponentWrapper
42
- v-for="(entry, index) in addressData"
43
- :key="'x' + index"
44
- class="edit-items"
45
- :showComponentName="false"
46
- :allowedComponentTypes="[]"
47
- componentName="CmdAddressDataItem"
48
- :componentProps="entry"
49
- :componentPath="['props', 'addressData', index]"
50
- >
29
+ <EditComponentWrapper v-for="(entry, index) in addressData" :key="'x' + index"
30
+ class="edit-items" :showComponentName="false" :allowedComponentTypes="[]"
31
+ componentName="CmdAddressDataItem" :componentProps="entry"
32
+ :componentPath="['props', 'addressData', index]">
51
33
  <dl>
52
34
  <!-- begin cmd-address-data-item -->
53
- <CmdAddressDataItem
54
- :addressEntry="entry"
55
- :showLabelIcons="showLabelIcons"
56
- :showLabelTexts="showLabelTexts"
57
- />
35
+ <CmdAddressDataItem :addressEntry="entry" :showLabelIcons="showLabelIcons"
36
+ :showLabelTexts="showLabelTexts" />
58
37
  <!-- end cmd-address-data-item -->
59
38
  </dl>
60
39
  </EditComponentWrapper>
@@ -63,20 +42,17 @@
63
42
  <!-- end list with labels -->
64
43
 
65
44
  <!-- begin list without labels -->
66
- <ul v-else :class="['flex-container', {'vertical': !showIconsOnly}]">
45
+ <ul v-else :class="['flex-container', { 'vertical': !showIconsOnly }]">
67
46
  <template v-for="(entry, index) in addressData" :key="index">
68
47
  <li v-if="entry.href || (entry.name === 'address' && entry.linkGoogleMaps) || !showIconsOnly"
69
- :class="{'flex-none' : showIconsOnly}">
48
+ :class="{ 'flex-none': showIconsOnly }">
70
49
  <!-- begin all entries except address (which has no href) -->
71
- <a v-if="entry.href"
72
- :class="{'button' : styleLinksAsButtons}"
73
- :href="getHref(entry)"
74
- :target="entry.name === 'url' ? '_blank' : null"
75
- :title="entry.tooltip"
76
- >
50
+ <a v-if="entry.href" :class="{ 'button': styleLinksAsButtons }" :href="getHref(entry)"
51
+ :target="entry.name === 'url' ? '_blank' : null" :title="entry.tooltip">
77
52
  <template v-if="showIconsOnly">
78
53
  <!-- begin CmdIcon -->
79
- <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass" :type="entry.iconType"/>
54
+ <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass"
55
+ :type="entry.iconType" />
80
56
  <!-- end CmdIcon -->
81
57
  </template>
82
58
  <template v-else>{{ entry.href }}</template>
@@ -87,35 +63,39 @@
87
63
  <!-- begin address -->
88
64
  <template v-if="entry.name === 'address'">
89
65
  <!-- begin linked address -->
90
- <a v-if="entry.linkGoogleMaps" :href="locateAddress(entry)" target="google-maps" :title="entry.tooltip">
66
+ <a v-if="entry.linkGoogleMaps" :href="locateAddress(entry)" target="google-maps"
67
+ :title="entry.tooltip">
91
68
  <template v-if="showIconsOnly">
92
69
  <!-- begin CmdIcon -->
93
- <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass" :type="entry.iconType"/>
70
+ <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass"
71
+ :type="entry.iconType" />
94
72
  <!-- end CmdIcon -->
95
73
  </template>
96
74
  <template v-else>
97
75
  <!-- begin street/number -->
98
76
  <template v-if="entry.streetNo">
99
- <span class="street-address">{{ entry.streetNo }}</span><br/>
77
+ <span class="street-address">{{ entry.streetNo }}</span><br />
100
78
  </template>
101
79
  <!-- end street/number -->
102
80
 
103
81
  <!-- begin zip/city (state) -->
104
- <span v-if="entry.zip || entry.city" :class="showCityBeforeZip ? 'order-city-zip' : 'order-zip-city'">
82
+ <span v-if="entry.zip || entry.city"
83
+ :class="showCityBeforeZip ? 'order-city-zip' : 'order-zip-city'">
105
84
  <span v-if="entry.zip" class="postal-code">{{ entry.zip }}&nbsp;</span>
106
- <span v-if="entry.city" class="locality">{{ entry.city }}<template v-if="entry.state"> {{entry.state}}</template></span><br/>
85
+ <span v-if="entry.city" class="locality">{{ entry.city }}<template
86
+ v-if="entry.state"> {{ entry.state }}</template></span><br />
107
87
  </span>
108
88
  <!-- end zip/city (state) -->
109
89
 
110
90
  <!-- begin po box -->
111
91
  <template v-if="entry.pobox">
112
- <span>{{ entry.pobox }}</span><br/>
92
+ <span>{{ entry.pobox }}</span><br />
113
93
  </template>
114
94
  <!-- end po box -->
115
95
 
116
96
  <!-- begin miscInfo -->
117
97
  <template v-if="entry.miscInfo">
118
- <span>{{ entry.miscInfo }}</span><br/>
98
+ <span>{{ entry.miscInfo }}</span><br />
119
99
  </template>
120
100
  <!-- end miscInfo -->
121
101
 
@@ -130,26 +110,28 @@
130
110
  <template v-if="!entry.linkGoogleMaps && !showIconsOnly">
131
111
  <!-- begin street/number -->
132
112
  <template v-if="entry.streetNo">
133
- <span class="street-address">{{ entry.streetNo }}</span><br/>
113
+ <span class="street-address">{{ entry.streetNo }}</span><br />
134
114
  </template>
135
115
  <!-- end street/number -->
136
116
 
137
117
  <!-- begin zip/city (state) -->
138
- <span v-if="entry.zip || entry.city" :class="showCityBeforeZip ? 'order-city-zip' : 'order-zip-city'">
118
+ <span v-if="entry.zip || entry.city"
119
+ :class="showCityBeforeZip ? 'order-city-zip' : 'order-zip-city'">
139
120
  <span v-if="entry.zip" class="postal-code">{{ entry.zip }}&nbsp;</span>
140
- <span v-if="entry.city" class="locality">{{ entry.city }}<template v-if="entry.state"> {{entry.state}}</template></span><br/>
121
+ <span v-if="entry.city" class="locality">{{ entry.city }}<template
122
+ v-if="entry.state"> {{ entry.state }}</template></span><br />
141
123
  </span>
142
124
  <!-- end zip/city (state) -->
143
125
 
144
126
  <!-- begin po box -->
145
127
  <template v-if="entry.pobox">
146
- <span>{{ entry.pobox }}</span><br/>
128
+ <span>{{ entry.pobox }}</span><br />
147
129
  </template>
148
130
  <!-- end po box -->
149
131
 
150
132
  <!-- begin miscInfo -->
151
133
  <template v-if="entry.miscInfo">
152
- <span>{{ entry.miscInfo }}</span><br/>
134
+ <span>{{ entry.miscInfo }}</span><br />
153
135
  </template>
154
136
  <!-- end miscInfo -->
155
137
 
@@ -168,14 +150,14 @@
168
150
  <!-- end list without labels -->
169
151
  </address>
170
152
  <!-- end address-data in vCard microformat -->
171
- </template>
153
+ </slot>
172
154
  </div>
173
155
  <!-- end CmdAddressData ---------------------------------------------------------------------------------------- -->
174
156
  </template>
175
157
 
176
158
  <script>
177
159
  // import functions
178
- import {buildComponentPath, updateHandlerProvider} from "../utils/editmode.js"
160
+ import { buildComponentPath, updateHandlerProvider } from "../utils/editmode.js"
179
161
 
180
162
  // import mixins
181
163
  import EditMode from "../mixins/EditMode.vue"
@@ -183,6 +165,11 @@ import EditMode from "../mixins/EditMode.vue"
183
165
  export default {
184
166
  name: "CmdAddressData",
185
167
  mixins: [EditMode],
168
+ inject: {
169
+ editModeContext: {
170
+ default: null
171
+ }
172
+ },
186
173
  props: {
187
174
  /**
188
175
  * style component as a box
@@ -192,23 +179,16 @@ export default {
192
179
  default: false
193
180
  },
194
181
  /**
195
- * activate if you want to use slot instead for given structure
182
+ * define orientation for component-content
196
183
  */
197
- useSlot: {
198
- type: Boolean,
199
- default: false
200
- },
201
- /**
202
- *
203
- */
204
- contentOrientation: {
184
+ contentOrientation: {
205
185
  type: String,
206
186
  default: "vertical",
207
187
  validator(value) {
208
188
  return value === "vertical" ||
209
189
  value === "horizontal"
210
190
  }
211
- },
191
+ },
212
192
  /**
213
193
  * show an icon (if exists) in front of label-text
214
194
  */
@@ -276,6 +256,13 @@ export default {
276
256
  }
277
257
  },
278
258
  computed: {
259
+ cmdHeadlineProperties() {
260
+ return {
261
+ show: true,
262
+ headlineLevel: 2,
263
+ ...this.cmdHeadline
264
+ }
265
+ },
279
266
  websiteUrlText() {
280
267
  return this.addressData.website?.text.replace("https://", "")
281
268
  }
@@ -355,7 +342,8 @@ export default {
355
342
  margin-right: calc(var(--default-margin) / 2);
356
343
  }
357
344
 
358
- .order-city-zip, .order-zip-city {
345
+ .order-city-zip,
346
+ .order-zip-city {
359
347
  display: inline-flex;
360
348
  gap: .5rem;
361
349
  }
@@ -1,38 +1,37 @@
1
1
  <template>
2
2
  <!-- begin CmdBankAccountData ---------------------------------------------------------------------------------------- -->
3
3
  <div :class="['cmd-bank-account-data', {box: styleAsBox}]">
4
- <!-- begin slot -->
5
- <template v-if="useSlot">
6
- <slot></slot>
7
- </template>
8
- <!-- end slot -->
9
-
10
- <template v-else>
11
- <!-- begin CmdHeadline -->
12
- <CmdHeadline v-if="cmdHeadline" v-bind="cmdHeadline"/>
13
- <!-- end CmdHeadline -->
4
+ <slot>
5
+ <CmdHeadline v-if="(cmdHeadlineProperties?.show && cmdHeadlineProperties?.headlineText) || editModeContext"
6
+ v-bind="cmdHeadlineProperties" />
14
7
 
15
8
  <!-- begin account data -->
16
9
  <dl>
17
10
  <template v-for="(entry, index) in accountData" :key="index">
18
11
  <dt>{{ entry.text }}</dt>
12
+
13
+ <!-- begin icon to copy data -->
19
14
  <dd v-if="allowCopyByClick && entry.allowCopy">
20
15
  <span>{{ entry.value }}</span>
21
- <a href="#" @click.prevent="copyToClipboard(entry.value)" :title="cmdIcon.tooltip">
22
- <!-- begin CmdIcon -->
23
- <CmdIcon :iconClass="cmdIcon.iconClass" :type="cmdIcon.iconType"/>
24
- <!-- end CmdIcon -->
25
- </a>
16
+ <CmdLink
17
+ @click="copyToClipboard(entry.value)"
18
+ v-bind="cmdLinkCopyDataProperties"
19
+ />
26
20
  </dd>
21
+ <!-- end icon to copy data -->
22
+
27
23
  <dd v-else :key="index">{{ entry.value }}</dd>
28
24
  </template>
29
25
  </dl>
30
26
  <!-- end account data -->
31
27
 
32
28
  <!-- begin additional information -->
33
- <p v-if="additionalInformation">{{ additionalInformation }}</p>
29
+ <CmdParagraph
30
+ v-if="cmdParagraphAdditionalInformationProperties.show && cmdParagraphAdditionalInformationProperties.text"
31
+ v-bind="cmdParagraphAdditionalInformationProperties"
32
+ />
34
33
  <!-- end additional information -->
35
- </template>
34
+ </slot>
36
35
  </div>
37
36
  <!-- end CmdBankAccountData ---------------------------------------------------------------------------------------- -->
38
37
  </template>
@@ -40,6 +39,11 @@
40
39
  <script>
41
40
  export default {
42
41
  name: "CmdBankAccountData",
42
+ inject: {
43
+ editModeContext: {
44
+ default: null
45
+ }
46
+ },
43
47
  props: {
44
48
  /**
45
49
  * style component as a box
@@ -48,13 +52,6 @@ export default {
48
52
  type: Boolean,
49
53
  default: false
50
54
  },
51
- /**
52
- * activate if you want to use slot instead for given structure
53
- */
54
- useSlot: {
55
- type: Boolean,
56
- default: false
57
- },
58
55
  /**
59
56
  * bank account data
60
57
  *
@@ -79,20 +76,21 @@ export default {
79
76
  required: false
80
77
  },
81
78
  /**
82
- * icon 'copy'
79
+ * properties for CmdLink to copy data to dashboard
83
80
  *
84
81
  * @requiredForAccessibility: partial
85
82
  */
86
- cmdIcon: {
83
+ cmdLinkCopyData: {
87
84
  type: Object,
88
- default() {
89
- return {
90
- iconClass: "icon-file-copy",
91
- tooltip: "Copy data to clipboard!",
92
- iconType: "auto"
93
- }
94
- }
85
+ required: false
95
86
  },
87
+ /**
88
+ * properties for CmdParagraph for additional information shown at bottom
89
+ */
90
+ cmdParagraphAdditionalInformation: {
91
+ type: Object,
92
+ required: false
93
+ },
96
94
  /**
97
95
  * properties for CmdHeadline-component
98
96
  */
@@ -101,6 +99,30 @@ export default {
101
99
  required: false
102
100
  }
103
101
  },
102
+ computed: {
103
+ cmdHeadlineProperties() {
104
+ return {
105
+ show: true,
106
+ headlineLevel: 2,
107
+ ...this.cmdHeadline
108
+ }
109
+ },
110
+ cmdParagraphAdditionalInformationProperties() {
111
+ return {
112
+ show: true,
113
+ ...this.cmdParagraphAdditionalInformation
114
+ }
115
+ },
116
+ cmdLinkCopyDataProperties() {
117
+ return {
118
+ icon: {
119
+ iconClass: "icon-file-copy",
120
+ tooltip: "Copy data to clipboard!"
121
+ },
122
+ ...this.cmdLinkCopyData
123
+ }
124
+ }
125
+ },
104
126
  methods: {
105
127
  copyToClipboard(entry) {
106
128
  // get data, remove spaces and copy to clipboard
@@ -1,16 +1,16 @@
1
1
  <template>
2
2
  <!-- begin CmdBasicForm---------------------------------------------------------------------------------------- -->
3
3
  <div class="cmd-basic-form">
4
- <!-- begin CmdHeadline -->
5
- <CmdHeadline v-if="cmdHeadline" v-bind="cmdHeadline" />
6
- <!-- end CmdHeadline -->
4
+ <CmdHeadline
5
+ v-if="(cmdHeadlineProperties?.show && cmdHeadlineProperties?.headlineText) || editModeContext"
6
+ v-bind="cmdHeadlineProperties"
7
+ />
7
8
 
8
- <!-- begin CmdForm -->
9
9
  <CmdForm
10
10
  @submit="onSubmit"
11
11
  :class="{'send-success': sendSuccessfully}"
12
12
  novalidate="novalidate"
13
- v-bind="cmdForm"
13
+ v-bind="cmdFormProperties"
14
14
  :legend="legend"
15
15
  :submitButton="submitButtonProperties"
16
16
  :formAction="formAction"
@@ -257,7 +257,6 @@
257
257
  <button class="button" type="button" @click="onSuccess">On Success</button>
258
258
  -->
259
259
  </CmdForm>
260
- <!-- end CmdForm -->
261
260
  </div>
262
261
  <!-- end CmdBasicForm---------------------------------------------------------------------------------------- -->
263
262
  </template>
@@ -470,6 +469,19 @@ export default {
470
469
  })
471
470
  },
472
471
  computed: {
472
+ cmdFormProperties() {
473
+ return {
474
+ method: "POST",
475
+ ...this.cmdForm
476
+ }
477
+ },
478
+ cmdHeadlineProperties() {
479
+ return {
480
+ show: true,
481
+ headlineLevel: 3,
482
+ ...this.cmdHeadline
483
+ }
484
+ },
473
485
  submitButtonProperties() {
474
486
  return {
475
487
  iconClass: "icon-message-send",
@@ -552,7 +564,7 @@ export default {
552
564
  customSubmitFormData.set(this.configuration[configurationEntries[i]].name, this.formData[configurationEntries[i]].value)
553
565
  }
554
566
 
555
- fetch(this.formAction, {method: this.cmdForm?.formMethod || "POST", body: customSubmitFormData}).then((response) => {
567
+ fetch(this.formAction, {method: this.cmdFormProperties?.formMethod || "POST", body: customSubmitFormData}).then((response) => {
556
568
  if(response.ok) {
557
569
  this.sendSuccessfully = true
558
570
  this.$refs.form.showMessage("success", this.getMessage("basic_form.system_message.success.message_sent_successfully"))
@@ -959,6 +959,8 @@ export default {
959
959
 
960
960
  .no-user-image {
961
961
  background: var(--default-background);
962
+ border: var(--image-border);
963
+ box-shadow: var(--image-box-shadow);
962
964
  }
963
965
  }
964
966
 
@@ -1043,6 +1045,12 @@ export default {
1043
1045
  }
1044
1046
  }
1045
1047
  }
1048
+
1049
+ ul.horizontal {
1050
+ li {
1051
+ border-radius: 0 !important;
1052
+ }
1053
+ }
1046
1054
  }
1047
1055
  }
1048
1056
 
@@ -300,6 +300,16 @@ export default {
300
300
  }
301
301
 
302
302
  .row-view {
303
+ .box.product {
304
+ .box-header {
305
+ border-top-right-radius: 0;
306
+
307
+ img {
308
+ border-top-right-radius: 0;
309
+ }
310
+ }
311
+ }
312
+
303
313
  p.cutoff-text {
304
314
  height: auto;
305
315
 
@@ -313,6 +323,10 @@ export default {
313
323
  padding: var(--default-padding);
314
324
  align-items: center;
315
325
 
326
+ .box-footer {
327
+ align-self: flex-start;
328
+ }
329
+
316
330
  img {
317
331
  margin-bottom: 0;
318
332
  }
@@ -3,30 +3,22 @@
3
3
  <ul class="cmd-breadcrumbs">
4
4
  <li v-if="breadcrumbLabel" class="breadcrumb-label">{{ breadcrumbLabel }}</li>
5
5
  <li v-for="(link, index) in breadcrumbLinks || []" :key="index">
6
- <!-- begin type 'href' -->
7
- <a v-if="link.type === 'href'" :href="link.path">
8
- <!-- begin CmdIcon -->
9
- <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
10
- <!-- end CmdIcon -->
11
- <span v-if="link.text">{{ link.text }}</span>
12
- </a>
13
- <!-- end type 'href' -->
14
-
15
- <!-- begin type 'router' -->
16
- <router-link v-else-if="link.type === 'router'" :to="getRoute(link)">
17
- <!-- begin CmdIcon -->
18
- <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
19
- <!-- end CmdIcon -->
20
- <span v-if="link.text">{{ link.text }}</span>
21
- </router-link>
22
- <!-- end type 'router' -->
23
-
6
+ <CmdLink
7
+ v-if="!link.type || link.type === 'href' || link.type === 'router'"
8
+ :linkType="link.type"
9
+ :path="link.type === 'href' ? link.path : getRoute(link)"
10
+ :icon="{ iconClass: link.iconClass, type: link.iconType }"
11
+ :text="link.text"
12
+ />
13
+ <!-- begin no link (recommended for active page)-->
24
14
  <span v-else>
25
15
  <!-- begin CmdIcon -->
26
16
  <CmdIcon v-if="link.iconClass" :iconClass="link.iconClass" :type="link.iconType" />
27
17
  <!-- end CmdIcon -->
28
18
  <span v-if="link.text">{{ link.text }}</span>
29
19
  </span>
20
+ <!-- end no link (recommended for active page)-->
21
+
30
22
  <span class="separator" v-if="index < breadcrumbLinks.length - 1">{{ breadcrumbSeparator }}</span>
31
23
  </li>
32
24
  </ul>
@@ -89,15 +81,6 @@ export default {
89
81
  &.breadcrumb-label {
90
82
  margin-right: calc(var(--default-margin) / 2);
91
83
  }
92
-
93
- a {
94
- display: table; /* do not set to (inline-)flex to avoid icon to be underlined by hover/active/focus */
95
- text-decoration: none;
96
-
97
- &:hover, &:active, &:focus {
98
- text-decoration: underline;
99
- }
100
- }
101
84
  }
102
85
  }
103
86
 
@@ -129,6 +129,9 @@ export default {
129
129
  display: block;
130
130
  max-height: 10rem;
131
131
  border: 0; /* overwrite default settings from frontend-framework */
132
+ border-radius: 0; /* overwrite default settings from frontend-framework */
133
+ box-shadow: none; /* overwrite default settings from frontend-framework */
134
+
132
135
  }
133
136
 
134
137
  > a {
@@ -2,7 +2,7 @@
2
2
  <!-- begin CmdContainer ---------------------------------------------------------------------------------------- -->
3
3
  <div :class="['cmd-container', {box: styleAsBox}]">
4
4
  <!-- begin CmdHeadline -->
5
- <CmdHeadline v-if="cmdHeadline" v-bind="cmdHeadline" />
5
+ <CmdHeadline v-if="cmdHeadlineProperties.show" v-bind="cmdHeadlineProperties" />
6
6
  <!-- end CmdHeadline -->
7
7
 
8
8
  <div :class="htmlClasses">
@@ -74,6 +74,13 @@ export default {
74
74
  type: Boolean,
75
75
  default: false
76
76
  },
77
+ /**
78
+ * define classes for inner container
79
+ */
80
+ innerClasses: {
81
+ type: [String, Array],
82
+ required: false
83
+ },
77
84
  /**
78
85
  * activate if items should not behave like flex-items (they are now shrunk to their content)
79
86
  *
@@ -132,8 +139,20 @@ export default {
132
139
  }
133
140
  },
134
141
  computed: {
142
+ cmdHeadlineProperties() {
143
+ return {
144
+ show: true,
145
+ headlineLevel: 2,
146
+ ...this.cmdHeadline
147
+ }
148
+ },
135
149
  htmlClasses() {
136
- const htmlClasses = []
150
+ let htmlClasses = [];
151
+
152
+ if (this.innerClasses !== undefined) {
153
+ // assign innerClasses (dpeending on type (array or string)) to htmlClasses-array
154
+ htmlClasses = Array.isArray(this.innerClasses) ? [...htmlClasses, ...this.innerClasses] : [...htmlClasses, this.innerClasses];
155
+ }
137
156
 
138
157
  if (this.containerType !== 'default') {
139
158
  if (this.containerType === "flex") {