comand-component-library 3.3.87 → 4.0.1

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 (73) hide show
  1. package/dist/comand-component-library.js +1728 -1655
  2. package/dist/comand-component-library.umd.cjs +4 -4
  3. package/dist/media/images/slideshow-images/large/slide1.jpg +0 -0
  4. package/dist/media/images/slideshow-images/large/slide2.jpg +0 -0
  5. package/dist/media/images/slideshow-images/large/slide3.jpg +0 -0
  6. package/dist/media/images/slideshow-images/large/slide4.jpg +0 -0
  7. package/dist/media/images/slideshow-images/medium/slide1.jpg +0 -0
  8. package/dist/media/images/slideshow-images/medium/slide2.jpg +0 -0
  9. package/dist/media/images/slideshow-images/medium/slide3.jpg +0 -0
  10. package/dist/media/images/slideshow-images/medium/slide4.jpg +0 -0
  11. package/dist/media/images/slideshow-images/small/slide1.jpg +0 -0
  12. package/dist/media/images/slideshow-images/small/slide2.jpg +0 -0
  13. package/dist/media/images/slideshow-images/small/slide3.jpg +0 -0
  14. package/dist/media/images/slideshow-images/small/slide4.jpg +0 -0
  15. package/dist/style.css +1 -1
  16. package/package.json +2 -2
  17. package/src/ComponentLibrary.vue +2629 -0
  18. package/src/assets/data/address-data.json +3 -3
  19. package/src/assets/data/main-navigation.json +2 -0
  20. package/src/components/CmdAddressData.vue +91 -97
  21. package/src/components/CmdAddressDataItem.vue +60 -52
  22. package/src/components/CmdBankAccountData.vue +1 -1
  23. package/src/components/CmdBox.vue +50 -14
  24. package/src/components/CmdBoxWrapper.vue +23 -9
  25. package/src/components/CmdBreadcrumbs.vue +1 -1
  26. package/src/components/CmdCompanyLogo.vue +14 -11
  27. package/src/components/CmdContainer.vue +1 -1
  28. package/src/components/CmdCookieDisclaimer.vue +1 -1
  29. package/src/components/CmdCopyrightInformation.vue +1 -1
  30. package/src/components/CmdFancyBox.vue +8 -5
  31. package/src/components/CmdForm.vue +7 -1
  32. package/src/components/CmdFormElement.vue +58 -108
  33. package/src/components/CmdFormFilters.vue +2 -1
  34. package/src/components/CmdGoogleMaps.vue +1 -1
  35. package/src/components/CmdHeadline.vue +116 -52
  36. package/src/components/CmdIcon.vue +1 -1
  37. package/src/components/CmdImage.vue +1 -1
  38. package/src/components/CmdImageGallery.vue +1 -1
  39. package/src/components/CmdImageZoom.vue +1 -1
  40. package/src/components/CmdInputGroup.vue +8 -7
  41. package/src/components/CmdListOfLinks.vue +25 -25
  42. package/src/components/CmdListOfLinksItem.vue +0 -4
  43. package/src/components/CmdListOfRequirements.vue +10 -2
  44. package/src/components/CmdLoginForm.vue +2 -1
  45. package/src/components/CmdMainNavigation.vue +38 -26
  46. package/src/components/CmdMultistepFormProgressBar.vue +50 -4
  47. package/src/components/CmdNewsletterSubscription.vue +8 -15
  48. package/src/components/CmdOpeningHours.vue +34 -19
  49. package/src/components/CmdOpeningHoursItem.vue +22 -14
  50. package/src/components/CmdPagination.vue +22 -16
  51. package/src/components/CmdProgressBar.vue +1 -1
  52. package/src/components/CmdSidebar.vue +13 -2
  53. package/src/components/CmdSiteFooter.vue +14 -14
  54. package/src/components/CmdSiteHeader.vue +14 -29
  55. package/src/components/CmdSiteSearch.vue +12 -11
  56. package/src/components/CmdSlideButton.vue +9 -7
  57. package/src/components/CmdSlideshow.vue +14 -12
  58. package/src/components/CmdSocialNetworks.vue +11 -4
  59. package/src/components/CmdSocialNetworksItem.vue +2 -7
  60. package/src/components/CmdSwitchLanguage.vue +1 -1
  61. package/src/components/CmdSystemMessage.vue +11 -6
  62. package/src/components/CmdTable.vue +64 -16
  63. package/src/components/CmdTabs.vue +2 -2
  64. package/src/components/CmdTextImageBlock.vue +3 -1
  65. package/src/components/CmdThumbnailScroller.vue +180 -155
  66. package/src/components/CmdToggleDarkMode.vue +1 -1
  67. package/src/components/CmdTooltip.vue +6 -1
  68. package/src/components/CmdUploadForm.vue +69 -43
  69. package/src/components/CmdWidthLimitationWrapper.vue +7 -3
  70. package/src/components/ComponentSettings.vue +171 -0
  71. package/src/main.js +3 -3
  72. package/src/mixins/FieldValidation.js +0 -17
  73. package/src/App.vue +0 -2119
