@blare/angular2gridster
Version:
[](https://badge.fury.io/js/angular2gridster)
825 lines • 76.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { GridList } from './gridList/gridList';
var GridsterService = /** @class */ (function () {
function GridsterService() {
var _this = this;
this.items = [];
this._items = [];
this._itemsMap = {};
this.disabledItems = [];
this.debounceRenderSubject = new Subject();
this.itemRemoveSubject = new Subject();
this.isInit = false;
this.itemRemoveSubject.pipe(debounceTime(0)).subscribe(function () {
_this.gridList.pullItemsToLeft();
_this.render();
_this.updateCachedItems();
});
this.debounceRenderSubject.pipe(debounceTime(0)).subscribe(function () { return _this.render(); });
}
/**
* @return {?}
*/
GridsterService.prototype.isInitialized = /**
* @return {?}
*/
function () {
return this.isInit;
};
/**
* Must be called before init
* @param item
*/
/**
* Must be called before init
* @param {?} item
* @return {?}
*/
GridsterService.prototype.registerItem = /**
* Must be called before init
* @param {?} item
* @return {?}
*/
function (item) {
this.items.push(item);
return item;
};
/**
* @param {?} gridsterComponent
* @return {?}
*/
GridsterService.prototype.init = /**
* @param {?} gridsterComponent
* @return {?}
*/
function (gridsterComponent) {
this.gridsterComponent = gridsterComponent;
this.draggableOptions = gridsterComponent.draggableOptions;
this.gridsterOptions = gridsterComponent.gridsterOptions;
};
/**
* @return {?}
*/
GridsterService.prototype.start = /**
* @return {?}
*/
function () {
var _this = this;
this.updateMaxItemSize();
// Used to highlight a position an element will land on upon drop
if (this.$positionHighlight) {
this.removePositionHighlight();
}
this.initGridList();
this.isInit = true;
setTimeout(function () {
_this.copyItems();
_this.fixItemsPositions();
_this.gridsterComponent.reflowGridster(true);
_this.gridsterComponent.setReady();
});
};
/**
* @return {?}
*/
GridsterService.prototype.initGridList = /**
* @return {?}
*/
function () {
// Create instance of GridList (decoupled lib for handling the grid
// positioning and sorting post-drag and dropping)
this.gridList = new GridList(this.items, this.options);
};
/**
* @return {?}
*/
GridsterService.prototype.render = /**
* @return {?}
*/
function () {
this.updateMaxItemSize();
this.gridList.generateGrid();
this.applySizeToItems();
this.applyPositionToItems();
this.refreshLines();
};
/**
* @return {?}
*/
GridsterService.prototype.reflow = /**
* @return {?}
*/
function () {
this.calculateCellSize();
this.render();
};
/**
* @return {?}
*/
GridsterService.prototype.fixItemsPositions = /**
* @return {?}
*/
function () {
var _this = this;
if (this.options.responsiveSizes) {
this.gridList.fixItemsPositions(this.options);
}
else {
this.gridList.fixItemsPositions(this.gridsterOptions.basicOptions);
this.gridsterOptions.responsiveOptions.forEach(function (options) {
_this.gridList.fixItemsPositions(options);
});
}
this.updateCachedItems();
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.removeItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var idx = this.items.indexOf(item);
if (idx >= 0) {
this.items.splice(this.items.indexOf(item), 1);
}
this.gridList.deleteItemPositionFromGrid(item);
this.removeItemFromCache(item);
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onResizeStart = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.currentElement = item.$element;
this.copyItems();
this._maxGridCols = this.gridList.grid.length;
this.highlightPositionForItem(item);
this.gridsterComponent.isResizing = true;
this.refreshLines();
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onResizeDrag = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var newSize = this.snapItemSizeToGrid(item);
/** @type {?} */
var sizeChanged = this.dragSizeChanged(newSize);
/** @type {?} */
var newPosition = this.snapItemPositionToGrid(item);
/** @type {?} */
var positionChanged = this.dragPositionChanged(newPosition);
if (sizeChanged || positionChanged) {
// Regenerate the grid with the positions from when the drag started
this.restoreCachedItems();
this.gridList.generateGrid();
this.previousDragPosition = newPosition;
this.previousDragSize = newSize;
this.gridList.moveAndResize(item, newPosition, { w: newSize[0], h: newSize[1] });
// Visually update item positions and highlight shape
this.applyPositionToItems(true);
this.highlightPositionForItem(item);
}
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onResizeStop = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.currentElement = undefined;
this.updateCachedItems();
this.previousDragSize = null;
this.removePositionHighlight();
this.gridsterComponent.isResizing = false;
this.gridList.pullItemsToLeft(item);
this.debounceRenderSubject.next();
this.fixItemsPositions();
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onStart = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.currentElement = item.$element;
// itemCtrl.isDragging = true;
// Create a deep copy of the items; we use them to revert the item
// positions after each drag change, making an entire drag operation less
// distructable
this.copyItems();
// Since dragging actually alters the grid, we need to establish the number
// of cols (+1 extra) before the drag starts
this._maxGridCols = this.gridList.grid.length;
this.gridsterComponent.isDragging = true;
this.gridsterComponent.updateGridsterElementData();
this.refreshLines();
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onDrag = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var newPosition = this.snapItemPositionToGrid(item);
if (this.dragPositionChanged(newPosition)) {
// Regenerate the grid with the positions from when the drag started
this.restoreCachedItems();
this.gridList.generateGrid();
this.previousDragPosition = newPosition;
if (this.options.direction === 'none' &&
!this.gridList.checkItemAboveEmptyArea(item, { x: newPosition[0], y: newPosition[1] })) {
return;
}
// Since the items list is a deep copy, we need to fetch the item
// corresponding to this drag action again
this.gridList.moveItemToPosition(item, newPosition);
// Visually update item positions and highlight shape
this.applyPositionToItems(true);
this.highlightPositionForItem(item);
}
};
/**
* @return {?}
*/
GridsterService.prototype.cancel = /**
* @return {?}
*/
function () {
this.restoreCachedItems();
this.previousDragPosition = null;
this.updateMaxItemSize();
this.applyPositionToItems();
this.removePositionHighlight();
this.currentElement = undefined;
this.gridsterComponent.isDragging = false;
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onDragOut = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.cancel();
/** @type {?} */
var idx = this.items.indexOf(item);
if (idx >= 0) {
this.items.splice(idx, 1);
}
this.gridList.pullItemsToLeft();
this.render();
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.onStop = /**
* @param {?} item
* @return {?}
*/
function (item) {
this.currentElement = undefined;
this.updateCachedItems();
this.previousDragPosition = null;
this.removePositionHighlight();
this.gridList.pullItemsToLeft(item);
this.gridsterComponent.isDragging = false;
this.refreshLines();
};
/**
* @return {?}
*/
GridsterService.prototype.calculateCellSize = /**
* @return {?}
*/
function () {
if (this.options.direction === 'horizontal') {
this.cellHeight = this.calculateCellHeight();
this.cellWidth = this.options.cellWidth || this.cellHeight * this.options.widthHeightRatio;
}
else {
this.cellWidth = this.calculateCellWidth();
this.cellHeight = this.options.cellHeight || this.cellWidth / this.options.widthHeightRatio;
}
if (this.options.heightToFontSizeRatio) {
this._fontSize = this.cellHeight * this.options.heightToFontSizeRatio;
}
};
/**
* @param {?=} increaseGridsterSize
* @return {?}
*/
GridsterService.prototype.applyPositionToItems = /**
* @param {?=} increaseGridsterSize
* @return {?}
*/
function (increaseGridsterSize) {
if (!this.options.shrink) {
increaseGridsterSize = true;
}
// TODO: Implement group separators
for (var i = 0; i < this.items.length; i++) {
// Don't interfere with the positions of the dragged items
if (this.isCurrentElement(this.items[i].$element)) {
continue;
}
this.items[i].applyPosition(this);
}
/** @type {?} */
var child = (/** @type {?} */ (this.gridsterComponent.$element.firstChild));
// Update the width of the entire grid container with enough room on the
// right to allow dragging items to the end of the grid.
if (this.options.direction === 'horizontal') {
/** @type {?} */
var increaseWidthWith = (increaseGridsterSize) ? this.maxItemWidth : 0;
child.style.height = '';
child.style.width = ((this.gridList.grid.length + increaseWidthWith) * this.cellWidth) + 'px';
}
else if (this.gridList.grid.length) {
/** @type {?} */
var increaseHeightWith = (increaseGridsterSize) ? this.maxItemHeight : 0;
child.style.height = ((this.gridList.grid.length + increaseHeightWith) * this.cellHeight) + 'px';
child.style.width = '';
}
};
/**
* @return {?}
*/
GridsterService.prototype.refreshLines = /**
* @return {?}
*/
function () {
/** @type {?} */
var gridsterContainer = (/** @type {?} */ (this.gridsterComponent.$element.firstChild));
if (this.options.lines && this.options.lines.visible &&
(this.gridsterComponent.isDragging || this.gridsterComponent.isResizing || this.options.lines.always)) {
/** @type {?} */
var linesColor = this.options.lines.color || '#d8d8d8';
/** @type {?} */
var linesBgColor = this.options.lines.backgroundColor || 'transparent';
/** @type {?} */
var linesWidth = this.options.lines.width || 1;
/** @type {?} */
var bgPosition = linesWidth / 2;
gridsterContainer.style.backgroundSize = this.cellWidth + "px " + this.cellHeight + "px";
gridsterContainer.style.backgroundPosition = "-" + bgPosition + "px -" + bgPosition + "px";
gridsterContainer.style.backgroundImage = "\n linear-gradient(to right, " + linesColor + " " + linesWidth + "px, " + linesBgColor + " " + linesWidth + "px),\n linear-gradient(to bottom, " + linesColor + " " + linesWidth + "px, " + linesBgColor + " " + linesWidth + "px)\n ";
}
else {
gridsterContainer.style.backgroundSize = '';
gridsterContainer.style.backgroundPosition = '';
gridsterContainer.style.backgroundImage = '';
}
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.removeItemFromCache = /**
* @param {?} item
* @return {?}
*/
function (item) {
var _this = this;
this._items = this._items
.filter(function (cachedItem) { return cachedItem.$element !== item.$element; });
Object.keys(this._itemsMap)
.forEach(function (breakpoint) {
_this._itemsMap[breakpoint] = _this._itemsMap[breakpoint]
.filter(function (cachedItem) { return cachedItem.$element !== item.$element; });
});
};
/**
* @return {?}
*/
GridsterService.prototype.copyItems = /**
* @return {?}
*/
function () {
var _this = this;
this._items = this.items
.filter(function (item) { return _this.isValidGridItem(item); })
.map(function (item) {
return item.copyForBreakpoint(null);
});
this.gridsterOptions.responsiveOptions.forEach(function (options) {
_this._itemsMap[options.breakpoint] = _this.items
.filter(function (item) { return _this.isValidGridItem(item); })
.map(function (item) {
return item.copyForBreakpoint(options.breakpoint);
});
});
};
/**
* Update maxItemWidth and maxItemHeight vales according to current state of items
*/
/**
* Update maxItemWidth and maxItemHeight vales according to current state of items
* @return {?}
*/
GridsterService.prototype.updateMaxItemSize = /**
* Update maxItemWidth and maxItemHeight vales according to current state of items
* @return {?}
*/
function () {
this.maxItemWidth = Math.max.apply(null, this.items.map(function (item) {
return item.w;
}));
this.maxItemHeight = Math.max.apply(null, this.items.map(function (item) {
return item.h;
}));
};
/**
* Update items properties of previously cached items
*/
/**
* Update items properties of previously cached items
* @return {?}
*/
GridsterService.prototype.restoreCachedItems = /**
* Update items properties of previously cached items
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var items = this.options.breakpoint ? this._itemsMap[this.options.breakpoint] : this._items;
this.items
.filter(function (item) { return _this.isValidGridItem(item); })
.forEach(function (item) {
/** @type {?} */
var cachedItem = items.filter(function (cachedItm) {
return cachedItm.$element === item.$element;
})[0];
item.x = cachedItem.x;
item.y = cachedItem.y;
item.w = cachedItem.w;
item.h = cachedItem.h;
item.autoSize = cachedItem.autoSize;
});
};
/**
* If item should react on grid
* @param GridListItem item
* @returns boolean
*/
/**
* If item should react on grid
* @param {?} item
* @return {?} boolean
*/
GridsterService.prototype.isValidGridItem = /**
* If item should react on grid
* @param {?} item
* @return {?} boolean
*/
function (item) {
if (this.options.direction === 'none') {
return !!item.itemComponent;
}
return true;
};
/**
* @return {?}
*/
GridsterService.prototype.calculateCellWidth = /**
* @return {?}
*/
function () {
/** @type {?} */
var gridsterWidth = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).width);
return Math.floor(gridsterWidth / this.options.lanes);
};
/**
* @return {?}
*/
GridsterService.prototype.calculateCellHeight = /**
* @return {?}
*/
function () {
/** @type {?} */
var gridsterHeight = parseFloat(window.getComputedStyle(this.gridsterComponent.$element).height);
return Math.floor(gridsterHeight / this.options.lanes);
};
/**
* @return {?}
*/
GridsterService.prototype.applySizeToItems = /**
* @return {?}
*/
function () {
for (var i = 0; i < this.items.length; i++) {
this.items[i].applySize();
if (this.options.heightToFontSizeRatio) {
this.items[i].$element.style['font-size'] = this._fontSize;
}
}
};
/**
* @param {?} element
* @return {?}
*/
GridsterService.prototype.isCurrentElement = /**
* @param {?} element
* @return {?}
*/
function (element) {
if (!this.currentElement) {
return false;
}
return element === this.currentElement;
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.snapItemSizeToGrid = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var itemSize = {
width: parseInt(item.$element.style.width, 10) - 1,
height: parseInt(item.$element.style.height, 10) - 1
};
/** @type {?} */
var colSize = Math.round(itemSize.width / this.cellWidth);
/** @type {?} */
var rowSize = Math.round(itemSize.height / this.cellHeight);
// Keep item minimum 1
colSize = Math.max(colSize, 1);
rowSize = Math.max(rowSize, 1);
// check if element is pinned
if (this.gridList.isOverFixedArea(item.x, item.y, colSize, rowSize, item)) {
return [item.w, item.h];
}
return [colSize, rowSize];
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.generateItemPosition = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var position;
if (item.itemPrototype) {
/** @type {?} */
var coords = item.itemPrototype.getPositionToGridster(this);
position = {
x: Math.round(coords.x / this.cellWidth),
y: Math.round(coords.y / this.cellHeight)
};
}
else {
position = {
x: Math.round(item.positionX / this.cellWidth),
y: Math.round(item.positionY / this.cellHeight)
};
}
return position;
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.snapItemPositionToGrid = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var position = this.generateItemPosition(item);
/** @type {?} */
var col = position.x;
/** @type {?} */
var row = position.y;
// Keep item position within the grid and don't let the item create more
// than one extra column
col = Math.max(col, 0);
row = Math.max(row, 0);
if (this.options.direction === 'horizontal') {
col = Math.min(col, this._maxGridCols);
}
else {
col = Math.min(col, Math.max(0, this.options.lanes - item.w));
}
// check if element is pinned
if (this.gridList.isOverFixedArea(col, row, item.w, item.h)) {
return [item.x, item.y];
}
return [col, row];
};
/**
* @param {?} newSize
* @return {?}
*/
GridsterService.prototype.dragSizeChanged = /**
* @param {?} newSize
* @return {?}
*/
function (newSize) {
if (!this.previousDragSize) {
return true;
}
return (newSize[0] !== this.previousDragSize[0] ||
newSize[1] !== this.previousDragSize[1]);
};
/**
* @param {?} newPosition
* @return {?}
*/
GridsterService.prototype.dragPositionChanged = /**
* @param {?} newPosition
* @return {?}
*/
function (newPosition) {
if (!this.previousDragPosition) {
return true;
}
return (newPosition[0] !== this.previousDragPosition[0] ||
newPosition[1] !== this.previousDragPosition[1]);
};
/**
* @param {?} item
* @return {?}
*/
GridsterService.prototype.highlightPositionForItem = /**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var size = item.calculateSize(this);
/** @type {?} */
var position = item.calculatePosition(this);
this.$positionHighlight.style.width = size.width + 'px';
this.$positionHighlight.style.height = size.height + 'px';
this.$positionHighlight.style.left = position.left + 'px';
this.$positionHighlight.style.top = position.top + 'px';
this.$positionHighlight.style.display = '';
if (this.options.heightToFontSizeRatio) {
this.$positionHighlight.style['font-size'] = this._fontSize;
}
};
/**
* @return {?}
*/
GridsterService.prototype.updateCachedItems = /**
* @return {?}
*/
function () {
var _this = this;
// Notify the user with the items that changed since the previous snapshot
this.triggerOnChange(null);
this.gridsterOptions.responsiveOptions.forEach(function (options) {
_this.triggerOnChange(options.breakpoint);
});
this.copyItems();
};
/**
* @param {?=} breakpoint
* @return {?}
*/
GridsterService.prototype.triggerOnChange = /**
* @param {?=} breakpoint
* @return {?}
*/
function (breakpoint) {
/** @type {?} */
var items = breakpoint ? this._itemsMap[breakpoint] : this._items;
/** @type {?} */
var changeItems = this.gridList.getChangedItems(items || [], breakpoint);
changeItems
.filter(function (itemChange) {
return itemChange.item.itemComponent;
})
.forEach(function (itemChange) {
if (itemChange.changes.indexOf('x') >= 0) {
itemChange.item.triggerChangeX(breakpoint);
}
if (itemChange.changes.indexOf('y') >= 0) {
itemChange.item.triggerChangeY(breakpoint);
}
if (itemChange.changes.indexOf('w') >= 0) {
itemChange.item.triggerChangeW(breakpoint);
}
if (itemChange.changes.indexOf('h') >= 0) {
itemChange.item.triggerChangeH(breakpoint);
}
// should be called only once (not for each breakpoint)
itemChange.item.itemComponent.change.emit({
item: itemChange.item,
oldValues: itemChange.oldValues || {},
isNew: itemChange.isNew,
changes: itemChange.changes,
breakpoint: breakpoint
});
});
};
/**
* @return {?}
*/
GridsterService.prototype.removePositionHighlight = /**
* @return {?}
*/
function () {
this.$positionHighlight.style.display = 'none';
};
GridsterService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
GridsterService.ctorParameters = function () { return []; };
return GridsterService;
}());
export { GridsterService };
if (false) {
/** @type {?} */
GridsterService.prototype.$element;
/** @type {?} */
GridsterService.prototype.gridList;
/** @type {?} */
GridsterService.prototype.items;
/** @type {?} */
GridsterService.prototype._items;
/** @type {?} */
GridsterService.prototype._itemsMap;
/** @type {?} */
GridsterService.prototype.disabledItems;
/** @type {?} */
GridsterService.prototype.options;
/** @type {?} */
GridsterService.prototype.draggableOptions;
/** @type {?} */
GridsterService.prototype.gridsterRect;
/** @type {?} */
GridsterService.prototype.gridsterScrollData;
/** @type {?} */
GridsterService.prototype.gridsterOptions;
/** @type {?} */
GridsterService.prototype.gridsterComponent;
/** @type {?} */
GridsterService.prototype.debounceRenderSubject;
/** @type {?} */
GridsterService.prototype.$positionHighlight;
/** @type {?} */
GridsterService.prototype.maxItemWidth;
/** @type {?} */
GridsterService.prototype.maxItemHeight;
/** @type {?} */
GridsterService.prototype.cellWidth;
/** @type {?} */
GridsterService.prototype.cellHeight;
/** @type {?} */
GridsterService.prototype.itemRemoveSubject;
/** @type {?} */
GridsterService.prototype._fontSize;
/** @type {?} */
GridsterService.prototype.previousDragPosition;
/** @type {?} */
GridsterService.prototype.previousDragSize;
/** @type {?} */
GridsterService.prototype.currentElement;
/** @type {?} */
GridsterService.prototype._maxGridCols;
/** @type {?} */
GridsterService.prototype.isInit;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BibGFyZS9hbmd1bGFyMmdyaWRzdGVyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTy9DO0lBNENJO1FBQUEsaUJBUUM7UUE5Q0QsVUFBSyxHQUF3QixFQUFFLENBQUM7UUFDaEMsV0FBTSxHQUF3QixFQUFFLENBQUM7UUFDakMsY0FBUyxHQUFrRCxFQUFFLENBQUM7UUFDOUQsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBWXhDLDBCQUFxQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFVL0Isc0JBQWlCLEdBQTBCLElBQUksT0FBTyxFQUFFLENBQUM7UUFXeEQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUduQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxLQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLEtBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLEVBQUUsRUFBYixDQUFhLENBQUMsQ0FBQztJQUNwRixDQUFDOzs7O0lB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Q0FBd0M7O0lBRXhDLHlDQUFvQzs7SUFFcEMsdUNBQTZCOztJQUU3QixpQ0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEdyaWRMaXN0IH0gZnJvbSAnLi9ncmlkTGlzdC9ncmlkTGlzdCc7XG5pbXBvcnQgeyBJR3JpZHN0ZXJPcHRpb25zIH0gZnJvbSAnLi9JR3JpZHN0ZXJPcHRpb25zJztcbmltcG9ydCB7IElHcmlkc3RlckRyYWdnYWJsZU9wdGlvbnMgfSBmcm9tICcuL0lHcmlkc3RlckRyYWdnYWJsZU9wdGlvbnMnO1xuaW1wb3J0IHsgR3JpZExpc3RJdGVtIH0gZnJvbSAnLi9ncmlkTGlzdC9HcmlkTGlzdEl0ZW0nO1xuaW1wb3J0IHsgR3JpZHN0ZXJDb21wb25lbnQgfSBmcm9tICcuL2dyaWRzdGVyLmNvbXBvbmV