angular2gridsterv3
Version:
726 lines (713 loc) • 99.2 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();
}
}
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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