@theseam/ui-common 0.3.12-beta.0 → 0.3.12

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 (71) hide show
  1. package/bundles/theseam-ui-common-framework.umd.js +47 -899
  2. package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
  3. package/bundles/theseam-ui-common-layout.umd.js +5 -14
  4. package/bundles/theseam-ui-common-layout.umd.js.map +1 -1
  5. package/bundles/theseam-ui-common-menu.umd.js +0 -4
  6. package/bundles/theseam-ui-common-menu.umd.js.map +1 -1
  7. package/esm2015/framework/base-layout/base-layout.component.js +4 -12
  8. package/esm2015/framework/base-layout/base-layout.module.js +1 -4
  9. package/esm2015/framework/base-layout/directives/base-layout-nav-toggle.directive.js +3 -17
  10. package/esm2015/framework/public-api.js +1 -2
  11. package/esm2015/framework/side-nav/side-nav-item/side-nav-item.component.js +5 -11
  12. package/esm2015/framework/side-nav/side-nav-toggle/side-nav-toggle.component.js +5 -5
  13. package/esm2015/framework/side-nav/side-nav.component.js +18 -67
  14. package/esm2015/framework/side-nav/side-nav.service.js +1 -1
  15. package/esm2015/framework/theseam-ui-common-framework.js +9 -13
  16. package/esm2015/framework/top-bar/top-bar-item.directive.js +2 -9
  17. package/esm2015/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.js +3 -4
  18. package/esm2015/framework/top-bar/top-bar.component.js +7 -44
  19. package/esm2015/framework/top-bar/top-bar.module.js +3 -9
  20. package/esm2015/layout/layout.service.js +2 -12
  21. package/esm2015/menu/menu-toggle.directive.js +2 -6
  22. package/fesm2015/theseam-ui-common-framework.js +41 -730
  23. package/fesm2015/theseam-ui-common-framework.js.map +1 -1
  24. package/fesm2015/theseam-ui-common-layout.js +2 -11
  25. package/fesm2015/theseam-ui-common-layout.js.map +1 -1
  26. package/fesm2015/theseam-ui-common-menu.js +1 -5
  27. package/fesm2015/theseam-ui-common-menu.js.map +1 -1
  28. package/framework/base-layout/base-layout.component.d.ts +1 -3
  29. package/framework/base-layout/base-layout.component.scss +10 -18
  30. package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +2 -7
  31. package/framework/base-layout/styles/_variables.scss +0 -21
  32. package/framework/public-api.d.ts +0 -1
  33. package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +0 -2
  34. package/framework/side-nav/side-nav-item/side-nav-item.component.scss +5 -7
  35. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +2 -4
  36. package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +6 -3
  37. package/framework/side-nav/side-nav.component.d.ts +1 -13
  38. package/framework/side-nav/side-nav.component.scss +1 -0
  39. package/framework/side-nav/styles/_themes/light/_variables.scss +14 -24
  40. package/framework/side-nav/styles/_themes/primary/_variables.scss +0 -8
  41. package/framework/theseam-ui-common-framework.d.ts +8 -12
  42. package/framework/theseam-ui-common-framework.metadata.json +1 -1
  43. package/framework/top-bar/top-bar-item.directive.d.ts +0 -3
  44. package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +1 -4
  45. package/framework/top-bar/top-bar.component.d.ts +3 -25
  46. package/framework/top-bar/top-bar.component.scss +2 -7
  47. package/layout/layout.service.d.ts +1 -9
  48. package/layout/theseam-ui-common-layout.metadata.json +1 -1
  49. package/menu/menu-toggle.directive.d.ts +1 -2
  50. package/menu/theseam-ui-common-menu.metadata.json +1 -1
  51. package/package.json +1 -1
  52. package/esm2015/framework/base-layout/directives/base-layout-side-bar-header.directive.js +0 -15
  53. package/esm2015/framework/nav/horizontal-nav/horizontal-nav.component.js +0 -68
  54. package/esm2015/framework/nav/index.js +0 -6
  55. package/esm2015/framework/nav/nav-item/nav-item.component.js +0 -169
  56. package/esm2015/framework/nav/nav-utils.js +0 -105
  57. package/esm2015/framework/nav/nav.models.js +0 -2
  58. package/esm2015/framework/nav/nav.module.js +0 -42
  59. package/esm2015/framework/nav/nav.service.js +0 -175
  60. package/esm2015/framework/top-bar/top-bar-compact-menu-btn-detail.directive.js +0 -15
  61. package/esm2015/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.js +0 -15
  62. package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +0 -6
  63. package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +0 -31
  64. package/framework/nav/index.d.ts +0 -5
  65. package/framework/nav/nav-item/nav-item.component.d.ts +0 -67
  66. package/framework/nav/nav-utils.d.ts +0 -19
  67. package/framework/nav/nav.models.d.ts +0 -76
  68. package/framework/nav/nav.module.d.ts +0 -2
  69. package/framework/nav/nav.service.d.ts +0 -21
  70. package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +0 -5
  71. package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +0 -5
@@ -2,8 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { NgModule, Injectable } from '@angular/core';
4
4
  import { FlexLayoutModule, MediaObserver } from '@angular/flex-layout';
5
- import { BehaviorSubject } from 'rxjs';
6
- import { map, startWith, distinctUntilChanged, shareReplay, switchMap } from 'rxjs/operators';
5
+ import { map, startWith, distinctUntilChanged, shareReplay } from 'rxjs/operators';
7
6
  import * as i1 from '@angular/flex-layout/core';
8
7
 
9
8
  // TODO: Make sure the `@angular/flex-layout` breakpoints and bootstrap
@@ -66,19 +65,11 @@ function observeMediaQuery(mediaObserver, alias) {
66
65
  class TheSeamLayoutService {
67
66
  constructor(_media) {
68
67
  this._media = _media;
69
- this._mobileBreakpoint = new BehaviorSubject('lt-sm');
70
- this.mobileBreakpoint$ = this._mobileBreakpoint.asObservable();
71
- this.isMobile$ = this.mobileBreakpoint$.pipe(switchMap(breakpoint => this.observe(breakpoint)), shareReplay({ bufferSize: 1, refCount: true }));
68
+ this.isMobile$ = this.observe('lt-sm');
72
69
  }
73
70
  observe(alias) {
74
71
  return observeMediaQuery(this._media, alias);
75
72
  }
76
- /**
77
- * Update breakpoint observed by isMobile$
78
- */
79
- setMobileBreakpoint(alias) {
80
- this._mobileBreakpoint.next(alias);
81
- }
82
73
  }
83
74
  TheSeamLayoutService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TheSeamLayoutService_Factory() { return new TheSeamLayoutService(i0.ɵɵinject(i1.MediaObserver)); }, token: TheSeamLayoutService, providedIn: "root" });
