@rybos/angular2gridster
Version:
[](https://badge.fury.io/js/angular2gridster)
613 lines • 98 kB
JavaScript
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(null);
}
}
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(null);
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: "15.1.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: "14.0.0", version: "15.1.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: "15.1.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>`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, 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"] }]
}], 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMmdyaWRzdGVyL3NyYy9saWIvZ3JpZHN0ZXItaXRlbS9ncmlkc3Rlci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFVBQVUsRUFBRSxNQUFNLEVBQVEsS0FBSyxFQUFFLE1BQU0sRUFDL0QsWUFBWSxFQUF1QyxXQUFXLEVBQzlELHVCQUF1QixFQUF5QixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBOEh2QyxNQUFNLE9BQU8scUJBQXFCO0lBc0c5QixZQUFvQixJQUFZLEVBQ1osd0JBQWtELEVBQ3RDLFVBQXNCLEVBQ2pCLFFBQXlCO1FBSDFDLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBckc1RCxZQUFPLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFDLENBQUM7UUFFekMsWUFBTyxHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBR3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBUyxJQUFJLENBQUMsQ0FBQztRQUUzQyxjQUFTLEdBQUcsSUFBSSxZQUFZLENBQVMsSUFBSSxDQUFDLENBQUM7UUFHM0MsY0FBUyxHQUFHLElBQUksWUFBWSxDQUFTLElBQUksQ0FBQyxD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LE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQzdDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEMsSUFB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