UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

1,079 lines (1,078 loc) 110 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, EventEmitter, Output } from '@angular/core'; import { I18N, Option } from '../../decorator/decorators'; import { Draggable } from '../../directive/Draggable.directive'; import { DefaultTableRow } from './DefaultTableRow.component'; import { NeedFocusService } from '../../service/NeedFocusService.service'; const /** @type {?} */ TYPE_NAME = "phx-expandable-table-row"; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_ENABLED = true; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_DELAY = 600; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_EFFECT_CLASS = 'auto-expand'; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_EFFECT_DURATION = 300; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_ON_LEAVE = true; const /** @type {?} */ DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_DELAY = 600; const /** @type {?} */ DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS = 'move-out'; const /** @type {?} */ DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION = 300; const /** @type {?} */ DEFAULT_DRAG_EFFECT_MOVE_IN_CLASS = 'move-in'; const /** @type {?} */ DEFAULT_DRAG_EFFECT_MOVE_IN_DURATION = 2000; export class ExpandableTableRow extends DefaultTableRow { /** * @param {?} elRef * @param {?} needFocusService */ constructor(elRef, needFocusService) { super(elRef, needFocusService); this.showing = true; this.autoExpanding = false; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); // Set default option values if (this.dragAutoExpandEnabled === null || typeof this.dragAutoExpandEnabled === 'undefined') { this.dragAutoExpandEnabled = DEFAULT_DRAG_AUTO_EXPAND_ENABLED; } if (this.dragAutoExpandDelay === null || typeof this.dragAutoExpandDelay === 'undefined') { this.dragAutoExpandDelay = DEFAULT_DRAG_AUTO_EXPAND_DELAY; } if (this.dragAutoExpandEffectClass === null || typeof this.dragAutoExpandEffectClass === 'undefined') { this.dragAutoExpandEffectClass = DEFAULT_DRAG_AUTO_EXPAND_EFFECT_CLASS; } if (this.dragAutoExpandEffectDuration === null || typeof this.dragAutoExpandEffectDuration === 'undefined') { this.dragAutoExpandEffectDuration = DEFAULT_DRAG_AUTO_EXPAND_EFFECT_DURATION; } if (this.dragAutoExpandContractOnLeave === null || typeof this.dragAutoExpandContractOnLeave === 'undefined') { this.dragAutoExpandContractOnLeave = DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_ON_LEAVE; } if (this.dragAutoExpandContractDelay === null || typeof this.dragAutoExpandContractDelay === 'undefined') { this.dragAutoExpandContractDelay = DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_DELAY; } if (this.dragEffectMoveOutClass === null || typeof this.dragEffectMoveOutClass === 'undefined') { this.dragEffectMoveOutClass = DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS; } if (this.dragEffectMoveOutDuration === null || typeof this.dragEffectMoveOutDuration === 'undefined') { this.dragEffectMoveOutDuration = DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION; } if (this.dragEffectMoveInClass === null || typeof this.dragEffectMoveInClass === 'undefined') { this.dragEffectMoveInClass = DEFAULT_DRAG_EFFECT_MOVE_IN_CLASS; } if (this.dragEffectMoveInDuration === null || typeof this.dragEffectMoveInDuration === 'undefined') { this.dragEffectMoveInDuration = DEFAULT_DRAG_EFFECT_MOVE_IN_DURATION; } this._initialParentConroller = this.getParent(); this._init(); } /** * @return {?} */ _init() { // Check that it should be shown or not by checking its ascendants, if one of its ascendants is // not expanding, so, this node should be hidden. let /** @type {?} */ parent = this.controller.getParent(); while (parent !== null && typeof parent !== 'undefined') { if (!parent.isExpanding()) { // It should be hidden this.setShowing(false); break; } parent = parent.getParent(); } // Check that its descendants should be shown or not by checking that this node is being expanded // or not, if not, all of its descendants should be hidden. if (!this.isExpanding()) { this.contract(); } // See that its parent or one of its ancestors' parent has been changed or not. // If yes, it means that this node is being moved or relocated. // So, play move-in effect. if (this._isBeingRelocated()) { this.playMoveInEffect(); } } /** * @return {?} */ _isBeingRelocated() { // This method will return true if this node is being relocated. // (Its position in entire tree is being changed) // Meaning that its parent or one of its ascendants' parent is being changed. // Check that this node's parent is being changed or not let /** @type {?} */ oldState = this.getOldState(); if (oldState !== null && typeof oldState !== 'undefined') { let /** @type {?} */ oldParentData = null; if (oldState.getComponentInstance() !== null && typeof oldState.getComponentInstance() !== 'undefined') { // If there is a component instance, obtain old parent data from the // component itself directly. if (oldState.getComponentInstance()['_initialParentConroller'] !== null && typeof oldState.getComponentInstance()['_initialParentConroller'] !== 'undefined') { oldParentData = oldState.getComponentInstance()['_initialParentConroller'].getData(); } } else { if (oldState.getParent() !== null && typeof oldState.getParent() !== 'undefined') { oldParentData = oldState.getParent().getData(); } } let /** @type {?} */ newParentData = null; if (this.getParent() !== null && typeof this.getParent() !== 'undefined') { newParentData = this.getParent().getData(); } if (this.table.getRowGenerator().compareRowData(newParentData, oldParentData) !== 0) { // Its parent is being changed return true; } } // Check for one of its ascendants' parent is being changed or not. if (this.getParent() !== null && typeof this.getParent() !== 'undefined') { if (this.getParent().getComponentInstance() !== null && typeof this.getParent().getComponentInstance() !== 'undefined') { if (typeof this.getParent().getComponentInstance()._isBeingRelocated === 'function') { return this.getParent().getComponentInstance()._isBeingRelocated(); } } } return false; } /** * @param {?} movedRow * @return {?} */ onMoveFrom(movedRow) { } /** * @return {?} */ onMoveToRoot() { } /** * @param {?} show * @return {?} */ setShowing(show) { this.showing = show; if (this.showing) { $(this.elementRef.nativeElement).css('display', ''); } else { $(this.elementRef.nativeElement).css('display', 'none'); } } /** * @return {?} */ isShowing() { return this.showing; } /** * @param {?} className * @param {?=} parentRow * @return {?} */ addStyleClassToDescendants(className, parentRow) { if (parentRow === undefined) { parentRow = /** @type {?} */ (this); } if (!parentRow.getChildren()) { return; } for (let /** @type {?} */ child of parentRow.getChildren()) { if (!child) { continue; } if (child.getComponentInstance() && child.getComponentInstance()['elementRef']) { $(child.getComponentInstance()['elementRef'].nativeElement).addClass(className); } this.addStyleClassToDescendants(className, child); } } /** * @param {?} className * @param {?=} parentRow * @return {?} */ removeStyleClassFromDescendants(className, parentRow) { if (parentRow === undefined) { parentRow = /** @type {?} */ (this); } if (!parentRow.getChildren()) { return; } for (let /** @type {?} */ child of parentRow.getChildren()) { if (!child) { continue; } if (child.getComponentInstance() && child.getComponentInstance()['elementRef']) { $(child.getComponentInstance()['elementRef'].nativeElement).removeClass(className); } this.removeStyleClassFromDescendants(className, child); } } /** * @return {?} */ setAutoExpandContractTimer() { if (!this.autoExpanding) { // We'll auto contract this node if it was auto expanded only. return; } if (this.dragAutoExpandContractTimer !== null && typeof this.dragAutoExpandContractTimer !== 'undefined') { // The timeout is ticking return; } this.dragAutoExpandContractTimer = setTimeout(() => { this.dragAutoExpandContractTimer = null; this._contract(); this.autoExpanding = false; }, this.dragAutoExpandContractDelay); } /** * @return {?} */ cancelAutoExpandContractTimer() { if (this.dragAutoExpandContractTimer !== null && typeof this.dragAutoExpandContractTimer !== 'undefined') { clearTimeout(this.dragAutoExpandContractTimer); this.dragAutoExpandContractTimer = null; } } /** * @return {?} */ _expand() { if (this.controller === null || typeof this.controller === 'undefined') { return; } // Delegate method call to controller this.controller.expand(); } /** * @return {?} */ _contract() { if (this.controller === null || typeof this.controller === 'undefined') { return; } // Delegate method call to controller this.controller.contract(); } /** * @return {?} */ _toggleExpand() { if (this.controller === null || typeof this.controller === 'undefined') { return; } // Delegate method call to controller this.controller.toggleExpand(); } /** * @param {?} expand * @return {?} */ _setExpanding(expand) { if (this.controller === null || typeof this.controller === 'undefined') { return; } // Delegate method call to controller this.controller.setExpanding(expand); } /** * @return {?} */ playMoveInEffect() { // We do not chain playMoveInEffect() into its descendants here (like playMoveOutEffect()). // Since, usually, this method will be called during ngOnInit(), so, its descendants' // componentInstance should not be fully initialized. return new Promise((resolve, reject) => { if (this.dragMoveInEffectTimer !== null && typeof this.dragMoveInEffectTimer !== 'undefined') { clearTimeout(this.dragMoveInEffectTimer); } if (this.dragMoveInEffectResolve !== null && typeof this.dragMoveInEffectResolve !== 'undefined') { this.dragMoveInEffectResolve(false); } // Add move-in style class if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { $(this.elementRef.nativeElement).addClass(this.dragEffectMoveInClass); } this.dragMoveInEffectTimer = setTimeout(() => { try { this.dragMoveInEffectTimer = null; this.dragMoveInEffectResolve = null; // Remove move-in style class if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { $(this.elementRef.nativeElement).removeClass(this.dragEffectMoveInClass); } resolve(true); } catch (/** @type {?} */ e) { reject(e); } }, this.dragEffectMoveInDuration); this.dragMoveInEffectResolve = resolve; }); } /** * @return {?} */ playMoveOutEffect() { let /** @type {?} */ promises = []; promises.push(new Promise((resolve, reject) => { if (this.dragMoveOutEffectTimer !== null && typeof this.dragMoveOutEffectTimer !== 'undefined') { clearTimeout(this.dragMoveOutEffectTimer); } if (this.dragMoveOutEffectResolve !== null && typeof this.dragMoveOutEffectResolve !== 'undefined') { this.dragMoveOutEffectResolve(false); } // Add move-in style class if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { $(this.elementRef.nativeElement).addClass(this.dragEffectMoveOutClass); } this.dragMoveOutEffectTimer = setTimeout(() => { try { this.dragMoveOutEffectTimer = null; this.dragMoveOutEffectResolve = null; // Remove move-in style class if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { $(this.elementRef.nativeElement).removeClass(this.dragEffectMoveOutClass); } resolve(true); } catch (/** @type {?} */ e) { reject(e); } }, this.dragEffectMoveOutDuration); this.dragMoveOutEffectResolve = resolve; })); // Chain this effect into its descendants for (let /** @type {?} */ child of this.getChildren()) { if (child.getComponentInstance() !== null || typeof child.getComponentInstance() !== 'undefined') { if (typeof child.getComponentInstance().playMoveOutEffect === 'function') { promises.push(child.getComponentInstance().playMoveOutEffect()); } } } return Promise.all(promises).then((result) => { if (result !== null && Array.isArray(result) && result.length > 0) { return result[0]; } return false; }); } /** * @param {?} controller * @return {?} */ setController(controller) { // Check that the given "controller" is an instance of ExpandableTableRowController or not? if (controller !== null && typeof controller !== 'undefined') { if (typeof controller['expand'] !== 'function') { throw new Error('The given "controller" is not an instance of IExpandableTableRowController: ' + controller.constructor.name); } } super.setController(controller); } /** * @return {?} */ isAutoExpanding() { return this.autoExpanding; } /** * @return {?} */ getExpandLevel() { let /** @type {?} */ result = 0; if (this.controller !== null && typeof this.controller !== 'undefined') { result = this.controller.getExpandLevel(); } return result; } /** * @return {?} */ expand() { this.autoExpanding = false; this._expand(); } /** * @return {?} */ contract() { this.autoExpanding = false; this._contract(); } /** * @return {?} */ toggleExpand() { this.autoExpanding = false; this._toggleExpand(); } /** * @param {?} expand * @return {?} */ setExpanding(expand) { this.autoExpanding = false; this._setExpanding(expand); } /** * @return {?} */ isExpanding() { if (this.controller === null || typeof this.controller === 'undefined') { return true; } // Delegate method call to controller return this.controller.isExpanding(); } /** * @return {?} */ getParent() { if (this.controller === null || typeof this.controller === 'undefined') { return null; } // Delegate method call to controller return this.controller.getParent(); } /** * @param {?} parent * @return {?} */ setParent(parent) { if (this.controller === null || typeof this.controller === 'undefined') { return; } // Delegate method call to controller if (parent instanceof ExpandableTableRow) { this.controller.setParent((/** @type {?} */ (parent)).getController()); } else { this.controller.setParent(parent); } } /** * @return {?} */ getChildren() { if (this.controller === null || typeof this.controller === 'undefined') { return []; } // Delegate method call to controller return this.controller.getChildren(); } /** * @return {?} */ hasChildren() { if (this.controller === null || typeof this.controller === 'undefined') { return false; } // Delegate method call to controller return this.controller.hasChildren(); } /** * @param {?} child * @return {?} */ hasChild(child) { if (this.controller === null || typeof this.controller === 'undefined') { return false; } // Delegate method call to controller return this.controller.hasChild(child); } /** * @param {?} event * @return {?} */ onDragStart(event) { super.onDragStart(event); // Mark all of its descendants as dragging (add class ".dragging"). this.addStyleClassToDescendants(Draggable.CLASS_NAME_DRAGGING); } /** * @param {?} event * @return {?} */ onDragEnd(event) { super.onDragEnd(event); // Remove .dragging class from its descendants this.removeStyleClassFromDescendants(Draggable.CLASS_NAME_DRAGGING); } /** * @param {?} event * @return {?} */ onDragOver(event) { super.onDragOver(event); if (this.dragAutoExpandEnabled) { if (this.autoExpanding) { // If the mouse was leaved but re-enter this node again before contract delay was reached, // we've to cancel contract dela timer to make this node still open. this.cancelAutoExpandContractTimer(); } // If the mouse was entered into descendant node auto expaned by its ancestors, we've to cancel // auto contract timer from all of its ancestors. if (this.controller !== null && typeof this.controller !== 'undefined') { let /** @type {?} */ parent = this.controller.getParent(); while (parent !== null && typeof parent !== 'undefined') { // If this ancestor is auto expanding, cancel its contract timer. if (parent.getComponentInstance() && typeof parent.getComponentInstance().isAutoExpanding === 'function' && parent.getComponentInstance().isAutoExpanding()) { if (typeof parent.getComponentInstance().cancelAutoExpandContractTimer === 'function') { parent.getComponentInstance().cancelAutoExpandContractTimer(); } } parent = parent.getParent(); } } // We're going to auto expand this row if it is contracting. if (!this.isExpanding() && this.hasChildren()) { // We'll auto expand it if it is not being auto expanded. if (!this.autoExpanding && (this.dragAutoExpandTimer === null || typeof this.dragAutoExpandTimer === 'undefined')) { // Wait for auto expand delay this.dragAutoExpandTimer = setTimeout(() => { this.dragAutoExpandTimer = null; // Mark this node as autoExpanding this.autoExpanding = true; if (this.elementRef !== null && typeof this.elementRef !== 'undefined') { // Play effect (default: blink) $(this.elementRef.nativeElement).addClass(this.dragAutoExpandEffectClass); // Play until duration end then reset it this.dragAutoExpandEffectResetTimer = setTimeout(() => { this.dragAutoExpandEffectResetTimer = null; // Reset effect $(this.elementRef.nativeElement).removeClass(this.dragAutoExpandEffectClass); // Then, auto expand this node this._expand(); }, this.dragAutoExpandEffectDuration); } else { // Auto expand this node immediately (no effect will be played) this._expand(); } }, this.dragAutoExpandDelay); } } } } /** * @param {?} event * @return {?} */ onDragLeave(event) { super.onDragLeave(event); if (this.dragAutoExpandEnabled) { if (this.autoExpanding) { // Auto contract this node after delay timer reached. this.setAutoExpandContractTimer(); } else { // If this node was leaved before auto expand delay timer reached out, cancel it. if (this.dragAutoExpandTimer !== null && typeof this.dragAutoExpandTimer !== 'undefined') { clearTimeout(this.dragAutoExpandTimer); this.dragAutoExpandTimer = null; } } // If this node is descendant of auto expanding ancestors, we've to tell all of its ancestors to // auto contract themselves. if (this.controller !== null && typeof this.controller !== 'undefined') { let /** @type {?} */ parent = this.controller.getParent(); while (parent !== null && typeof parent !== 'undefined') { // If this ancestor is auto expanding, set its auto contract timer. if (parent.getComponentInstance() && typeof parent.getComponentInstance().isAutoExpanding === 'function' && parent.getComponentInstance().isAutoExpanding()) { if (typeof parent.getComponentInstance().setAutoExpandContractTimer === 'function') { parent.getComponentInstance().setAutoExpandContractTimer(); } } parent = parent.getParent(); } } } } /** * @param {?} event * @param {?} data * @return {?} */ onDropAccepted(event, data) { super.onDropAccepted(event, data); // Find dragged row in this table let /** @type {?} */ dragRow = /** @type {?} */ (this.table.findRow(data)); if (dragRow === null || typeof dragRow === 'undefined') { return; } dragRow.getComponentInstance().moveTo(this); } /** * @return {?} */ moveToRoot() { return this.moveTo(null); } /** * @param {?} toRow * @return {?} */ moveTo(toRow) { // Passing "toRow" = null mean moving to ROOT level if (typeof toRow === 'undefined') { toRow = null; } return this.playMoveOutEffect().then((result) => { if (!result) { return false; } // Set new parent to this row // toRow = null means maving to ROOT this.setParent(toRow); if (toRow !== null) { // Trigger onMoveFrom event handler from new parent's sub class toRow.onMoveFrom(this); } else { // Trigger onMoveToRoot event handler from this node's sub class this.onMoveToRoot(); } // Then, re-render the table this.table.rerender(true); return true; }); } /** * @return {?} */ getOldState() { return /** @type {?} */ (super.getOldState()); } } ExpandableTableRow.TYPE_NAME = TYPE_NAME; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_ENABLED = DEFAULT_DRAG_AUTO_EXPAND_ENABLED; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_DELAY = DEFAULT_DRAG_AUTO_EXPAND_DELAY; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_EFFECT_CLASS = DEFAULT_DRAG_AUTO_EXPAND_EFFECT_CLASS; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_EFFECT_DURATION = DEFAULT_DRAG_AUTO_EXPAND_EFFECT_DURATION; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_ON_LEAVE = DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_ON_LEAVE; ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_DELAY = DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_DELAY; ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS = DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS; ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION = DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION; ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_IN_CLASS = DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS; ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_IN_DURATION = DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION; ExpandableTableRow.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<ng-template [ngIf]="getTable() !== undefined"> <div *ngFor="let cell of getTable().getModel().getRowModel().getCellModels(); let idx = index" [style.width]="getTable().getModel().getColumnModels()[idx].getWidth()" [style.max-width]="getTable().getModel().getColumnModels()[idx].getWidth()" [attr.class]="'phx-table-cell' + (cell.getCSSClass() ? ' ' + cell.getCSSClass() : '')" [phxDroppable]="this" (click)="onTableRowCellClicked($event, idx)" (dblclick)="onTableRowCellDblClicked($event, idx)"> <phx-component-wrapper [type]="cell.getComponentType()" [options]="cell.getComponentOptions()" [handler]="_getWrapperHandler(idx)" [dataParent]="this" [data]="getData()" *ngIf="!isCellEditingMode(idx)"> </phx-component-wrapper> <phx-component-wrapper [type]="cell.getEditorComponentType()" [options]="cell.getEditorComponentOptions()" [handler]="_getWrapperHandler(idx)" [dataParent]="this" [data]="getData()" *ngIf="isCellEditingMode(idx)"> </phx-component-wrapper> </div> </ng-template> ` },] }, ]; /** @nocollapse */ ExpandableTableRow.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, ]; ExpandableTableRow.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "help": [{ type: Input },], "dropEffectRejectClass": [{ type: Input },], "dropEffectRejectDuration": [{ type: Input },], "dropDataTransferDropEffect": [{ type: Input },], "dragDataTransferEffectAllowed": [{ type: Input },], "beforeCellClickEvent": [{ type: Output, args: ['phxBeforeCellClick',] },], "beforeCellDblClickEvent": [{ type: Output, args: ['phxBeforeCellDblClick',] },], "beforeCellLostFocusEvent": [{ type: Output, args: ['phxBeforeCellLostFocus',] },], "beforeCellFocusEvent": [{ type: Output, args: ['phxBeforeCellFocus',] },], "cellClickEvent": [{ type: Output, args: ['phxCellClick',] },], "cellDblClickEvent": [{ type: Output, args: ['phxCellDblClick',] },], "cellLostFocusEvent": [{ type: Output, args: ['phxCellLostFocus',] },], "cellFocusEvent": [{ type: Output, args: ['phxCellFocus',] },], "rowDragEvent": [{ type: Output, args: ['phxRowDrag',] },], "rowDragStartEvent": [{ type: Output, args: ['phxRowDragStart',] },], "rowDragEndEvent": [{ type: Output, args: ['phxRowDragEnd',] },], "rowDragEnterEvent": [{ type: Output, args: ['phxRowDragEnter',] },], "rowDragOverEvent": [{ type: Output, args: ['phxRowDragOver',] },], "rowDragLeaveEvent": [{ type: Output, args: ['phxRowDragLeave',] },], "rowDropEvent": [{ type: Output, args: ['phxRowDrop',] },], "rowDropAcceptedEvent": [{ type: Output, args: ['phxRowDropAccepted',] },], "rowDropRejectedEvent": [{ type: Output, args: ['phxRowDropRejected',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "dragAutoExpandEnabled": [{ type: Input },], "dragAutoExpandDelay": [{ type: Input },], "dragAutoExpandEffectClass": [{ type: Input },], "dragAutoExpandEffectDuration": [{ type: Input },], "dragAutoExpandContractOnLeave": [{ type: Input },], "dragAutoExpandContractDelay": [{ type: Input },], "dragEffectMoveOutClass": [{ type: Input },], "dragEffectMoveOutDuration": [{ type: Input },], "dragEffectMoveInClass": [{ type: Input },], "dragEffectMoveInDuration": [{ type: Input },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ExpandableTableRow.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ExpandableTableRow.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ExpandableTableRow.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ExpandableTableRow.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "disabled", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], ExpandableTableRow.prototype, "help", void 0); tslib_1.__decorate([ Option('drop.effect.reject.class'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dropEffectRejectClass", void 0); tslib_1.__decorate([ Option('drop.effect.reject.duration'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dropEffectRejectDuration", void 0); tslib_1.__decorate([ Option('drop.dataTransfer.dropEffect'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dropDataTransferDropEffect", void 0); tslib_1.__decorate([ Option('drag.dataTransfer.effectAllowed'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dragDataTransferEffectAllowed", void 0); tslib_1.__decorate([ Option('beforeCellClick'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "beforeCellClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "beforeCellDblClickEvent", void 0); tslib_1.__decorate([ Option('beforeCellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "beforeCellLostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeCellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "beforeCellFocusEvent", void 0); tslib_1.__decorate([ Option('cellClick'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "cellClickEvent", void 0); tslib_1.__decorate([ Option('cellDblClick'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "cellDblClickEvent", void 0); tslib_1.__decorate([ Option('cellLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "cellLostFocusEvent", void 0); tslib_1.__decorate([ Option('cellFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "cellFocusEvent", void 0); tslib_1.__decorate([ Option('rowDrag'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragEvent", void 0); tslib_1.__decorate([ Option('rowDragStart'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragStartEvent", void 0); tslib_1.__decorate([ Option('rowDragEnd'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragEndEvent", void 0); tslib_1.__decorate([ Option('rowDragEnter'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragEnterEvent", void 0); tslib_1.__decorate([ Option('rowDragOver'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragOverEvent", void 0); tslib_1.__decorate([ Option('rowDragLeave'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDragLeaveEvent", void 0); tslib_1.__decorate([ Option('rowDrop'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDropEvent", void 0); tslib_1.__decorate([ Option('rowDropAccepted'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDropAcceptedEvent", void 0); tslib_1.__decorate([ Option('rowDropRejected'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "rowDropRejectedEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], ExpandableTableRow.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('drag.autoExpand.enabled'), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "dragAutoExpandEnabled", void 0); tslib_1.__decorate([ Option('drag.autoExpand.delay'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dragAutoExpandDelay", void 0); tslib_1.__decorate([ Option('drag.autoExpand.effect.class'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dragAutoExpandEffectClass", void 0); tslib_1.__decorate([ Option('drag.autoExpand.effect.duration'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dragAutoExpandEffectDuration", void 0); tslib_1.__decorate([ Option('drag.autoExpand.contractOnLeave'), tslib_1.__metadata("design:type", Boolean) ], ExpandableTableRow.prototype, "dragAutoExpandContractOnLeave", void 0); tslib_1.__decorate([ Option('drag.autoExpand.contractDelay'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dragAutoExpandContractDelay", void 0); tslib_1.__decorate([ Option('drag.effect.moveOut.class'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dragEffectMoveOutClass", void 0); tslib_1.__decorate([ Option('drag.effect.moveOut.duration'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dragEffectMoveOutDuration", void 0); tslib_1.__decorate([ Option('drag.effect.moveIn.class'), tslib_1.__metadata("design:type", String) ], ExpandableTableRow.prototype, "dragEffectMoveInClass", void 0); tslib_1.__decorate([ Option('drag.effect.moveIn.duration'), tslib_1.__metadata("design:type", Number) ], ExpandableTableRow.prototype, "dragEffectMoveInDuration", void 0); function ExpandableTableRow_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ExpandableTableRow.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ExpandableTableRow.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ExpandableTableRow.propDecorators; /** @type {?} */ ExpandableTableRow.TYPE_NAME; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_ENABLED; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_DELAY; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_EFFECT_CLASS; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_EFFECT_DURATION; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_ON_LEAVE; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_AUTO_EXPAND_CONTRACT_DELAY; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_OUT_CLASS; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_OUT_DURATION; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_IN_CLASS; /** @type {?} */ ExpandableTableRow.DEFAULT_DRAG_EFFECT_MOVE_IN_DURATION; /** @type {?} */ ExpandableTableRow.prototype.dataParent; /** @type {?} */ ExpandableTableRow.prototype.ignoreParentData; /** @type {?} */ ExpandableTableRow.prototype.data; /** @type {?} */ ExpandableTableRow.prototype.ignoreParentDisabled; /** @type {?} */ ExpandableTableRow.prototype.delegateHistory; /** @type {?} */ ExpandableTableRow.prototype.onDisabled; /** @type {?} */ ExpandableTableRow.prototype.onEnabled; /** @type {?} */ ExpandableTableRow.prototype.loadingEnabled; /** @type {?} */ ExpandableTableRow.prototype.i18nKey; /** @type {?} */ ExpandableTableRow.prototype.bypass; /** @type {?} */ ExpandableTableRow.prototype.options; /** @type {?} */ ExpandableTableRow.prototype.disabled; /** @type {?} */ ExpandableTableRow.prototype.help; /** @type {?} */ ExpandableTableRow.prototype.dropEffectRejectClass; /** @type {?} */ ExpandableTableRow.prototype.dropEffectRejectDuration; /** @type {?} */ ExpandableTableRow.prototype.dropDataTransferDropEffect; /** @type {?} */ ExpandableTableRow.prototype.dragDataTransferEffectAllowed; /** @type {?} */ ExpandableTableRow.prototype.beforeCellClickEvent; /** @type {?} */ ExpandableTableRow.prototype.beforeCellDblClickEvent; /** @type {?} */ ExpandableTableRow.prototype.beforeCellLostFocusEvent; /** @type {?} */ ExpandableTableRow.prototype.beforeCellFocusEvent; /** @type {?} */ ExpandableTableRow.prototype.cellClickEvent; /** @type {?} */ ExpandableTableRow.prototype.cellDblClickEvent; /** @type {?} */ ExpandableTableRow.prototype.cellLostFocusEvent; /** @type {?} */ ExpandableTableRow.prototype.cellFocusEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragStartEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragEndEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragEnterEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragOverEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDragLeaveEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDropEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDropAcceptedEvent; /** @type {?} */ ExpandableTableRow.prototype.rowDropRejectedEvent; /** @type {?} */ ExpandableTableRow.prototype.changeEvent; /** @type {?} */ ExpandableTableRow.prototype.beforeChangeEvent; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandEnabled; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandDelay; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandEffectClass; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandEffectDuration; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandContractOnLeave; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandContractDelay; /** @type {?} */ ExpandableTableRow.prototype.dragEffectMoveOutClass; /** @type {?} */ ExpandableTableRow.prototype.dragEffectMoveOutDuration; /** @type {?} */ ExpandableTableRow.prototype.dragEffectMoveInClass; /** @type {?} */ ExpandableTableRow.prototype.dragEffectMoveInDuration; /** @type {?} */ ExpandableTableRow.prototype.controller; /** @type {?} */ ExpandableTableRow.prototype.showing; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandTimer; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandEffectResetTimer; /** @type {?} */ ExpandableTableRow.prototype.dragAutoExpandContractTimer; /** @type {?} */ ExpandableTableRow.prototype.autoExpanding; /** @type {?} */ ExpandableTableRow.prototype.dragMoveOutEffectTimer; /** @type {?} */ ExpandableTableRow.prototype.dragMoveOutEffectResolve; /** @type {?} */ ExpandableTableRow.prototype.dragMoveInEffectTimer; /** @type {?} */ ExpandableTableRow.prototype.dragMoveInEffectResolve; /** @type {?} */ ExpandableTableRow.prototype._initialParentConroller; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwYW5kYWJsZVRhYmxlUm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC90YWJsZS9FeHBhbmRhYmxlVGFibGVSb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSTFFLHVCQUFNLFNBQVMsR0FBVywwQkFBMEIsQ0FBQztBQUVyRCx1QkFBTSxnQ0FBZ0MsR0FBWSxJQUFJLENBQUM7QUFDdkQsdUJBQU0sOEJBQThCLEdBQVcsR0FBRyxDQUFDO0FBQ25ELHVCQUFNLHFDQUFxQyxHQUFXLGFBQWEsQ0FBQztBQUNwRSx1QkFBTSx3Q0FBd0MsR0FBVyxHQUFHLENBQUM7QUFDN0QsdUJBQU0sMENBQTBDLEdBQVksSUFBSSxDQUFDO0FBQ2pFLHVCQUFNLHVDQUF1QyxHQUFXLEdBQUcsQ0FBQztBQUM1RCx1QkFBTSxrQ0FBa0MsR0FBVyxVQUFVLENBQUM7QUFDOUQsdUJBQU0scUNBQXFDLEdBQVcsR0FBRyxDQUFDO0FBQzFELHVCQUFNLGlDQUFpQyxHQUFXLFNBQVMsQ0FBQztBQUM1RCx1QkFBTSxvQ0FBb0MsR0FBVyxJQUFJLENBQUM7QUE2QjFELE1BQU0seUJBQTBCLFNBQVEsZUFBZTs7Ozs7Z0JBMktsQyxLQUFpQixFQUFFLGdCQUFrQztRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Ozs7O0lBSXRCLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7O1FBR2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMscUJBQXFCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUM3RixJQUFJLENBQUMscUJBQXFCLEdBQUcsZ0NBQWdDLENBQUM7U0FDL0Q7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLDhCQUE4QixDQUFDO1NBQzNEO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyx5QkFBeUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxxQ0FBcUMsQ0FBQztTQUN4RTtRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsNEJBQTRCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsd0NBQXdDLENBQUM7U0FDOUU7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLDZCQUE2QixHQUFHLDBDQUEwQyxDQUFDO1NBQ2pGO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQywyQkFBMkIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ3pHLElBQUksQ0FBQywyQkFBMkIsR0FBRyx1Q0FBdUMsQ0FBQztTQUM1RTtRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsc0JBQXNCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsa0NBQWtDLENBQUM7U0FDbEU7UUFDRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckcsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHFDQUFxQyxDQUFDO1NBQ3hFO1FBQ0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxpQ0FBaUMsQ0FBQztTQUNoRTtRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsd0JBQXdCLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsb0NBQW9DLENBQUM7U0FDdEU7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRWhELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7Ozs7SUFHUCxLQUFLOzs7UUFHWCxxQkFBSSxNQUFNLEdBQWtDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEUsT0FBTyxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3hELEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQzs7Z0JBRTFCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXZCLEtBQUssQ0FBQzthQUNQO1lBRUQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUM3Qjs7O1FBSUQsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNqQjs7OztRQUtELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6Qjs7Ozs7SUFHTyxpQkFBaUI7Ozs7O1FBTXpCLHFCQUFJLFFBQVEsR0FBa0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RCxxQkFBSSxhQUFhLEdBQVEsSUFBSSxDQUFDO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7OztnQkFHdkcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUMseUJBQXlCLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQzdKLGFBQWEsR0FBRyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN0RjthQUNGO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksSUFBSSxPQUFPLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO29CQUNqRixhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUNoRDthQUNGO1lBRUQscUJBQUksYUFBYSxHQUFRLElBQUksQ0FBQztZQUM5QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDNUM7WUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRXBGLE1BQU0sQ0FBQyxJQUFJLENBQUM7YUFDYjtTQUNGOztRQUdELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6RSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUN2SCxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BGLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2lCQUNwRTthQUNGO1NBQ0Y7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDO0tBQ2Q7Ozs7O0lBR1MsVUFBVSxDQUFDLFFBQTRCO0tBQ2hEOzs7O0lBR1MsWUFBWTtLQUNyQjs7Ozs7SUFFUyxVQUFVLENBQUMsSUFBYTtRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUVwQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM