@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
1,142 lines • 116 kB
JavaScript
import { __decorate, __metadata, __read, __spread } from "tslib";
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, TemplateRef, ViewChild, NgZone, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
import { IgxTextHighlightDirective } from '../directives/text-highlight/text-highlight.directive';
import { GridBaseAPIService } from './api.service';
import { getNodeSizeViaRange, ROW_COLLAPSE_KEYS, ROW_EXPAND_KEYS, SUPPORTED_KEYS, NAVIGATION_KEYS, isIE, isLeftClick, PlatformUtil } from '../core/utils';
import { IgxGridSelectionService, ISelectionNode, IgxGridCRUDService } from './selection/selection.service';
import { DeprecateProperty, DeprecateMethod } from '../core/deprecateDecorators';
import { HammerGesturesManager } from '../core/touch';
import { GridSelectionMode } from './common/enums';
/**
* Providing reference to `IgxGridCellComponent`:
* ```typescript
* @ViewChild('grid', { read: IgxGridComponent })
* public grid: IgxGridComponent;
* ```
* ```typescript
* let column = this.grid.columnList.first;
* ```
* ```typescript
* let cell = column.cells[0];
* ```
*/
var IgxGridCellComponent = /** @class */ (function () {
function IgxGridCellComponent(selectionService, crudService, gridAPI, cdr, element, zone, touchManager, platformUtil) {
var _this = this;
this.selectionService = selectionService;
this.crudService = crudService;
this.gridAPI = gridAPI;
this.cdr = cdr;
this.element = element;
this.zone = zone;
this.touchManager = touchManager;
this.platformUtil = platformUtil;
this._vIndex = -1;
/**
* Sets/gets the highlight class of the cell.
* Default value is `"igx-highlight"`.
* ```typescript
* let highlightClass = this.cell.highlightClass;
* ```
* ```typescript
* this.cell.highlightClass = 'igx-cell-highlight';
* ```
* @memberof IgxGridCellComponent
*/
this.highlightClass = 'igx-highlight';
/**
* Sets/gets the active highlight class class of the cell.
* Default value is `"igx-highlight__active"`.
* ```typescript
* let activeHighlightClass = this.cell.activeHighlightClass;
* ```
* ```typescript
* this.cell.activeHighlightClass = 'igx-cell-highlight_active';
* ```
* @memberof IgxGridCellComponent
*/
this.activeHighlightClass = 'igx-highlight__active';
/**
* @hidden
* @internal
*/
this.lastPinned = false;
/**
* Returns whether the cell is in edit mode.
*/
this.editMode = false;
/**
* Sets/get the `tabindex` property of the cell.
* Default value is `0`.
* ```typescript
* this.cell.tabindex = 1;
* ```
* ```typescript
* let cellTabIndex = this.cell.tabindex;
* ```
* @memberof IgxGridCellComponent
*/
this.tabindex = 0;
/**
* Sets/get the `role` property of the cell.
* Default value is `"gridcell"`.
* ```typescript
* this.cell.role = 'grid-cell';
* ```
* ```typescript
* let cellRole = this.cell.role;
* ```
* @memberof IgxGridCellComponent
*/
this.role = 'gridcell';
/**
* Gets the width of the cell.
* ```typescript
* let cellWidth = this.cell.width;
* ```
* @memberof IgxGridCellComponent
*/
this.width = '';
/**
* @hidden
* @internal
*/
this.focused = false;
this.isInCompositionMode = false;
this._cellSelection = GridSelectionMode.multiple;
/**
*
* @hidden
* @internal
*/
this.pointerdown = function (event) {
if (!isLeftClick(event)) {
_this.selectionService.addKeyboardRange();
_this.selectionService.initKeyboardState();
_this.selectionService.primaryButton = false;
return;
}
_this.selectionService.pointerDown(_this.selectionNode, event.shiftKey, event.ctrlKey);
};
/**
*
* @hidden
* @internal
*/
this.pointerenter = function (event) {
var dragMode = _this.selectionService.pointerEnter(_this.selectionNode, event);
if (dragMode) {
_this.grid.cdr.detectChanges();
}
};
/**
* @hidden
* @internal
*/
this.pointerup = function (event) {
if (_this.grid.hasColumnLayouts) {
_this.grid.navigation.setStartNavigationCell(_this.colStart, _this.rowStart, null);
}
if (!isLeftClick(event)) {
return;
}
if (_this.selectionService.pointerUp(_this.selectionNode, _this.grid.onRangeSelection)) {
_this.grid.cdr.detectChanges();
}
_this._updateCRUDStatus();
};
/**
* @hidden
* @internal
*/
this.onDoubleClick = function (event) {
if (event.type === 'doubletap') {
// prevent double-tap to zoom on iOS
event.preventDefault();
}
if (_this.editable && !_this.editMode && !_this.row.deleted) {
_this.crudService.begin(_this);
}
_this.grid.onDoubleClick.emit({
cell: _this,
event: event
});
};
}
Object.defineProperty(IgxGridCellComponent.prototype, "context", {
/**
* Gets the cell template context object.
* ```typescript
* let context = this.cell.context();
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return {
$implicit: this.value,
cell: this
};
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "template", {
/**
* Gets the cell template.
* ```typescript
* let template = this.cell.template;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
if (this.editMode) {
var inlineEditorTemplate = this.column.inlineEditorTemplate;
return inlineEditorTemplate ? inlineEditorTemplate : this.inlineEditorTemplate;
}
if (this.cellTemplate) {
return this.cellTemplate;
}
return this.defaultCellTemplate;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "gridID", {
/**
* Gets the `id` of the grid in which the cell is stored.
* ```typescript
* let gridId = this.cell.gridID;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.row.gridID;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "grid", {
/**
* Gets the grid of the cell.
* ```typescript
* let grid = this.cell.grid;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.gridAPI.grid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "rowIndex", {
/**
* Gets the `index` of the row where the cell is stored.
* ```typescript
* let rowIndex = this.cell.rowIndex;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.row.index;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "columnIndex", {
/**
* Gets the `index` of the cell column.
* ```typescript
* let columnIndex = this.cell.columnIndex;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.column.index;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "visibleColumnIndex", {
/**
* Gets the visible `index` of the in which the cell is stored.
* ```typescript
* let visibleColumnIndex = this.cell.visibleColumnIndex;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.column.columnLayoutChild ? this.column.visibleIndex : this._vIndex;
},
set: function (val) {
this._vIndex = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "cellID", {
/**
* Gets the ID of the cell.
* ```typescript
* let cellID = this.cell.cellID;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
var primaryKey = this.grid.primaryKey;
var rowID = primaryKey ? this.rowData[primaryKey] : this.rowData;
return { rowID: rowID, columnID: this.columnIndex, rowIndex: this.rowIndex };
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "nativeElement", {
/**
* Returns a reference to the nativeElement of the cell.
* ```typescript
* let cellNativeElement = this.cell.nativeElement;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.element.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "inEditMode", {
/**
* @deprecated
* Use `cell.editMode` as a getter and
* `cell.setEditMode(true | false)` to start/exit edit mode.
*
* Gets/sets whether the cell is in edit mode.
* ```typescript
* let isCellInEditMode = this.cell.inEditMode;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.editMode;
},
set: function (value) {
this.setEditMode(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "cellSelectionMode", {
/**
* @hidden
* @internal
*/
get: function () {
return this._cellSelection;
},
set: function (value) {
var _this = this;
if (this._cellSelection === value) {
return;
}
this.zone.runOutsideAngular(function () {
value === GridSelectionMode.multiple ?
_this.addPointerListeners(value) : _this.removePointerListeners(_this._cellSelection);
});
this._cellSelection = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "readonly", {
/**
* Gets whether the cell is editable.
* ```typescript
* let isCellReadonly = this.cell.readonly;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return !this.column.editable;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "gridRowSpan", {
get: function () {
return this.column.gridRowSpan;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "gridColumnSpan", {
get: function () {
return this.column.gridColumnSpan;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "rowEnd", {
get: function () {
return this.column.rowEnd;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "colEnd", {
get: function () {
return this.column.colEnd;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "rowStart", {
get: function () {
return this.column.rowStart;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "colStart", {
get: function () {
return this.column.colStart;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "describedby", {
/**
* Returns a string containing the grid `id` and the column `field` concatenated by "_".
* ```typescript
* let describedBy = this.cell.describedBy;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.row.gridID + "_" + this.column.field;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "selected", {
/**
* Gets whether the cell is selected.
* ```typescript
* let isSelected = this.cell.selected;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
return this.selectionService.selected(this.selectionNode);
},
/**
* Selects/deselects the cell.
* ```typescript
* this.cell.selected = true.
* ```
* @memberof IgxGridCellComponent
*/
set: function (val) {
var node = this.selectionNode;
val ? this.selectionService.add(node) : this.selectionService.remove(node);
this.grid.notifyChanges();
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "dirty", {
get: function () {
if (this.grid.rowEditable) {
var rowCurrentState = this.grid.transactions.getAggregatedValue(this.row.rowID, false);
if (rowCurrentState) {
return rowCurrentState[this.column.field] !== undefined && rowCurrentState[this.column.field] !== null;
}
}
else {
var rowTransaction = this.grid.transactions.getState(this.row.rowID);
return rowTransaction && rowTransaction.value &&
(rowTransaction.value[this.column.field] ||
rowTransaction.value[this.column.field] === 0 ||
rowTransaction.value[this.column.field] === false);
}
return false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "editValue", {
/**
* Gets the current edit value while a cell is in edit mode.
* Only for cell editing mode.
* ```typescript
* let editValue = this.cell.editValue;
* ```
* @memberof IgxGridCellComponent
*/
get: function () {
if (this.crudService.inEditMode) {
return this.crudService.cell.editValue;
}
},
/**
* Sets the current edit value while a cell is in edit mode.
* Only for cell editing mode.
* ```typescript
* this.cell.editValue = value;
* ```
* @memberof IgxGridCellComponent
*/
set: function (value) {
if (this.crudService.inEditMode) {
this.crudService.cell.editValue = value;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "editable", {
/**
* Returns whether the cell is editable.
*/
get: function () {
return this.column.editable;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "highlight", {
get: function () {
return this._highlight;
},
set: function (value) {
this._highlight = value;
if (this._highlight && this.grid.lastSearchInfo.searchText) {
this._highlight.highlight(this.grid.lastSearchInfo.searchText, this.grid.lastSearchInfo.caseSensitive, this.grid.lastSearchInfo.exactMatch);
this._highlight.activateIfNecessary();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridCellComponent.prototype, "selectionNode", {
get: function () {
return {
row: this.rowIndex,
column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,
layout: this.column.columnLayoutChild ? {
rowStart: this.column.rowStart,
colStart: this.column.colStart,
rowEnd: this.column.rowEnd,
colEnd: this.column.colEnd,
columnVisibleIndex: this.visibleColumnIndex
} : null
};
},
enumerable: true,
configurable: true
});
IgxGridCellComponent.prototype.addPointerListeners = function (selection) {
if (selection !== GridSelectionMode.multiple) {
return;
}
this.nativeElement.addEventListener('pointerdown', this.pointerdown);
this.nativeElement.addEventListener('pointerenter', this.pointerenter);
this.nativeElement.addEventListener('pointerup', this.pointerup);
};
IgxGridCellComponent.prototype.removePointerListeners = function (selection) {
if (selection !== GridSelectionMode.multiple) {
return;
}
this.nativeElement.removeEventListener('pointerdown', this.pointerdown);
this.nativeElement.removeEventListener('pointerenter', this.pointerenter);
this.nativeElement.removeEventListener('pointerup', this.pointerup);
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.ngOnInit = function () {
var _this = this;
this.zone.runOutsideAngular(function () {
_this.addPointerListeners(_this.cellSelectionMode);
// IE 11 workarounds
if (isIE()) {
_this.compositionStartHandler = function () { return _this.isInCompositionMode = true; };
_this.compositionEndHandler = function () { return _this.isInCompositionMode = false; };
// Hitting Enter with IME submits and exits from edit mode instead of first closing the IME dialog
_this.nativeElement.addEventListener('compositionstart', _this.compositionStartHandler);
_this.nativeElement.addEventListener('compositionend', _this.compositionEndHandler);
}
});
if (this.platformUtil.isIOS) {
this.touchManager.addEventListener(this.nativeElement, 'doubletap', this.onDoubleClick, {
cssProps: {} /* don't disable user-select, etc */
});
}
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.ngOnDestroy = function () {
var _this = this;
this.zone.runOutsideAngular(function () {
_this.removePointerListeners(_this.cellSelectionMode);
if (isIE()) {
_this.nativeElement.removeEventListener('compositionstart', _this.compositionStartHandler);
_this.nativeElement.removeEventListener('compositionend', _this.compositionEndHandler);
}
});
this.touchManager.destroy();
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype._updateCRUDStatus = function () {
if (this.editMode) {
return;
}
var crud = this.crudService;
var editableCell = this.crudService.cell;
var editMode = !!(crud.row || crud.cell);
if (this.editable && editMode && !this.row.deleted) {
if (editableCell) {
this.gridAPI.update_cell(editableCell, editableCell.editValue);
}
crud.end();
this.grid.notifyChanges();
crud.begin(this);
return;
}
if (editableCell && crud.sameRow(this.cellID.rowID)) {
this.gridAPI.submit_value();
}
else if (editMode && !crud.sameRow(this.cellID.rowID)) {
this.grid.endEdit(true);
}
};
/**
* @deprecated
* Gets whether the cell is selected.
* ```typescript
* let isCellSelected = thid.cell.isCellSelected();
* ```
* @memberof IgxGridCellComponent
*/
IgxGridCellComponent.prototype.isCellSelected = function () {
return this.selectionService.selected(this.selectionNode);
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.ngOnChanges = function (changes) {
if (changes.value && !changes.value.firstChange) {
if (this.highlight) {
this.highlight.lastSearchInfo.searchedText = this.grid.lastSearchInfo.searchText;
this.highlight.lastSearchInfo.caseSensitive = this.grid.lastSearchInfo.caseSensitive;
this.highlight.lastSearchInfo.exactMatch = this.grid.lastSearchInfo.exactMatch;
}
}
};
/**
* Starts/ends edit mode for the cell.
*
* ```typescript
* cell.setEditMode(true);
* ```
*/
IgxGridCellComponent.prototype.setEditMode = function (value) {
if (this.row.deleted) {
return;
}
if (this.editable && value) {
this.gridAPI.submit_value();
this.crudService.begin(this);
}
else {
this.gridAPI.escape_editMode();
}
this.grid.notifyChanges();
};
/**
* Sets new value to the cell.
* ```typescript
* this.cell.update('New Value');
* ```
* @memberof IgxGridCellComponent
*/
// TODO: Refactor
IgxGridCellComponent.prototype.update = function (val) {
if (this.row.deleted) {
return;
}
var cell = this.crudService.createCell(this);
var args = this.gridAPI.update_cell(cell, val);
if (this.crudService.cell && this.crudService.sameCell(cell)) {
if (args.cancel) {
return;
}
this.gridAPI.escape_editMode();
}
this.cdr.markForCheck();
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onClick = function (event) {
this.grid.onCellClick.emit({
cell: this,
event: event
});
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onContextMenu = function (event) {
this.grid.onContextMenu.emit({
cell: this,
event: event
});
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onFocus = function (event) {
if (this.focused) {
return;
}
this.focused = true;
this.row.focused = true;
var node = this.selectionNode;
var shouldEmitSelection = !this.selectionService.isActiveNode(node);
if (this.selectionService.primaryButton) {
this._updateCRUDStatus();
this.selectionService.activeElement = node;
}
else {
this.selectionService.activeElement = null;
if (this.crudService.inEditMode && !this.editMode) {
this.gridAPI.submit_value();
}
}
this.selectionService.primaryButton = true;
if (this.cellSelectionMode === GridSelectionMode.multiple && this.selectionService.activeElement) {
this.selectionService.add(this.selectionService.activeElement, false); // pointer events handle range generation
this.selectionService.keyboardStateOnFocus(node, this.grid.onRangeSelection, this.nativeElement);
}
if (this.grid.isCellSelectable && shouldEmitSelection) {
this.grid.onSelection.emit({ cell: this, event: event });
}
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onBlur = function () {
this.focused = false;
this.row.focused = false;
};
IgxGridCellComponent.prototype.handleAlt = function (key, event) {
if (this.row.nativeElement.tagName.toLowerCase() === 'igx-tree-grid-row' && this.isToggleKey(key)) {
var collapse = this.row.expanded && ROW_COLLAPSE_KEYS.has(key);
var expand = !this.row.expanded && ROW_EXPAND_KEYS.has(key);
if (collapse) {
this.gridAPI.trigger_row_expansion_toggle(this.row.treeRow, !this.row.expanded, event, this.visibleColumnIndex);
}
else if (expand) {
this.gridAPI.trigger_row_expansion_toggle(this.row.treeRow, !this.row.expanded, event, this.visibleColumnIndex);
}
}
else if (this.grid.hasDetails && this.isToggleKey(key)) {
var collapse = this.row.expanded && ROW_COLLAPSE_KEYS.has(key);
var expand = !this.row.expanded && ROW_EXPAND_KEYS.has(key);
var expandedStates = this.grid.expansionStates;
if (expand) {
expandedStates.set(this.row.rowID, true);
}
else if (collapse) {
expandedStates.set(this.row.rowID, false);
}
this.grid.expansionStates = expandedStates;
this.grid.notifyChanges();
}
};
IgxGridCellComponent.prototype.handleTab = function (shift) {
if (shift) {
this.grid.navigation.performShiftTabKey(this.row.nativeElement, this.selectionNode);
}
else {
this.grid.navigation.performTab(this.row.nativeElement, this.selectionNode);
}
};
IgxGridCellComponent.prototype.handleEnd = function (ctrl) {
if (ctrl) {
this.grid.navigation.goToLastCell();
}
else {
this.grid.navigation.onKeydownEnd(this.rowIndex, false, this.rowStart);
}
};
IgxGridCellComponent.prototype.handleHome = function (ctrl) {
if (ctrl) {
this.grid.navigation.goToFirstCell();
}
else {
this.grid.navigation.onKeydownHome(this.rowIndex, false, this.rowStart);
}
};
// TODO: Refactor
/**
*
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.dispatchEvent = function (event) {
var key = event.key.toLowerCase();
var shift = event.shiftKey;
var ctrl = event.ctrlKey;
var node = this.selectionNode;
if (!SUPPORTED_KEYS.has(key)) {
return;
}
event.stopPropagation();
var keydownArgs = { targetType: 'dataCell', target: this, event: event, cancel: false };
this.grid.onGridKeydown.emit(keydownArgs);
if (keydownArgs.cancel) {
this.selectionService.clear();
this.selectionService.keyboardState.active = true;
return;
}
if (event.altKey) {
event.preventDefault();
this.handleAlt(key, event);
return;
}
this.selectionService.keyboardStateOnKeydown(node, shift, shift && key === 'tab');
if (key === 'tab') {
event.preventDefault();
}
if (this.editMode) {
if (NAVIGATION_KEYS.has(key)) {
if (this.column.inlineEditorTemplate) {
return;
}
if (['date', 'boolean'].indexOf(this.column.dataType) > -1) {
return;
}
return;
}
}
if (NAVIGATION_KEYS.has(key)) {
event.preventDefault();
}
switch (key) {
case 'tab':
this.handleTab(shift);
break;
case 'end':
this.handleEnd(ctrl);
break;
case 'home':
this.handleHome(ctrl);
break;
case 'arrowleft':
case 'left':
if (ctrl) {
this.grid.navigation.onKeydownHome(node.row, false, this.rowStart);
break;
}
this.grid.navigation.onKeydownArrowLeft(this.nativeElement, this.selectionNode);
break;
case 'arrowright':
case 'right':
if (ctrl) {
this.grid.navigation.onKeydownEnd(node.row, false, this.rowStart);
break;
}
this.grid.navigation.onKeydownArrowRight(this.nativeElement, this.selectionNode);
break;
case 'arrowup':
case 'up':
if (ctrl) {
this.grid.navigation.navigateTop(this.visibleColumnIndex);
break;
}
this.grid.navigation.navigateUp(this.row.nativeElement, this.selectionNode);
break;
case 'arrowdown':
case 'down':
if (ctrl) {
this.grid.navigation.navigateBottom(this.visibleColumnIndex);
break;
}
this.grid.navigation.navigateDown(this.row.nativeElement, this.selectionNode);
break;
case 'enter':
case 'f2':
this.onKeydownEnterEditMode();
break;
case 'escape':
case 'esc':
this.onKeydownExitEditMode();
break;
case ' ':
case 'spacebar':
case 'space':
if (this.grid.isRowSelectable) {
this.row.selected ? this.selectionService.deselectRow(this.row.rowID, event) :
this.selectionService.selectRowById(this.row.rowID, false, event);
}
break;
default:
return;
}
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onKeydownEnterEditMode = function () {
if (this.isInCompositionMode) {
return;
}
if (this.column.editable && !this.row.deleted) {
if (this.editMode) {
this.grid.endEdit(true);
this.nativeElement.focus();
}
else {
this.crudService.begin(this);
}
}
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.onKeydownExitEditMode = function () {
if (this.isInCompositionMode) {
return;
}
if (this.editMode) {
var args = this.crudService.cell.createEditEventArgs();
this.grid.onCellEditCancel.emit(args);
if (args.cancel) {
return;
}
this.grid.endEdit(false);
this.nativeElement.focus();
}
};
/**
* If the provided string matches the text in the cell, the text gets highlighted.
* ```typescript
* this.cell.highlightText('Cell Value', true);
* ```
* @memberof IgxGridCellComponent
*/
IgxGridCellComponent.prototype.highlightText = function (text, caseSensitive, exactMatch) {
return this.highlight && this.column.searchable ? this.highlight.highlight(text, caseSensitive, exactMatch) : 0;
};
/**
* Clears the highlight of the text in the cell.
* ```typescript
* this.cell.clearHighLight();
* ```
* @memberof IgxGridCellComponent
*/
IgxGridCellComponent.prototype.clearHighlight = function () {
if (this.highlight && this.column.searchable) {
this.highlight.clearHighlight();
}
};
/**
* @hidden
* @internal
*/
IgxGridCellComponent.prototype.calculateSizeToFit = function (range) {
return Math.max.apply(Math, __spread(Array.from(this.nativeElement.children)
.map(function (child) { return getNodeSizeViaRange(range, child); })));
};
IgxGridCellComponent.prototype.isToggleKey = function (key) {
return ROW_COLLAPSE_KEYS.has(key) || ROW_EXPAND_KEYS.has(key);
};
IgxGridCellComponent.ctorParameters = function () { return [
{ type: IgxGridSelectionService },
{ type: IgxGridCRUDService },
{ type: GridBaseAPIService },
{ type: ChangeDetectorRef },
{ type: ElementRef },
{ type: NgZone },
{ type: HammerGesturesManager },
{ type: PlatformUtil }
]; };
__decorate([
Input(),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "column", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "row", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "rowData", void 0);
__decorate([
Input(),
__metadata("design:type", TemplateRef)
], IgxGridCellComponent.prototype, "cellTemplate", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "value", void 0);
__decorate([
Input(),
__metadata("design:type", Function)
], IgxGridCellComponent.prototype, "formatter", void 0);
__decorate([
HostBinding('attr.data-rowIndex'),
__metadata("design:type", Number),
__metadata("design:paramtypes", [])
], IgxGridCellComponent.prototype, "rowIndex", null);
__decorate([
HostBinding('attr.data-visibleIndex'),
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxGridCellComponent.prototype, "visibleColumnIndex", null);
__decorate([
DeprecateProperty("'inEditMode' is deprecated\nUse 'editMode' to get the current state and 'setEditMode(boolean)' as a setter"),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], IgxGridCellComponent.prototype, "inEditMode", null);
__decorate([
Input(),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], IgxGridCellComponent.prototype, "cellSelectionMode", null);
__decorate([
Input(),
HostBinding('class.igx-grid__td--pinned-last'),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "lastPinned", void 0);
__decorate([
Input(),
HostBinding('class.igx-grid__td--editing'),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "editMode", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "tabindex", void 0);
__decorate([
HostBinding('attr.role'),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "role", void 0);
__decorate([
HostBinding('attr.aria-readonly'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxGridCellComponent.prototype, "readonly", null);
__decorate([
HostBinding('attr.aria-describedby'),
__metadata("design:type", String),
__metadata("design:paramtypes", [])
], IgxGridCellComponent.prototype, "describedby", null);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "width", void 0);
__decorate([
HostBinding('attr.aria-selected'),
HostBinding('class.igx-grid__td--selected'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [Boolean])
], IgxGridCellComponent.prototype, "selected", null);
__decorate([
HostBinding('class.igx-grid__td--edited'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxGridCellComponent.prototype, "dirty", null);
__decorate([
HostBinding('class.igx-grid__td--active'),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "focused", void 0);
__decorate([
ViewChild('defaultCell', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxGridCellComponent.prototype, "defaultCellTemplate", void 0);
__decorate([
ViewChild('inlineEditor', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxGridCellComponent.prototype, "inlineEditorTemplate", void 0);
__decorate([
ViewChild(IgxTextHighlightDirective, { read: IgxTextHighlightDirective }),
__metadata("design:type", IgxTextHighlightDirective),
__metadata("design:paramtypes", [IgxTextHighlightDirective])
], IgxGridCellComponent.prototype, "highlight", null);
__decorate([
DeprecateMethod("'isCellSelected' is deprecated. Use 'selected' property instead."),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "isCellSelected", null);
__decorate([
HostListener('dblclick', ['$event']),
__metadata("design:type", Object)
], IgxGridCellComponent.prototype, "onDoubleClick", void 0);
__decorate([
HostListener('click', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [MouseEvent]),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "onClick", null);
__decorate([
HostListener('contextmenu', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [MouseEvent]),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "onContextMenu", null);
__decorate([
HostListener('focus', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [FocusEvent]),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "onFocus", null);
__decorate([
HostListener('blur'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "onBlur", null);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxGridCellComponent.prototype, "dispatchEvent", null);
IgxGridCellComponent = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'igx-grid-cell',
template: "<ng-template #defaultCell>\n <div igxTextHighlight style=\"pointer-events: none\" [cssClass]=\"highlightClass\" [activeCssClass]=\"activeHighlightClass\" [groupName]=\"gridID\"\n [value]=\"formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal: grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value\"\n [row]=\"rowData\" [column]=\"this.column.field\" [containerClass]=\"'igx-grid__td-text'\"\n class=\"igx-grid__td-text\">{{ formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal:\n grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" />\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\"\n [igxFocus]=\"focused\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outletDirective\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [(value)]=\"editValue\" [igxFocus]=\"focused\" [labelVisibility]=\"false\">\n </igx-date-picker>\n </ng-container>\n</ng-template>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n",
providers: [HammerGesturesManager]
}),
__metadata("design:paramtypes", [IgxGridSelectionService,
IgxGridCRUDService,
GridBaseAPIService,
ChangeDetectorRef,
ElementRef,
NgZone,
HammerGesturesManager,
PlatformUtil])
], IgxGridCellComponent);
return IgxGridCellComponent;
}());
export { IgxGridCellComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2NlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGFBQWEsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDbEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDSCxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFDNUgsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQ7Ozs7Ozs7Ozs7OztHQVlHO0FBT0g7SUE2ZUksOEJBQ2MsZ0JBQXlDLEVBQ3pDLFdBQStCLEVBQ2xDLE9BQTRELEVBQzVELEdBQXNCLEVBQ3JCLE9BQW1CLEVBQ2pCLElBQVksRUFDZCxZQUFtQyxFQUNqQyxZQUEwQjtRQVJ4QyxpQkFRNkM7UUFQL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbEMsWUFBTyxHQUFQLE9BQU8sQ0FBcUQ7UUFDNUQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNqQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBcGZoQyxZQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFxRXJCOzs7Ozs7Ozs7O1dBVUc7UUFDSSxtQkFBYyxHQUFHLGVBQWUsQ0FBQztRQUV4Qzs7Ozs7Ozs7OztXQVVHO1FBQ0kseUJBQW9CLEdBQUcsdUJBQXVCLENBQUM7UUF3S3REOzs7V0FHRztRQUdILGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkI7O1dBRUc7UUFHSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCOzs7Ozs7Ozs7O1dBVUc7UUFFSSxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRXBCOzs7Ozs7Ozs7O1dBVUc7UUFFSSxTQUFJLEdBQUcsVUFBVSxDQUFDO1FBbUR6Qjs7Ozs7O1dBTUc7UUFFSCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBaUZYOzs7V0FHRztRQUVJLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFzQ2Isd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBSTlCLG1CQUFjLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1FBcUtwRDs7OztXQUlHO1FBQ0gsZ0JBQVcsR0FBRyxVQUFDLEtBQW1CO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JCLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN6QyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDMUMsS0FBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzVDLE9BQU87YUFDVjtZQUNELEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsS0FBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUE7UUFFRDs7OztXQUlHO1FBQ0gsaUJBQVksR0FBRyxVQUFDLEtBQW1CO1lBQy9CLElBQU0sUUFBUSxHQUFHLEtBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixLQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNqQztRQUNMLENBQUMsQ0FBQTtRQUVEOzs7V0FHRztRQUNILGNBQVMsR0FBRyxVQUFDLEtBQW1CO1lBQzVCLElBQUksS0FBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDNUIsS0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsS0FBSSxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ25GO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFDcEMsSUFBSSxLQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUNqRixLQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNqQztZQUNELEtBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQTtRQUVEOzs7V0FHRztRQUVJLGtCQUFhLEdBQUcsVUFBQyxLQUErQjtZQUNuRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUM1QixvQ0FBb0M7Z0JBQ25DLEtBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDM0M7WUFDRCxJQUFJLEtBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RELEtBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUksQ0FBQyxDQUFDO2FBQ2hDO1lBRUQsS0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsS0FBSTtnQkFDVixLQUFLLE9BQUE7YUFDUixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUE7SUF0TjJDLENBQUM7SUFwWTdDLHNCQUFJLHlDQUFPO1FBUFg7Ozs7OztXQU1HO2FBQ0g7WUFDSSxPQUFPO2dCQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDckIsSUFBSSxFQUFFLElBQUk7YUFDYixDQUFDO1FBQ04sQ0FBQzs7O09BQUE7SUFTRCxzQkFBSSwwQ0FBUTtRQVBaOzs7Ozs7V0FNRzthQUNIO1lBQ0ksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztnQkFDOUQsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQzthQUNsRjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFTRCxzQkFBSSx3Q0FBTTtRQVBWOzs7Ozs7V0FNRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQVNELHNCQUFJLHNDQUFJO1FBUFI7Ozs7OztXQU1HO2FBQ0g7WUFDSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzdCLENBQUM7OztPQUFBO0lBVUQsc0JBQUksMENBQVE7UUFSWjs7Ozs7O1dBTUc7YUFFSDtZQUNJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BQUE7SUFTRCxzQkFBSSw2Q0FBVztRQVBmOzs7Ozs7V0FNRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQVdELHNCQUFJLG9EQUFrQjtRQVR0Qjs7Ozs7O1dBTUc7YUFHSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDbkYsQ0FBQzthQUVELFVBQXVCLEdBQUc7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDdkIsQ0FBQzs7O09BSkE7SUFhRCxzQkFBVyx3Q0FBTTtRQVBqQjs7Ozs7O1dBTUc7YUFDSDtZQUNJLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3hDLElBQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNuRSxPQUFPLEVBQUUsS0FBSyxPQUFBLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRSxDQUFDOzs7T0FBQTtJQVNELHNCQUFJLCtDQUFhO1FBUGpCOzs7Ozs7V0FNRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUN0QyxDQUFDOzs7T0FBQTtJQWNELHNCQUFJLDRDQUFVO1FBWmQ7Ozs7Ozs7Ozs7V0FVRzthQUVIO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7YUFFRCxVQUFlLEtBQWM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDOzs7T0FKQTtJQVdELHNCQUFJLG1EQUFpQjtRQUxyQjs7O1dBR0c7YUFFSDtZQUNJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQixDQUFDO2FBRUQsVUFBc0IsS0FBSztZQUEzQixpQkFPQztZQU5HLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLEVBQUU7Z0JBQUUsT0FBTzthQUFFO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3pCLEtBQUssS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEMsS0FBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3ZGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQzs7O09BVEE7SUE4REQsc0JBQUksMENBQVE7UUFSWjs7Ozs7O1dBTUc7YUFFSDtZQUNJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDZDQUFXO2FBQWY7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ25DLENBQUM7OztPQUFBO0lBRUQsc0JBQUksZ0RBQWM7YUFBbEI7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO1FBQ3RDLENBQUM7OztPQUFBO0lBR0Qsc0JBQUksd0NBQU07YUFBVjtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx3Q0FBTTthQUFWO1lBQ0ksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDBDQUFRO2FBQVo7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2hDLENBQUM7