UNPKG

angular2gridsterv3

Version:
726 lines (713 loc) 99.2 kB
import { Component, ElementRef, Inject, Input, Output, EventEmitter, HostBinding, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core'; import { GridsterService } from '../gridster.service'; import { GridListItem } from '../gridList/GridListItem'; import { Draggable } from '../utils/draggable'; import { GridList } from '../gridList/gridList'; import { utils } from '../utils/utils'; import * as i0 from "@angular/core"; import * as i1 from "../gridster-prototype/gridster-prototype.service"; import * as i2 from "../gridster.service"; export class GridsterItemComponent { constructor(zone, gridsterPrototypeService, elementRef, gridster) { this.zone = zone; this.gridsterPrototypeService = gridsterPrototypeService; this.xChange = new EventEmitter(true); this.yChange = new EventEmitter(true); this.xSmChange = new EventEmitter(true); this.ySmChange = new EventEmitter(true); this.xMdChange = new EventEmitter(true); this.yMdChange = new EventEmitter(true); this.xLgChange = new EventEmitter(true); this.yLgChange = new EventEmitter(true); this.xXlChange = new EventEmitter(true); this.yXlChange = new EventEmitter(true); this.wChange = new EventEmitter(true); this.hChange = new EventEmitter(true); this.wSmChange = new EventEmitter(true); this.hSmChange = new EventEmitter(true); this.wMdChange = new EventEmitter(true); this.hMdChange = new EventEmitter(true); this.wLgChange = new EventEmitter(true); this.hLgChange = new EventEmitter(true); this.wXlChange = new EventEmitter(true); this.hXlChange = new EventEmitter(true); this.change = new EventEmitter(true); this.start = new EventEmitter(true); this.end = new EventEmitter(true); this.dragAndDrop = true; this.resizable = true; this.options = {}; this.isDragging = false; this.isResizing = false; this.defaultOptions = { minWidth: 1, minHeight: 1, maxWidth: Infinity, maxHeight: Infinity, defaultWidth: 1, defaultHeight: 1 }; this.subscriptions = []; this.dragSubscriptions = []; this.resizeSubscriptions = []; this.gridster = gridster; this.elementRef = elementRef; this.$element = elementRef.nativeElement; this.item = (new GridListItem()).setFromGridsterItem(this); // if gridster is initialized do not show animation on new grid-item construct if (this.gridster.isInitialized()) { this.preventAnimation(); } } set positionX(value) { this._positionX = value; } get positionX() { return this._positionX; } set positionY(value) { this._positionY = value; } get positionY() { return this._positionY; } ngOnInit() { this.options = Object.assign(this.defaultOptions, this.options); this.w = this.w || this.options.defaultWidth; this.h = this.h || this.options.defaultHeight; this.wSm = this.wSm || this.w; this.hSm = this.hSm || this.h; this.wMd = this.wMd || this.w; this.hMd = this.hMd || this.h; this.wLg = this.wLg || this.w; this.hLg = this.hLg || this.h; this.wXl = this.wXl || this.w; this.hXl = this.hXl || this.h; if (this.gridster.isInitialized()) { this.setPositionsOnItem(); } this.gridster.registerItem(this.item); this.gridster.calculateCellSize(); this.item.applySize(); this.item.applyPosition(); if (this.gridster.options.dragAndDrop && this.dragAndDrop) { this.enableDragDrop(); } if (this.gridster.isInitialized()) { this.gridster.render(); this.gridster.updateCachedItems(); } } ngAfterViewInit() { if (this.gridster.options.resizable && this.item.resizable) { this.enableResizable(); } } ngOnChanges(changes) { if (!this.gridster.gridList) { return; } let rerender = false; ['w', ...Object.keys(GridListItem.W_PROPERTY_MAP).map(breakpoint => GridListItem.W_PROPERTY_MAP[breakpoint])] .filter(propName => changes[propName] && !changes[propName].isFirstChange()) .forEach((propName) => { if (changes[propName].currentValue > this.options.maxWidth) { this[propName] = this.options.maxWidth; setTimeout(() => this[propName + 'Change'].emit(this[propName])); } rerender = true; }); ['h', ...Object.keys(GridListItem.H_PROPERTY_MAP).map(breakpoint => GridListItem.H_PROPERTY_MAP[breakpoint])] .filter(propName => changes[propName] && !changes[propName].isFirstChange()) .forEach((propName) => { if (changes[propName].currentValue > this.options.maxHeight) { this[propName] = this.options.maxHeight; setTimeout(() => this[propName + 'Change'].emit(this[propName])); } rerender = true; }); ['x', 'y', ...Object.keys(GridListItem.X_PROPERTY_MAP).map(breakpoint => GridListItem.X_PROPERTY_MAP[breakpoint]), ...Object.keys(GridListItem.Y_PROPERTY_MAP).map(breakpoint => GridListItem.Y_PROPERTY_MAP[breakpoint])] .filter(propName => changes[propName] && !changes[propName].isFirstChange()) .forEach((propName) => rerender = true); if (changes['dragAndDrop'] && !changes['dragAndDrop'].isFirstChange()) { if (changes['dragAndDrop'].currentValue && this.gridster.options.dragAndDrop) { this.enableDragDrop(); } else { this.disableDraggable(); } } if (changes['resizable'] && !changes['resizable'].isFirstChange()) { if (changes['resizable'].currentValue && this.gridster.options.resizable) { this.enableResizable(); } else { this.disableResizable(); } } if (rerender && this.gridster.gridsterComponent.isReady) { this.gridster.debounceRenderSubject.next(); } } ngOnDestroy() { this.gridster.removeItem(this.item); this.gridster.itemRemoveSubject.next(this.item); this.subscriptions.forEach((sub) => { sub.unsubscribe(); }); this.disableDraggable(); this.disableResizable(); } updateElemenetPosition() { if (this.gridster.options.useCSSTransforms) { utils.setTransform(this.$element, { x: this._positionX, y: this._positionY }); } else { utils.setCssElementPosition(this.$element, { x: this._positionX, y: this._positionY }); } } setPositionsOnItem() { if (!this.item.hasPositions(this.gridster.options.breakpoint)) { this.setPositionsForGrid(this.gridster.options); } this.gridster.gridsterOptions.responsiveOptions .filter((options) => !this.item.hasPositions(options.breakpoint)) .forEach((options) => this.setPositionsForGrid(options)); } enableResizable() { if (this.resizeSubscriptions.length) { return; } this.zone.runOutsideAngular(() => { this.getResizeHandlers().forEach((handler) => { const direction = this.getResizeDirection(handler); if (this.hasResizableHandle(direction)) { handler.style.display = 'block'; } const draggable = new Draggable(handler, this.getResizableOptions()); let startEvent; let startData; let cursorToElementPosition; const dragStartSub = draggable.dragStart .subscribe((event) => { this.zone.run(() => { this.isResizing = true; startEvent = event; startData = this.createResizeStartObject(direction); cursorToElementPosition = event.getRelativeCoordinates(this.$element); this.gridster.onResizeStart(this.item); this.onStart('resize'); }); }); const dragSub = draggable.dragMove .subscribe((event) => { const scrollData = this.gridster.gridsterScrollData; this.resizeElement({ direction, startData, position: { x: event.clientX - cursorToElementPosition.x - this.gridster.gridsterRect.left, y: event.clientY - cursorToElementPosition.y - this.gridster.gridsterRect.top }, startEvent, moveEvent: event, scrollDiffX: scrollData.scrollLeft - startData.scrollLeft, scrollDiffY: scrollData.scrollTop - startData.scrollTop }); this.gridster.onResizeDrag(this.item); }); const dragStopSub = draggable.dragStop .subscribe(() => { this.zone.run(() => { this.isResizing = false; this.gridster.onResizeStop(this.item); this.onEnd('resize'); }); }); this.resizeSubscriptions = this.resizeSubscriptions.concat([dragStartSub, dragSub, dragStopSub]); }); }); } disableResizable() { this.resizeSubscriptions.forEach((sub) => { sub.unsubscribe(); }); this.resizeSubscriptions = []; [].forEach.call(this.$element.querySelectorAll('.gridster-item-resizable-handler'), (handler) => { handler.style.display = ''; }); } enableDragDrop() { if (this.dragSubscriptions.length) { return; } this.zone.runOutsideAngular(() => { let cursorToElementPosition; const draggable = new Draggable(this.$element, this.getDraggableOptions()); const dragStartSub = draggable.dragStart .subscribe((event) => { this.zone.run(() => { this.gridster.onStart(this.item); this.isDragging = true; this.onStart('drag'); cursorToElementPosition = event.getRelativeCoordinates(this.$element); }); }); const dragSub = draggable.dragMove .subscribe((event) => { this.positionY = (event.clientY - cursorToElementPosition.y - this.gridster.gridsterRect.top); this.positionX = (event.clientX - cursorToElementPosition.x - this.gridster.gridsterRect.left); this.updateElemenetPosition(); this.gridster.onDrag(this.item); }); const dragStopSub = draggable.dragStop .subscribe(() => { this.zone.run(() => { this.gridster.onStop(this.item); this.gridster.debounceRenderSubject.next(); this.isDragging = false; this.onEnd('drag'); }); }); this.dragSubscriptions = this.dragSubscriptions.concat([dragStartSub, dragSub, dragStopSub]); }); } disableDraggable() { this.dragSubscriptions.forEach((sub) => { sub.unsubscribe(); }); this.dragSubscriptions = []; } getResizeHandlers() { return [].filter.call(this.$element.children[0].children, (el) => { return el.classList.contains('gridster-item-resizable-handler'); }); } getDraggableOptions() { return { scrollDirection: this.gridster.options.direction, ...this.gridster.draggableOptions }; } getResizableOptions() { const resizableOptions = {}; if (this.gridster.draggableOptions.scroll || this.gridster.draggableOptions.scroll === false) { resizableOptions.scroll = this.gridster.draggableOptions.scroll; } if (this.gridster.draggableOptions.scrollEdge) { resizableOptions.scrollEdge = this.gridster.draggableOptions.scrollEdge; } resizableOptions.scrollDirection = this.gridster.options.direction; return resizableOptions; } hasResizableHandle(direction) { const isItemResizable = this.gridster.options.resizable && this.item.resizable; const resizeHandles = this.gridster.options.resizeHandles; return isItemResizable && (!resizeHandles || (resizeHandles && !!resizeHandles[direction])); } setPositionsForGrid(options) { let x, y; const position = this.findPosition(options); x = options.direction === 'horizontal' ? position[0] : position[1]; y = options.direction === 'horizontal' ? position[1] : position[0]; this.item.setValueX(x, options.breakpoint); this.item.setValueY(y, options.breakpoint); setTimeout(() => { this.item.triggerChangeX(options.breakpoint); this.item.triggerChangeY(options.breakpoint); }); } findPosition(options) { const gridList = new GridList(this.gridster.items.map(item => item.copyForBreakpoint(options.breakpoint)), options); return gridList.findPositionForItem(this.item, { x: 0, y: 0 }); } createResizeStartObject(direction) { const scrollData = this.gridster.gridsterScrollData; return { top: this.positionY, left: this.positionX, height: parseInt(this.$element.style.height, 10), width: parseInt(this.$element.style.width, 10), minX: Math.max(this.item.x + this.item.w - this.options.maxWidth, 0), maxX: this.item.x + this.item.w - this.options.minWidth, minY: Math.max(this.item.y + this.item.h - this.options.maxHeight, 0), maxY: this.item.y + this.item.h - this.options.minHeight, minW: this.options.minWidth, maxW: Math.min(this.options.maxWidth, (this.gridster.options.direction === 'vertical' && direction.indexOf('w') < 0) ? this.gridster.options.lanes - this.item.x : this.options.maxWidth, direction.indexOf('w') >= 0 ? this.item.x + this.item.w : this.options.maxWidth), minH: this.options.minHeight, maxH: Math.min(this.options.maxHeight, (this.gridster.options.direction === 'horizontal' && direction.indexOf('n') < 0) ? this.gridster.options.lanes - this.item.y : this.options.maxHeight, direction.indexOf('n') >= 0 ? this.item.y + this.item.h : this.options.maxHeight), scrollLeft: scrollData.scrollLeft, scrollTop: scrollData.scrollTop }; } onEnd(actionType) { this.end.emit({ action: actionType, item: this.item }); } onStart(actionType) { this.start.emit({ action: actionType, item: this.item }); } /** * Assign class for short while to prevent animation of grid item component */ preventAnimation() { this.$element.classList.add('no-transition'); setTimeout(() => { this.$element.classList.remove('no-transition'); }, 500); return this; } getResizeDirection(handler) { for (let i = handler.classList.length - 1; i >= 0; i--) { if (handler.classList[i].match('handle-')) { return handler.classList[i].split('-')[1]; } } } resizeElement(config) { // north if (config.direction.indexOf('n') >= 0) { this.resizeToNorth(config); } // west if (config.direction.indexOf('w') >= 0) { this.resizeToWest(config); } // east if (config.direction.indexOf('e') >= 0) { this.resizeToEast(config); } // south if (config.direction.indexOf('s') >= 0) { this.resizeToSouth(config); } } resizeToNorth(config) { const height = config.startData.height + config.startEvent.clientY - config.moveEvent.clientY - config.scrollDiffY; if (height < (config.startData.minH * this.gridster.cellHeight)) { this.setMinHeight('n', config); } else if (height > (config.startData.maxH * this.gridster.cellHeight)) { this.setMaxHeight('n', config); } else { this.positionY = config.position.y; this.$element.style.height = height + 'px'; } } resizeToWest(config) { const width = config.startData.width + config.startEvent.clientX - config.moveEvent.clientX - config.scrollDiffX; if (width < (config.startData.minW * this.gridster.cellWidth)) { this.setMinWidth('w', config); } else if (width > (config.startData.maxW * this.gridster.cellWidth)) { this.setMaxWidth('w', config); } else { this.positionX = config.position.x; this.updateElemenetPosition(); this.$element.style.width = width + 'px'; } } resizeToEast(config) { const width = config.startData.width + config.moveEvent.clientX - config.startEvent.clientX + config.scrollDiffX; if (width > (config.startData.maxW * this.gridster.cellWidth)) { this.setMaxWidth('e', config); } else if (width < (config.startData.minW * this.gridster.cellWidth)) { this.setMinWidth('e', config); } else { this.$element.style.width = width + 'px'; } } resizeToSouth(config) { const height = config.startData.height + config.moveEvent.clientY - config.startEvent.clientY + config.scrollDiffY; if (height > config.startData.maxH * this.gridster.cellHeight) { this.setMaxHeight('s', config); } else if (height < config.startData.minH * this.gridster.cellHeight) { this.setMinHeight('s', config); } else { this.$element.style.height = height + 'px'; } } setMinHeight(direction, config) { if (direction === 'n') { this.$element.style.height = (config.startData.minH * this.gridster.cellHeight) + 'px'; this.positionY = config.startData.maxY * this.gridster.cellHeight; } else { this.$element.style.height = (config.startData.minH * this.gridster.cellHeight) + 'px'; } } setMinWidth(direction, config) { if (direction === 'w') { this.$element.style.width = (config.startData.minW * this.gridster.cellWidth) + 'px'; this.positionX = config.startData.maxX * this.gridster.cellWidth; this.updateElemenetPosition(); } else { this.$element.style.width = (config.startData.minW * this.gridster.cellWidth) + 'px'; } } setMaxHeight(direction, config) { if (direction === 'n') { this.$element.style.height = (config.startData.maxH * this.gridster.cellHeight) + 'px'; this.positionY = config.startData.minY * this.gridster.cellHeight; } else { this.$element.style.height = (config.startData.maxH * this.gridster.cellHeight) + 'px'; } } setMaxWidth(direction, config) { if (direction === 'w') { this.$element.style.width = (config.startData.maxW * this.gridster.cellWidth) + 'px'; this.positionX = config.startData.minX * this.gridster.cellWidth; this.updateElemenetPosition(); } else { this.$element.style.width = (config.startData.maxW * this.gridster.cellWidth) + 'px'; } } } GridsterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: GridsterItemComponent, deps: [{ token: i0.NgZone }, { token: i1.GridsterPrototypeService }, { token: ElementRef }, { token: GridsterService }], target: i0.ɵɵFactoryTarget.Component }); GridsterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: GridsterItemComponent, selector: "ngx-gridster-item", inputs: { x: "x", y: "y", xSm: "xSm", ySm: "ySm", xMd: "xMd", yMd: "yMd", xLg: "xLg", yLg: "yLg", xXl: "xXl", yXl: "yXl", w: "w", h: "h", wSm: "wSm", hSm: "hSm", wMd: "wMd", hMd: "hMd", wLg: "wLg", hLg: "hLg", wXl: "wXl", hXl: "hXl", dragAndDrop: "dragAndDrop", resizable: "resizable", options: "options" }, outputs: { xChange: "xChange", yChange: "yChange", xSmChange: "xSmChange", ySmChange: "ySmChange", xMdChange: "xMdChange", yMdChange: "yMdChange", xLgChange: "xLgChange", yLgChange: "yLgChange", xXlChange: "xXlChange", yXlChange: "yXlChange", wChange: "wChange", hChange: "hChange", wSmChange: "wSmChange", hSmChange: "hSmChange", wMdChange: "wMdChange", hMdChange: "hMdChange", wLgChange: "wLgChange", hLgChange: "hLgChange", wXlChange: "wXlChange", hXlChange: "hXlChange", change: "change", start: "start", end: "end" }, host: { properties: { "class.is-dragging": "this.isDragging", "class.is-resizing": "this.isResizing" } }, usesOnChanges: true, ngImport: i0, template: `<div class="gridster-item-inner"> <ng-content></ng-content> <div class="gridster-item-resizable-handler handle-s"></div> <div class="gridster-item-resizable-handler handle-e"></div> <div class="gridster-item-resizable-handler handle-n"></div> <div class="gridster-item-resizable-handler handle-w"></div> <div class="gridster-item-resizable-handler handle-se"></div> <div class="gridster-item-resizable-handler handle-ne"></div> <div class="gridster-item-resizable-handler handle-sw"></div> <div class="gridster-item-resizable-handler handle-nw"></div> </div>`, isInline: true, styles: ["ngx-gridster-item{display:block;position:absolute;top:0;left:0;z-index:1;transition:none}.gridster--ready ngx-gridster-item{transition:all .2s ease;transition-property:left,top}.gridster--ready.css-transform ngx-gridster-item{transition-property:transform}.gridster--ready ngx-gridster-item.is-dragging,.gridster--ready ngx-gridster-item.is-resizing{transition:none;z-index:9999}ngx-gridster-item.no-transition{transition:none}ngx-gridster-item .gridster-item-resizable-handler{position:absolute;z-index:2;display:none}ngx-gridster-item .gridster-item-resizable-handler.handle-n{cursor:n-resize;height:10px;right:0;top:0;left:0}ngx-gridster-item .gridster-item-resizable-handler.handle-e{cursor:e-resize;width:10px;bottom:0;right:0;top:0}ngx-gridster-item .gridster-item-resizable-handler.handle-s{cursor:s-resize;height:10px;right:0;bottom:0;left:0}ngx-gridster-item .gridster-item-resizable-handler.handle-w{cursor:w-resize;width:10px;left:0;top:0;bottom:0}ngx-gridster-item .gridster-item-resizable-handler.handle-ne{cursor:ne-resize;width:10px;height:10px;right:0;top:0}ngx-gridster-item .gridster-item-resizable-handler.handle-nw{cursor:nw-resize;width:10px;height:10px;left:0;top:0}ngx-gridster-item .gridster-item-resizable-handler.handle-se{cursor:se-resize;width:0;height:0;right:0;bottom:0;border-style:solid;border-width:0 0 10px 10px;border-color:transparent}ngx-gridster-item .gridster-item-resizable-handler.handle-sw{cursor:sw-resize;width:10px;height:10px;left:0;bottom:0}ngx-gridster-item:hover .gridster-item-resizable-handler.handle-se{border-color:transparent transparent #ccc}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: GridsterItemComponent, decorators: [{ type: Component, args: [{ selector: 'ngx-gridster-item', template: `<div class="gridster-item-inner"> <ng-content></ng-content> <div class="gridster-item-resizable-handler handle-s"></div> <div class="gridster-item-resizable-handler handle-e"></div> <div class="gridster-item-resizable-handler handle-n"></div> <div class="gridster-item-resizable-handler handle-w"></div> <div class="gridster-item-resizable-handler handle-se"></div> <div class="gridster-item-resizable-handler handle-ne"></div> <div class="gridster-item-resizable-handler handle-sw"></div> <div class="gridster-item-resizable-handler handle-nw"></div> </div>`, styles: [` ngx-gridster-item { display: block; position: absolute; top: 0; left: 0; z-index: 1; -webkit-transition: none; transition: none; } .gridster--ready ngx-gridster-item { transition: all 200ms ease; transition-property: left, top; } .gridster--ready.css-transform ngx-gridster-item { transition-property: transform; } .gridster--ready ngx-gridster-item.is-dragging, .gridster--ready ngx-gridster-item.is-resizing { -webkit-transition: none; transition: none; z-index: 9999; } ngx-gridster-item.no-transition { -webkit-transition: none; transition: none; } ngx-gridster-item .gridster-item-resizable-handler { position: absolute; z-index: 2; display: none; } ngx-gridster-item .gridster-item-resizable-handler.handle-n { cursor: n-resize; height: 10px; right: 0; top: 0; left: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-e { cursor: e-resize; width: 10px; bottom: 0; right: 0; top: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-s { cursor: s-resize; height: 10px; right: 0; bottom: 0; left: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-w { cursor: w-resize; width: 10px; left: 0; top: 0; bottom: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-ne { cursor: ne-resize; width: 10px; height: 10px; right: 0; top: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-nw { cursor: nw-resize; width: 10px; height: 10px; left: 0; top: 0; } ngx-gridster-item .gridster-item-resizable-handler.handle-se { cursor: se-resize; width: 0; height: 0; right: 0; bottom: 0; border-style: solid; border-width: 0 0 10px 10px; border-color: transparent; } ngx-gridster-item .gridster-item-resizable-handler.handle-sw { cursor: sw-resize; width: 10px; height: 10px; left: 0; bottom: 0; } ngx-gridster-item:hover .gridster-item-resizable-handler.handle-se { border-color: transparent transparent #ccc } `], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None }] }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.GridsterPrototypeService }, { type: i0.ElementRef, decorators: [{ type: Inject, args: [ElementRef] }] }, { type: i2.GridsterService, decorators: [{ type: Inject, args: [GridsterService] }] }]; }, propDecorators: { x: [{ type: Input }], xChange: [{ type: Output }], y: [{ type: Input }], yChange: [{ type: Output }], xSm: [{ type: Input }], xSmChange: [{ type: Output }], ySm: [{ type: Input }], ySmChange: [{ type: Output }], xMd: [{ type: Input }], xMdChange: [{ type: Output }], yMd: [{ type: Input }], yMdChange: [{ type: Output }], xLg: [{ type: Input }], xLgChange: [{ type: Output }], yLg: [{ type: Input }], yLgChange: [{ type: Output }], xXl: [{ type: Input }], xXlChange: [{ type: Output }], yXl: [{ type: Input }], yXlChange: [{ type: Output }], w: [{ type: Input }], wChange: [{ type: Output }], h: [{ type: Input }], hChange: [{ type: Output }], wSm: [{ type: Input }], wSmChange: [{ type: Output }], hSm: [{ type: Input }], hSmChange: [{ type: Output }], wMd: [{ type: Input }], wMdChange: [{ type: Output }], hMd: [{ type: Input }], hMdChange: [{ type: Output }], wLg: [{ type: Input }], wLgChange: [{ type: Output }], hLg: [{ type: Input }], hLgChange: [{ type: Output }], wXl: [{ type: Input }], wXlChange: [{ type: Output }], hXl: [{ type: Input }], hXlChange: [{ type: Output }], change: [{ type: Output }], start: [{ type: Output }], end: [{ type: Output }], dragAndDrop: [{ type: Input }], resizable: [{ type: Input }], options: [{ type: Input }], isDragging: [{ type: HostBinding, args: ['class.is-dragging'] }], isResizing: [{ type: HostBinding, args: ['class.is-resizing'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMmdyaWRzdGVydjMvc3JjL2xpYi9ncmlkc3Rlci1pdGVtL2dyaWRzdGVyLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBUSxLQUFLLEVBQUUsTUFBTSxFQUMvRCxZQUFZLEVBQXVDLFdBQVcsRUFDOUQsdUJBQXVCLEVBQXlCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzdGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUE4SHZDLE1BQU0sT0FBTyxxQkFBcUI7SUFzRzlCLFlBQW9CLElBQVksRUFDWix3QkFBa0QsRUFDdEMsVUFBc0IsRUFDakIsUUFBeUI7UUFIMUMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFyRzVELFlBQU8sR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUV6QyxZQUFPLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFDLENBQUM7UUFHekMsY0FBUyxHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBRTNDLGNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUczQyxjQUFTLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFD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