{"version":3,"file":"calf-ngx-spreadsheet.mjs","sources":["../../../projects/spreadsheet/src/lib/enums/mode.enum.ts","../../../projects/spreadsheet/src/lib/enums/data-type.enum.ts","../../../projects/spreadsheet/src/lib/enums/cell-change-event-origin.enum.ts","../../../projects/spreadsheet/src/lib/enums/font-weight.enum.ts","../../../projects/spreadsheet/src/lib/enums/text-align.enum.ts","../../../projects/spreadsheet/src/lib/enums/vertical-align.enum.ts","../../../projects/spreadsheet/src/lib/pipes/formatter.pipe.ts","../../../projects/spreadsheet/src/lib/components/cell/cell.component.ts","../../../projects/spreadsheet/src/lib/components/cell/cell.component.html","../../../projects/spreadsheet/src/lib/constants/alphabet.const.ts","../../../projects/spreadsheet/src/lib/services/utility.service.ts","../../../projects/spreadsheet/src/lib/components/selected/selected.component.ts","../../../projects/spreadsheet/src/lib/components/selected/selected.component.html","../../../projects/spreadsheet/src/lib/spreadsheet.component.ts","../../../projects/spreadsheet/src/lib/spreadsheet.component.html","../../../projects/spreadsheet/src/lib/spreadsheet.module.ts","../../../projects/spreadsheet/src/public-api.ts","../../../projects/spreadsheet/src/calf-ngx-spreadsheet.ts"],"sourcesContent":["/**\r\n * Spreadsheet mode enum\r\n * @description The way rows and columns are defined\r\n */\r\nexport enum SpreadsheetMode {\r\n    STATIC = 0,\r\n    DYNAMIC\r\n}","/**\r\n * Spreadsheet data type\r\n * @description Spreadsheet data type enum\r\n */\r\nexport enum SpreadsheetDataType {\r\n    STRING = 0,\r\n    NUMBER\r\n}","/**\r\n * Spreadsheet cell change event origin\r\n */\r\nexport enum SpreadsheetCellChangeEventOrigin {\r\n    EDIT,\r\n    CLIPBOARD\r\n}","/**\r\n * Font weight\r\n */\r\nexport enum SpreadsheetFontWeight {\r\n    NORMAL = 0,\r\n    BOLD,\r\n    BOLDER,\r\n    LIGHTER\r\n}","/**\r\n * Text align\r\n */\r\nexport enum SpreadsheetTextAlign {\r\n    LEFT = 0,\r\n    RIGHT,\r\n    START,\r\n    END,\r\n    CENTER\r\n}","/**\r\n * Vertical align\r\n */\r\nexport enum SpreadsheetVerticalAlign {\r\n    MIDDLE = 0,\r\n    BASELINE,\r\n    BOTTOM,\r\n    TOP\r\n}","// External modules\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\n\r\n// Interfaces\r\nimport { ISpreadsheetFormatterFunction } from \"../interfaces/formatter-function.interface\";\r\n\r\n@Pipe({\r\n    name: \"formatter\",\r\n    pure: true\r\n})\r\nexport class SpreadsheetFormatterPipe implements PipeTransform {\r\n\r\n    /**\r\n     * Transform value\r\n     * @param value \r\n     * @param formatterFn \r\n     */\r\n    public transform(value: any, formatterFn?: ISpreadsheetFormatterFunction<any>): string {\r\n        // Check if value is defined\r\n        if (typeof value === \"undefined\" || value === \"\") {\r\n            return \"\";\r\n        }\r\n\r\n        // Use formatter if formatter exists, otherwise return plain value\r\n        return formatterFn ? formatterFn(value) : value;\r\n    }\r\n}","// External modules\r\nimport { Component, ElementRef, HostBinding, Input } from \"@angular/core\";\r\n\r\n// Enums\r\nimport { SpreadsheetFontWeight } from \"../../enums/font-weight.enum\";\r\nimport { SpreadsheetTextAlign } from \"../../enums/text-align.enum\";\r\nimport { SpreadsheetVerticalAlign } from \"../../enums/vertical-align.enum\";\r\n\r\n// Interfaces\r\nimport { ISpreadsheetRow } from \"../../interfaces/row.interface\";\r\nimport { ISpreadsheetColumn } from \"../../interfaces/column.interface\";\r\nimport { ISpreadsheetFormatterFunction } from \"../../interfaces/formatter-function.interface\";\r\nimport { ISpreadsheetStyle } from \"../../interfaces/style.interface\";\r\n\r\n@Component({\r\n    selector: \"[ngxSpreadsheetCell]\",\r\n    templateUrl: \"./cell.component.html\",\r\n    styleUrls: [\"./cell.component.scss\"]\r\n})\r\nexport class SpreadsheetCellComponent<TRecord = any> {\r\n\r\n    @Input(\"rowIndex\")\r\n    private _rowIndex: number;\r\n\r\n    @Input(\"columnIndex\")\r\n    private _columnIndex: number;\r\n\r\n    @Input(\"column\")\r\n    private _column: ISpreadsheetColumn;\r\n\r\n    @Input(\"row\")\r\n    private _row: ISpreadsheetRow;\r\n\r\n    @Input(\"record\")\r\n    private _record: TRecord;\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--font-weight-normal\")\r\n    public get isFontWeightNormal(): boolean {\r\n        return !this.style.fontWeight || this.style.fontWeight === SpreadsheetFontWeight.NORMAL;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--font-weight-bold\")\r\n    public get isFontWeightBold(): boolean {\r\n        return this.style.fontWeight === SpreadsheetFontWeight.BOLD;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--font-weight-bolder\")\r\n    public get isFontWeightBolder(): boolean {\r\n        return this.style.fontWeight === SpreadsheetFontWeight.BOLDER;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--font-weight-lighter\")\r\n    public get isFontWeightLighter(): boolean {\r\n        return this.style.fontWeight === SpreadsheetFontWeight.LIGHTER;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--text-align-left\")\r\n    public get isTextAlignLeft(): boolean {\r\n        return !this.style.textAlign || this.style.textAlign === SpreadsheetTextAlign.LEFT;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--text-align-right\")\r\n    public get isTextAlignRight(): boolean {\r\n        return this.style.textAlign === SpreadsheetTextAlign.RIGHT;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--text-align-start\")\r\n    public get isTextAlignStart(): boolean {\r\n        return this.style.textAlign === SpreadsheetTextAlign.START;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--text-align-end\")\r\n    public get isTextAlignEnd(): boolean {\r\n        return this.style.textAlign === SpreadsheetTextAlign.END;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--text-align-center\")\r\n    public get isTextAlignCenter(): boolean {\r\n        return this.style.textAlign === SpreadsheetTextAlign.CENTER;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--vertical-align-middle\")\r\n    public get isVerticalAlignMiddle(): boolean {\r\n        return !this.style.verticalAlign || this.style.verticalAlign === SpreadsheetVerticalAlign.MIDDLE;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--vertical-align-baseline\")\r\n    public get isVerticalAlignBaseline(): boolean {\r\n        return this.style.verticalAlign === SpreadsheetVerticalAlign.BASELINE;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--vertical-align-bottom\")\r\n    public get isVerticalAlignBottom(): boolean {\r\n        return this.style.verticalAlign === SpreadsheetVerticalAlign.BOTTOM;\r\n    }\r\n\r\n    @HostBinding(\"class.ngx-spreadsheet-cell--vertical-align-top\")\r\n    public get isVerticalAlignTop(): boolean {\r\n        return this.style.verticalAlign === SpreadsheetVerticalAlign.TOP;\r\n    }\r\n\r\n    /**\r\n     * Is disabled\r\n     * @description Disabled flag\r\n     */\r\n    @HostBinding(\"ngx-spreadsheet-cell--disabled\")\r\n    public get isDisabled(): boolean {\r\n        return this._column.isDisabled || this._row.isDisabled;\r\n    }\r\n\r\n    /**\r\n     * Is readonly\r\n     * @description Readonly flag\r\n     */\r\n     @HostBinding(\"ngx-spreadsheet-cell--readonly\")\r\n    public get isReadonly(): boolean {\r\n        return this._column.isReadonly || this._row.isReadonly;\r\n    }\r\n\r\n    /**\r\n     * Formatter fn\r\n     * @description Formatter function getter\r\n     */\r\n    public get formatterFn(): ISpreadsheetFormatterFunction<any> {\r\n        return this._column.formatterFn;\r\n    }\r\n\r\n    /**\r\n     * Style\r\n     * @description Style getter\r\n     */\r\n    private get style(): ISpreadsheetStyle {\r\n        // Get set or default style\r\n        return this._column.style || {\r\n            fontWeight: SpreadsheetFontWeight.NORMAL,\r\n            textAlign: SpreadsheetTextAlign.LEFT,\r\n            verticalAlign: SpreadsheetVerticalAlign.MIDDLE\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Value\r\n     * @description Cell value getter\r\n     */\r\n    public get value(): any {\r\n        // Check if record is defined\r\n        if (!this._record) {\r\n            return \"\";\r\n        }\r\n\r\n        // Check if column value is defined\r\n        if (!(this._column.identifier in this._record) && !(this._column.label in this._record)) {\r\n            return \"\";\r\n        }\r\n\r\n        // Try to get value\r\n        const value = this._record[(typeof this._column.identifier === \"undefined\") ? this._column.label : this._column.identifier];\r\n\r\n        // Check for undefined\r\n        if (typeof value === \"undefined\") {\r\n            return \"\";\r\n        }\r\n\r\n        // Return value\r\n        return value;\r\n    }\r\n\r\n    /**\r\n     * Constructor\r\n     * @param elementRef\r\n     */\r\n    constructor(private elementRef: ElementRef) { }\r\n\r\n    /**\r\n     * Get native element\r\n     */\r\n    public getNativeElement(): HTMLElement {\r\n        return this.elementRef.nativeElement;\r\n    }\r\n}","<ng-container>{{ value | formatter:formatterFn }}</ng-container>","/**\r\n * Alphabet\r\n * @description List of alphabet characters\r\n */\r\nexport const ALPHABET: string[] = [\r\n    \"a\",\r\n    \"b\",\r\n    \"c\",\r\n    \"d\",\r\n    \"e\",\r\n    \"f\",\r\n    \"g\",\r\n    \"h\",\r\n    \"i\",\r\n    \"j\",\r\n    \"k\",\r\n    \"l\",\r\n    \"m\",\r\n    \"n\",\r\n    \"o\",\r\n    \"p\",\r\n    \"q\",\r\n    \"r\",\r\n    \"s\",\r\n    \"t\",\r\n    \"u\",\r\n    \"v\",\r\n    \"w\",\r\n    \"x\",\r\n    \"y\",\r\n    \"z\"\r\n];","// External modules\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Interfaces\r\nimport { ISpreadsheetRow } from \"../interfaces/row.interface\";\r\nimport { ISpreadsheetColumn } from \"../interfaces/column.interface\";\r\n\r\n// Constants\r\nimport { ALPHABET } from \"../constants/alphabet.const\";\r\n\r\n@Injectable()\r\nexport class SpreadsheetUtilityService {\r\n\r\n    /**\r\n     * Parse number\r\n     * @param value \r\n     * @param locales \r\n     */\r\n    public parseNumber(value: string, locales: readonly string[] = navigator.languages): number {\r\n        // First get example of formatted number using locales\r\n        const example = Intl.NumberFormat(locales as string[]).format(1.1);\r\n\r\n        // Init clean pattern regexp\r\n        const cleanPattern = new RegExp(`[^-+0-9${example.charAt(1)}]`, 'g');\r\n\r\n        // Clean input value\r\n        const cleaned = value.replace(cleanPattern, \"\");\r\n\r\n        // Now normalize value, replacing locale decimal for javascript decimal\r\n        const normalized = cleaned.replace(example.charAt(1), \".\");\r\n\r\n        // Parse float\r\n        const result = parseFloat(normalized);\r\n\r\n        // Make sure number is returned\r\n        return !isNaN(result) ? result : 0;\r\n    }\r\n\r\n    /**\r\n     * Generate row\r\n     * @param index \r\n     */\r\n    public generateRow(index: number): ISpreadsheetRow {\r\n        // Init row\r\n        const row: ISpreadsheetRow = { label: `${index + 1}`, index: index };\r\n\r\n        // Return row\r\n        return row;\r\n    }\r\n\r\n    /**\r\n     * Generate column\r\n     * @param index \r\n     */\r\n    public generateColumn(index: number): ISpreadsheetColumn {\r\n        // Init column\r\n        const column: ISpreadsheetColumn = {};\r\n\r\n        // Assign both label and identifier\r\n        column.label = column.identifier = this.generateColumnLabel(index);\r\n\r\n        // Return column\r\n        return column;\r\n    }\r\n\r\n    /**\r\n     * Generate column label\r\n     * @param index \r\n     */\r\n    private generateColumnLabel(index: number): string {\r\n        // Init remainders\r\n        const remainders: string[] = [];\r\n\r\n\r\n        // Init value to work upon\r\n        let division = index;\r\n        let remainder = division % ALPHABET.length;\r\n\r\n        // Add remainder\r\n        remainders.push(`${ALPHABET[remainder]}`);\r\n\r\n        // Check division\r\n        while (division >= ALPHABET.length) {\r\n            // Get new division value\r\n            division = Math.floor(division / ALPHABET.length);\r\n\r\n            // Add remainder\r\n            remainders.unshift(`${ALPHABET[division - 1]}`);\r\n        }\r\n\r\n        // Return generated label\r\n        return remainders.join(\"\").toUpperCase();\r\n    }\r\n}","// External modules\r\nimport { Component, HostBinding, Input } from \"@angular/core\";\r\n\r\n// Components\r\nimport { SpreadsheetCellComponent } from \"../cell/cell.component\";\r\n\r\n@Component({\r\n    selector: \"ngx-spreadsheet-selected\",\r\n    templateUrl: \"./selected.component.html\",\r\n    styleUrls: [\"./selected.component.scss\"]\r\n})\r\nexport class SpreadsheetSelectedComponent {\r\n\r\n    /**\r\n     * ngxSpreadsheetSelected\r\n     * @description Class assignment\r\n     */\r\n    @HostBinding(\"class.ngx-spreadsheet-selected\")\r\n    public ngxSpreadsheetSelected: boolean = true;\r\n\r\n    @Input(\"cell\")\r\n    private _cell: SpreadsheetCellComponent;\r\n\r\n    /**\r\n     * Width\r\n     * @description Width based on cell\r\n     */\r\n    @HostBinding(\"style.width.px\")\r\n    public get width(): number {\r\n        // Check cell\r\n        if (!this._cell) {\r\n            return 0;\r\n        }\r\n\r\n        // Get cell width\r\n        return this._cell.getNativeElement().offsetWidth + 1;\r\n    }\r\n\r\n    /**\r\n     * Height\r\n     * @description Height based on cell\r\n     */\r\n    @HostBinding(\"style.height.px\")\r\n    public get height(): number {\r\n        // Check cell\r\n        if (!this._cell) {\r\n            return 0;\r\n        }\r\n\r\n        // Get cell height\r\n        return this._cell.getNativeElement().offsetHeight;\r\n    }\r\n\r\n    /**\r\n     * Position X\r\n     * @description Position X getter\r\n     */\r\n    @HostBinding(\"style.left.px\")\r\n    public get positionX(): number {\r\n        // Check cell\r\n        if (!this._cell) {\r\n            return 0;\r\n        }\r\n\r\n        // Get cell position x\r\n        return this._cell.getNativeElement().offsetLeft - 1;\r\n    }\r\n\r\n    /**\r\n     * Position Y\r\n     * @description Position Y getter\r\n     */\r\n    @HostBinding(\"style.top.px\")\r\n    public get positionY(): number {\r\n        // Check cell\r\n        if (!this._cell) {\r\n            return 0;\r\n        }\r\n\r\n        // Get cell position y\r\n        return this._cell.getNativeElement().offsetTop - 1;\r\n    }\r\n}","<ng-content></ng-content>","// External modules\r\nimport { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, OnDestroy, OnInit, Output, QueryList, Renderer2, ViewChild, ViewChildren } from \"@angular/core\";\r\nimport { fromEvent, Observable, Subject, Subscription } from \"rxjs\";\r\nimport { debounceTime, filter } from \"rxjs/operators\";\r\n\r\n// Interfaces\r\nimport { ISpreadsheetRow } from \"./interfaces/row.interface\";\r\nimport { ISpreadsheetRows } from \"./interfaces/rows.interface\";\r\nimport { ISpreadsheetData } from \"./interfaces/data.interface\";\r\nimport { ISpreadsheetColumn } from \"./interfaces/column.interface\";\r\nimport { ISpreadsheetColumns } from \"./interfaces/columns.interface\";\r\nimport { ISpreadsheetCellChangeEvent } from \"./interfaces/cell-change-event.interface\";\r\nimport { ISpreadsheetRowsDefinition } from \"./interfaces/rows-definition.interface\";\r\nimport { ISpreadsheetColumnsDefinition } from \"./interfaces/columns-definition.interface\";\r\nimport { ISpreadsheetGenerateColumnFn } from \"./interfaces/generate-column-fn.interface\";\r\nimport { ISpreadsheetGenerateRowFn } from \"./interfaces/generate-row-fn.interface\";\r\n\r\n// Enums\r\nimport { SpreadsheetMode } from \"./enums/mode.enum\";\r\nimport { SpreadsheetDataType } from \"./enums/data-type.enum\";\r\nimport { SpreadsheetCellChangeEventOrigin } from \"./enums/cell-change-event-origin.enum\";\r\n\r\n// Services\r\nimport { SpreadsheetUtilityService } from \"./services/utility.service\";\r\n\r\n// Components\r\nimport { SpreadsheetCellComponent } from \"./components/cell/cell.component\";\r\n\r\n\r\n@Component({\r\n\tselector: \"ngx-spreadsheet\",\r\n\ttemplateUrl: \"./spreadsheet.component.html\",\r\n\tstyleUrls: [\"./spreadsheet.component.scss\"]\r\n})\r\nexport class SpreadsheetComponent implements OnInit, OnDestroy {\r\n\r\n\t/**\r\n\t * Spreadsheet class\r\n\t */\r\n\t@HostBinding(\"class.ngx-spreadsheet\")\r\n\tpublic ngxSpreadsheet: boolean = true;\r\n\r\n\t@HostBinding(\"class.ngx-spreadsheet--focused\")\r\n\tpublic isFocused: boolean = false;\r\n\r\n\t// Focus change observable\r\n\tprivate readonly focusChangeSource: Subject<void> = new Subject<void>();\r\n\tprivate readonly focusChange$: Observable<void> = this.focusChangeSource.asObservable();\r\n\r\n\t@Input(\"tabIndex\")\r\n\t@HostBinding(\"attr.tabIndex\")\r\n\tpublic tabIndex: number = 0;\r\n\r\n\t// List of cells\r\n\t@ViewChildren(SpreadsheetCellComponent)\r\n\tpublic cells: QueryList<SpreadsheetCellComponent>;\r\n\r\n\t// Selected input\r\n\t@ViewChild('selectedInput')\r\n\tpublic selectedInput: ElementRef;\r\n\r\n\t// Component focus flag\r\n\tprivate _hasComponentFocus: boolean = false;\r\n\r\n\t// Selected input focus flag\r\n\tprivate _hasSelectedInputFocus: boolean = false;\r\n\tprivate _hasSelectedInputValueChanged: boolean = false;\r\n\r\n\t// Rows mode\r\n\tprivate _rowsMode: number = SpreadsheetMode.DYNAMIC;\r\n\t// Columns mode\r\n\tprivate _columnsMode: number = SpreadsheetMode.STATIC;\r\n\r\n\t// Generate row function\r\n\tprivate _generateRowFn: ISpreadsheetGenerateRowFn;\r\n\t// Generate column function\r\n\tprivate _generateColumnFn: ISpreadsheetGenerateColumnFn;\r\n\r\n\t// Track functions\r\n\tprivate _trackRowsByFn: (index: number, item: ISpreadsheetRow) => void = (index: number, _) => index;\r\n\tprivate _trackColumnsByFn: (index: number, item: ISpreadsheetColumn) => void = (index: number, _) => index;\r\n\r\n\t// Spreadsheet data\r\n\t@Input(\"data\")\r\n\tpublic data: ISpreadsheetData<any> = [];\r\n\r\n\t// Columns definition\r\n\t@Input(\"columns\")\r\n\tpublic set columnsDefinition(value: ISpreadsheetColumnsDefinition) {\r\n\t\t// Check if mode is defined\r\n\t\tif (typeof value.mode !== \"undefined\") {\r\n\t\t\t// Assign mode\r\n\t\t\tthis._columnsMode = value.mode;\r\n\t\t}\r\n\r\n\t\t// Assign functions\r\n\t\tthis._generateColumnFn = value.generateColumnFn;\r\n\t\tthis._trackColumnsByFn = value.trackBy || this._trackColumnsByFn;\r\n\r\n\t\t// Check for columns\r\n\t\tif (value.columns) {\r\n\t\t\t// Assign custom columns\r\n\t\t\tthis._columns = value.columns || [];\r\n\r\n\t\t\t// Do nothing else\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Init number of columns with the number provided (or default)\r\n\t\tconst numberOfColumns = value.numberOfColumns || 10;\r\n\r\n\t\t// Generate columns\r\n\t\tthis._columns = Array.from({ length: numberOfColumns }, (_, index) => this.generateColumn(index));\r\n\t}\r\n\r\n\t// Rows definition\r\n\t@Input(\"rows\")\r\n\tpublic set rowsDefinition(value: ISpreadsheetRowsDefinition) {\r\n\t\t// Check if mode is defined\r\n\t\tif (typeof value.mode !== \"undefined\") {\r\n\t\t\t// Assign mode\r\n\t\t\tthis._rowsMode = value.mode;\r\n\t\t}\r\n\r\n\t\t// Assign functions\r\n\t\tthis._generateRowFn = value.generateRowFn;\r\n\t\tthis._trackRowsByFn = value.trackBy || this._trackRowsByFn;\r\n\r\n\t\t// Check for rows\r\n\t\tif (value.rows) {\r\n\t\t\t// Assign custom rows\r\n\t\t\tthis._rows = value.rows || [];\r\n\r\n\t\t\t// Do nothing else\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Init rows with the number provided (or default)\r\n\t\tconst numberOfRows = value.numberOfRows || 10;\r\n\r\n\t\t// Generate rows\r\n\t\tthis._rows = Array.from({ length: numberOfRows }, (_, index) => this.generateRow(index));\r\n\t};\r\n\r\n\t/**\r\n\t * Cell change event\r\n\t * @description Event fired on cell change\r\n\t */\r\n\t@Output(\"cellChange\")\r\n\tpublic cellChangeEvent: EventEmitter<ISpreadsheetCellChangeEvent> = new EventEmitter();\r\n\r\n\t/**\r\n\t * Rows\r\n\t * @description Rows getter\r\n\t */\r\n\tpublic get rows(): ISpreadsheetRows {\r\n\t\treturn this._rows;\r\n\t}\r\n\r\n\t/**\r\n\t * Track rows by function\r\n\t * @description Function to track rows\r\n\t */\r\n\tpublic get trackRowsByFn(): (index: number, item: ISpreadsheetRow) => void {\r\n\t\treturn this._trackRowsByFn;\r\n\t}\r\n\r\n\t/**\r\n\t * Columns\r\n\t * @description Columns getter\r\n\t */\r\n\tpublic get columns(): ISpreadsheetColumns {\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Track columns by function\r\n\t * @description Function to track columns\r\n\t */\r\n\tpublic get trackColumnsByFn(): (index: number, item: ISpreadsheetRow) => void {\r\n\t\treturn this._trackColumnsByFn;;\r\n\t}\r\n\r\n\t/**\r\n\t * Selected rows indexes\r\n\t * @description Selected rows indexes getter\r\n\t */\r\n\tpublic get selectedRowsIndexes(): number[] {\r\n\t\treturn this._selectedRowsIndexes;\r\n\t}\r\n\r\n\t/**\r\n\t * Selected columns indexes\r\n\t * @description Selected columns indexes getter\r\n\t */\r\n\tpublic get selectedColumnsIndexes(): number[] {\r\n\t\treturn this._selectedColumnsIndexes;\r\n\t}\r\n\r\n\t/**\r\n\t * Selected row index\r\n\t * @description Selected row index getter\r\n\t */\r\n\tpublic get selectedRowIndex(): number {\r\n\t\treturn this._selectedRowIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * Selected column index\r\n\t * @description Selected column index getter\r\n\t */\r\n\tpublic get selectedColumnIndex(): number {\r\n\t\treturn this._selectedColumnIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * Selected cell\r\n\t * @description Selected cell getter\r\n\t */\r\n\tpublic get selectedCell(): SpreadsheetCellComponent {\r\n\t\treturn this._selectedCell;\r\n\t}\r\n\r\n\t@HostListener(\"focus\", [\"$event\"])\r\n\tpublic onFocus(event: FocusEvent): void {\r\n\t\t// Set component focus flag\r\n\t\tthis._hasComponentFocus = true;\r\n\r\n\t\t// Emit focus change\r\n\t\tthis.focusChangeSource.next();\r\n\r\n\t\t// Check if tab key is active\r\n\t\tif (!this.isTabKeyActive || this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Select first cell\r\n\t\tif (!this.isShiftKeyActive) {\r\n\t\t\t// Select first cell\r\n\t\t\tthis.selectCell(0, 0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Select last cell\r\n\t\t\tthis.selectCell(this._rows.length - 1, this._columns.length - 1);\r\n\t\t}\r\n\t}\r\n\r\n\t@HostListener(\"blur\", [\"$event\"])\r\n\tpublic onBlur(event: Event): void {\r\n\t\t// Reset component focus flag\r\n\t\tthis._hasComponentFocus = false;\r\n\r\n\t\t// Emit focus change\r\n\t\tthis.focusChangeSource.next();\r\n\t}\r\n\r\n\t@HostListener(\"document:copy\", [\"$event\"])\r\n\tpublic onCopy(event: ClipboardEvent): void {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Process copy event\r\n\t\tthis.processCopyEvent(event);\r\n\t}\r\n\r\n\t@HostListener(\"document:paste\", [\"$event\"])\r\n\tpublic onPaste(event: ClipboardEvent): void {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check for focus\r\n\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Process paste event\r\n\t\tthis.processPasteEvent(event);\r\n\t}\r\n\r\n\t@HostListener(\"keydown\", [\"$event\"])\r\n\tpublic onKeydown(event: KeyboardEvent): void {\r\n\t\t// Check for ctrl and meta key\r\n\t\tif (event.ctrlKey || event.metaKey) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check key\r\n\t\tswitch (event.key) {\r\n\t\t\tcase \"ArrowLeft\":\r\n\t\t\tcase \"ArrowRight\":\r\n\t\t\tcase \"ArrowDown\":\r\n\t\t\tcase \"ArrowUp\":\r\n\t\t\t\t// Process arrow key event\r\n\t\t\t\tthis.processArrowKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tcase \"Backspace\":\r\n\t\t\t\t// Process backspace key event\r\n\t\t\t\tthis.processBackspaceKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tcase \"Delete\":\r\n\t\t\t\t// Process delete key event\r\n\t\t\t\tthis.processDeleteKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tcase \"Escape\":\r\n\t\t\t\t// Process escape key event\r\n\t\t\t\tthis.processEscapeKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tcase \"Enter\":\r\n\t\t\t\t// Process enter key event\r\n\t\t\t\tthis.processEnterKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tcase \"Tab\":\r\n\t\t\t\t// Process tab key event\r\n\t\t\t\tthis.processTabKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\r\n\t\t\tdefault:\r\n\t\t\t\t// Process default\r\n\t\t\t\tthis.processDefaultKeyEvent(event);\r\n\r\n\t\t\t\t// Do nothing else\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// Selected indexes\r\n\tprivate _selectedRowIndex: number = undefined;\r\n\tprivate _selectedColumnIndex: number = undefined;\r\n\tprivate _selectedRowsIndexes: number[] = [];\r\n\tprivate _selectedColumnsIndexes: number[] = [];\r\n\r\n\t// Selected cell\r\n\tprivate _selectedCell: SpreadsheetCellComponent;\r\n\r\n\t// List of rows\r\n\tprivate _rows: ISpreadsheetRows = [];\r\n\t// List of columns\r\n\tprivate _columns: ISpreadsheetColumns = [];\r\n\r\n\t// Document click listener\r\n\tprivate documentClickListener: () => void;\r\n\tprivate documentShiftListener: () => void;\r\n\tprivate documentTabListener: () => void;\r\n\tprivate documentShiftTabListener: () => void;\r\n\r\n\t// Document click subscription\r\n\tprivate documentClickSubscription: Subscription;\r\n\tprivate documentShiftSubscription: Subscription;\r\n\tprivate documentTabSubscription: Subscription;\r\n\r\n\t// Is keys active flags\r\n\tprivate isShiftKeyActive: boolean = false;\r\n\tprivate isTabKeyActive: boolean = false;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t * @param ngZone \r\n\t * @param renderer \r\n\t * @param element \r\n\t * @param service \r\n\t */\r\n\tconstructor(\r\n\t\tprivate readonly ngZone: NgZone,\r\n\t\tprivate readonly renderer: Renderer2,\r\n\t\tprivate readonly element: ElementRef,\r\n\t\tprivate readonly service: SpreadsheetUtilityService\r\n\t) { }\r\n\r\n\t/**\r\n\t * On init hook\r\n\t */\r\n\tpublic ngOnInit(): void {\r\n\t\t// Run outside angular zone\r\n\t\tthis.ngZone.runOutsideAngular(() => {\r\n\t\t\t// Subscribe to window click\r\n\t\t\tthis.documentClickSubscription = fromEvent(window, \"click\").subscribe((event: MouseEvent) => this.handleDocumentClick(event));\r\n\t\t\t// Subscribe to shift keydown\r\n\t\t\tthis.documentShiftSubscription = fromEvent(window, \"keydown\")\r\n\t\t\t\t// Filter Shift key\r\n\t\t\t\t.pipe((filter((event: KeyboardEvent) => event.key === \"Shift\")))\r\n\t\t\t\t// Only when shift flag is inactive\r\n\t\t\t\t.pipe((filter((_) => !this.isShiftKeyActive)))\r\n\t\t\t\t// Subscribe\r\n\t\t\t\t.subscribe((event: KeyboardEvent) => this.handleDocumentShiftKeydown(event));\r\n\r\n\t\t\t// Subscribe to tab keydown\r\n\t\t\tthis.documentTabSubscription = fromEvent(window, \"keydown\")\r\n\t\t\t\t// Filter Tab key\r\n\t\t\t\t.pipe((filter((event: KeyboardEvent) => event.key === \"Tab\")))\r\n\t\t\t\t// Only when tab flag is inactive\r\n\t\t\t\t.pipe((filter((_) => !this.isTabKeyActive)))\r\n\t\t\t\t// Subscribe\r\n\t\t\t\t.subscribe((event: KeyboardEvent) => this.handleDocumentTabKeydown(event));\r\n\t\t});\r\n\r\n\t\t// Register to focus change\r\n\t\tthis.registerToFocusChange();\r\n\t}\r\n\r\n\t/**\r\n\t * On destroy hook\r\n\t */\r\n\tpublic ngOnDestroy(): void {\r\n\t\t// Document click listener\r\n\t\tthis.documentClickListener && this.documentClickListener();\r\n\t\t// Document shift listener\r\n\t\tthis.documentShiftListener && this.documentShiftListener();\r\n\t\t// Document tab listener\r\n\t\tthis.documentTabListener && this.documentTabListener();\r\n\t\t// Document shift tab listener\r\n\t\tthis.documentShiftTabListener && this.documentShiftTabListener();\r\n\r\n\t\t// Unsubscribe\r\n\t\tthis.documentClickSubscription && this.documentClickSubscription.unsubscribe();\r\n\t\tthis.documentTabSubscription && this.documentTabSubscription.unsubscribe();\r\n\t\tthis.documentShiftSubscription && this.documentShiftSubscription.unsubscribe();\r\n\t}\r\n\r\n\t/**\r\n\t * On selected input focus\r\n\t * @param event \r\n\t */\r\n\tpublic onSelectedInputFocus(event: Event): void {\r\n\t\t// Set flag\r\n\t\tthis._hasSelectedInputFocus = true;\r\n\t\tthis._hasSelectedInputValueChanged = true;\r\n\r\n\t\t// Emit focus change\r\n\t\tthis.focusChangeSource.next();\r\n\t}\r\n\r\n\t/**\r\n\t * On selected input blur\r\n\t * @param event \r\n\t */\r\n\tpublic onSelectedInputBlur(event: Event): void {\r\n\t\t// Set flag\r\n\t\tthis._hasSelectedInputFocus = false;\r\n\r\n\t\t// Emit focus change\r\n\t\tthis.focusChangeSource.next();\r\n\t}\r\n\r\n\t/**\r\n\t * On cell click\r\n\t * @param event \r\n\t * @param rowIndex \r\n\t * @param columnIndex \r\n\t */\r\n\tpublic onCellClick(event: Event, rowIndex: number, columnIndex: number): void {\r\n\t\t// Prevent event propagation\r\n\t\tevent.stopPropagation();\r\n\r\n\t\t// Dispatch click event on the component as we want to support multiple \r\n\t\t// spreadsheets within page and clicking on a cell of another spreadsheet\r\n\t\t// has to bubble out \r\n\t\tthis.element.nativeElement.dispatchEvent(new Event(\"click\", { bubbles: true }));\r\n\r\n\t\t// Select cell\r\n\t\tthis.selectCell(rowIndex, columnIndex);\r\n\t}\r\n\r\n\t/**\r\n\t * Generate row\r\n\t * @param index \r\n\t */\r\n\tprivate generateRow(index: number): ISpreadsheetRow {\r\n\t\t// First get row using the default function\r\n\t\tconst row = this.service.generateRow(index);\r\n\r\n\t\t// Now check for custom function\r\n\t\tif (this._generateRowFn) {\r\n\t\t\t// Process row using custom function\r\n\t\t\treturn this._generateRowFn(row, index);\r\n\t\t}\r\n\r\n\t\t// Otherwise return default row\r\n\t\treturn row;\r\n\t}\r\n\r\n\t/**\r\n\t * Generate column\r\n\t * @param index \r\n\t */\r\n\tprivate generateColumn(index: number): ISpreadsheetColumn {\r\n\t\t// First get column using the default function\r\n\t\tconst column = this.service.generateColumn(index);\r\n\r\n\t\t// Now check for custom function\r\n\t\tif (this._generateColumnFn) {\r\n\t\t\t// Process column using custom function\r\n\t\t\treturn this._generateColumnFn(column, index);\r\n\t\t}\r\n\r\n\t\t// Otherwise return default column\r\n\t\treturn column;\r\n\t}\r\n\r\n\t/**\r\n\t * Is reset required\r\n\t * @description Check if reset is required\r\n\t */\r\n\tprivate isResetRequired(): boolean {\r\n\t\treturn !!this._selectedCell\r\n\t\t\t|| (typeof this._selectedColumnIndex !== \"undefined\")\r\n\t\t\t|| (typeof this._selectedRowIndex !== \"undefined\")\r\n\t\t\t|| this._selectedColumnsIndexes.length > 0\r\n\t\t\t|| this._selectedRowsIndexes.length > 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Reset select\r\n\t */\r\n\tprivate async resetSelect(): Promise<void> {\r\n\t\t// Before resetting, check for updates to selected cell\r\n\t\tif (this._selectedCell) {\r\n\t\t\t// Check for change flag\r\n\t\t\tif (this._hasSelectedInputValueChanged) {\r\n\t\t\t\t// Assign value to selected cell\r\n\t\t\t\tawait this.assignValueToSelectedCell(this.selectedInput.nativeElement.value, SpreadsheetCellChangeEventOrigin.EDIT);\r\n\r\n\t\t\t\t// Reset flag\r\n\t\t\t\tthis._hasSelectedInputValueChanged = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if input has focus\r\n\t\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t\t// Blur input\r\n\t\t\t\tthis.selectedInput.nativeElement.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Reset indexes\r\n\t\tthis._selectedColumnIndex = this._selectedRowIndex = undefined;\r\n\t\tthis._selectedColumnsIndexes = this._selectedRowsIndexes = [];\r\n\r\n\t\t// Reset cell\r\n\t\tthis._selectedCell = null;\r\n\t}\r\n\r\n\t/**\r\n\t * Handle document click\r\n\t * @param event \r\n\t */\r\n\tprivate async handleDocumentClick(event: MouseEvent): Promise<void> {\r\n\t\t// Check click target\r\n\t\tif (!this.element || this.element.nativeElement.contains(event.target)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if reset is required\r\n\t\tif (!this.isResetRequired()) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Reset select\r\n\t\tthis.ngZone.run(() => this.resetSelect());\r\n\t}\r\n\r\n\t/**\r\n\t * Handle document shift keydown\r\n\t * @param event \r\n\t */\r\n\tprivate async handleDocumentShiftKeydown(event: KeyboardEvent): Promise<void> {\r\n\t\t// Set shift key active flag\r\n\t\tthis.isShiftKeyActive = true;\r\n\r\n\t\t// Subscribe to shift keyup\r\n\t\tconst subscription = fromEvent(document, \"keyup\")\r\n\t\t\t// Check for Shift key\r\n\t\t\t.pipe(filter((event: KeyboardEvent) => event.key === \"Shift\"))\r\n\t\t\t// Subscribe\r\n\t\t\t.subscribe((event) => {\r\n\t\t\t\t// Unsubscribe\r\n\t\t\t\tsubscription && subscription.unsubscribe();\r\n\r\n\t\t\t\t// Reset flag\r\n\t\t\t\tthis.isShiftKeyActive = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Handle document tab keydown\r\n\t * @param event \r\n\t */\r\n\tprivate async handleDocumentTabKeydown(event: KeyboardEvent): Promise<void> {\r\n\t\t// Set tab key active flag\r\n\t\tthis.isTabKeyActive = true;\r\n\r\n\t\t// Subscribe to Tab keyup\r\n\t\tconst subscription = fromEvent(document, \"keyup\")\r\n\t\t\t// Check for Tab key\r\n\t\t\t.pipe(filter((event: KeyboardEvent) => event.key === \"Tab\"))\r\n\t\t\t// Subscribe\r\n\t\t\t.subscribe((event) => {\r\n\t\t\t\t// Unsubscribe\r\n\t\t\t\tsubscription && subscription.unsubscribe();\r\n\r\n\t\t\t\t// Reset flag\r\n\t\t\t\tthis.isTabKeyActive = false;\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Select cell\r\n\t * @param rowIndex \r\n\t * @param columnIndex \r\n\t */\r\n\tprivate async selectCell(rowIndex: number, columnIndex: number): Promise<void> {\r\n\t\t// Init spreadsheet modification flag\r\n\t\tlet isModified: boolean = false;\r\n\r\n\t\t// Before selecting new cell, check for selected input\r\n\t\tif (this._selectedCell) {\r\n\t\t\t// Check for change flag\r\n\t\t\tif (this._hasSelectedInputValueChanged) {\r\n\t\t\t\t// Assign value to selected cell\r\n\t\t\t\tawait this.assignValueToSelectedCell(this.selectedInput.nativeElement.value, SpreadsheetCellChangeEventOrigin.EDIT);\r\n\r\n\t\t\t\t// Reset flag\r\n\t\t\t\tthis._hasSelectedInputValueChanged = false;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if input has focus\r\n\t\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t\t// Blur input\r\n\t\t\t\tthis.selectedInput.nativeElement.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Check boundaries of row index (start)\r\n\t\tif (rowIndex < 0) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check boundaries of column index (start)\r\n\t\tif (columnIndex < 0) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check boundaries of column index\r\n\t\tif (columnIndex > (this.columns.length - 1)) {\r\n\t\t\t// Check for mode\r\n\t\t\tif (this._columnsMode !== SpreadsheetMode.DYNAMIC) {\r\n\t\t\t\t// Do nothing\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise add new column\r\n\t\t\tthis._columns.push(this.generateColumn(this._columns.length));\r\n\r\n\t\t\t// Set is modified flag\r\n\t\t\tisModified = true;\r\n\t\t}\r\n\r\n\t\t// Check bottom boundaries of row index (end)\r\n\t\tif (rowIndex > (this._rows.length - 1)) {\r\n\t\t\t// Check for mode\r\n\t\t\tif (this._rowsMode !== SpreadsheetMode.DYNAMIC) {\r\n\t\t\t\t// Do nothing\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Otherwise add new row\r\n\t\t\tthis._rows.push(this.generateRow((this._rows.length)));\r\n\r\n\t\t\t// Set is modified flag\r\n\t\t\tisModified = true;\r\n\t\t}\r\n\r\n\t\t// Check for selected cell\r\n\t\tif (this._selectedCell) {\r\n\t\t\t// Reset value as we are going to change it\r\n\t\t\tthis.selectedInput.nativeElement.value = \"\";\r\n\t\t}\r\n\r\n\t\t// Set selected indexes\r\n\t\tthis._selectedRowIndex = rowIndex;\r\n\t\tthis._selectedColumnIndex = columnIndex;\r\n\t\tthis._selectedRowsIndexes = [rowIndex];\r\n\t\tthis._selectedColumnsIndexes = [columnIndex];\r\n\r\n\t\t// Check modified status\r\n\t\tif (!isModified) {\r\n\t\t\t// Get index within list of cells\r\n\t\t\tconst index = (rowIndex * this.columns.length) + columnIndex;\r\n\r\n\t\t\t// Assign selected cell\r\n\t\t\tconst selectedCell = this.cells.find((_, idx) => idx === index);\r\n\r\n\t\t\t// Assign cell\r\n\t\t\treturn this.assignSelectedCell(selectedCell);\r\n\t\t}\r\n\r\n\t\t// Otherwise we need to wait for view children to update\r\n\t\tconst subscription = this.cells.changes.subscribe(async () => {\r\n\t\t\t// Unsubscribe from cell changes\r\n\t\t\tsubscription.unsubscribe();\r\n\r\n\t\t\t// Assign selected cell\r\n\t\t\tawait this.assignSelectedCell();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Assign selected cell\r\n\t * @description This is a backup function to assign\r\n\t * selected cell in case the cell was not found before \r\n\t */\r\n\tprivate async assignSelectedCell(cell?: SpreadsheetCellComponent): Promise<void> {\r\n\t\t// Check for cell\r\n\t\tif (cell) {\r\n\t\t\t// Assign passed cell\r\n\t\t\tthis._selectedCell = cell;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Get index within list of cells\r\n\t\t\tconst index = (this._selectedRowIndex * this.columns.length) + this._selectedColumnIndex;\r\n\r\n\t\t\t// Assign selected cell\r\n\t\t\tPromise.resolve(null).then(() => this._selectedCell = this.cells.find((_, idx) => idx === index))\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Process backspace key event\r\n\t * @param event \r\n\t */\r\n\tprivate async processBackspaceKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check for input focus\r\n\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Get selected column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\t\t// Get selected row\r\n\t\tconst row = this.rows[this._selectedRowIndex];\r\n\r\n\t\t// Check if column or row is disabled\r\n\t\tif ((column.isDisabled || column.isReadonly) || (row.isDisabled || row.isReadonly)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Reset input value\r\n\t\tthis.selectedInput.nativeElement.value = \"\";\r\n\r\n\t\t// Set focus\r\n\t\tthis.selectedInput.nativeElement.focus();\r\n\t}\r\n\r\n\t/**\r\n\t * Process tab key event\r\n\t * @param event \r\n\t */\r\n\tprivate async processTabKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Init selected indexes\r\n\t\tlet selectedRowIndex = this._selectedRowIndex;\r\n\t\tlet selectedColumnIndex = this._selectedColumnIndex;\r\n\r\n\t\t// Check for shift\r\n\t\tif (event.shiftKey) {\r\n\t\t\t// Check out of bounds movement\r\n\t\t\tif (selectedColumnIndex === 0 && selectedRowIndex === 0) {\r\n\t\t\t\t// Reset selected and do nothing else\r\n\t\t\t\treturn this.resetSelect();\r\n\t\t\t}\r\n\r\n\t\t\t// Prevent default\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\t// Check column index\r\n\t\t\tif (selectedColumnIndex === 0) {\r\n\t\t\t\t// Select last column of the previous row\r\n\t\t\t\tawait this.selectCell(selectedRowIndex - 1, this.columns.length - 1);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Select previous column of current row\r\n\t\t\t\tawait this.selectCell(selectedRowIndex, selectedColumnIndex - 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Check out of bounds movement\r\n\t\t\tif (selectedColumnIndex >= (this.columns.length - 1) && selectedRowIndex >= (this.rows.length - 1)) {\r\n\t\t\t\t// Reset selected and do nothing else\r\n\t\t\t\treturn this.resetSelect();\r\n\t\t\t}\r\n\r\n\t\t\t// Prevent default\r\n\t\t\tevent.preventDefault();\r\n\r\n\t\t\t// Check column index\r\n\t\t\tif (selectedColumnIndex >= (this.columns.length - 1)) {\r\n\t\t\t\t// Select first column of the next row\r\n\t\t\t\tawait this.selectCell(selectedRowIndex + 1, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Select next column of current row\r\n\t\t\t\tawait this.selectCell(selectedRowIndex, selectedColumnIndex + 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set focus back to this component\r\n\t\tsetTimeout(() => this.element.nativeElement.focus());\r\n\t}\r\n\r\n\t/**\r\n\t * Process delete key event\r\n\t * @param event \r\n\t */\r\n\tprivate async processDeleteKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check if data are set for selected row\r\n\t\tif (!this.data[this._selectedRowIndex] || this._hasSelectedInputFocus) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Get column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\t\t// Get row\r\n\t\tconst row = this.rows[this._selectedRowIndex];\r\n\r\n\t\t// Check if column or row is disabled\r\n\t\tif ((column.isDisabled || column.isReadonly) || (row.isDisabled || row.isReadonly)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Assign null value to selected cell\r\n\t\tthis.assignValueToSelectedCell(null, SpreadsheetCellChangeEventOrigin.EDIT);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse value for column\r\n\t * @param value \r\n\t * @param column \r\n\t */\r\n\tprivate async parseValueForColumn(value: any, column: ISpreadsheetColumn): Promise<any> {\r\n\t\t// Check if value is set\r\n\t\tif (typeof value === \"undefined\" || value === null) {\r\n\t\t\t// Return undefined\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Otherwise parse value based on type\r\n\t\tswitch (column.dataType) {\r\n\t\t\t// NUMBER\r\n\t\t\tcase SpreadsheetDataType.NUMBER:\r\n\t\t\t\t// First check if value set\r\n\t\t\t\tif (value === \"\") {\r\n\t\t\t\t\t// Return undefined\r\n\t\t\t\t\treturn undefined;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Parse value as number\r\n\t\t\t\treturn this.service.parseNumber(value);\r\n\r\n\t\t\t// STRING, default\r\n\t\t\tcase SpreadsheetDataType.STRING:\r\n\t\t\tdefault:\r\n\t\t\t\treturn `${value}`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Assign value to cell\r\n\t * @param value \r\n\t * @param rowIndex \r\n\t * @param columnIndex \r\n\t * @param origin \r\n\t */\r\n\tprivate async assignValueToCell(value: any, rowIndex: number, columnIndex: number, origin: number): Promise<void> {\r\n\t\t// Get record (default or empty)\r\n\t\tconst record = this.data[rowIndex] || {};\r\n\r\n\t\t// Get column\r\n\t\tconst column = this.columns[columnIndex];\r\n\t\t// Get row\r\n\t\tconst row = this.rows[rowIndex];\r\n\r\n\t\t// Check if column or row is readonly or disabled\r\n\t\tif ((column.isReadonly || column.isDisabled) || (row.isReadonly || row.isDisabled)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get key to value within record\r\n\t\tconst key = (typeof column.identifier === \"undefined\") ? column.label : column.identifier;\r\n\r\n\t\t// Get prev value\r\n\t\tconst prevValue = record[key];\r\n\r\n\t\t// Get next value\r\n\t\tconst nextValue = await this.parseValueForColumn(value, column);\r\n\r\n\t\t// Assign next value to record\r\n\t\trecord[key] = nextValue;\r\n\r\n\t\t// Also assign record to data\r\n\t\tthis.data[rowIndex] = record;\r\n\r\n\t\t// Now check values\r\n\t\tif (prevValue === nextValue) {\r\n\t\t\t// Do nothing else\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Init cell change event\r\n\t\tconst cellChangeEvent: ISpreadsheetCellChangeEvent = {};\r\n\r\n\t\t// Assign data\r\n\t\tcellChangeEvent.column = column;\r\n\t\tcellChangeEvent.row = { ...this.rows[rowIndex], index: rowIndex };\r\n\t\tcellChangeEvent.prev = prevValue;\r\n\t\tcellChangeEvent.current = nextValue;\r\n\t\tcellChangeEvent.origin = origin;\r\n\r\n\t\t// Emit cell change event\r\n\t\tthis.cellChangeEvent.emit(cellChangeEvent);\r\n\t}\r\n\r\n\t/**\r\n\t * Assign value to selected cell\r\n\t * @param value \r\n\t * @param origin \r\n\t */\r\n\tprivate async assignValueToSelectedCell(value: any, origin: number): Promise<void> {\r\n\t\t// Assign value to cell\r\n\t\treturn this.assignValueToCell(value, this._selectedRowIndex, this._selectedColumnIndex, origin);\r\n\t}\r\n\r\n\t/**\r\n\t * Process enter event\r\n\t * @param event \r\n\t */\r\n\tprivate async processEnterKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Now check if component has focus\r\n\t\t\tif (this._hasComponentFocus) {\r\n\t\t\t\t// Prevent default\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// Select first cell\r\n\t\t\t\treturn await this.selectCell(0, 0);\r\n\t\t\t}\r\n\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check for selected input\r\n\t\tif (!this.selectedInput || !this.selectedInput.nativeElement) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Get column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\t\t// Get row\r\n\t\tconst row = this.rows[this._selectedRowIndex];\r\n\r\n\t\t// Check if column or row is disabled\r\n\t\tif ((column.isDisabled || column.isReadonly) || (row.isDisabled || row.isReadonly)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check focus\r\n\t\tif (!this._hasSelectedInputFocus) {\r\n\t\t\t// Set focus\r\n\t\t\tthis.selectedInput.nativeElement.focus();\r\n\r\n\t\t\t// Set changed flag\r\n\t\t\tthis._hasSelectedInputValueChanged = true;\r\n\r\n\t\t\t// Do nothing else\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Assign value only when not undefined\r\n\t\tif (typeof this.selectedInput.nativeElement.value !== \"undefined\") {\r\n\t\t\t// Assign value to selected cell\r\n\t\t\tawait this.assignValueToSelectedCell(this.selectedInput.nativeElement.value, SpreadsheetCellChangeEventOrigin.EDIT);\r\n\t\t}\r\n\r\n\t\t// Blur input\r\n\t\tthis.selectedInput.nativeElement.blur();\r\n\r\n\t\t// Set changed flag\r\n\t\tthis._hasSelectedInputValueChanged = false;\r\n\r\n\t\t// Set focus back to this component\r\n\t\tsetTimeout(() => this.element.nativeElement.focus());\r\n\t}\r\n\r\n\t/**\r\n\t * Process escape key event\r\n\t * @param event \r\n\t */\r\n\tprivate async processEscapeKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check for selected input\r\n\t\tif (!this.selectedInput || !this.selectedInput.nativeElement) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Get selected column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\t\t// Get selected row\r\n\t\tconst row = this.rows[this._selectedRowIndex];\r\n\r\n\t\t// Check if column or row is disabled\r\n\t\tif ((column.isDisabled || column.isReadonly) || (row.isDisabled || row.isReadonly)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Reset changed flag\r\n\t\tthis._hasSelectedInputValueChanged = false;\r\n\r\n\t\t// Check if input has focus\r\n\t\tif (!this._hasSelectedInputFocus) {\r\n\t\t\t// Reset selected\r\n\t\t\tawait this.resetSelect();\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Reset value\r\n\t\t\tthis.selectedInput.nativeElement.value = this._selectedCell.value;\r\n\r\n\t\t\t// Blur\r\n\t\t\tthis.selectedInput.nativeElement.blur();\r\n\r\n\t\t\t// Set focus back to this component\r\n\t\t\tsetTimeout(() => this.element.nativeElement.focus());\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Process arrow key event\r\n\t * @param event\r\n\t */\r\n\tprivate async processArrowKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Now check if component has focus\r\n\t\t\tif (this._hasComponentFocus) {\r\n\t\t\t\t// Prevent default\r\n\t\t\t\tevent.preventDefault();\r\n\r\n\t\t\t\t// Select first cell\r\n\t\t\t\treturn await this.selectCell(0, 0);\r\n\t\t\t}\r\n\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get selected indexes\r\n\t\tlet rowIndex = this._selectedRowIndex;\r\n\t\tlet columnIndex = this._selectedColumnIndex;\r\n\r\n\t\t// Check for specific key\r\n\t\tswitch (event.key) {\r\n\t\t\t// Arrow left\r\n\t\t\tcase \"ArrowLeft\":\r\n\t\t\t\t// Check for focus\r\n\t\t\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t\t\t// Do nothing as input has focus\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumnIndex--;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// Arrow right\r\n\t\t\tcase \"ArrowRight\":\r\n\t\t\t\t// Check for focus\r\n\t\t\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t\t\t// Do nothing as input has focus\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcolumnIndex++;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// Arrow down\r\n\t\t\tcase \"ArrowDown\":\r\n\t\t\t\trowIndex++;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// Arrow up\r\n\t\t\tcase \"ArrowUp\":\r\n\t\t\t\trowIndex--;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\t// Prevent event default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Select cell\r\n\t\tawait this.selectCell(rowIndex, columnIndex);\r\n\r\n\t\t// Set focus back to this component\r\n\t\tsetTimeout(() => this.element.nativeElement.focus());\r\n\t}\r\n\r\n\t/**\r\n\t * Process copy event\r\n\t * @param event\r\n\t */\r\n\tprivate async processCopyEvent(event: ClipboardEvent): Promise<void> {\r\n\t\t// Get record (or default as empty)\r\n\t\tconst record = this.data[this._selectedRowIndex] || {};\r\n\r\n\t\t// Get column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\r\n\t\t// Check if column is disabled\r\n\t\tif (column.isDisabled) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get value\r\n\t\tconst value = record[(typeof column.identifier === \"undefined\") ? column.label : column.identifier] || \"\";\r\n\r\n\t\t// Set clipboard data from the cell\r\n\t\tevent.clipboardData.setData(\"text\", `${value}`);\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\t}\r\n\r\n\t/**\r\n\t * Process default key event\r\n\t * @param event \r\n\t */\r\n\tprivate async processDefaultKeyEvent(event: KeyboardEvent): Promise<void> {\r\n\t\t// Check if any cell is selected\r\n\t\tif (!this._selectedCell) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Check for input focus\r\n\t\tif (this._hasSelectedInputFocus) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get selected column\r\n\t\tconst column = this.columns[this._selectedColumnIndex];\r\n\t\t// Get selected row\r\n\t\tconst row = this.rows[this._selectedRowIndex];\r\n\r\n\t\t// Check if column or row is disabled\r\n\t\tif ((column.isDisabled || column.isReadonly) || (row.isDisabled || row.isReadonly)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Create character check function\r\n\t\tconst isCharacterKeyEvent = (event: KeyboardEvent): boolean => /^.$/u.test(event.key);\r\n\r\n\r\n\t\t// Check if event was raised by character key\r\n\t\tif (!isCharacterKeyEvent(event)) {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Prevent default\r\n\t\tevent.preventDefault();\r\n\r\n\t\t// Assign key to input\r\n\t\tthis.selectedInput.nativeElement.value = event.key;\r\n\t\t// Set focus\r\n\t\tthis.selectedInput.nativeElement.focus();\r\n\r\n\t\t// Set changed flag\r\n\t\tthis._hasSelectedInputValueChanged = true;\r\n\t}\r\n\r\n\t/**\r\n\t * Process paste event\r\n\t * @param event \r\n\t */\r\n\tprivate async processPasteEvent(event: ClipboardEvent): Promise<void> {\r\n\t\t// First get data\r\n\t\tconst data = event.clipboardData.getData(\"text\");\r\n\r\n\t\t// Check data\r\n\t\tif (typeof data === \"undefined\") {\r\n\t\t\t// Do nothing\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Otherwise split data into lines\r\n\t\tconst lines = data.split(/\\r?\\n/).filter((line) => line.length);\r\n\r\n\t\t// Now process each line\r\n\t\tfor (let index = 0, rowIndex = this._selectedRowIndex; index < lines.length; index++, rowIndex++) {\r\n\t\t\t// Get line\r\n\t\t\tconst line = lines[index];\r\n\r\n\t\t\t// Split line into values\r\n\t\t\tconst values = line.split(\"\\t\");\r\n\r\n\t\t\t// Now it is time to process the values\r\n\t\t\tfor (let vIndex = 0, columnIndex = this._selectedColumnIndex; vIndex < values.length && columnIndex < this.columns.length; vIndex++, columnIndex++) {\r\n\t\t\t\t// Get value\r\n\t\t\t\tconst value = values[vIndex];\r\n\r\n\t\t\t\t// Assign value to cell\r\n\t\t\t\tawait this.assignValueToCell(value, rowIndex, columnIndex, SpreadsheetCellChangeEventOrigin.CLIPBOARD);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Register to focus change\r\n\t */\r\n\tprivate registerToFocusChange(): void {\r\n\t\tthis.focusChange$\r\n\t\t\t// Wait 50ms to get the most recent value \r\n\t\t\t.pipe((debounceTime(50)))\r\n\t\t\t.subscribe(() => this.isFocused = this._hasComponentFocus || this._hasSelectedInputFocus);\r\n\t}\r\n}\r\n","<table class=\"ngx-spreadsheet-table\">\r\n    <thead class=\"ngx-spreadsheet-table__head\">\r\n        <tr class=\"ngx-spreadsheet-row ngx-spreadsheet-row--head\">\r\n            <th class=\"ngx-spreadsheet-column ngx-spreadsheet-column--first\"></th>\r\n            <th *ngFor=\"let column of columns; let columnIndex = index; trackBy:trackColumnsByFn\" class=\"ngx-spreadsheet-column\"\r\n                [class.ngx-spreadsheet-column--selected]=\"columnIndex === selectedColumnIndex\"\r\n                [class.ngx-spreadsheet-column--disabled]=\"column.isDisabled\"\r\n                [class.ngx-spreadsheet-column--readonly]=\"column.isReadonly\">\r\n                {{ column.label || (columnIndex + 1) }}</th>\r\n        </tr>\r\n    </thead>\r\n    <tbody class=\"ngx-spreadsheet-table__body\">\r\n        <tr *ngFor=\"let row of rows; let rowIndex = index; trackBy:trackRowsByFn\" class=\"ngx-spreadsheet-row ngx-spreadsheet-row--body\"\r\n            [class.ngx-spreadsheet-row--selected]=\"rowIndex === selectedRowIndex\">\r\n            <td class=\"ngx-spreadsheet-cell ngx-spreadsheet-cell--first\">{{ row.label || (rowIndex + 1) }}</td>\r\n            <td ngxSpreadsheetCell *ngFor=\"let column of columns; let columnIndex = index; trackBy:trackColumnsByFn\" [rowIndex]=\"rowIndex\"\r\n                [columnIndex]=\"columnIndex\" [column]=\"columns[columnIndex]\" [row]=\"rows[rowIndex]\"\r\n                [record]=\"data[rowIndex]\" (click)=\"onCellClick($event, rowIndex, columnIndex)\"\r\n                class=\"ngx-spreadsheet-cell\">\r\n            </td>\r\n        </tr>\r\n    </tbody>\r\n\r\n    <ngx-spreadsheet-selected *ngIf=\"selectedCell\" [cell]=\"selectedCell\">\r\n        <input tabindex=\"-1\" #selectedInput [readonly]=\"selectedCell.isReadonly\" [disabled]=\"selectedCell.isDisabled\"\r\n            (focus)=\"onSelectedInputFocus($event)\" (blur)=\"onSelectedInputBlur($event)\" [value]=\"selectedCell.value\"\r\n            class=\"ngx-spreadsheet-input\" type=\"text\">\r\n    </ngx-spreadsheet-selected>\r\n</table>","// External modules\r\nimport { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Components\r\nimport { SpreadsheetComponent } from \"./spreadsheet.component\";\r\nimport { SpreadsheetCellComponent } from \"./components/cell/cell.component\";\r\nimport { SpreadsheetSelectedComponent } from \"./components/selected/selected.component\";\r\n\r\n// Pipes\r\nimport { SpreadsheetFormatterPipe } from \"./pipes/formatter.pipe\";\r\n\r\n// Services\r\nimport { SpreadsheetUtilityService } from \"./services/utility.service\";\r\n\r\n@NgModule({\r\n\timports: [\r\n\t\tCommonModule\r\n\t],\r\n\tdeclarations: [\r\n\t\tSpreadsheetComponent,\r\n\t\tSpreadsheetCellComponent,\r\n\t\tSpreadsheetSelectedComponent,\r\n\t\tSpreadsheetFormatterPipe\r\n\t],\r\n\texports: [SpreadsheetComponent],\r\n\tproviders: [SpreadsheetUtilityService]\r\n})\r\nexport class SpreadsheetModule { }\r\n","/*\r\n * Public API Surface of spreadsheet\r\n */\r\n\r\nexport * from \"./lib/spreadsheet.component\";\r\nexport * from \"./lib/spreadsheet.module\";\r\nexport * from \"./lib/interfaces/column.interface\";\r\nexport * from \"./lib/interfaces/columns.interface\";\r\nexport * from \"./lib/interfaces/data.interface\";\r\nexport * from \"./lib/interfaces/row.interface\";\r\nexport * from \"./lib/interfaces/rows.interface\";\r\nexport * from \"./lib/interfaces/style.interface\";\r\nexport * from \"./lib/interfaces/cell-change-event.interface\";\r\nexport * from \"./lib/interfaces/columns-definition.interface\";\r\nexport * from \"./lib/interfaces/rows-definition.interface\";\r\nexport * from \"./lib/enums/font-weight.enum\";\r\nexport * from \"./lib/enums/text-align.enum\";\r\nexport * from \"./lib/enums/vertical-align.enum\";\r\nexport * from \"./lib/enums/mode.enum\";\r\nexport * from \"./lib/enums/data-type.enum\";\r\nexport * from \"./lib/enums/cell-change-event-origin.enum\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SpreadsheetFormatterPipe","i1.SpreadsheetUtilityService","i3.SpreadsheetCellComponent","i4.SpreadsheetSelectedComponent"],"mappings":"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"}