comand-component-library 3.3.48 → 3.3.50
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/comand-component-library.js +1001 -1045
- package/dist/comand-component-library.umd.cjs +4 -4
- package/dist/style.css +1 -1
- package/package.json +40 -40
- package/src/App.vue +27 -16
- package/src/assets/data/address-data.json +2 -3
- package/src/assets/data/list-of-links.json +1 -2
- package/src/assets/data/main-navigation.json +1 -1
- package/src/assets/data/tabs.json +1 -1
- package/src/assets/styles/logos-iconfont.css +0 -1
- package/src/components/CmdAddressData.vue +63 -74
- package/src/components/CmdBackToTopButton.vue +11 -36
- package/src/components/CmdBankAccountData.vue +4 -10
- package/src/components/CmdBox.vue +19 -30
- package/src/components/CmdCompanyLogo.vue +7 -14
- package/src/components/CmdFancyBox.vue +1 -3
- package/src/components/CmdFormElement.vue +1 -8
- package/src/components/CmdImageZoom.vue +4 -8
- package/src/components/CmdListOfLinks.vue +2 -17
- package/src/components/CmdMainNavigation.vue +6 -0
- package/src/components/CmdPager.vue +4 -0
- package/src/components/CmdSiteHeader.vue +24 -42
- package/src/components/CmdTabs.vue +1 -9
- package/src/components/CmdTextBlock.vue +1 -1
- package/src/components/CmdThumbnailScroller.vue +0 -6
- package/src/components/CmdToggleDarkMode.vue +9 -14
- package/src/mixins/CmdAddressData/DefaultMessageProperties.js +4 -4
@@ -32,7 +32,7 @@
|
|
32
32
|
v-telephone="entry.href">
|
33
33
|
{{ entry.href }}
|
34
34
|
</a>
|
35
|
-
<
|
35
|
+
<template v-else>{{ entry.data }}</template>
|
36
36
|
</dd>
|
37
37
|
<!-- end data (except for address) -->
|
38
38
|
|
@@ -40,7 +40,7 @@
|
|
40
40
|
<dd v-else>
|
41
41
|
<!-- begin linked address -->
|
42
42
|
<a v-if="linkGoogleMaps"
|
43
|
-
:href="locateAddress
|
43
|
+
:href="locateAddress"
|
44
44
|
target="google-maps"
|
45
45
|
:title="getMessage('cmdaddressdata.title.open_address_on_google_maps')">
|
46
46
|
<!-- begin street/number -->
|
@@ -103,10 +103,11 @@
|
|
103
103
|
|
104
104
|
<!-- begin list without labels -->
|
105
105
|
<ul v-else :class="['flex-container', {'vertical': !showIconsOnly}]">
|
106
|
+
|
106
107
|
<template v-for="(entry, index) in addressData" :key="index">
|
107
|
-
|
108
|
-
|
109
|
-
|
108
|
+
<!-- begin all entries except address -->
|
109
|
+
<template v-if="entry.name !== 'address'">
|
110
|
+
<li v-if="entry.href || !showIconsOnly" :class="{'no-flex' : showIconsOnly}">
|
110
111
|
<a v-if="entry.href" :href="getHref(entry)"
|
111
112
|
:target="{'_blank' : entry.name === 'website'}"
|
112
113
|
:title="entry.tooltip">
|
@@ -121,80 +122,68 @@
|
|
121
122
|
</template>
|
122
123
|
<template v-else>{{ entry.href }}</template>
|
123
124
|
</a>
|
124
|
-
<
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
<template v-if="entry.name === 'address'">
|
129
|
-
<!-- begin linked address -->
|
130
|
-
<a v-if="linkGoogleMaps" :href="locateAddress(entry)" target="google-maps" :title="entry.tooltip">
|
131
|
-
<template v-if="showIconsOnly">
|
132
|
-
<!-- begin CmdIcon -->
|
133
|
-
<CmdIcon
|
134
|
-
v-if="entry.iconClass"
|
135
|
-
:iconClass="entry.iconClass"
|
136
|
-
:type="entry.iconType"
|
137
|
-
/>
|
138
|
-
<!-- end CmdIcon -->
|
139
|
-
</template>
|
140
|
-
<template v-else>
|
141
|
-
<!-- begin street/number -->
|
142
|
-
<template v-if="entry.streetNo">
|
143
|
-
<span class="street-address">{{ entry.streetNo }}</span><br/>
|
144
|
-
</template>
|
145
|
-
<!-- end street/number -->
|
125
|
+
<template v-else-if="!showIconsOnly">{{ entry.data }}</template>
|
126
|
+
</li>
|
127
|
+
</template>
|
128
|
+
<!-- end all entries except address -->
|
146
129
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
130
|
+
<!-- begin address -->
|
131
|
+
<li v-else-if="entry.name === 'address' && !showIconsOnly">
|
132
|
+
<!-- begin linked address -->
|
133
|
+
<a v-if="linkGoogleMaps" :href="locateAddress" target="google-maps" :title="getMessage('cmdaddressdata.title.open_address_on_google_maps')">
|
134
|
+
<!-- begin street/number -->
|
135
|
+
<template v-if="entry.streetNo">
|
136
|
+
<span class="street-address">{{ entry.streetNo }}</span><br/>
|
137
|
+
</template>
|
138
|
+
<!-- end street/number -->
|
153
139
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
140
|
+
<!-- begin zip/city -->
|
141
|
+
<template v-if="entry.zip || entry.city">
|
142
|
+
<span class="postal-code">{{ entry.zip }} </span>
|
143
|
+
<span class="locality">{{ entry.city }}</span><br/>
|
144
|
+
</template>
|
145
|
+
<!-- end zip/city -->
|
159
146
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
<!-- end linked address -->
|
147
|
+
<!-- begin miscInfo -->
|
148
|
+
<template v-if="entry.miscInfo">
|
149
|
+
<span>{{ entry.miscInfo }}</span><br/>
|
150
|
+
</template>
|
151
|
+
<!-- end miscInfo -->
|
166
152
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
</template>
|
173
|
-
<!-- end street/number -->
|
153
|
+
<!-- begin country -->
|
154
|
+
<span v-if="entry.country" class="country-name">{{ entry.country }}</span>
|
155
|
+
<!-- end country -->
|
156
|
+
</a>
|
157
|
+
<!-- end linked address -->
|
174
158
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
159
|
+
<!-- begin unlinked address -->
|
160
|
+
<template v-else>
|
161
|
+
<!-- begin street/number -->
|
162
|
+
<template v-if="entry.streetNo">
|
163
|
+
<span class="street-address">{{ entry.streetNo }}</span><br/>
|
164
|
+
</template>
|
165
|
+
<!-- end street/number -->
|
181
166
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
167
|
+
<!-- begin zip/city -->
|
168
|
+
<template v-if="entry.zip || entry.city">
|
169
|
+
<span class="postal-code">{{ entry.zip }} </span>
|
170
|
+
<span class="locality">{{ entry.city }}</span><br/>
|
171
|
+
</template>
|
172
|
+
<!-- end zip/city -->
|
187
173
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
</template>
|
192
|
-
<!-- end unlinked address -->
|
174
|
+
<!-- begin miscInfo -->
|
175
|
+
<template v-if="entry.miscInfo">
|
176
|
+
<span>{{ entry.miscInfo }}</span><br/>
|
193
177
|
</template>
|
194
|
-
<!-- end
|
195
|
-
|
196
|
-
|
197
|
-
|
178
|
+
<!-- end miscInfo -->
|
179
|
+
|
180
|
+
<!-- begin country -->
|
181
|
+
<span v-if="entry.country" class="country-name">{{ entry.country }}</span>
|
182
|
+
<!-- end country -->
|
183
|
+
</template>
|
184
|
+
<!-- end unlinked address -->
|
185
|
+
</li>
|
186
|
+
<!-- end address -->
|
198
187
|
</template>
|
199
188
|
<!-- end v-for -->
|
200
189
|
</ul>
|
@@ -264,14 +253,14 @@ export default {
|
|
264
253
|
}
|
265
254
|
},
|
266
255
|
computed: {
|
256
|
+
locateAddress() {
|
257
|
+
return "https://www.google.com/maps/place/" + this.addressData.address.streetNo + ", " + this.addressData.address.zip + " " + this.addressData.address.city
|
258
|
+
},
|
267
259
|
websiteUrlText() {
|
268
260
|
return this.addressData.website?.text.replace("https://", "")
|
269
261
|
}
|
270
262
|
},
|
271
263
|
methods: {
|
272
|
-
locateAddress(entry) {
|
273
|
-
return "https://www.google.com/maps/place/" + entry.streetNo + ", " + entry.zip + " " + entry.city
|
274
|
-
},
|
275
264
|
vCardClass(entry) {
|
276
265
|
if (entry.name === 'company') {
|
277
266
|
return "org"
|
@@ -17,18 +17,11 @@ export default {
|
|
17
17
|
data() {
|
18
18
|
return {
|
19
19
|
windowInnerHeight: window.innerHeight,
|
20
|
-
windowScrollY:
|
21
|
-
|
20
|
+
windowScrollY: window.scrollY,
|
21
|
+
bodyScrollHeight: document.body.scrollHeight
|
22
22
|
}
|
23
23
|
},
|
24
24
|
props: {
|
25
|
-
/**
|
26
|
-
* define which container's scroll-behavior should be observed (can be any selector)
|
27
|
-
*/
|
28
|
-
scrollContainer: {
|
29
|
-
type: String,
|
30
|
-
default: "body"
|
31
|
-
},
|
32
25
|
/**
|
33
26
|
* icon-class (and shown tooltip on hover) for back to top button
|
34
27
|
*
|
@@ -45,46 +38,28 @@ export default {
|
|
45
38
|
}
|
46
39
|
}
|
47
40
|
},
|
48
|
-
|
49
|
-
window.addEventListener('resize', this.onViewportChange)
|
50
|
-
|
51
|
-
window.addEventListener('scroll', this.onViewportChange);
|
52
|
-
} else {
|
53
|
-
document.querySelector(this.scrollContainer)?.addEventListener('scroll', this.onViewportChange);
|
54
|
-
}
|
41
|
+
created() {
|
42
|
+
window.addEventListener('resize', this.onViewportChange);
|
43
|
+
window.addEventListener('scroll', this.onViewportChange);
|
55
44
|
},
|
56
45
|
unmounted() {
|
57
|
-
window.removeEventListener('resize', this.onViewportChange)
|
58
|
-
|
59
|
-
window.addEventListener('scroll', this.onViewportChange);
|
60
|
-
} else {
|
61
|
-
document.querySelector(this.scrollContainer)?.removeEventListener('scroll', this.onViewportChange)
|
62
|
-
}
|
46
|
+
window.removeEventListener('resize', this.onViewportChange);
|
47
|
+
window.removeEventListener('scroll', this.onViewportChange);
|
63
48
|
},
|
64
49
|
/* watch for changes */
|
65
50
|
computed: {
|
66
51
|
show() {
|
67
|
-
return this.windowScrollY > 0 && this.windowInnerHeight < this.
|
52
|
+
return this.windowScrollY > 0 && this.windowInnerHeight < this.bodyScrollHeight;
|
68
53
|
}
|
69
54
|
},
|
70
55
|
methods: {
|
71
|
-
getScrollY() {
|
72
|
-
if (this.scrollContainer === "body") {
|
73
|
-
return window.scrollY
|
74
|
-
}
|
75
|
-
return document.querySelector(this.scrollContainer)?.scrollTop || 0
|
76
|
-
},
|
77
56
|
onViewportChange() {
|
78
57
|
this.windowInnerHeight = window.innerHeight;
|
79
|
-
this.windowScrollY =
|
80
|
-
this.
|
58
|
+
this.windowScrollY = window.scrollY;
|
59
|
+
this.bodyScrollHeight = document.body.scrollHeight;
|
81
60
|
},
|
82
61
|
onBackToTop() {
|
83
|
-
|
84
|
-
window.scrollTo({top: 0, left: 0, behavior: 'smooth'})
|
85
|
-
} else {
|
86
|
-
document.querySelector(this.scrollContainer)?.scrollTo({top: 0, left: 0, behavior: 'smooth'})
|
87
|
-
}
|
62
|
+
window.scrollTo({top: 0, left: 0, behavior: 'smooth'});
|
88
63
|
}
|
89
64
|
}
|
90
65
|
}
|
@@ -79,16 +79,10 @@ export default {
|
|
79
79
|
},
|
80
80
|
methods: {
|
81
81
|
copyToClipboard(entry) {
|
82
|
-
//get data, remove spaces and copy to clipboard
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
const output = entry.replace(/\s/g, "")
|
87
|
-
navigator.clipboard.writeText(output)
|
88
|
-
alert(output + " was copied to clipboard")
|
89
|
-
}
|
90
|
-
})
|
91
|
-
.catch(error => console.error(error))
|
82
|
+
// get data, remove spaces and copy to clipboard
|
83
|
+
const output = entry.replace(/\s/g, "")
|
84
|
+
navigator.clipboard.writeText(output)
|
85
|
+
alert(output + " was copied to clipboard")
|
92
86
|
}
|
93
87
|
}
|
94
88
|
}
|
@@ -57,38 +57,27 @@
|
|
57
57
|
|
58
58
|
<!-- begin box-body -->
|
59
59
|
<div v-if="open" :class="['box-body', {'default-padding': useDefaultPadding}]" aria-expanded="true" role="article">
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
</
|
74
|
-
|
75
|
-
|
76
|
-
<!-- begin slot 'body' -->
|
77
|
-
<slot v-if="useSlots?.includes('body')" name="body">
|
78
|
-
<p>{{ textBody }}</p>
|
79
|
-
</slot>
|
80
|
-
<!-- end slot 'body' -->
|
81
|
-
</template>
|
82
|
-
<!-- end no cut-off-text-lines -->
|
83
|
-
</transition-group>
|
84
|
-
<a v-if="cutoffTextLines > 0" href="#" @click.prevent="toggleCutOffText">
|
85
|
-
{{ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text") }}
|
86
|
-
</a>
|
60
|
+
<!-- begin slot 'body' -->
|
61
|
+
<slot v-if="useSlots?.includes('body')" name="body">
|
62
|
+
<transition-group :name="toggleTransition">
|
63
|
+
<p :class="{
|
64
|
+
'cutoff-text': cutoffTextLines > 0,
|
65
|
+
'fade-last-line': fadeLastLine && !showCutOffText,
|
66
|
+
'show-text' : showCutOffText
|
67
|
+
}">
|
68
|
+
{{ textBody }}
|
69
|
+
</p>
|
70
|
+
<a v-if="cutoffTextLines > 0" href="#" @click.prevent="toggleCutOffText">
|
71
|
+
{{ showCutOffText ? getMessage("cmdbox.contentbox.collapse_text") : getMessage("cmdbox.contentbox.expand_text") }}
|
72
|
+
</a>
|
73
|
+
</transition-group>
|
74
|
+
</slot>
|
75
|
+
<!-- end slot 'body' -->
|
87
76
|
|
88
77
|
<template v-else>
|
89
78
|
<img v-if="image" :src="image.src" :alt="image.altText"/>
|
90
79
|
|
91
|
-
<div
|
80
|
+
<div class="text-wrapper">
|
92
81
|
<!-- begin CmdHeadline -->
|
93
82
|
<CmdHeadline
|
94
83
|
v-if="cmdHeadline?.headlineText && repeatHeadlineInBoxBody"
|
@@ -265,7 +254,7 @@ export default {
|
|
265
254
|
*/
|
266
255
|
fadeLastLine: {
|
267
256
|
type: Boolean,
|
268
|
-
default:
|
257
|
+
default: true
|
269
258
|
},
|
270
259
|
/**
|
271
260
|
* use transition to expand and collapse box-body
|
@@ -513,7 +502,7 @@ export default {
|
|
513
502
|
padding: var(--default-padding);
|
514
503
|
}
|
515
504
|
|
516
|
-
.cutoff-text {
|
505
|
+
p.cutoff-text {
|
517
506
|
padding: var(--default-padding);
|
518
507
|
margin: 0;
|
519
508
|
overflow: hidden;
|
@@ -124,24 +124,17 @@ export default {
|
|
124
124
|
.cmd-company-logo {
|
125
125
|
> a {
|
126
126
|
display: block;
|
127
|
-
}
|
128
|
-
|
129
|
-
img {
|
130
|
-
border: 0;
|
131
|
-
max-height: 15rem;
|
132
|
-
}
|
133
127
|
|
134
|
-
@media only screen and (max-width: $medium-max-width) {
|
135
128
|
img {
|
136
|
-
|
137
|
-
max-height:
|
129
|
+
border: 0;
|
130
|
+
max-height: 15rem;
|
138
131
|
}
|
139
|
-
}
|
140
132
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
133
|
+
@media only screen and (max-width: $medium-max-width) {
|
134
|
+
img {
|
135
|
+
max-width: 100%;
|
136
|
+
max-height: none;
|
137
|
+
}
|
145
138
|
}
|
146
139
|
}
|
147
140
|
}
|
@@ -484,8 +484,6 @@ export default FancyBox
|
|
484
484
|
padding: var(--default-padding);
|
485
485
|
min-width: 30vw;
|
486
486
|
min-height: 30vh;
|
487
|
-
max-width: calc(var(--max-width) - calc(var(--default-padding) * 2));
|
488
|
-
max-height: 80vh;
|
489
487
|
background: var(--pure-white);
|
490
488
|
border-radius: var(--border-radius);
|
491
489
|
overflow: hidden;
|
@@ -550,7 +548,7 @@ export default FancyBox
|
|
550
548
|
> .button {
|
551
549
|
display: block;
|
552
550
|
border: var(--default-border);
|
553
|
-
padding: .
|
551
|
+
padding: .2rem;
|
554
552
|
min-width: 0;
|
555
553
|
min-height: 0;
|
556
554
|
|
@@ -44,7 +44,7 @@
|
|
44
44
|
/>
|
45
45
|
<!-- end CmdTooltipForInputElements -->
|
46
46
|
|
47
|
-
<a v-if="
|
47
|
+
<a v-if="$attrs.required || inputRequirements.length"
|
48
48
|
href="#"
|
49
49
|
@click.prevent
|
50
50
|
:title="validationTooltip"
|
@@ -407,13 +407,6 @@ export default {
|
|
407
407
|
}
|
408
408
|
}
|
409
409
|
},
|
410
|
-
/**
|
411
|
-
* toggle statusIcon (showing the requirements on hover)
|
412
|
-
*/
|
413
|
-
showStatusIcon: {
|
414
|
-
type: Boolean,
|
415
|
-
default: true
|
416
|
-
},
|
417
410
|
/**
|
418
411
|
* set text for tooltip
|
419
412
|
*/
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div class="cmd-imagezoom flex-container">
|
3
3
|
|
4
4
|
<!-- begin small image -->
|
5
|
-
<a href="#" class="no-flex" :title="imageSmall.tooltip">
|
5
|
+
<a href="#" class="no-flex thumbnails-imagezoom" :title="imageSmall.tooltip">
|
6
6
|
<img :src="imageSmall.src"
|
7
7
|
:alt="imageSmall.alt"
|
8
8
|
@mouseover="onMouseOver"
|
@@ -66,9 +66,9 @@ export default {
|
|
66
66
|
}
|
67
67
|
|
68
68
|
function positionOverlay(vm, e) {
|
69
|
-
const largeImageContainer = vm.$el.querySelector(
|
70
|
-
const largeImage = largeImageContainer.querySelector(
|
71
|
-
const zoomOverlay = vm.$el.querySelector(
|
69
|
+
const largeImageContainer = vm.$el.querySelector('.zoom-container')
|
70
|
+
const largeImage = largeImageContainer.querySelector('img')
|
71
|
+
const zoomOverlay = vm.$el.querySelector('.zoom-overlay')
|
72
72
|
|
73
73
|
const smallImageWidth = e.target.getBoundingClientRect().width
|
74
74
|
const smallImageHeight = e.target.getBoundingClientRect().height
|
@@ -114,10 +114,6 @@ function clamp(value, min, max) {
|
|
114
114
|
.cmd-imagezoom {
|
115
115
|
overflow: hidden;
|
116
116
|
|
117
|
-
> a {
|
118
|
-
align-self: flex-start; /* required to avoid a-tag to stretch on small devices */
|
119
|
-
}
|
120
|
-
|
121
117
|
.zoom-container {
|
122
118
|
display: block !important;
|
123
119
|
overflow: hidden;
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<!-- end CmdHeadline -->
|
9
9
|
|
10
10
|
<!-- begin list of links -->
|
11
|
-
<ul :class="['flex-container', {'no-gap': !useGap},'align-' + align
|
11
|
+
<ul :class="['flex-container', {'no-gap': !useGap},'align-' + align]">
|
12
12
|
<li v-for="(link, index) in links" :key="index" :class="{'active': sectionAnchors && activeSection === index}">
|
13
13
|
<!-- begin use href -->
|
14
14
|
<a v-if="link.type === 'href' || link.type === undefined"
|
@@ -46,7 +46,6 @@ import {openFancyBox} from "./CmdFancyBox.vue"
|
|
46
46
|
|
47
47
|
export default {
|
48
48
|
name: "CmdListOfLinks",
|
49
|
-
emits: ["click"],
|
50
49
|
props: {
|
51
50
|
/**
|
52
51
|
* activate if component should contain a list of anchors for the section within the page
|
@@ -124,14 +123,6 @@ export default {
|
|
124
123
|
default: false
|
125
124
|
}
|
126
125
|
},
|
127
|
-
computed: {
|
128
|
-
setStretchClass() {
|
129
|
-
if(this.largeIcons && this.orientation === "horizontal") {
|
130
|
-
return "stretch"
|
131
|
-
}
|
132
|
-
return null
|
133
|
-
}
|
134
|
-
},
|
135
126
|
methods: {
|
136
127
|
getRoute(link) {
|
137
128
|
return getRoute(link)
|
@@ -139,10 +130,8 @@ export default {
|
|
139
130
|
executeLink(link, event) {
|
140
131
|
if (link.fancybox) {
|
141
132
|
event.preventDefault()
|
142
|
-
openFancyBox({url: link.path
|
143
|
-
return
|
133
|
+
openFancyBox({url: link.path})
|
144
134
|
}
|
145
|
-
this.$emit("click", {link, originalEvent: event})
|
146
135
|
}
|
147
136
|
}
|
148
137
|
}
|
@@ -182,10 +171,6 @@ export default {
|
|
182
171
|
&.align-right {
|
183
172
|
justify-content: flex-end;
|
184
173
|
}
|
185
|
-
|
186
|
-
&.stretch {
|
187
|
-
justify-content: space-around;
|
188
|
-
}
|
189
174
|
}
|
190
175
|
|
191
176
|
}
|
@@ -163,6 +163,7 @@ export default {
|
|
163
163
|
openSubentry: -1
|
164
164
|
}
|
165
165
|
},
|
166
|
+
emits: ["offcanvas"],
|
166
167
|
props: {
|
167
168
|
/**
|
168
169
|
* toggle if main-entries (on first-level) should be (horizontally) stretched equally
|
@@ -297,6 +298,11 @@ export default {
|
|
297
298
|
this.$nextTick(() => document.getElementById("close-offcanvas").focus())
|
298
299
|
}
|
299
300
|
}
|
301
|
+
},
|
302
|
+
watch: {
|
303
|
+
showOffcanvas() {
|
304
|
+
this.$emit("offcanvas", { open: this.showOffcanvas})
|
305
|
+
}
|
300
306
|
}
|
301
307
|
}
|
302
308
|
</script>
|