@bootkit/ng0 0.0.0-alpha.33 → 0.0.0-alpha.35

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.
@@ -9,11 +9,16 @@ type SidenavMode = 'push' | 'over';
9
9
  * Sidenav position.
10
10
  */
11
11
  type SidenavPosition = 'start' | 'end' | 'top' | 'bottom';
12
+ /**
13
+ * Sidenav size.
14
+ */
15
+ type SidenavSize = number | string | 'small' | 'medium' | 'large' | 'full' | undefined;
12
16
 
13
17
  /**
14
18
  * A sidenav component that displays a sliding navigation panel.
15
19
  */
16
20
  declare class SidenavComponent implements OnDestroy {
21
+ private _bodyOverflowStyle?;
17
22
  private _sidenavContainer;
18
23
  private _vcr;
19
24
  private _renderer;
@@ -59,7 +64,7 @@ declare class SidenavComponent implements OnDestroy {
59
64
  * @example
60
65
  * - 100, '300px', '50%', '50vh', 'small', 'full', ...
61
66
  */
62
- size: i0.InputSignal<string | number | undefined>;
67
+ size: i0.InputSignal<SidenavSize>;
63
68
  /**
64
69
  * Whether the sidenav is fixed in the viewport.
65
70
  */
@@ -68,7 +73,7 @@ declare class SidenavComponent implements OnDestroy {
68
73
  /**
69
74
  * Emits when the backdrop is clicked.
70
75
  */
71
- backdropClick: EventEmitter<MouseEvent>;
76
+ backdropClick: EventEmitter<PointerEvent>;
72
77
  constructor();
73
78
  _getFixedSize(): string | undefined;
74
79
  private _observeResize;
@@ -117,4 +122,4 @@ declare class SidenavModule {
117
122
  }
118
123
 
119
124
  export { SidenavComponent, SidenavContainerComponent, SidenavContentComponent, SidenavModule };
120
- export type { SidenavMode, SidenavPosition };
125
+ export type { SidenavMode, SidenavPosition, SidenavSize };
@@ -8,6 +8,7 @@ import { throttleTime, Observable } from 'rxjs';
8
8
  * A sidenav component that displays a sliding navigation panel.
9
9
  */
10
10
  class SidenavComponent {
11
+ _bodyOverflowStyle;
11
12
  _sidenavContainer = inject(SidenavContainerComponent);
12
13
  _vcr = inject(ViewContainerRef);
13
14
  _renderer = inject(Renderer2);
@@ -106,6 +107,8 @@ class SidenavComponent {
106
107
  });
107
108
  }
108
109
  _createBackdrop() {
110
+ if (this._backdropRef)
111
+ return;
109
112
  this._backdropRef = this._vcr.createComponent(BackdropComponent);
110
113
  const backdropElm = this._backdropRef.location.nativeElement;
111
114
  this._backdropRef.instance.fixed.set(this.fixedInViewport());
@@ -119,19 +122,31 @@ class SidenavComponent {
119
122
  const hostElm = this.elmentRef.nativeElement;
120
123
  const parentElm = hostElm.parentNode;
121
124
  this._renderer.insertBefore(parentElm, backdropElm, hostElm);
125
+ // disable body scroll when sidenav is open and fixedInViewport is true
126
+ if (!this._isPlatformServer && this.fixedInViewport()) {
127
+ const body = document.getElementsByTagName('body')[0];
128
+ this._bodyOverflowStyle = body.style.overflow;
129
+ body.style.overflow = 'hidden';
130
+ this._renderer.setStyle(body, 'overflow', 'hidden');
131
+ }
122
132
  }
123
133
  _destroyBackdrop() {
124
134
  this._backdropClickHandlerUnlisten?.();
125
135
  this._backdropRef?.destroy();
126
136
  this._backdropClickHandlerUnlisten = undefined;
127
137
  this._backdropRef = undefined;
138
+ // restore body scroll when sidenav is closed
139
+ if (!this._isPlatformServer && this.fixedInViewport()) {
140
+ const body = document.getElementsByTagName('body')[0];
141
+ this._renderer.setStyle(body, 'overflow', this._bodyOverflowStyle);
142
+ }
128
143
  }
129
144
  ngOnDestroy() {
130
145
  this._destroyBackdrop();
131
146
  this._resizeSubscription?.unsubscribe();
132
147
  }
133
148
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
134
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.9", type: SidenavComponent, isStandalone: true, selector: "ng0-sidenav", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fixedInViewport: { classPropertyName: "fixedInViewport", publicName: "fixedInViewport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.width": "position() == 'start' || position() == 'end' ? _getFixedSize() : undefined", "style.height": "undefined", "style.z-index": "zIndex()", "class.ng0-sidenav-start": "position() == 'start'", "class.ng0-sidenav-end": "position() == 'end'", "class.ng0-sidenav-top": "position() == 'top'", "class.ng0-sidenav-bottom": "position() == 'bottom'", "class.ng0-sidenav-open": "open()", "class.ng0-sidenav-small": "size() == 'small'", "class.ng0-sidenav-medium": "size() == 'medium'", "class.ng0-sidenav-large": "size() == 'large'", "class.ng0-sidenav-full": "size() == 'full'", "class.ng0-sidenav-fixed": "fixedInViewport()" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["ng0-sidenav{display:block;position:absolute;will-change:transform,width,height}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
149
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.9", type: SidenavComponent, isStandalone: true, selector: "ng0-sidenav", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fixedInViewport: { classPropertyName: "fixedInViewport", publicName: "fixedInViewport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.width": "position() == 'start' || position() == 'end' ? _getFixedSize() : undefined", "style.height": "undefined", "style.z-index": "zIndex()", "class.ng0-sidenav-start": "position() == 'start'", "class.ng0-sidenav-end": "position() == 'end'", "class.ng0-sidenav-top": "position() == 'top'", "class.ng0-sidenav-bottom": "position() == 'bottom'", "class.ng0-sidenav-open": "open()", "class.ng0-sidenav-small": "size() == 'small'", "class.ng0-sidenav-medium": "size() == 'medium'", "class.ng0-sidenav-large": "size() == 'large'", "class.ng0-sidenav-full": "size() == 'full'", "class.ng0-sidenav-fixed": "fixedInViewport()" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["ng0-sidenav{position:absolute;will-change:transform,width,height;overflow:auto;display:none}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{display:block;left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{display:block;left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{display:block;top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{display:block;top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
135
150
  }
136
151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavComponent, decorators: [{
137
152
  type: Component,
@@ -149,7 +164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
149
164
  "[class.ng0-sidenav-large]": "size() == 'large'",
150
165
  "[class.ng0-sidenav-full]": "size() == 'full'",
151
166
  "[class.ng0-sidenav-fixed]": "fixedInViewport()",
152
- }, styles: ["ng0-sidenav{display:block;position:absolute;will-change:transform,width,height}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"] }]
167
+ }, styles: ["ng0-sidenav{position:absolute;will-change:transform,width,height;overflow:auto;display:none}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{display:block;left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{display:block;left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{display:block;top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{display:block;top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"] }]
153
168
  }], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fixedInViewport: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedInViewport", required: false }] }], backdropClick: [{
154
169
  type: Output
155
170
  }] } });
@@ -185,7 +200,7 @@ class SidenavContainerComponent {
185
200
  }
186
201
  else {
187
202
  let horizontal = position == 'start' || position == 'end';
188
- let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.clientWidth : x.elmentRef.nativeElement.clientHeight);
203
+ let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.offsetWidth : x.elmentRef.nativeElement.offsetHeight);
189
204
  return `${Math.max(...sizes)}px`;
190
205
  }
191
206
  }
