@bobbykim/mcl-header 0.3.0 → 0.4.0
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.
- package/CHANGELOG.md +20 -0
- package/README.md +1 -0
- package/index.d.ts +3 -2
- package/index.js +3 -2
- package/index.ts +3 -2
- package/lib/{mcl-header-a → common}/index.types.d.ts +0 -10
- package/lib/{mcl-header-a → common}/index.types.ts +0 -12
- package/lib/mcl-header-a/MclHeaderA.vue +107 -238
- package/lib/mcl-header-a/MclHeaderA.vue.d.ts +46 -53
- package/lib/mcl-header-a/NavCollapse.vue +13 -21
- package/lib/mcl-header-a/NavCollapse.vue.d.ts +5 -3
- package/lib/mcl-header-a/NavDropdown.vue +15 -18
- package/lib/mcl-header-a/NavDropdown.vue.d.ts +5 -8
- package/lib/mcl-header-a/NavLink.vue +7 -5
- package/lib/mcl-header-a/NavLink.vue.d.ts +3 -3
- package/lib/mcl-header-b/MclHeaderB.vue +270 -0
- package/lib/mcl-header-b/MclHeaderB.vue.d.ts +132 -0
- package/lib/mcl-header-b/NavCollapseVertical.vue +211 -0
- package/lib/mcl-header-b/NavCollapseVertical.vue.d.ts +73 -0
- package/lib/mcl-header-b/NavLinkVertical.vue +78 -0
- package/lib/mcl-header-b/NavLinkVertical.vue.d.ts +62 -0
- package/package.json +4 -4
- package/tsconfig.json +2 -6
- package/tsconfig.ts.json +9 -0
- package/lib/common/HamburgerMenu.vue +0 -121
- package/lib/common/HamburgerMenu.vue.d.ts +0 -43
- /package/lib/{mcl-header-a → common}/index.types.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.4.0](https://github.com/bobbykim89/manguito-component-library/compare/@bobbykim/mcl-header@0.3.0...@bobbykim/mcl-header@0.4.0) (2024-03-21)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* code refactor ([8a025e7](https://github.com/bobbykim89/manguito-component-library/commit/8a025e7cf870ff3dd0cb35878a08793e99ec5cef))
|
|
12
|
+
* **mcl-header-a:** wip) update mcl-header-a ([344a13f](https://github.com/bobbykim89/manguito-component-library/commit/344a13f3cd25c6b02fc99866f19ae65bc89d9ec5))
|
|
13
|
+
* **mcl-header-b:** add mobile layout for mcl-header-b ([ca961ec](https://github.com/bobbykim89/manguito-component-library/commit/ca961ecbaecab1d2e879cb62e905e713878539c0))
|
|
14
|
+
* **mcl-header-b:** add more layouts for desktop screen ([bfd1c7e](https://github.com/bobbykim89/manguito-component-library/commit/bfd1c7e8ed3d9b839bea0dd1a7c3b5740a345c41))
|
|
15
|
+
* **mcl-header-b:** finalize mcl-header-a component ([4a6a627](https://github.com/bobbykim89/manguito-component-library/commit/4a6a6273e6675f8ddbd3a94b0fa21ad06ac7dcad))
|
|
16
|
+
* **mcl-header-b:** fix minor issues with mcl closing collapses in menu item click, update text color of menu items ([1ecfcf3](https://github.com/bobbykim89/manguito-component-library/commit/1ecfcf3ec474e6a6097a34bb9861cbb680280530))
|
|
17
|
+
* **mcl-header-b:** wip) adding story file for mcl-header-b ([2a80675](https://github.com/bobbykim89/manguito-component-library/commit/2a8067553df9a138398aef2a898ebdf3b4a9a268))
|
|
18
|
+
* **mcl-header:** code refactor ([a761b16](https://github.com/bobbykim89/manguito-component-library/commit/a761b16dbad92a680775fcf46692f02ac026d605))
|
|
19
|
+
* **mcl-header:** move deprecated items to deprecated folder in root dir, update configs, init mcl-header-b component ([19aa842](https://github.com/bobbykim89/manguito-component-library/commit/19aa842faa7f1594f7be030b97d5093014efe7cb))
|
|
20
|
+
* tsconfig update, slots and emits update ([c30ff80](https://github.com/bobbykim89/manguito-component-library/commit/c30ff804c961d205ac097e20cd51285a15ca8966))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
# [0.3.0](https://github.com/bobbykim89/manguito-component-library/compare/@bobbykim/mcl-header@0.2.0...@bobbykim/mcl-header@0.3.0) (2024-02-27)
|
|
7
27
|
|
|
8
28
|
|
package/README.md
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
[MCL Storybook Page](https://manguito-component-library.vercel.app/)
|
|
6
6
|
|
|
7
7
|
- [MCL Header A](https://manguito-component-library.vercel.app/?path=/docs/sections-header-mclheadera--mclheadera)
|
|
8
|
+
- [MCL Header B](https://manguito-component-library.vercel.app/?path=/docs/sections-header-mclheaderb--mclheaderb)
|
|
8
9
|
|
|
9
10
|
## Install
|
|
10
11
|
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import MclHeaderA from './lib/mcl-header-a/MclHeaderA.vue';
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
import MclHeaderB from './lib/mcl-header-b/MclHeaderB.vue';
|
|
3
|
+
export * from './lib/common/index.types';
|
|
4
|
+
export { MclHeaderA, MclHeaderB };
|
package/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import MclHeaderA from './lib/mcl-header-a/MclHeaderA.vue';
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
import MclHeaderB from './lib/mcl-header-b/MclHeaderB.vue';
|
|
3
|
+
export * from './lib/common/index.types';
|
|
4
|
+
export { MclHeaderA, MclHeaderB };
|
package/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import MclHeaderA from './lib/mcl-header-a/MclHeaderA.vue'
|
|
2
|
-
|
|
2
|
+
import MclHeaderB from './lib/mcl-header-b/MclHeaderB.vue'
|
|
3
|
+
export * from './lib/common/index.types'
|
|
3
4
|
|
|
4
|
-
export { MclHeaderA }
|
|
5
|
+
export { MclHeaderA, MclHeaderB }
|
|
@@ -8,13 +8,3 @@ export interface MenuCollapseType {
|
|
|
8
8
|
title: string;
|
|
9
9
|
children: MenuItemType[];
|
|
10
10
|
}
|
|
11
|
-
export interface NavChildClickEventType {
|
|
12
|
-
event: Event;
|
|
13
|
-
item: MenuItemType;
|
|
14
|
-
}
|
|
15
|
-
export interface MenuEventType {
|
|
16
|
-
event: Event;
|
|
17
|
-
title: string;
|
|
18
|
-
link: string;
|
|
19
|
-
target?: CtaTarget;
|
|
20
|
-
}
|
|
@@ -10,15 +10,3 @@ export interface MenuCollapseType {
|
|
|
10
10
|
title: string
|
|
11
11
|
children: MenuItemType[]
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
export interface NavChildClickEventType {
|
|
15
|
-
event: Event
|
|
16
|
-
item: MenuItemType
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface MenuEventType {
|
|
20
|
-
event: Event
|
|
21
|
-
title: string
|
|
22
|
-
link: string
|
|
23
|
-
target?: CtaTarget
|
|
24
|
-
}
|
|
@@ -5,34 +5,24 @@ import type {
|
|
|
5
5
|
CtaTarget,
|
|
6
6
|
HeadingSize,
|
|
7
7
|
} from '@bobbykim/manguito-theme'
|
|
8
|
-
import generateClass from '@bobbykim/manguito-theme'
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import HamburgerMenu from '../common/HamburgerMenu.vue'
|
|
8
|
+
import generateClass, { HeaderHorizontal } from '@bobbykim/manguito-theme'
|
|
9
|
+
import { ref } from 'vue'
|
|
10
|
+
import type { MenuCollapseType, MenuItemType } from '../common/index.types'
|
|
12
11
|
import NavCollapse from './NavCollapse.vue'
|
|
13
12
|
import NavDropdown from './NavDropdown.vue'
|
|
14
13
|
import NavLink from './NavLink.vue'
|
|
15
|
-
import type {
|
|
16
|
-
MenuCollapseType,
|
|
17
|
-
MenuEventType,
|
|
18
|
-
MenuItemType,
|
|
19
|
-
NavChildClickEventType,
|
|
20
|
-
} from './index.types'
|
|
21
14
|
|
|
22
15
|
const props = withDefaults(
|
|
23
16
|
defineProps<{
|
|
24
17
|
logo: string
|
|
25
18
|
logoSmall?: string
|
|
26
19
|
logoAlt?: string
|
|
27
|
-
logoAsLink?: boolean
|
|
28
|
-
logoLink: string
|
|
29
|
-
logoLinkTarget?: CtaTarget
|
|
30
20
|
title: string
|
|
31
21
|
titleSize?: HeadingSize
|
|
32
22
|
titleColor?: ColorPalette
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
titleBlockAsLink?: boolean
|
|
24
|
+
titleBlockLinkTarget?: CtaTarget
|
|
25
|
+
titleBlockLink: string
|
|
36
26
|
menuItems: Array<MenuItemType | MenuCollapseType>
|
|
37
27
|
menuItemAsLink?: boolean
|
|
38
28
|
menuTextSize?: BodyText
|
|
@@ -42,19 +32,18 @@ const props = withDefaults(
|
|
|
42
32
|
highlightColor?: ColorPalette
|
|
43
33
|
bgColor?: ColorPalette
|
|
44
34
|
mobileMenuBgColor?: ColorPalette
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
drawerBtnColor?: ColorPalette
|
|
36
|
+
drawerBtnBorder?: boolean
|
|
47
37
|
fadeInOnScroll?: boolean
|
|
48
38
|
scrollDistance?: number
|
|
49
39
|
}>(),
|
|
50
40
|
{
|
|
51
|
-
|
|
52
|
-
logoLinkTarget: '_self',
|
|
41
|
+
logoAlt: '',
|
|
53
42
|
titleSize: 'md',
|
|
54
43
|
titleColor: 'dark-3',
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
menuItemAsLink:
|
|
44
|
+
titleBlockAsLink: false,
|
|
45
|
+
titleBlockLinkTarget: '_self',
|
|
46
|
+
menuItemAsLink: false,
|
|
58
47
|
menuTextSize: 'md',
|
|
59
48
|
menuTextColor: 'dark-3',
|
|
60
49
|
menuTextBold: false,
|
|
@@ -62,82 +51,51 @@ const props = withDefaults(
|
|
|
62
51
|
highlightColor: 'primary',
|
|
63
52
|
bgColor: 'light-1',
|
|
64
53
|
mobileMenuBgColor: 'light-2',
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
drawerBtnColor: 'dark-1',
|
|
55
|
+
drawerBtnBorder: true,
|
|
67
56
|
fadeInOnScroll: true,
|
|
68
57
|
scrollDistance: 50,
|
|
69
58
|
}
|
|
70
59
|
)
|
|
71
60
|
|
|
72
|
-
const
|
|
73
|
-
const slots =
|
|
74
|
-
|
|
75
|
-
'
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
'
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
61
|
+
const componentRef = ref<InstanceType<typeof HeaderHorizontal>>()
|
|
62
|
+
const slots = defineSlots<{
|
|
63
|
+
'content-right': any
|
|
64
|
+
'mobile-bottom'(props: { headerClose: () => void }): any
|
|
65
|
+
}>()
|
|
66
|
+
const emit = defineEmits<{
|
|
67
|
+
(e: 'toggle-drawer', event: Event, open: boolean): void
|
|
68
|
+
(e: 'title-click', event: Event, url: string, target: CtaTarget): void
|
|
69
|
+
(e: 'menu-click', event: Event, item: MenuItemType): void
|
|
70
|
+
(e: 'collapse-click', event: Event, title: string, visible: boolean): void
|
|
71
|
+
}>()
|
|
83
72
|
|
|
84
73
|
const closeNav = (): void => {
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
const toggleNavButton = (e: Event): void => {
|
|
89
|
-
navOpen.value = !navOpen.value
|
|
90
|
-
emit('toggle-menu', e)
|
|
74
|
+
componentRef.value?.headerClose()
|
|
91
75
|
}
|
|
92
76
|
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
link: string,
|
|
97
|
-
target: CtaTarget = '_self',
|
|
98
|
-
itemLink: boolean,
|
|
99
|
-
emitType: EmitType
|
|
100
|
-
): void => {
|
|
101
|
-
/**
|
|
102
|
-
* @param {Event} e - $event
|
|
103
|
-
* @param {string} link - menuItems[#].url / titleLink
|
|
104
|
-
* @param {CtaTarget} target - menuItems[#].target / titleLinkTaget
|
|
105
|
-
* @param {boolean} itemlink - menuItemAsLink /
|
|
106
|
-
* @param {EmitType} emitType - Non prop value type EmitType
|
|
107
|
-
*/
|
|
108
|
-
navOpen.value = false
|
|
109
|
-
const menuEvent: MenuEventType = {
|
|
110
|
-
event: e,
|
|
111
|
-
title: title,
|
|
112
|
-
link: link,
|
|
113
|
-
target: target ? target : '_self',
|
|
114
|
-
}
|
|
115
|
-
if (!itemLink) {
|
|
77
|
+
const handleTitleClick = (e: Event): void => {
|
|
78
|
+
const { titleBlockAsLink, titleBlockLink, titleBlockLinkTarget } = props
|
|
79
|
+
if (!titleBlockAsLink) {
|
|
116
80
|
e.preventDefault()
|
|
117
81
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
if (emitType === 'title') {
|
|
122
|
-
emit('title-click', menuEvent)
|
|
123
|
-
}
|
|
124
|
-
if (emitType === 'logo') {
|
|
125
|
-
emit('logo-click', menuEvent)
|
|
126
|
-
}
|
|
82
|
+
emit('title-click', e, titleBlockLink, titleBlockLinkTarget)
|
|
83
|
+
closeNav()
|
|
127
84
|
}
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const { title, url, target } = e.item
|
|
133
|
-
navOpen.value = false
|
|
134
|
-
const menuEvent: MenuEventType = {
|
|
135
|
-
event: e.event,
|
|
136
|
-
title,
|
|
137
|
-
link: url,
|
|
138
|
-
target: target ? target : '_self',
|
|
85
|
+
const handleMenuItemClick = (e: Event, item: MenuItemType): void => {
|
|
86
|
+
const { menuItemAsLink } = props
|
|
87
|
+
if (!menuItemAsLink) {
|
|
88
|
+
e.preventDefault()
|
|
139
89
|
}
|
|
140
|
-
emit('menu-click',
|
|
90
|
+
emit('menu-click', e, item)
|
|
91
|
+
closeNav()
|
|
92
|
+
}
|
|
93
|
+
const handleCollapsableMenuClick = (
|
|
94
|
+
e: Event,
|
|
95
|
+
title: string,
|
|
96
|
+
visible: boolean
|
|
97
|
+
) => {
|
|
98
|
+
emit('collapse-click', e, title, visible)
|
|
141
99
|
}
|
|
142
100
|
|
|
143
101
|
const getTitleClass = (size: HeadingSize, color: ColorPalette): string => {
|
|
@@ -152,26 +110,6 @@ const getTitleClass = (size: HeadingSize, color: ColorPalette): string => {
|
|
|
152
110
|
return classArray.join(' ')
|
|
153
111
|
}
|
|
154
112
|
|
|
155
|
-
/**
|
|
156
|
-
* @TransitionFunctions
|
|
157
|
-
* @param {HTMLElement} el - passed any since transition handlers don't accept HTMLElement (accepts Element)
|
|
158
|
-
*/
|
|
159
|
-
const onEnter = (el: any) => {
|
|
160
|
-
el.style.height = 'auto'
|
|
161
|
-
const endWidth = getComputedStyle(el).height
|
|
162
|
-
el.style.height = '0px'
|
|
163
|
-
el.offsetHeight // force repaint
|
|
164
|
-
el.style.height = endWidth
|
|
165
|
-
}
|
|
166
|
-
const onAfterEnter = (el: any) => {
|
|
167
|
-
el.style.height = 'auto'
|
|
168
|
-
}
|
|
169
|
-
const onLeave = (el: any) => {
|
|
170
|
-
el.style.height = getComputedStyle(el).height
|
|
171
|
-
el.offsetHeight // force repaint
|
|
172
|
-
el.style.height = '0px'
|
|
173
|
-
}
|
|
174
|
-
|
|
175
113
|
const hasChildren = (item: MenuItemType | MenuCollapseType) => {
|
|
176
114
|
const NavCollapse = item as MenuCollapseType
|
|
177
115
|
if (typeof NavCollapse.children === 'undefined') {
|
|
@@ -180,40 +118,27 @@ const hasChildren = (item: MenuItemType | MenuCollapseType) => {
|
|
|
180
118
|
return NavCollapse.children.length > 0
|
|
181
119
|
}
|
|
182
120
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if (!fadeInOnScroll) {
|
|
186
|
-
return ''
|
|
187
|
-
}
|
|
188
|
-
return y.value >= scrollDistance
|
|
189
|
-
? 'lg:shadow-md bg-opacity-70'
|
|
190
|
-
: 'bg-opacity-100'
|
|
121
|
+
defineExpose({
|
|
122
|
+
headerClose: closeNav,
|
|
191
123
|
})
|
|
192
124
|
</script>
|
|
193
125
|
|
|
194
126
|
<template>
|
|
195
|
-
<
|
|
196
|
-
|
|
197
|
-
:
|
|
127
|
+
<HeaderHorizontal
|
|
128
|
+
ref="componentRef"
|
|
129
|
+
:bg-color="bgColor"
|
|
130
|
+
:drawer-btn-border="drawerBtnBorder"
|
|
131
|
+
:drawer-btn-color="drawerBtnColor"
|
|
132
|
+
:fade-in-on-scroll="fadeInOnScroll"
|
|
133
|
+
:mobile-menu-bg-color="mobileMenuBgColor"
|
|
198
134
|
>
|
|
199
|
-
<
|
|
200
|
-
class="flex flex-wrap items-center py-xs md:py-2xs mx-xs md:mx-sm align-middle justify-between sm:max-w-[640px] md:max-w-[768px] lg:max-w-[1024px] xl:max-w-[1280px] 2xl:max-w-[1536px]"
|
|
201
|
-
>
|
|
135
|
+
<template #content>
|
|
202
136
|
<div class="flex flex-shrink-0 items-center self-center">
|
|
203
137
|
<div class="h-md md:h-lg lg:h-xl mr-2xs md:mr-sm align-middle">
|
|
204
138
|
<a
|
|
205
|
-
:href="
|
|
206
|
-
:target="
|
|
207
|
-
@click="
|
|
208
|
-
navItemClick(
|
|
209
|
-
$event,
|
|
210
|
-
title,
|
|
211
|
-
logoLink,
|
|
212
|
-
logoLinkTarget,
|
|
213
|
-
logoAsLink,
|
|
214
|
-
'logo'
|
|
215
|
-
)
|
|
216
|
-
"
|
|
139
|
+
:href="titleBlockLink"
|
|
140
|
+
:target="titleBlockLinkTarget"
|
|
141
|
+
@click="handleTitleClick"
|
|
217
142
|
>
|
|
218
143
|
<img
|
|
219
144
|
:src="logo"
|
|
@@ -231,18 +156,9 @@ const handleFadeInOnScroll = computed(() => {
|
|
|
231
156
|
</div>
|
|
232
157
|
<div class="flex flex-col justify-center ml-2">
|
|
233
158
|
<a
|
|
234
|
-
:href="
|
|
235
|
-
:target="
|
|
236
|
-
@click="
|
|
237
|
-
navItemClick(
|
|
238
|
-
$event,
|
|
239
|
-
title,
|
|
240
|
-
titleLink,
|
|
241
|
-
titleLinkTarget,
|
|
242
|
-
titleAsLink,
|
|
243
|
-
'title'
|
|
244
|
-
)
|
|
245
|
-
"
|
|
159
|
+
:href="titleBlockLink"
|
|
160
|
+
:target="titleBlockLinkTarget"
|
|
161
|
+
@click="handleTitleClick"
|
|
246
162
|
>
|
|
247
163
|
<h2
|
|
248
164
|
class="inline-block align-middle tracking-wider"
|
|
@@ -266,16 +182,7 @@ const handleFadeInOnScroll = computed(() => {
|
|
|
266
182
|
:display-highlight="displayHighlight"
|
|
267
183
|
:highlight-color="highlightColor"
|
|
268
184
|
:as-link="menuItemAsLink"
|
|
269
|
-
@nav-link="
|
|
270
|
-
navItemClick(
|
|
271
|
-
$event,
|
|
272
|
-
item.title,
|
|
273
|
-
(item as MenuItemType).url,
|
|
274
|
-
(item as MenuItemType).target,
|
|
275
|
-
menuItemAsLink,
|
|
276
|
-
'menu'
|
|
277
|
-
)
|
|
278
|
-
"
|
|
185
|
+
@nav-link="handleMenuItemClick"
|
|
279
186
|
></nav-link>
|
|
280
187
|
<nav-dropdown
|
|
281
188
|
v-else
|
|
@@ -286,97 +193,59 @@ const handleFadeInOnScroll = computed(() => {
|
|
|
286
193
|
:display-highlight="displayHighlight"
|
|
287
194
|
:highlight-color="highlightColor"
|
|
288
195
|
:bg-color="bgColor"
|
|
289
|
-
:hover-bg-color="secondaryColor"
|
|
290
196
|
:as-link="menuItemAsLink"
|
|
291
|
-
@
|
|
197
|
+
@child-click="handleMenuItemClick"
|
|
198
|
+
@label-click="handleCollapsableMenuClick"
|
|
292
199
|
></nav-dropdown>
|
|
293
200
|
</li>
|
|
294
201
|
</ul>
|
|
295
202
|
</div>
|
|
296
203
|
</div>
|
|
204
|
+
</template>
|
|
205
|
+
<template #content-right>
|
|
206
|
+
<div v-if="slots['content-right']" class="hidden lg:block">
|
|
207
|
+
<slot name="content-right"></slot>
|
|
208
|
+
</div>
|
|
209
|
+
</template>
|
|
210
|
+
<template #mobile-content="{ headerClose }">
|
|
297
211
|
<div>
|
|
298
|
-
<
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
212
|
+
<ul class="flex flex-col items-center justify-center p-xs">
|
|
213
|
+
<li
|
|
214
|
+
class="mb-2xs last:mb-0"
|
|
215
|
+
v-for="(item, index) in menuItems"
|
|
216
|
+
:key="`mobile-${index}`"
|
|
217
|
+
>
|
|
218
|
+
<nav-link
|
|
219
|
+
v-if="!hasChildren(item)"
|
|
220
|
+
:nav-item="(item as MenuItemType)"
|
|
221
|
+
:menu-text-color="menuTextColor"
|
|
222
|
+
:menu-text-size="menuTextSize"
|
|
223
|
+
:menu-text-bold="menuTextBold"
|
|
224
|
+
:display-highlight="displayHighlight"
|
|
225
|
+
:highlight-color="highlightColor"
|
|
226
|
+
:as-link="menuItemAsLink"
|
|
227
|
+
@nav-link="handleMenuItemClick"
|
|
228
|
+
></nav-link>
|
|
229
|
+
<nav-collapse
|
|
230
|
+
v-else
|
|
231
|
+
:nav-id="item.title"
|
|
232
|
+
:nav-item="(item as MenuCollapseType)"
|
|
233
|
+
:menu-text-color="menuTextColor"
|
|
234
|
+
:menu-text-size="menuTextSize"
|
|
235
|
+
:menu-text-bold="menuTextBold"
|
|
236
|
+
:display-highlight="displayHighlight"
|
|
237
|
+
:highlight-color="highlightColor"
|
|
238
|
+
:nav-accordion-group="title"
|
|
239
|
+
:as-link="menuItemAsLink"
|
|
240
|
+
@child-click="handleMenuItemClick"
|
|
241
|
+
@label-click="handleCollapsableMenuClick"
|
|
242
|
+
></nav-collapse>
|
|
243
|
+
</li>
|
|
244
|
+
</ul>
|
|
245
|
+
<div v-if="slots['mobile-bottom']">
|
|
246
|
+
<slot name="mobile-bottom" :header-close="closeNav"></slot>
|
|
308
247
|
</div>
|
|
309
248
|
</div>
|
|
310
|
-
</
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
<div class="overflow-hidden lg:hidden">
|
|
314
|
-
<transition
|
|
315
|
-
name="collapse"
|
|
316
|
-
@enter="onEnter"
|
|
317
|
-
@after-enter="onAfterEnter"
|
|
318
|
-
@leave="onLeave"
|
|
319
|
-
>
|
|
320
|
-
<div
|
|
321
|
-
class="bg-opacity-80 rounded-md my-2xs mx-xs overflow-hidden"
|
|
322
|
-
v-if="navOpen"
|
|
323
|
-
:class="generateClass('BGCOLOR', mobileMenuBgColor)"
|
|
324
|
-
>
|
|
325
|
-
<ul class="flex flex-col items-center justify-center p-xs">
|
|
326
|
-
<li
|
|
327
|
-
class="mb-2xs last:mb-0"
|
|
328
|
-
v-for="(item, index) in menuItems"
|
|
329
|
-
:key="`mobile-${index}`"
|
|
330
|
-
>
|
|
331
|
-
<nav-link
|
|
332
|
-
v-if="!hasChildren(item)"
|
|
333
|
-
:nav-item="(item as MenuItemType)"
|
|
334
|
-
:menu-text-color="menuTextColor"
|
|
335
|
-
:menu-text-size="menuTextSize"
|
|
336
|
-
:menu-text-bold="menuTextBold"
|
|
337
|
-
:display-highlight="displayHighlight"
|
|
338
|
-
:highlight-color="highlightColor"
|
|
339
|
-
:as-link="menuItemAsLink"
|
|
340
|
-
@nav-link="
|
|
341
|
-
navItemClick(
|
|
342
|
-
$event,
|
|
343
|
-
item.title,
|
|
344
|
-
(item as MenuItemType).url,
|
|
345
|
-
(item as MenuItemType).target,
|
|
346
|
-
menuItemAsLink,
|
|
347
|
-
'menu'
|
|
348
|
-
)
|
|
349
|
-
"
|
|
350
|
-
></nav-link>
|
|
351
|
-
<nav-collapse
|
|
352
|
-
v-else
|
|
353
|
-
:nav-id="item.title"
|
|
354
|
-
:nav-item="(item as MenuCollapseType)"
|
|
355
|
-
:menu-text-color="menuTextColor"
|
|
356
|
-
:menu-text-size="menuTextSize"
|
|
357
|
-
:menu-text-bold="menuTextBold"
|
|
358
|
-
:display-highlight="displayHighlight"
|
|
359
|
-
:highlight-color="highlightColor"
|
|
360
|
-
:nav-accordion-group="title"
|
|
361
|
-
:as-link="menuItemAsLink"
|
|
362
|
-
@nav-link="navChildLinkClick"
|
|
363
|
-
></nav-collapse>
|
|
364
|
-
</li>
|
|
365
|
-
</ul>
|
|
366
|
-
<div v-if="slots['mobile-slot']">
|
|
367
|
-
<slot name="mobile-slot" :close-nav="closeNav"></slot>
|
|
368
|
-
</div>
|
|
369
|
-
</div>
|
|
370
|
-
</transition>
|
|
371
|
-
</div>
|
|
372
|
-
</header>
|
|
249
|
+
</template>
|
|
250
|
+
</HeaderHorizontal>
|
|
373
251
|
</template>
|
|
374
|
-
|
|
375
|
-
<style lang="scss" scoped>
|
|
376
|
-
.collapse-enter-active {
|
|
377
|
-
transition: height 0.5s ease-in;
|
|
378
|
-
}
|
|
379
|
-
.collapse-leave-active {
|
|
380
|
-
transition: height 0.5s ease-out;
|
|
381
|
-
}
|
|
382
|
-
</style>
|