comand-component-library 3.3.87 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
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;