@@ -208,7 +223,7 @@ class SidenavContainerComponent {
208
223
  return true;
209
224
  }
210
225
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
211
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContainerComponent, isStandalone: true, selector: "ng0-sidenav-container", outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.padding-inline-start": "_getPadding('start')", "style.padding-inline-end": "_getPadding('end')", "style.padding-top": "_getPadding('top')", "style.padding-bottom": "_getPadding('bottom')", "class.ng0-sidenav-transition": "_isTransitionEnabled", "class.ng0-sidenav-content-hidden": "!_canComputePadding()" } }, queries: [{ propertyName: "_sidenavs", predicate: SidenavComponent }], ngImport: i0, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .1s;--ng0-sidenav-transition-function: ease-in-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
226
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContainerComponent, isStandalone: true, selector: "ng0-sidenav-container", outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.padding-inline-start": "_getPadding('start')", "style.padding-inline-end": "_getPadding('end')", "style.padding-top": "_getPadding('top')", "style.padding-bottom": "_getPadding('bottom')", "class.ng0-sidenav-transition": "_isTransitionEnabled", "class.ng0-sidenav-content-hidden": "!_canComputePadding()" } }, queries: [{ propertyName: "_sidenavs", predicate: SidenavComponent }], ngImport: i0, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .2s;--ng0-sidenav-transition-function: ease-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
212
227
  }
