@greg-md/ng-flex-css-layout
Version:
Flex-CSS-Layout is an alternative behaviour of Flex-Layout directives, that will still work with Angular Universal and App Shell.
261 lines (260 loc) • 17.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Directive, ElementRef, Input, Renderer2, Optional, Host } from '@angular/core';
import { ReplaySubject } from 'rxjs';
import { FlexCssService } from './flex-css.service';
import { BaseDirective } from './directive';
import { LayoutDirective } from './layout.directive';
var FlexAlignDirective = /** @class */ (function (_super) {
tslib_1.__extends(FlexAlignDirective, _super);
function FlexAlignDirective(elementRef, renderer, service, layout) {
var _this = _super.call(this, elementRef, renderer) || this;
_this.service = service;
_this.fcValues = {};
_this.observer$ = new ReplaySubject(1);
if (layout && layout.elementRef.nativeElement === _this.parentElement) {
_this.layout = layout;
}
return _this;
}
Object.defineProperty(FlexAlignDirective.prototype, "align", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['all'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xs'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['xl'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignGtXs", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-xs'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignGtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignGtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignGtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['gt-lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignLtSm", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-sm'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignLtMd", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-md'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignLtLg", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-lg'] = val; },
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "alignLtXl", {
set: /**
* @param {?} val
* @return {?}
*/
function (val) { this.fcValues['lt-xl'] = val; },
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
FlexAlignDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.dependsOnParentLayout();
};
/**
* @return {?}
*/
FlexAlignDirective.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.reload();
};
/**
* @return {?}
*/
FlexAlignDirective.prototype.reload = /**
* @return {?}
*/
function () {
var _this = this;
var /** @type {?} */ classNames = [];
this.breakpoints.forEach(function (breakpoint) {
classNames.push(_this.service.addFlexAlign(_this.fcValues[breakpoint], breakpoint));
});
this.setClassNames(classNames);
this.observer$.next(this.fcValues);
};
/**
* @return {?}
*/
FlexAlignDirective.prototype.dependsOnParentLayout = /**
* @return {?}
*/
function () {
var _this = this;
if (this.layout) {
this.layout.addNewBreakpoints(this.breakpoints, 'row');
}
else {
this.breakpoints.forEach(function (breakpoint) {
_this.renderer.addClass(_this.parentElement, _this.service.addLayout('row', breakpoint));
});
}
};
Object.defineProperty(FlexAlignDirective.prototype, "parentElement", {
get: /**
* @return {?}
*/
function () {
return this.renderer.parentNode(this.elementRef.nativeElement);
},
enumerable: true,
configurable: true
});
Object.defineProperty(FlexAlignDirective.prototype, "breakpoints", {
get: /**
* @return {?}
*/
function () {
return Object.keys(this.fcValues);
},
enumerable: true,
configurable: true
});
FlexAlignDirective.decorators = [
{ type: Directive, args: [{
selector: "\n [fcFlexAlign],\n [fcFlexAlign.xs], [fcFlexAlign.sm], [fcFlexAlign.md], [fcFlexAlign.lg], [fcFlexAlign.xl],\n [fcFlexAlign.lt-sm], [fcFlexAlign.lt-md], [fcFlexAlign.lt-lg], [fcFlexAlign.lt-xl],\n [fcFlexAlign.gt-xs], [fcFlexAlign.gt-sm], [fcFlexAlign.gt-md], [fcFlexAlign.gt-lg]\n ",
},] },
];
/** @nocollapse */
FlexAlignDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: FlexCssService },
{ type: LayoutDirective, decorators: [{ type: Optional }, { type: Host }] }
]; };
FlexAlignDirective.propDecorators = {
align: [{ type: Input, args: ['fcFlexAlign',] }],
alignXs: [{ type: Input, args: ['fcFlexAlign.xs',] }],
alignSm: [{ type: Input, args: ['fcFlexAlign.sm',] }],
alignMd: [{ type: Input, args: ['fcFlexAlign.md',] }],
alignLg: [{ type: Input, args: ['fcFlexAlign.lg',] }],
alignXl: [{ type: Input, args: ['fcFlexAlign.xl',] }],
alignGtXs: [{ type: Input, args: ['fcFlexAlign.gt-xs',] }],
alignGtSm: [{ type: Input, args: ['fcFlexAlign.gt-sm',] }],
alignGtMd: [{ type: Input, args: ['fcFlexAlign.gt-md',] }],
alignGtLg: [{ type: Input, args: ['fcFlexAlign.gt-lg',] }],
alignLtSm: [{ type: Input, args: ['fcFlexAlign.lt-sm',] }],
alignLtMd: [{ type: Input, args: ['fcFlexAlign.lt-md',] }],
alignLtLg: [{ type: Input, args: ['fcFlexAlign.lt-lg',] }],
alignLtXl: [{ type: Input, args: ['fcFlexAlign.lt-xl',] }]
};
return FlexAlignDirective;
}(BaseDirective));
export { FlexAlignDirective };
function FlexAlignDirective_tsickle_Closure_declarations() {
/** @type {?} */
FlexAlignDirective.prototype.fcValues;
/** @type {?} */
FlexAlignDirective.prototype.observer$;
/** @type {?} */
FlexAlignDirective.prototype.layout;
/** @type {?} */
FlexAlignDirective.prototype.service;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1hbGlnbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ3JlZy1tZC9uZy1mbGV4LWNzcy1sYXlvdXQvIiwic291cmNlcyI6WyJsaWIvZmxleC1hbGlnbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0lBVWIsOENBQWE7SUF3Qm5ELDRCQUNFLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ1gsU0FDWSxNQUF1QjtRQUo3QyxZQU1FLGtCQUFNLFVBQVUsRUFBRSxRQUFRLENBQUMsU0FLNUI7UUFSUyxhQUFPLEdBQVAsT0FBTzt5QkExQk4sRUFBRTswQkFFRCxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUE2QjlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxLQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNyRSxLQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0Qjs7S0FDRjtJQTVCRCxzQkFBZ0MscUNBQUs7Ozs7O1FBQXJDLFVBQXNDLEdBQUcsSUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM5RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUM3RSxzQkFBZ0MsdUNBQU87Ozs7O1FBQXZDLFVBQXdDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUU3RSxzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUNoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7T0FBQTtJQUVoRixzQkFBZ0MseUNBQVM7Ozs7O1FBQXpDLFVBQTBDLEdBQUcsSUFBSSxJQUFJLENB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QUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs0QkFDekIsS0FBSyxTQUFDLG1CQUFtQjs7NkJBckM1QjtFQWV3QyxhQUFhO1NBQXhDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT25Jbml0LCBJbnB1dCwgUmVuZGVyZXIyLCBPcHRpb25hbCwgSG9zdCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZsZXhDc3NTZXJ2aWNlIH0gZnJvbSAnLi9mbGV4LWNzcy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMYXlvdXREaXJlY3RpdmUgfSBmcm9tICcuL2xheW91dC5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IGBcbiAgICBbZmNGbGV4QWxpZ25dLFxuICAgIFtmY0ZsZXhBbGlnbi54c10sIFtmY0ZsZXhBbGlnbi5zbV0sIFtmY0ZsZXhBbGlnbi5tZF0sIFtmY0ZsZXhBbGlnbi5sZ10sIFtmY0ZsZXhBbGlnbi54bF0sXG4gICAgW2ZjRmxleEFsaWduLmx0LXNtXSwgW2ZjRmxleEFsaWduLmx0LW1kXSwgW2ZjRmxleEFsaWduLmx0LWxnXSwgW2ZjRmxleEFsaWduLmx0LXhsXSxcbiAgICBbZmNGbGV4QWxpZ24uZ3QteHNdLCBbZmNGbGV4QWxpZ24uZ3Qtc21dLCBbZmNGbGV4QWxpZ24uZ3QtbWRdLCBbZmNGbGV4QWxpZ24uZ3QtbGddXG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIEZsZXhBbGlnbkRpcmVjdGl2ZSBleHRlbmRzIEJhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIGZjVmFsdWVzID0ge307XG5cbiAgb2JzZXJ2ZXIkID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XG5cbiAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZTtcblxuICBASW5wdXQoJ2ZjRmxleEFsaWduJykgICAgICAgc2V0IGFsaWduKHZhbCkgICAgIHsgdGhpcy5mY1ZhbHVlc1snYWxsJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi54cycpICAgIHNldCBhbGlnblhzKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3hzJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5zbScpICAgIHNldCBhbGlnblNtKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3NtJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5tZCcpICAgIHNldCBhbGlnbk1kKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ21kJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi5sZycpICAgIHNldCBhbGlnbkxnKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ2xnJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhBbGlnbi54bCcpICAgIHNldCBhbGlnblhsKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3hsJ10gPSB2YWw7IH1cblxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LXhzJykgc2V0IGFsaWduR3RYcyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QteHMnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LXNtJykgc2V0IGFsaWduR3RTbSh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3Qtc20nXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LW1kJykgc2V0IGFsaWduR3RNZCh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QtbWQnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleEFsaWduLmd0LWxnJykgc2V0IGFsaWduR3RMZyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3QtbGcnXSA9IHZhbDsgfVxuXG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtc20nKSBzZXQgYWxpZ25MdFNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1zbSddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtbWQnKSBzZXQgYWxpZ25MdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1tZCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQtbGcnKSBzZXQgYWxpZ25MdExnKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1sZyddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4QWxpZ24ubHQteGwnKSBzZXQgYWxpZ25MdFhsKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC14bCddID0gdmFsOyB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2VydmljZTogRmxleENzc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIpO1xuXG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID09PSB0aGlzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVwZW5kc09uUGFyZW50TGF5b3V0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmFkZEZsZXhBbGlnbih0aGlzLmZjVmFsdWVzW2JyZWFrcG9pbnRdLCBicmVha3BvaW50KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0Q2xhc3NOYW1lcyhjbGFzc05hbWVzKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIkLm5leHQodGhpcy5mY1ZhbHVlcyk7XG4gIH1cblxuICBkZXBlbmRzT25QYXJlbnRMYXlvdXQoKSB7XG4gICAgaWYgKHRoaXMubGF5b3V0KSB7XG4gICAgICB0aGlzLmxheW91dC5hZGROZXdCcmVha3BvaW50cyh0aGlzLmJyZWFrcG9pbnRzLCAncm93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnBhcmVudEVsZW1lbnQsIHRoaXMuc2VydmljZS5hZGRMYXlvdXQoJ3JvdycsIGJyZWFrcG9pbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0IGJyZWFrcG9pbnRzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZjVmFsdWVzKTtcbiAgfVxufVxuIl19