@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.
Files changed (74) hide show
  1. package/README.md +72 -0
  2. package/index.d.ts +11 -15
  3. package/index.js +11 -15
  4. package/package.json +9 -8
  5. package/src/exm-navigation-base.d.ts +94 -19
  6. package/src/exm-navigation-base.js +293 -58
  7. package/src/exm-navigation-drawer-base.d.ts +8 -23
  8. package/src/exm-navigation-drawer-base.js +25 -149
  9. package/src/exm-navigation-drawer-menu-base.d.ts +12 -0
  10. package/src/exm-navigation-drawer-menu-base.js +45 -0
  11. package/src/exm-navigation-drawer-menu.d.ts +9 -0
  12. package/src/exm-navigation-drawer-menu.js +12 -0
  13. package/src/exm-navigation-drawer-nav-item-base.d.ts +14 -0
  14. package/src/exm-navigation-drawer-nav-item-base.js +45 -0
  15. package/src/exm-navigation-drawer-nav-item.d.ts +8 -0
  16. package/src/exm-navigation-drawer-nav-item.js +10 -0
  17. package/src/exm-navigation-drawer.d.ts +0 -1
  18. package/src/exm-navigation-drawer.js +0 -2
  19. package/src/exm-navigation-icon-base.d.ts +7 -0
  20. package/src/exm-navigation-icon-base.js +20 -0
  21. package/src/exm-navigation-icon-button-base.d.ts +9 -0
  22. package/src/exm-navigation-icon-button-base.js +34 -0
  23. package/src/exm-navigation-icon-button.d.ts +8 -0
  24. package/src/exm-navigation-icon-button.js +10 -0
  25. package/src/exm-navigation-icon.d.ts +8 -0
  26. package/src/exm-navigation-icon.js +10 -0
  27. package/src/exm-navigation-rail-base.d.ts +8 -0
  28. package/src/exm-navigation-rail-base.js +48 -3
  29. package/src/exm-navigation-rail-nav-item-base.d.ts +2 -4
  30. package/src/exm-navigation-rail-nav-item-base.js +7 -39
  31. package/src/exm-navigation-rail-nav-item.d.ts +0 -1
  32. package/src/exm-navigation-rail-nav-item.js +0 -2
  33. package/src/exm-navigation-rail.d.ts +0 -1
  34. package/src/exm-navigation-rail.js +0 -2
  35. package/src/exm-navigation-sub-menu-base.d.ts +17 -0
  36. package/src/exm-navigation-sub-menu-base.js +88 -0
  37. package/src/exm-navigation-sub-menu.d.ts +8 -0
  38. package/src/exm-navigation-sub-menu.js +10 -0
  39. package/src/exm-navigation-topbar-base.d.ts +10 -0
  40. package/src/exm-navigation-topbar-base.js +34 -0
  41. package/src/exm-navigation-topbar.d.ts +8 -0
  42. package/src/exm-navigation-topbar.js +10 -0
  43. package/src/exm-navigation.d.ts +8 -0
  44. package/src/exm-navigation.js +10 -0
  45. package/src/mixins/media-queries.d.ts +7 -0
  46. package/src/mixins/media-queries.js +44 -0
  47. package/src/styles/exm-navigate-drawer-nav-item-css.d.ts +1 -0
  48. package/src/styles/exm-navigate-drawer-nav-item-css.js +40 -0
  49. package/src/styles/exm-navigation-css.d.ts +1 -0
  50. package/src/styles/exm-navigation-css.js +56 -0
  51. package/src/styles/exm-navigation-drawer-css.d.ts +0 -1
  52. package/src/styles/exm-navigation-drawer-css.js +22 -2
  53. package/src/styles/exm-navigation-drawer-nav-item-css.d.ts +1 -0
  54. package/src/styles/exm-navigation-drawer-nav-item-css.js +40 -0
  55. package/src/styles/exm-navigation-icon-button-css.d.ts +1 -0
  56. package/src/styles/exm-navigation-icon-button-css.js +23 -0
  57. package/src/styles/exm-navigation-icon-css.d.ts +1 -0
  58. package/src/styles/exm-navigation-icon-css.js +22 -0
  59. package/src/styles/exm-navigation-rail-css.d.ts +0 -1
  60. package/src/styles/exm-navigation-rail-css.js +47 -2
  61. package/src/styles/exm-navigation-rail-nav-item-css.d.ts +0 -1
  62. package/src/styles/exm-navigation-rail-nav-item-css.js +92 -2
  63. package/src/styles/exm-navigation-sub-menu-css.d.ts +1 -0
  64. package/src/styles/exm-navigation-sub-menu-css.js +38 -0
  65. package/src/styles/exm-navigation-topbar-css.d.ts +1 -0
  66. package/src/styles/exm-navigation-topbar-css.js +29 -0
  67. package/src/types.d.ts +8 -0
  68. package/src/types.js +2 -0
  69. package/src/styles/exm-navigation-drawer.scss +0 -29
  70. package/src/styles/exm-navigation-rail-nav-item.scss +0 -107
  71. package/src/styles/exm-navigation-rail-nav.scss +0 -7
  72. package/src/styles/exm-navigation-rail.scss +0 -35
  73. package/src/styles/exm-navigation-styles.scss +0 -46
  74. 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,6 +1,5 @@
1
1
  import { ExmNavigationDrawerBase } from './exm-navigation-drawer-base.js';
2
2
  export declare class ExmNavigationDrawer extends ExmNavigationDrawerBase {
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
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,8 @@
1
+ import { ExmNavigationIconBase } from './exm-navigation-icon-base.js';
2
+ export declare class ExmNavigationIcon extends ExmNavigationIconBase {
3
+ }
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'exm-navigation-icon': ExmNavigationIcon;
7
+ }
8
+ }
@@ -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
- <div class="nav"><slot></slot></div>
7
- <div class="bottom"><slot name="bottom"></slot></div>`;
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
- constructor();
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 { navigationItemHover, navigationRailActive, navigationActiveHasSubmenu } from './exm-navigation-signals.js';
4
+ import { style } from './styles/exm-navigation-rail-nav-item-css.js';
5
5
  import '@material/web/focus/md-focus-ring.js';
6
- import { observer } from '@exmg/lit-base';
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 ` <button>
41
- <md-focus-ring></md-focus-ring><span class="symbols">${this.icon}</span>
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,6 +1,5 @@
1
1
  import { ExmNavigationRailBase } from './exm-navigation-rail-base.js';
2
2
  export declare class ExmNavigationRail extends ExmNavigationRailBase {
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/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