UNPKG

@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.

197 lines (196 loc) 15.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Directive, ElementRef, Input, Renderer2, Optional, Host, SkipSelf } from '@angular/core'; import { ReplaySubject } from 'rxjs'; import { FlexCssService } from './flex-css.service'; import { BaseDirective } from './directive'; import { LayoutDirective } from './layout.directive'; export class FlexOffsetDirective extends BaseDirective { /** * @param {?} elementRef * @param {?} renderer * @param {?} service * @param {?} layout */ constructor(elementRef, renderer, service, layout) { super(elementRef, renderer); this.service = service; this.fcValues = {}; this.observer$ = new ReplaySubject(1); if (layout && layout.elementRef.nativeElement === this.parentElement) { this.layout = layout; } } /** * @param {?} val * @return {?} */ set offset(val) { this.fcValues['all'] = val; } /** * @param {?} val * @return {?} */ set offsetXs(val) { this.fcValues['xs'] = val; } /** * @param {?} val * @return {?} */ set offsetSm(val) { this.fcValues['sm'] = val; } /** * @param {?} val * @return {?} */ set offsetMd(val) { this.fcValues['md'] = val; } /** * @param {?} val * @return {?} */ set offsetLg(val) { this.fcValues['lg'] = val; } /** * @param {?} val * @return {?} */ set offsetXl(val) { this.fcValues['xl'] = val; } /** * @param {?} val * @return {?} */ set offsetGtXs(val) { this.fcValues['gt-xs'] = val; } /** * @param {?} val * @return {?} */ set offsetGtSm(val) { this.fcValues['gt-sm'] = val; } /** * @param {?} val * @return {?} */ set offsetGtMd(val) { this.fcValues['gt-md'] = val; } /** * @param {?} val * @return {?} */ set offsetGtLg(val) { this.fcValues['gt-lg'] = val; } /** * @param {?} val * @return {?} */ set offsetLtSm(val) { this.fcValues['lt-sm'] = val; } /** * @param {?} val * @return {?} */ set offsetLtMd(val) { this.fcValues['lt-md'] = val; } /** * @param {?} val * @return {?} */ set offsetLtLg(val) { this.fcValues['lt-lg'] = val; } /** * @param {?} val * @return {?} */ set offsetLtXl(val) { this.fcValues['lt-xl'] = val; } /** * @return {?} */ ngOnInit() { this.dependsOnParentLayout(); } /** * @return {?} */ ngOnChanges() { this.reload(); } /** * @return {?} */ reload() { const /** @type {?} */ classNames = []; this.breakpoints.forEach(breakpoint => { Object.keys(this.layoutValues).forEach(layoutBreakpoint => { classNames.push(this.service.addFlexOffset(this.layoutValues[layoutBreakpoint], layoutBreakpoint, this.fcValues[breakpoint], breakpoint)); }); }); this.setClassNames(classNames); this.observer$.next(this.fcValues); } /** * @return {?} */ dependsOnParentLayout() { if (this.layout) { this.layout.addNewBreakpoints(this.breakpoints, 'row'); } else { this.breakpoints.forEach(breakpoint => { this.renderer.addClass(this.parentElement, this.service.addLayout('row', breakpoint)); }); } } /** * @return {?} */ get parentElement() { return this.renderer.parentNode(this.elementRef.nativeElement); } /** * @return {?} */ get layoutValues() { return this.layout ? this.layout.fcValues : { 'all': '' }; } /** * @return {?} */ get breakpoints() { return Object.keys(this.fcValues); } } FlexOffsetDirective.decorators = [ { type: Directive, args: [{ selector: ` [fcFlexOffset], [fcFlexOffset.xs], [fcFlexOffset.sm], [fcFlexOffset.md], [fcFlexOffset.lg], [fcFlexOffset.xl], [fcFlexOffset.lt-sm], [fcFlexOffset.lt-md], [fcFlexOffset.lt-lg], [fcFlexOffset.lt-xl], [fcFlexOffset.gt-xs], [fcFlexOffset.gt-sm], [fcFlexOffset.gt-md], [fcFlexOffset.gt-lg] `, },] }, ]; /** @nocollapse */ FlexOffsetDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: FlexCssService }, { type: LayoutDirective, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf }] } ]; FlexOffsetDirective.propDecorators = { offset: [{ type: Input, args: ['fcFlexOffset',] }], offsetXs: [{ type: Input, args: ['fcFlexOffset.xs',] }], offsetSm: [{ type: Input, args: ['fcFlexOffset.sm',] }], offsetMd: [{ type: Input, args: ['fcFlexOffset.md',] }], offsetLg: [{ type: Input, args: ['fcFlexOffset.lg',] }], offsetXl: [{ type: Input, args: ['fcFlexOffset.xl',] }], offsetGtXs: [{ type: Input, args: ['fcFlexOffset.gt-xs',] }], offsetGtSm: [{ type: Input, args: ['fcFlexOffset.gt-sm',] }], offsetGtMd: [{ type: Input, args: ['fcFlexOffset.gt-md',] }], offsetGtLg: [{ type: Input, args: ['fcFlexOffset.gt-lg',] }], offsetLtSm: [{ type: Input, args: ['fcFlexOffset.lt-sm',] }], offsetLtMd: [{ type: Input, args: ['fcFlexOffset.lt-md',] }], offsetLtLg: [{ type: Input, args: ['fcFlexOffset.lt-lg',] }], offsetLtXl: [{ type: Input, args: ['fcFlexOffset.lt-xl',] }] }; function FlexOffsetDirective_tsickle_Closure_declarations() { /** @type {?} */ FlexOffsetDirective.prototype.fcValues; /** @type {?} */ FlexOffsetDirective.prototype.observer$; /** @type {?} */ FlexOffsetDirective.prototype.layout; /** @type {?} */ FlexOffsetDirective.prototype.service; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxleC1vZmZzZXQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdyZWctbWQvbmctZmxleC1jc3MtbGF5b3V0LyIsInNvdXJjZXMiOlsibGliL2ZsZXgtb2Zmc2V0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFhLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVVyRCxNQUFNLDBCQUEyQixTQUFRLGFBQWE7Ozs7Ozs7SUF3QnBELFlBQ0UsVUFBc0IsRUFDdEIsUUFBbUIsRUFDWCxTQUN3QixNQUF1QjtRQUV2RCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBSHBCLFlBQU8sR0FBUCxPQUFPO3dCQTFCTixFQUFFO3lCQUVELElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQztRQTZCOUIsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ3RCO0tBQ0Y7Ozs7O0lBNUJELElBQWlDLE1BQU0sQ0FBQyxHQUFHLElBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7Ozs7SUFDaEYsSUFBaUMsUUFBUSxDQUFDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7OztJQUMvRSxJQUFpQyxRQUFRLENBQUMsR0FBRyxJQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Ozs7O0lBQy9FLElBQWlDLFFBQVEsQ0FBQyxHQUFHLElBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7Ozs7SUFDL0UsSUFBaUMsUUFBUSxDQUFDLEdBQUcsSUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7OztJQUMvRSxJQUFpQyxRQUFRLENBQUMsR0FBRyxJQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Ozs7O0lBRS9FLElBQWlDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7Ozs7SUFDbEYsSUFBaUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7OztJQUNsRixJQUFpQyxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Ozs7O0lBQ2xGLElBQWlDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRTs7Ozs7SUFFbEYsSUFBaUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzs7OztJQUNsRixJQUFpQyxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUU7Ozs7O0lBQ2xG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U0FBQyxvQkFBb0I7eUJBQzFCLEtBQUssU0FBQyxvQkFBb0I7eUJBQzFCLEtBQUssU0FBQyxvQkFBb0I7eUJBQzFCLEtBQUssU0FBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uSW5pdCwgSW5wdXQsIFJlbmRlcmVyMiwgT3B0aW9uYWwsIEhvc3QsIE9uQ2hhbmdlcywgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmxleENzc1NlcnZpY2UgfSBmcm9tICcuL2ZsZXgtY3NzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlJztcbmltcG9ydCB7IExheW91dERpcmVjdGl2ZSB9IGZyb20gJy4vbGF5b3V0LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogYFxuICAgIFtmY0ZsZXhPZmZzZXRdLFxuICAgIFtmY0ZsZXhPZmZzZXQueHNdLCBbZmNGbGV4T2Zmc2V0LnNtXSwgW2ZjRmxleE9mZnNldC5tZF0sIFtmY0ZsZXhPZmZzZXQubGddLCBbZmNGbGV4T2Zmc2V0LnhsXSxcbiAgICBbZmNGbGV4T2Zmc2V0Lmx0LXNtXSwgW2ZjRmxleE9mZnNldC5sdC1tZF0sIFtmY0ZsZXhPZmZzZXQubHQtbGddLCBbZmNGbGV4T2Zmc2V0Lmx0LXhsXSxcbiAgICBbZmNGbGV4T2Zmc2V0Lmd0LXhzXSwgW2ZjRmxleE9mZnNldC5ndC1zbV0sIFtmY0ZsZXhPZmZzZXQuZ3QtbWRdLCBbZmNGbGV4T2Zmc2V0Lmd0LWxnXVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBGbGV4T2Zmc2V0RGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgZmNWYWx1ZXMgPSB7fTtcblxuICBvYnNlcnZlciQgPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcblxuICBwcml2YXRlIGxheW91dDogTGF5b3V0RGlyZWN0aXZlO1xuXG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0JykgICAgICAgc2V0IG9mZnNldCh2YWwpICAgICB7IHRoaXMuZmNWYWx1ZXNbJ2FsbCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0LnhzJykgICAgc2V0IG9mZnNldFhzKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ3hzJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhPZmZzZXQuc20nKSAgICBzZXQgb2Zmc2V0U20odmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1snc20nXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleE9mZnNldC5tZCcpICAgIHNldCBvZmZzZXRNZCh2YWwpICAgeyB0aGlzLmZjVmFsdWVzWydtZCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0LmxnJykgICAgc2V0IG9mZnNldExnKHZhbCkgICB7IHRoaXMuZmNWYWx1ZXNbJ2xnJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhPZmZzZXQueGwnKSAgICBzZXQgb2Zmc2V0WGwodmFsKSAgIHsgdGhpcy5mY1ZhbHVlc1sneGwnXSA9IHZhbDsgfVxuXG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0Lmd0LXhzJykgc2V0IG9mZnNldEd0WHModmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LXhzJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhPZmZzZXQuZ3Qtc20nKSBzZXQgb2Zmc2V0R3RTbSh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snZ3Qtc20nXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleE9mZnNldC5ndC1tZCcpIHNldCBvZmZzZXRHdE1kKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydndC1tZCddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0Lmd0LWxnJykgc2V0IG9mZnNldEd0TGcodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2d0LWxnJ10gPSB2YWw7IH1cblxuICBASW5wdXQoJ2ZjRmxleE9mZnNldC5sdC1zbScpIHNldCBvZmZzZXRMdFNtKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC1zbSddID0gdmFsOyB9XG4gIEBJbnB1dCgnZmNGbGV4T2Zmc2V0Lmx0LW1kJykgc2V0IG9mZnNldEx0TWQodmFsKSB7IHRoaXMuZmNWYWx1ZXNbJ2x0LW1kJ10gPSB2YWw7IH1cbiAgQElucHV0KCdmY0ZsZXhPZmZzZXQubHQtbGcnKSBzZXQgb2Zmc2V0THRMZyh2YWwpIHsgdGhpcy5mY1ZhbHVlc1snbHQtbGcnXSA9IHZhbDsgfVxuICBASW5wdXQoJ2ZjRmxleE9mZnNldC5sdC14bCcpIHNldCBvZmZzZXRMdFhsKHZhbCkgeyB0aGlzLmZjVmFsdWVzWydsdC14bCddID0gdmFsOyB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc2VydmljZTogRmxleENzc1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBAU2tpcFNlbGYoKSBsYXlvdXQ6IExheW91dERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIpO1xuXG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ID09PSB0aGlzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVwZW5kc09uUGFyZW50TGF5b3V0KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcmVsb2FkKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMubGF5b3V0VmFsdWVzKS5mb3JFYWNoKGxheW91dEJyZWFrcG9pbnQgPT4ge1xuICAgICAgICBjbGFzc05hbWVzLnB1c2goXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmFkZEZsZXhPZmZzZXQodGhpcy5sYXlvdXRWYWx1ZXNbbGF5b3V0QnJlYWtwb2ludF0sIGxheW91dEJyZWFrcG9pbnQsIHRoaXMuZmNWYWx1ZXNbYnJlYWtwb2ludF0sIGJyZWFrcG9pbnQpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2V0Q2xhc3NOYW1lcyhjbGFzc05hbWVzKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIkLm5leHQodGhpcy5mY1ZhbHVlcyk7XG4gIH1cblxuICBkZXBlbmRzT25QYXJlbnRMYXlvdXQoKSB7XG4gICAgaWYgKHRoaXMubGF5b3V0KSB7XG4gICAgICB0aGlzLmxheW91dC5hZGROZXdCcmVha3BvaW50cyh0aGlzLmJyZWFrcG9pbnRzLCAncm93Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChicmVha3BvaW50ID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnBhcmVudEVsZW1lbnQsIHRoaXMuc2VydmljZS5hZGRMYXlvdXQoJ3JvdycsIGJyZWFrcG9pbnQpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwYXJlbnRFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLnBhcmVudE5vZGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgZ2V0IGxheW91dFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQgPyB0aGlzLmxheW91dC5mY1ZhbHVlcyA6IHsgJ2FsbCc6ICcnIH07XG4gIH1cblxuICBnZXQgYnJlYWtwb2ludHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZmNWYWx1ZXMpO1xuICB9XG59XG4iXX0=