213
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContainerComponent, decorators: [{
214
229
  type: Component,
@@ -219,7 +234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
219
234
  "[style.padding-bottom]": "_getPadding('bottom')",
220
235
  "[class.ng0-sidenav-transition]": "_isTransitionEnabled",
221
236
  "[class.ng0-sidenav-content-hidden]": "!_canComputePadding()",
222
- }, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .1s;--ng0-sidenav-transition-function: ease-in-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"] }]
237
+ }, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .2s;--ng0-sidenav-transition-function: ease-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"] }]
223
238
  }], propDecorators: { _sidenavs: [{
224
239
  type: ContentChildren,
225
240
  args: [SidenavComponent]
@@ -232,17 +247,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
232
247
  */
233
248
  class SidenavContentComponent {
234
249
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
235
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContentComponent, isStandalone: true, selector: "ng0-sidenav-content", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
250
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContentComponent, isStandalone: true, selector: "ng0-sidenav-content", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["ng0-sidenav-content{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
236
251
  }
237
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContentComponent, decorators: [{
238
253
  type: Component,
239
- args: [{
240
- selector: 'ng0-sidenav-content',
241
- template: `<ng-content></ng-content>`,
242
- encapsulation: ViewEncapsulation.None,
243
- changeDetection: ChangeDetectionStrategy.OnPush,
244
- standalone: true,
245
- }]
254
+ args: [{ selector: 'ng0-sidenav-content', template: `<ng-content></ng-content>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, styles: ["ng0-sidenav-content{display:block}\n"] }]
246
255
  }] });
247
256
 
248
257
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bootkit-ng0-components-sidenav.mjs","sources":["../../../projects/ng0/components/sidenav/sidenav.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.html","../../../projects/ng0/components/sidenav/sidenav-content.component.ts","../../../projects/ng0/components/sidenav/sidenav.module.ts","../../../projects/ng0/components/sidenav/bootkit-ng0-components-sidenav.ts"],"sourcesContent":["import { booleanAttribute, numberAttribute, Component, ComponentRef, effect, ElementRef, EventEmitter, input, OnDestroy, Output, Renderer2, ViewContainerRef, inject, ChangeDetectionStrategy, ViewEncapsulation, PLATFORM_ID } from '@angular/core';\r\nimport { SidenavMode, SidenavPosition } from './types';\r\nimport { BackdropComponent } from '@bootkit/ng0/components/backdrop';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { Observable, Subscription, throttleTime } from 'rxjs';\r\n\r\n/**\r\n * A sidenav component that displays a sliding navigation panel.\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav',\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./sidenav.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.width]\": \"position() == 'start' || position() == 'end' ? _getFixedSize() : undefined\",\r\n \"[style.height]\": \"undefined\",\r\n \"[style.z-index]\": \"zIndex()\",\r\n \"[class.ng0-sidenav-start]\": \"position() == 'start'\",\r\n \"[class.ng0-sidenav-end]\": \"position() == 'end'\",\r\n \"[class.ng0-sidenav-top]\": \"position() == 'top'\",\r\n \"[class.ng0-sidenav-bottom]\": \"position() == 'bottom'\",\r\n \"[class.ng0-sidenav-open]\": \"open()\",\r\n \"[class.ng0-sidenav-small]\": \"size() == 'small'\",\r\n \"[class.ng0-sidenav-medium]\": \"size() == 'medium'\",\r\n \"[class.ng0-sidenav-large]\": \"size() == 'large'\",\r\n \"[class.ng0-sidenav-full]\": \"size() == 'full'\",\r\n \"[class.ng0-sidenav-fixed]\": \"fixedInViewport()\",\r\n }\r\n})\r\nexport class SidenavComponent implements OnDestroy {\r\n private _sidenavContainer = inject(SidenavContainerComponent);\r\n private _vcr = inject(ViewContainerRef);\r\n private _renderer = inject(Renderer2);\r\n private _backdropRef?: ComponentRef<BackdropComponent>;\r\n private _backdropClickHandlerUnlisten?: () => void;\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n private _resizeSubscription?: Subscription;\r\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * Whether the sidenav is open.\r\n */\r\n public open = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav mode.\r\n * Determines how the sidenav is displayed.\r\n * Can be either 'push' or 'over'.\r\n * - 'push': The content is pushed aside to make room for the sidenav.\r\n * - 'over': The sidenav is displayed on top of the content.\r\n */\r\n public mode = input<SidenavMode>('push');\r\n\r\n /**\r\n * Whether the sidenav has a backdrop.\r\n * The backdrop is shown only when the sidenav is open and mode is 'over'.\r\n */\r\n public hasBackdrop = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav z-index.\r\n * Determines the stack order of the sidenav.\r\n */\r\n public zIndex = input(undefined, { transform: numberAttribute });\r\n\r\n /**\r\n * Sidenav position.\r\n * Determines the position of the sidenav.\r\n * Can be either 'start', 'end', 'top', or 'bottom'.\r\n */\r\n public position = input<SidenavPosition>('start');\r\n\r\n /**\r\n * Sidenav size.\r\n * Determines the size of the sidenav. \r\n * Can be either 'small', 'medium', 'large', 'full', or a specific value. \r\n * If a specific value is provided, it will be used as the width/height of the sidenav.\r\n * @example\r\n * - 100, '300px', '50%', '50vh', 'small', 'full', ...\r\n */\r\n public size = input<number | string | 'small' | 'medium' | 'large' | 'full' | undefined>();\r\n\r\n /**\r\n * Whether the sidenav is fixed in the viewport.\r\n */\r\n public fixedInViewport = input(false, { transform: booleanAttribute });\r\n\r\n public elmentRef = inject(ElementRef);\r\n\r\n /**\r\n * Emits when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter<MouseEvent>();\r\n\r\n constructor() {\r\n effect(() => {\r\n var hasBackdrop = this.hasBackdrop();\r\n var mode = this.mode();\r\n var open = this.open();\r\n\r\n if (mode == 'over' && hasBackdrop && open) {\r\n this._createBackdrop();\r\n } else {\r\n this._destroyBackdrop();\r\n }\r\n });\r\n\r\n if (!this._isPlatformServer) {\r\n this._observeResize()\r\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\r\n .subscribe(entries => {\r\n this._sidenavContainer.changeDetectorRef.markForCheck();\r\n // console.log('Resized to:', entries[0].contentRect.width, entries[0].contentRect.height);\r\n });\r\n }\r\n }\r\n\r\n _getFixedSize(): string | undefined {\r\n let size = this.size();\r\n let t = typeof size;\r\n if (t == 'string') {\r\n return ['small', 'medium', 'large', 'full'].includes(size as string) ? undefined : size as string;\r\n } else if (t == 'number') {\r\n return `${size}px`;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n private _observeResize(): Observable<ResizeObserverEntry[]> {\r\n return new Observable(observer => {\r\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\r\n resizeObserver.observe(this._elementRef.nativeElement);\r\n return () => resizeObserver.disconnect();\r\n });\r\n }\r\n\r\n private _createBackdrop() {\r\n this._backdropRef = this._vcr.createComponent(BackdropComponent);\r\n const backdropElm = this._backdropRef.location.nativeElement;\r\n this._backdropRef.instance.fixed.set(this.fixedInViewport());\r\n if (this.zIndex() != undefined) {\r\n this._renderer.setStyle(backdropElm, 'z-index', this.zIndex());\r\n }\r\n this._backdropClickHandlerUnlisten = this._renderer.listen(backdropElm, 'click', (e) => {\r\n this.backdropClick.emit(e);\r\n });\r\n\r\n // Move backdrop element before Host element\r\n const hostElm = this.elmentRef.nativeElement;\r\n const parentElm = hostElm.parentNode;\r\n this._renderer.insertBefore(parentElm, backdropElm, hostElm);\r\n }\r\n\r\n private _destroyBackdrop() {\r\n this._backdropClickHandlerUnlisten?.();\r\n this._backdropRef?.destroy();\r\n\r\n this._backdropClickHandlerUnlisten = undefined;\r\n this._backdropRef = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyBackdrop();\r\n this._resizeSubscription?.unsubscribe();\r\n }\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, inject, Output, PLATFORM_ID, QueryList, ViewEncapsulation } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavPosition } from './types';\r\n\r\n/**\r\n * Sidenav container component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-container',\r\n templateUrl: './sidenav-container.component.html',\r\n styleUrls: ['./sidenav-container.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.padding-inline-start]\": \"_getPadding('start')\",\r\n \"[style.padding-inline-end]\": \"_getPadding('end')\",\r\n \"[style.padding-top]\": \"_getPadding('top')\",\r\n \"[style.padding-bottom]\": \"_getPadding('bottom')\",\r\n \"[class.ng0-sidenav-transition]\": \"_isTransitionEnabled\",\r\n \"[class.ng0-sidenav-content-hidden]\": \"!_canComputePadding()\",\r\n }\r\n})\r\nexport class SidenavContainerComponent implements AfterViewInit {\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n protected _isTransitionEnabled = false;\r\n @ContentChildren(SidenavComponent) protected _sidenavs!: QueryList<SidenavComponent>;\r\n\r\n /**\r\n * Emitted when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter();\r\n\r\n public changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n protected _getPadding(position: SidenavPosition) {\r\n let openSidenavs = this._sidenavs.filter(x => x.open() && x.mode() == 'push');\r\n let filteredSidenavs = openSidenavs.filter(x => x.position() == position);\r\n if(filteredSidenavs.length == 0) return undefined;\r\n\r\n if (this._isPlatformServer) {\r\n let hasDynamicSidenavs = openSidenavs.some(x => x._getFixedSize() == undefined);\r\n if (hasDynamicSidenavs) {\r\n // we cannot compute padding on the server\r\n return undefined;\r\n } else {\r\n let fixedSizes = filteredSidenavs.map(x => x._getFixedSize());\r\n return fixedSizes.length > 1 ? `max(${fixedSizes.join(', ')})` : fixedSizes[0];\r\n }\r\n } else {\r\n let horizontal = position == 'start' || position == 'end';\r\n let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.clientWidth : x.elmentRef.nativeElement.clientHeight);\r\n return `${Math.max(...sizes)}px`;\r\n }\r\n };\r\n\r\n ngAfterViewInit() {\r\n if (!this._isPlatformServer) {\r\n setTimeout(() => this._isTransitionEnabled = true);\r\n }\r\n }\r\n\r\n // In some modes the content is pushed based on the width of the opened sidenavs, however on\r\n // the server we can't measure the sidenav-container padding, so the padding is always zero. This can cause the\r\n // content to jump around when it's rendered on the server and hydrated on the client.\r\n // We avoid it by hiding the content on the initial render and then showing it once the sidenav\r\n // has been measured on the client.\r\n protected _canComputePadding() {\r\n if (this._isPlatformServer) {\r\n let hasDynamicSizenavs = this._sidenavs.some(x => x.open() && x.mode() == 'push' && x._getFixedSize() == undefined);\r\n return !hasDynamicSizenavs;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Sidenav content component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-content',\r\n template: `<ng-content></ng-content>`,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class SidenavContentComponent {\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavContentComponent } from './sidenav-content.component';\r\n\r\n/**\r\n * Sidenav module\r\n */\r\n@NgModule({\r\n imports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ],\r\n exports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ]\r\n})\r\nexport class SidenavModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAOA;;AAEG;MAwBU,gBAAgB,CAAA;AACnB,IAAA,iBAAiB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACrD,IAAA,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC/B,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,YAAY;AACZ,IAAA,6BAA6B;AAC7B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC/B,IAAA,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;AACxD,IAAA,mBAAmB;AACV,IAAA,WAAW,GAAG,MAAM,EAAC,UAAuB,EAAC;AAE9D;;AAEG;AACI,IAAA,IAAI,GAAG,KAAK,CAAC,KAAK,wCAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAE3D;;;;;;AAMG;AACI,IAAA,IAAI,GAAG,KAAK,CAAc,MAAM,gDAAC;AAExC;;;AAGG;AACI,IAAA,WAAW,GAAG,KAAK,CAAC,IAAI,+CAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAEjE;;;AAGG;AACI,IAAA,MAAM,GAAG,KAAK,CAAC,SAAS,0CAAI,SAAS,EAAE,eAAe,EAAA,CAAA,GAAA,CAA5B,EAAE,SAAS,EAAE,eAAe,EAAE,GAAC;AAEhE;;;;AAIG;AACI,IAAA,QAAQ,GAAG,KAAK,CAAkB,OAAO,oDAAC;AAEjD;;;;;;;AAOG;IACI,IAAI,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAuE;AAE1F;;AAEG;AACI,IAAA,eAAe,GAAG,KAAK,CAAC,KAAK,mDAAI,SAAS,EAAE,gBAAgB,EAAA,CAAA,GAAA,CAA7B,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAC;AAE/D,IAAA,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;AAErC;;AAEG;AACc,IAAA,aAAa,GAAG,IAAI,YAAY,EAAc;AAE/D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACpC,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YAEtB,IAAI,IAAI,IAAI,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE;gBACzC,IAAI,CAAC,eAAe,EAAE;YACxB;iBAAO;gBACL,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,cAAc;AAChB,iBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iBACpE,SAAS,CAAC,OAAO,IAAG;AACnB,gBAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,EAAE;;AAEzD,YAAA,CAAC,CAAC;QACN;IACF;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,OAAO,IAAI;AACnB,QAAA,IAAI,CAAC,IAAI,QAAQ,EAAE;YACjB,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAc,CAAC,GAAG,SAAS,GAAG,IAAc;QACnG;AAAO,aAAA,IAAI,CAAC,IAAI,QAAQ,EAAE;YACxB,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,CAAI;QACpB;aAAO;AACL,YAAA,OAAO,SAAS;QAClB;IACF;;IAEQ,cAAc,GAAA;AACpB,QAAA,OAAO,IAAI,UAAU,CAAC,QAAQ,IAAG;AAC/B,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5E,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AACtD,YAAA,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE;AAC1C,QAAA,CAAC,CAAC;IACJ;IAEQ,eAAe,GAAA;QACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChE;AACA,QAAA,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,KAAI;AACrF,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;AAC5C,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU;QACpC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC;IAC9D;IAEQ,gBAAgB,GAAA;AACtB,QAAA,IAAI,CAAC,6BAA6B,IAAI;AACtC,QAAA,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAE5B,QAAA,IAAI,CAAC,6BAA6B,GAAG,SAAS;AAC9C,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;IAC/B;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,gBAAgB,EAAE;AACvB,QAAA,IAAI,CAAC,mBAAmB,EAAE,WAAW,EAAE;IACzC;uGAzIW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,0oDArBjB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oxGAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAqB1B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,QAAA,EACb,CAAA,yBAAA,CAA2B,EAAA,aAAA,EAEtB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,eAAe,EAAE,4EAA4E;AAC7F,wBAAA,gBAAgB,EAAE,WAAW;AAC7B,wBAAA,iBAAiB,EAAE,UAAU;AAC7B,wBAAA,2BAA2B,EAAE,uBAAuB;AACpD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,yBAAyB,EAAE,qBAAqB;AAChD,wBAAA,4BAA4B,EAAE,wBAAwB;AACtD,wBAAA,0BAA0B,EAAE,QAAQ;AACpC,wBAAA,2BAA2B,EAAE,mBAAmB;AAChD,wBAAA,4BAA4B,EAAE,oBAAoB;AAClD,wBAAA,2BAA2B,EAAE,mBAAmB;AAChD,wBAAA,0BAA0B,EAAE,kBAAkB;AAC9C,wBAAA,2BAA2B,EAAE,mBAAmB;AACjD,qBAAA,EAAA,MAAA,EAAA,CAAA,oxGAAA,CAAA,EAAA;;sBAkEA;;;AC5FH;;AAEG;MAiBU,yBAAyB,CAAA;AAC5B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAC/B,IAAA,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;IACtD,oBAAoB,GAAG,KAAK;AACO,IAAA,SAAS;AAEtD;;AAEG;AACc,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAE5C,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAE1C,IAAA,WAAW,CAAC,QAAyB,EAAA;QAC7C,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;AAC7E,QAAA,IAAI,gBAAgB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,QAAQ,CAAC;AACzE,QAAA,IAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,SAAS;AAEjD,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,SAAS,CAAC;YAC/E,IAAI,kBAAkB,EAAE;;AAEtB,gBAAA,OAAO,SAAS;YAClB;iBAAO;AACL,gBAAA,IAAI,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBAC7D,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,IAAA,EAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,UAAU,CAAC,CAAC,CAAC;YAChF;QACF;aAAO;YACL,IAAI,UAAU,GAAG,QAAQ,IAAI,OAAO,IAAI,QAAQ,IAAI,KAAK;AACzD,YAAA,IAAI,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC;YAClI,OAAO,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA,EAAA,CAAI;QAClC;IACF;;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,UAAU,CAAC,MAAM,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACpD;IACF;;;;;;IAOU,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,CAAC,aAAa,EAAE,IAAI,SAAS,CAAC;YACnH,OAAO,CAAC,kBAAkB;QAC5B;AAEA,QAAA,OAAO,IAAI;IACb;uGApDW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,sBAAA,EAAA,0BAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,8BAAA,EAAA,sBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAInB,gBAAgB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5BnC,uFACyB,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDuBZ,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAhBrC,SAAS;+BACE,uBAAuB,EAAA,aAAA,EAGlB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,8BAA8B,EAAE,sBAAsB;AACtD,wBAAA,4BAA4B,EAAE,oBAAoB;AAClD,wBAAA,qBAAqB,EAAE,oBAAoB;AAC3C,wBAAA,wBAAwB,EAAE,uBAAuB;AACjD,wBAAA,gCAAgC,EAAE,sBAAsB;AACxD,wBAAA,oCAAoC,EAAE,uBAAuB;AAC9D,qBAAA,EAAA,QAAA,EAAA,uFAAA,EAAA,MAAA,EAAA,CAAA,uZAAA,CAAA,EAAA;;sBAMA,eAAe;uBAAC,gBAAgB;;sBAKhC;;;AE/BH;;AAEG;MAQU,uBAAuB,CAAA;uGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,+EALxB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAK1B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;oBACrC,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACND;;AAEG;MAaU,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,YAVtB,yBAAyB;YACzB,gBAAgB;AAChB,YAAA,uBAAuB,aAGvB,yBAAyB;YACzB,gBAAgB;YAChB,uBAAuB,CAAA,EAAA,CAAA;wGAGd,aAAa,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAZzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,yBAAyB;wBACzB,gBAAgB;wBAChB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,yBAAyB;wBACzB,gBAAgB;wBAChB;AACD;AACF,iBAAA;;;ACnBD;;AAEG;;;;"}
1
+ {"version":3,"file":"bootkit-ng0-components-sidenav.mjs","sources":["../../../projects/ng0/components/sidenav/sidenav.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.html","../../../projects/ng0/components/sidenav/sidenav-content.component.ts","../../../projects/ng0/components/sidenav/sidenav.module.ts","../../../projects/ng0/components/sidenav/bootkit-ng0-components-sidenav.ts"],"sourcesContent":["import { booleanAttribute, numberAttribute, Component, ComponentRef, effect, ElementRef, EventEmitter, input, OnDestroy, Output, Renderer2, ViewContainerRef, inject, ChangeDetectionStrategy, ViewEncapsulation, PLATFORM_ID, Inject, DOCUMENT } from '@angular/core';\r\nimport { SidenavMode, SidenavPosition, SidenavSize } from './types';\r\nimport { BackdropComponent } from '@bootkit/ng0/components/backdrop';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { Observable, Subscription, throttleTime } from 'rxjs';\r\n\r\n/**\r\n * A sidenav component that displays a sliding navigation panel.\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav',\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./sidenav.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.width]\": \"position() == 'start' || position() == 'end' ? _getFixedSize() : undefined\",\r\n \"[style.height]\": \"undefined\",\r\n \"[style.z-index]\": \"zIndex()\",\r\n \"[class.ng0-sidenav-start]\": \"position() == 'start'\",\r\n \"[class.ng0-sidenav-end]\": \"position() == 'end'\",\r\n \"[class.ng0-sidenav-top]\": \"position() == 'top'\",\r\n \"[class.ng0-sidenav-bottom]\": \"position() == 'bottom'\",\r\n \"[class.ng0-sidenav-open]\": \"open()\",\r\n \"[class.ng0-sidenav-small]\": \"size() == 'small'\",\r\n \"[class.ng0-sidenav-medium]\": \"size() == 'medium'\",\r\n \"[class.ng0-sidenav-large]\": \"size() == 'large'\",\r\n \"[class.ng0-sidenav-full]\": \"size() == 'full'\",\r\n \"[class.ng0-sidenav-fixed]\": \"fixedInViewport()\",\r\n }\r\n})\r\nexport class SidenavComponent implements OnDestroy {\r\n private _bodyOverflowStyle?: string;\r\n private _sidenavContainer = inject(SidenavContainerComponent);\r\n private _vcr = inject(ViewContainerRef);\r\n private _renderer = inject(Renderer2);\r\n private _backdropRef?: ComponentRef<BackdropComponent>;\r\n private _backdropClickHandlerUnlisten?: () => void;\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n private _resizeSubscription?: Subscription;\r\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n\r\n /**\r\n * Whether the sidenav is open.\r\n */\r\n public open = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav mode.\r\n * Determines how the sidenav is displayed.\r\n * Can be either 'push' or 'over'.\r\n * - 'push': The content is pushed aside to make room for the sidenav.\r\n * - 'over': The sidenav is displayed on top of the content.\r\n */\r\n public mode = input<SidenavMode>('push');\r\n\r\n /**\r\n * Whether the sidenav has a backdrop.\r\n * The backdrop is shown only when the sidenav is open and mode is 'over'.\r\n */\r\n public hasBackdrop = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav z-index.\r\n * Determines the stack order of the sidenav.\r\n */\r\n public zIndex = input(undefined, { transform: numberAttribute });\r\n\r\n /**\r\n * Sidenav position.\r\n * Determines the position of the sidenav.\r\n * Can be either 'start', 'end', 'top', or 'bottom'.\r\n */\r\n public position = input<SidenavPosition>('start');\r\n\r\n /**\r\n * Sidenav size.\r\n * Determines the size of the sidenav. \r\n * Can be either 'small', 'medium', 'large', 'full', or a specific value. \r\n * If a specific value is provided, it will be used as the width/height of the sidenav.\r\n * @example\r\n * - 100, '300px', '50%', '50vh', 'small', 'full', ...\r\n */\r\n public size = input<SidenavSize>();\r\n\r\n /**\r\n * Whether the sidenav is fixed in the viewport.\r\n */\r\n public fixedInViewport = input(false, { transform: booleanAttribute });\r\n\r\n public elmentRef = inject(ElementRef);\r\n\r\n /**\r\n * Emits when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter<PointerEvent>();\r\n\r\n constructor() {\r\n effect(() => {\r\n var hasBackdrop = this.hasBackdrop();\r\n var mode = this.mode();\r\n var open = this.open();\r\n\r\n if (mode == 'over' && hasBackdrop && open) {\r\n this._createBackdrop();\r\n } else {\r\n this._destroyBackdrop();\r\n }\r\n });\r\n\r\n if (!this._isPlatformServer) {\r\n this._observeResize()\r\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\r\n .subscribe(entries => {\r\n this._sidenavContainer.changeDetectorRef.markForCheck();\r\n // console.log('Resized to:', entries[0].contentRect.width, entries[0].contentRect.height);\r\n });\r\n }\r\n }\r\n\r\n _getFixedSize(): string | undefined {\r\n let size = this.size();\r\n let t = typeof size;\r\n if (t == 'string') {\r\n return ['small', 'medium', 'large', 'full'].includes(size as string) ? undefined : size as string;\r\n } else if (t == 'number') {\r\n return `${size}px`;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n private _observeResize(): Observable<ResizeObserverEntry[]> {\r\n return new Observable(observer => {\r\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\r\n resizeObserver.observe(this._elementRef.nativeElement);\r\n return () => resizeObserver.disconnect();\r\n });\r\n }\r\n\r\n private _createBackdrop() {\r\n if (this._backdropRef) return;\r\n\r\n this._backdropRef = this._vcr.createComponent(BackdropComponent);\r\n const backdropElm = this._backdropRef.location.nativeElement;\r\n this._backdropRef.instance.fixed.set(this.fixedInViewport());\r\n if (this.zIndex() != undefined) {\r\n this._renderer.setStyle(backdropElm, 'z-index', this.zIndex());\r\n }\r\n this._backdropClickHandlerUnlisten = this._renderer.listen(backdropElm, 'click', (e) => {\r\n this.backdropClick.emit(e);\r\n });\r\n\r\n // Move backdrop element before Host element\r\n const hostElm = this.elmentRef.nativeElement;\r\n const parentElm = hostElm.parentNode;\r\n this._renderer.insertBefore(parentElm, backdropElm, hostElm);\r\n\r\n\r\n // disable body scroll when sidenav is open and fixedInViewport is true\r\n if (!this._isPlatformServer && this.fixedInViewport()) {\r\n const body = document.getElementsByTagName('body')[0];\r\n this._bodyOverflowStyle = body.style.overflow;\r\n body.style.overflow = 'hidden';\r\n this._renderer.setStyle(body, 'overflow', 'hidden');\r\n }\r\n }\r\n\r\n private _destroyBackdrop() {\r\n this._backdropClickHandlerUnlisten?.();\r\n this._backdropRef?.destroy();\r\n this._backdropClickHandlerUnlisten = undefined;\r\n this._backdropRef = undefined;\r\n\r\n // restore body scroll when sidenav is closed\r\n if (!this._isPlatformServer && this.fixedInViewport()) {\r\n const body = document.getElementsByTagName('body')[0];\r\n this._renderer.setStyle(body, 'overflow', this._bodyOverflowStyle);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyBackdrop();\r\n this._resizeSubscription?.unsubscribe();\r\n }\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, inject, Output, PLATFORM_ID, QueryList, ViewEncapsulation } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavPosition } from './types';\r\n\r\n/**\r\n * Sidenav container component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-container',\r\n templateUrl: './sidenav-container.component.html',\r\n styleUrls: ['./sidenav-container.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.padding-inline-start]\": \"_getPadding('start')\",\r\n \"[style.padding-inline-end]\": \"_getPadding('end')\",\r\n \"[style.padding-top]\": \"_getPadding('top')\",\r\n \"[style.padding-bottom]\": \"_getPadding('bottom')\",\r\n \"[class.ng0-sidenav-transition]\": \"_isTransitionEnabled\",\r\n \"[class.ng0-sidenav-content-hidden]\": \"!_canComputePadding()\",\r\n }\r\n})\r\nexport class SidenavContainerComponent implements AfterViewInit {\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n protected _isTransitionEnabled = false;\r\n @ContentChildren(SidenavComponent) protected _sidenavs!: QueryList<SidenavComponent>;\r\n\r\n /**\r\n * Emitted when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter();\r\n\r\n public changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n protected _getPadding(position: SidenavPosition) {\r\n let openSidenavs = this._sidenavs.filter(x => x.open() && x.mode() == 'push');\r\n let filteredSidenavs = openSidenavs.filter(x => x.position() == position);\r\n if(filteredSidenavs.length == 0) return undefined;\r\n\r\n if (this._isPlatformServer) {\r\n let hasDynamicSidenavs = openSidenavs.some(x => x._getFixedSize() == undefined);\r\n if (hasDynamicSidenavs) {\r\n // we cannot compute padding on the server\r\n return undefined;\r\n } else {\r\n let fixedSizes = filteredSidenavs.map(x => x._getFixedSize());\r\n return fixedSizes.length > 1 ? `max(${fixedSizes.join(', ')})` : fixedSizes[0];\r\n }\r\n } else {\r\n let horizontal = position == 'start' || position == 'end';\r\n let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.offsetWidth : x.elmentRef.nativeElement.offsetHeight);\r\n return `${Math.max(...sizes)}px`;\r\n }\r\n };\r\n\r\n ngAfterViewInit() {\r\n if (!this._isPlatformServer) {\r\n setTimeout(() => this._isTransitionEnabled = true);\r\n }\r\n }\r\n\r\n // In some modes the content is pushed based on the width of the opened sidenavs, however on\r\n // the server we can't measure the sidenav-container padding, so the padding is always zero. This can cause the\r\n // content to jump around when it's rendered on the server and hydrated on the client.\r\n // We avoid it by hiding the content on the initial render and then showing it once the sidenav\r\n // has been measured on the client.\r\n protected _canComputePadding() {\r\n if (this._isPlatformServer) {\r\n let hasDynamicSizenavs = this._sidenavs.some(x => x.open() && x.mode() == 'push' && x._getFixedSize() == undefined);\r\n return !hasDynamicSizenavs;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Sidenav content component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-content',\r\n template: `<ng-content></ng-content>`,\r\n styles: `ng0-sidenav-content {display: block}`,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class SidenavContentComponent {\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavContentComponent } from './sidenav-content.component';\r\n\r\n/**\r\n * Sidenav module\r\n */\r\n@NgModule({\r\n imports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ],\r\n exports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ]\r\n})\r\nexport class SidenavModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,66 +1,78 @@
1
1
  import * as i0 from '@angular/core';
2
- import { signal, Injectable, inject, ViewEncapsulation, Component, NgModule } from '@angular/core';
2
+ import { signal, Injectable, inject, TemplateRef, input, booleanAttribute, EventEmitter, Output, Directive, ChangeDetectorRef, ContentChildren, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
3
3
  import * as i2 from '@bootkit/ng0/components/sidenav';
4
4
  import { SidenavModule } from '@bootkit/ng0/components/sidenav';
5
5
  import * as i1 from '@angular/common';
6
6
  import { CommonModule } from '@angular/common';
7
+ import { Subject } from 'rxjs';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
+
10
+ class Layout1SecondarySidenav {
11
+ template;
12
+ zIndex;
13
+ css;
14
+ size;
15
+ position;
16
+ mode;
17
+ hasBackdrop;
18
+ closeOnBackdropClick;
19
+ constructor(template, options) {
20
+ this.template = template;
21
+ this.zIndex = signal(options?.zIndex, ...(ngDevMode ? [{ debugName: "zIndex" }] : []));
22
+ this.css = signal(options?.css, ...(ngDevMode ? [{ debugName: "css" }] : []));
23
+ this.size = signal(options?.size, ...(ngDevMode ? [{ debugName: "size" }] : []));
24
+ this.position = signal(options?.position ?? 'start', ...(ngDevMode ? [{ debugName: "position" }] : []));
25
+ this.mode = signal(options?.mode ?? 'over', ...(ngDevMode ? [{ debugName: "mode" }] : []));
26
+ this.hasBackdrop = signal(options?.hasBackdrop ?? true, ...(ngDevMode ? [{ debugName: "hasBackdrop" }] : []));
27
+ this.closeOnBackdropClick = signal(options?.closeOnBackdropClick ?? false, ...(ngDevMode ? [{ debugName: "closeOnBackdropClick" }] : []));
28
+ }
29
+ }
7
30
 
8
31
  /**
9
32
  * Service to manage the configuration and state of Layout1Component.
10
33
  */
11
34
  class Layout1Manager {
12
35
  _zIndexCounter = 1000;
36
+ _sidenavPushSubject = new Subject();
37
+ _sidenavPopSubject = new Subject();
38
+ _sidenavRemoveSubject = new Subject();
13
39
  /**
14
- * Whether the start sidenav is open.
40
+ * @private
15
41
  */
16
- startSidenavOpen = signal(true, ...(ngDevMode ? [{ debugName: "startSidenavOpen" }] : []));
42
+ sidenavPushNotification = this._sidenavPushSubject.asObservable();
17
43
  /**
18
- * The mode of the start sidenav.
44
+ * @private
19
45
  */
20
- startSidenavMode = signal('push', ...(ngDevMode ? [{ debugName: "startSidenavMode" }] : []));
46
+ sidenavPopNotification = this._sidenavPopSubject.asObservable();
21
47
  /**
22
- * Whether the start sidenav is fixed.
48
+ * @private
23
49
  */
24
- startSidenavFixed = signal(true, ...(ngDevMode ? [{ debugName: "startSidenavFixed" }] : []));
50
+ sidenavRemoveNotification = this._sidenavRemoveSubject.asObservable();
25
51
  /**
26
- * List of secondary sidenavs.
27
- */
28
- secondarySidenavs = signal([], ...(ngDevMode ? [{ debugName: "secondarySidenavs" }] : []));
29
- /**
30
- * Header mode.
31
- * 'default' - Header scrolls with the page.
32
- * 'sticky' - Header is fixed at the top.
33
- */
34
- headerMode = signal('sticky', ...(ngDevMode ? [{ debugName: "headerMode" }] : []));
35
- /**
36
- * Push a new secondary sidenav onto the stack.
37
- * @param template TemplateRef of the sidenav content.
38
- * @param options Options for the sidenav.
52
+ * Push a secondary sidenav.
53
+ * @param template
54
+ * @param options
55
+ * @returns
39
56
  */
40
57
  pushSidenav(template, options) {
41
- this.secondarySidenavs().push({
42
- template,
43
- size: options?.size,
44
- position: options?.position ?? 'end',
45
- zIndex: this._zIndexCounter++,
46
- closeByBackdropClick: options?.closeByBackdropClick ?? true,
47
- });
48
- this.secondarySidenavs.set([...this.secondarySidenavs()]);
58
+ options = options || {};
59
+ options.zIndex = options.zIndex ?? this._zIndexCounter++;
60
+ const sidenav = new Layout1SecondarySidenav(template, options);
61
+ this._sidenavPushSubject.next(sidenav);
62
+ return sidenav;
49
63
  }
50
64
  /**
51
- * Pop the topmost secondary sidenav from the stack.
52
- * @returns The popped secondary sidenav or undefined if the stack is empty.
65
+ * Pop the last secondary sidenav.
53
66
  */
54
67
  popSidenav() {
55
- let item = this.secondarySidenavs().pop();
56
- this.secondarySidenavs.set([...this.secondarySidenavs()]);
57
- return item;
68
+ this._sidenavPopSubject.next(undefined);
58
69
  }
59
70
  /**
60
- * Toggle the open state of the start sidenav.
71
+ * Remove a secondary sidenav.
72
+ * @param sidenav
61
73
  */
62
- toggleStartSidenav() {
63
- this.startSidenavOpen.update(x => !x);
74
+ removeSidenav(sidenav) {
75
+ this._sidenavRemoveSubject.next(sidenav);
64
76
  }
65
77
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Manager, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
66
78
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Manager, providedIn: 'root' });
@@ -73,35 +85,155 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
73
85
  }] });
74
86
 
75
87
  /**
76
- * Layout1Component
88
+ * Directive to define a sidenav within Layout1Component.
89
+ */
90
+ class Layout1SidenavDirective {
91
+ template = inject((TemplateRef));
92
+ open = input(true, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
93
+ mode = input('push', ...(ngDevMode ? [{ debugName: "mode" }] : []));
94
+ hasBackdrop = input(true, ...(ngDevMode ? [{ debugName: "hasBackdrop", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
95
+ zIndex = input(undefined, ...(ngDevMode ? [{ debugName: "zIndex" }] : []));
96
+ position = input('start', ...(ngDevMode ? [{ debugName: "position" }] : []));
97
+ size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
98
+ css = input(...(ngDevMode ? [undefined, { debugName: "css" }] : []));
99
+ backdropClick = new EventEmitter();
100
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1SidenavDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
101
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.9", type: Layout1SidenavDirective, isStandalone: true, selector: "[ng0Layout1Sidenav]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, css: { classPropertyName: "css", publicName: "css", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backdropClick: "backdropClick" }, exportAs: ["ng0Layout1Sidenav"], ngImport: i0 });
102
+ }
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1SidenavDirective, decorators: [{
104
+ type: Directive,
105
+ args: [{
106
+ selector: '[ng0Layout1Sidenav]',
107
+ exportAs: 'ng0Layout1Sidenav',
108
+ standalone: true,
109
+ }]
110
+ }], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], css: [{ type: i0.Input, args: [{ isSignal: true, alias: "css", required: false }] }], backdropClick: [{
111
+ type: Output
112
+ }] } });
113
+
114
+ /**
115
+ * Layout1 component that provides a layout with sidenavs.
77
116
  */
78
117
  class Layout1Component {
79
- config = inject(Layout1Manager);
118
+ _manager = inject(Layout1Manager);
119
+ _sidenavs;
120
+ _secondarySidenavs = signal([], ...(ngDevMode ? [{ debugName: "_secondarySidenavs" }] : []));
121
+ _openSecondarySidenavs = new Set();
122
+ _changeDetectorRef = inject(ChangeDetectorRef);
123
+ constructor() {
124
+ this._manager.sidenavPushNotification.pipe(takeUntilDestroyed()).subscribe(c => this.pushSidenav(c));
125
+ this._manager.sidenavRemoveNotification.pipe(takeUntilDestroyed()).subscribe(c => this.removeSidenav(c));
126
+ this._manager.sidenavPopNotification.pipe(takeUntilDestroyed()).subscribe(c => this.popSidenav());
127
+ }
128
+ /**
129
+ * Push a secondary sidenav.
130
+ * @param sidenav
131
+ */
132
+ pushSidenav(sidenav) {
133
+ this._secondarySidenavs().push(sidenav);
134
+ this._changeDetectorRef.markForCheck();
135
+ setTimeout(() => {
136
+ // Open the sidenav in the next tick to ensure it's 'transform' transition works correctly.
137
+ this._openSecondarySidenavs.add(sidenav);
138
+ this._changeDetectorRef.markForCheck();
139
+ });
140
+ }
141
+ /**
142
+ * Pop the last secondary sidenav.
143
+ */
144
+ popSidenav() {
145
+ const last = this._secondarySidenavs().at(-1);
146
+ if (last) {
147
+ this.removeSidenav(last);
148
+ }
149
+ }
150
+ /**
151
+ * Remove a secondary sidenav.
152
+ * @param sidenav
153
+ */
154
+ removeSidenav(sidenav) {
155
+ // Close the sidenav first. After the transition ends, it will be removed from DOM.
156
+ this._openSecondarySidenavs.delete(sidenav);
157
+ }
158
+ _onSecondarySidenavTransitionEnd(sidenav) {
159
+ if (!this._openSecondarySidenavs.has(sidenav)) {
160
+ // We should remove secondary sidenavs from DOM.
161
+ const index = this._secondarySidenavs().findIndex(x => x === sidenav);
162
+ this._secondarySidenavs().splice(index, 1);
163
+ }
164
+ }
80
165
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
81
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: Layout1Component, isStandalone: true, selector: "ng0-layout1", ngImport: i0, template: "<ng0-sidenav-container class=\"flex-fill\">\r\n <header class=\"ng0-layout1-header\"\r\n [class.ng0-layout1-header-sticky]=\"config.headerMode() == 'sticky'\">\r\n <ng-content select=\"header\" />\r\n </header>\r\n\r\n <main>\r\n <ng-content select=\"content\" />\r\n </main>\r\n\r\n <ng0-sidenav class=\"ng0-layout1-start-sidenav\"\r\n [size]=\"250\"\r\n [open]=\"config.startSidenavOpen()\"\r\n [mode]=\"config.startSidenavMode()\"\r\n [hasBackdrop]=\"true\"\r\n [zIndex]=\"10\"\r\n [fixedInViewport]=\"config.startSidenavFixed()\"\r\n (backdropClick)=\"config.startSidenavOpen.set(false)\">\r\n <ng-content select=\"start-sidenav\" />\r\n </ng0-sidenav>\r\n\r\n @for (sidenav of config.secondarySidenavs(); track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-secondary-sidenav\"\r\n open=\"true\"\r\n mode=\"over\"\r\n [size]=\"sidenav.size\"\r\n [hasBackdrop]=\"true\"\r\n [position]=\"sidenav.position\"\r\n [fixedInViewport]=\"true\"\r\n [zIndex]=\"sidenav.zIndex\"\r\n (backdropClick)=\"sidenav.closeByBackdropClick ? config.popSidenav() : null\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n</ng0-sidenav-container>", styles: ["ng0-layout1{display:flex;flex-direction:column;min-height:100vh;background-color:color-mix(in srgb,var(--bs-primary) 10%,white)}ng0-layout1 .ng0-layout1-header{background-color:#fff;z-index:10}ng0-layout1 .ng0-layout1-header.ng0-layout1-header-sticky{position:sticky;top:0}ng0-layout1 ng0-sidenav-container{overflow-x:unset!important;clip-path:inset(0)}ng0-layout1 ng0-sidenav-container ng0-sidenav{background-color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SidenavModule }, { kind: "component", type: i2.SidenavContainerComponent, selector: "ng0-sidenav-container", outputs: ["backdropClick"] }, { kind: "component", type: i2.SidenavComponent, selector: "ng0-sidenav", inputs: ["open", "mode", "hasBackdrop", "zIndex", "position", "size", "fixedInViewport"], outputs: ["backdropClick"] }], encapsulation: i0.ViewEncapsulation.None });
166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: Layout1Component, isStandalone: true, selector: "ng0-layout1", queries: [{ propertyName: "_sidenavs", predicate: Layout1SidenavDirective }], ngImport: i0, template: "<ng0-sidenav-container>\r\n <ng0-sidenav-content>\r\n <ng-content select=\"ng0-layout1-header\" />\r\n <ng-content select=\"ng0-layout1-content\" />\r\n </ng0-sidenav-content>\r\n\r\n @for (sidenav of _sidenavs; track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-sidenav\"\r\n [size]=\"sidenav.size()\"\r\n [open]=\"sidenav.open()\"\r\n [mode]=\"sidenav.mode()\"\r\n [hasBackdrop]=\"sidenav.hasBackdrop()\"\r\n [position]=\"sidenav.position()\"\r\n [zIndex]=\"sidenav.zIndex()\"\r\n [fixedInViewport]=\"true\"\r\n [ngClass]=\"sidenav.css()\"\r\n (backdropClick)=\"sidenav.backdropClick.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n\r\n @for (sidenav of _secondarySidenavs(); track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-secondary-sidenav\"\r\n [size]=\"sidenav.size()\"\r\n [open]=\"_openSecondarySidenavs.has(sidenav)\"\r\n [mode]=\"sidenav.mode()\"\r\n [hasBackdrop]=\"sidenav.hasBackdrop()\"\r\n [position]=\"sidenav.position()\"\r\n [zIndex]=\"sidenav.zIndex()\"\r\n [fixedInViewport]=\"true\"\r\n [ngClass]=\"sidenav.css()\"\r\n (transitionEnd)=\"_onSecondarySidenavTransitionEnd(sidenav)\"\r\n (backdropClick)=\"sidenav.closeOnBackdropClick() ? removeSidenav(sidenav) : null\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n\r\n</ng0-sidenav-container>", styles: ["ng0-layout1{display:flex;flex-direction:column;min-height:100vh;width:100%}ng0-layout1 ng0-layout1-header{display:block;z-index:1}ng0-layout1 ng0-layout1-header.ng0-layout1-header-sticky{position:sticky;top:0}ng0-layout1 ng0-layout1-content{display:block}ng0-layout1 ng0-sidenav-container{overflow:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: SidenavModule }, { kind: "component", type: i2.SidenavContainerComponent, selector: "ng0-sidenav-container", outputs: ["backdropClick"] }, { kind: "component", type: i2.SidenavComponent, selector: "ng0-sidenav", inputs: ["open", "mode", "hasBackdrop", "zIndex", "position", "size", "fixedInViewport"], outputs: ["backdropClick"] }, { kind: "component", type: i2.SidenavContentComponent, selector: "ng0-sidenav-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
82
167
  }
83
168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Component, decorators: [{
84
169
  type: Component,
85
- args: [{ selector: 'ng0-layout1', encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, SidenavModule], template: "<ng0-sidenav-container class=\"flex-fill\">\r\n <header class=\"ng0-layout1-header\"\r\n [class.ng0-layout1-header-sticky]=\"config.headerMode() == 'sticky'\">\r\n <ng-content select=\"header\" />\r\n </header>\r\n\r\n <main>\r\n <ng-content select=\"content\" />\r\n </main>\r\n\r\n <ng0-sidenav class=\"ng0-layout1-start-sidenav\"\r\n [size]=\"250\"\r\n [open]=\"config.startSidenavOpen()\"\r\n [mode]=\"config.startSidenavMode()\"\r\n [hasBackdrop]=\"true\"\r\n [zIndex]=\"10\"\r\n [fixedInViewport]=\"config.startSidenavFixed()\"\r\n (backdropClick)=\"config.startSidenavOpen.set(false)\">\r\n <ng-content select=\"start-sidenav\" />\r\n </ng0-sidenav>\r\n\r\n @for (sidenav of config.secondarySidenavs(); track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-secondary-sidenav\"\r\n open=\"true\"\r\n mode=\"over\"\r\n [size]=\"sidenav.size\"\r\n [hasBackdrop]=\"true\"\r\n [position]=\"sidenav.position\"\r\n [fixedInViewport]=\"true\"\r\n [zIndex]=\"sidenav.zIndex\"\r\n (backdropClick)=\"sidenav.closeByBackdropClick ? config.popSidenav() : null\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n</ng0-sidenav-container>", styles: ["ng0-layout1{display:flex;flex-direction:column;min-height:100vh;background-color:color-mix(in srgb,var(--bs-primary) 10%,white)}ng0-layout1 .ng0-layout1-header{background-color:#fff;z-index:10}ng0-layout1 .ng0-layout1-header.ng0-layout1-header-sticky{position:sticky;top:0}ng0-layout1 ng0-sidenav-container{overflow-x:unset!important;clip-path:inset(0)}ng0-layout1 ng0-sidenav-container ng0-sidenav{background-color:#fff}\n"] }]
170
+ args: [{ selector: 'ng0-layout1', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, SidenavModule], template: "<ng0-sidenav-container>\r\n <ng0-sidenav-content>\r\n <ng-content select=\"ng0-layout1-header\" />\r\n <ng-content select=\"ng0-layout1-content\" />\r\n </ng0-sidenav-content>\r\n\r\n @for (sidenav of _sidenavs; track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-sidenav\"\r\n [size]=\"sidenav.size()\"\r\n [open]=\"sidenav.open()\"\r\n [mode]=\"sidenav.mode()\"\r\n [hasBackdrop]=\"sidenav.hasBackdrop()\"\r\n [position]=\"sidenav.position()\"\r\n [zIndex]=\"sidenav.zIndex()\"\r\n [fixedInViewport]=\"true\"\r\n [ngClass]=\"sidenav.css()\"\r\n (backdropClick)=\"sidenav.backdropClick.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n\r\n @for (sidenav of _secondarySidenavs(); track $index) {\r\n <ng0-sidenav class=\"ng0-layout1-secondary-sidenav\"\r\n [size]=\"sidenav.size()\"\r\n [open]=\"_openSecondarySidenavs.has(sidenav)\"\r\n [mode]=\"sidenav.mode()\"\r\n [hasBackdrop]=\"sidenav.hasBackdrop()\"\r\n [position]=\"sidenav.position()\"\r\n [zIndex]=\"sidenav.zIndex()\"\r\n [fixedInViewport]=\"true\"\r\n [ngClass]=\"sidenav.css()\"\r\n (transitionEnd)=\"_onSecondarySidenavTransitionEnd(sidenav)\"\r\n (backdropClick)=\"sidenav.closeOnBackdropClick() ? removeSidenav(sidenav) : null\">\r\n <ng-container *ngTemplateOutlet=\"sidenav.template\" />\r\n </ng0-sidenav>\r\n }\r\n\r\n</ng0-sidenav-container>", styles: ["ng0-layout1{display:flex;flex-direction:column;min-height:100vh;width:100%}ng0-layout1 ng0-layout1-header{display:block;z-index:1}ng0-layout1 ng0-layout1-header.ng0-layout1-header-sticky{position:sticky;top:0}ng0-layout1 ng0-layout1-content{display:block}ng0-layout1 ng0-sidenav-container{overflow:unset!important}\n"] }]
171
+ }], ctorParameters: () => [], propDecorators: { _sidenavs: [{
172
+ type: ContentChildren,
173
+ args: [Layout1SidenavDirective]
174
+ }] } });
175
+
176
+ /**
177
+ * Layout1 header component.
178
+ */
179
+ class Layout1HeaderComponent {
180
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: Layout1HeaderComponent, isStandalone: true, selector: "ng0-layout1-header", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
182
+ }
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1HeaderComponent, decorators: [{
184
+ type: Component,
185
+ args: [{
186
+ selector: 'ng0-layout1-header',
187
+ template: `<ng-content></ng-content>`,
188
+ encapsulation: ViewEncapsulation.None,
189
+ changeDetection: ChangeDetectionStrategy.OnPush,
190
+ standalone: true,
191
+ }]
192
+ }] });
193
+
194
+ /**
195
+ * Layout1 content component.
196
+ */
197
+ class Layout1ContentComponent {
198
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1ContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
199
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: Layout1ContentComponent, isStandalone: true, selector: "ng0-layout1-content", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
200
+ }
201
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1ContentComponent, decorators: [{
202
+ type: Component,
203
+ args: [{
204
+ selector: 'ng0-layout1-content',
205
+ template: `<ng-content></ng-content>`,
206
+ encapsulation: ViewEncapsulation.None,
207
+ changeDetection: ChangeDetectionStrategy.OnPush,
208
+ standalone: true,
209
+ }]
86
210
  }] });
87
211
 
212
+ const items = [
213
+ Layout1Component,
214
+ Layout1SidenavDirective,
215
+ Layout1HeaderComponent,
216
+ Layout1ContentComponent
217
+ ];
88
218
  /**
89
219
  * Layout1Module
90
220
  */
91
221
  class Layout1Module {
92
222
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
93
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: Layout1Module, imports: [Layout1Component], exports: [Layout1Component] });
223
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: Layout1Module, imports: [Layout1Component,
224
+ Layout1SidenavDirective,
225
+ Layout1HeaderComponent,
226
+ Layout1ContentComponent], exports: [Layout1Component,
227
+ Layout1SidenavDirective,
228
+ Layout1HeaderComponent,
229
+ Layout1ContentComponent] });
94
230
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Module, imports: [Layout1Component] });
95
231
  }
96
232
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: Layout1Module, decorators: [{
97
233
  type: NgModule,
98
234
  args: [{
99
- imports: [
100
- Layout1Component
101
- ],
102
- exports: [
103
- Layout1Component
104
- ]
235
+ imports: items,
236
+ exports: items
105
237
  }]
106
238
  }] });
107
239
 
@@ -109,5 +241,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
109
241
  * Generated bundle index. Do not edit.
110
242
  */
111
243
 
112
- export { Layout1Component, Layout1Manager, Layout1Module };
244
+ export { Layout1Component, Layout1ContentComponent, Layout1HeaderComponent, Layout1Manager, Layout1Module, Layout1SecondarySidenav, Layout1SidenavDirective };
113
245
  //# sourceMappingURL=bootkit-ng0-layouts-layout1.mjs.map