84
75
  TheSeamLayoutService.decorators = [
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-layout.js","sources":["../../../projects/ui-common/layout/breakpoint-aliases.ts","../../../projects/ui-common/layout/layout.module.ts","../../../projects/ui-common/layout/observe-media-query.ts","../../../projects/ui-common/layout/layout.service.ts","../../../projects/ui-common/layout/theseam-ui-common-layout.ts"],"sourcesContent":["// TODO: Make sure the `@angular/flex-layout` breakpoints and bootstrap\n// breakpoints work the same.\n//\n// I like the more spread-out ranges in '@angular/flex-layout', but since our\n// styles are mostly based on bootstrap it may be worth it to drop down closer\n// to the bootstrap breakpoints.\n//\n// Another option is to create new aliases to blend a mix between them, if it\n// doesn't add to much complexity.\n\n/**\n * | breakpoint | mediaQuery |\n * |------------|---------------------------------------------------------|\n * | xs | 'screen and (max-width: 599px)' |\n * | sm | 'screen and (min-width: 600px) and (max-width: 959px)' |\n * | md | 'screen and (min-width: 960px) and (max-width: 1279px)' |\n * | lg | 'screen and (min-width: 1280px) and (max-width: 1919px)'|\n * | xl | 'screen and (min-width: 1920px) and (max-width: 5000px)'|\n * | | |\n * | lt-sm | 'screen and (max-width: 599px)' |\n * | lt-md | 'screen and (max-width: 959px)' |\n * | lt-lg | 'screen and (max-width: 1279px)' |\n * | lt-xl | 'screen and (max-width: 1919px)' |\n * | | |\n * | gt-xs | 'screen and (min-width: 600px)' |\n * | gt-sm | 'screen and (min-width: 960px)' |\n * | gt-md | 'screen and (min-width: 1280px)' |\n * | gt-lg | 'screen and (min-width: 1920px)' |\n */\nexport type MediaQueryAliases =\n // Breakpoint MediaQuery\n 'xs' // 'screen and (max-width: 599px)'\n | 'sm' // 'screen and (min-width: 600px) and (max-width: 959px)'\n | 'md' // 'screen and (min-width: 960px) and (max-width: 1279px)'\n | 'lg' // 'screen and (min-width: 1280px) and (max-width: 1919px)'\n | 'xl' // 'screen and (min-width: 1920px) and (max-width: 5000px)'\n | 'lt-sm' // 'screen and (max-width: 599px)'\n | 'lt-md' // 'screen and (max-width: 959px)'\n | 'lt-lg' // 'screen and (max-width: 1279px)'\n | 'lt-xl' // 'screen and (max-width: 1919px)'\n | 'gt-xs' // 'screen and (min-width: 600px)'\n | 'gt-sm' // 'screen and (min-width: 960px)'\n | 'gt-md' // 'screen and (min-width: 1280px)'\n | 'gt-lg' // 'screen and (min-width: 1920px)'\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FlexLayoutModule } from '@angular/flex-layout'\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n FlexLayoutModule\n ],\n exports: [\n FlexLayoutModule\n ]\n})\nexport class TheSeamLayoutModule { }\n","import { MediaObserver } from '@angular/flex-layout'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map, shareReplay, startWith, tap } from 'rxjs/operators'\n\nimport { MediaQueryAliases } from './breakpoint-aliases'\n\nconst mediaQueriesMap: { [breakpoint: string]: string } = {\n 'xs' : 'screen and (max-width: 599px)',\n 'sm' : 'screen and (min-width: 600px) and (max-width: 959px)',\n 'md' : 'screen and (min-width: 960px) and (max-width: 1279px)',\n 'lg' : 'screen and (min-width: 1280px) and (max-width: 1919px)',\n 'xl' : 'screen and (min-width: 1920px) and (max-width: 5000px)',\n 'lt-sm': 'screen and (max-width: 599px)',\n 'lt-md': 'screen and (max-width: 959px)',\n 'lt-lg': 'screen and (max-width: 1279px)',\n 'lt-xl': 'screen and (max-width: 1919px)',\n 'gt-xs': 'screen and (min-width: 600px)',\n 'gt-sm': 'screen and (min-width: 960px)',\n 'gt-md': 'screen and (min-width: 1280px)',\n 'gt-lg': 'screen and (min-width: 1920px)'\n}\n\n/**\n * TODO: Find out if the MediaObserver can return an immediate result on load\n * accurately like the native matchMedia. If not switch to another that can or\n * just implement it myself. I would rather use a well tested library for\n * something like that, since it could have a lot of affect on performance.\n */\nfunction isMediaQueryActive(query: string, fallback: MediaObserver) {\n if (window && window.matchMedia) {\n const x = window.matchMedia(mediaQueriesMap[query])\n return x.matches\n }\n return fallback.isActive(query)\n}\n\n/**\n * Observable helper for observing a single breakpoint alias with\n * `@angular/flex-layout` MediaObserver.\n */\nexport function observeMediaQuery(\n mediaObserver: MediaObserver,\n alias: MediaQueryAliases\n): Observable<boolean> {\n // console.log(alias, mediaObserver.isActive(alias), isMediaQueryActive(alias, mediaObserver))\n return mediaObserver.asObservable()\n .pipe(\n map(_ => mediaObserver.isActive(alias)),\n // startWith(mediaObserver.isActive(alias)),\n startWith(isMediaQueryActive(alias, mediaObserver)),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n","import { Injectable } from '@angular/core'\nimport { MediaObserver } from '@angular/flex-layout'\nimport { BehaviorSubject, Observable } from 'rxjs'\nimport { shareReplay, switchMap } from 'rxjs/operators'\n\nimport { MediaQueryAliases } from './breakpoint-aliases'\nimport { observeMediaQuery } from './observe-media-query'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TheSeamLayoutService {\n\n /**\n * Observes if app is a mobile-like size.\n * Default mobile breakpoint is <= 599px,\n * use setMobileBreakpoint() to change size.\n */\n public isMobile$: Observable<boolean>\n\n private _mobileBreakpoint = new BehaviorSubject<MediaQueryAliases>('lt-sm')\n public mobileBreakpoint$ = this._mobileBreakpoint.asObservable()\n\n constructor(\n private _media: MediaObserver\n ) {\n this.isMobile$ = this.mobileBreakpoint$.pipe(\n switchMap(breakpoint => this.observe(breakpoint)),\n shareReplay({ bufferSize: 1, refCount: true })\n )\n }\n\n public observe(alias: MediaQueryAliases): Observable<boolean> {\n return observeMediaQuery(this._media, alias)\n }\n\n /**\n * Update breakpoint observed by isMobile$\n */\n public setMobileBreakpoint(alias: MediaQueryAliases) {\n this._mobileBreakpoint.next(alias)\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAAA;;MCca,mBAAmB;;;YAV/B,QAAQ,SAAC;gBACR,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE;oBACP,YAAY;oBACZ,gBAAgB;iBACjB;gBACD,OAAO,EAAE;oBACP,gBAAgB;iBACjB;aACF;;;ACPD,MAAM,eAAe,GAAqC;IACxD,IAAI,EAAK,+BAA+B;IACxC,IAAI,EAAK,sDAAsD;IAC/D,IAAI,EAAK,uDAAuD;IAChE,IAAI,EAAK,wDAAwD;IACjE,IAAI,EAAK,wDAAwD;IACjE,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,gCAAgC;CAC1C,CAAA;AAED;;;;;;AAMA,SAAS,kBAAkB,CAAC,KAAa,EAAE,QAAuB;IAChE,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,OAAO,CAAA;KACjB;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC;AAED;;;;SAIgB,iBAAiB,CAC/B,aAA4B,EAC5B,KAAwB;;IAGxB,OAAO,aAAa,CAAC,YAAY,EAAE;SAChC,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;IAEvC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EACnD,oBAAoB,EAAE,EACtB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC/C,CAAA;AACL;;MC1Ca,oBAAoB;IAY/B,YACU,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAJvB,sBAAiB,GAAG,IAAI,eAAe,CAAoB,OAAO,CAAC,CAAA;QACpE,sBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAA;QAK9D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAC1C,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EACjD,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAA;KACF;IAEM,OAAO,CAAC,KAAwB;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAC7C;;;;IAKM,mBAAmB,CAAC,KAAwB;QACjD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;KACnC;;;;YAjCF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;YATQ,aAAa;;;ACDtB;;;;;;"}
1
+ {"version":3,"file":"theseam-ui-common-layout.js","sources":["../../../projects/ui-common/layout/breakpoint-aliases.ts","../../../projects/ui-common/layout/layout.module.ts","../../../projects/ui-common/layout/observe-media-query.ts","../../../projects/ui-common/layout/layout.service.ts","../../../projects/ui-common/layout/theseam-ui-common-layout.ts"],"sourcesContent":["// TODO: Make sure the `@angular/flex-layout` breakpoints and bootstrap\n// breakpoints work the same.\n//\n// I like the more spread-out ranges in '@angular/flex-layout', but since our\n// styles are mostly based on bootstrap it may be worth it to drop down closer\n// to the bootstrap breakpoints.\n//\n// Another option is to create new aliases to blend a mix between them, if it\n// doesn't add to much complexity.\n\n/**\n * | breakpoint | mediaQuery |\n * |------------|---------------------------------------------------------|\n * | xs | 'screen and (max-width: 599px)' |\n * | sm | 'screen and (min-width: 600px) and (max-width: 959px)' |\n * | md | 'screen and (min-width: 960px) and (max-width: 1279px)' |\n * | lg | 'screen and (min-width: 1280px) and (max-width: 1919px)'|\n * | xl | 'screen and (min-width: 1920px) and (max-width: 5000px)'|\n * | | |\n * | lt-sm | 'screen and (max-width: 599px)' |\n * | lt-md | 'screen and (max-width: 959px)' |\n * | lt-lg | 'screen and (max-width: 1279px)' |\n * | lt-xl | 'screen and (max-width: 1919px)' |\n * | | |\n * | gt-xs | 'screen and (min-width: 600px)' |\n * | gt-sm | 'screen and (min-width: 960px)' |\n * | gt-md | 'screen and (min-width: 1280px)' |\n * | gt-lg | 'screen and (min-width: 1920px)' |\n */\nexport type MediaQueryAliases =\n // Breakpoint MediaQuery\n 'xs' // 'screen and (max-width: 599px)'\n | 'sm' // 'screen and (min-width: 600px) and (max-width: 959px)'\n | 'md' // 'screen and (min-width: 960px) and (max-width: 1279px)'\n | 'lg' // 'screen and (min-width: 1280px) and (max-width: 1919px)'\n | 'xl' // 'screen and (min-width: 1920px) and (max-width: 5000px)'\n | 'lt-sm' // 'screen and (max-width: 599px)'\n | 'lt-md' // 'screen and (max-width: 959px)'\n | 'lt-lg' // 'screen and (max-width: 1279px)'\n | 'lt-xl' // 'screen and (max-width: 1919px)'\n | 'gt-xs' // 'screen and (min-width: 600px)'\n | 'gt-sm' // 'screen and (min-width: 960px)'\n | 'gt-md' // 'screen and (min-width: 1280px)'\n | 'gt-lg' // 'screen and (min-width: 1920px)'\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { FlexLayoutModule } from '@angular/flex-layout'\n\n@NgModule({\n declarations: [],\n imports: [\n CommonModule,\n FlexLayoutModule\n ],\n exports: [\n FlexLayoutModule\n ]\n})\nexport class TheSeamLayoutModule { }\n","import { MediaObserver } from '@angular/flex-layout'\nimport { Observable } from 'rxjs'\nimport { distinctUntilChanged, map, shareReplay, startWith, tap } from 'rxjs/operators'\n\nimport { MediaQueryAliases } from './breakpoint-aliases'\n\nconst mediaQueriesMap: { [breakpoint: string]: string } = {\n 'xs' : 'screen and (max-width: 599px)',\n 'sm' : 'screen and (min-width: 600px) and (max-width: 959px)',\n 'md' : 'screen and (min-width: 960px) and (max-width: 1279px)',\n 'lg' : 'screen and (min-width: 1280px) and (max-width: 1919px)',\n 'xl' : 'screen and (min-width: 1920px) and (max-width: 5000px)',\n 'lt-sm': 'screen and (max-width: 599px)',\n 'lt-md': 'screen and (max-width: 959px)',\n 'lt-lg': 'screen and (max-width: 1279px)',\n 'lt-xl': 'screen and (max-width: 1919px)',\n 'gt-xs': 'screen and (min-width: 600px)',\n 'gt-sm': 'screen and (min-width: 960px)',\n 'gt-md': 'screen and (min-width: 1280px)',\n 'gt-lg': 'screen and (min-width: 1920px)'\n}\n\n/**\n * TODO: Find out if the MediaObserver can return an immediate result on load\n * accurately like the native matchMedia. If not switch to another that can or\n * just implement it myself. I would rather use a well tested library for\n * something like that, since it could have a lot of affect on performance.\n */\nfunction isMediaQueryActive(query: string, fallback: MediaObserver) {\n if (window && window.matchMedia) {\n const x = window.matchMedia(mediaQueriesMap[query])\n return x.matches\n }\n return fallback.isActive(query)\n}\n\n/**\n * Observable helper for observing a single breakpoint alias with\n * `@angular/flex-layout` MediaObserver.\n */\nexport function observeMediaQuery(\n mediaObserver: MediaObserver,\n alias: MediaQueryAliases\n): Observable<boolean> {\n // console.log(alias, mediaObserver.isActive(alias), isMediaQueryActive(alias, mediaObserver))\n return mediaObserver.asObservable()\n .pipe(\n map(_ => mediaObserver.isActive(alias)),\n // startWith(mediaObserver.isActive(alias)),\n startWith(isMediaQueryActive(alias, mediaObserver)),\n distinctUntilChanged(),\n shareReplay({ refCount: true, bufferSize: 1 })\n )\n}\n","import { inject, Injectable, InjectionToken } from '@angular/core'\nimport { MediaObserver } from '@angular/flex-layout'\nimport { Observable } from 'rxjs'\n\nimport { MediaQueryAliases } from './breakpoint-aliases'\nimport { observeMediaQuery } from './observe-media-query'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TheSeamLayoutService {\n\n /**\n * Is app a mobile-like size.\n */\n public isMobile$: Observable<boolean>\n\n constructor(\n private _media: MediaObserver\n ) {\n this.isMobile$ = this.observe('lt-sm')\n }\n\n public observe(alias: MediaQueryAliases): Observable<boolean> {\n return observeMediaQuery(this._media, alias)\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAAA;;MCca,mBAAmB;;;YAV/B,QAAQ,SAAC;gBACR,YAAY,EAAE,EAAE;gBAChB,OAAO,EAAE;oBACP,YAAY;oBACZ,gBAAgB;iBACjB;gBACD,OAAO,EAAE;oBACP,gBAAgB;iBACjB;aACF;;;ACPD,MAAM,eAAe,GAAqC;IACxD,IAAI,EAAK,+BAA+B;IACxC,IAAI,EAAK,sDAAsD;IAC/D,IAAI,EAAK,uDAAuD;IAChE,IAAI,EAAK,wDAAwD;IACjE,IAAI,EAAK,wDAAwD;IACjE,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,+BAA+B;IACxC,OAAO,EAAE,gCAAgC;IACzC,OAAO,EAAE,gCAAgC;CAC1C,CAAA;AAED;;;;;;AAMA,SAAS,kBAAkB,CAAC,KAAa,EAAE,QAAuB;IAChE,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,EAAE;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,OAAO,CAAA;KACjB;IACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC;AAED;;;;SAIgB,iBAAiB,CAC/B,aAA4B,EAC5B,KAAwB;;IAGxB,OAAO,aAAa,CAAC,YAAY,EAAE;SAChC,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;IAEvC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,EACnD,oBAAoB,EAAE,EACtB,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC/C,CAAA;AACL;;MC3Ca,oBAAoB;IAO/B,YACU,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAE7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KACvC;IAEM,OAAO,CAAC,KAAwB;QACrC,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAC7C;;;;YAlBF,UAAU,SAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;;YARQ,aAAa;;;ACDtB;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { animation, style, group, animate, query, useAnimation, trigger, transition } from '@angular/animations';
2
- import { Component, ChangeDetectionStrategy, InjectionToken, ElementRef, Inject, Optional, Input, HostListener, EventEmitter, Directive, ViewContainerRef, Output, forwardRef, ViewChild, TemplateRef, HostBinding, NgModule } from '@angular/core';
2
+ import { Component, ChangeDetectionStrategy, InjectionToken, ElementRef, Inject, Optional, Input, HostListener, Directive, ViewContainerRef, forwardRef, EventEmitter, ViewChild, TemplateRef, Output, HostBinding, NgModule } from '@angular/core';
3
3
  import { FocusMonitor, isFakeMousedownFromScreenReader, FocusKeyManager } from '@angular/cdk/a11y';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
5
  import { Subject, Subscription, of, merge, BehaviorSubject, fromEvent } from 'rxjs';
@@ -254,7 +254,6 @@ class MenuToggleDirective {
254
254
  overlayY: 'bottom',
255
255
  },
256
256
  ];
257
- this.menuToggle = new EventEmitter();
258
257
  /**
259
258
  * Handles touch start events on the trigger.
260
259
  * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.
@@ -340,7 +339,6 @@ class MenuToggleDirective {
340
339
  // this._overlayRef.backdropClick().subscribe(v => {
341
340
  // console.log('backdropClick', v)
342
341
  // })
343
- this.menuToggle.emit(true);
344
342
  }
345
343
  closeMenu() {
346
344
  var _a, _b;
@@ -355,7 +353,6 @@ class MenuToggleDirective {
355
353
  this._menuClosedSubscription.unsubscribe();
356
354
  this._closingActionsSubscription.unsubscribe();
357
355
  this._active = false;
358
- this.menuToggle.emit(false);
359
356
  }
360
357
  menuOpen() {
361
358
  var _a;
@@ -448,7 +445,6 @@ MenuToggleDirective.ctorParameters = () => [
448
445
  MenuToggleDirective.propDecorators = {
449
446
  seamMenuToggle: [{ type: Input }],
450
447
  positions: [{ type: Input }],
451
- menuToggle: [{ type: Output }],
452
448
  _onMouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],
453
449
  _onKeydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],
454
450
  _onClick: [{ type: HostListener, args: ['click', ['$event'],] }],
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-menu.js","sources":["../../../projects/ui-common/menu/menu-animations.ts","../../../projects/ui-common/menu/menu-divider.component.ts","../../../projects/ui-common/menu/menu-panel-token.ts","../../../projects/ui-common/menu/menu-item.component.ts","../../../projects/ui-common/menu/menu-toggle.directive.ts","../../../projects/ui-common/menu/menu.component.ts","../../../projects/ui-common/menu/menu-footer-action/menu-footer-action.component.ts","../../../projects/ui-common/menu/menu-footer/menu-footer.component.ts","../../../projects/ui-common/menu/menu-header/menu-header.component.ts","../../../projects/ui-common/menu/menu.module.ts","../../../projects/ui-common/menu/theseam-ui-common-menu.ts"],"sourcesContent":["import { animate, animation, group, query, style, useAnimation } from '@angular/animations'\n\nexport const menuDropdownPanelSlideIn = animation([\n style({\n opacity: 0,\n transform: 'translateY(-70%)'\n }),\n group([\n animate('170ms linear', style({ opacity: 1 })),\n animate('220ms ease', style({ transform: 'translateY(0)' })),\n ])\n])\n\nexport const menuDropdownPanelSlideOut = animation([\n style({\n opacity: 1,\n transform: 'translateY(0)'\n }),\n group([\n animate('170ms linear', style({ opacity: 0 })),\n animate('220ms ease', style({ transform: 'translateY(-70%)' })),\n ])\n])\n\nexport const menuDropdownPanelExpandIn = animation([\n style({\n opacity: 0,\n transform: 'scale(0.8)'\n }),\n group([\n animate('100ms linear', style({ opacity: 1 })),\n animate('120ms ease', style({ transform: 'scale(1)' })),\n ])\n])\n\nexport const menuDropdownPanelExpandOut = animation([\n style({\n opacity: 1,\n transform: 'scale(1)'\n }),\n group([\n animate('100ms linear', style({ opacity: 0 })),\n animate('120ms ease', style({ transform: 'scale(0.8)' })),\n ])\n])\n\nexport const menuDropdownPanelFadeIn = animation([\n style({ transform: 'translateY(-30px)', opacity: '0' }),\n animate('250ms', style({ transform: 'translateY(0)', opacity: '1' }))\n])\n\nexport const menuDropdownPanelFadeOut = animation([\n style({ transform: 'translateY(0)', opacity: '1' }),\n animate('250ms', style({ transform: 'translateY(-30px)', opacity: '0' }))\n])\n\nexport const menuDropdownPanelIn = animation([\n query('.seam-menu-container.seam-menu-anim--slide .dropdown-menu', useAnimation(menuDropdownPanelSlideIn), { optional: true }),\n query('.seam-menu-container.seam-menu-anim--fade .dropdown-menu', useAnimation(menuDropdownPanelFadeIn), { optional: true })\n])\n\nexport const menuDropdownPanelOut = animation([\n query('.seam-menu-container.seam-menu-anim--slide .dropdown-menu', useAnimation(menuDropdownPanelSlideOut), { optional: true }),\n query('.seam-menu-container.seam-menu-anim--fade .dropdown-menu', useAnimation(menuDropdownPanelFadeOut), { optional: true })\n])\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n selector: 'seam-menu-divider',\n template: ``,\n styles: [],\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'class': 'dropdown-divider d-block'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuDividerComponent { }\n","import { InjectionToken } from '@angular/core'\n\nimport { ITheSeamMenuPanel } from './menu-panel'\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n */\nexport const THESEAM_MENU_PANEL = new InjectionToken<ITheSeamMenuPanel>('THESEAM_MENU_PANEL')\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y'\nimport { DOCUMENT } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit, Optional } from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { CanDisableCtor, mixinDisabled } from '@theseam/ui-common/core'\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport type { ITheSeamMenuPanel } from './menu-panel'\nimport { THESEAM_MENU_PANEL } from './menu-panel-token'\n\nclass TheSeamMenuItemBase {}\n\nconst _seamMenuItemMixinBase: CanDisableCtor & typeof TheSeamMenuItemBase =\n mixinDisabled(TheSeamMenuItemBase)\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: '[seamMenuItem]',\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.scss'],\n exportAs: 'seamMenuItem',\n // tslint:disable-next-line:use-input-property-decorator\n inputs: [ 'disabled' ],\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n '[attr.role]': 'role',\n 'class': 'dropdown-item',\n '[attr.tabindex]': '_getTabIndex()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuItemComponent extends _seamMenuItemMixinBase implements OnInit, OnDestroy, FocusableOption {\n\n /** ARIA role for the menu item. */\n @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' | undefined | null = 'menuitem'\n\n @Input() icon: SeamIcon | string | undefined | null\n @Input() iconClass: string | undefined | null\n\n @Input() badgeText: string | undefined | null\n @Input() badgeTheme: string | undefined | null = 'danger'\n\n /** Stream that emits when the menu item is hovered. */\n readonly _hovered: Subject<MenuItemComponent> = new Subject<MenuItemComponent>()\n\n /** Whether the menu item is highlighted. */\n _highlighted = false\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) public document: any,\n private _focusMonitor: FocusMonitor,\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) {\n super()\n\n if (_focusMonitor) {\n // Start monitoring the element so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n _focusMonitor.monitor(this._elementRef, false)\n }\n\n // console.log(this._parentMenu)\n if (_parentMenu && _parentMenu.addItem) {\n _parentMenu.addItem(this)\n }\n }\n\n ngOnInit() { }\n\n ngOnDestroy() {\n if (this._focusMonitor) {\n this._focusMonitor.stopMonitoring(this._elementRef)\n }\n\n if (this._parentMenu && this._parentMenu.removeItem) {\n this._parentMenu.removeItem(this)\n }\n\n this._hovered.complete()\n }\n\n /** Focuses the menu item. */\n focus(origin: FocusOrigin = 'program'): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._getHostElement(), origin)\n } else {\n this._getHostElement().focus()\n }\n }\n\n /** Used to set the `tabindex`. */\n _getTabIndex(): string {\n return this.disabled ? '-1' : '0'\n }\n\n /** Returns the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._elementRef.nativeElement\n }\n\n /** Prevents the default element actions if it is disabled. */\n @HostListener('click', ['$event'])\n _checkDisabled(event: Event): void {\n if (this.disabled) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n\n /** Emits to the hover stream. */\n @HostListener('mouseenter')\n _handleMouseEnter() {\n this._hovered.next(this)\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n const element: HTMLElement = this._elementRef.nativeElement\n const textNodeType = this.document ? this.document.TEXT_NODE : 3\n let output = ''\n\n if (element.childNodes) {\n const length = element.childNodes.length\n\n // Go through all the top-level text nodes and extract their text.\n // We skip anything that's not a text node to prevent the text from\n // being thrown off by something like an icon.\n for (let i = 0; i < length; i++) {\n if (element.childNodes[i].nodeType === textNodeType) {\n output += element.childNodes[i].textContent\n }\n }\n }\n\n return output.trim()\n }\n\n}\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y'\nimport { DOWN_ARROW, ESCAPE, UP_ARROW } from '@angular/cdk/keycodes'\nimport { ConnectionPositionPair, Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay'\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform'\nimport { TemplatePortal } from '@angular/cdk/portal'\nimport { Directive, ElementRef, EventEmitter, HostListener, Input, OnDestroy, Output, ViewContainerRef } from '@angular/core'\nimport { merge, of, Subscription } from 'rxjs'\n\nimport { MenuComponent } from './menu.component'\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true})\n\n@Directive({\n selector: '[seamMenuToggle]',\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'menuOpen() || null'\n },\n exportAs: 'seamMenuToggle'\n})\nexport class MenuToggleDirective implements OnDestroy {\n\n private _active = false\n private _overlayRef?: OverlayRef\n private _menuClosedSubscription = Subscription.EMPTY\n private _closingActionsSubscription = Subscription.EMPTY\n\n public restoreFocus = true\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n _openedBy: 'mouse' | 'touch' | null = null\n\n @Input() seamMenuToggle: MenuComponent | undefined | null\n\n @Input()\n set positions(val: ConnectionPositionPair[]) {\n this._positions = val\n if (this.menuOpen()) {\n this._overlayRef?.updatePositionStrategy(this.getOverlayPosition(this._elementRef.nativeElement))\n }\n }\n get positions() { return this._positions }\n private _positions: ConnectionPositionPair[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n\n @Output() readonly menuToggle = new EventEmitter<boolean>()\n\n @HostListener('mousedown', [ '$event' ])\n _onMouseDown(event: MouseEvent) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : null\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n // if (this.triggersSubmenu()) {\n // event.preventDefault();\n // }\n }\n }\n\n @HostListener('keydown', [ '$event' ])\n _onKeydown(event: any) {\n this._openedBy = null\n\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n if (this.menuOpen()) {\n this.seamMenuToggle?.focusFirstItem(this._openedBy || 'program')\n }\n }\n }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n this.toggle()\n }\n\n @HostListener('document:keydown', [ '$event' ])\n _onDocumentKeydown(event: any) {\n if (event.keyCode === ESCAPE) {\n this.closeMenu()\n }\n }\n\n // @HostListener('document:mousedown', [ '$event' ])\n // _onDocumentMouseDown(event: any) {\n // console.log('outside click')\n // }\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor,\n // @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) {\n this._elementRef.nativeElement.addEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n }\n\n ngOnDestroy() {\n this.closeMenu()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._menuClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => this._openedBy = 'touch'\n\n public toggle(): void {\n if (this._active) {\n this.closeMenu()\n } else {\n this.openMenu()\n }\n }\n\n public openMenu(): void {\n if (this._active || !this.seamMenuToggle) { return }\n this._active = true\n\n this._overlayRef = this._overlay.create({\n hasBackdrop: true,\n backdropClass: 'transparent',\n positionStrategy: this.getOverlayPosition(this._elementRef.nativeElement),\n })\n\n const tpl = this.seamMenuToggle.templateRef\n if (!tpl) {\n throw Error(`Menu template not found.`)\n }\n\n this._overlayRef.attach(new TemplatePortal(tpl, this._viewContainerRef))\n\n this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu())\n this._initMenu()\n\n this._menuClosedSubscription = this.seamMenuToggle.closed.subscribe(v => {\n // console.log('closed', v)\n this.closeMenu()\n })\n\n // this._overlayRef.backdropClick().subscribe(v => {\n // console.log('backdropClick', v)\n // })\n\n this.menuToggle.emit(true)\n }\n\n public closeMenu(): void {\n if (!this._active) { return }\n\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef?.detach()\n }\n\n this._resetMenu()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._menuClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._active = false\n\n this.menuToggle.emit(false)\n }\n\n public menuOpen(): boolean {\n return (this._overlayRef && this._overlayRef.hasAttached()) ?? false\n }\n\n private getOverlayPosition(origin: HTMLElement): PositionStrategy {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(origin)\n .withPositions(this.positions)\n .withFlexibleDimensions(false)\n .withPush(true)\n\n return positionStrategy\n }\n\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin: FocusOrigin = 'program') {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._elementRef, origin)\n } else {\n this._elementRef.nativeElement.focus()\n }\n }\n\n /**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n */\n private _initMenu(): void {\n // this.seamMenuToggle.parentMenu = this.triggersSubmenu() ? this._parentMenu : undefined\n // this.seamMenuToggle.direction = this.dir\n // this._setMenuElevation()\n // this._setIsMenuOpen(true)\n // this.seamMenuToggle.focusFirstItem(this._openedBy || 'program')\n }\n\n /**\n * This method resets the menu when it's closed, most importantly restoring\n * focus to the menu trigger if the menu was opened via the keyboard.\n */\n private _resetMenu(): void {\n // this._setIsMenuOpen(false)\n\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking on the backdrop.\n if (this.restoreFocus) {\n if (!this._openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus()\n }\n // else if (!this.triggersSubmenu()) {\n // this.focus(this._openedBy)\n // }\n }\n\n this._openedBy = null\n }\n\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n private _menuClosingActions() {\n const backdrop = this._overlayRef?.backdropClick() ?? of()\n const detachments = this._overlayRef?.detachments() ?? of()\n // const parentClose = this._parentMenu ? this._parentMenu.closed : of()\n const parentClose = of()\n // const hover = this._parentMenu ? this._parentMenu._hovered().pipe(\n // filter(active => active !== this._menuItemInstance),\n // filter(() => this._menuOpen)\n // ) : of()\n const hover = of()\n\n return merge(backdrop, parentClose, hover, detachments)\n }\n\n}\n","import { animate, group, query, style, transition, trigger, useAnimation } from '@angular/animations'\nimport { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y'\nimport { coerceNumberProperty } from '@angular/cdk/coercion'\nimport { DOWN_ARROW, END, ESCAPE, hasModifierKey, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes'\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, merge, Observable, of, Subject, Subscription } from 'rxjs'\n\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators'\nimport { menuDropdownPanelIn, menuDropdownPanelOut, menuDropdownPanelSlideIn, menuDropdownPanelSlideOut } from './menu-animations'\nimport { MenuItemComponent } from './menu-item.component'\nimport { ITheSeamMenuPanel } from './menu-panel'\nimport { THESEAM_MENU_PANEL } from './menu-panel-token'\n\nimport { MenuFooterComponent } from './menu-footer/menu-footer.component'\nimport { MenuHeaderComponent } from './menu-header/menu-header.component'\n\nexport const LIB_MENU: any = {\n provide: THESEAM_MENU_PANEL,\n // tslint:disable-next-line:no-use-before-declare\n useExisting: forwardRef(() => MenuComponent)\n}\n\n@Component({\n selector: 'seam-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n providers: [ LIB_MENU ],\n animations: [\n trigger('slideDown', [\n transition(':enter', useAnimation(menuDropdownPanelIn)),\n transition(':leave', useAnimation(menuDropdownPanelOut)),\n ])\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamMenu'\n})\nexport class MenuComponent implements OnDestroy, AfterContentInit, ITheSeamMenuPanel {\n\n private readonly _ngUnsubscribe = new Subject()\n\n private _footer = new BehaviorSubject<MenuFooterComponent | undefined | null>(undefined)\n public hasFooter$ = this._footer.pipe(map(v => v !== null && v !== undefined))\n\n private _header = new BehaviorSubject<MenuHeaderComponent | undefined | null>(undefined)\n public hasHeader$ = this._header.pipe(map(v => v !== null && v !== undefined))\n\n private _keyManager?: FocusKeyManager<MenuItemComponent>\n\n /** Menu items inside the current menu. */\n private _items: MenuItemComponent[] = []\n\n /** Emits whenever the amount of menu items changes. */\n private _itemChanges = new Subject<MenuItemComponent[]>()\n\n /** Subscription to tab events on the menu panel */\n private _tabSubscription = Subscription.EMPTY\n\n /** Parent menu of the current menu panel. */\n parentMenu: ITheSeamMenuPanel | undefined\n\n @ViewChild(TemplateRef) templateRef?: TemplateRef<any>\n\n @Output() readonly closed = new EventEmitter<void | 'click' | 'keydown' | 'tab'>()\n\n @Input() menuClass: string | undefined | null\n\n /**\n * Defines a width for a menu that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get baseWidth() { return this._baseWidth.value }\n set baseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._baseWidth.value) {\n this._baseWidth.next(_val)\n }\n }\n private _baseWidth = new BehaviorSubject<number | null>(null)\n _menuWidth$: Observable<string | undefined>\n\n @Input() animationType: 'slide' | 'fade' = 'slide'\n\n constructor() {\n this._menuWidth$ = this._baseWidth.pipe(\n switchMap(baseWidth => {\n if (baseWidth) {\n return fromEvent(window, 'resize').pipe(\n startWith(undefined),\n map(() => window.innerWidth < baseWidth ? `${window.innerWidth}px` : `${baseWidth}px`)\n )\n }\n return of(undefined)\n }),\n distinctUntilChanged(),\n takeUntil(this._ngUnsubscribe)\n )\n }\n\n ngOnDestroy() {\n this._tabSubscription.unsubscribe()\n this.closed.complete()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager<MenuItemComponent>(this._items).withWrap().withTypeAhead()\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'))\n }\n\n /** Stream that emits whenever the hovered menu item changes. */\n _hovered(): Observable<MenuItemComponent> {\n return this._itemChanges.pipe(\n startWith(this._items),\n switchMap(items => merge(...items.map(item => item._hovered)))\n )\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n const manager = this._keyManager\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault()\n this.closed.emit('keydown')\n }\n break\n // case LEFT_ARROW:\n // if (this.parentMenu && this.direction === 'ltr') {\n // this.closed.emit('keydown')\n // }\n // break\n // case RIGHT_ARROW:\n // if (this.parentMenu && this.direction === 'rtl') {\n // this.closed.emit('keydown')\n // }\n // break\n case HOME:\n case END:\n if (!hasModifierKey(event)) {\n keyCode === HOME ? manager?.setFirstItemActive() : manager?.setLastItemActive()\n event.preventDefault()\n }\n break\n default:\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n manager?.setFocusOrigin('keyboard')\n }\n\n manager?.onKeydown(event)\n }\n }\n\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin: FocusOrigin = 'program'): void {\n this._keyManager?.setFocusOrigin(origin).setFirstItemActive()\n }\n\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem() {\n this._keyManager?.setActiveItem(-1)\n }\n\n /** Registers a menu item with the menu. */\n addItem(item: MenuItemComponent) {\n // We register the items through this method, rather than picking them up through\n // `ContentChildren`, because we need the items to be picked up by their closest\n // `seam-menu` ancestor. If we used `@ContentChildren(MenuItemComponent, {descendants: true})`,\n // all descendant items will bleed into the top-level menu in the case where the consumer\n // has `seam-menu` instances nested inside each other.\n if (this._items.indexOf(item) === -1) {\n this._items.push(item)\n this._itemChanges.next(this._items)\n }\n }\n\n /** Removes an item from the menu. */\n removeItem(item: MenuItemComponent) {\n const index = this._items.indexOf(item)\n\n if (this._items.indexOf(item) > -1) {\n this._items.splice(index, 1)\n this._itemChanges.next(this._items)\n }\n }\n\n /** Sets the footer component. */\n setFooter(footer?: MenuFooterComponent) {\n this._footer.next(footer)\n }\n\n /** Sets the header component. */\n setHeader(header?: MenuHeaderComponent) {\n this._header.next(header)\n }\n\n _dropdownMenuClick(event: Event) {\n // This is needed, because some menu's will get stuck open if the component\n // managing the menu is destroyed before the menu finishes its cleanup. I\n // may look for a fix to that eventually.\n this.closed.emit('click')\n }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input } from '@angular/core'\n\n// TODO: Split up the button and anchor classes.\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'button[seamMenuFooterAction],a[seamMenuFooterAction]',\n templateUrl: './menu-footer-action.component.html',\n styleUrls: ['./menu-footer-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuFooterActionComponent {\n\n @HostBinding('attr.type') get _attrType() { return this.type }\n\n /** ARIA type for the button. */\n @Input()\n get type() { return this._isButton() ? this._type || 'button' : undefined }\n set type(value: 'button' | 'submit' | 'reset' | undefined | null) {\n this._type = value\n }\n private _type: 'button' | 'submit' | 'reset' | undefined | null\n\n @HostBinding('class.btn') get _classBtn() { return this._isButton() }\n @HostBinding('class.btn-link') get _classBtnLink() { return this._isButton() }\n\n @HostBinding('style.padding.px') get _stylePadding() { return this._isButton() && 0 }\n @HostBinding('style.border.px') get _styleBorder() { return this._isButton() && 0 }\n @HostBinding('style.display.px') get _styleDisplay() { return this._isButton() && 'inline' }\n\n constructor(\n private _elementRef: ElementRef\n ) { }\n\n /** Determines if the component host is a button. */\n protected _isButton() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n\n /** Determines if the component host is an anchor. */\n protected _isAnchor() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'a'\n }\n\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core'\n\nimport { MenuItemComponent } from '../menu-item.component'\nimport type { ITheSeamMenuPanel } from '../menu-panel'\nimport { THESEAM_MENU_PANEL } from '../menu-panel-token'\n\n@Component({\n selector: 'seam-menu-footer',\n templateUrl: './menu-footer.component.html',\n styleUrls: ['./menu-footer.component.scss'],\n host: {\n 'class': 'd-flex flex-column text-center bg-light border-top rounded-bottom py-2'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuFooterComponent implements OnInit, OnDestroy {\n\n constructor(\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) { }\n\n ngOnInit() {\n if (this._parentMenu && this._parentMenu.setFooter) {\n this._parentMenu.setFooter(this)\n }\n }\n\n ngOnDestroy() {\n if (this._parentMenu && this._parentMenu.setFooter) {\n this._parentMenu.setFooter(undefined)\n }\n }\n\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core'\n\nimport { MenuItemComponent } from '../menu-item.component'\nimport type { ITheSeamMenuPanel } from '../menu-panel'\nimport { THESEAM_MENU_PANEL } from '../menu-panel-token'\n\n@Component({\n selector: 'seam-menu-header',\n templateUrl: './menu-header.component.html',\n styleUrls: ['./menu-header.component.scss'],\n host: {\n 'class': 'd-flex flex-column bg-light border-bottom rounded-top py-2 mb-2'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuHeaderComponent implements OnInit, OnDestroy {\n\n constructor(\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) { }\n\n ngOnInit() {\n if (this._parentMenu && this._parentMenu.setHeader) {\n this._parentMenu.setHeader(this)\n }\n }\n\n ngOnDestroy() {\n if (this._parentMenu && this._parentMenu.setHeader) {\n this._parentMenu.setHeader(undefined)\n }\n }\n\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\n\nimport { MenuDividerComponent } from './menu-divider.component'\nimport { MenuFooterActionComponent } from './menu-footer-action/menu-footer-action.component'\nimport { MenuFooterComponent } from './menu-footer/menu-footer.component'\nimport { MenuHeaderComponent } from './menu-header/menu-header.component'\nimport { MenuItemComponent } from './menu-item.component'\nimport { MenuToggleDirective } from './menu-toggle.directive'\nimport { MenuComponent } from './menu.component'\n\n@NgModule({\n declarations: [\n MenuComponent,\n MenuToggleDirective,\n MenuItemComponent,\n MenuDividerComponent,\n MenuFooterComponent,\n MenuFooterActionComponent,\n MenuHeaderComponent,\n ],\n imports: [\n CommonModule,\n OverlayModule,\n TheSeamIconModule\n ],\n exports: [\n MenuComponent,\n MenuToggleDirective,\n MenuItemComponent,\n MenuDividerComponent,\n\n TheSeamIconModule,\n OverlayModule,\n MenuFooterComponent,\n MenuFooterActionComponent,\n MenuHeaderComponent\n ]\n})\nexport class TheSeamMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-menu.js","sources":["../../../projects/ui-common/menu/menu-animations.ts","../../../projects/ui-common/menu/menu-divider.component.ts","../../../projects/ui-common/menu/menu-panel-token.ts","../../../projects/ui-common/menu/menu-item.component.ts","../../../projects/ui-common/menu/menu-toggle.directive.ts","../../../projects/ui-common/menu/menu.component.ts","../../../projects/ui-common/menu/menu-footer-action/menu-footer-action.component.ts","../../../projects/ui-common/menu/menu-footer/menu-footer.component.ts","../../../projects/ui-common/menu/menu-header/menu-header.component.ts","../../../projects/ui-common/menu/menu.module.ts","../../../projects/ui-common/menu/theseam-ui-common-menu.ts"],"sourcesContent":["import { animate, animation, group, query, style, useAnimation } from '@angular/animations'\n\nexport const menuDropdownPanelSlideIn = animation([\n style({\n opacity: 0,\n transform: 'translateY(-70%)'\n }),\n group([\n animate('170ms linear', style({ opacity: 1 })),\n animate('220ms ease', style({ transform: 'translateY(0)' })),\n ])\n])\n\nexport const menuDropdownPanelSlideOut = animation([\n style({\n opacity: 1,\n transform: 'translateY(0)'\n }),\n group([\n animate('170ms linear', style({ opacity: 0 })),\n animate('220ms ease', style({ transform: 'translateY(-70%)' })),\n ])\n])\n\nexport const menuDropdownPanelExpandIn = animation([\n style({\n opacity: 0,\n transform: 'scale(0.8)'\n }),\n group([\n animate('100ms linear', style({ opacity: 1 })),\n animate('120ms ease', style({ transform: 'scale(1)' })),\n ])\n])\n\nexport const menuDropdownPanelExpandOut = animation([\n style({\n opacity: 1,\n transform: 'scale(1)'\n }),\n group([\n animate('100ms linear', style({ opacity: 0 })),\n animate('120ms ease', style({ transform: 'scale(0.8)' })),\n ])\n])\n\nexport const menuDropdownPanelFadeIn = animation([\n style({ transform: 'translateY(-30px)', opacity: '0' }),\n animate('250ms', style({ transform: 'translateY(0)', opacity: '1' }))\n])\n\nexport const menuDropdownPanelFadeOut = animation([\n style({ transform: 'translateY(0)', opacity: '1' }),\n animate('250ms', style({ transform: 'translateY(-30px)', opacity: '0' }))\n])\n\nexport const menuDropdownPanelIn = animation([\n query('.seam-menu-container.seam-menu-anim--slide .dropdown-menu', useAnimation(menuDropdownPanelSlideIn), { optional: true }),\n query('.seam-menu-container.seam-menu-anim--fade .dropdown-menu', useAnimation(menuDropdownPanelFadeIn), { optional: true })\n])\n\nexport const menuDropdownPanelOut = animation([\n query('.seam-menu-container.seam-menu-anim--slide .dropdown-menu', useAnimation(menuDropdownPanelSlideOut), { optional: true }),\n query('.seam-menu-container.seam-menu-anim--fade .dropdown-menu', useAnimation(menuDropdownPanelFadeOut), { optional: true })\n])\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\n\n@Component({\n selector: 'seam-menu-divider',\n template: ``,\n styles: [],\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'class': 'dropdown-divider d-block'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuDividerComponent { }\n","import { InjectionToken } from '@angular/core'\n\nimport { ITheSeamMenuPanel } from './menu-panel'\n\n/**\n * Injection token used to provide the parent menu to menu-specific components.\n */\nexport const THESEAM_MENU_PANEL = new InjectionToken<ITheSeamMenuPanel>('THESEAM_MENU_PANEL')\n","import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y'\nimport { DOCUMENT } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, ElementRef, HostListener, Inject, Input, OnDestroy, OnInit, Optional } from '@angular/core'\nimport { Subject } from 'rxjs'\n\nimport { CanDisableCtor, mixinDisabled } from '@theseam/ui-common/core'\nimport { SeamIcon } from '@theseam/ui-common/icon'\n\nimport type { ITheSeamMenuPanel } from './menu-panel'\nimport { THESEAM_MENU_PANEL } from './menu-panel-token'\n\nclass TheSeamMenuItemBase {}\n\nconst _seamMenuItemMixinBase: CanDisableCtor & typeof TheSeamMenuItemBase =\n mixinDisabled(TheSeamMenuItemBase)\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: '[seamMenuItem]',\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.scss'],\n exportAs: 'seamMenuItem',\n // tslint:disable-next-line:use-input-property-decorator\n inputs: [ 'disabled' ],\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n '[attr.role]': 'role',\n 'class': 'dropdown-item',\n '[attr.tabindex]': '_getTabIndex()',\n '[attr.aria-disabled]': 'disabled.toString()',\n '[attr.disabled]': 'disabled || null',\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuItemComponent extends _seamMenuItemMixinBase implements OnInit, OnDestroy, FocusableOption {\n\n /** ARIA role for the menu item. */\n @Input() role: 'menuitem' | 'menuitemradio' | 'menuitemcheckbox' | undefined | null = 'menuitem'\n\n @Input() icon: SeamIcon | string | undefined | null\n @Input() iconClass: string | undefined | null\n\n @Input() badgeText: string | undefined | null\n @Input() badgeTheme: string | undefined | null = 'danger'\n\n /** Stream that emits when the menu item is hovered. */\n readonly _hovered: Subject<MenuItemComponent> = new Subject<MenuItemComponent>()\n\n /** Whether the menu item is highlighted. */\n _highlighted = false\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) public document: any,\n private _focusMonitor: FocusMonitor,\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) {\n super()\n\n if (_focusMonitor) {\n // Start monitoring the element so it gets the appropriate focused classes. We want\n // to show the focus style for menu items only when the focus was not caused by a\n // mouse or touch interaction.\n _focusMonitor.monitor(this._elementRef, false)\n }\n\n // console.log(this._parentMenu)\n if (_parentMenu && _parentMenu.addItem) {\n _parentMenu.addItem(this)\n }\n }\n\n ngOnInit() { }\n\n ngOnDestroy() {\n if (this._focusMonitor) {\n this._focusMonitor.stopMonitoring(this._elementRef)\n }\n\n if (this._parentMenu && this._parentMenu.removeItem) {\n this._parentMenu.removeItem(this)\n }\n\n this._hovered.complete()\n }\n\n /** Focuses the menu item. */\n focus(origin: FocusOrigin = 'program'): void {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._getHostElement(), origin)\n } else {\n this._getHostElement().focus()\n }\n }\n\n /** Used to set the `tabindex`. */\n _getTabIndex(): string {\n return this.disabled ? '-1' : '0'\n }\n\n /** Returns the host DOM element. */\n _getHostElement(): HTMLElement {\n return this._elementRef.nativeElement\n }\n\n /** Prevents the default element actions if it is disabled. */\n @HostListener('click', ['$event'])\n _checkDisabled(event: Event): void {\n if (this.disabled) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n\n /** Emits to the hover stream. */\n @HostListener('mouseenter')\n _handleMouseEnter() {\n this._hovered.next(this)\n }\n\n /** Gets the label to be used when determining whether the option should be focused. */\n getLabel(): string {\n const element: HTMLElement = this._elementRef.nativeElement\n const textNodeType = this.document ? this.document.TEXT_NODE : 3\n let output = ''\n\n if (element.childNodes) {\n const length = element.childNodes.length\n\n // Go through all the top-level text nodes and extract their text.\n // We skip anything that's not a text node to prevent the text from\n // being thrown off by something like an icon.\n for (let i = 0; i < length; i++) {\n if (element.childNodes[i].nodeType === textNodeType) {\n output += element.childNodes[i].textContent\n }\n }\n }\n\n return output.trim()\n }\n\n}\n","import { FocusMonitor, FocusOrigin, isFakeMousedownFromScreenReader } from '@angular/cdk/a11y'\nimport { DOWN_ARROW, ESCAPE, UP_ARROW } from '@angular/cdk/keycodes'\nimport { ConnectionPositionPair, Overlay, OverlayRef, PositionStrategy } from '@angular/cdk/overlay'\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform'\nimport { TemplatePortal } from '@angular/cdk/portal'\nimport { Directive, ElementRef, HostListener, Inject, Input, OnDestroy, Optional, ViewContainerRef } from '@angular/core'\nimport { merge, of, Subscription } from 'rxjs'\n\nimport { MenuItemComponent } from './menu-item.component'\nimport { ITheSeamMenuPanel } from './menu-panel'\nimport { THESEAM_MENU_PANEL } from './menu-panel-token'\nimport { MenuComponent } from './menu.component'\n\n/** Options for binding a passive event listener. */\nconst passiveEventListenerOptions = normalizePassiveListenerOptions({passive: true})\n\n@Directive({\n selector: '[seamMenuToggle]',\n // tslint:disable-next-line:use-host-property-decorator\n host: {\n 'aria-haspopup': 'true',\n '[attr.aria-expanded]': 'menuOpen() || null'\n },\n exportAs: 'seamMenuToggle'\n})\nexport class MenuToggleDirective implements OnDestroy {\n\n private _active = false\n private _overlayRef?: OverlayRef\n private _menuClosedSubscription = Subscription.EMPTY\n private _closingActionsSubscription = Subscription.EMPTY\n\n public restoreFocus = true\n\n // Tracking input type is necessary so it's possible to only auto-focus\n // the first item of the list when the menu is opened via the keyboard\n _openedBy: 'mouse' | 'touch' | null = null\n\n @Input() seamMenuToggle: MenuComponent | undefined | null\n\n @Input()\n set positions(val: ConnectionPositionPair[]) {\n this._positions = val\n if (this.menuOpen()) {\n this._overlayRef?.updatePositionStrategy(this.getOverlayPosition(this._elementRef.nativeElement))\n }\n }\n get positions() { return this._positions }\n private _positions: ConnectionPositionPair[] = [\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n ]\n\n @HostListener('mousedown', [ '$event' ])\n _onMouseDown(event: MouseEvent) {\n if (!isFakeMousedownFromScreenReader(event)) {\n // Since right or middle button clicks won't trigger the `click` event,\n // we shouldn't consider the menu as opened by mouse in those cases.\n this._openedBy = event.button === 0 ? 'mouse' : null\n\n // Since clicking on the trigger won't close the menu if it opens a sub-menu,\n // we should prevent focus from moving onto it via click to avoid the\n // highlight from lingering on the menu item.\n // if (this.triggersSubmenu()) {\n // event.preventDefault();\n // }\n }\n }\n\n @HostListener('keydown', [ '$event' ])\n _onKeydown(event: any) {\n this._openedBy = null\n\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n if (this.menuOpen()) {\n this.seamMenuToggle?.focusFirstItem(this._openedBy || 'program')\n }\n }\n }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n this.toggle()\n }\n\n @HostListener('document:keydown', [ '$event' ])\n _onDocumentKeydown(event: any) {\n if (event.keyCode === ESCAPE) {\n this.closeMenu()\n }\n }\n\n // @HostListener('document:mousedown', [ '$event' ])\n // _onDocumentMouseDown(event: any) {\n // console.log('outside click')\n // }\n\n constructor(\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _overlay: Overlay,\n private _focusMonitor: FocusMonitor,\n // @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) {\n this._elementRef.nativeElement.addEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n }\n\n ngOnDestroy() {\n this.closeMenu()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._menuClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n }\n\n /**\n * Handles touch start events on the trigger.\n * Needs to be an arrow function so we can easily use addEventListener and removeEventListener.\n */\n private _handleTouchStart = () => this._openedBy = 'touch'\n\n public toggle(): void {\n if (this._active) {\n this.closeMenu()\n } else {\n this.openMenu()\n }\n }\n\n public openMenu(): void {\n if (this._active || !this.seamMenuToggle) { return }\n this._active = true\n\n this._overlayRef = this._overlay.create({\n hasBackdrop: true,\n backdropClass: 'transparent',\n positionStrategy: this.getOverlayPosition(this._elementRef.nativeElement),\n })\n\n const tpl = this.seamMenuToggle.templateRef\n if (!tpl) {\n throw Error(`Menu template not found.`)\n }\n\n this._overlayRef.attach(new TemplatePortal(tpl, this._viewContainerRef))\n\n this._closingActionsSubscription = this._menuClosingActions().subscribe(() => this.closeMenu())\n this._initMenu()\n\n this._menuClosedSubscription = this.seamMenuToggle.closed.subscribe(v => {\n // console.log('closed', v)\n this.closeMenu()\n })\n\n // this._overlayRef.backdropClick().subscribe(v => {\n // console.log('backdropClick', v)\n // })\n }\n\n public closeMenu(): void {\n if (!this._active) { return }\n\n if (this._overlayRef?.hasAttached()) {\n this._overlayRef?.detach()\n }\n\n this._resetMenu()\n\n this._elementRef.nativeElement.removeEventListener('touchstart', this._handleTouchStart,\n passiveEventListenerOptions)\n\n this._menuClosedSubscription.unsubscribe()\n this._closingActionsSubscription.unsubscribe()\n\n this._active = false\n }\n\n public menuOpen(): boolean {\n return (this._overlayRef && this._overlayRef.hasAttached()) ?? false\n }\n\n private getOverlayPosition(origin: HTMLElement): PositionStrategy {\n const positionStrategy = this._overlay.position()\n .flexibleConnectedTo(origin)\n .withPositions(this.positions)\n .withFlexibleDimensions(false)\n .withPush(true)\n\n return positionStrategy\n }\n\n /**\n * Focuses the menu trigger.\n * @param origin Source of the menu trigger's focus.\n */\n focus(origin: FocusOrigin = 'program') {\n if (this._focusMonitor) {\n this._focusMonitor.focusVia(this._elementRef, origin)\n } else {\n this._elementRef.nativeElement.focus()\n }\n }\n\n /**\n * This method sets the menu state to open and focuses the first item if\n * the menu was opened via the keyboard.\n */\n private _initMenu(): void {\n // this.seamMenuToggle.parentMenu = this.triggersSubmenu() ? this._parentMenu : undefined\n // this.seamMenuToggle.direction = this.dir\n // this._setMenuElevation()\n // this._setIsMenuOpen(true)\n // this.seamMenuToggle.focusFirstItem(this._openedBy || 'program')\n }\n\n /**\n * This method resets the menu when it's closed, most importantly restoring\n * focus to the menu trigger if the menu was opened via the keyboard.\n */\n private _resetMenu(): void {\n // this._setIsMenuOpen(false)\n\n // We should reset focus if the user is navigating using a keyboard or\n // if we have a top-level trigger which might cause focus to be lost\n // when clicking on the backdrop.\n if (this.restoreFocus) {\n if (!this._openedBy) {\n // Note that the focus style will show up both for `program` and\n // `keyboard` so we don't have to specify which one it is.\n this.focus()\n }\n // else if (!this.triggersSubmenu()) {\n // this.focus(this._openedBy)\n // }\n }\n\n this._openedBy = null\n }\n\n /** Returns a stream that emits whenever an action that should close the menu occurs. */\n private _menuClosingActions() {\n const backdrop = this._overlayRef?.backdropClick() ?? of()\n const detachments = this._overlayRef?.detachments() ?? of()\n // const parentClose = this._parentMenu ? this._parentMenu.closed : of()\n const parentClose = of()\n // const hover = this._parentMenu ? this._parentMenu._hovered().pipe(\n // filter(active => active !== this._menuItemInstance),\n // filter(() => this._menuOpen)\n // ) : of()\n const hover = of()\n\n return merge(backdrop, parentClose, hover, detachments)\n }\n\n}\n","import { animate, group, query, style, transition, trigger, useAnimation } from '@angular/animations'\nimport { FocusKeyManager, FocusOrigin } from '@angular/cdk/a11y'\nimport { coerceNumberProperty } from '@angular/cdk/coercion'\nimport { DOWN_ARROW, END, ESCAPE, hasModifierKey, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes'\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Output,\n TemplateRef,\n ViewChild\n} from '@angular/core'\nimport { BehaviorSubject, fromEvent, merge, Observable, of, Subject, Subscription } from 'rxjs'\n\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators'\nimport { menuDropdownPanelIn, menuDropdownPanelOut, menuDropdownPanelSlideIn, menuDropdownPanelSlideOut } from './menu-animations'\nimport { MenuItemComponent } from './menu-item.component'\nimport { ITheSeamMenuPanel } from './menu-panel'\nimport { THESEAM_MENU_PANEL } from './menu-panel-token'\n\nimport { MenuFooterComponent } from './menu-footer/menu-footer.component'\nimport { MenuHeaderComponent } from './menu-header/menu-header.component'\n\nexport const LIB_MENU: any = {\n provide: THESEAM_MENU_PANEL,\n // tslint:disable-next-line:no-use-before-declare\n useExisting: forwardRef(() => MenuComponent)\n}\n\n@Component({\n selector: 'seam-menu',\n templateUrl: './menu.component.html',\n styleUrls: ['./menu.component.scss'],\n providers: [ LIB_MENU ],\n animations: [\n trigger('slideDown', [\n transition(':enter', useAnimation(menuDropdownPanelIn)),\n transition(':leave', useAnimation(menuDropdownPanelOut)),\n ])\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'seamMenu'\n})\nexport class MenuComponent implements OnDestroy, AfterContentInit, ITheSeamMenuPanel {\n\n private readonly _ngUnsubscribe = new Subject()\n\n private _footer = new BehaviorSubject<MenuFooterComponent | undefined | null>(undefined)\n public hasFooter$ = this._footer.pipe(map(v => v !== null && v !== undefined))\n\n private _header = new BehaviorSubject<MenuHeaderComponent | undefined | null>(undefined)\n public hasHeader$ = this._header.pipe(map(v => v !== null && v !== undefined))\n\n private _keyManager?: FocusKeyManager<MenuItemComponent>\n\n /** Menu items inside the current menu. */\n private _items: MenuItemComponent[] = []\n\n /** Emits whenever the amount of menu items changes. */\n private _itemChanges = new Subject<MenuItemComponent[]>()\n\n /** Subscription to tab events on the menu panel */\n private _tabSubscription = Subscription.EMPTY\n\n /** Parent menu of the current menu panel. */\n parentMenu: ITheSeamMenuPanel | undefined\n\n @ViewChild(TemplateRef) templateRef?: TemplateRef<any>\n\n @Output() readonly closed = new EventEmitter<void | 'click' | 'keydown' | 'tab'>()\n\n @Input() menuClass: string | undefined | null\n\n /**\n * Defines a width for a menu that will scale down if the window innerWidth is\n * smaller than the value.\n */\n @Input()\n get baseWidth() { return this._baseWidth.value }\n set baseWidth(value: number | null) {\n const _val = coerceNumberProperty(value, null)\n if (_val !== this._baseWidth.value) {\n this._baseWidth.next(_val)\n }\n }\n private _baseWidth = new BehaviorSubject<number | null>(null)\n _menuWidth$: Observable<string | undefined>\n\n @Input() animationType: 'slide' | 'fade' = 'slide'\n\n constructor() {\n this._menuWidth$ = this._baseWidth.pipe(\n switchMap(baseWidth => {\n if (baseWidth) {\n return fromEvent(window, 'resize').pipe(\n startWith(undefined),\n map(() => window.innerWidth < baseWidth ? `${window.innerWidth}px` : `${baseWidth}px`)\n )\n }\n return of(undefined)\n }),\n distinctUntilChanged(),\n takeUntil(this._ngUnsubscribe)\n )\n }\n\n ngOnDestroy() {\n this._tabSubscription.unsubscribe()\n this.closed.complete()\n\n this._ngUnsubscribe.next()\n this._ngUnsubscribe.complete()\n }\n\n ngAfterContentInit() {\n this._keyManager = new FocusKeyManager<MenuItemComponent>(this._items).withWrap().withTypeAhead()\n this._tabSubscription = this._keyManager.tabOut.subscribe(() => this.closed.emit('tab'))\n }\n\n /** Stream that emits whenever the hovered menu item changes. */\n _hovered(): Observable<MenuItemComponent> {\n return this._itemChanges.pipe(\n startWith(this._items),\n switchMap(items => merge(...items.map(item => item._hovered)))\n )\n }\n\n /** Handle a keyboard event from the menu, delegating to the appropriate action. */\n _handleKeydown(event: KeyboardEvent) {\n // tslint:disable-next-line:deprecation\n const keyCode = event.keyCode\n const manager = this._keyManager\n\n switch (keyCode) {\n case ESCAPE:\n if (!hasModifierKey(event)) {\n event.preventDefault()\n this.closed.emit('keydown')\n }\n break\n // case LEFT_ARROW:\n // if (this.parentMenu && this.direction === 'ltr') {\n // this.closed.emit('keydown')\n // }\n // break\n // case RIGHT_ARROW:\n // if (this.parentMenu && this.direction === 'rtl') {\n // this.closed.emit('keydown')\n // }\n // break\n case HOME:\n case END:\n if (!hasModifierKey(event)) {\n keyCode === HOME ? manager?.setFirstItemActive() : manager?.setLastItemActive()\n event.preventDefault()\n }\n break\n default:\n if (keyCode === UP_ARROW || keyCode === DOWN_ARROW) {\n manager?.setFocusOrigin('keyboard')\n }\n\n manager?.onKeydown(event)\n }\n }\n\n /**\n * Focus the first item in the menu.\n * @param origin Action from which the focus originated. Used to set the correct styling.\n */\n focusFirstItem(origin: FocusOrigin = 'program'): void {\n this._keyManager?.setFocusOrigin(origin).setFirstItemActive()\n }\n\n /**\n * Resets the active item in the menu. This is used when the menu is opened, allowing\n * the user to start from the first option when pressing the down arrow.\n */\n resetActiveItem() {\n this._keyManager?.setActiveItem(-1)\n }\n\n /** Registers a menu item with the menu. */\n addItem(item: MenuItemComponent) {\n // We register the items through this method, rather than picking them up through\n // `ContentChildren`, because we need the items to be picked up by their closest\n // `seam-menu` ancestor. If we used `@ContentChildren(MenuItemComponent, {descendants: true})`,\n // all descendant items will bleed into the top-level menu in the case where the consumer\n // has `seam-menu` instances nested inside each other.\n if (this._items.indexOf(item) === -1) {\n this._items.push(item)\n this._itemChanges.next(this._items)\n }\n }\n\n /** Removes an item from the menu. */\n removeItem(item: MenuItemComponent) {\n const index = this._items.indexOf(item)\n\n if (this._items.indexOf(item) > -1) {\n this._items.splice(index, 1)\n this._itemChanges.next(this._items)\n }\n }\n\n /** Sets the footer component. */\n setFooter(footer?: MenuFooterComponent) {\n this._footer.next(footer)\n }\n\n /** Sets the header component. */\n setHeader(header?: MenuHeaderComponent) {\n this._header.next(header)\n }\n\n _dropdownMenuClick(event: Event) {\n // This is needed, because some menu's will get stuck open if the component\n // managing the menu is destroyed before the menu finishes its cleanup. I\n // may look for a fix to that eventually.\n this.closed.emit('click')\n }\n\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input } from '@angular/core'\n\n// TODO: Split up the button and anchor classes.\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'button[seamMenuFooterAction],a[seamMenuFooterAction]',\n templateUrl: './menu-footer-action.component.html',\n styleUrls: ['./menu-footer-action.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuFooterActionComponent {\n\n @HostBinding('attr.type') get _attrType() { return this.type }\n\n /** ARIA type for the button. */\n @Input()\n get type() { return this._isButton() ? this._type || 'button' : undefined }\n set type(value: 'button' | 'submit' | 'reset' | undefined | null) {\n this._type = value\n }\n private _type: 'button' | 'submit' | 'reset' | undefined | null\n\n @HostBinding('class.btn') get _classBtn() { return this._isButton() }\n @HostBinding('class.btn-link') get _classBtnLink() { return this._isButton() }\n\n @HostBinding('style.padding.px') get _stylePadding() { return this._isButton() && 0 }\n @HostBinding('style.border.px') get _styleBorder() { return this._isButton() && 0 }\n @HostBinding('style.display.px') get _styleDisplay() { return this._isButton() && 'inline' }\n\n constructor(\n private _elementRef: ElementRef\n ) { }\n\n /** Determines if the component host is a button. */\n protected _isButton() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'button'\n }\n\n /** Determines if the component host is an anchor. */\n protected _isAnchor() {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'a'\n }\n\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core'\n\nimport { MenuItemComponent } from '../menu-item.component'\nimport type { ITheSeamMenuPanel } from '../menu-panel'\nimport { THESEAM_MENU_PANEL } from '../menu-panel-token'\n\n@Component({\n selector: 'seam-menu-footer',\n templateUrl: './menu-footer.component.html',\n styleUrls: ['./menu-footer.component.scss'],\n host: {\n 'class': 'd-flex flex-column text-center bg-light border-top rounded-bottom py-2'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuFooterComponent implements OnInit, OnDestroy {\n\n constructor(\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) { }\n\n ngOnInit() {\n if (this._parentMenu && this._parentMenu.setFooter) {\n this._parentMenu.setFooter(this)\n }\n }\n\n ngOnDestroy() {\n if (this._parentMenu && this._parentMenu.setFooter) {\n this._parentMenu.setFooter(undefined)\n }\n }\n\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit, Optional } from '@angular/core'\n\nimport { MenuItemComponent } from '../menu-item.component'\nimport type { ITheSeamMenuPanel } from '../menu-panel'\nimport { THESEAM_MENU_PANEL } from '../menu-panel-token'\n\n@Component({\n selector: 'seam-menu-header',\n templateUrl: './menu-header.component.html',\n styleUrls: ['./menu-header.component.scss'],\n host: {\n 'class': 'd-flex flex-column bg-light border-bottom rounded-top py-2 mb-2'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MenuHeaderComponent implements OnInit, OnDestroy {\n\n constructor(\n @Inject(THESEAM_MENU_PANEL) @Optional() private _parentMenu?: ITheSeamMenuPanel<MenuItemComponent>\n ) { }\n\n ngOnInit() {\n if (this._parentMenu && this._parentMenu.setHeader) {\n this._parentMenu.setHeader(this)\n }\n }\n\n ngOnDestroy() {\n if (this._parentMenu && this._parentMenu.setHeader) {\n this._parentMenu.setHeader(undefined)\n }\n }\n\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\n\nimport { MenuDividerComponent } from './menu-divider.component'\nimport { MenuFooterActionComponent } from './menu-footer-action/menu-footer-action.component'\nimport { MenuFooterComponent } from './menu-footer/menu-footer.component'\nimport { MenuHeaderComponent } from './menu-header/menu-header.component'\nimport { MenuItemComponent } from './menu-item.component'\nimport { MenuToggleDirective } from './menu-toggle.directive'\nimport { MenuComponent } from './menu.component'\n\n@NgModule({\n declarations: [\n MenuComponent,\n MenuToggleDirective,\n MenuItemComponent,\n MenuDividerComponent,\n MenuFooterComponent,\n MenuFooterActionComponent,\n MenuHeaderComponent,\n ],\n imports: [\n CommonModule,\n OverlayModule,\n TheSeamIconModule\n ],\n exports: [\n MenuComponent,\n MenuToggleDirective,\n MenuItemComponent,\n MenuDividerComponent,\n\n TheSeamIconModule,\n OverlayModule,\n MenuFooterComponent,\n MenuFooterActionComponent,\n MenuHeaderComponent\n ]\n})\nexport class TheSeamMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { TemplatePortal } from '@angular/cdk/portal';
2
2
  import { OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
3
3
  import { Observable } from 'rxjs';
4
- import { MediaQueryAliases, TheSeamLayoutService } from '@theseam/ui-common/layout';
4
+ import { TheSeamLayoutService } from '@theseam/ui-common/layout';
5
5
  import { BaseLayoutAction, IBaseLayoutActionButton } from './base-layout-action';
6
6
  import { ITheSeamBaseLayoutNav } from './base-layout-nav';
7
7
  import { ITheSeamBaseLayoutRef } from './base-layout-ref';
@@ -12,8 +12,6 @@ export declare class TheSeamBaseLayoutComponent implements OnInit, ITheSeamBaseL
12
12
  faAngleDoubleRight: import("@fortawesome/fontawesome-common-types").IconDefinition;
13
13
  faAngleDoubleLeft: import("@fortawesome/fontawesome-common-types").IconDefinition;
14
14
  overlayNav: boolean;
15
- mobileBreakpoint: MediaQueryAliases | undefined;
16
- showSidebar: boolean | undefined;
17
15
  _topBarTpl?: TemplateRef<any> | null;
18
16
  _sideBarTpl?: TemplateRef<any> | null;
19
17
  _contentTpl?: TemplateRef<any> | null;
@@ -11,7 +11,8 @@ seam-base-layout {
11
11
  top: 0;
12
12
  bottom: 0;
13
13
  left: 0;
14
- z-index: 999;
14
+ float: left;
15
+ z-index: 9999;
15
16
  }
16
17
 
17
18
  .base-layout-side-bar-container {
@@ -52,23 +53,6 @@ seam-base-layout {
52
53
 
53
54
  .base-layout-content-container-header {
54
55
  flex: 0 0 auto;
55
- background: $base-header-background;
56
- margin: $base-header-margin;
57
- padding: $base-header-padding;
58
- border-radius: $base-header-border-radius;
59
- overflow: hidden;
60
- &-left {
61
- background: $base-header-left-bg;
62
- padding: $base-header-left-padding;
63
- margin: $base-header-left-margin;
64
- border-radius: $base-header-left-border-radius;
65
- }
66
- &-right {
67
- background: $base-header-right-bg;
68
- padding: $base-header-right-padding;
69
- margin: $base-header-right-margin;
70
- border-radius: $base-header-right-border-radius;
71
- }
72
56
  }
73
57
 
74
58
  .base-layout-content-container-inner {
@@ -80,6 +64,14 @@ seam-base-layout {
80
64
  }
81
65
  }
82
66
 
67
+ .base-layout-content-container-header {
68
+ margin: $base-header-margin;
69
+ padding: $base-header-padding;
70
+ background: $base-header-background;
71
+ border-radius: $base-header-border-radius;
72
+ overflow: hidden;
73
+ }
74
+
83
75
  .btn-baselayout-action {
84
76
  margin: $base-action-margin;
85
77
  @include button-variant(
@@ -1,19 +1,14 @@
1
- import { ChangeDetectorRef, OnInit } from '@angular/core';
2
1
  import type { ITheSeamBaseLayoutRef } from '../base-layout-ref';
3
2
  /**
4
3
  * Can be used to toggle the expand state of the registered nav.
5
4
  */
6
- export declare class BaseLayoutNavToggleDirective implements OnInit {
7
- private readonly _cdr;
5
+ export declare class BaseLayoutNavToggleDirective {
8
6
  baseLayout: ITheSeamBaseLayoutRef | undefined;
9
7
  get _attrType(): string | null | undefined;
10
8
  type: string | undefined | null;
11
9
  get _attrAriaLabel(): string | null;
12
10
  /** Screenreader label for the button. */
13
11
  ariaLabel: string | undefined | null;
14
- _toggleClass: boolean;
15
- _expandedClass: boolean;
16
12
  _onClick(): void;
17
- constructor(_cdr: ChangeDetectorRef, _baseLayout: ITheSeamBaseLayoutRef);
18
- ngOnInit(): void;
13
+ constructor(_baseLayout: ITheSeamBaseLayoutRef);
19
14
  }
@@ -1,25 +1,8 @@
1
- // Header Bar Styles
2
1
  $base-header-margin: .25rem !default;
3
2
  $base-header-padding: 0 !default;
4
3
  $base-header-background: none !default;
5
4
  $base-header-border-radius: 0 !default;
6
5
 
7
-
8
- // Left Side
9
- $base-header-left-bg: none !default;
10
- $base-header-left-padding: 0rem !default;
11
- $base-header-left-margin: 0 !default;
12
- $base-header-left-border-radius: 0 !default;
13
-
14
-
15
- // Right Side
16
- $base-header-right-bg: none !default;
17
- $base-header-right-padding: 0rem !default;
18
- $base-header-right-margin: 0 !default;
19
- $base-header-right-border-radius: 0 !default;
20
-
21
-
22
- // Right Side Action Buttons
23
6
  $base-action-margin: 0 0 0 .25rem !default;
24
7
  $base-action-bg: $gray-200 !default;
25
8
  $base-action-hover-bg: #d3d9df !default;
@@ -29,15 +12,11 @@ $base-action-padding-x: 1rem !default;
29
12
  $base-action-padding-y: .5rem !default;
30
13
  $base-action-border-radius: .25rem !default;
31
14
 
32
-
33
- // Top Bar Wrapper
34
15
  $base-layout-top-bar-container-border-top: none !default;
35
16
  $base-layout-top-bar-container-border-right: none !default;
36
17
  $base-layout-top-bar-container-border-bottom: 1px solid #dee2e6 !default;
37
18
  $base-layout-top-bar-container-border-left: none !default;
38
19
 
39
-
40
- // Side Bar Wrapper
41
20
  $base-layout-side-bar-container-border-top: none !default;
42
21
  $base-layout-side-bar-container-border-right: 1px solid #dee2e6 !default;
43
22
  $base-layout-side-bar-container-border-bottom: none !default;
@@ -4,4 +4,3 @@ export * from './side-nav/index';
4
4
  export * from './top-bar/index';
5
5
  export * from './dynamic-router/index';
6
6
  export * from './schema-form/index';
7
- export * from './nav/index';
@@ -24,7 +24,6 @@ export declare class SideNavItemComponent implements OnDestroy {
24
24
  readonly faAngleLeft: import("@fortawesome/fontawesome-common-types").IconDefinition;
25
25
  itemType: 'divider' | 'basic' | 'link' | 'button' | 'title' | undefined | null;
26
26
  icon: SeamIcon | undefined | null;
27
- hideEmptyIcon: boolean | undefined | null;
28
27
  label: string | undefined | null;
29
28
  active: boolean;
30
29
  set link(value: string | undefined | null);
@@ -63,5 +62,4 @@ export declare class SideNavItemComponent implements OnDestroy {
63
62
  get hasChildren(): boolean;
64
63
  toggleChildren(): void;
65
64
  _linkClicked(): void;
66
- get showIconBlock(): boolean;
67
65
  }
@@ -22,10 +22,6 @@ seam-side-nav-item {
22
22
  .nav-link {
23
23
  color: $seam-side-nav-item-color-active;
24
24
  }
25
-
26
- .side-nav-btn {
27
- color: $seam-side-nav-item-toggle-color-active;
28
- }
29
25
  }
30
26
 
31
27
  .badge {
@@ -105,11 +101,11 @@ seam-side-nav-item {
105
101
 
106
102
  .side-nav-btn {
107
103
  font-weight: $font-weight-normal;
108
- color: $seam-side-nav-item-toggle-color;
104
+ color: $seam-side-nav-item-color;
109
105
  text-decoration: $link-decoration;
110
106
 
111
107
  @include hover {
112
- color: $seam-side-nav-item-toggle-color-hover;
108
+ color: $seam-side-nav-item-bg-color-hover;
113
109
  text-decoration: $link-hover-decoration;
114
110
  }
115
111
 
@@ -121,7 +117,7 @@ seam-side-nav-item {
121
117
 
122
118
  &:disabled,
123
119
  &.disabled {
124
- color: $seam-side-nav-item-toggle-disabled-color;
120
+ color: $seam-side-nav-item-disabled-color;
125
121
  pointer-events: none;
126
122
  }
127
123
  }
@@ -144,6 +140,8 @@ seam-side-nav-item {
144
140
  }
145
141
 
146
142
  .side-nav-item--toggle-btn {
143
+ color: $seam-side-nav-item-color-active;
144
+
147
145
  .svg-inline--fa {
148
146
  transition: 100ms ease-in-out transform;
149
147
  }
@@ -1,11 +1,9 @@
1
1
  import { BooleanInput } from '@angular/cdk/coercion';
2
- import { EventEmitter, OnInit, TemplateRef } from '@angular/core';
3
- import { SeamIcon } from '@theseam/ui-common/icon';
2
+ import { EventEmitter, OnInit } from '@angular/core';
4
3
  export declare class SideNavToggleComponent implements OnInit {
5
4
  static ngAcceptInputType_expanded: BooleanInput;
5
+ faBars: import("@fortawesome/fontawesome-common-types").IconDefinition;
6
6
  expanded: boolean;
7
- toggleIcon: SeamIcon | undefined | null;
8
- toggleTpl: TemplateRef<any> | undefined | null;
9
7
  toggleExpand: EventEmitter<void>;
10
8
  constructor();
11
9
  ngOnInit(): void;
@@ -4,14 +4,12 @@ seam-side-nav-toggle {
4
4
  display: flex;
5
5
  flex-direction: row;
6
6
  flex-shrink: 0;
7
- align-items: center;
8
- background: $seam-side-nav-toggle-bg-color;
9
7
 
10
8
  // &.side-nav-toggle--compact {
11
9
  // width: 50px;
12
10
  // }
13
11
  position: relative;
14
- height: $seam-side-nav-toggle-height;
12
+ height: 45px;
15
13
  width: 100%;
16
14
 
17
15
  //
@@ -20,6 +18,11 @@ seam-side-nav-toggle {
20
18
  }
21
19
 
22
20
  .side-nav-toggle--btn {
21
+ // flex: 0 0 auto;
22
+ // align-self: flex-end;
23
+ position: absolute;
24
+ top: 0;
25
+ right: 5px;
23
26
  color: $seam-side-nav-toggle-btn-color;
24
27
 
25
28
  seam-icon {