@exmg/exm-navigation 1.0.3 → 1.1.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.
- package/README.md +72 -0
- package/index.d.ts +11 -15
- package/index.js +11 -15
- package/package.json +9 -8
- package/src/exm-navigation-base.d.ts +94 -19
- package/src/exm-navigation-base.js +293 -58
- package/src/exm-navigation-drawer-base.d.ts +8 -23
- package/src/exm-navigation-drawer-base.js +25 -149
- package/src/exm-navigation-drawer-menu-base.d.ts +12 -0
- package/src/exm-navigation-drawer-menu-base.js +45 -0
- package/src/exm-navigation-drawer-menu.d.ts +9 -0
- package/src/exm-navigation-drawer-menu.js +12 -0
- package/src/exm-navigation-drawer-nav-item-base.d.ts +14 -0
- package/src/exm-navigation-drawer-nav-item-base.js +45 -0
- package/src/exm-navigation-drawer-nav-item.d.ts +8 -0
- package/src/exm-navigation-drawer-nav-item.js +10 -0
- package/src/exm-navigation-drawer.d.ts +0 -1
- package/src/exm-navigation-drawer.js +0 -2
- package/src/exm-navigation-icon-base.d.ts +7 -0
- package/src/exm-navigation-icon-base.js +20 -0
- package/src/exm-navigation-icon-button-base.d.ts +9 -0
- package/src/exm-navigation-icon-button-base.js +34 -0
- package/src/exm-navigation-icon-button.d.ts +8 -0
- package/src/exm-navigation-icon-button.js +10 -0
- package/src/exm-navigation-icon.d.ts +8 -0
- package/src/exm-navigation-icon.js +10 -0
- package/src/exm-navigation-rail-base.d.ts +8 -0
- package/src/exm-navigation-rail-base.js +48 -3
- package/src/exm-navigation-rail-nav-item-base.d.ts +2 -4
- package/src/exm-navigation-rail-nav-item-base.js +7 -39
- package/src/exm-navigation-rail-nav-item.d.ts +0 -1
- package/src/exm-navigation-rail-nav-item.js +0 -2
- package/src/exm-navigation-rail.d.ts +0 -1
- package/src/exm-navigation-rail.js +0 -2
- package/src/exm-navigation-sub-menu-base.d.ts +17 -0
- package/src/exm-navigation-sub-menu-base.js +88 -0
- package/src/exm-navigation-sub-menu.d.ts +8 -0
- package/src/exm-navigation-sub-menu.js +10 -0
- package/src/exm-navigation-topbar-base.d.ts +10 -0
- package/src/exm-navigation-topbar-base.js +34 -0
- package/src/exm-navigation-topbar.d.ts +8 -0
- package/src/exm-navigation-topbar.js +10 -0
- package/src/exm-navigation.d.ts +8 -0
- package/src/exm-navigation.js +10 -0
- package/src/mixins/media-queries.d.ts +7 -0
- package/src/mixins/media-queries.js +44 -0
- package/src/styles/exm-navigate-drawer-nav-item-css.d.ts +1 -0
- package/src/styles/exm-navigate-drawer-nav-item-css.js +40 -0
- package/src/styles/exm-navigation-css.d.ts +1 -0
- package/src/styles/exm-navigation-css.js +56 -0
- package/src/styles/exm-navigation-drawer-css.d.ts +0 -1
- package/src/styles/exm-navigation-drawer-css.js +22 -2
- package/src/styles/exm-navigation-drawer-nav-item-css.d.ts +1 -0
- package/src/styles/exm-navigation-drawer-nav-item-css.js +40 -0
- package/src/styles/exm-navigation-icon-button-css.d.ts +1 -0
- package/src/styles/exm-navigation-icon-button-css.js +23 -0
- package/src/styles/exm-navigation-icon-css.d.ts +1 -0
- package/src/styles/exm-navigation-icon-css.js +22 -0
- package/src/styles/exm-navigation-rail-css.d.ts +0 -1
- package/src/styles/exm-navigation-rail-css.js +47 -2
- package/src/styles/exm-navigation-rail-nav-item-css.d.ts +0 -1
- package/src/styles/exm-navigation-rail-nav-item-css.js +92 -2
- package/src/styles/exm-navigation-sub-menu-css.d.ts +1 -0
- package/src/styles/exm-navigation-sub-menu-css.js +38 -0
- package/src/styles/exm-navigation-topbar-css.d.ts +1 -0
- package/src/styles/exm-navigation-topbar-css.js +29 -0
- package/src/types.d.ts +8 -0
- package/src/types.js +2 -0
- package/src/styles/exm-navigation-drawer.scss +0 -29
- package/src/styles/exm-navigation-rail-nav-item.scss +0 -107
- package/src/styles/exm-navigation-rail-nav.scss +0 -7
- package/src/styles/exm-navigation-rail.scss +0 -35
- package/src/styles/exm-navigation-styles.scss +0 -46
- package/src/styles/exm-navigation-toolbar.scss +0 -18
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ExmNavigationDrawerMenuBase } from './exm-navigation-drawer-menu-base.js';
|
|
2
|
+
export declare class ExmNavigationDrawerMenu extends ExmNavigationDrawerMenuBase {
|
|
3
|
+
static styles: import("lit").CSSResult[];
|
|
4
|
+
}
|
|
5
|
+
declare global {
|
|
6
|
+
interface HTMLElementTagNameMap {
|
|
7
|
+
'exm-navigation-drawer-menu': ExmNavigationDrawerMenu;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
|
+
import { ExmNavigationDrawerMenuBase } from './exm-navigation-drawer-menu-base.js';
|
|
4
|
+
import { style } from './styles/exm-navigation-sub-menu-css.js';
|
|
5
|
+
let ExmNavigationDrawerMenu = class ExmNavigationDrawerMenu extends ExmNavigationDrawerMenuBase {
|
|
6
|
+
};
|
|
7
|
+
ExmNavigationDrawerMenu.styles = [style];
|
|
8
|
+
ExmNavigationDrawerMenu = __decorate([
|
|
9
|
+
customElement('exm-navigation-drawer-menu')
|
|
10
|
+
], ExmNavigationDrawerMenu);
|
|
11
|
+
export { ExmNavigationDrawerMenu };
|
|
12
|
+
//# sourceMappingURL=exm-navigation-drawer-menu.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
import '@material/web/focus/md-focus-ring.js';
|
|
3
|
+
import './exm-navigation-icon.js';
|
|
4
|
+
import '@material/web/list/list.js';
|
|
5
|
+
import '@material/web/list/list-item.js';
|
|
6
|
+
export declare class ExmNavigationDrawerNavItemBase extends LitElement {
|
|
7
|
+
icon: string;
|
|
8
|
+
itemId?: string;
|
|
9
|
+
selected: boolean;
|
|
10
|
+
hasSubmenu: boolean;
|
|
11
|
+
submenuIcon: string;
|
|
12
|
+
static styles: import("lit").CSSResult[];
|
|
13
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { LitElement, html, nothing } from 'lit';
|
|
3
|
+
import { property } from 'lit/decorators.js';
|
|
4
|
+
import { style } from './styles/exm-navigation-drawer-nav-item-css.js';
|
|
5
|
+
import '@material/web/focus/md-focus-ring.js';
|
|
6
|
+
import './exm-navigation-icon.js';
|
|
7
|
+
import '@material/web/list/list.js';
|
|
8
|
+
import '@material/web/list/list-item.js';
|
|
9
|
+
export class ExmNavigationDrawerNavItemBase extends LitElement {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.icon = '';
|
|
13
|
+
this.selected = false;
|
|
14
|
+
this.hasSubmenu = false;
|
|
15
|
+
this.submenuIcon = 'arrow_forward';
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
return html `<md-list-item type="button" ?selected=${this.selected}>
|
|
19
|
+
${this.icon
|
|
20
|
+
? html `<exm-navigation-icon slot="start" class="item-icon" icon=${this.icon}></exm-navigation-icon>`
|
|
21
|
+
: nothing}
|
|
22
|
+
<div class="label"><slot></slot></div>
|
|
23
|
+
${this.hasSubmenu
|
|
24
|
+
? html `<exm-navigation-icon slot="end" class="has-submenu" icon=${this.submenuIcon}></exm-navigation-icon>`
|
|
25
|
+
: nothing}
|
|
26
|
+
</md-list-item>`;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
ExmNavigationDrawerNavItemBase.styles = [style];
|
|
30
|
+
__decorate([
|
|
31
|
+
property({ type: String })
|
|
32
|
+
], ExmNavigationDrawerNavItemBase.prototype, "icon", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
property({ type: String })
|
|
35
|
+
], ExmNavigationDrawerNavItemBase.prototype, "itemId", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
property({ type: Boolean, reflect: true })
|
|
38
|
+
], ExmNavigationDrawerNavItemBase.prototype, "selected", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
property({ type: Boolean, attribute: 'has-submenu' })
|
|
41
|
+
], ExmNavigationDrawerNavItemBase.prototype, "hasSubmenu", void 0);
|
|
42
|
+
__decorate([
|
|
43
|
+
property({ type: String, attribute: 'submenu-icon' })
|
|
44
|
+
], ExmNavigationDrawerNavItemBase.prototype, "submenuIcon", void 0);
|
|
45
|
+
//# sourceMappingURL=exm-navigation-drawer-nav-item-base.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExmNavigationDrawerNavItemBase } from './exm-navigation-drawer-nav-item-base.js';
|
|
2
|
+
export declare class ExmNavigationDrawerNavItem extends ExmNavigationDrawerNavItemBase {
|
|
3
|
+
}
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'exm-navigation-drawer-nav-item': ExmNavigationDrawerNavItem;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators.js';
|
|
3
|
+
import { ExmNavigationDrawerNavItemBase } from './exm-navigation-drawer-nav-item-base.js';
|
|
4
|
+
let ExmNavigationDrawerNavItem = class ExmNavigationDrawerNavItem extends ExmNavigationDrawerNavItemBase {
|
|
5
|
+
};
|
|
6
|
+
ExmNavigationDrawerNavItem = __decorate([
|
|
7
|
+
customElement('exm-navigation-drawer-nav-item')
|
|
8
|
+
], ExmNavigationDrawerNavItem);
|
|
9
|
+
export { ExmNavigationDrawerNavItem };
|
|
10
|
+
//# sourceMappingURL=exm-navigation-drawer-nav-item.js.map
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { customElement } from 'lit/decorators.js';
|
|
3
3
|
import { ExmNavigationDrawerBase } from './exm-navigation-drawer-base.js';
|
|
4
|
-
import { style } from './styles/exm-navigation-drawer-css.js';
|
|
5
4
|
let ExmNavigationDrawer = class ExmNavigationDrawer extends ExmNavigationDrawerBase {
|
|
6
5
|
};
|
|
7
|
-
ExmNavigationDrawer.styles = [style];
|
|
8
6
|
ExmNavigationDrawer = __decorate([
|
|
9
7
|
customElement('exm-navigation-drawer')
|
|
10
8
|
], ExmNavigationDrawer);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
2
|
+
import './styles/exm-navigation-icon-css.js';
|
|
3
|
+
export declare class ExmNavigationIconBase extends ExmgElement {
|
|
4
|
+
icon: string;
|
|
5
|
+
static styles: import("lit").CSSResult[];
|
|
6
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
4
|
+
import { property } from 'lit/decorators.js';
|
|
5
|
+
import { style } from './styles/exm-navigation-icon-css.js';
|
|
6
|
+
import './styles/exm-navigation-icon-css.js';
|
|
7
|
+
export class ExmNavigationIconBase extends ExmgElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.icon = 'menu';
|
|
11
|
+
}
|
|
12
|
+
render() {
|
|
13
|
+
return html `<span class="icon">${this.icon}</span>`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
ExmNavigationIconBase.styles = [style];
|
|
17
|
+
__decorate([
|
|
18
|
+
property({ type: String })
|
|
19
|
+
], ExmNavigationIconBase.prototype, "icon", void 0);
|
|
20
|
+
//# sourceMappingURL=exm-navigation-icon-base.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
2
|
+
import './exm-navigation-icon.js';
|
|
3
|
+
export declare class ExmNavigationIconButtonBase extends ExmgElement {
|
|
4
|
+
icon: string;
|
|
5
|
+
label: string;
|
|
6
|
+
static styles: import("lit").CSSResult[];
|
|
7
|
+
private handleMenuButtonClick;
|
|
8
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html, nothing } from 'lit';
|
|
3
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
4
|
+
import { property } from 'lit/decorators.js';
|
|
5
|
+
import { classMap } from 'lit/directives/class-map.js';
|
|
6
|
+
import { style } from './styles/exm-navigation-icon-button-css.js';
|
|
7
|
+
import './exm-navigation-icon.js';
|
|
8
|
+
export class ExmNavigationIconButtonBase extends ExmgElement {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.icon = 'menu';
|
|
12
|
+
this.label = '';
|
|
13
|
+
}
|
|
14
|
+
handleMenuButtonClick(itemId) {
|
|
15
|
+
this.fire('navigation-icon-button-click', itemId);
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
const buttonClass = { 'has-label': !!this.label };
|
|
19
|
+
return html `
|
|
20
|
+
<button class="icon-button ${classMap(buttonClass)}" @click=${this.handleMenuButtonClick}>
|
|
21
|
+
<exm-navigation-icon icon=${this.icon}></exm-navigation-icon>
|
|
22
|
+
${this.label ? html ` <span class="label">${this.label}</span>` : nothing}
|
|
23
|
+
</button>
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
ExmNavigationIconButtonBase.styles = [style];
|
|
28
|
+
__decorate([
|
|
29
|
+
property({ type: String })
|
|
30
|
+
], ExmNavigationIconButtonBase.prototype, "icon", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
property({ type: String })
|
|
33
|
+
], ExmNavigationIconButtonBase.prototype, "label", void 0);
|
|
34
|
+
//# sourceMappingURL=exm-navigation-icon-button-base.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExmNavigationIconButtonBase } from './exm-navigation-icon-button-base.js';
|
|
2
|
+
export declare class ExmNavigationIconButton extends ExmNavigationIconButtonBase {
|
|
3
|
+
}
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'exm-navigation-icon-button': ExmNavigationIconButton;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
|
+
import { ExmNavigationIconButtonBase } from './exm-navigation-icon-button-base.js';
|
|
4
|
+
let ExmNavigationIconButton = class ExmNavigationIconButton extends ExmNavigationIconButtonBase {
|
|
5
|
+
};
|
|
6
|
+
ExmNavigationIconButton = __decorate([
|
|
7
|
+
customElement('exm-navigation-icon-button')
|
|
8
|
+
], ExmNavigationIconButton);
|
|
9
|
+
export { ExmNavigationIconButton };
|
|
10
|
+
//# sourceMappingURL=exm-navigation-icon-button.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
|
+
import { ExmNavigationIconBase } from './exm-navigation-icon-base.js';
|
|
4
|
+
let ExmNavigationIcon = class ExmNavigationIcon extends ExmNavigationIconBase {
|
|
5
|
+
};
|
|
6
|
+
ExmNavigationIcon = __decorate([
|
|
7
|
+
customElement('exm-navigation-icon')
|
|
8
|
+
], ExmNavigationIcon);
|
|
9
|
+
export { ExmNavigationIcon };
|
|
10
|
+
//# sourceMappingURL=exm-navigation-icon.js.map
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
2
|
+
import { MenuItem } from './types.js';
|
|
3
|
+
import './exm-navigation-rail-nav-item.js';
|
|
2
4
|
export declare class ExmNavigationRailBase extends ExmgElement {
|
|
5
|
+
items: MenuItem[];
|
|
6
|
+
selected: string[];
|
|
7
|
+
static styles: import("lit").CSSResult[];
|
|
8
|
+
private handleRailClick;
|
|
9
|
+
private handleRailMouseEnter;
|
|
10
|
+
private handleRailMouseLeave;
|
|
3
11
|
render(): import("lit-html").TemplateResult<1>;
|
|
4
12
|
}
|
|
@@ -1,10 +1,55 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
1
2
|
import { html } from 'lit';
|
|
2
3
|
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
4
|
+
import { property } from 'lit/decorators.js';
|
|
5
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
6
|
+
import { style } from './styles/exm-navigation-rail-css.js';
|
|
7
|
+
import './exm-navigation-rail-nav-item.js';
|
|
3
8
|
export class ExmNavigationRailBase extends ExmgElement {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.items = [];
|
|
12
|
+
this.selected = [];
|
|
13
|
+
}
|
|
14
|
+
handleRailClick(itemId) {
|
|
15
|
+
this.fire('rail-item-click', itemId);
|
|
16
|
+
}
|
|
17
|
+
handleRailMouseEnter(itemId) {
|
|
18
|
+
this.fire('rail-item-mouseenter', itemId);
|
|
19
|
+
}
|
|
20
|
+
handleRailMouseLeave(itemId) {
|
|
21
|
+
this.fire('rail-item-mouseleave', itemId);
|
|
22
|
+
}
|
|
4
23
|
render() {
|
|
5
|
-
return html `<div class="top"><slot name="top"></slot></div>
|
|
6
|
-
<
|
|
7
|
-
|
|
24
|
+
return html `<div class="rail-top"><slot name="rail-top"></slot></div>
|
|
25
|
+
<nav class="nav">
|
|
26
|
+
<ul>
|
|
27
|
+
${repeat(this.items, (item) => {
|
|
28
|
+
return html `
|
|
29
|
+
<li>
|
|
30
|
+
<exm-navigation-rail-nav-item
|
|
31
|
+
@click=${() => this.handleRailClick(item.id)}
|
|
32
|
+
@mouseenter=${() => this.handleRailMouseEnter(item.id)}
|
|
33
|
+
@mouseleave=${() => this.handleRailMouseLeave(item.id)}
|
|
34
|
+
label=${item.label}
|
|
35
|
+
icon=${item.icon || ''}
|
|
36
|
+
?hasSubMenu=${(item.items || []).length > 0}
|
|
37
|
+
itemId=${item.id}
|
|
38
|
+
.selected=${this.selected[0] === item.id}
|
|
39
|
+
></exm-navigation-rail-nav-item>
|
|
40
|
+
</li>
|
|
41
|
+
`;
|
|
42
|
+
})}
|
|
43
|
+
</ul>
|
|
44
|
+
</nav>
|
|
45
|
+
<div class="rail-bottom"><slot name="rail-bottom"></slot></div>`;
|
|
8
46
|
}
|
|
9
47
|
}
|
|
48
|
+
ExmNavigationRailBase.styles = [style];
|
|
49
|
+
__decorate([
|
|
50
|
+
property({ type: Array })
|
|
51
|
+
], ExmNavigationRailBase.prototype, "items", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
property({ type: Array })
|
|
54
|
+
], ExmNavigationRailBase.prototype, "selected", void 0);
|
|
10
55
|
//# sourceMappingURL=exm-navigation-rail-base.js.map
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
import '@material/web/focus/md-focus-ring.js';
|
|
3
|
+
import './exm-navigation-icon.js';
|
|
3
4
|
export declare class ExmNavigationRailNavItemBase extends LitElement {
|
|
4
5
|
icon: string;
|
|
5
6
|
itemId?: string;
|
|
6
7
|
label?: string;
|
|
7
8
|
selected: boolean;
|
|
8
9
|
hasSubMenu: boolean;
|
|
9
|
-
|
|
10
|
-
deselectOtherOptions(id: string): void;
|
|
11
|
-
hoverIn(): void;
|
|
12
|
-
hoverOut(): void;
|
|
10
|
+
static styles: import("lit").CSSResult[];
|
|
13
11
|
render(): import("lit-html").TemplateResult<1>;
|
|
14
12
|
}
|
|
@@ -1,48 +1,24 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { LitElement, html } from 'lit';
|
|
3
3
|
import { property } from 'lit/decorators.js';
|
|
4
|
-
import {
|
|
4
|
+
import { style } from './styles/exm-navigation-rail-nav-item-css.js';
|
|
5
5
|
import '@material/web/focus/md-focus-ring.js';
|
|
6
|
-
import
|
|
6
|
+
import './exm-navigation-icon.js';
|
|
7
7
|
export class ExmNavigationRailNavItemBase extends LitElement {
|
|
8
8
|
constructor() {
|
|
9
|
-
super();
|
|
9
|
+
super(...arguments);
|
|
10
10
|
this.icon = '';
|
|
11
11
|
this.selected = false;
|
|
12
12
|
this.hasSubMenu = false;
|
|
13
|
-
// eslint-disable-next-line
|
|
14
|
-
this.setAttribute('role', 'link');
|
|
15
|
-
// Bind methods to ensure the correct 'this' context
|
|
16
|
-
this.hoverIn = this.hoverIn.bind(this);
|
|
17
|
-
this.hoverOut = this.hoverOut.bind(this);
|
|
18
|
-
// Add event listeners in the constructor
|
|
19
|
-
this.addEventListener('mouseenter', this.hoverIn);
|
|
20
|
-
this.addEventListener('mouseleave', this.hoverOut);
|
|
21
|
-
}
|
|
22
|
-
deselectOtherOptions(id) {
|
|
23
|
-
for (const key in navigationActiveHasSubmenu.value) {
|
|
24
|
-
// eslint-disable-next-line
|
|
25
|
-
if (navigationActiveHasSubmenu.value.hasOwnProperty(key) && key !== id) {
|
|
26
|
-
navigationActiveHasSubmenu.value[key] = false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
hoverIn() {
|
|
31
|
-
if (this.hasSubMenu) {
|
|
32
|
-
navigationItemHover.value = true;
|
|
33
|
-
navigationRailActive.value = this.itemId;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
hoverOut() {
|
|
37
|
-
navigationItemHover.value = false;
|
|
38
13
|
}
|
|
39
14
|
render() {
|
|
40
|
-
return html
|
|
41
|
-
<md-focus-ring></md-focus-ring><
|
|
15
|
+
return html `<button role="link">
|
|
16
|
+
<md-focus-ring></md-focus-ring><exm-navigation-icon class="symbols" icon=${this.icon}></exm-navigation-icon>
|
|
42
17
|
<div class="label">${this.label}</div>
|
|
43
18
|
</button>`;
|
|
44
19
|
}
|
|
45
20
|
}
|
|
21
|
+
ExmNavigationRailNavItemBase.styles = [style];
|
|
46
22
|
__decorate([
|
|
47
23
|
property({ type: String })
|
|
48
24
|
], ExmNavigationRailNavItemBase.prototype, "icon", void 0);
|
|
@@ -53,15 +29,7 @@ __decorate([
|
|
|
53
29
|
property({ type: String })
|
|
54
30
|
], ExmNavigationRailNavItemBase.prototype, "label", void 0);
|
|
55
31
|
__decorate([
|
|
56
|
-
property({ type: Boolean, reflect: true })
|
|
57
|
-
observer(function (value) {
|
|
58
|
-
if (this.itemId) {
|
|
59
|
-
navigationActiveHasSubmenu.value[this.itemId] = value && this.hasSubMenu;
|
|
60
|
-
if (navigationActiveHasSubmenu.value[this.itemId] && value) {
|
|
61
|
-
this.deselectOtherOptions(this.itemId);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
})
|
|
32
|
+
property({ type: Boolean, reflect: true })
|
|
65
33
|
], ExmNavigationRailNavItemBase.prototype, "selected", void 0);
|
|
66
34
|
__decorate([
|
|
67
35
|
property({ type: Boolean })
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ExmNavigationRailNavItemBase } from './exm-navigation-rail-nav-item-base.js';
|
|
2
2
|
export declare class ExmNavigationRailNavItem extends ExmNavigationRailNavItemBase {
|
|
3
|
-
static styles: import("lit").CSSResult[];
|
|
4
3
|
}
|
|
5
4
|
declare global {
|
|
6
5
|
interface HTMLElementTagNameMap {
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { customElement } from 'lit/decorators.js';
|
|
3
|
-
import { style } from './styles/exm-navigation-rail-nav-item-css.js';
|
|
4
3
|
import { ExmNavigationRailNavItemBase } from './exm-navigation-rail-nav-item-base.js';
|
|
5
4
|
let ExmNavigationRailNavItem = class ExmNavigationRailNavItem extends ExmNavigationRailNavItemBase {
|
|
6
5
|
};
|
|
7
|
-
ExmNavigationRailNavItem.styles = [style];
|
|
8
6
|
ExmNavigationRailNavItem = __decorate([
|
|
9
7
|
customElement('exm-navigation-rail-nav-item')
|
|
10
8
|
], ExmNavigationRailNavItem);
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
3
|
import { ExmNavigationRailBase } from './exm-navigation-rail-base.js';
|
|
4
|
-
import { style } from './styles/exm-navigation-rail-css.js';
|
|
5
4
|
let ExmNavigationRail = class ExmNavigationRail extends ExmNavigationRailBase {
|
|
6
5
|
};
|
|
7
|
-
ExmNavigationRail.styles = [style];
|
|
8
6
|
ExmNavigationRail = __decorate([
|
|
9
7
|
customElement('exm-navigation-rail')
|
|
10
8
|
], ExmNavigationRail);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
2
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
3
|
+
import { MenuItem } from './types.js';
|
|
4
|
+
import './exm-navigation-rail-nav-item.js';
|
|
5
|
+
import './exm-navigation-drawer-nav-item.js';
|
|
6
|
+
import '@material/web/list/list.js';
|
|
7
|
+
import '@exmg/exm-collapsed/exm-collapsed.js';
|
|
8
|
+
export declare class ExmNavigationSubMenuBase extends ExmgElement {
|
|
9
|
+
items: MenuItem[];
|
|
10
|
+
path: (string | null)[];
|
|
11
|
+
currentItem?: MenuItem['items'];
|
|
12
|
+
static styles: import("lit").CSSResult[];
|
|
13
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
14
|
+
private handleSubMenuItemClick;
|
|
15
|
+
private renderSubMenu;
|
|
16
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
4
|
+
import { property, state } from 'lit/decorators.js';
|
|
5
|
+
import { repeat } from 'lit/directives/repeat.js';
|
|
6
|
+
import { style } from './styles/exm-navigation-sub-menu-css.js';
|
|
7
|
+
import './exm-navigation-rail-nav-item.js';
|
|
8
|
+
import './exm-navigation-drawer-nav-item.js';
|
|
9
|
+
import '@material/web/list/list.js';
|
|
10
|
+
import '@exmg/exm-collapsed/exm-collapsed.js';
|
|
11
|
+
export class ExmNavigationSubMenuBase extends ExmgElement {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.items = [];
|
|
15
|
+
this.path = [];
|
|
16
|
+
}
|
|
17
|
+
updated(changedProperties) {
|
|
18
|
+
var _a;
|
|
19
|
+
if (changedProperties.has('path') || changedProperties.has('items')) {
|
|
20
|
+
console.log('updated', this.path);
|
|
21
|
+
this.currentItem = ((_a = this.items.find((item) => item.id === this.path[0])) === null || _a === void 0 ? void 0 : _a.items) || [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
handleSubMenuItemClick(path) {
|
|
25
|
+
this.fire('sub-menu-item-click', path);
|
|
26
|
+
}
|
|
27
|
+
renderSubMenu(item, path) {
|
|
28
|
+
return html `
|
|
29
|
+
<exm-navigation-drawer-nav-item
|
|
30
|
+
type="button"
|
|
31
|
+
?selected=${this.path.includes(item.id)}
|
|
32
|
+
class="has-submenu"
|
|
33
|
+
@click=${this.handleSubMenuItemClick.bind(this, [...path])}
|
|
34
|
+
?has-submenu=${true}
|
|
35
|
+
submenu-icon=${this.path.includes(item.id) ? 'expand_less' : 'expand_more'}
|
|
36
|
+
>${item.label}
|
|
37
|
+
</exm-navigation-drawer-nav-item>
|
|
38
|
+
<exm-collapsed id="collapsed" ?opened=${this.path.includes(item.id)}>
|
|
39
|
+
<div class="sub-menu">
|
|
40
|
+
<md-list>
|
|
41
|
+
<!-- Need to check for multiple items -->
|
|
42
|
+
${(item.items || []).map((subItem) => (subItem.items || []).length === 0
|
|
43
|
+
? html `
|
|
44
|
+
<exm-navigation-drawer-nav-item
|
|
45
|
+
class="collapsed-item"
|
|
46
|
+
?selected=${this.path.includes(subItem.id)}
|
|
47
|
+
@click=${this.handleSubMenuItemClick.bind(this, [...path, subItem.id])}
|
|
48
|
+
>
|
|
49
|
+
${subItem.label}
|
|
50
|
+
</exm-navigation-drawer-nav-item>
|
|
51
|
+
`
|
|
52
|
+
: this.renderSubMenu(item, [this.path[0] || '', item.id]))}
|
|
53
|
+
</md-list>
|
|
54
|
+
</div>
|
|
55
|
+
</exm-collapsed>
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
render() {
|
|
59
|
+
return html `<div class="top"><slot name="top"></slot></div>
|
|
60
|
+
<nav class="nav">
|
|
61
|
+
<md-list>
|
|
62
|
+
${repeat(this.currentItem || [], ({ id }) => id, (item) => (item.items || []).length === 0
|
|
63
|
+
? html `
|
|
64
|
+
<exm-navigation-drawer-nav-item
|
|
65
|
+
type="button"
|
|
66
|
+
?selected=${this.path.includes(item.id)}
|
|
67
|
+
@click=${this.handleSubMenuItemClick.bind(this, [this.path[0] || '', item.id])}
|
|
68
|
+
>
|
|
69
|
+
${item.label}
|
|
70
|
+
</exm-navigation-drawer-nav-item>
|
|
71
|
+
`
|
|
72
|
+
: this.renderSubMenu(item, [this.path[0] || '', item.id]))}
|
|
73
|
+
</md-list>
|
|
74
|
+
</nav>
|
|
75
|
+
<div class="bottom"><slot name="bottom"></slot></div>`;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
ExmNavigationSubMenuBase.styles = [style];
|
|
79
|
+
__decorate([
|
|
80
|
+
property({ type: Array })
|
|
81
|
+
], ExmNavigationSubMenuBase.prototype, "items", void 0);
|
|
82
|
+
__decorate([
|
|
83
|
+
property({ type: Array })
|
|
84
|
+
], ExmNavigationSubMenuBase.prototype, "path", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
state()
|
|
87
|
+
], ExmNavigationSubMenuBase.prototype, "currentItem", void 0);
|
|
88
|
+
//# sourceMappingURL=exm-navigation-sub-menu-base.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExmNavigationSubMenuBase } from './exm-navigation-sub-menu-base.js';
|
|
2
|
+
export declare class ExmNavigationSubMenu extends ExmNavigationSubMenuBase {
|
|
3
|
+
}
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'exm-navigation-sub-menu': ExmNavigationSubMenu;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
|
+
import { ExmNavigationSubMenuBase } from './exm-navigation-sub-menu-base.js';
|
|
4
|
+
let ExmNavigationSubMenu = class ExmNavigationSubMenu extends ExmNavigationSubMenuBase {
|
|
5
|
+
};
|
|
6
|
+
ExmNavigationSubMenu = __decorate([
|
|
7
|
+
customElement('exm-navigation-sub-menu')
|
|
8
|
+
], ExmNavigationSubMenu);
|
|
9
|
+
export { ExmNavigationSubMenu };
|
|
10
|
+
//# sourceMappingURL=exm-navigation-sub-menu.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
2
|
+
import { MenuItem } from './types.js';
|
|
3
|
+
import './exm-navigation-rail-nav-item.js';
|
|
4
|
+
export declare class ExmNavigationTopbarBase extends ExmgElement {
|
|
5
|
+
items: MenuItem[];
|
|
6
|
+
drawerOpen: boolean;
|
|
7
|
+
static styles: import("lit").CSSResult[];
|
|
8
|
+
handleMenuButtonClick(itemId: string): void;
|
|
9
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { html } from 'lit';
|
|
3
|
+
import { ExmgElement } from '@exmg/lit-base/index.js';
|
|
4
|
+
import { property } from 'lit/decorators.js';
|
|
5
|
+
import { style } from './styles/exm-navigation-topbar-css.js';
|
|
6
|
+
import './exm-navigation-rail-nav-item.js';
|
|
7
|
+
export class ExmNavigationTopbarBase extends ExmgElement {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.items = [];
|
|
11
|
+
this.drawerOpen = false;
|
|
12
|
+
}
|
|
13
|
+
handleMenuButtonClick(itemId) {
|
|
14
|
+
this.fire('topbar-menu-click', itemId);
|
|
15
|
+
}
|
|
16
|
+
render() {
|
|
17
|
+
return html `
|
|
18
|
+
<exm-navigation-icon-button
|
|
19
|
+
icon=${this.drawerOpen ? 'menu_open' : 'menu'}
|
|
20
|
+
@navigation-icon-button-click=${this.handleMenuButtonClick}
|
|
21
|
+
></exm-navigation-icon-button>
|
|
22
|
+
<slot name="topbar-title" class="topbar-title"></slot>
|
|
23
|
+
<slot name="topbar-actions"></slot>
|
|
24
|
+
`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
ExmNavigationTopbarBase.styles = [style];
|
|
28
|
+
__decorate([
|
|
29
|
+
property({ type: Array })
|
|
30
|
+
], ExmNavigationTopbarBase.prototype, "items", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
property({ type: Boolean, attribute: 'drawer-open' })
|
|
33
|
+
], ExmNavigationTopbarBase.prototype, "drawerOpen", void 0);
|
|
34
|
+
//# sourceMappingURL=exm-navigation-topbar-base.js.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ExmNavigationTopbarBase } from './exm-navigation-topbar-base.js';
|
|
2
|
+
export declare class ExmNavigationTopbar extends ExmNavigationTopbarBase {
|
|
3
|
+
}
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'exm-navigation-topbar': ExmNavigationTopbar;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { customElement } from 'lit/decorators/custom-element.js';
|
|
3
|
+
import { ExmNavigationTopbarBase } from './exm-navigation-topbar-base.js';
|
|
4
|
+
let ExmNavigationTopbar = class ExmNavigationTopbar extends ExmNavigationTopbarBase {
|
|
5
|
+
};
|
|
6
|
+
ExmNavigationTopbar = __decorate([
|
|
7
|
+
customElement('exm-navigation-topbar')
|
|
8
|
+
], ExmNavigationTopbar);
|
|
9
|
+
export { ExmNavigationTopbar };
|
|
10
|
+
//# sourceMappingURL=exm-navigation-topbar.js.map
|