@@ -19,7 +19,7 @@
19
19
  "location": ""
20
20
  },
21
21
  {
22
- "name": "telephone",
22
+ "name": "phone",
23
23
  "iconClass": "icon-phone",
24
24
  "data": "Your phone number",
25
25
  "labelText": "Telephone",
@@ -27,7 +27,7 @@
27
27
  "href": "0123456789"
28
28
  },
29
29
  {
30
- "name": "mobilephone",
30
+ "name": "phone",
31
31
  "iconClass": "icon-device-smartphone",
32
32
  "data": "Your mobile phone number",
33
33
  "labelText": "Mobile phone",
@@ -49,7 +49,7 @@
49
49
  "href": "mail@provider.de"
50
50
  },
51
51
  {
52
- "name": "website",
52
+ "name": "url",
53
53
  "iconClass": "icon-globe",
54
54
  "data": "Your web site",
55
55
  "labelText": "Web site",
@@ -1,5 +1,7 @@
1
1
  {
2
2
  "offcanvasPosition": "right",
3
+ "stretchMainItems": false,
4
+ "persistOnMobile": false,
3
5
  "navigationEntries": [
4
6
  {
5
7
  "type": "href",
@@ -9,119 +9,85 @@
9
9
  <template v-else>
10
10
  <!-- begin cmd-headline -->
11
11
  <CmdHeadline
12
- v-if="cmdHeadline?.headlineText || editModeContext"
13
- v-bind="cmdHeadline"
12
+ v-if="cmdHeadline?.headlineText || editModeContext" v-bind="cmdHeadline"
14
13
  />
15
14
  <!-- end cmd-headline -->
16
15
 
17
16
  <!-- begin address-data in vCard microformat -->
18
17
  <address class="adr">
19
18
  <!-- begin list with labels -->
20
- <template v-if="showLabels && !showIconsOnly">
19
+ <template v-if="showLabels && (showLabelTexts|| showLabelIcons) && !showIconsOnly">
21
20
  <!-- begin default view -->
22
21
  <dl v-if="!editModeContext">
22
+ <!-- begin cmd-address-data-item -->
23
23
  <CmdAddressDataItem
24
24
  v-for="(entry, index) in addressData"
25
- :key="index"
26
- :addressEntry="entry"
25
+ :key="index" :addressEntry="entry"
26
+ :showLabelIcons="showLabelIcons"
27
+ :showLabelTexts="showLabelTexts"
27
28
  />
29
+ <!-- end cmd-address-data-item -->
28
30
  </dl>
29
31
  <!-- end default view -->
30
32
 
31
33
  <!-- begin edit-mode -->
32
- <button v-if="addressData.length === 0" type="button" class="button confirm small"
33
- @click="onAddItem">
34
- <span class="icon-plus"></span>
35
- <span>Add new entry</span>
36
- </button>
37
- <EditComponentWrapper
38
- v-else
39
- v-for="(entry, index) in addressData"
40
- :key="'x' + index"
41
- class="edit-items"
42
- :showComponentName="false"
43
- :allowedComponentTypes="[]"
44
- componentName="CmdAddressDataItem"
45
- :componentProps="entry"
46
- :componentPath="['props', 'addressData', index]"
47
- >
48
- <dl>
49
- <CmdAddressDataItem
50
- :addressEntry="entry"
51
- :showLabelIcons="showLabelIcons"
52
- :showLabelTexts="showLabelTexts"
53
- />
54
- </dl>
55
- </EditComponentWrapper>
34
+ <template v-else>
35
+ <button v-if="addressData.length === 0" type="button" class="button confirm small" @click="onAddItem">
36
+ <span class="icon-plus"></span>
37
+ <span>Add new entry</span>
38
+ </button>
39
+ <EditComponentWrapper
40
+ v-for="(entry, index) in addressData"
41
+ :key="'x' + index"
42
+ class="edit-items"
43
+ :showComponentName="false"
44
+ :allowedComponentTypes="[]"
45
+ componentName="CmdAddressDataItem"
46
+ :componentProps="entry"
47
+ :componentPath="['props', 'addressData', index]"
48
+ >
49
+ <dl>
50
+ <!-- begin cmd-address-data-item -->
51
+ <CmdAddressDataItem
52
+ :addressEntry="entry"
53
+ :showLabelIcons="showLabelIcons"
54
+ :showLabelTexts="showLabelTexts"
55
+ />
56
+ <!-- end cmd-address-data-item -->
57
+ </dl>
58
+ </EditComponentWrapper>
59
+ </template>
56
60
  </template>
57
61
  <!-- end list with labels -->
58
62
 
59
63
  <!-- begin list without labels -->
60
64
  <ul v-else :class="['flex-container', {'vertical': !showIconsOnly}]">
61
65
  <template v-for="(entry, index) in addressData" :key="index">
62
- <template v-if="entry.href || entry.type === 'address' || !showIconsOnly">
63
- <li :class="{'no-flex' : showIconsOnly}">
64
- <!-- begin all entries except address (which has no href) -->
65
- <a v-if="entry.href" :href="getHref(entry)"
66
- :target="{'_blank' : entry.type === 'url'}"
67
- :title="entry.tooltip">
66
+ <li v-if="entry.href || (entry.name === 'address' && entry.linkGoogleMaps) || !showIconsOnly"
67
+ :class="{'no-flex' : showIconsOnly}">
68
+ <!-- begin all entries except address (which has no href) -->
69
+ <a v-if="entry.href" :href="getHref(entry)" :target="entry.name === 'url' ? '_blank' : null" :title="entry.tooltip">
70
+ <template v-if="showIconsOnly">
71
+ <!-- begin CmdIcon -->
72
+ <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass" :type="entry.iconType"/>
73
+ <!-- end CmdIcon -->
74
+ </template>
75
+ <template v-else>{{ entry.href }}</template>
76
+ </a>
77
+ <span v-else-if="!showIconsOnly" v-html="entry.data"></span>
78
+ <!-- end all entries except address -->
79
+
80
+ <!-- begin address -->
81
+ <template v-if="entry.name === 'address'">
82
+ <!-- begin linked address -->
83
+ <a v-if="entry.linkGoogleMaps" :href="locateAddress(entry)" target="google-maps" :title="entry.tooltip">
68
84
  <template v-if="showIconsOnly">
69
85
  <!-- begin CmdIcon -->
70
- <CmdIcon
71
- v-if="entry.iconClass"
72
- :iconClass="entry.iconClass"
73
- :type="entry.iconType"
74
- />
86
+ <CmdIcon v-if="entry.iconClass" :iconClass="entry.iconClass"
87
+ :type="entry.iconType"/>
75
88
  <!-- end CmdIcon -->
76
89
  </template>
77
- <template v-else>{{ entry.href }}</template>
78
- </a>
79
- <span v-else-if="!showIconsOnly" v-html="entry.data"></span>
80
- <!-- end all entries except address -->
81
-
82
- <!-- begin address -->
83
- <template v-if="entry.type === 'address'">
84
- <!-- begin linked address -->
85
- <a v-if="entry.linkGoogleMaps" :href="locateAddress(entry)" target="google-maps"
86
- :title="entry.tooltip">
87
- <template v-if="showIconsOnly">
88
- <!-- begin CmdIcon -->
89
- <CmdIcon
90
- v-if="entry.iconClass"
91
- :iconClass="entry.iconClass"
92
- :type="entry.iconType"
93
- />
94
- <!-- end CmdIcon -->
95
- </template>
96
- <template v-else>
97
- <!-- begin street/number -->
98
- <template v-if="entry.streetNo">
99
- <span class="street-address">{{ entry.streetNo }}</span><br/>
100
- </template>
101
- <!-- end street/number -->
102
-
103
- <!-- begin zip/city -->
104
- <template v-if="entry.zip || entry.city">
105
- <span class="postal-code">{{ entry.zip }}&nbsp;</span>
106
- <span class="locality">{{ entry.city }}</span><br/>
107
- </template>
108
- <!-- end zip/city -->
109
-
110
- <!-- begin miscInfo -->
111
- <template v-if="entry.miscInfo">
112
- <span>{{ entry.miscInfo }}</span><br/>
113
- </template>
114
- <!-- end miscInfo -->
115
-
116
- <!-- begin country -->
117
- <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
118
- <!-- end country -->
119
- </template>
120
- </a>
121
- <!-- end linked address -->
122
-
123
- <!-- begin unlinked address -->
124
- <template v-if="!entry.linkGoogleMaps && !showIconsOnly">
90
+ <template v-else>
125
91
  <!-- begin street/number -->
126
92
  <template v-if="entry.streetNo">
127
93
  <span class="street-address">{{ entry.streetNo }}</span><br/>
@@ -145,11 +111,38 @@
145
111
  <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
146
112
  <!-- end country -->
147
113
  </template>
148
- <!-- end unlinked address -->
114
+ </a>
115
+ <!-- end linked address -->
116
+
117
+ <!-- begin unlinked address -->
118
+ <template v-if="!entry.linkGoogleMaps && !showIconsOnly">
119
+ <!-- begin street/number -->
120
+ <template v-if="entry.streetNo">
121
+ <span class="street-address">{{ entry.streetNo }}</span><br/>
122
+ </template>
123
+ <!-- end street/number -->
124
+
125
+ <!-- begin zip/city -->
126
+ <template v-if="entry.zip || entry.city">
127
+ <span class="postal-code">{{ entry.zip }}&nbsp;</span>
128
+ <span class="locality">{{ entry.city }}</span><br/>
129
+ </template>
130
+ <!-- end zip/city -->
131
+
132
+ <!-- begin miscInfo -->
133
+ <template v-if="entry.miscInfo">
134
+ <span>{{ entry.miscInfo }}</span><br/>
135
+ </template>
136
+ <!-- end miscInfo -->
137
+
138
+ <!-- begin country -->
139
+ <span v-if="entry.country" class="country-name">{{ entry.country }}</span>
140
+ <!-- end country -->
149
141
  </template>
150
- <!-- end address -->
151
- </li>
152
- </template>
142
+ <!-- end unlinked address -->
143
+ </template>
144
+ <!-- end address -->
145
+ </li>
153
146
  <!-- end all entries except address -->
154
147
  </template>
155
148
  <!-- end v-for -->
@@ -251,13 +244,13 @@ export default {
251
244
  return "https://www.google.com/maps/place/" + entry.streetNo + ", " + entry.zip + " " + entry.city
252
245
  },
253
246
  getHref(entry) {
254
- if (entry.type === "phone") {
247
+ if (entry.name === "phone") {
255
248
  return "tel:" + entry.href
256
249
  }
257
- if (entry.type === "email") {
250
+ if (entry.name === "email") {
258
251
  return "mailto:" + entry.href
259
252
  }
260
- if (entry.type === "url") {
253
+ if (entry.name === "url") {
261
254
  return entry.href
262
255
  }
263
256
  return null
@@ -279,7 +272,7 @@ export default {
279
272
  }
280
273
  </script>
281
274
 
282
- <style lang="scss">
275
+ <style>
283
276
  /* begin cmd-address-data ---------------------------------------------------------------------------------------- */
284
277
  .cmd-address-data {
285
278
  dl {
@@ -287,7 +280,7 @@ export default {
287
280
 
288
281
  dt {
289
282
  display: flex;
290
- align-items: center;
283
+ top: 0.2rem;
291
284
 
292
285
  &.address {
293
286
  align-self: flex-start;
@@ -301,6 +294,7 @@ export default {
301
294
 
302
295
  ul {
303
296
  gap: calc(var(--default-gap) / 2);
297
+ margin-left: 0;
304
298
 
305
299
  li {
306
300
  margin-left: 0;
@@ -2,18 +2,22 @@
2
2
  <dt :class="['cmd-address-data-item', {'address': addressEntry.type === 'address'}]">
3
3
  <!-- begin CmdIcon -->
4
4
  <CmdIcon
5
- v-if="addressEntry.iconClass && showLabelIcons"
6
- :iconClass="addressEntry.iconClass"
7
- :type="addressEntry.iconType"
8
- :tooltip="addressEntry.labelText"
5
+ v-if="addressEntry.iconClass && showLabelIcons"
6
+ :iconClass="addressEntry.iconClass"
7
+ :type="addressEntry.iconType"
8
+ :tooltip="addressEntry.labelText"
9
9
  />
10
10
  <!-- end CmdIcon -->
11
+
12
+ <!-- begin show label-texts -->
11
13
  <span v-if="showLabelTexts">{{ addressEntry.labelText }}</span>
14
+ <!-- end show label-texts -->
12
15
  </dt>
13
16
  <!-- end labels -->
14
17
 
15
18
  <!-- begin data (except for address) -->
16
19
  <dd v-if="addressEntry.type !== 'address' && (addressEntry.data || addressEntry.href)" :class="vCardClass(addressEntry)">
20
+ <!-- begin default-view -->
17
21
  <template v-if="!editing">
18
22
  <a v-if="addressEntry.href"
19
23
  :href="getHref(addressEntry)"
@@ -25,28 +29,26 @@
25
29
  </a>
26
30
  <span v-else v-html="addressEntry.data"></span>
27
31
  </template>
32
+ <!-- end default-view -->
28
33
 
29
34
  <!-- begin edit-mode -->
30
35
  <CmdFormElement
31
- v-else
32
- element="input"
33
- :type="inputType(addressEntry)"
34
- class="edit-mode"
35
- :show-label="false"
36
- :labelText="addressEntry.labelText"
37
- :placeholder="addressEntry.labelText"
38
- v-model="editableAddressEntry"
36
+ v-else
37
+ element="input"
38
+ :type="inputType(addressEntry)"
39
+ class="edit-mode"
40
+ :show-label="false"
41
+ :labelText="addressEntry.labelText"
42
+ :placeholder="addressEntry.labelText"
43
+ v-model="editableAddressEntry"
39
44
  />
40
45
  <!-- end edit-mode -->
41
46
  </dd>
42
47
 
43
48
  <!-- begin data for address -->
44
- <dd v-else-if="addressEntry.type === 'address'">
49
+ <dd v-else-if="addressEntry.name === 'address'">
45
50
  <!-- begin linked address -->
46
- <a v-if="linkGoogleMaps && !editing"
47
- :href="locateAddress(addressEntry)"
48
- target="google-maps"
49
- :title="addressEntry.tooltip">
51
+ <a v-if="linkGoogleMaps && !editing" :href="locateAddress(addressEntry)" target="google-maps" :title="addressEntry.tooltip">
50
52
  <!-- begin street/number -->
51
53
  <template v-if="addressEntry.streetNo">
52
54
  <span class="street-address">{{ addressEntry.streetNo }}</span><br/>
@@ -103,59 +105,59 @@
103
105
  <template v-else>
104
106
  <!-- begin street/number -->
105
107
  <CmdFormElement
106
- element="input"
107
- type="text"
108
- class="edit-mode"
109
- :show-label="false"
110
- :labelText="addressEntry.labelText"
111
- :placeholder="addressEntry.labelText"
112
- v-model="editableAddressEntry.streetNo"
108
+ element="input"
109
+ type="text"
110
+ class="edit-mode"
111
+ :show-label="false"
112
+ :labelText="addressEntry.labelText"
113
+ :placeholder="addressEntry.labelText"
114
+ v-model="editableAddressEntry.streetNo"
113
115
  />
114
116
  <!-- end street/number -->
115
117
 
116
118
  <!-- begin zip/city -->
117
119
  <div class="input-wrapper">
118
120
  <CmdFormElement
119
- element="input"
120
- type="text"
121
- class="edit-mode"
122
- :show-label="false"
123
- :labelText="addressEntry.labelText"
124
- :placeholder="addressEntry.labelText"
125
- v-model="editableAddressEntry.zip"
121
+ element="input"
122
+ type="text"
123
+ class="edit-mode"
124
+ :show-label="false"
125
+ :labelText="addressEntry.labelText"
126
+ :placeholder="addressEntry.labelText"
127
+ v-model="editableAddressEntry.zip"
126
128
  />
127
129
  <CmdFormElement
128
- element="input"
129
- type="text"
130
- class="edit-mode"
131
- :show-label="false"
132
- :labelText="addressEntry.labelText"
133
- :placeholder="addressEntry.labelText"
134
- v-model="editableAddressEntry.city"
135
- />
136
- </div>
137
- <!-- end zip/city -->
138
-
139
- <!-- begin miscInfo -->
140
- <CmdFormElement
141
130
  element="input"
142
131
  type="text"
143
132
  class="edit-mode"
144
133
  :show-label="false"
145
134
  :labelText="addressEntry.labelText"
146
135
  :placeholder="addressEntry.labelText"
147
- v-model="editableAddressEntry.miscInfo"
136
+ v-model="editableAddressEntry.city"
137
+ />
138
+ </div>
139
+ <!-- end zip/city -->
140
+
141
+ <!-- begin miscInfo -->
142
+ <CmdFormElement
143
+ element="input"
144
+ type="text"
145
+ class="edit-mode"
146
+ :show-label="false"
147
+ :labelText="addressEntry.labelText"
148
+ :placeholder="addressEntry.labelText"
149
+ v-model="editableAddressEntry.miscInfo"
148
150
  />
149
151
  <!-- end miscInfo -->
150
152
 
151
153
  <!-- begin country -->
152
154
  <CmdFormElement
153
- element="select"
154
- class="edit-mode"
155
- :show-label="false"
156
- :labelText="addressEntry.labelText"
157
- :selectOptions="[{text: 'Germany', value: 'de'}, {text: 'United Kingdom', value: 'uk'}]"
158
- v-model="editableAddressEntry.country"
155
+ element="select"
156
+ class="edit-mode"
157
+ :show-label="false"
158
+ :labelText="addressEntry.labelText"
159
+ :selectOptions="[{text: 'Germany', value: 'de'}, {text: 'United Kingdom', value: 'uk'}]"
160
+ v-model="editableAddressEntry.country"
159
161
  />
160
162
  <!-- end country -->
161
163
  </template>
@@ -169,7 +171,7 @@
169
171
  <!-- end data (except for address) -->
170
172
  <script>
171
173
  import EditMode from "../mixins/EditMode.vue"
172
- import {updateHandlerProvider} from "../utils/editmode.js";
174
+ import {updateHandlerProvider} from "../utils/editmode.js"
173
175
 
174
176
  export default {
175
177
  name: "CmdAddressDataItem",
@@ -180,6 +182,9 @@ export default {
180
182
  }
181
183
  },
182
184
  props: {
185
+ /**
186
+ * one single address-entry
187
+ */
183
188
  addressEntry: {
184
189
  type: Object,
185
190
  default: {}
@@ -198,6 +203,9 @@ export default {
198
203
  type: Boolean,
199
204
  default: false
200
205
  },
206
+ /**
207
+ * activate if physical address should be linked with GoogleMaps
208
+ */
201
209
  linkGoogleMaps: {
202
210
  type: Boolean,
203
211
  default: false
@@ -88,7 +88,7 @@ export default {
88
88
  }
89
89
  </script>
90
90
 
91
- <style lang="scss">
91
+ <style>
92
92
  /* begin cmd-bank-account-data ---------------------------------------------------------------------------------------- */
93
93
  .cmd-bank-account-data {
94
94
  dd {
@@ -56,8 +56,8 @@
56
56
  <!-- end default header with slot -->
57
57
 
58
58
  <!-- begin box-body -->
59
- <div v-show="open" class="box-body" aria-expanded="true" role="article">
60
- <div v-if="useSlots?.includes('body')" :class="{'default-padding': useDefaultPadding}">
59
+ <div v-show="open" :class="['box-body', boxBodyClass]" aria-expanded="true" role="article">
60
+ <div v-if="useSlots?.includes('body')" :class="{'default-padding': useDefaultPadding, 'allow-scroll': allowContentToScroll}" :style="setMaxBoxBodyHeight">
61
61
  <!-- begin slot 'body' -->
62
62
  <slot name="body">
63
63
  <transition-group :name="toggleTransition">
@@ -79,7 +79,7 @@
79
79
  <template v-else>
80
80
  <img v-if="image" :src="image.src" :alt="image.altText"/>
81
81
 
82
- <div :class="{'default-padding': useDefaultPadding}">
82
+ <div :class="{'default-padding': useDefaultPadding, 'allow-scroll': allowContentToScroll}">
83
83
  <!-- begin CmdHeadline -->
84
84
  <CmdHeadline
85
85
  v-if="cmdHeadline?.headlineText && repeatHeadlineInBoxBody"
@@ -219,6 +219,22 @@ export default {
219
219
  type: String,
220
220
  default: "content"
221
221
  },
222
+ /**
223
+ * set if content (in box-body) should scroll
224
+ *
225
+ * (maxBoxBodyHeight must be set)
226
+ */
227
+ allowContentToScroll: {
228
+ type: Boolean,
229
+ default: false
230
+ },
231
+ /**
232
+ * set max-height for body (should only be used it allowContentToScroll-property is active)
233
+ */
234
+ maxBoxBodyHeight: {
235
+ type: String,
236
+ default: "10rem"
237
+ },
222
238
  /**
223
239
  * activate if box should be collapsible
224
240
  */
@@ -261,12 +277,19 @@ export default {
261
277
  /**
262
278
  * use transition to expand and collapse box-body
263
279
  *
264
- * boyType must be 'content' and 'collapsible' must be activated
280
+ * 'boyType-property' must be set to 'content' and 'collapsible-property' must be activated
265
281
  */
266
282
  useTransition: {
267
283
  type: Boolean,
268
284
  default: true
269
285
  },
286
+ /**
287
+ * custom class placed on box-body-container
288
+ */
289
+ boxBodyClass: {
290
+ type: String,
291
+ required: false
292
+ },
270
293
  /**
271
294
  * set default profile-icon (will eb shown if no user-image exists)
272
295
  */
@@ -383,6 +406,12 @@ export default {
383
406
  }
384
407
  },
385
408
  computed: {
409
+ setMaxBoxBodyHeight() {
410
+ if (this.allowContentToScroll && this.maxBoxBodyHeight) {
411
+ return this.maxBoxBodyHeight
412
+ }
413
+ return null
414
+ },
386
415
  toggleTransition() {
387
416
  if (this.useTransition) {
388
417
  return "fade"
@@ -419,7 +448,7 @@ export default {
419
448
  }
420
449
  </script>
421
450
 
422
- <style lang="scss">
451
+ <style>
423
452
  /* begin cmd-box ---------------------------------------------------------------------------------------- */
424
453
  .cmd-box {
425
454
  display: inline-flex;
@@ -436,28 +465,34 @@ export default {
436
465
  height: 100%;
437
466
  }
438
467
 
439
- > .cmd-headline {
468
+ .box-header .cmd-headline {
440
469
  margin-bottom: 0;
441
470
  }
442
471
 
443
- // collapsible box only
472
+ /* collapsible box only */
444
473
  &.collapsible {
445
474
  a.box-header {
446
475
  justify-content: space-between;
447
- background: var(--primary-color);
448
- border: var(--primary-border);
476
+ background: var(--hyperlink-color);
449
477
 
450
478
  &:hover, &:active, &:focus {
451
479
  background: var(--pure-white);
452
480
 
453
481
  * {
454
- color: var(--primary-color);
482
+ color: var(--hyperlink-color);
455
483
  }
456
484
  }
457
485
  }
458
486
  }
459
487
 
460
- // boyType === 'content'
488
+ .box-body {
489
+ .allow-scroll {
490
+ overflow-y: auto;
491
+ /*max-height: '${this.maxBoxBodyHeight}'*/
492
+ }
493
+ }
494
+
495
+ /* boyType === 'content' */
461
496
  &.content {
462
497
  > * {
463
498
  *:last-child {
@@ -501,6 +536,7 @@ export default {
501
536
 
502
537
  .box-body {
503
538
  flex-grow: 1;
539
+ border-top: var(--default-border);
504
540
 
505
541
  p.cutoff-text {
506
542
  padding: var(--default-padding);
@@ -572,7 +608,7 @@ export default {
572
608
  }
573
609
  }
574
610
 
575
- // boyType === 'product' and boxType === 'user'
611
+ /* boyType === 'product' and boxType === 'user' */
576
612
  &.product, &.user {
577
613
  > div {
578
614
  > .cmd-custom-headline {
@@ -582,7 +618,7 @@ export default {
582
618
  }
583
619
  }
584
620
 
585
- // boyType === 'product'
621
+ /* boyType === 'product' */
586
622
  &.product {
587
623
  text-decoration: none;
588
624
  overflow: hidden;
@@ -664,7 +700,7 @@ export default {
664
700
  }
665
701
  }
666
702
 
667
- // boxType === 'user'
703
+ /* boxType === 'user' */
668
704
  &.user {
669
705
  > .box-header {
670
706
  --icon-size: 6rem;