@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
915 lines • 92 kB
JavaScript
import { __decorate, __metadata, __param } from "tslib";
import { AfterContentInit, Component, ContentChild, ElementRef, EventEmitter, HostBinding, Inject, Input, OnChanges, OnDestroy, OnInit, Optional, Output, SimpleChange, ViewChild, Renderer2 } from '@angular/core';
import { fromEvent, interval } from 'rxjs';
import { debounce } from 'rxjs/operators';
import { IgxNavigationService, IToggleView } from '../core/navigation';
import { HammerGesturesManager } from '../core/touch';
import { IgxNavDrawerMiniTemplateDirective, IgxNavDrawerTemplateDirective } from './navigation-drawer.directives';
import { PlatformUtil } from '../core/utils';
var NEXT_ID = 0;
/**
* **Ignite UI for Angular Navigation Drawer** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/navdrawer.html)
*
* The Ignite UI Navigation Drawer is a collapsible side navigation container commonly used in combination with the Navbar.
*
* Example:
* ```html
* <igx-nav-drawer id="navigation" [isOpen]="true">
* <ng-template igxDrawer>
* <nav>
* <span igxDrawerItem [isHeader]="true">Email</span>
* <span igxDrawerItem igxRipple>Inbox</span>
* <span igxDrawerItem igxRipple>Deleted</span>
* <span igxDrawerItem igxRipple>Sent</span>
* </nav>
* </ng-template>
* </igx-nav-drawer>
* ```
*/
var IgxNavigationDrawerComponent = /** @class */ (function () {
function IgxNavigationDrawerComponent(elementRef, _state, renderer, _touchManager, platformUtil) {
var _this = this;
this.elementRef = elementRef;
this._state = _state;
this.renderer = renderer;
this._touchManager = _touchManager;
this.platformUtil = platformUtil;
this._isOpen = false;
this.cssClass = 'igx-nav-drawer';
/**
* ID of the component
*
* ```typescript
* // get
* let myNavDrawerId = this.navdrawer.id;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer id='navdrawer'></igx-nav-drawer>
* ```
*/
this.id = "igx-nav-drawer-" + NEXT_ID++;
/**
* Position of the Navigation Drawer. Can be "left"(default) or "right".
*
* ```typescript
* // get
* let myNavDrawerPosition = this.navdrawer.position;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [position]="'left'"></igx-nav-drawer>
* ```
*/
this.position = 'left';
/**
* Enables the use of touch gestures to manipulate the drawer:
* - swipe/pan from edge to open, swipe-toggle and pan-drag.
*
* ```typescript
* // get
* let gesturesEnabled = this.navdrawer.enableGestures;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [enableGestures]='true'></igx-nav-drawer>
* ```
*/
this.enableGestures = true;
/**
*@hidden
*/
this.isOpenChange = new EventEmitter();
/**
* When pinned the drawer is relatively positioned instead of sitting above content.
* May require additional layout styling.
*
* ```typescript
* // get
* let navDrawerIsPinned = this.navdrawer.pin;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [pin]='false'></igx-nav-drawer>
* ```
*/
this.pin = false;
/**
* Minimum device width required for automatic pin to be toggled.
* Default is 1024, can be set to a falsy value to disable this behavior.
*
* ```typescript
* // get
* let navDrawerPinTreshold = this.navdrawer.pinThreshold;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [pinTreshold]='1024'></igx-nav-drawer>
* ```
*/
this.pinThreshold = 1024;
/**
* Width of the drawer in its open state. Defaults to "280px".
*
* ```typescript
* // get
* let navDrawerWidth = this.navdrawer.width;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [width]="'228px'"></igx-nav-drawer>
* ```
*/
this.width = '280px';
/**
* Width of the drawer in its mini state. Defaults to 68px.
*
* ```typescript
* // get
* let navDrawerMiniWidth = this.navdrawer.miniWidth;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [miniWidth]="'34px'"></igx-nav-drawer>
* ```
*/
this.miniWidth = '68px';
/**
* Pinned state change output for two-way binding.
*
* ```html
* <igx-nav-drawer [(pin)]='isPinned'></igx-nav-drawer>
* ```
*/
this.pinChange = new EventEmitter(true);
/**
* Event fired as the Navigation Drawer is about to open.
*
* ```html
* <igx-nav-drawer (opening)='onOpening()'></igx-nav-drawer>
* ```
*/
this.opening = new EventEmitter();
/**
* Event fired when the Navigation Drawer has opened.
*
* ```html
* <igx-nav-drawer (opened)='onOpened()'></igx-nav-drawer>
* ```
*/
this.opened = new EventEmitter();
/**
* Event fired as the Navigation Drawer is about to close.
*
* ```html
* <igx-nav-drawer (closing)='onClosing()'></igx-nav-drawer>
* ```
*/
this.closing = new EventEmitter();
/**
* Event fired when the Navigation Drawer has closed.
*
* ```html
* <igx-nav-drawer (closed)='onClosed()'></igx-nav-drawer>
* ```
*/
this.closed = new EventEmitter();
this._gesturesAttached = false;
this._widthCache = { width: null, miniWidth: null, windowWidth: null };
this.css = {
drawer: 'igx-nav-drawer__aside',
mini: 'igx-nav-drawer__aside--mini',
overlay: 'igx-nav-drawer__overlay',
styleDummy: 'igx-nav-drawer__style-dummy'
};
/** Pan animation properties */
this._panning = false;
this._maxEdgeZone = 50;
this.checkPinThreshold = function (evt) {
if (!_this.platformUtil.isBrowser) {
return;
}
var windowWidth;
if (_this.pinThreshold) {
windowWidth = _this.getWindowWidth();
if (evt && _this._widthCache.windowWidth === windowWidth) {
return;
}
_this._widthCache.windowWidth = windowWidth;
if (!_this.pin && windowWidth >= _this.pinThreshold) {
_this.pin = true;
_this.pinChange.emit(true);
}
else if (_this.pin && windowWidth < _this.pinThreshold) {
_this.pin = false;
_this.pinChange.emit(false);
}
}
};
this.swipe = function (evt) {
// TODO: Could also force input type: http://stackoverflow.com/a/27108052
if (!_this.enableGestures || evt.pointerType !== 'touch') {
return;
}
// HammerJS swipe is horizontal-only by default, don't check deltaY
var deltaX;
var startPosition;
if (_this.position === 'right') {
// when on the right use inverse of deltaX
deltaX = -evt.deltaX;
startPosition = _this.getWindowWidth() - (evt.center.x + evt.distance);
}
else {
deltaX = evt.deltaX;
startPosition = evt.center.x - evt.distance;
}
// only accept closing swipe (ignoring minEdgeZone) when the drawer is expanded:
if ((_this.isOpen && deltaX < 0) ||
// positive deltaX from the edge:
(deltaX > 0 && startPosition < _this.maxEdgeZone)) {
_this.toggle();
}
};
this.panstart = function (evt) {
if (!_this.enableGestures || _this.pin || evt.pointerType !== 'touch') {
return;
}
var startPosition = _this.position === 'right' ? _this.getWindowWidth() - (evt.center.x + evt.distance)
: evt.center.x - evt.distance;
// cache width during animation, flag to allow further handling
if (_this.isOpen || (startPosition < _this.maxEdgeZone)) {
_this._panning = true;
_this._panStartWidth = _this.getExpectedWidth(!_this.isOpen);
_this._panLimit = _this.getExpectedWidth(_this.isOpen);
_this.renderer.addClass(_this.overlay, 'panning');
_this.renderer.addClass(_this.drawer, 'panning');
}
};
this.pan = function (evt) {
// TODO: input.deltaX = prevDelta.x + (center.x - offset.x);
// get actual delta (not total session one) from event?
// pan WILL also fire after a full swipe, only resize on flag
if (!_this._panning) {
return;
}
var right = _this.position === 'right';
// when on the right use inverse of deltaX
var deltaX = right ? -evt.deltaX : evt.deltaX;
var visibleWidth;
var newX;
var percent;
visibleWidth = _this._panStartWidth + deltaX;
if (_this.isOpen && deltaX < 0) {
// when visibleWidth hits limit - stop animating
if (visibleWidth <= _this._panLimit) {
return;
}
if (_this.hasAnimateWidth) {
percent = (visibleWidth - _this._panLimit) / (_this._panStartWidth - _this._panLimit);
newX = visibleWidth;
}
else {
percent = visibleWidth / _this._panStartWidth;
newX = evt.deltaX;
}
_this.setXSize(newX, percent.toPrecision(2));
}
else if (!_this.isOpen && deltaX > 0) {
// when visibleWidth hits limit - stop animating
if (visibleWidth >= _this._panLimit) {
return;
}
if (_this.hasAnimateWidth) {
percent = (visibleWidth - _this._panStartWidth) / (_this._panLimit - _this._panStartWidth);
newX = visibleWidth;
}
else {
percent = visibleWidth / _this._panLimit;
newX = (_this._panLimit - visibleWidth) * (right ? 1 : -1);
}
_this.setXSize(newX, percent.toPrecision(2));
}
};
this.panEnd = function (evt) {
if (_this._panning) {
var deltaX = _this.position === 'right' ? -evt.deltaX : evt.deltaX;
var visibleWidth = _this._panStartWidth + deltaX;
_this.resetPan();
// check if pan brought the drawer to 50%
if (_this.isOpen && visibleWidth <= _this._panStartWidth / 2) {
_this.close();
}
else if (!_this.isOpen && visibleWidth >= _this._panLimit / 2) {
_this.open();
}
_this._panStartWidth = null;
}
};
this.toggleOpenedEvent = function (evt) {
_this.elementRef.nativeElement.removeEventListener('transitionend', _this.toggleOpenedEvent, false);
_this.opened.emit();
};
this.toggleClosedEvent = function (evt) {
_this.elementRef.nativeElement.removeEventListener('transitionend', _this.toggleClosedEvent, false);
_this.closed.emit();
};
}
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "isOpen", {
/**
* State of the drawer.
*
* ```typescript
* // get
* let navDrawerIsOpen = this.navdrawer.isOpen;
* ```
*
* ```html
* <!--set-->
* <igx-nav-drawer [isOpen]='false'></igx-nav-drawer>
* ```
*
* Two-way data binding.
* ```html
* <!--set-->
* <igx-nav-drawer [(isOpen)]='model.isOpen'></igx-nav-drawer>
* ```
*/
get: function () {
return this._isOpen;
},
set: function (value) {
this._isOpen = value;
this.isOpenChange.emit(this._isOpen);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "element", {
/**
* Returns nativeElement of the component.
*
* @hidden
*/
get: function () {
return this.elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "template", {
/**
* @hidden
*/
get: function () {
if (this.miniTemplate && !this.isOpen) {
return this.miniTemplate.template;
}
else if (this.contentTemplate) {
return this.contentTemplate.template;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "miniTemplate", {
/**
* @hidden
*/
get: function () {
return this._miniTemplate;
},
/**
* @hidden
*/
set: function (v) {
if (!this.isOpen) {
this.setDrawerWidth(v ? this.miniWidth : '');
}
this._miniTemplate = v;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "flexWidth", {
/**
* @hidden
*/
get: function () {
if (!this.pin) {
return '0px';
}
if (this.isOpen) {
return this.width;
}
if (this.miniTemplate && this.miniWidth) {
return this.miniWidth;
}
return '0px';
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "isPinnedRight", {
/** @hidden */
get: function () {
return this.pin && this.position === 'right' ? '1' : '0';
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "drawer", {
/**
* @hidden
*/
get: function () {
return this._drawer.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "overlay", {
/**
* @hidden
*/
get: function () {
return this._overlay.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "styleDummy", {
/**
* @hidden
*/
get: function () {
return this._styleDummy.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "hasAnimateWidth", {
/**
* Property to decide whether to change width or translate the drawer from pan gesture.
*
* @hidden
*/
get: function () {
return this.pin || !!this.miniTemplate;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "maxEdgeZone", {
/**
* Used for touch gestures (swipe and pan).
* Defaults to 50 (in px) and is extended to at least 110% of the mini template width if available.
*
* @hidden
*/
get: function () {
return this._maxEdgeZone;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "expectedWidth", {
/**
* Gets the Drawer width for specific state.
* Will attempt to evaluate requested state and cache.
*
*
* @hidden
*/
get: function () {
return this.getExpectedWidth(false);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "expectedMiniWidth", {
/**
* Get the Drawer mini width for specific state.
* Will attempt to evaluate requested state and cache.
*
* @hidden
*/
get: function () {
return this.getExpectedWidth(true);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "touchManager", {
/**
* @hidden
*/
get: function () {
return this._touchManager;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxNavigationDrawerComponent.prototype, "state", {
/**
* Exposes optional navigation service
*
* @hidden
*/
get: function () {
return this._state;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxNavigationDrawerComponent.prototype.ngOnInit = function () {
// DOM and @Input()-s initialized
if (this._state) {
this._state.add(this.id, this);
}
if (this.isOpen) {
this.setDrawerWidth(this.width);
}
};
/**
* @hidden
*/
IgxNavigationDrawerComponent.prototype.ngAfterContentInit = function () {
// wait for template and ng-content to be ready
this.updateEdgeZone();
this.checkPinThreshold();
this.ensureEvents();
// TODO: apply platform-safe Ruler from http://plnkr.co/edit/81nWDyreYMzkunihfRgX?p=preview
// (https://github.com/angular/angular/issues/6515), blocked by https://github.com/angular/angular/issues/6904
};
/**
* @hidden
*/
IgxNavigationDrawerComponent.prototype.ngOnDestroy = function () {
this._touchManager.destroy();
if (this._state) {
this._state.remove(this.id);
}
if (this._resizeObserver) {
this._resizeObserver.unsubscribe();
}
};
/**
* @hidden
*/
IgxNavigationDrawerComponent.prototype.ngOnChanges = function (changes) {
// simple settings can come from attribute set (rather than binding), make sure boolean props are converted
if (changes.enableGestures && changes.enableGestures.currentValue !== undefined) {
this.enableGestures = !!(this.enableGestures && this.enableGestures.toString() === 'true');
this.ensureEvents();
}
if (changes.pin && changes.pin.currentValue !== undefined) {
this.pin = !!(this.pin && this.pin.toString() === 'true');
if (this.pin) {
this._touchManager.destroy();
this._gesturesAttached = false;
}
else {
this.ensureEvents();
}
}
if (changes.pinThreshold) {
if (this.pinThreshold) {
this.ensureEvents();
this.checkPinThreshold();
}
}
if (changes.width && this.isOpen) {
this.setDrawerWidth(changes.width.currentValue);
}
if (changes.miniWidth) {
if (!this.isOpen) {
this.setDrawerWidth(changes.miniWidth.currentValue);
}
this.updateEdgeZone();
}
};
/**
* Toggle the open state of the Navigation Drawer.
*
* ```typescript
* this.navdrawer.toggle();
* ```
*/
IgxNavigationDrawerComponent.prototype.toggle = function () {
if (this.isOpen) {
this.close();
}
else {
this.open();
}
};
/**
* Open the Navigation Drawer. Has no effect if already opened.
*
* ```typescript
* this.navdrawer.open();
* ```
*/
IgxNavigationDrawerComponent.prototype.open = function () {
if (this._panning) {
this.resetPan();
}
if (this.isOpen) {
return;
}
this.opening.emit();
this.isOpen = true;
// TODO: Switch to animate API when available
// var animationCss = this.animate.css();
// animationCss
// .setStyles({'width':'50px'}, {'width':'400px'})
// .start(this.elementRef.nativeElement)
// .onComplete(() => animationCss.setToStyles({'width':'auto'}).start(this.elementRef.nativeElement));
this.elementRef.nativeElement.addEventListener('transitionend', this.toggleOpenedEvent, false);
this.setDrawerWidth(this.width);
};
/**
* Close the Navigation Drawer. Has no effect if already closed.
*
* ```typescript
* this.navdrawer.close();
* ```
*/
IgxNavigationDrawerComponent.prototype.close = function () {
if (this._panning) {
this.resetPan();
}
if (!this.isOpen) {
return;
}
this.closing.emit();
this.isOpen = false;
this.setDrawerWidth(this.miniTemplate ? this.miniWidth : '');
this.elementRef.nativeElement.addEventListener('transitionend', this.toggleClosedEvent, false);
};
/**
* @hidden
*/
IgxNavigationDrawerComponent.prototype.set_maxEdgeZone = function (value) {
this._maxEdgeZone = value;
};
/**
* Get the Drawer width for specific state. Will attempt to evaluate requested state and cache.
*
* @hidden
* @param [mini] - Request mini width instead
*/
IgxNavigationDrawerComponent.prototype.getExpectedWidth = function (mini) {
if (mini) {
if (!this.miniTemplate) {
return 0;
}
if (this.miniWidth) {
return parseFloat(this.miniWidth);
}
else {
// if (!this.isOpen) { // This WON'T work due to transition timings...
// return this.elementRef.nativeElement.children[1].offsetWidth;
// } else {
if (this._widthCache.miniWidth === null) {
// force class for width calc. TODO?
// force class for width calc. TODO?
this.renderer.addClass(this.styleDummy, this.css.drawer);
this.renderer.addClass(this.styleDummy, this.css.mini);
this._widthCache.miniWidth = this.styleDummy.offsetWidth;
this.renderer.removeClass(this.styleDummy, this.css.drawer);
this.renderer.removeClass(this.styleDummy, this.css.mini);
}
return this._widthCache.miniWidth;
}
}
else {
if (this.width) {
return parseFloat(this.width);
}
else {
if (this._widthCache.width === null) {
// force class for width calc. TODO?
// force class for width calc. TODO?
this.renderer.addClass(this.styleDummy, this.css.drawer);
this._widthCache.width = this.styleDummy.offsetWidth;
this.renderer.removeClass(this.styleDummy, this.css.drawer);
}
return this._widthCache.width;
}
}
};
IgxNavigationDrawerComponent.prototype.getWindowWidth = function () {
return (window.innerWidth > 0) ? window.innerWidth : screen.width;
};
/**
* Sets the drawer width.
*/
IgxNavigationDrawerComponent.prototype.setDrawerWidth = function (width) {
var _this = this;
if (this.platformUtil.isBrowser) {
requestAnimationFrame(function () {
if (_this.drawer) {
_this.renderer.setStyle(_this.drawer, 'width', width);
}
});
}
else {
this.renderer.setStyle(this.drawer, 'width', width);
}
};
/**
* Get current Drawer width.
*/
IgxNavigationDrawerComponent.prototype.getDrawerWidth = function () {
return this.drawer.offsetWidth;
};
IgxNavigationDrawerComponent.prototype.ensureEvents = function () {
var _this = this;
// set listeners for swipe/pan only if needed, but just once
if (this.enableGestures && !this.pin && !this._gesturesAttached) {
// Built-in manager handler(L20887) causes endless loop and max stack exception.
// https://github.com/angular/angular/issues/6993
// Use ours for now (until beta.10):
// this.renderer.listen(document, "swipe", this.swipe);
this._touchManager.addGlobalEventListener('document', 'swipe', this.swipe);
this._gesturesAttached = true;
// this.renderer.listen(document, "panstart", this.panstart);
// this.renderer.listen(document, "pan", this.pan);
this._touchManager.addGlobalEventListener('document', 'panstart', this.panstart);
this._touchManager.addGlobalEventListener('document', 'panmove', this.pan);
this._touchManager.addGlobalEventListener('document', 'panend', this.panEnd);
}
if (!this._resizeObserver && this.platformUtil.isBrowser) {
this._resizeObserver = fromEvent(window, 'resize').pipe(debounce(function () { return interval(150); }))
.subscribe(function (value) {
_this.checkPinThreshold(value);
});
}
};
IgxNavigationDrawerComponent.prototype.updateEdgeZone = function () {
var maxValue;
if (this.miniTemplate) {
maxValue = Math.max(this._maxEdgeZone, this.getExpectedWidth(true) * 1.1);
this.set_maxEdgeZone(maxValue);
}
};
IgxNavigationDrawerComponent.prototype.resetPan = function () {
this._panning = false;
/* styles fail to apply when set on parent due to extra attributes, prob ng bug */
/* styles fail to apply when set on parent due to extra attributes, prob ng bug */
this.renderer.removeClass(this.overlay, 'panning');
this.renderer.removeClass(this.drawer, 'panning');
this.setXSize(0, '');
};
/**
* Sets the absolute position or width in case the drawer doesn't change position.
* @param x the number pixels to translate on the X axis or the width to set. 0 width will clear the style instead.
* @param opacity optional value to apply to the overlay
*/
IgxNavigationDrawerComponent.prototype.setXSize = function (x, opacity) {
var _this = this;
// Angular polyfills patches window.requestAnimationFrame, but switch to DomAdapter API (TODO)
window.requestAnimationFrame(function () {
if (_this.hasAnimateWidth) {
_this.renderer.setStyle(_this.drawer, 'width', x ? Math.abs(x) + 'px' : '');
}
else {
_this.renderer.setStyle(_this.drawer, 'transform', x ? 'translate3d(' + x + 'px,0,0)' : '');
_this.renderer.setStyle(_this.drawer, '-webkit-transform', x ? 'translate3d(' + x + 'px,0,0)' : '');
}
if (opacity !== undefined) {
_this.renderer.setStyle(_this.overlay, 'opacity', opacity);
}
});
};
IgxNavigationDrawerComponent.ctorParameters = function () { return [
{ type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] },
{ type: IgxNavigationService, decorators: [{ type: Optional }] },
{ type: Renderer2 },
{ type: HammerGesturesManager },
{ type: PlatformUtil }
]; };
__decorate([
HostBinding('class'),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "cssClass", void 0);
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "id", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "position", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "enableGestures", void 0);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxNavigationDrawerComponent.prototype, "isOpen", null);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "isOpenChange", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "pin", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "pinThreshold", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "width", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "miniWidth", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "pinChange", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "opening", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "opened", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "closing", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxNavigationDrawerComponent.prototype, "closed", void 0);
__decorate([
ContentChild(IgxNavDrawerMiniTemplateDirective, { read: IgxNavDrawerMiniTemplateDirective }),
__metadata("design:type", IgxNavDrawerMiniTemplateDirective),
__metadata("design:paramtypes", [IgxNavDrawerMiniTemplateDirective])
], IgxNavigationDrawerComponent.prototype, "miniTemplate", null);
__decorate([
ContentChild(IgxNavDrawerTemplateDirective, { read: IgxNavDrawerTemplateDirective }),
__metadata("design:type", IgxNavDrawerTemplateDirective)
], IgxNavigationDrawerComponent.prototype, "contentTemplate", void 0);
__decorate([
HostBinding('style.flexBasis'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxNavigationDrawerComponent.prototype, "flexWidth", null);
__decorate([
HostBinding('style.order'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxNavigationDrawerComponent.prototype, "isPinnedRight", null);
__decorate([
ViewChild('aside', { static: true }),
__metadata("design:type", ElementRef)
], IgxNavigationDrawerComponent.prototype, "_drawer", void 0);
__decorate([
ViewChild('overlay', { static: true }),
__metadata("design:type", ElementRef)
], IgxNavigationDrawerComponent.prototype, "_overlay", void 0);
__decorate([
ViewChild('dummy', { static: true }),
__metadata("design:type", ElementRef)
], IgxNavigationDrawerComponent.prototype, "_styleDummy", void 0);
IgxNavigationDrawerComponent = __decorate([
Component({
providers: [HammerGesturesManager],
selector: 'igx-nav-drawer',
template: "<ng-template #defaultItemsTemplate>\n <div igxDrawerItem [isHeader]=\"true\">Navigation Drawer</div>\n <div igxDrawerItem> Start by adding</div>\n <div igxDrawerItem> <code><ng-template igxDrawer></code> </div>\n <div igxDrawerItem> And some items inside </div>\n <div igxDrawerItem> Style with igxDrawerItem </div>\n <div igxDrawerItem> and igxRipple directives</div>\n</ng-template>\n\n<div [hidden]=\"pin\"\n class=\"igx-nav-drawer__overlay\"\n [class.igx-nav-drawer__overlay--hidden]=\"!isOpen\"\n (click)=\"close()\" #overlay>\n</div>\n<aside role=\"navigation\"\n class=\"igx-nav-drawer__aside\"\n [class.igx-nav-drawer__aside--collapsed]=\"!miniTemplate && !isOpen\"\n [class.igx-nav-drawer__aside--mini]=\"miniTemplate && !isOpen\"\n [class.igx-nav-drawer__aside--normal]=\"!miniTemplate || isOpen\"\n [class.igx-nav-drawer__aside--pinned]=\"pin\"\n [class.igx-nav-drawer__aside--right]=\"position == 'right'\" #aside>\n\n <ng-container *ngTemplateOutlet=\"template || defaultItemsTemplate\"></ng-container>\n</aside>\n<div class=\"igx-nav-drawer__style-dummy\" #dummy></div>\n",
styles: ["\n :host {\n display: block;\n height: 100%;\n }\n "]
}),
__param(0, Inject(ElementRef)),
__param(1, Optional()),
__metadata("design:paramtypes", [ElementRef,
IgxNavigationService,
Renderer2,
HammerGesturesManager,
PlatformUtil])
], IgxNavigationDrawerComponent);
return IgxNavigationDrawerComponent;
}());
export { IgxNavigationDrawerComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9uYXZpZ2F0aW9uLWRyYXdlci9uYXZpZ2F0aW9uLWRyYXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBWUg7SUFzV0ksc0NBQ2dDLFVBQXNCLEVBQzlCLE1BQTRCLEVBQ3RDLFFBQW1CLEVBQ3JCLGFBQW9DLEVBQ3BDLFlBQTBCO1FBTHRDLGlCQU1DO1FBTCtCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFDdEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNyQixrQkFB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