comand-component-library 3.3.1 → 3.3.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/comand-component-library.css +1 -1
- package/dist/comand-component-library.umd.min.js +1 -1
- package/package.json +2 -2
- package/src/App.vue +25 -28
- package/src/components/CmdAddressData.vue +27 -7
- package/src/components/CmdBackToTopButton.vue +11 -1
- package/src/components/CmdBankAccountData.vue +8 -2
- package/src/components/CmdBox.vue +46 -5
- package/src/components/CmdBoxWrapper.vue +76 -24
- package/src/components/CmdHeadline.vue +14 -1
- package/src/components/CmdMainNavigation.vue +15 -3
- package/src/components/CmdSiteHeader.vue +15 -5
- package/src/components/CmdThumbnailScroller.vue +11 -5
- package/src/documentation/generated/CmdBoxPropertyDescriptions.json +12 -0
- package/src/documentation/generated/CmdBoxWrapperPropertyDescriptions.json +18 -3
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "comand-component-library",
|
3
|
-
"version": "3.3.
|
3
|
+
"version": "3.3.3",
|
4
4
|
"private": false,
|
5
5
|
"scripts": {
|
6
6
|
"serve": "vue-cli-service serve",
|
@@ -18,7 +18,7 @@
|
|
18
18
|
],
|
19
19
|
"dependencies": {
|
20
20
|
"clickout-event": "^1.1.2",
|
21
|
-
"comand-frontend-framework": "^3.2.
|
21
|
+
"comand-frontend-framework": "^3.2.97",
|
22
22
|
"core-js": "^3.20.1",
|
23
23
|
"prismjs": "^1.27.0",
|
24
24
|
"sass": "^1.54.9",
|
package/src/App.vue
CHANGED
@@ -793,18 +793,21 @@
|
|
793
793
|
<a id="section-boxes"></a>
|
794
794
|
<CmdWidthLimitationWrapper>
|
795
795
|
<h2 class="headline-demopage">Boxes</h2>
|
796
|
-
<
|
797
|
-
|
798
|
-
<CmdBox v-for="index in 14" :key="index" textBody="Content" :cmd-headline="{headlineText: 'Headline ' + index, headlineLevel: 5}" />
|
796
|
+
<CmdBoxWrapper :useFlexbox="true" :cmdHeadline="{headlineText: 'Boxes in BoxWrapper with flexbox', headlineLevel: 3}" >
|
797
|
+
<CmdBox v-for="index in 14" :key="index" textBody="Content" :cmd-headline="{headlineText: 'Headline ' + index, headlineLevel: 4}" />
|
799
798
|
</CmdBoxWrapper>
|
800
|
-
<
|
801
|
-
|
802
|
-
|
799
|
+
<CmdBoxWrapper :useFlexbox="true" :cmdHeadline="{headlineText: 'Different examples of content-boxes (in BoxWrapper)', headlineLevel: 3}">
|
800
|
+
<CmdBox
|
801
|
+
:stretch-vertically="false"
|
802
|
+
:cmdHeadline="{headlineText: 'Box with cutoff text', headlineLevel: 4}"
|
803
|
+
textBody="This is a long text that is cutoff after a specific number of lines that can be defined by the property 'cutoffTextLines'"
|
804
|
+
:cutoff-text-lines="3"
|
805
|
+
/>
|
803
806
|
<CmdBox :useSlots="['header', 'body', 'footer']">
|
804
807
|
<template v-slot:header>
|
805
|
-
<
|
806
|
-
|
807
|
-
</
|
808
|
+
<h4>
|
809
|
+
Texts given by slots
|
810
|
+
</h4>
|
808
811
|
</template>
|
809
812
|
<template v-slot:body>
|
810
813
|
<div class="padding">
|
@@ -812,7 +815,7 @@
|
|
812
815
|
This content with paragraphs inside is placed inside the box-body.
|
813
816
|
</p>
|
814
817
|
<p>
|
815
|
-
<strong>Header, Content and Footer of this box are given by slots.</strong>
|
818
|
+
<strong>Header, Content/Body and Footer of this box are given by slots.</strong>
|
816
819
|
</p>
|
817
820
|
</div>
|
818
821
|
</template>
|
@@ -822,13 +825,11 @@
|
|
822
825
|
</p>
|
823
826
|
</template>
|
824
827
|
</CmdBox>
|
825
|
-
|
826
|
-
<div class="grid-small-item">
|
827
|
-
<CmdBox>
|
828
|
+
<CmdBox :useSlots="['header', 'body']">
|
828
829
|
<template v-slot:header>
|
829
|
-
<
|
830
|
+
<h4>
|
830
831
|
Box with links
|
831
|
-
</
|
832
|
+
</h4>
|
832
833
|
</template>
|
833
834
|
<template v-slot:body>
|
834
835
|
<ul class="navigation">
|
@@ -838,31 +839,28 @@
|
|
838
839
|
<li><a href="#" @click.prevent="">Link name 4</a></li>
|
839
840
|
</ul>
|
840
841
|
</template>
|
842
|
+
<!-- will not be displayed, because useSlots-property does not contain 'footer' in array -->
|
841
843
|
<template v-slot:footer>
|
842
844
|
<p>
|
843
845
|
footer content
|
844
846
|
</p>
|
845
847
|
</template>
|
846
848
|
</CmdBox>
|
847
|
-
|
848
|
-
<div class="grid-small-item">
|
849
|
-
<CmdBox :cmdHeadline="{headlineText: 'Collapsible box', headlineLevel: 4}" :collapsible="true">
|
849
|
+
<CmdBox :useSlots="['header', 'body']" :cmdHeadline="{headlineText: 'Collapsible box', headlineLevel: 4}" :collapsible="true">
|
850
850
|
<template v-slot:header>
|
851
|
-
<
|
851
|
+
<h4>
|
852
852
|
Collapsible box with image
|
853
|
-
</
|
853
|
+
</h4>
|
854
854
|
</template>
|
855
855
|
<template v-slot:body>
|
856
|
-
<img src="media/images/content-images/logo-business-edition-landscape.jpg" alt="Alternative text"/>
|
856
|
+
<img src="media/images/content-images/logo-business-edition-landscape.jpg" alt="Alternative text" />
|
857
857
|
</template>
|
858
858
|
</CmdBox>
|
859
|
-
|
860
|
-
<div class="grid-small-item">
|
861
|
-
<CmdBox>
|
859
|
+
<CmdBox :useSlots="['header', 'body', 'footer']">
|
862
860
|
<template v-slot:header>
|
863
|
-
<
|
861
|
+
<h4>
|
864
862
|
Box with image and content
|
865
|
-
</
|
863
|
+
</h4>
|
866
864
|
</template>
|
867
865
|
<template v-slot:body>
|
868
866
|
<img src="media/images/content-images/logo-business-edition-landscape.jpg" alt="Alternative text"/>
|
@@ -877,8 +875,7 @@
|
|
877
875
|
</p>
|
878
876
|
</template>
|
879
877
|
</CmdBox>
|
880
|
-
|
881
|
-
</div>
|
878
|
+
</CmdBoxWrapper>
|
882
879
|
<h3>Product boxes</h3>
|
883
880
|
<div class="grid-container-create-columns">
|
884
881
|
<div class="grid-small-item" v-for="(product, index) in boxProductData" :key="index">
|
@@ -10,7 +10,10 @@
|
|
10
10
|
<dl v-if="showLabels">
|
11
11
|
<!-- begin company -->
|
12
12
|
<dt v-if="addressData.company?.value">
|
13
|
-
|
13
|
+
<!-- begin CmdIcon -->
|
14
|
+
<CmdIcon v-if="addressData.company.iconClass && showLabelIcons" :iconClass="addressData.company.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.company')" />
|
15
|
+
<!-- end CmdIcon -->
|
16
|
+
|
14
17
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.company')}}</span>
|
15
18
|
</dt>
|
16
19
|
<dd v-if="addressData.company?.value" class="org">{{ addressData.company.value }}</dd>
|
@@ -19,7 +22,10 @@
|
|
19
22
|
<!-- begin address -->
|
20
23
|
<template v-if="addressData.address && addressData.address !== undefined">
|
21
24
|
<dt class="address">
|
22
|
-
|
25
|
+
<!-- begin CmdIcon -->
|
26
|
+
<CmdIcon v-if="addressData.address.iconClass && showLabelIcons" :iconClass="addressData.address.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.address')" />
|
27
|
+
<!-- end CmdIcon -->
|
28
|
+
|
23
29
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.address')}}</span>
|
24
30
|
</dt>
|
25
31
|
<dd v-if="addressData.address">
|
@@ -43,7 +49,10 @@
|
|
43
49
|
|
44
50
|
<!-- begin telephone -->
|
45
51
|
<dt v-if="addressData.telephone?.value">
|
46
|
-
|
52
|
+
<!-- begin CmdIcon -->
|
53
|
+
<CmdIcon v-if="addressData.telephone.iconClass && showLabelIcons" :iconClass="addressData.telephone.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.telephone')" />
|
54
|
+
<!-- end CmdIcon -->
|
55
|
+
|
47
56
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.telephone')}}</span>
|
48
57
|
</dt>
|
49
58
|
<dd v-if="addressData.telephone?.value">
|
@@ -53,7 +62,10 @@
|
|
53
62
|
|
54
63
|
<!-- begin mobile phone -->
|
55
64
|
<dt v-if="addressData.mobilephone?.value">
|
56
|
-
|
65
|
+
<!-- begin CmdIcon -->
|
66
|
+
<CmdIcon v-if="addressData.mobilephone.iconClass && showLabelIcons" :iconClass="addressData.mobilephone.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.mobile_phone')" />
|
67
|
+
<!-- end CmdIcon -->
|
68
|
+
|
57
69
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.mobile_phone')}}</span>
|
58
70
|
</dt>
|
59
71
|
<dd v-if="addressData.mobilephone?.value">
|
@@ -63,7 +75,10 @@
|
|
63
75
|
|
64
76
|
<!-- begin fax -->
|
65
77
|
<dt v-if="addressData.fax?.value">
|
66
|
-
|
78
|
+
<!-- begin CmdIcon -->
|
79
|
+
<CmdIcon v-if="addressData.fax.iconClass && showLabelIcons" :iconClass="addressData.fax.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.fax')" />
|
80
|
+
<!-- end CmdIcon -->
|
81
|
+
|
67
82
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.fax')}}</span>
|
68
83
|
</dt>
|
69
84
|
<dd v-if="addressData.fax?.value" class="fax">{{ addressData.fax.value }}</dd>
|
@@ -71,7 +86,10 @@
|
|
71
86
|
|
72
87
|
<!-- begin email -->
|
73
88
|
<dt v-if="addressData.email?.value">
|
74
|
-
|
89
|
+
<!-- begin CmdIcon -->
|
90
|
+
<CmdIcon v-if="addressData.email.iconClass && showLabelIcons" :iconClass="addressData.email.iconClass" :tooltip="getMessage('cmdaddressdata.labeltext.email')" />
|
91
|
+
<!-- end CmdIcon -->
|
92
|
+
|
75
93
|
<span v-if="showLabelTexts">{{ getMessage('cmdaddressdata.labeltext.email')}}</span>
|
76
94
|
</dt>
|
77
95
|
<dd class="email" v-if="addressData.email?.value">
|
@@ -125,12 +143,14 @@ import DefaultMessageProperties from "../mixins/CmdAddressData/DefaultMessagePro
|
|
125
143
|
|
126
144
|
// import components
|
127
145
|
import CmdHeadline from "./CmdHeadline"
|
146
|
+
import CmdIcon from "./CmdIcon"
|
128
147
|
|
129
148
|
export default {
|
130
149
|
name: "CmdAddressData",
|
131
150
|
mixins: [I18n, DefaultMessageProperties],
|
132
151
|
components: {
|
133
|
-
CmdHeadline
|
152
|
+
CmdHeadline,
|
153
|
+
CmdIcon
|
134
154
|
},
|
135
155
|
props: {
|
136
156
|
/**
|
@@ -1,14 +1,24 @@
|
|
1
1
|
<template>
|
2
2
|
<!-- begin cmd-back-to-top-button -->
|
3
3
|
<transition name="fade">
|
4
|
-
<a v-if="show"
|
4
|
+
<a v-if="show" class="cmd-back-to-top-button" href="#" :title="iconBackToTop.tooltip" @click.prevent="onBackToTop">
|
5
|
+
<!-- begin CmdIcon -->
|
6
|
+
<CmdIcon :iconClass="iconBackToTop.iconClass" />
|
7
|
+
<!-- end CmdIcon -->
|
8
|
+
</a>
|
5
9
|
</transition>
|
6
10
|
<!-- end cmd-back-to-top-button -->
|
7
11
|
</template>
|
8
12
|
|
9
13
|
<script>
|
14
|
+
// import components
|
15
|
+
import CmdIcon from "./CmdIcon"
|
16
|
+
|
10
17
|
export default {
|
11
18
|
name: "CmdBackToTopButton",
|
19
|
+
components: {
|
20
|
+
CmdIcon
|
21
|
+
},
|
12
22
|
data() {
|
13
23
|
return {
|
14
24
|
windowInnerHeight: window.innerHeight,
|
@@ -11,7 +11,9 @@
|
|
11
11
|
<dd v-if="allowCopyByClick && entry.allowCopy">
|
12
12
|
<span>{{ entry.value }}</span>
|
13
13
|
<a href="#" @click.prevent="copyToClipboard(entry.value)" :title="iconCopy.tooltip">
|
14
|
-
|
14
|
+
<!-- begin CmdIcon -->
|
15
|
+
<CmdIcon :iconClass="iconCopy.iconClass" />
|
16
|
+
<!-- end CmdIcon -->
|
15
17
|
</a>
|
16
18
|
</dd>
|
17
19
|
<dd v-else :key="index">{{ entry.value }}</dd>
|
@@ -28,10 +30,14 @@
|
|
28
30
|
<script>
|
29
31
|
// import components
|
30
32
|
import CmdHeadline from "./CmdHeadline"
|
33
|
+
import CmdIcon from "./CmdIcon"
|
31
34
|
|
32
35
|
export default {
|
33
36
|
name: "CmdBankAccountData",
|
34
|
-
components: {
|
37
|
+
components: {
|
38
|
+
CmdHeadline,
|
39
|
+
CmdIcon
|
40
|
+
},
|
35
41
|
props: {
|
36
42
|
/**
|
37
43
|
* bank account data
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<template>
|
2
2
|
<!-- begin boxType 'content' -->
|
3
3
|
<div v-if="boxType === 'content'"
|
4
|
-
:class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically &&
|
4
|
+
:class="['cmd-box box content', {open : open, collapsible: collapsible, 'stretch-vertically': stretchVertically && !collapsible, 'stretch-horizontally': stretchHorizontally}]">
|
5
5
|
<template v-if="useSlots?.includes('header')">
|
6
6
|
<!-- begin collapsible header with slot -->
|
7
7
|
<div v-if="collapsible" class="box-header">
|
@@ -10,7 +10,9 @@
|
|
10
10
|
<!-- end slot 'header' -->
|
11
11
|
|
12
12
|
<a href="#" @click.prevent="toggleContentVisibility" :title="open ? iconOpen.tooltip : iconClosed.tooltip" class="toggle-icon">
|
13
|
-
|
13
|
+
<!-- begin CmdIcon -->
|
14
|
+
<CmdIcon :iconClass="[open ? iconOpen.iconClass : iconClosed.iconClass]"></CmdIcon>
|
15
|
+
<!-- end CmdIcon -->
|
14
16
|
</a>
|
15
17
|
</div>
|
16
18
|
<!-- end collapsible header with slot -->
|
@@ -32,7 +34,10 @@
|
|
32
34
|
v-bind="cmdHeadline"
|
33
35
|
/>
|
34
36
|
<!-- end CmdHeadline -->
|
35
|
-
|
37
|
+
|
38
|
+
<!-- begin CmdIcon -->
|
39
|
+
<CmdIcon class="toggle-icon" :iconClass="[open ? iconOpen.iconClass : iconClosed.iconClass]"></CmdIcon>
|
40
|
+
<!-- end CmdIcon -->
|
36
41
|
</a>
|
37
42
|
<!-- end header for collapsible -->
|
38
43
|
|
@@ -50,7 +55,9 @@
|
|
50
55
|
<!-- begin slot 'body' -->
|
51
56
|
<slot name="body">
|
52
57
|
<transition :name="toggleTransition">
|
53
|
-
<
|
58
|
+
<div class="padding">
|
59
|
+
<p :class="{'cutoff-text': cutoffTextLines > 0, 'fade-last-line': fadeLastLine }">{{ textBody }}</p>
|
60
|
+
</div>
|
54
61
|
</transition>
|
55
62
|
</slot>
|
56
63
|
<!-- end slot 'body' -->
|
@@ -125,12 +132,14 @@ import GlobalCurrency from "../mixins/GlobalCurrency"
|
|
125
132
|
|
126
133
|
// import components
|
127
134
|
import CmdHeadline from "./CmdHeadline"
|
135
|
+
import CmdIcon from "./CmdIcon"
|
128
136
|
import CmdListOfLinks from "./CmdListOfLinks"
|
129
137
|
|
130
138
|
export default {
|
131
139
|
name: "CmdBox",
|
132
140
|
components: {
|
133
141
|
CmdHeadline,
|
142
|
+
CmdIcon,
|
134
143
|
CmdListOfLinks,
|
135
144
|
},
|
136
145
|
mixins: [
|
@@ -167,6 +176,22 @@ export default {
|
|
167
176
|
type: Boolean,
|
168
177
|
default: false
|
169
178
|
},
|
179
|
+
/**
|
180
|
+
* number of lines to show if text should be cutoff
|
181
|
+
*/
|
182
|
+
cutoffTextLines: {
|
183
|
+
type: Number,
|
184
|
+
default: 0
|
185
|
+
},
|
186
|
+
/**
|
187
|
+
* show fade-effect on last line
|
188
|
+
*
|
189
|
+
* cutoffTextLines-property must be large 0
|
190
|
+
*/
|
191
|
+
fadeLastLine: {
|
192
|
+
type: Boolean,
|
193
|
+
default: true
|
194
|
+
},
|
170
195
|
/**
|
171
196
|
* use transition to expand and collapse box-body
|
172
197
|
*
|
@@ -307,6 +332,7 @@ export default {
|
|
307
332
|
display: inline-flex;
|
308
333
|
flex-direction: column;
|
309
334
|
padding: 0;
|
335
|
+
align-self: start;
|
310
336
|
|
311
337
|
&.stretch-horizontally {
|
312
338
|
display: flex;
|
@@ -343,7 +369,7 @@ export default {
|
|
343
369
|
// boyType === 'content'
|
344
370
|
&.content {
|
345
371
|
> * {
|
346
|
-
|
372
|
+
*:last-child {
|
347
373
|
margin-bottom: 0;
|
348
374
|
}
|
349
375
|
}
|
@@ -376,6 +402,21 @@ export default {
|
|
376
402
|
flex-grow: 1;
|
377
403
|
padding: 0;
|
378
404
|
|
405
|
+
p.cutoff-text {
|
406
|
+
overflow: hidden;
|
407
|
+
height: calc(var(--line-of-text-height) * v-bind(cutoffTextLines));
|
408
|
+
|
409
|
+
&.fade-last-line::after {
|
410
|
+
content: "";
|
411
|
+
width: 100%;
|
412
|
+
position: absolute;
|
413
|
+
left: 0;
|
414
|
+
bottom: 0;
|
415
|
+
height: var(--line-of-text-height);
|
416
|
+
background: linear-gradient(to bottom, transparent 0%, var(--default-background-color) 90%);
|
417
|
+
}
|
418
|
+
}
|
419
|
+
|
379
420
|
.padding {
|
380
421
|
padding: var(--default-padding);
|
381
422
|
margin: 0;
|
@@ -1,22 +1,36 @@
|
|
1
1
|
<template>
|
2
2
|
<div class="cmd-box-wrapper">
|
3
|
-
<div
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
<div class="flex-container no-flex headline-wrapper">
|
4
|
+
<!-- begin CmdHeadline -->
|
5
|
+
<CmdHeadline v-if="cmdHeadline.headlineText" v-bind="cmdHeadline" />
|
6
|
+
<!-- end CmdHeadline -->
|
7
|
+
|
8
|
+
<div v-if="allowUserToToggleOrientation || allowTogglingCollapsingBoxes" class="options-wrapper">
|
9
|
+
<a v-if="allowTogglingCollapsingBoxes" href="#" @click.prevent="toggleCollapsingBoxes" :title="collapsingBoxesOpen ? collapseBoxesIcon.tooltip : expandBoxesIcon.tooltip">
|
10
|
+
<CmdIcon :iconClass="collapsingBoxesOpen ? expandBoxesIcon.iconClass : collapseBoxesIcon.iconClass"/>
|
11
|
+
</a>
|
12
|
+
<a v-if="allowUserToToggleOrientation" href="#" @click.prevent="oneBoxPerRow = !oneBoxPerRow" :title="oneBoxPerRow ? iconRowView.tooltip : iconGridView.tooltip">
|
13
|
+
<CmdIcon :iconClass="oneBoxPerRow ? iconGridView.iconClass : iconRowView.iconClass"/>
|
14
|
+
</a>
|
15
|
+
</div>
|
10
16
|
</div>
|
11
|
-
<div :class="[useFlexbox ? 'flex-container' : 'grid-container-create-columns', {'one-box-per-row': oneBoxPerRow}]">
|
17
|
+
<div :class="[useFlexbox ? 'flex-container' : 'grid-container-create-columns', {'one-box-per-row': oneBoxPerRow, 'stretch-boxes-vertically': stretchBoxesVertically}]">
|
12
18
|
<slot :collapsingBoxesOpen="collapsingBoxesOpen" :boxToggled="boxToggled" :currentOpenBox="currentOpenBox"></slot>
|
13
19
|
</div>
|
14
20
|
</div>
|
15
21
|
</template>
|
16
22
|
|
17
23
|
<script>
|
24
|
+
// import components
|
25
|
+
import CmdHeadline from "./CmdHeadline"
|
26
|
+
import CmdIcon from "./CmdIcon"
|
27
|
+
|
18
28
|
export default {
|
19
29
|
name: "CmdBoxWrapper",
|
30
|
+
components: {
|
31
|
+
CmdHeadline,
|
32
|
+
CmdIcon
|
33
|
+
},
|
20
34
|
data() {
|
21
35
|
return {
|
22
36
|
oneBoxPerRow: this.useRowViewAsDefault,
|
@@ -33,9 +47,18 @@ export default {
|
|
33
47
|
default: false
|
34
48
|
},
|
35
49
|
/**
|
36
|
-
*
|
50
|
+
* stretch boxes inside vertically to same height
|
51
|
+
*
|
52
|
+
* will not take effect on collapsable boxes
|
53
|
+
*/
|
54
|
+
stretchBoxesVertically: {
|
55
|
+
type: Boolean,
|
56
|
+
default: true
|
57
|
+
},
|
58
|
+
/**
|
59
|
+
* activate if user can toggle grid- and row-orientation by himself
|
37
60
|
*/
|
38
|
-
|
61
|
+
allowUserToToggleOrientation: {
|
39
62
|
type: Boolean,
|
40
63
|
default: true
|
41
64
|
},
|
@@ -79,6 +102,9 @@ export default {
|
|
79
102
|
},
|
80
103
|
/**
|
81
104
|
* define the number of boxes per row (if view is grid-view)
|
105
|
+
*
|
106
|
+
* useFlexbox-property must be set to true
|
107
|
+
* slot may not be used
|
82
108
|
*/
|
83
109
|
boxesPerRow: {
|
84
110
|
type: [Number, Array],
|
@@ -103,12 +129,24 @@ export default {
|
|
103
129
|
*/
|
104
130
|
iconRowView: {
|
105
131
|
type: Object,
|
106
|
-
default
|
132
|
+
default() {
|
107
133
|
return {
|
108
134
|
iconClass: 'icon-rows',
|
109
135
|
tooltip: 'Toggle to grid view'
|
110
136
|
}
|
111
137
|
}
|
138
|
+
},
|
139
|
+
/**
|
140
|
+
* properties for CmdHeadline-component
|
141
|
+
*/
|
142
|
+
cmdHeadline: {
|
143
|
+
type: Object,
|
144
|
+
default() {
|
145
|
+
return {
|
146
|
+
headlineText: "",
|
147
|
+
headlineLevel: 4
|
148
|
+
}
|
149
|
+
}
|
112
150
|
}
|
113
151
|
},
|
114
152
|
computed: {
|
@@ -167,19 +205,41 @@ export default {
|
|
167
205
|
@import '../assets/styles/variables';
|
168
206
|
|
169
207
|
.cmd-box-wrapper {
|
170
|
-
|
171
|
-
|
208
|
+
display: flex;
|
209
|
+
flex-direction: column;
|
210
|
+
gap: calc(var(--default-gap) / 2);
|
211
|
+
|
212
|
+
&:not(:first-child) {
|
213
|
+
margin-top: calc(var(--default-margin) * 2);
|
214
|
+
}
|
215
|
+
|
216
|
+
> .headline-wrapper {
|
217
|
+
align-items: center;
|
218
|
+
justify-content: space-between;
|
172
219
|
}
|
173
220
|
|
174
221
|
> .flex-container {
|
175
222
|
.cmd-headline {
|
176
|
-
|
177
|
-
white-space: nowrap;
|
178
|
-
}
|
223
|
+
margin: 0;
|
179
224
|
}
|
180
225
|
|
181
226
|
&.one-box-per-row {
|
182
227
|
flex-direction: column;
|
228
|
+
|
229
|
+
p.cutoff-text {
|
230
|
+
height: auto;
|
231
|
+
|
232
|
+
&.fade-last-line::after {
|
233
|
+
background: none;
|
234
|
+
}
|
235
|
+
}
|
236
|
+
}
|
237
|
+
|
238
|
+
&.stretch-boxes-vertically {
|
239
|
+
.stretch-vertically {
|
240
|
+
align-self: stretch;
|
241
|
+
height: auto; /* must be set to auto if inner boxes have als stretchVertically-property activated */
|
242
|
+
}
|
183
243
|
}
|
184
244
|
}
|
185
245
|
|
@@ -187,14 +247,6 @@ export default {
|
|
187
247
|
grid-template-columns: repeat(v-bind(boxesPerRowLarge), minmax(0, 1fr));
|
188
248
|
}
|
189
249
|
|
190
|
-
.cmd-box {
|
191
|
-
&.content {
|
192
|
-
&.collapsible {
|
193
|
-
align-self: flex-start;
|
194
|
-
}
|
195
|
-
}
|
196
|
-
}
|
197
|
-
|
198
250
|
@media only screen and (max-width: $medium-max-width) {
|
199
251
|
> .grid-container-create-columns {
|
200
252
|
grid-template-columns: repeat(v-bind(boxesPerRowMedium), minmax(0, 1fr));
|
@@ -1,21 +1,34 @@
|
|
1
1
|
<template>
|
2
2
|
<div :class="['cmd-headline', { 'has-pre-headline-text': preHeadlineText, 'has-icon': iconClass}]">
|
3
|
-
|
3
|
+
<!-- begin CmdIcon -->
|
4
|
+
<CmdIcon v-if="iconClass" :iconClass="iconClass" />
|
5
|
+
<!-- end CmdIcon -->
|
6
|
+
|
4
7
|
<div v-if="preHeadlineText">
|
5
8
|
<span class="pre-headline-text">{{ preHeadlineText }}</span>
|
6
9
|
<component :is="getHeadlineTag">
|
10
|
+
<!-- being slot -->
|
7
11
|
<slot>{{ headlineText }}</slot>
|
12
|
+
<!-- end slot -->
|
8
13
|
</component>
|
9
14
|
</div>
|
10
15
|
<component v-else :is="getHeadlineTag">
|
16
|
+
<!-- being slot -->
|
11
17
|
<slot>{{ headlineText }}</slot>
|
18
|
+
<!-- end slot -->
|
12
19
|
</component>
|
13
20
|
</div>
|
14
21
|
</template>
|
15
22
|
|
16
23
|
<script>
|
24
|
+
// import components
|
25
|
+
import CmdIcon from "./CmdIcon"
|
26
|
+
|
17
27
|
export default {
|
18
28
|
name: "CmdHeadline",
|
29
|
+
components: {
|
30
|
+
CmdIcon
|
31
|
+
},
|
19
32
|
props: {
|
20
33
|
/**
|
21
34
|
* text for headline
|
@@ -13,7 +13,7 @@
|
|
13
13
|
<!-- begin main-level -->
|
14
14
|
<ul :class="{'stretch-items' : stretchMainItems}">
|
15
15
|
<li class="close-nav" v-if="showOffcanvas">
|
16
|
-
<a href="#" @click.prevent="
|
16
|
+
<a href="#" id="close-offcanvas" role="button" @click.prevent="closeOffcanvasNavigation">
|
17
17
|
<span v-if="closeOffcanvas.iconClass" :class="closeOffcanvas.iconClass"></span>
|
18
18
|
<span :class="{'hidden': !closeOffcanvas.showText}">{{ closeOffcanvas.text }}</span>
|
19
19
|
</a>
|
@@ -125,8 +125,7 @@
|
|
125
125
|
</nav>
|
126
126
|
|
127
127
|
<!-- begin offCanvasButton -->
|
128
|
-
<a href="#" class="button" id="toggle-offcanvas" @click.prevent="
|
129
|
-
v-if="persistOnMobile === false">
|
128
|
+
<a v-if="persistOnMobile === false" href="#" class="button" id="toggle-offcanvas" @click.prevent="toggleOffcanvasNavigation">
|
130
129
|
<span :class="buttonOffcanvas.iconClass"></span>
|
131
130
|
<span :class="{'hidden' : !buttonOffcanvas.showText}">{{ buttonOffcanvas.text }}</span>
|
132
131
|
</a>
|
@@ -264,6 +263,19 @@ export default {
|
|
264
263
|
},
|
265
264
|
getRoute(navigationEntry) {
|
266
265
|
return getRoute(navigationEntry)
|
266
|
+
},
|
267
|
+
closeOffcanvasNavigation() {
|
268
|
+
this.showOffcanvas = false
|
269
|
+
document.getElementById("toggle-offcanvas").focus()
|
270
|
+
},
|
271
|
+
toggleOffcanvasNavigation() {
|
272
|
+
if (this.showOffcanvas) {
|
273
|
+
this.closeOffcanvasNavigation()
|
274
|
+
} else {
|
275
|
+
// open offcanvas
|
276
|
+
this.showOffcanvas = true
|
277
|
+
this.$nextTick(() => document.getElementById("close-offcanvas").focus())
|
278
|
+
}
|
267
279
|
}
|
268
280
|
}
|
269
281
|
}
|