{ "version": 3, "sources": ["../src/index.ts", "../src/core/base.ts", "../src/core/column.ts", "../src/core/event.ts", "../src/core/editing.ts", "../src/core/util.ts", "../src/core/formatting.ts", "../src/core/group.ts", "../src/core/range.ts", "../src/grid/gridoptions.ts", "../src/grid/basiclayout.ts", "../src/grid/cellnavigator.ts", "../src/grid/internal.ts", "../src/grid/grid.ts", "../src/layouts/frozenlayout.ts", "../src/formatters/formatters.ts", "../src/formatters/index.ts", "../src/editors/editors.ts", "../src/editors/index.ts", "../src/data/groupitemmetadataprovider.ts", "../src/plugins/autotooltips.ts", "../src/plugins/rowmovemanager.ts", "../src/plugins/rowselectionmodel.ts"], "sourcesContent": ["export * from \"./core\";\nexport * from \"./grid\";\nexport * from \"./layouts/frozenlayout\";\nexport * from \"./formatters\";\nexport * from \"./editors\";\nexport * from \"./data/groupitemmetadataprovider\";\nexport * from \"./plugins/autotooltips\";\nexport * from \"./plugins/rowmovemanager\";\nexport * from \"./plugins/rowselectionmodel\";", "/***\n * A base class that all special / non-data rows (like Group and GroupTotals) derive from.\n */\nexport class NonDataRow {\n __nonDataRow: boolean = true;\n}\n\nexport const preClickClassName = \"slick-edit-preclick\";", "import type { AsyncPostCleanup, AsyncPostRender, ColumnFormat, CompatFormatter } from \"./formatting\";\nimport { GroupTotals } from \"./group\";\nimport { EditorClass, ValidationResult } from \"./editing\";\n\nexport interface Column {\n asyncPostRender?: AsyncPostRender;\n asyncPostRenderCleanup?: AsyncPostCleanup;\n behavior?: any;\n cannotTriggerInsert?: boolean;\n cssClass?: string;\n defaultSortAsc?: boolean;\n editor?: EditorClass;\n editorFixedDecimalPlaces?: number;\n field?: string;\n frozen?: boolean;\n focusable?: boolean;\n footerCssClass?: string;\n format?: ColumnFormat;\n /** @deprecated */\n formatter?: CompatFormatter;\n groupTotalsFormatter?: (p1?: GroupTotals, p2?: Column, grid?: unknown) => string;\n headerCssClass?: string;\n id?: string;\n maxWidth?: any;\n minWidth?: number;\n name?: string;\n nameIsHtml?: boolean;\n previousWidth?: number;\n referencedFields?: string[];\n rerenderOnResize?: boolean;\n resizable?: boolean;\n selectable?: boolean;\n sortable?: boolean;\n sortOrder?: number;\n toolTip?: string;\n validator?: (value: any, editorArgs?: any) => ValidationResult;\n visible?: boolean;\n width?: number;\n}\n\nexport const columnDefaults: Partial = {\n nameIsHtml: false,\n resizable: true,\n sortable: false,\n minWidth: 30,\n rerenderOnResize: false,\n defaultSortAsc: true,\n focusable: true,\n selectable: true\n};\n\nexport interface ColumnMetadata {\n colspan: number | '*';\n cssClasses?: string;\n editor?: EditorClass;\n format?: ColumnFormat;\n /** @deprecated */\n formatter?: CompatFormatter;\n}\n\nexport interface ColumnSort {\n columnId: string;\n sortAsc?: boolean;\n}\n\nexport interface ItemMetadata {\n cssClasses?: string;\n columns?: { [key: string]: ColumnMetadata };\n focusable?: boolean;\n format?: ColumnFormat;\n /** @deprecated */\n formatter?: CompatFormatter;\n selectable?: boolean;\n}\n\nexport function initializeColumns(columns: Column[], defaults: Partial>) {\n var usedIds: { [key: string]: boolean } = {};\n\n for (var i = 0; i < columns.length; i++) {\n var m = columns[i];\n\n if (defaults != null) {\n for (var k in defaults) {\n if ((m as any)[k] === undefined)\n (m as any)[k] = (defaults as any)[k];\n }\n }\n\n if (m.minWidth && m.width < m.minWidth)\n m.width = m.minWidth;\n\n if (m.maxWidth && m.width > m.maxWidth)\n m.width = m.maxWidth;\n\n if (m.id == null ||\n usedIds[m.id]) {\n const prefix = m.id != null && m.id.length ? m.id :\n m.field != null ? m.field : ('col');\n var x = 0;\n while (usedIds[(m.id = prefix + (x == 0 ? \"\" : '_' + x.toString()))]) x++;\n }\n\n usedIds[m.id] = true;\n\n if (m.name === void 0) {\n m.name = titleize(m.field ?? m.id);\n delete m.nameIsHtml;\n }\n }\n}\n\nexport function titleize(str: string) {\n if (!str)\n return str;\n\n str = (\"\" + str).replace(/([A-Z]+)([A-Z][a-z])/, \"$1_$2\")\n .replace(/([a-z\\d])([A-Z])/, \"$1_$2\")\n .replace(/[-\\s]/, \"_\").toLowerCase();\n\n return str.replace(/\\s/, '_').split('_').filter(x => x.length)\n .map(x => x.charAt(0).toUpperCase() + x.substring(1).toLowerCase()).join(' ');\n}\n", "export type EventListener = (e: TEventData, args: TArgs) => void;\n\nexport interface IEventData {\n readonly type?: string;\n currentTarget?: EventTarget | null;\n target?: EventTarget | null;\n originalEvent?: any;\n defaultPrevented?: boolean;\n preventDefault?(): void;\n stopPropagation?(): void;\n stopImmediatePropagation?(): void;\n isDefaultPrevented?(): boolean;\n isImmediatePropagationStopped?(): boolean;\n isPropagationStopped?(): boolean;\n}\n\n/***\n * An event object for passing data to event handlers and letting them control propagation.\n *

This is pretty much identical to how W3C and jQuery implement events.

\n */\nexport class EventData implements IEventData {\n private _isPropagationStopped = false;\n private _isImmediatePropagationStopped = false;\n\n /***\n * Stops event from propagating up the DOM tree.\n * @method stopPropagation\n */\n stopPropagation() {\n this._isPropagationStopped = true;\n }\n\n /***\n * Returns whether stopPropagation was called on this event object.\n */\n isPropagationStopped(): boolean {\n return this._isPropagationStopped;\n }\n\n /***\n * Prevents the rest of the handlers from being executed.\n */\n stopImmediatePropagation() {\n this._isImmediatePropagationStopped = true;\n }\n\n /***\n * Returns whether stopImmediatePropagation was called on this event object.\\\n */\n isImmediatePropagationStopped(): boolean {\n return this._isImmediatePropagationStopped;\n }\n}\n\n/***\n * A simple publisher-subscriber implementation.\n */\nexport class EventEmitter {\n\n private _handlers: EventListener[] = [];\n\n /***\n * Adds an event handler to be called when the event is fired.\n *

Event handler will receive two arguments - an EventData and the data\n * object the event was fired with.

\n * @method subscribe\n * @param fn {Function} Event handler.\n */\n subscribe(fn: EventListener) {\n this._handlers.push(fn);\n }\n\n /***\n * Removes an event handler added with subscribe(fn).\n * @method unsubscribe\n * @param fn {Function} Event handler to be removed.\n */\n unsubscribe(fn: EventListener) {\n for (var i = this._handlers.length - 1; i >= 0; i--) {\n if (this._handlers[i] === fn) {\n this._handlers.splice(i, 1);\n }\n }\n }\n\n /***\n * Fires an event notifying all subscribers.\n * @param args {Object} Additional data object to be passed to all handlers.\n * @param e {EventData}\n * Optional.\n * An EventData object to be passed to all handlers.\n * For DOM events, an existing W3C/jQuery event object can be passed in.\n * @param scope {Object}\n * Optional.\n * The scope (\"this\") within which the handler will be executed.\n * If not specified, the scope will be set to the Event instance.\n */\n notify(args?: any, e?: TEventData, scope?: object) {\n e = patchEvent(e) || new EventData() as any;\n scope = scope || this;\n\n var returnValue;\n for (var i = 0; i < this._handlers.length && !(e.isPropagationStopped() || e.isImmediatePropagationStopped()); i++) {\n returnValue = this._handlers[i].call(scope, e, args);\n }\n\n return returnValue;\n }\n\n clear() {\n this._handlers = [];\n }\n}\n\ninterface EventSubscriberEntry {\n event: EventEmitter;\n handler: EventListener;\n}\n\nexport class EventSubscriber {\n private _handlers: EventSubscriberEntry[] = [];\n\n subscribe(event: EventEmitter, handler: EventListener): this {\n this._handlers.push({\n event: event,\n handler: handler\n });\n event.subscribe(handler);\n\n return this;\n }\n\n unsubscribe(event: EventEmitter, handler: EventListener): this {\n var i = this._handlers.length;\n while (i--) {\n if (this._handlers[i].event === event &&\n this._handlers[i].handler === handler) {\n this._handlers.splice(i, 1);\n event.unsubscribe(handler);\n return this;\n }\n }\n\n return this;\n }\n\n unsubscribeAll(): EventSubscriber {\n var i = this._handlers.length;\n while (i--) {\n this._handlers[i].event.unsubscribe(this._handlers[i].handler);\n }\n this._handlers = [];\n\n return this; // allow chaining\n }\n}\n\n/** @deprecated */\nexport const keyCode = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n INSERT: 45,\n LEFT: 37,\n PAGEDOWN: 34,\n PAGEUP: 33,\n RIGHT: 39,\n TAB: 9,\n UP: 38\n}\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// patches event so that it has methods jQuery event objects provides, for backward compatibility when jQuery is not loaded\nexport function patchEvent(e: IEventData) {\n if (e == null)\n return e;\n\n if (!e.isDefaultPrevented && e.preventDefault)\n e.isDefaultPrevented = function() { return this.defaultPrevented; }\n\n var org1: () => void, org2: () => void;\n if (!e.isImmediatePropagationStopped && (org1 = e.stopImmediatePropagation)) {\n e.isImmediatePropagationStopped = returnFalse;\n e.stopImmediatePropagation = function() { this.isImmediatePropagationStopped = returnTrue; org1.call(this); }\n }\n\n if (!e.isPropagationStopped && (org2 = e.stopPropagation)) {\n e.isPropagationStopped = returnFalse;\n e.stopPropagation = function() { this.isPropagationStopped = returnTrue; org2.call(this); }\n }\n\n return e;\n}\n", "import { Column, ColumnMetadata } from \"./column\";\nimport { EventEmitter, IEventData } from \"./event\";\n\nexport interface Position {\n bottom?: number;\n height?: number;\n left?: number;\n right?: number;\n top?: number;\n visible?: boolean;\n width?: number;\n}\n\nexport interface ValidationResult {\n valid: boolean;\n msg?: string;\n}\n\nexport interface RowCell {\n row: number;\n cell: number;\n}\n\nexport interface EditorHost {\n getActiveCell(): RowCell;\n navigateNext(): boolean;\n navigatePrev(): boolean;\n onCompositeEditorChange: EventEmitter;\n}\n\ninterface CompositeEditorOptions {\n formValues: any;\n}\n\nexport interface EditorOptions {\n grid: EditorHost;\n gridPosition?: Position;\n position?: Position;\n editorCellNavOnLRKeys?: boolean;\n column?: Column;\n columnMetaData?: ColumnMetadata;\n compositeEditorOptions?: CompositeEditorOptions;\n container?: HTMLElement;\n item?: any;\n event?: IEventData;\n commitChanges?: () => void,\n cancelChanges?: () => void\n}\n\nexport interface EditorFactory {\n getEditor(column: Column, row?: number): EditorClass;\n}\n\nexport interface EditCommand {\n row: number;\n cell: number;\n editor: Editor;\n serializedValue: any;\n prevSerializedValue: any;\n execute: () => void;\n undo: () => void;\n}\n\nexport interface EditorClass {\n new(options: EditorOptions): Editor;\n suppressClearOnEdit?: boolean;\n}\n\nexport interface Editor {\n destroy(): void;\n applyValue(item: any, value: any): void;\n focus(): void;\n isValueChanged(): boolean;\n keyCaptureList?: number[];\n loadValue(value: any): void;\n serializeValue(): any;\n position?(pos: Position): void;\n preClick?(): void;\n hide?(): void;\n show?(): void;\n validate?(): ValidationResult;\n}\n\nexport interface EditController {\n commitCurrentEdit(): boolean;\n cancelCurrentEdit(): boolean;\n}\n\n/***\n * A locking helper to track the active edit controller and ensure that only a single controller\n * can be active at a time. This prevents a whole class of state and validation synchronization\n * issues. An edit controller (such as SleekGrid) can query if an active edit is in progress\n * and attempt a commit or cancel before proceeding.\n * @class EditorLock\n * @constructor\n */\nexport class EditorLock {\n private activeEditController: EditController;\n\n /***\n * Returns true if a specified edit controller is active (has the edit lock).\n * If the parameter is not specified, returns true if any edit controller is active.\n * @method isActive\n * @param editController {EditController}\n * @return {Boolean}\n */\n isActive(editController?: EditController): boolean {\n return (editController ? this.activeEditController === editController : this.activeEditController != null);\n }\n\n /***\n * Sets the specified edit controller as the active edit controller (acquire edit lock).\n * If another edit controller is already active, and exception will be thrown.\n * @method activate\n * @param editController {EditController} edit controller acquiring the lock\n */\n activate(editController: EditController) {\n if (editController === this.activeEditController) { // already activated?\n return;\n }\n if (this.activeEditController != null) {\n throw \"SleekGrid.EditorLock.activate: an editController is still active, can't activate another editController\";\n }\n if (!editController.commitCurrentEdit) {\n throw \"SleekGrid.EditorLock.activate: editController must implement .commitCurrentEdit()\";\n }\n if (!editController.cancelCurrentEdit) {\n throw \"SleekGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()\";\n }\n this.activeEditController = editController;\n }\n\n /***\n * Unsets the specified edit controller as the active edit controller (release edit lock).\n * If the specified edit controller is not the active one, an exception will be thrown.\n * @method deactivate\n * @param editController {EditController} edit controller releasing the lock\n */\n deactivate(editController: EditController) {\n if (this.activeEditController !== editController) {\n throw \"SleekGrid.EditorLock.deactivate: specified editController is not the currently active one\";\n }\n this.activeEditController = null;\n }\n\n /***\n * Attempts to commit the current edit by calling \"commitCurrentEdit\" method on the active edit\n * controller and returns whether the commit attempt was successful (commit may fail due to validation\n * errors, etc.). Edit controller's \"commitCurrentEdit\" must return true if the commit has succeeded\n * and false otherwise. If no edit controller is active, returns true.\n * @method commitCurrentEdit\n * @return {Boolean}\n */\n commitCurrentEdit(): boolean {\n return (this.activeEditController ? this.activeEditController.commitCurrentEdit() : true);\n }\n\n /***\n * Attempts to cancel the current edit by calling \"cancelCurrentEdit\" method on the active edit\n * controller and returns whether the edit was successfully cancelled. If no edit controller is\n * active, returns true.\n * @method cancelCurrentEdit\n * @return {Boolean}\n */\n cancelCurrentEdit(): boolean {\n return (this.activeEditController ? this.activeEditController.cancelCurrentEdit() : true);\n }\n}\n\n/***\n * A global singleton editor lock.\n * @class GlobalEditorLock\n * @static\n * @constructor\n */\nexport const GlobalEditorLock = new EditorLock();\n", "export function addClass(el: Element, cls: string) {\n if (cls == null || !cls.length)\n return;\n\n if (cls.indexOf(' ') >= 0) {\n var arr = cls.split(' ').map(x => x.trim()).filter(x => x.length);\n for (var a of arr)\n el.classList.add(a);\n }\n else\n el.classList.add(cls);\n}\n\nconst esc: Record = {\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": \"'\",\n '&': '&',\n}\n\nfunction escFunc(a: string) {\n return esc[a];\n}\n\nexport function escape(s: any) {\n if (!arguments.length)\n s = this.value;\n\n if (s == null)\n return '';\n\n if (typeof s !== \"string\")\n s = \"\" + s;\n\n return s.replace(/[<>\"'&]/g, escFunc)\n}\n\nexport function disableSelection(target: HTMLElement) {\n if (target) {\n target.setAttribute('unselectable', 'on');\n target.style.userSelect = \"none\";\n target.addEventListener('selectstart', () => false);\n }\n}\n\nexport function removeClass(el: Element, cls: string) {\n if (cls == null || !cls.length)\n return;\n\n if (cls.indexOf(' ') >= 0) {\n var arr = cls.split(' ').map(x => x.trim()).filter(x => x.length);\n for (var a of arr)\n el.classList.remove(a);\n }\n else\n el.classList.remove(cls);\n}\n\nexport function H(tag: K, attr?: { ref?: (el?: HTMLElementTagNameMap[K]) => void, [key: string]: string | number | boolean | ((el?: HTMLElementTagNameMap[K]) => void) | null | undefined }, ...children: (string | Node)[]): HTMLElementTagNameMap[K] {\n var el = document.createElement(tag);\n var k: string, v: any, c: Node | string;\n if (attr) {\n for (k in attr) {\n v = attr[k];\n if (v != null && v !== false) {\n if (k === \"ref\" && typeof v === \"function\") {\n (v as any)(el);\n continue;\n }\n\n var key = k === \"className\" ? \"class\" : k;\n el.setAttribute(key, v === true ? '' : v as string);\n }\n }\n }\n\n if (children && children.length)\n el.append(...children);\n\n return el;\n}\n\nexport function spacerDiv(width: string): HTMLDivElement {\n return H('div', { style: 'display:block;height:1px;position:absolute;top:0;left:0;', width });\n}\n\nexport function parsePx(str: string) {\n var value = parseFloat(str);\n if (isNaN(value))\n return 0;\n return value;\n}\n", "import { addClass, escape, removeClass } from \"./util\";\nimport type { Column } from \"./column\";\n\nexport interface FormatterContext {\n addAttrs?: { [key: string]: string; };\n addClass?: string;\n cell?: number;\n column?: Column;\n /** returns html escaped ctx.value if called without arguments. prefer this over ctx.value to avoid html injection attacks! */\n readonly escape: ((value?: any) => string);\n grid?: any;\n item?: TItem;\n row?: number;\n tooltip?: string;\n /** when returning a formatter result, prefer ctx.escape() to avoid script injection attacks! */\n value?: any;\n}\n\nexport type FormatterResult = (string | Element | DocumentFragment);\nexport type ColumnFormat = (ctx: FormatterContext) => FormatterResult;\n\nexport interface CompatFormatterResult {\n addClasses?: string;\n text?: FormatterResult;\n toolTip?: string;\n}\n\nexport type CompatFormatter = (row: number, cell: number, value: any, column: Column, item: TItem, grid?: any) => string | CompatFormatterResult;\n\nexport interface FormatterFactory {\n getFormat?(column: Column): ColumnFormat;\n getFormatter?(column: Column): CompatFormatter;\n}\n\nexport type AsyncPostRender = (cellNode: HTMLElement, row: number, item: TItem, column: Column, reRender: boolean) => void;\nexport type AsyncPostCleanup = (cellNode: HTMLElement, row?: number, column?: Column) => void;\n\nexport type CellStylesHash = { [row: number]: { [columnId: string]: string } }\n\nexport function defaultColumnFormat(ctx: FormatterContext) {\n return escape(ctx.value);\n}\n\nexport function convertCompatFormatter(compatFormatter: CompatFormatter): ColumnFormat {\n if (compatFormatter == null)\n return null;\n\n return function(ctx: FormatterContext): FormatterResult {\n var fmtResult = compatFormatter(ctx.row, ctx.cell, ctx.value, ctx.column, ctx.item, ctx.grid);\n if (fmtResult != null && typeof fmtResult !== 'string' && Object.prototype.toString.call(fmtResult) === '[object Object]') {\n ctx.addClass = fmtResult.addClasses;\n ctx.tooltip = fmtResult.toolTip;\n return fmtResult.text;\n }\n return fmtResult as string;\n }\n}\n\nexport function applyFormatterResultToCellNode(ctx: FormatterContext, html: FormatterResult, node: HTMLElement) {\n var oldFmtAtt = node.dataset.fmtatt as string;\n if (oldFmtAtt?.length > 0) {\n for (var k of oldFmtAtt.split(','))\n node.removeAttribute(k);\n delete node.dataset.fmtatt;\n }\n\n var oldFmtCls = node.dataset.fmtcls;\n if (oldFmtCls?.length && (ctx.addClass != oldFmtCls)) {\n removeClass(node, oldFmtCls);\n if (!ctx.addClass?.length)\n delete node.dataset.fmtcls;\n }\n\n var oldTooltip = node.getAttribute('tooltip');\n if (oldTooltip != null && ctx.tooltip != oldTooltip)\n node.removeAttribute('tooltip');\n\n if (ctx.tooltip !== undefined && oldTooltip != ctx.tooltip)\n node.setAttribute('tooltip', ctx.tooltip);\n\n if (html == void 0)\n node.innerHTML = \"\";\n else if (html instanceof Node) {\n node.appendChild(html);\n }\n else\n node.innerHTML = \"\" + html;\n\n if (ctx.addAttrs != null) {\n var keys = Object.keys(ctx.addAttrs);\n if (keys.length) {\n for (var k of keys) {\n node.setAttribute(k, ctx.addAttrs[k]);\n }\n node.dataset.fmtatt = keys.join(',');\n }\n }\n\n if (ctx.addClass?.length) {\n addClass(node, ctx.addClass);\n node.dataset.fmtcls = ctx.addClass;\n }\n}\n", "import { NonDataRow } from \"./base\";\n\n/***\n * Information about a group of rows.\n */\nexport class Group extends NonDataRow {\n readonly __group = true;\n\n /**\n * Grouping level, starting with 0.\n * @property level\n * @type {Number}\n */\n level: number = 0;\n\n /***\n * Number of rows in the group.\n * @property count\n * @type {Number}\n */\n count: number = 0;\n\n /***\n * Grouping value.\n * @property value\n * @type {Object}\n */\n value: any;\n\n /***\n * Formatted display value of the group.\n * @property title\n * @type {String}\n */\n title: string;\n\n /***\n * Whether a group is collapsed.\n * @property collapsed\n * @type {Boolean}\n */\n collapsed: boolean = false;\n\n /***\n * GroupTotals, if any.\n * @property totals\n * @type {GroupTotals}\n */\n totals: GroupTotals;\n\n /**\n * Rows that are part of the group.\n * @property rows\n * @type {Array}\n */\n rows: TEntity[] = [];\n\n /**\n * Sub-groups that are part of the group.\n * @property groups\n * @type {Array}\n */\n groups: Group[];\n\n /**\n * A unique key used to identify the group. This key can be used in calls to DataView\n * collapseGroup() or expandGroup().\n * @property groupingKey\n * @type {Object}\n */\n groupingKey: string;\n\n\n /***\n * Compares two Group instances.\n * @method equals\n * @return {Boolean}\n * @param group {Group} Group instance to compare to.\n */\n equals(group: Group): boolean {\n return this.value === group.value &&\n this.count === group.count &&\n this.collapsed === group.collapsed &&\n this.title === group.title;\n }\n}\n\n/***\n * Information about group totals.\n * An instance of GroupTotals will be created for each totals row and passed to the aggregators\n * so that they can store arbitrary data in it. That data can later be accessed by group totals\n * formatters during the display.\n * @class GroupTotals\n * @extends NonDataRow\n * @constructor\n */\n export class GroupTotals extends NonDataRow {\n\n readonly __groupTotals = true;\n\n /***\n * Parent Group.\n * @param group\n * @type {Group}\n */\n group: Group;\n\n /***\n * Whether the totals have been fully initialized / calculated.\n * Will be set to false for lazy-calculated group totals.\n * @param initialized\n * @type {Boolean}\n */\n initialized: boolean = false;\n\n /**\n * Contains sum\n */\n sum?: number;\n\n /**\n * Contains avg\n */\n avg?: number;\n\n /**\n * Contains min\n */\n min?: any;\n\n /**\n * Contains max\n */\n max?: any;\n}\n", "/*\n * A structure containing a range of cells.\n * @param fromRow {Integer} Starting row.\n * @param fromCell {Integer} Starting cell.\n * @param toRow {Integer} Optional. Ending row. Defaults to fromRow.\n * @param toCell {Integer} Optional. Ending cell. Defaults to fromCell.\n */\nexport class Range {\n\n public fromRow: number;\n public fromCell: number;\n public toRow: number;\n public toCell: number;\n\n constructor(fromRow: number, fromCell: number, toRow?: number, toCell?: number) {\n if (toRow === undefined && toCell === undefined) {\n toRow = fromRow;\n toCell = fromCell;\n }\n\n this.fromRow = Math.min(fromRow, toRow);\n this.fromCell = Math.min(fromCell, toCell);\n this.toRow = Math.max(fromRow, toRow);\n this.toCell = Math.max(fromCell, toCell);\n }\n\n /***\n * Returns whether a range represents a single row.\n */\n isSingleRow(): boolean {\n return this.fromRow == this.toRow;\n }\n\n /***\n * Returns whether a range represents a single cell.\n */\n isSingleCell(): boolean {\n return this.fromRow == this.toRow && this.fromCell == this.toCell;\n }\n\n /***\n * Returns whether a range contains a given cell.\n */\n contains(row: number, cell: number): boolean {\n return row >= this.fromRow && row <= this.toRow &&\n cell >= this.fromCell && cell <= this.toCell;\n }\n\n /***\n * Returns a readable representation of a range.\n */\n toString(): string {\n if (this.isSingleCell()) {\n return \"(\" + this.fromRow + \":\" + this.fromCell + \")\";\n }\n else {\n return \"(\" + this.fromRow + \":\" + this.fromCell + \" - \" + this.toRow + \":\" + this.toCell + \")\";\n }\n }\n}\n", "import type { Column, EditCommand, EditorFactory, EditorLock } from \"../core\";\nimport { ColumnFormat, CompatFormatter, defaultColumnFormat, FormatterFactory, GlobalEditorLock, GroupTotals } from \"../core\";\nimport { LayoutEngine } from \"./layout\";\n\nexport interface GridOptions {\n addNewRowCssClass?: string;\n alwaysAllowHorizontalScroll?: boolean;\n alwaysShowVerticalScroll?: boolean;\n asyncEditorLoadDelay?: number;\n asyncEditorLoading?: boolean;\n asyncPostCleanupDelay?: number;\n asyncPostRenderDelay?: number;\n autoEdit?: boolean;\n autoHeight?: boolean;\n cellFlashingCssClass?: string;\n cellHighlightCssClass?: string;\n emptyNode?: (node: Element) => void;\n columns?: Column[];\n createPreHeaderPanel?: boolean;\n dataItemColumnValueExtractor?: (item: TItem, column: Column) => void;\n defaultColumnWidth?: number;\n defaultFormat?: ColumnFormat;\n defaultFormatter?: CompatFormatter;\n editable?: boolean;\n editCommandHandler?: (item: TItem, column: Column, command: EditCommand) => void;\n editorCellNavOnLRKeys?: boolean;\n editorFactory?: EditorFactory;\n editorLock?: EditorLock;\n enableAddRow?: boolean;\n enableAsyncPostRender?: boolean;\n enableAsyncPostRenderCleanup?: boolean;\n enableCellNavigation?: boolean;\n enableCellRangeSelection?: boolean;\n enableColumnReorder?: boolean;\n enableRowReordering?: boolean;\n enableTabKeyNavigation?: boolean;\n enableTextSelectionOnCells?: boolean;\n explicitInitialization?: boolean;\n footerRowHeight?: number;\n forceFitColumns?: boolean;\n forceSyncScrolling?: boolean;\n forceSyncScrollInterval?: number;\n formatterFactory?: FormatterFactory;\n frozenBottom?: boolean;\n frozenColumns?: number;\n frozenRows?: number;\n fullWidthRows?: boolean;\n groupingPanel?: boolean,\n groupingPanelHeight?: number;\n groupTotalsFormatter?: (p1?: GroupTotals, p2?: Column, grid?: any) => string;\n headerRowHeight?: number;\n jQuery?: { ready: any, fn: any };\n leaveSpaceForNewRows?: boolean;\n layoutEngine?: LayoutEngine;\n minBuffer?: number;\n multiColumnSort?: boolean;\n multiSelect?: boolean;\n preHeaderPanelHeight?: number;\n renderAllCells?: boolean;\n removeNode?: (node: Element) => void;\n rowHeight?: number;\n rtl?: boolean;\n selectedCellCssClass?: string;\n showCellSelection?: boolean;\n showColumnHeader?: boolean;\n showFooterRow?: boolean;\n showGroupingPanel?: boolean;\n showHeaderRow?: boolean;\n showPreHeaderPanel?: boolean;\n showTopPanel?: boolean;\n slickCompat?: boolean;\n suppressActiveCellChangeOnEdit?: boolean;\n syncColumnCellResize?: boolean;\n topPanelHeight?: number;\n useLegacyUI?: boolean;\n useCssVars?: boolean;\n viewportClass?: string;\n}\n\nexport const gridDefaults: GridOptions = {\n addNewRowCssClass: \"new-row\",\n alwaysAllowHorizontalScroll: false,\n alwaysShowVerticalScroll: false,\n asyncEditorLoadDelay: 100,\n asyncEditorLoading: false,\n asyncPostCleanupDelay: 40,\n asyncPostRenderDelay: -1,\n autoEdit: true,\n autoHeight: false,\n cellFlashingCssClass: \"flashing\",\n dataItemColumnValueExtractor: null,\n defaultColumnWidth: 80,\n defaultFormat: defaultColumnFormat,\n editable: false,\n editorFactory: null,\n editorLock: GlobalEditorLock,\n enableAddRow: false,\n enableAsyncPostRender: false,\n enableAsyncPostRenderCleanup: false,\n enableCellNavigation: true,\n enableColumnReorder: true,\n enableTabKeyNavigation: true,\n enableTextSelectionOnCells: false,\n explicitInitialization: false,\n footerRowHeight: 30,\n forceFitColumns: false,\n forceSyncScrolling: false,\n forceSyncScrollInterval: 250,\n formatterFactory: null,\n fullWidthRows: false,\n groupingPanel: false,\n groupingPanelHeight: 30,\n headerRowHeight: 30,\n leaveSpaceForNewRows: false,\n minBuffer: 3,\n multiColumnSort: false,\n multiSelect: true,\n renderAllCells: false,\n rowHeight: 30,\n selectedCellCssClass: \"selected\",\n showCellSelection: true,\n showColumnHeader: true,\n showFooterRow: false,\n showGroupingPanel: true,\n showHeaderRow: false,\n showTopPanel: false,\n suppressActiveCellChangeOnEdit: false,\n topPanelHeight: 30,\n useLegacyUI: true,\n useCssVars: false\n}\n", "import { Column, H, parsePx, spacerDiv } from \"../core\";\nimport { LayoutEngine, LayoutHost } from \"./layout\";\n\nexport const BasicLayout: { new(): LayoutEngine } = function(): LayoutEngine {\n var host: LayoutHost;\n var canvasWidth: number;\n var headersWidth: number;\n\n var canvas: HTMLDivElement;\n var headerCols: HTMLDivElement;\n var headerRowCols: HTMLDivElement;\n var headerRowSpacer: HTMLDivElement;\n var footerRowCols: HTMLDivElement;\n var footerRowSpacer: HTMLDivElement;\n var topPanel: HTMLDivElement;\n var viewport: HTMLDivElement;\n\n function init(hostGrid: LayoutHost) {\n host = hostGrid;\n const spacerW = calcCanvasWidth() + host.getScrollDims().width + 'px';\n const options = host.getOptions();\n const uisd = options.useLegacyUI ? ' ui-state-default' : '';\n\n headerCols = H('div', { class: 'slick-header-columns', style: (options.rtl ? 'right' : 'left') + ':-1000px' });\n var headerColsS = H('div', { class: 'slick-header' + uisd, style: !options.showColumnHeader && 'display: none' }, headerCols);\n updateHeadersWidth();\n\n headerRowCols = H('div', { class: 'slick-headerrow-columns' });\n headerRowSpacer = spacerDiv(spacerW);\n var headerRow = H('div', { class: 'slick-headerrow' + uisd, style: !options.showHeaderRow && 'display: none' }, headerRowCols, headerRowSpacer);\n\n topPanel = H('div', { class: 'slick-top-panel', style: 'width: 10000px' });\n var topPanelS = H('div', { class: 'slick-top-panel-scroller' + uisd, style: !options.showTopPanel && 'display: none' }, topPanel);\n\n canvas = H('div', { class: \"grid-canvas\", tabIndex: \"0\", hideFocus: '' })\n viewport = H('div', { class: \"slick-viewport\", tabIndex: \"0\", hideFocus: '' }, canvas);\n\n footerRowCols = H('div', { class: 'slick-footerrow-columns' });\n footerRowSpacer = spacerDiv(spacerW);\n var footerRow = H('div', { class: 'slick-footerrow' + uisd, style: !options.showFooterRow && 'display: none' }, footerRowCols, footerRowSpacer);\n\n host.getContainerNode().append(headerColsS, headerRow, topPanelS, viewport, footerRow);\n }\n\n function appendCachedRow(_: number, rowNode: HTMLDivElement): void {\n rowNode && canvas.appendChild(rowNode);\n }\n\n function applyColumnWidths() {\n var x = 0, w, rule, cols = host.getColumns(), opts = host.getOptions(), rtl = opts.rtl;\n\n if (opts.useCssVars) {\n var styles = host.getContainerNode().style;\n for (var i = 0; i < cols.length; i++) {\n w = cols[i].width;\n var prop = \"--l\" + i;\n var oldVal = styles.getPropertyValue(prop);\n var newVal = x + \"px\";\n if (oldVal !== newVal) \n styles.setProperty(prop, newVal);\n prop = \"--r\" + i;\n oldVal = styles.getPropertyValue(prop);\n newVal = (canvasWidth - x - w) + \"px\"\n if (oldVal !== newVal) \n styles.setProperty(prop, newVal);\n x += w;\n }\n }\n else {\n for (var i = 0; i < cols.length; i++) {\n w = cols[i].width;\n rule = host.getColumnCssRules(i);\n rule[rtl ? 'right' : 'left'].style[rtl ? 'right' : 'left'] = x + \"px\";\n rule[rtl ? 'left' : 'right'].style[rtl ? 'left' : 'right'] = (canvasWidth - x - w) + \"px\";\n x += w;\n }\n }\n }\n\n function bindAncestorScrollEvents(): void {\n var elem: HTMLElement = canvas;\n while ((elem = elem.parentNode as HTMLElement) != document.body && elem != null) {\n // bind to scroll containers only\n if (elem == viewport || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) {\n host.bindAncestorScroll(elem);\n }\n }\n }\n\n function calcCanvasWidth() {\n var cols = host.getColumns(), i = cols.length;\n var rowWidth = 0;\n while (i--) {\n rowWidth += cols[i].width;\n }\n\n return host.getOptions().fullWidthRows ? Math.max(rowWidth,\n host.getAvailableWidth()) : rowWidth;\n }\n\n function updateHeadersWidth() {\n headersWidth = 0;\n\n var scrollWidth = host.getScrollDims().width;\n var cols = host.getColumns();\n for (var i = 0, ii = cols.length; i < ii; i++) {\n headersWidth += cols[i].width;\n }\n\n headersWidth += scrollWidth;\n headersWidth = Math.max(headersWidth, host.getViewportInfo().width) + 1000;\n headerCols.style.width = headersWidth + 'px';\n }\n\n const destroy = () => {\n host = null;\n }\n\n function getCanvasNodeFor() {\n return canvas;\n }\n\n function getCanvasNodes() {\n return [canvas];\n }\n\n function getCanvasWidth() {\n return canvasWidth;\n }\n\n function getHeaderCols() {\n return [headerCols];\n }\n\n function getHeaderColumn(cell: number) {\n return headerCols.children.item(cell) as HTMLDivElement;\n }\n\n function getHeaderRowCols() {\n return [headerRowCols];\n }\n\n function getHeaderRowColumn(cell: number) {\n return headerRowCols.childNodes.item(cell) as HTMLDivElement;\n }\n\n function getHeaderRowColsFor() {\n return headerRowCols;\n }\n\n function getFooterRowColumn(cell: number) {\n return footerRowCols.childNodes.item(cell) as HTMLDivElement;\n }\n\n function getFooterRowColsFor() {\n return footerRowCols;\n }\n\n function getHeaderColsFor() {\n return headerCols;\n }\n\n function getFooterRowCols(): HTMLDivElement[] {\n return [footerRowCols];\n }\n\n function getRowFromCellNode(cellNode: HTMLElement): number {\n return host.getRowFromNode(cellNode.parentElement);\n }\n\n function getTopPanelFor() {\n return topPanel;\n }\n\n function getTopPanelNodes() {\n return [topPanel];\n }\n\n function getViewportNodeFor(): HTMLDivElement {\n return viewport;\n }\n\n function getViewportNodes(): HTMLDivElement[] {\n return [viewport];\n }\n\n function handleScrollH(): void {\n headerCols.parentElement.scrollLeft = host.getScrollLeft();\n topPanel.parentElement.scrollLeft = host.getScrollLeft();\n headerRowCols.parentElement.scrollLeft = host.getScrollLeft();\n footerRowCols.parentElement.scrollLeft = host.getScrollLeft();\n }\n\n function noop(): void {\n }\n\n function realScrollHeightChange() {\n canvas.style.height = host.getViewportInfo().realScrollHeight + 'px'\n }\n\n function reorderViewColumns(viewCols: Column[]): Column[] {\n return viewCols;\n }\n\n function returnFalse() {\n return false;\n }\n\n function setOverflow(): void {\n var alwaysVS = host.getOptions().alwaysShowVerticalScroll;\n\n viewport.style.overflowX = 'auto';\n viewport.style.overflowY = alwaysVS ? 'scroll' : (host.getOptions().autoHeight ? 'hidden' : 'auto');\n }\n\n function updateCanvasWidth(): boolean {\n var oldCanvasWidth = canvasWidth;\n canvasWidth = calcCanvasWidth();\n var scrollWidth = host.getScrollDims().width;\n\n const vpi = host.getViewportInfo();\n var canvasWidthPx = canvasWidth + 'px'\n canvas.style.width = canvasWidthPx;\n headerRowCols.style.width = canvasWidthPx;\n footerRowCols.style.width = canvasWidthPx;\n updateHeadersWidth();\n vpi.hasHScroll = (canvasWidth > host.getViewportInfo().width - scrollWidth);\n\n var spacerWidthPx = (canvasWidth + (vpi.hasVScroll ? scrollWidth : 0)) + 'px';\n headerRowSpacer.style.width = spacerWidthPx;\n footerRowSpacer.style.width = spacerWidthPx;\n\n return canvasWidth != oldCanvasWidth;\n }\n\n const resizeCanvas = () => {\n var vs = host.getViewportInfo();\n var _paneTopH = vs.height + vs.topPanelHeight + vs.headerRowHeight + vs.footerRowHeight;\n const options = host.getOptions();\n if (options.autoHeight) {\n host.getContainerNode().style.height = (_paneTopH + vs.groupingPanelHeight +\n parsePx(getComputedStyle(headerCols.parentElement).height)) + 'px';\n viewport.style.height = '';\n }\n else\n viewport.style.height = vs.height + 'px'\n }\n\n function returnZero() {\n return 0;\n }\n\n var intf: LayoutEngine = {\n afterHeaderColumnDrag: noop,\n afterRenderRows: noop,\n afterSetOptions: noop,\n appendCachedRow,\n applyColumnWidths,\n beforeCleanupAndRenderCells: noop,\n bindAncestorScrollEvents,\n calcCanvasWidth,\n updateHeadersWidth,\n isFrozenRow: returnFalse,\n destroy,\n getCanvasNodeFor,\n getCanvasNodes,\n getCanvasWidth,\n getFooterRowCols,\n getFooterRowColsFor,\n getFooterRowColumn,\n getHeaderCols,\n getHeaderColsFor,\n getHeaderColumn,\n getHeaderRowCols,\n getHeaderRowColsFor,\n getHeaderRowColumn,\n getRowFromCellNode,\n getFrozenCols: returnZero,\n getFrozenRowOffset: returnZero,\n getFrozenRows: returnZero,\n getScrollCanvasY: getCanvasNodeFor,\n getScrollContainerX: getViewportNodeFor,\n getScrollContainerY: getViewportNodeFor,\n getTopPanelFor,\n getTopPanelNodes,\n getViewportNodeFor,\n getViewportNodes,\n handleScrollH,\n handleScrollV: noop,\n init,\n layoutName: \"basic\",\n realScrollHeightChange,\n reorderViewColumns,\n resizeCanvas,\n setOverflow,\n setPaneVisibility: noop,\n setScroller: noop,\n updateCanvasWidth\n }\n\n return intf;\n} as any;\n", "import { GoToResult } from \"./internal\";\n\nexport interface CellNavigatorHost {\n getColumnCount(): number;\n getRowCount(): number;\n getColspan(row: number, cell: number): number;\n canCellBeActive(row: number, cell: number): boolean;\n setTabbingDirection(dir: number): void;\n isRTL(): boolean;\n}\n\nexport class CellNavigator {\n\n private host: CellNavigatorHost;\n\n constructor(h: CellNavigatorHost) {\n this.host = h;\n }\n\n private findFirstFocusableCell(row: number): number {\n var cell = 0;\n var cols = this.host.getColumnCount();\n while (cell < cols) {\n if (this.host.canCellBeActive(row, cell)) {\n return cell;\n }\n cell += this.host.getColspan(row, cell);\n }\n return null;\n }\n\n private findLastFocusableCell(row: number): number {\n var cell = 0;\n var lastFocusableCell = null;\n var cols = this.host.getColumnCount();\n while (cell < cols) {\n if (this.host.canCellBeActive(row, cell)) {\n lastFocusableCell = cell;\n }\n cell += this.host.getColspan(row, cell);\n }\n return lastFocusableCell;\n }\n\n\n private gotoRight(row?: number, cell?: number): GoToResult {\n var cols = this.host.getColumnCount();\n if (cell >= cols) {\n return null;\n }\n\n do {\n cell += this.host.getColspan(row, cell);\n }\n while (cell < cols && !this.host.canCellBeActive(row, cell));\n\n if (cell < cols) {\n return {\n row: row,\n cell: cell,\n posX: cell\n };\n }\n return null;\n }\n\n private gotoLeft(row?: number, cell?: number): GoToResult {\n if (cell <= 0) {\n return null;\n }\n\n var firstFocusableCell = this.findFirstFocusableCell(row);\n if (firstFocusableCell === null || firstFocusableCell >= cell) {\n return null;\n }\n\n var prev = {\n row: row,\n cell: firstFocusableCell,\n posX: firstFocusableCell\n };\n var pos;\n while (true) {\n pos = this.gotoRight(prev.row, prev.cell);\n if (!pos) {\n return null;\n }\n if (pos.cell >= cell) {\n return prev;\n }\n prev = pos;\n }\n }\n\n private gotoDown(row?: number, cell?: number, posX?: number): GoToResult {\n var prevCell;\n var rowCount = this.host.getRowCount();\n while (true) {\n if (++row >= rowCount) {\n return null;\n }\n\n prevCell = cell = 0;\n while (cell <= posX) {\n prevCell = cell;\n cell += this.host.getColspan(row, cell);\n }\n\n if (this.host.canCellBeActive(row, prevCell)) {\n return {\n row: row,\n cell: prevCell,\n posX: posX\n };\n }\n }\n }\n\n private gotoUp(row?: number, cell?: number, posX?: number): GoToResult {\n var prevCell;\n while (true) {\n if (--row < 0) {\n return null;\n }\n\n prevCell = cell = 0;\n while (cell <= posX) {\n prevCell = cell;\n cell += this.host.getColspan(row, cell);\n }\n\n if (this.host.canCellBeActive(row, prevCell)) {\n return {\n row: row,\n cell: prevCell,\n posX: posX\n };\n }\n }\n }\n\n private gotoNext(row?: number, cell?: number, posX?: number): GoToResult {\n if (row == null && cell == null) {\n row = cell = posX = 0;\n if (this.host.canCellBeActive(row, cell)) {\n return {\n row: row,\n cell: cell,\n posX: cell\n };\n }\n }\n\n var pos = this.gotoRight(row, cell);\n if (pos) {\n return pos;\n }\n\n var firstFocusableCell = null;\n var dataLengthIncludingAddNew = this.host.getRowCount();\n while (++row < dataLengthIncludingAddNew) {\n firstFocusableCell = this.findFirstFocusableCell(row);\n if (firstFocusableCell != null) {\n return {\n row: row,\n cell: firstFocusableCell,\n posX: firstFocusableCell\n };\n }\n }\n return null;\n }\n\n private gotoPrev(row?: number, cell?: number, posX?: number): { row: number; cell: number; posX: number; } {\n var cols = this.host.getColumnCount();\n if (row == null && cell == null) {\n row = this.host.getRowCount() - 1;\n cell = posX = cols - 1;\n if (this.host.canCellBeActive(row, cell)) {\n return {\n row: row,\n cell: cell,\n posX: cell\n };\n }\n }\n\n var pos;\n var lastSelectableCell;\n while (!pos) {\n pos = this.gotoLeft(row, cell);\n if (pos) {\n break;\n }\n if (--row < 0) {\n return null;\n }\n\n cell = 0;\n lastSelectableCell = this.findLastFocusableCell(row);\n if (lastSelectableCell != null) {\n pos = {\n row: row,\n cell: lastSelectableCell,\n posX: lastSelectableCell\n };\n }\n }\n return pos;\n }\n\n private gotoRowStart(row: number) {\n var newCell = this.findFirstFocusableCell(row);\n if (newCell === null)\n return null;\n\n return {\n row: row,\n cell: newCell,\n posX: newCell\n };\n }\n\n private gotoRowEnd(row: number) {\n var newCell = this.findLastFocusableCell(row);\n if (newCell === null)\n return null;\n\n return {\n row: row,\n cell: newCell,\n posX: newCell\n };\n }\n\n /**\n * @param {string} dir Navigation direction.\n * @return {boolean} Whether navigation resulted in a change of active cell.\n */\n navigate(dir: string, activeRow: number, activeCell: number, activePosX: number): GoToResult {\n var tabbingDirections: Record = {\n up: -1,\n down: 1,\n prev: -1,\n next: 1,\n home: -1,\n end: 1\n };\n\n const rtl = this.host.isRTL();\n tabbingDirections[rtl ? 'right' : 'left'] = -1;\n tabbingDirections[rtl ? 'left' : 'right'] = 1;\n\n this.host.setTabbingDirection(tabbingDirections[dir]);\n\n var stepFunctions: Record = {\n up: this.gotoUp,\n down: this.gotoDown,\n prev: this.gotoPrev,\n next: this.gotoNext,\n home: this.gotoRowStart,\n end: this.gotoRowEnd\n };\n\n stepFunctions[rtl ? 'right' : 'left'] = this.gotoLeft;\n stepFunctions[rtl ? 'left' : 'right'] = this.gotoRight;\n\n var stepFn = stepFunctions[dir].bind(this);\n return stepFn(activeRow, activeCell, activePosX) as GoToResult;\n }\n}\n", "import { Column, H, parsePx, Position } from \"../core\";\n\n// shared across all grids on the page\nlet maxSupportedCssHeight: number; // browser's breaking point\nlet scrollbarDimensions: { width: number, height: number };\n\nexport function absBox(elem: HTMLElement): Position {\n var box: Position = {\n top: elem.offsetTop,\n left: elem.offsetLeft,\n bottom: 0,\n right: 0,\n width: elem.offsetWidth,\n height: elem.offsetHeight,\n visible: true\n };\n\n box.bottom = box.top + box.height;\n box.right = box.left + box.width;\n\n // walk up the tree\n var offsetParent = elem.offsetParent;\n while ((elem = elem.parentNode as HTMLElement) != document.body && elem != null) {\n if (box.visible && elem.scrollHeight != elem.offsetHeight && getComputedStyle(elem).overflowY !== \"visible\") {\n box.visible = box.bottom > elem.scrollTop && box.top < elem.scrollTop + elem.clientHeight;\n }\n\n if (box.visible && elem.scrollWidth != elem.offsetWidth && getComputedStyle(elem).overflowX != \"visible\") {\n box.visible = box.right > elem.scrollLeft && box.left < elem.scrollLeft + elem.clientWidth;\n }\n\n box.left -= elem.scrollLeft;\n box.top -= elem.scrollTop;\n\n if (elem === offsetParent) {\n box.left += elem.offsetLeft;\n box.top += elem.offsetTop;\n offsetParent = elem.offsetParent;\n }\n\n box.bottom = box.top + box.height;\n box.right = box.left + box.width;\n }\n\n return box;\n}\n\nexport function autosizeColumns(cols: Column[], availWidth: number, absoluteColMinWidth: number): boolean {\n var i, c,\n widths = [],\n shrinkLeeway = 0,\n total = 0,\n prevTotal;\n\n for (i = 0; i < cols.length; i++) {\n c = cols[i];\n widths.push(c.width);\n total += c.width;\n if (c.resizable) {\n shrinkLeeway += c.width - Math.max(c.minWidth, absoluteColMinWidth);\n }\n }\n\n // shrink\n prevTotal = total;\n while (total > availWidth && shrinkLeeway) {\n var shrinkProportion = (total - availWidth) / shrinkLeeway;\n for (i = 0; i < cols.length && total > availWidth; i++) {\n c = cols[i];\n var width = widths[i];\n if (!c.resizable || width <= c.minWidth || width <= absoluteColMinWidth) {\n continue;\n }\n var absMinWidth = Math.max(c.minWidth, absoluteColMinWidth);\n var shrinkSize = Math.floor(shrinkProportion * (width - absMinWidth)) || 1;\n shrinkSize = Math.min(shrinkSize, width - absMinWidth);\n total -= shrinkSize;\n shrinkLeeway -= shrinkSize;\n widths[i] -= shrinkSize;\n }\n if (prevTotal <= total) { // avoid infinite loop\n break;\n }\n prevTotal = total;\n }\n\n // grow\n prevTotal = total;\n while (total < availWidth) {\n var growProportion = availWidth / total;\n for (i = 0; i < cols.length && total < availWidth; i++) {\n c = cols[i];\n var currentWidth = widths[i];\n var growSize;\n\n if (!c.resizable || c.maxWidth <= currentWidth) {\n growSize = 0;\n } else {\n growSize = Math.min(Math.floor(growProportion * currentWidth) - currentWidth, (c.maxWidth - currentWidth) || 1000000) || 1;\n }\n total += growSize;\n widths[i] += (total <= availWidth ? growSize : 0);\n }\n if (prevTotal >= total) { // avoid infinite loop\n break;\n }\n prevTotal = total;\n }\n\n var reRender = false;\n for (i = 0; i < cols.length; i++) {\n if (cols[i].rerenderOnResize && cols[i].width != widths[i]) {\n reRender = true;\n }\n cols[i].width = widths[i];\n }\n\n return reRender;\n}\n\nexport function getMaxSupportedCssHeight(): number {\n return maxSupportedCssHeight ?? ((navigator.userAgent.toLowerCase().match(/gecko\\//) ? 4000000 : 32000000));\n}\n\nexport function getScrollBarDimensions(recalc?: boolean): { width: number; height: number; } {\n if (!scrollbarDimensions || recalc) {\n var c = document.body.appendChild(H('div', {\n style: 'position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow: scroll;border:0'\n }));\n scrollbarDimensions = {\n width: Math.round(c.offsetWidth - c.clientWidth),\n height: Math.round(c.offsetWidth - c.clientHeight)\n };\n c.remove();\n }\n return scrollbarDimensions;\n}\n\n\nexport function simpleArrayEquals(arr1: number[], arr2: number[]) {\n if (!Array.isArray(arr1) || !Array.isArray(arr2) || arr1.length !== arr2.length)\n return false;\n arr1 = arr1.slice().sort();\n arr2 = arr2.slice().sort();\n for (var i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i])\n return false;\n }\n return true;\n}\n\n/**\n * Helper to sort visible cols, while keeping invisible cols sticky to\n * the previous visible col. For example, if columns are currently in order\n * A, B, C, D, E, F, G, H and desired order is G, D, F (assuming A, B, C, E\n * were invisible) the result is A, B, G, H, D, E, F.\n */\n export function sortToDesiredOrderAndKeepRest(columns: Column[], idOrder: string[]): Column[] {\n if (idOrder.length == 0)\n return columns;\n\n var orderById: { [key: string]: number } = {},\n colIdxById: { [key: string]: number } = {},\n result: Column[] = [];\n\n for (var i = 0; i < idOrder.length; i++)\n orderById[idOrder[i]] = i;\n\n for (i = 0; i < columns.length; i++)\n colIdxById[columns[i].id] = i;\n\n function takeFrom(i: number) {\n for (var j = i; j < columns.length; j++) {\n var c = columns[j];\n if (i != j && orderById[c.id] != null)\n break;\n result.push(c);\n colIdxById[c.id] = null;\n }\n }\n\n if (orderById[columns[0].id] == null)\n takeFrom(0);\n\n for (var id of idOrder) {\n i = colIdxById[id];\n if (i != null)\n takeFrom(i);\n }\n\n for (i = 0; i < columns.length; i++) {\n var c = columns[i];\n if (colIdxById[c.id] != null) {\n result.push(c);\n colIdxById[c.id] = null;\n }\n }\n\n return result;\n}\n\nexport function calcMinMaxPageXOnDragStart(cols: Column[], colIdx: number, pageX: number, forceFit: boolean, absoluteColMinWidth: number): { maxPageX: number; minPageX: number; } {\n var shrinkLeewayOnRight = null, stretchLeewayOnRight = null, j: number, c: Column;\n if (forceFit) {\n shrinkLeewayOnRight = 0;\n stretchLeewayOnRight = 0;\n // colums on right affect maxPageX/minPageX\n for (j = colIdx + 1; j < cols.length; j++) {\n c = cols[j];\n if (c.resizable) {\n if (stretchLeewayOnRight != null) {\n if (c.maxWidth) {\n stretchLeewayOnRight += c.maxWidth - c.previousWidth;\n } else {\n stretchLeewayOnRight = null;\n }\n }\n shrinkLeewayOnRight += c.previousWidth - Math.max(c.minWidth || 0, absoluteColMinWidth);\n }\n }\n }\n var shrinkLeewayOnLeft = 0, stretchLeewayOnLeft = 0;\n for (j = 0; j <= colIdx; j++) {\n // columns on left only affect minPageX\n c = cols[j];\n if (c.resizable) {\n if (stretchLeewayOnLeft != null) {\n if (c.maxWidth) {\n stretchLeewayOnLeft += c.maxWidth - c.previousWidth;\n } else {\n stretchLeewayOnLeft = null;\n }\n }\n shrinkLeewayOnLeft += c.previousWidth - Math.max(c.minWidth || 0, absoluteColMinWidth);\n }\n }\n if (shrinkLeewayOnRight === null) {\n shrinkLeewayOnRight = 100000;\n }\n if (shrinkLeewayOnLeft === null) {\n shrinkLeewayOnLeft = 100000;\n }\n if (stretchLeewayOnRight === null) {\n stretchLeewayOnRight = 100000;\n }\n if (stretchLeewayOnLeft === null) {\n stretchLeewayOnLeft = 100000;\n }\n\n return {\n maxPageX: pageX + Math.min(shrinkLeewayOnRight, stretchLeewayOnLeft),\n minPageX: pageX - Math.min(shrinkLeewayOnLeft, stretchLeewayOnRight)\n }\n}\n\nexport function shrinkOrStretchColumn(cols: Column[], colIdx: number, d: number, forceFit: boolean, absoluteColMinWidth: number): void {\n var c: Column, j: number, x: number, actualMinWidth: number;\n\n if (d < 0) { // shrink column\n x = d;\n\n for (j = colIdx; j >= 0; j--) {\n c = cols[j];\n if (c.resizable) {\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColMinWidth);\n if (x && c.previousWidth + x < actualMinWidth) {\n x += c.previousWidth - actualMinWidth;\n c.width = actualMinWidth;\n } else {\n c.width = c.previousWidth + x;\n x = 0;\n }\n }\n }\n\n if (forceFit) {\n x = -d;\n for (j = colIdx + 1; j < cols.length; j++) {\n c = cols[j];\n if (c.resizable) {\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\n x -= c.maxWidth - c.previousWidth;\n c.width = c.maxWidth;\n } else {\n c.width = c.previousWidth + x;\n x = 0;\n }\n }\n }\n }\n } else { // stretch column\n x = d;\n\n for (j = colIdx; j >= 0; j--) {\n c = cols[j];\n if (c.resizable) {\n if (x && c.maxWidth && (c.maxWidth - c.previousWidth < x)) {\n x -= c.maxWidth - c.previousWidth;\n c.width = c.maxWidth;\n } else {\n c.width = c.previousWidth + x;\n x = 0;\n }\n }\n }\n\n if (forceFit) {\n x = -d;\n for (j = colIdx + 1; j < cols.length; j++) {\n c = cols[j];\n if (c.resizable) {\n actualMinWidth = Math.max(c.minWidth || 0, absoluteColMinWidth);\n if (x && c.previousWidth + x < actualMinWidth) {\n x += c.previousWidth - actualMinWidth;\n c.width = actualMinWidth;\n\n } else {\n c.width = c.previousWidth + x;\n x = 0;\n }\n }\n }\n }\n }\n}\n\nexport function addUiStateHover() {\n (this as HTMLElement)?.classList.add(\"ui-state-hover\");\n}\n\nexport function removeUiStateHover() {\n (this as HTMLElement)?.classList.remove(\"ui-state-hover\");\n}\n\nexport function getVBoxDelta(el: HTMLElement): number {\n if (!el)\n return 0;\n \n var style = getComputedStyle(el);\n if (style.boxSizing === 'border-box')\n return 0;\n\n var p = [\"border-top-width\", \"border-bottom-width\", \"padding-top\", \"padding-bottom\"];\n var delta = 0;\n for (var val of p)\n delta += parsePx(style.getPropertyValue(val)) || 0;\n return delta;\n}\n\nexport function getInnerWidth(el: HTMLElement): number {\n var style = getComputedStyle(el);\n var width = parsePx(style.width) ?? 0;\n if (style.boxSizing != 'border-box')\n return Math.max(0, width);\n\n var p = [\"border-left-width\", \"border-right-width\", \"padding-left\", \"padding-right\"];\n for (var val of p)\n width -= parsePx(style.getPropertyValue(val)) || 0;\n\n return Math.max(width, 0);\n}\n\nexport interface CachedRow {\n rowNodeL: HTMLElement,\n rowNodeR: HTMLElement,\n // ColSpans of rendered cells (by column idx).\n // Can also be used for checking whether a cell has been rendered.\n cellColSpans: number[],\n\n // Cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\n cellNodesByColumnIdx: { [key: number]: HTMLElement },\n\n // Column indices of cell nodes that have been rendered, but not yet indexed in\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\n // end of the row.\n cellRenderQueue: number[];\n\n // Elements returned from formatters for cells in cellRenderQueue.\n cellRenderContent: (Element | DocumentFragment)[];\n}\n\nexport interface GoToResult {\n row: number;\n cell: number;\n posX: number;\n}\n\nexport interface PostProcessCleanupEntry {\n groupId: number,\n cellNode?: HTMLElement,\n columnIdx?: number,\n rowNodeL?: HTMLElement;\n rowNodeR?: HTMLElement;\n rowIdx?: number;\n}\n\n", "import { addClass, applyFormatterResultToCellNode, escape, CellStylesHash, Column, columnDefaults, ColumnFormat, ColumnSort, convertCompatFormatter, defaultColumnFormat, disableSelection, EditCommand, EditController, Editor, EditorClass, EditorHost, EditorLock, EventEmitter, EventData, FormatterContext, H, IEventData, initializeColumns, ItemMetadata, Position, preClickClassName, Range, removeClass, RowCell, titleize, parsePx, GroupTotals, ColumnMetadata, FormatterResult } from \"../core\";\nimport { BasicLayout } from \"./basiclayout\";\nimport { CellNavigator } from \"./cellnavigator\";\nimport { ArgsAddNewRow, ArgsCell, ArgsCellChange, ArgsCellEdit, ArgsColumn, ArgsColumnNode, ArgsCssStyle, ArgsEditorDestroy, ArgsGrid, ArgsScroll, ArgsSelectedRowsChange, ArgsSort, ArgsValidationError } from \"./eventargs\";\nimport { gridDefaults, GridOptions } from \"./gridoptions\";\nimport { absBox, addUiStateHover, autosizeColumns, CachedRow, calcMinMaxPageXOnDragStart, getInnerWidth, getMaxSupportedCssHeight, getScrollBarDimensions, getVBoxDelta, PostProcessCleanupEntry, removeUiStateHover, shrinkOrStretchColumn, simpleArrayEquals, sortToDesiredOrderAndKeepRest } from \"./internal\";\nimport { LayoutEngine } from \"./layout\";\nimport { IPlugin, SelectionModel, ViewportInfo, ViewRange } from \"./types\";\n\nexport class Grid implements EditorHost {\n private _absoluteColMinWidth: number;\n private _activeCanvasNode: HTMLElement;\n private _activeCell: number;\n private _activeCellNode: HTMLElement = null;\n private _activePosX: number;\n private _activeRow: number;\n private _activeViewportNode: HTMLElement;\n private _cellCssClasses: Record = {};\n private _cellHeightDiff: number = 0;\n private _cellWidthDiff: number = 0;\n private _cellNavigator: CellNavigator;\n private _colById: { [key: string]: number };\n private _colDefaults: Partial;\n private _colLeft: number[] = [];\n private _colRight: number[] = [];\n private _cols: Column[];\n private _columnCssRulesL: any;\n private _columnCssRulesR: any;\n private _currentEditor: Editor = null;\n private _data: any;\n private _editController: EditController;\n private _emptyNode: (node: Element) => void;\n private _headerColumnWidthDiff: number = 0;\n private _hEditorLoader: number = null;\n private _hPostRender: number = null;\n private _hPostRenderCleanup: number = null;\n private _hRender: number = null;\n private _ignoreScrollUntil: number = 0;\n private _initColById: { [key: string]: number };\n private _initCols: Column[];\n private _initialized = false;\n private _jQuery: any;\n private _jumpinessCoefficient: number;\n private _lastRenderTime: number;\n private _layout: LayoutEngine;\n private _numberOfPages: number;\n private _options: GridOptions;\n private _page: number = 0;\n private _pageHeight: number;\n private _pageOffset: number = 0;\n private _pagingActive: boolean = false;\n private _pagingIsLastPage: boolean = false;\n private _plugins: IPlugin[] = [];\n private _postCleanupActive: boolean;\n private _postProcessCleanupQueue: PostProcessCleanupEntry[] = [];\n private _postProcessedRows: { [row: number]: { [cell: number]: string } } = {};\n private _postProcessFromRow: number = null;\n private _postProcessGroupId: number = 0;\n private _postProcessToRow: number = null;\n private _postRenderActive: boolean;\n private _removeNode: (node: Element) => void;\n private _rowsCache: { [key: number]: CachedRow } = {};\n private _scrollDims: { width: number, height: number };\n private _scrollLeft: number = 0;\n private _scrollLeftPrev: number = 0;\n private _scrollLeftRendered: number = 0;\n private _scrollTop: number = 0;\n private _scrollTopPrev: number = 0;\n private _scrollTopRendered: number = 0;\n private _selectedRows: number[] = [];\n private _selectionModel: SelectionModel;\n private _serializedEditorValue: any;\n private _sortColumns: ColumnSort[] = [];\n private _styleNode: HTMLStyleElement;\n private _stylesheet: any;\n private _tabbingDirection: number = 1;\n private _uid: string = \"sleekgrid_\" + Math.round(1000000 * Math.random());\n private _viewportInfo: ViewportInfo = {} as any;\n private _vScrollDir: number = 1;\n\n private _boundAncestorScroll: HTMLElement[] = [];\n private _container: HTMLElement;\n private _focusSink1: HTMLElement;\n private _focusSink2: HTMLElement;\n private _groupingPanel: HTMLElement;\n\n readonly onActiveCellChanged = new EventEmitter();\n readonly onActiveCellPositionChanged = new EventEmitter();\n readonly onAddNewRow = new EventEmitter();\n readonly onBeforeCellEditorDestroy = new EventEmitter();\n readonly onBeforeDestroy = new EventEmitter();\n readonly onBeforeEditCell = new EventEmitter();\n readonly onBeforeFooterRowCellDestroy = new EventEmitter();\n readonly onBeforeHeaderCellDestroy = new EventEmitter();\n readonly onBeforeHeaderRowCellDestroy = new EventEmitter();\n readonly onCellChange = new EventEmitter();\n readonly onCellCssStylesChanged = new EventEmitter();\n readonly onClick = new EventEmitter();\n readonly onColumnsReordered = new EventEmitter();\n readonly onColumnsResized = new EventEmitter();\n readonly onCompositeEditorChange = new EventEmitter();\n readonly onContextMenu = new EventEmitter();\n readonly onDblClick = new EventEmitter();\n readonly onDrag = new EventEmitter();\n readonly onDragEnd = new EventEmitter();\n readonly onDragInit = new EventEmitter();\n readonly onDragStart = new EventEmitter();\n readonly onFooterRowCellRendered = new EventEmitter();\n readonly onHeaderCellRendered = new EventEmitter();\n readonly onHeaderClick = new EventEmitter();\n readonly onHeaderContextMenu = new EventEmitter();\n readonly onHeaderMouseEnter = new EventEmitter();\n readonly onHeaderMouseLeave = new EventEmitter();\n readonly onHeaderRowCellRendered = new EventEmitter();\n readonly onKeyDown = new EventEmitter();\n readonly onMouseEnter = new EventEmitter();\n readonly onMouseLeave = new EventEmitter();\n readonly onScroll = new EventEmitter();\n readonly onSelectedRowsChanged = new EventEmitter();\n readonly onSort = new EventEmitter();\n readonly onValidationError = new EventEmitter();\n readonly onViewportChanged = new EventEmitter();\n\n constructor(container: HTMLElement | ArrayLike, data: any, columns: Column[], options: GridOptions) {\n\n this._data = data;\n this._colDefaults = Object.assign({}, columnDefaults);\n\n this._options = options = Object.assign({}, gridDefaults, options);\n // @ts-ignore\n options.jQuery = this._jQuery = options.jQuery === void 0 ? (typeof jQuery !== \"undefined\" ? jQuery : void 0) : options.jQuery;\n\n if (this._jQuery && container instanceof (this._jQuery as any))\n this._container = (container as any)[0];\n else if (container instanceof Element)\n this._container = container as HTMLElement;\n else if (typeof container === \"string\")\n this._container = document.querySelector(container);\n else if (container.length)\n container = container[0];\n\n if (this._container == null) {\n throw new Error(\"SleekGrid requires a valid container, \" + container + \" does not exist in the DOM.\");\n }\n\n this._container.classList.add('slick-container');\n\n this._emptyNode = options.emptyNode ?? (this._jQuery ? (function(node: Element) { this(node).empty(); }).bind(this._jQuery) : (function(node: Element) { node.innerHTML = \"\"; }));\n this._removeNode = options.removeNode ?? (this._jQuery ? (function(node: Element) { this(node).remove(); }).bind(this._jQuery) : (function(node: Element) { node.remove(); }));\n\n if (options?.createPreHeaderPanel) {\n // for compat, as draggable grouping plugin expects preHeaderPanel for grouping\n if (options.groupingPanel == null)\n options.groupingPanel = true;\n if (options.groupingPanelHeight == null && options.preHeaderPanelHeight != null)\n options.groupingPanelHeight = options.preHeaderPanelHeight;\n if (options.showGroupingPanel == null && options.showPreHeaderPanel != null)\n options.showGroupingPanel = options.showPreHeaderPanel;\n }\n\n this._options.rtl = this._options.rtl ??\n (document.body.classList.contains('rtl') || (typeof getComputedStyle != \"undefined\" &&\n getComputedStyle(this._container).direction == 'rtl'));\n\n if (this._options.rtl)\n this._container.classList.add('rtl');\n else\n this._container.classList.add('ltr');\n\n this.validateAndEnforceOptions();\n this._colDefaults.width = options.defaultColumnWidth;\n\n this._editController = {\n \"commitCurrentEdit\": this.commitCurrentEdit.bind(this),\n \"cancelCurrentEdit\": this.cancelCurrentEdit.bind(this)\n };\n\n if (this._jQuery)\n this._jQuery(this._container).empty();\n else\n this._container.innerHTML = '';\n\n this._container.style.overflow = \"hidden\";\n this._container.style.outline = \"0\";\n this._container.classList.add(this._uid);\n\n if (this._options.useLegacyUI)\n this._container.classList.add(\"ui-widget\");\n\n // set up a positioning container if needed\n if (!/relative|absolute|fixed/.test(getComputedStyle(this._container).position)) {\n this._container.style.position = \"relative\";\n }\n\n this._container.appendChild(this._focusSink1 = H('div', {\n class: \"slick-focus-sink\",\n hideFocus: '',\n style: 'position:fixed;width:0!important;height:0!important;top:0;left:0;outline:0!important;',\n tabIndex: '0'\n }));\n\n this._layout = options.layoutEngine ?? new BasicLayout();\n this.setInitialCols(columns);\n this._scrollDims = getScrollBarDimensions();\n\n if (options.groupingPanel) {\n this.createGroupingPanel();\n }\n\n this._layout.init({\n cleanUpAndRenderCells: this.cleanUpAndRenderCells.bind(this),\n bindAncestorScroll: this.bindAncestorScroll.bind(this),\n getAvailableWidth: this.getAvailableWidth.bind(this),\n getCellFromPoint: this.getCellFromPoint.bind(this),\n getColumnCssRules: this.getColumnCssRules.bind(this),\n getColumns: this.getColumns.bind(this),\n getContainerNode: this.getContainerNode.bind(this),\n getDataLength: this.getDataLength.bind(this),\n getOptions: this.getOptions.bind(this),\n getRowFromNode: this.getRowFromNode.bind(this),\n getScrollDims: this.getScrollBarDimensions.bind(this),\n getScrollLeft: () => this._scrollLeft,\n getScrollTop: () => this._scrollTop,\n getViewportInfo: () => this._viewportInfo,\n renderRows: this.renderRows.bind(this)\n });\n\n this._container.append(this._focusSink2 = this._focusSink1.cloneNode() as HTMLElement);\n\n if (options.viewportClass)\n this.getViewports().forEach(vp => addClass(vp, options.viewportClass));\n\n if (!options.explicitInitialization) {\n this.init();\n }\n\n this.bindToData();\n }\n\n private createGroupingPanel() {\n if (this._groupingPanel || !this._focusSink1)\n return;\n\n this._focusSink1.insertAdjacentElement(\"afterend\", this._groupingPanel = H('div', {\n class: \"slick-grouping-panel\",\n style: (!this._options.showGroupingPanel ? \"display: none\" : null)\n }));\n\n if (this._options.createPreHeaderPanel) {\n this._groupingPanel.appendChild(H('div', { class: 'slick-preheader-panel' }));\n }\n }\n\n private bindAncestorScroll(elem: HTMLElement) {\n if (this._jQuery)\n this._jQuery(elem).on('scroll', this.handleActiveCellPositionChange);\n else\n elem.addEventListener('scroll', this.handleActiveCellPositionChange);\n this._boundAncestorScroll.push(elem);\n }\n\n init(): void {\n if (this._initialized)\n return;\n\n this._initialized = true;\n\n this.calcViewportSize();\n\n // header columns and cells may have different padding/border skewing width calculations (box-sizing, hello?)\n // calculate the diff so we can set consistent sizes\n this.measureCellPaddingAndBorder();\n\n var viewports = this.getViewports();\n\n if (this._jQuery && !this._options.enableTextSelectionOnCells) {\n // disable text selection in grid cells except in input and textarea elements\n // (this is IE-specific, because selectstart event will only fire in IE)\n this._jQuery(viewports).on(\"selectstart.ui\", () => {\n return this._jQuery(this).is(\"input,textarea\");\n });\n }\n\n this._layout.setPaneVisibility();\n this._layout.setScroller();\n this.setOverflow();\n\n this.updateViewColLeftRight();\n this.createColumnHeaders();\n this.createColumnFooters();\n this.setupColumnSort();\n this.createCssRules();\n this.resizeCanvas();\n this._layout.bindAncestorScrollEvents();\n\n const onEvent = (el: HTMLElement, type: K,\n listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any) => {\n if (this._jQuery)\n this._jQuery(el).on(type, listener as any);\n else\n el.addEventListener(type, listener);\n }\n\n onEvent(this._container, \"resize\", this.resizeCanvas);\n\n viewports.forEach(vp => {\n var scrollTicking = false;\n onEvent(vp, \"scroll\", (e) => {\n if (!scrollTicking) {\n scrollTicking = true;\n\n window.requestAnimationFrame(() => {\n this.handleScroll();\n scrollTicking = false;\n });\n }\n });\n });\n\n if (this._jQuery && (this._jQuery.fn as any).mousewheel && (this.hasFrozenColumns() || this.hasFrozenRows())) {\n this._jQuery(viewports).on(\"mousewheel\", this.handleMouseWheel.bind(this));\n }\n\n this._layout.getHeaderCols().forEach(hs => {\n disableSelection(hs);\n onEvent(hs, \"contextmenu\", this.handleHeaderContextMenu.bind(this));\n onEvent(hs, \"click\", this.handleHeaderClick.bind(this));\n if (this._jQuery) {\n this._jQuery(hs)\n .on('mouseenter', '.slick-header-column', this.handleHeaderMouseEnter.bind(this))\n .on('mouseleave', '.slick-header-column', this.handleHeaderMouseLeave.bind(this));\n }\n else {\n // need to reimplement this similar to jquery events\n hs.addEventListener(\"mouseenter\", e => (e.target as HTMLElement).closest(\".slick-header-column\") &&\n this.handleHeaderMouseEnter(e));\n hs.addEventListener(\"mouseleave\", e => (e.target as HTMLElement).closest(\".slick-header-column\") &&\n this.handleHeaderMouseLeave(e));\n }\n });\n\n this._layout.getHeaderRowCols().forEach(el => {\n onEvent(el.parentElement, 'scroll', this.handleHeaderRowScroll);\n });\n\n this._layout.getFooterRowCols().forEach(el => {\n onEvent(el.parentElement, 'scroll', this.handleFooterRowScroll);\n });\n\n [this._focusSink1, this._focusSink2].forEach(fs => onEvent(fs, \"keydown\", this.handleKeyDown.bind(this)));\n\n var canvases = Array.from(this.getCanvases());\n canvases.forEach(canvas => {\n onEvent(canvas, \"keydown\", this.handleKeyDown.bind(this))\n onEvent(canvas, \"click\", this.handleClick.bind(this))\n onEvent(canvas, \"dblclick\", this.handleDblClick.bind(this))\n onEvent(canvas, \"contextmenu\", this.handleContextMenu.bind(this));\n });\n\n if (this._jQuery && (this._jQuery.fn as any).drag) {\n this._jQuery(canvases)\n .on(\"draginit\", this.handleDragInit.bind(this))\n .on(\"dragstart\", { distance: 3 }, this.handleDragStart.bind(this))\n .on(\"drag\", this.handleDrag.bind(this))\n .on(\"dragend\", this.handleDragEnd.bind(this))\n }\n\n canvases.forEach(canvas => {\n if (this._jQuery) {\n this._jQuery(canvas)\n .on('mouseenter', '.slick-cell', this.handleMouseEnter.bind(this))\n .on('mouseleave', '.slick-cell', this.handleMouseLeave.bind(this));\n }\n else {\n // need to reimplement this similar to jquery events\n (canvas as HTMLElement).addEventListener(\"mouseenter\", e => (e.target as HTMLElement).closest(\".slick-cell\") &&\n this.handleMouseEnter(e));\n (canvas as HTMLElement).addEventListener(\"mouseleave\", e => (e.target as HTMLElement).closest(\".slick-cell\") &&\n this.handleMouseLeave(e));\n }\n });\n\n // Work around http://crbug.com/312427.\n if (navigator.userAgent.toLowerCase().match(/webkit/) &&\n navigator.userAgent.toLowerCase().match(/macintosh/) &&\n this._jQuery) {\n this._jQuery(canvases).on(\"mousewheel\", this.handleMouseWheel.bind(this));\n }\n }\n\n private hasFrozenColumns(): boolean {\n return this._layout.getFrozenCols() > 0;\n }\n\n private hasFrozenRows(): boolean {\n return this._layout.getFrozenRows() > 0;\n }\n\n registerPlugin(plugin: IPlugin): void {\n this._plugins.unshift(plugin);\n plugin.init(this);\n }\n\n unregisterPlugin(plugin: IPlugin): void {\n for (var i = this._plugins.length; i >= 0; i--) {\n if (this._plugins[i] === plugin) {\n if (this._plugins[i].destroy) {\n this._plugins[i].destroy();\n }\n this._plugins.splice(i, 1);\n break;\n }\n }\n }\n\n getPluginByName(name: string): IPlugin {\n for (var i = this._plugins.length - 1; i >= 0; i--) {\n if (this._plugins[i].pluginName === name)\n return this._plugins[i];\n }\n }\n\n setSelectionModel(model: SelectionModel): void {\n this.unregisterSelectionModel();\n\n this._selectionModel = model;\n if (this._selectionModel) {\n this._selectionModel.init(this);\n this._selectionModel.onSelectedRangesChanged.subscribe(this.handleSelectedRangesChanged);\n }\n }\n\n private unregisterSelectionModel(): void {\n if (!this._selectionModel)\n return;\n\n this._selectionModel.onSelectedRangesChanged.unsubscribe(this.handleSelectedRangesChanged);\n this._selectionModel.destroy?.();\n }\n\n getScrollBarDimensions(): { width: number; height: number; } {\n return this._scrollDims;\n }\n\n getDisplayedScrollbarDimensions(): { width: number; height: number; } {\n return {\n width: this._viewportInfo.hasVScroll ? this._scrollDims.width : 0,\n height: this._viewportInfo.hasHScroll ? this._scrollDims.height : 0\n };\n }\n\n getAbsoluteColumnMinWidth() {\n return this._absoluteColMinWidth;\n }\n\n getSelectionModel(): SelectionModel {\n return this._selectionModel;\n }\n\n private colIdOrIdxToCell(columnIdOrIdx: string | number): number {\n if (columnIdOrIdx == null)\n return null;\n\n if (typeof columnIdOrIdx !== \"number\")\n return this.getColumnIndex(columnIdOrIdx);\n\n return columnIdOrIdx;\n }\n\n getCanvasNode(columnIdOrIdx?: string | number, row?: number): HTMLElement {\n return this._layout.getCanvasNodeFor(this.colIdOrIdxToCell(columnIdOrIdx || 0), row || 0);\n }\n\n getCanvases(): any | HTMLElement[] {\n var canvases = this._layout.getCanvasNodes();\n return this._jQuery ? this._jQuery(canvases) : canvases;\n }\n\n getActiveCanvasNode(e?: IEventData): HTMLElement {\n if (e) { // compatibility with celldecorator plugin\n this._activeCanvasNode = (e.target as HTMLElement).closest('.grid-canvas');\n }\n return this._activeCanvasNode;\n }\n\n getViewportNode(columnIdOrIdx?: string | number, row?: number): HTMLElement {\n return this._layout.getViewportNodeFor(this.colIdOrIdxToCell(columnIdOrIdx || 0), row || 0);\n }\n\n private getViewports(): HTMLElement[] {\n return this._layout.getViewportNodes();\n }\n\n getActiveViewportNode(e?: IEventData): HTMLElement {\n if (e) { // compatibility with celldecorator plugin\n this._activeViewportNode = (e.target as HTMLElement).closest('.slick-viewport');\n }\n\n return this._activeViewportNode;\n }\n\n private getAvailableWidth() {\n return this._viewportInfo.hasVScroll ? this._viewportInfo.width - this._scrollDims.width : this._viewportInfo.width;\n }\n\n private updateCanvasWidth(forceColumnWidthsUpdate?: boolean): void {\n const widthChanged = this._layout.updateCanvasWidth();\n\n if (widthChanged || forceColumnWidthsUpdate) {\n this._layout.applyColumnWidths();\n }\n }\n\n private unbindAncestorScrollEvents(): void {\n if (this._boundAncestorScroll) {\n for (var x of this._boundAncestorScroll)\n x.removeEventListener('scroll', this.handleActiveCellPositionChange);\n }\n this._boundAncestorScroll = [];\n }\n\n updateColumnHeader(columnId: string, title?: string, toolTip?: string): void {\n if (!this._initialized) {\n return;\n }\n\n var idx = this.getColumnIndex(columnId);\n if (idx == null) {\n return;\n }\n\n var columnDef = this._cols[idx];\n var header = this._layout.getHeaderColumn(idx);\n if (!header)\n return;\n\n if (title !== undefined) {\n columnDef.name = title;\n }\n if (toolTip !== undefined) {\n columnDef.toolTip = toolTip;\n }\n\n this.trigger(this.onBeforeHeaderCellDestroy, {\n node: header,\n column: columnDef\n });\n\n if (toolTip !== undefined)\n header.title = toolTip || \"\";\n\n if (title !== undefined) {\n var child = header.firstElementChild;\n if (columnDef.nameIsHtml)\n child && (child.innerHTML = title ?? '');\n else\n child && (child.textContent = title ?? '')\n }\n\n this.trigger(this.onHeaderCellRendered, {\n node: header,\n column: columnDef\n });\n }\n\n getHeader(): HTMLElement {\n return this._layout.getHeaderCols()[0];\n }\n\n getHeaderColumn(columnIdOrIdx: string | number): HTMLElement {\n var cell = this.colIdOrIdxToCell(columnIdOrIdx);\n if (cell == null)\n return null;\n\n return this._layout.getHeaderColumn(cell);\n }\n\n getGroupingPanel(): HTMLElement {\n return this._groupingPanel;\n }\n\n getPreHeaderPanel(): HTMLElement {\n return this._groupingPanel?.querySelector('.slick-preheader-panel');\n }\n\n getHeaderRow(): HTMLElement {\n return this._layout.getHeaderRowCols()[0];\n }\n\n getHeaderRowColumn(columnIdOrIdx: string | number): HTMLElement {\n var cell = this.colIdOrIdxToCell(columnIdOrIdx);\n if (cell == null)\n return;\n\n return this._layout.getHeaderRowColumn(cell);\n }\n\n getFooterRow(): HTMLElement {\n return this._layout.getFooterRowCols()[0];\n }\n\n getFooterRowColumn(columnIdOrIdx: string | number): HTMLElement {\n var cell = this.colIdOrIdxToCell(columnIdOrIdx);\n if (cell == null)\n return null;\n\n return this._layout.getFooterRowColumn(cell);\n }\n\n private createColumnFooters(): void {\n var footerRowCols = this._layout.getFooterRowCols();\n footerRowCols.forEach(frc => {\n frc.querySelectorAll(\".slick-footerrow-column\")\n .forEach((el) => {\n var columnDef = this.getColumnFromNode(el);\n if (columnDef) {\n this.trigger(this.onBeforeFooterRowCellDestroy, {\n node: el as HTMLElement,\n column: columnDef\n });\n }\n })\n\n if (this._jQuery) {\n this._jQuery(frc).empty();\n }\n else\n frc.innerHTML = '';\n });\n\n var cols = this._cols;\n for (var i = 0; i < cols.length; i++) {\n var m = cols[i];\n\n var footerRowCell = H(\"div\", { class: \"slick-footerrow-column l\" + i + \" r\" + i + (this._options.useLegacyUI ? ' ui-state-default' : '') });\n footerRowCell.dataset.c = i.toString();\n this._jQuery && this._jQuery(footerRowCell).data(\"column\", m);\n\n if (m.footerCssClass)\n addClass(footerRowCell, m.footerCssClass);\n else if (m.cssClass)\n addClass(footerRowCell, m.cssClass);\n\n this._layout.getFooterRowColsFor(i).appendChild(footerRowCell);\n\n this.trigger(this.onFooterRowCellRendered, {\n node: footerRowCell,\n column: m\n });\n }\n }\n\n private createColumnHeaders(): void {\n const headerCols = this._layout.getHeaderCols();\n headerCols.forEach(hc => {\n hc.querySelectorAll(\".slick-header-column\")\n .forEach((el) => {\n var columnDef = this.getColumnFromNode(el);\n if (columnDef) {\n this.trigger(this.onBeforeHeaderCellDestroy, {\n node: el as HTMLElement,\n column: columnDef\n });\n }\n });\n\n this._emptyNode(hc);\n });\n\n this._layout.updateHeadersWidth();\n\n const headerRowCols = this._layout.getHeaderRowCols();\n headerRowCols.forEach(hrc => {\n hrc.querySelectorAll(\".slick-headerrow-column\")\n .forEach((el) => {\n var columnDef = this.getColumnFromNode(el);\n if (columnDef) {\n this.trigger(this.onBeforeHeaderRowCellDestroy, {\n node: el as HTMLElement,\n column: columnDef,\n grid: this\n });\n }\n });\n if (this._jQuery) {\n this._jQuery(hrc).empty();\n } else {\n hrc.innerHTML = \"\";\n }\n });\n\n var cols = this._cols, frozenCols = this._layout.getFrozenCols();\n for (var i = 0; i < cols.length; i++) {\n var m = cols[i];\n\n var headerTarget = this._layout.getHeaderColsFor(i);\n\n var name = document.createElement(\"span\");\n name.className = \"slick-column-name\";\n if (m.nameIsHtml)\n name.innerHTML = m.name ?? '';\n else\n name.textContent = (m.name ?? '');\n\n var header = H(\"div\", {\n class: \"slick-header-column\" + (this._options.useLegacyUI ? \" ui-state-default \" : \"\"),\n [\"data-id\"]: m.id,\n id: \"\" + this._uid + m.id,\n title: m.toolTip || \"\",\n style: \"width: \" + (m.width - this._headerColumnWidthDiff) + \"px\"\n }, name);\n\n header.dataset.c = i.toString();\n this._jQuery && this._jQuery(header).data(\"column\", m);\n\n m.headerCssClass && addClass(header, m.headerCssClass);\n\n (i < frozenCols) && header.classList.add(\"frozen\");\n\n headerTarget.appendChild(header);\n\n if ((this._options.enableColumnReorder || m.sortable) && this._options.useLegacyUI) {\n if (this._jQuery) {\n this._jQuery(header).on(\"mouseenter\", addUiStateHover);\n this._jQuery(header).on(\"mouseleave\", removeUiStateHover);\n }\n else {\n header.addEventListener('mouseenter', addUiStateHover);\n header.addEventListener('mouseleave', removeUiStateHover);\n }\n }\n\n if (m.sortable) {\n header.classList.add(\"slick-header-sortable\");\n header.appendChild(H(\"span\", { class: \"slick-sort-indicator\" }));\n }\n\n this.trigger(this.onHeaderCellRendered, {\n node: header,\n column: m\n });\n\n if (this._options.showHeaderRow) {\n var headerRowTarget = this._layout.getHeaderRowColsFor(i);\n\n var headerRowCell = H(\"div\", { class: \"slick-headerrow-column l\" + i + \" r\" + i + (this._options.useLegacyUI ? \" ui-state-default\" : \"\") });\n headerRowCell.dataset.c = i.toString();\n this._jQuery && this._jQuery(headerRowCell).data(\"column\", m);\n headerRowTarget.appendChild(headerRowCell);\n\n this.trigger(this.onHeaderRowCellRendered, {\n node: headerRowCell,\n column: m\n });\n }\n }\n\n this.setSortColumns(this._sortColumns);\n this.setupColumnResize();\n if (this._options.enableColumnReorder)\n this.setupColumnReorder();\n }\n\n private setupColumnSort(): void {\n const handler = (e: MouseEvent) => {\n var tgt = e.target as Element;\n if (tgt.classList.contains(\"slick-resizable-handle\")) {\n return;\n }\n\n var colNode = tgt.closest(\".slick-header-column\");\n if (!colNode) {\n return;\n }\n\n var column = this.getColumnFromNode(colNode);\n if (column.sortable) {\n if (!this.getEditorLock().commitCurrentEdit()) {\n return;\n }\n\n var sortOpts = null;\n var i = 0;\n for (; i < this._sortColumns.length; i++) {\n if (this._sortColumns[i].columnId == column.id) {\n sortOpts = this._sortColumns[i];\n sortOpts.sortAsc = !sortOpts.sortAsc;\n break;\n }\n }\n\n if (e.metaKey && this._options.multiColumnSort) {\n if (sortOpts) {\n this._sortColumns.splice(i, 1);\n }\n }\n else {\n if ((!e.shiftKey && !e.metaKey) || !this._options.multiColumnSort) {\n this._sortColumns = [];\n }\n\n if (!sortOpts) {\n sortOpts = { columnId: column.id, sortAsc: column.defaultSortAsc };\n this._sortColumns.push(sortOpts);\n } else if (this._sortColumns.length == 0) {\n this._sortColumns.push(sortOpts);\n }\n }\n\n this.setSortColumns(this._sortColumns);\n\n if (!this._options.multiColumnSort) {\n this.trigger(this.onSort, {\n multiColumnSort: false,\n sortCol: column,\n sortAsc: sortOpts.sortAsc\n }, e);\n } else {\n var cols = this._initCols;\n this.trigger(this.onSort, {\n multiColumnSort: true,\n sortCols: this._sortColumns.map(col => ({ sortCol: cols[this.getInitialColumnIndex(col.columnId)], sortAsc: col.sortAsc }))\n }, e);\n }\n }\n };\n\n this._layout.getHeaderCols().forEach(el => {\n if (this._jQuery)\n this._jQuery(el).on('click', handler as any);\n else\n el.addEventListener(\"click\", handler);\n });\n }\n\n private static offset(el: HTMLElement | null) {\n if (!el || !el.getBoundingClientRect)\n return;\n const box = el.getBoundingClientRect();\n const docElem = document.documentElement;\n return {\n top: box.top + window.scrollY - docElem.clientTop,\n left: box.left + window.scrollX - docElem.clientLeft\n };\n }\n\n private sortableColInstances: any[];\n\n private setupColumnReorder(): void {\n\n // @ts-ignore\n if (typeof Sortable === \"undefined\")\n return;\n\n this.sortableColInstances?.forEach(x => x.destroy());\n let columnScrollTimer: number = null;\n\n const scrollColumnsLeft = () => this._layout.getScrollContainerX().scrollLeft = this._layout.getScrollContainerX().scrollLeft + 10;\n const scrollColumnsRight = () => this._layout.getScrollContainerX().scrollLeft = this._layout.getScrollContainerX().scrollLeft - 10;\n\n let canDragScroll;\n const sortableOptions: any = {\n animation: 50,\n direction: 'horizontal',\n chosenClass: 'slick-header-column-active',\n ghostClass: 'slick-sortable-placeholder',\n draggable: '.slick-header-column',\n filter: \".slick-resizable-handle\",\n preventOnFilter: false,\n dragoverBubble: false,\n revertClone: true,\n scroll: !this.hasFrozenColumns(), // enable auto-scroll\n onStart: (e: { item: any; originalEvent: MouseEvent; }) => {\n canDragScroll = !this.hasFrozenColumns() ||\n Grid.offset(e.item)!.left > Grid.offset(this._layout.getScrollContainerX())!.left;\n\n if (canDragScroll && e.originalEvent && e.originalEvent.pageX > this._container.clientWidth) {\n if (!(columnScrollTimer)) {\n columnScrollTimer = setInterval(scrollColumnsRight, 100);\n }\n } else if (canDragScroll && e.originalEvent && e.originalEvent.pageX < Grid.offset(this._layout.getScrollContainerX())!.left) {\n if (!(columnScrollTimer)) {\n columnScrollTimer = setInterval(scrollColumnsLeft, 100);\n }\n } else {\n clearInterval(columnScrollTimer);\n columnScrollTimer = null;\n }\n },\n onEnd: (e: MouseEvent & { item: any; originalEvent: MouseEvent; }) => {\n const cancel = false;\n clearInterval(columnScrollTimer);\n columnScrollTimer = null;\n if (cancel || !this.getEditorLock()?.commitCurrentEdit()) {\n return;\n }\n\n var reorderedCols;\n this._layout.getHeaderCols().forEach((el, i) => reorderedCols = sortToDesiredOrderAndKeepRest(\n this._initCols,\n (this.sortableColInstances[i]?.toArray?.() ?? [])\n ));\n\n this.setColumns(reorderedCols);\n this.trigger(this.onColumnsReordered, {});\n e.stopPropagation();\n this.setupColumnResize();\n if (this._activeCellNode) {\n this.setFocus(); // refocus on active cell\n }\n }\n }\n\n // @ts-ignore\n this.sortableColInstances = this._layout.getHeaderCols().map(x => Sortable.create(x, sortableOptions));\n }\n\n private setupColumnResize(): void {\n\n var minPageX: number, pageX: number, maxPageX: number, cols = this._cols;\n var columnElements: Element[] = [];\n this._layout.getHeaderCols().forEach(el => {\n columnElements = columnElements.concat(Array.from(el.children));\n });\n\n var j: number, c: Column, pageX: number, minPageX: number, maxPageX: number, firstResizable: number, lastResizable: number, cols = this._cols;\n var firstResizable: number, lastResizable: number;\n columnElements.forEach((el, i) => {\n var handle = el.querySelector(\".slick-resizable-handle\");\n handle && this._removeNode(handle);\n if (cols[i].resizable) {\n if (firstResizable === undefined) {\n firstResizable = i;\n }\n lastResizable = i;\n }\n });\n\n if (firstResizable === undefined) {\n return;\n }\n\n const noJQueryDrag = !this._jQuery || !this._jQuery.fn || !(this._jQuery.fn as any).drag;\n columnElements.forEach((el, colIdx) => {\n\n if (colIdx < firstResizable || (this._options.forceFitColumns && colIdx >= lastResizable)) {\n return;\n }\n\n const handle = el.appendChild(document.createElement('div'));\n handle.classList.add('slick-resizable-handle');\n handle.draggable = true;\n\n var docDragOver: any = null;\n\n const dragStart = (e: DragEvent) => {\n if (!this.getEditorLock().commitCurrentEdit()) {\n !noJQueryDrag && e.preventDefault();\n return;\n }\n\n if (noJQueryDrag) {\n docDragOver = (z: DragEvent) => z.preventDefault();\n document.addEventListener('dragover', docDragOver);\n }\n\n pageX = e.pageX;\n (e.target as HTMLElement).parentElement?.classList.add(\"slick-header-column-active\");\n\n // lock each column's width option to current width\n columnElements.forEach((e, z) => {\n cols[z].previousWidth = (e as HTMLElement).offsetWidth;\n });\n\n const minMax = calcMinMaxPageXOnDragStart(cols, colIdx, pageX, this._options.forceFitColumns, this._absoluteColMinWidth);\n maxPageX = minMax.maxPageX;\n minPageX = minMax.minPageX;\n\n noJQueryDrag && (e.dataTransfer.effectAllowed = 'move');\n };\n\n const drag = (e: DragEvent) => {\n if (noJQueryDrag) {\n if (!e.pageX && !e.clientX && !e.pageY && !e.clientY)\n return;\n e.dataTransfer.effectAllowed = 'none';\n e.preventDefault();\n }\n shrinkOrStretchColumn(cols, colIdx, Math.min(maxPageX, Math.max(minPageX, e.pageX)) - pageX, this._options.forceFitColumns, this._absoluteColMinWidth);\n\n this._layout.afterHeaderColumnDrag();\n\n this.applyColumnHeaderWidths();\n if (this._options.syncColumnCellResize) {\n this._layout.applyColumnWidths();\n }\n }\n\n const dragEnd = (e: any) => {\n if (docDragOver) {\n document.removeEventListener('dragover', docDragOver);\n docDragOver = null;\n }\n (e.target.parentElement as HTMLElement)?.classList.remove(\"slick-header-column-active\");\n for (j = 0; j < columnElements.length; j++) {\n c = cols[j];\n var newWidth = (columnElements[j] as HTMLElement).offsetWidth;\n\n if (c.previousWidth !== newWidth && c.rerenderOnResize) {\n this.invalidateAllRows();\n }\n }\n this.columnsResized(false);\n }\n\n if (noJQueryDrag) {\n handle.addEventListener(\"dragstart\", dragStart);\n handle.addEventListener(\"drag\", drag);\n handle.addEventListener(\"dragend\", dragEnd);\n handle.addEventListener(\"dragover\", (e: any) => { e.preventDefault(); e.dataTransfer.effectAllowed = \"move\"; });\n }\n else {\n (this._jQuery(handle) as any)\n .on(\"dragstart\", dragStart)\n .on(\"drag\", drag)\n .on(\"dragend\", dragEnd);\n }\n });\n }\n\n public columnsResized(invalidate = true) {\n this.applyColumnHeaderWidths();\n this._layout.applyColumnWidths();\n invalidate && this.invalidateAllRows();\n this.updateCanvasWidth(true);\n this.render();\n this.trigger(this.onColumnsResized);\n }\n\n private setOverflow(): void {\n this._layout.setOverflow();\n if (this._options.viewportClass)\n this.getViewports().forEach(vp => addClass(vp, this._options.viewportClass));\n }\n\n private measureCellPaddingAndBorder(): void {\n const h = [\"border-left-width\", \"border-right-width\", \"padding-left\", \"padding-right\"];\n const v = [\"border-top-width\", \"border-bottom-width\", \"padding-top\", \"padding-bottom\"];\n\n var el = this._layout.getHeaderColsFor(0).appendChild(H(\"div\", { class: \"slick-header-column\" + (this._options.useLegacyUI ? \" ui-state-default\" : \"\"), style: \"visibility:hidden\" }));\n this._headerColumnWidthDiff = 0;\n var cs = getComputedStyle(el);\n if (cs.boxSizing != \"border-box\")\n h.forEach(val => this._headerColumnWidthDiff += parsePx(cs.getPropertyValue(val)) || 0);\n el.remove();\n\n var r = this._layout.getCanvasNodeFor(0, 0).appendChild(H(\"div\", { class: \"slick-row\" },\n el = H(\"div\", { class: \"slick-cell\", id: \"\", style: \"visibility: hidden\" })));\n el.innerHTML = \"-\";\n this._cellWidthDiff = this._cellHeightDiff = 0;\n cs = getComputedStyle(el);\n if (cs.boxSizing != \"border-box\") {\n h.forEach(val => this._cellWidthDiff += parsePx(cs.getPropertyValue(val)) || 0);\n v.forEach(val => this._cellHeightDiff += parsePx(cs.getPropertyValue(val)) || 0);\n }\n r.remove();\n\n this._absoluteColMinWidth = Math.max(this._headerColumnWidthDiff, this._cellWidthDiff);\n }\n\n private createCssRules() {\n var cellHeight = (this._options.rowHeight - this._cellHeightDiff);\n\n if (this._options.useCssVars && this.getColumns().length > 50)\n this._options.useCssVars = false;\n\n this._container.classList.toggle('sleek-vars', !!this._options.useCssVars);\n\n if (this._options.useCssVars) {\n var style = this._container.style;\n style.setProperty(\"--sleek-row-height\", this._options.rowHeight + \"px\");\n style.setProperty(\"--sleek-cell-height\", cellHeight + \"px\");\n style.setProperty(\"--sleek-top-panel-height\", this._options.topPanelHeight + \"px\");\n style.setProperty(\"--sleek-grouping-panel-height\", this._options.groupingPanelHeight + \"px\");\n style.setProperty(\"--sleek-headerrow-height\", this._options.headerRowHeight + \"px\");\n style.setProperty(\"--sleek-footerrow-height\", this._options.footerRowHeight + \"px\");\n return;\n }\n\n var el = this._styleNode = document.createElement('style');\n el.dataset.uid = this._uid;\n var rules = [\n \".\" + this._uid + \" { --slick-cell-height: \" + this._options.rowHeight + \"px; }\",\n \".\" + this._uid + \" .slick-group-header-column { \" + (this._options.rtl ? 'right' : 'left') + \": 1000px; }\",\n \".\" + this._uid + \" .slick-header-column { \" + (this._options.rtl ? 'right' : 'left') + \": 1000px; }\",\n \".\" + this._uid + \" .slick-top-panel { height:\" + this._options.topPanelHeight + \"px; }\",\n \".\" + this._uid + \" .slick-grouping-panel { height:\" + this._options.groupingPanelHeight + \"px; }\",\n \".\" + this._uid + \" .slick-headerrow-columns { height:\" + this._options.headerRowHeight + \"px; }\",\n \".\" + this._uid + \" .slick-cell { height:\" + cellHeight + \"px; }\",\n \".\" + this._uid + \" .slick-row { height:\" + this._options.rowHeight + \"px; }\",\n \".\" + this._uid + \" .slick-footerrow-columns { height:\" + this._options.footerRowHeight + \"px; }\",\n ];\n\n var cols = this._cols;\n for (var i = 0; i < cols.length; i++) {\n rules.push(\".\" + this._uid + \" .l\" + i + \" { }\");\n rules.push(\".\" + this._uid + \" .r\" + i + \" { }\");\n }\n\n el.appendChild(document.createTextNode(rules.join(\" \")));\n document.head.appendChild(el);\n }\n\n private getColumnCssRules(idx: number): { right: any; left: any; } {\n if (this._options.useCssVars)\n return null;\n\n if (!this._stylesheet) {\n var stylesheetFromUid = document.querySelector(\"style[data-uid='\" + this._uid + \"']\") as any\n if (stylesheetFromUid && stylesheetFromUid.sheet) {\n this._stylesheet = stylesheetFromUid.sheet;\n } else {\n var sheets = document.styleSheets;\n for (var i = 0; i < sheets.length; i++) {\n if ((sheets[i].ownerNode || (sheets[i] as any).owningElement) == this._styleNode) {\n this._stylesheet = sheets[i];\n break;\n }\n }\n }\n\n if (!this._stylesheet) {\n throw new Error(\"Cannot find stylesheet.\");\n }\n\n // find and cache column CSS rules\n this._columnCssRulesL = [];\n this._columnCssRulesR = [];\n var cssRules = (this._stylesheet.cssRules || this._stylesheet.rules);\n var matches, columnIdx;\n for (var i = 0; i < cssRules.length; i++) {\n var selector = cssRules[i].selectorText;\n if (matches = /\\.l\\d+/.exec(selector)) {\n columnIdx = parseInt(matches[0].substring(2, matches[0].length), 10);\n this._columnCssRulesL[columnIdx] = cssRules[i];\n } else if (matches = /\\.r\\d+/.exec(selector)) {\n columnIdx = parseInt(matches[0].substring(2, matches[0].length), 10);\n this._columnCssRulesR[columnIdx] = cssRules[i];\n }\n }\n }\n\n return this._options.rtl ? {\n \"right\": this._columnCssRulesL[idx],\n \"left\": this._columnCssRulesR[idx]\n } : {\n \"left\": this._columnCssRulesL[idx],\n \"right\": this._columnCssRulesR[idx]\n }\n }\n\n private removeCssRules() {\n this._styleNode?.remove();\n this._styleNode = null;\n this._stylesheet = null;\n }\n\n destroy() {\n this.getEditorLock().cancelCurrentEdit();\n\n this.trigger(this.onBeforeDestroy);\n\n var i = this._plugins.length;\n while (i--) {\n this.unregisterPlugin(this._plugins[i]);\n }\n\n if (this._options.enableColumnReorder && this._jQuery && (this._jQuery.fn as any).sortable) {\n (this._jQuery(this._layout.getHeaderCols()).filter(\":ui-sortable\") as any).sortable(\"destroy\");\n }\n\n this.unbindAncestorScrollEvents();\n this.unbindFromData();\n this.unregisterSelectionModel();\n this._jQuery?.(this._container).off(\".slickgrid\");\n this.removeCssRules();\n\n var canvasNodes = this._layout.getCanvasNodes();\n if (this._jQuery)\n this._jQuery(canvasNodes).off(\"draginit dragstart dragend drag\");\n else\n canvasNodes.forEach(el => this._removeNode(el));\n\n for (var k in this) {\n if (!Object.prototype.hasOwnProperty.call(this, k))\n continue;\n if (k.startsWith('on')) {\n var ev: any = this[k];\n if ((ev as EventEmitter)?.clear && (ev as EventEmitter)?.subscribe)\n (ev as EventEmitter)?.clear();\n }\n delete this[k];\n }\n }\n\n\n //////////////////////////////////////////////////////////////////////////////////////////////\n // General\n\n private trigger(\n evt: EventEmitter, args?: TArgs, e?: TEventData) {\n e = e || new EventData() as any;\n args = args || {} as any;\n args.grid = this;\n return evt.notify(args, e, this);\n }\n\n getEditorLock(): EditorLock {\n return this._options.editorLock;\n }\n\n getEditController(): EditController {\n return this._editController;\n }\n\n /** Gets a column by its ID. May also return non visible columns */\n getColumnById(id: string): Column {\n return id ? this._cols[this._colById[id]] : null;\n }\n\n /** Returns a column's index in the visible columns list by its column ID */\n getColumnIndex(id: string): number {\n return id ? this._colById[id] : null;\n }\n\n /** Gets index of a column in the initial column list passed to the grid, or setColumns method. May include invisible cols and index does not have to match visible column order. */\n getInitialColumnIndex(id: string): number {\n return id ? this._initColById[id] : null;\n }\n\n /** Gets a view (e.g. visible) column by its column ID */\n getVisibleColumnById(id: string): Column {\n return id ? this._cols[this._colById[id]] : null;\n }\n\n autosizeColumns(): void {\n var vpi = this._viewportInfo,\n availWidth = vpi.hasVScroll ? vpi.width - this._scrollDims.width : vpi.width;\n\n var reRender = autosizeColumns(this._cols, availWidth, this._absoluteColMinWidth);\n\n this.applyColumnHeaderWidths();\n this.updateCanvasWidth(true);\n if (reRender) {\n this.invalidateAllRows();\n this.render();\n }\n }\n\n private applyColumnHeaderWidths(): void {\n if (!this._initialized) { return; }\n\n var h: HTMLElement;\n for (var i = 0, cols = this._cols, colCount = cols.length, diff = this._headerColumnWidthDiff; i < colCount; i++) {\n h = this._layout.getHeaderColumn(i);\n if (h) {\n var target = cols[i].width - diff;\n if (h.offsetWidth !== target) {\n h.style.width = target + 'px'\n }\n }\n }\n\n this.updateViewColLeftRight();\n }\n\n setSortColumn(columnId: string, ascending: boolean) {\n this.setSortColumns([{ columnId: columnId, sortAsc: ascending }]);\n }\n\n setSortColumns(cols: ColumnSort[]) {\n this._sortColumns = cols || [];\n\n var headerColumnEls: Element[] = [];\n this._layout.getHeaderCols().forEach(el => headerColumnEls = headerColumnEls.concat(Array.from(el.children)));\n headerColumnEls.forEach(hel => {\n hel.classList.remove(\"slick-header-column-sorted\");\n var si = hel.querySelector(\".slick-sort-indicator\");\n si && si.classList.remove(\"slick-sort-indicator-asc\", \"slick-sort-indicator-desc\");\n });\n\n this._sortColumns.forEach(col => {\n if (col.sortAsc == null) {\n col.sortAsc = true;\n }\n var columnIndex = this.getColumnIndex(col.columnId);\n if (columnIndex != null) {\n var header = headerColumnEls[columnIndex];\n if (header) {\n header.classList.add(\"slick-header-column-sorted\");\n var si = header.querySelector(\".slick-sort-indicator\");\n si && si.classList.add(col.sortAsc ? \"slick-sort-indicator-asc\" : \"slick-sort-indicator-desc\");\n }\n }\n });\n }\n\n getSortColumns(): ColumnSort[] {\n return this._sortColumns;\n }\n\n private handleSelectedRangesChanged = (e: IEventData, ranges: Range[]): void => {\n var previousSelectedRows = this._selectedRows.slice(0); // shallow copy previously selected rows for later comparison\n this._selectedRows = [];\n var hash: any = {}, cols = this._cols;\n for (var i = 0; i < ranges.length; i++) {\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n if (!hash[j]) { // prevent duplicates\n this._selectedRows.push(j);\n hash[j] = {};\n }\n for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\n if (this.canCellBeSelected(j, k)) {\n hash[j][cols[k].id] = this._options.selectedCellCssClass;\n }\n }\n }\n }\n\n this.setCellCssStyles(this._options.selectedCellCssClass, hash);\n\n if (!simpleArrayEquals(previousSelectedRows, this._selectedRows)) {\n var caller = e && (e as any).detail && (e as any).detail.caller || 'click';\n var newSelectedAdditions = this._selectedRows.filter(i => previousSelectedRows.indexOf(i) < 0);\n var newSelectedDeletions = previousSelectedRows.filter(i => this._selectedRows.indexOf(i) < 0);\n\n this.trigger(this.onSelectedRowsChanged, {\n rows: this.getSelectedRows(),\n previousSelectedRows: previousSelectedRows,\n caller: caller,\n changedSelectedRows: newSelectedAdditions,\n changedUnselectedRows: newSelectedDeletions\n }, e);\n }\n\n this._selectedRows = [];\n hash = {}, cols = this._cols;\n for (var i = 0; i < ranges.length; i++) {\n for (var j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n if (!hash[j]) { // prevent duplicates\n this._selectedRows.push(j);\n hash[j] = {};\n }\n for (var k = ranges[i].fromCell; k <= ranges[i].toCell; k++) {\n if (this.canCellBeSelected(j, k)) {\n hash[j][cols[k].id] = this._options.selectedCellCssClass;\n }\n }\n }\n }\n }\n\n /** Returns only the visible columns in order */\n getColumns(): Column[] {\n return this._cols;\n }\n\n /** Returns list of columns passed to the grid constructor, or setColumns method. May include invisible columns and order does not match visible column order. */\n getInitialColumns(): Column[] {\n return this._initCols;\n }\n\n private updateViewColLeftRight(): void {\n this._colLeft = [];\n this._colRight = [];\n var x = 0, r: number, cols = this._cols, i: number, l: number = cols.length, frozenCols = this._layout.getFrozenCols();\n for (var i = 0; i < l; i++) {\n if (frozenCols === i)\n x = 0;\n r = x + cols[i].width;\n this._colLeft[i] = x;\n this._colRight[i] = r;\n x = r;\n }\n }\n\n private setInitialCols(initCols: Column[]) {\n\n initializeColumns(initCols, this._colDefaults);\n\n var initColById: any = {};\n var viewCols: Column[] = [];\n var viewColById: { [key: string]: number } = {};\n var i: number, m: Column;\n for (i = 0; i < initCols.length; i++) {\n m = initCols[i];\n initColById[m.id] = i;\n if (m.visible !== false)\n viewCols.push(m);\n }\n\n viewCols = this._layout.reorderViewColumns(viewCols, this._options);\n\n this._postRenderActive = this._options.enableAsyncPostRender ?? false;\n this._postCleanupActive = this._options.enableAsyncPostRenderCleanup ?? false;\n for (i = 0; i < viewCols.length; i++) {\n m = viewCols[i];\n viewColById[m.id] = i;\n if (m.asyncPostRenderCleanup != null)\n this._postCleanupActive = true;\n if (m.asyncPostRender != null)\n this._postRenderActive = true;\n }\n\n this._initCols = initCols;\n this._initColById = initColById;\n this._cols = viewCols;\n this._colById = viewColById;\n }\n\n setColumns(columns: Column[]): void {\n\n if (columns &&\n this._initCols &&\n this._cols &&\n columns.length === this._cols.length &&\n this._initCols.length > this._cols.length &&\n !columns.some(x => this._cols.indexOf(x) < 0) &&\n !this._cols.some(x => columns.indexOf(x) < 0)) {\n // probably called with grid.setColumns(grid.getColumns()) potentially changing orders / widths etc\n // try to preserve initial columns\n sortToDesiredOrderAndKeepRest(\n this._initCols,\n columns.map(x => x.id));\n columns = this._initCols;\n }\n\n this.setInitialCols(columns);\n this.updateViewColLeftRight();\n\n if (this._initialized) {\n this._layout.setPaneVisibility();\n this.setOverflow();\n\n this.invalidateAllRows();\n this.createColumnHeaders();\n this.createColumnFooters();\n this.updateGrandTotals();\n this.removeCssRules();\n this.createCssRules();\n this.resizeCanvas();\n this.updateCanvasWidth();\n this._layout.applyColumnWidths();\n this.handleScroll();\n this.getSelectionModel()?.refreshSelections?.();\n }\n }\n\n getOptions(): GridOptions {\n return this._options;\n }\n\n setOptions(args: GridOptions, suppressRender?: boolean, suppressColumnSet?: boolean, suppressSetOverflow?: boolean): void {\n if (!this.getEditorLock().commitCurrentEdit()) {\n return;\n }\n\n this.makeActiveCellNormal();\n\n if (args.groupingPanel && !this._options.groupingPanel)\n this.createGroupingPanel();\n else if (args.groupingPanel != void 0 && !args.groupingPanel && this._groupingPanel)\n this._removeNode(this._groupingPanel);\n\n if (args.showColumnHeader !== undefined) {\n this.setColumnHeaderVisibility(args.showColumnHeader);\n }\n\n if (this._options.enableAddRow !== args.enableAddRow) {\n this.invalidateRow(this.getDataLength());\n }\n\n this._options = Object.assign(this._options, args);\n this.validateAndEnforceOptions();\n this._layout.afterSetOptions(args);\n\n if (args.columns && !suppressColumnSet) {\n this.setColumns(args.columns ?? this._initCols);\n }\n\n if (!suppressSetOverflow) {\n this.setOverflow();\n }\n\n this._layout.setScroller();\n if (!suppressRender)\n this.render();\n }\n\n private validateAndEnforceOptions(): void {\n if (this._options.autoHeight) {\n this._options.leaveSpaceForNewRows = false;\n }\n }\n\n private viewOnRowCountChanged = () => {\n this.updateRowCount();\n this.render();\n }\n\n private viewOnRowsChanged = (_: any, args: { rows: number[] }): void => {\n this.invalidateRows(args.rows);\n this.render();\n this.updateGrandTotals();\n }\n\n private viewOnDataChanged = (): void => {\n this.invalidate();\n this.render();\n }\n\n private bindToData(): void {\n if (this._data) {\n this._data.onRowCountChanged && this._data.onRowCountChanged.subscribe(this.viewOnRowCountChanged);\n this._data.onRowsChanged && this._data.onRowsChanged.subscribe(this.viewOnRowsChanged);\n this._data.onDataChanged && this._data.onDataChanged.subscribe(this.viewOnDataChanged);\n }\n }\n\n private unbindFromData(): void {\n if (this._data) {\n this._data.onRowCountChanged && this._data.onRowCountChanged.unsubscribe(this.viewOnRowCountChanged);\n this._data.onRowsChanged && this._data.onRowsChanged.unsubscribe(this.viewOnRowsChanged);\n this._data.onDataChanged && this._data.onDataChanged.unsubscribe(this.viewOnDataChanged);\n }\n }\n\n setData(newData: any, scrollToTop?: boolean) {\n this.unbindFromData();\n this._data = newData;\n this.bindToData();\n this.invalidateAllRows();\n this.updateRowCount();\n if (scrollToTop) {\n this.scrollTo(0);\n }\n }\n\n getData(): any {\n return this._data;\n }\n\n getDataLength(): number {\n if (this._data.getLength) {\n return this._data.getLength();\n } else {\n return this._data.length;\n }\n }\n\n private getDataLengthIncludingAddNew(): number {\n return this.getDataLength() + (!this._options.enableAddRow ? 0 :\n (!this._pagingActive || this._pagingIsLastPage ? 1 : 0));\n }\n\n getDataItem(i: number): TItem {\n if (this._data.getItem) {\n return this._data.getItem(i);\n } else {\n return this._data[i];\n }\n }\n\n getTopPanel(): HTMLElement {\n return this._layout.getTopPanelFor(0);\n }\n\n setTopPanelVisibility(visible: boolean): void {\n if (this._options.showTopPanel != visible) {\n this._options.showTopPanel = !!visible;\n\n this._layout.getTopPanelNodes().forEach(el => {\n if (this._jQuery)\n this._jQuery(el)[visible ? \"slideDown\" : \"slideUp\"](\"fast\", this.resizeCanvas);\n else {\n el.style.display = visible ? '' : 'none';\n this.resizeCanvas();\n }\n });\n }\n }\n\n setColumnHeaderVisibility(visible: boolean, animate?: boolean) {\n if (this._options.showColumnHeader != visible) {\n this._options.showColumnHeader = visible;\n this._layout.getHeaderCols().forEach(n => {\n const el = n.parentElement;\n if (animate && this._jQuery)\n this._jQuery(el)[visible ? \"slideDown\" : \"slideUp\"](\"fast\", this.resizeCanvas);\n else {\n el.style.display = visible ? '' : 'none';\n this.resizeCanvas();\n }\n });\n }\n }\n\n setFooterRowVisibility(visible: boolean): void {\n if (this._options.showFooterRow != visible) {\n this._options.showFooterRow = !!visible;\n this._layout.getFooterRowCols().forEach(n => {\n const el = n.parentElement;\n if (this._jQuery)\n this._jQuery(el)[visible ? \"slideDown\" : \"slideUp\"](\"fast\", this.resizeCanvas);\n else {\n el.style.display = visible ? '' : 'none';\n this.resizeCanvas();\n }\n });\n }\n }\n\n setGroupingPanelVisibility(visible: boolean): void {\n if (this._options.showGroupingPanel != visible) {\n this._options.showGroupingPanel = visible;\n if (!this._options.groupingPanel)\n return;\n\n const el = this._groupingPanel;\n if (this._jQuery)\n this._jQuery(el)[visible ? \"slideDown\" : \"slideUp\"](\"fast\", this.resizeCanvas);\n else {\n el.style.display = visible ? '' : 'none';\n this.resizeCanvas();\n }\n }\n }\n\n setPreHeaderPanelVisibility(visible: boolean): void {\n this.setGroupingPanelVisibility(visible);\n }\n\n setHeaderRowVisibility(visible: boolean): void {\n if (this._options.showHeaderRow != visible) {\n this._options.showHeaderRow = visible;\n this._layout.getHeaderRowCols().forEach(n => {\n const el = n.parentElement;\n if (this._jQuery)\n this._jQuery(el)[visible ? \"slideDown\" : \"slideUp\"](\"fast\", this.resizeCanvas);\n else {\n el.style.display = visible ? '' : 'none';\n this.resizeCanvas();\n }\n });\n }\n }\n\n getContainerNode(): HTMLElement {\n return this._container;\n }\n\n getUID(): string {\n return this._uid;\n }\n\n //////////////////////////////////////////////////////////////////////////////////////////////\n // Rendering / Scrolling\n\n private getRowTop(row: number): number {\n return this._options.rowHeight * row - this._pageOffset;\n }\n\n private getRowFromPosition(y: number): number {\n return Math.floor((y + this._pageOffset) / this._options.rowHeight);\n }\n\n private scrollTo(y: number): void {\n const vpi = this._viewportInfo;\n y = Math.max(y, 0);\n y = Math.min(y, vpi.virtualHeight - Math.round(this._layout.getScrollContainerY().clientHeight) + ((vpi.hasHScroll || this.hasFrozenColumns()) ? this._scrollDims.height : 0));\n\n var oldOffset = this._pageOffset;\n\n this._page = Math.min(this._numberOfPages - 1, Math.floor(y / this._pageHeight));\n this._pageOffset = Math.round(this._page * this._jumpinessCoefficient);\n var newScrollTop = y - this._pageOffset;\n\n if (this._pageOffset != oldOffset) {\n var range = this.getVisibleRange(newScrollTop);\n this.cleanupRows(range);\n this.updateRowPositions();\n }\n\n if (this._scrollTopPrev != newScrollTop) {\n this._vScrollDir = (this._scrollTopPrev + oldOffset < newScrollTop + this._pageOffset) ? 1 : -1;\n\n this._scrollTopRendered = (this._scrollTop = this._scrollTopPrev = newScrollTop);\n\n this._layout.handleScrollV();\n this._layout.getScrollContainerY().scrollTop = newScrollTop;\n\n this.trigger(this.onViewportChanged);\n }\n }\n\n getFormatter(row: number, column: Column): ColumnFormat {\n var data = this._data;\n\n if (data.getItemMetadata) {\n const itemMetadata = data.getItemMetadata(row) as ItemMetadata;\n if (itemMetadata) {\n const colsMetadata = itemMetadata.columns;\n if (colsMetadata) {\n var columnMetadata: ColumnMetadata = colsMetadata[column.id] || colsMetadata[this.getColumnIndex(column.id)];\n if (columnMetadata) {\n if (columnMetadata.format)\n return columnMetadata.format;\n if (columnMetadata.formatter)\n return convertCompatFormatter(columnMetadata.formatter);\n }\n }\n if (itemMetadata.format)\n return itemMetadata.format;\n if (itemMetadata.formatter)\n return convertCompatFormatter(itemMetadata.formatter);\n }\n }\n\n if (column.format)\n return column.format;\n\n if (column.formatter)\n return convertCompatFormatter(column.formatter);\n\n var opt = this._options;\n\n var factory = opt.formatterFactory;\n if (factory) {\n if (factory.getFormat) {\n var format = factory.getFormat(column);\n if (format)\n return format;\n }\n else if (factory.getFormatter) {\n var compat = factory.getFormatter(column);\n if (compat)\n return convertCompatFormatter(compat);\n }\n }\n\n if (opt.defaultFormat)\n return opt.defaultFormat;\n\n if (opt.defaultFormatter)\n return convertCompatFormatter(opt.defaultFormatter);\n\n return defaultColumnFormat;\n }\n\n getFormatterContext(row: number, cell: number): FormatterContext {\n var column = this._cols[cell];\n var item = this.getDataItem(row);\n const ctx: FormatterContext = {\n cell,\n column,\n grid: this,\n escape,\n item,\n row\n }\n if (item)\n ctx.value = this.getDataItemValueForColumn(item, column);\n return ctx;\n }\n\n private getEditor(row: number, cell: number): EditorClass {\n var column = this._cols[cell];\n var itemMetadata = this._data.getItemMetadata && this._data.getItemMetadata(row) as ItemMetadata;\n var colsMetadata = itemMetadata && itemMetadata.columns;\n\n if (colsMetadata && colsMetadata[column.id] && colsMetadata[column.id].editor !== undefined) {\n return colsMetadata[column.id].editor;\n }\n if (colsMetadata && colsMetadata[cell] && colsMetadata[cell].editor !== undefined) {\n return colsMetadata[cell].editor;\n }\n\n return column.editor || (this._options.editorFactory && this._options.editorFactory.getEditor(column, row));\n }\n\n getDataItemValueForColumn(item: TItem, columnDef: Column): any {\n if (this._options.dataItemColumnValueExtractor)\n return this._options.dataItemColumnValueExtractor(item, columnDef);\n return (item as any)[columnDef.field];\n }\n\n private appendRowHtml(stringArrayL: string[], stringArrayR: string[], row: number, range: ViewRange, dataLength: number): void {\n var d = this.getDataItem(row);\n var dataLoading = row < dataLength && !d;\n var rowCss = \"slick-row\" +\n (this._layout.isFrozenRow(row) ? ' frozen' : '') +\n (dataLoading ? \" loading\" : \"\") +\n (row === this._activeRow ? \" active\" : \"\") +\n (row % 2 == 1 ? \" odd\" : \" even\");\n\n if (!d) {\n rowCss += \" \" + this._options.addNewRowCssClass;\n }\n\n var itemMetadata = this._data.getItemMetadata?.(row) as ItemMetadata;\n\n if (itemMetadata && itemMetadata.cssClasses) {\n rowCss += \" \" + itemMetadata.cssClasses;\n }\n\n var rowOffset = this._layout.getFrozenRowOffset(row);\n\n var rowHtml = \"

\";\n\n stringArrayL.push(rowHtml);\n\n const frozenCols = this._layout.getFrozenCols();\n\n if (frozenCols) {\n stringArrayR.push(rowHtml);\n }\n\n var colspan, m, cols = this._cols;\n for (var i = 0, ii = cols.length; i < ii; i++) {\n var columnData: ColumnMetadata = null;\n m = cols[i];\n colspan = 1;\n if (itemMetadata && itemMetadata.columns) {\n columnData = itemMetadata.columns[m.id] || itemMetadata.columns[i];\n colspan = (columnData && columnData.colspan) || 1;\n if (colspan === \"*\") {\n colspan = ii - i;\n }\n }\n\n // Do not render cells outside of the viewport.\n if (this._colRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx) {\n if (this._colLeft[i] > range.rightPx) {\n // All columns to the right are outside the range.\n break;\n }\n\n this.appendCellHtml(frozenCols > 0 && i >= frozenCols ? stringArrayR : stringArrayL, row, i, colspan, d, columnData);\n }\n\n if (colspan > 1) {\n i += (colspan - 1);\n }\n }\n\n stringArrayL.push(\"
\");\n\n if (frozenCols) {\n stringArrayR.push(\"\");\n }\n }\n\n private appendCellHtml(sb: string[], row: number, cell: number, colspan: number, item: TItem, metadata: ColumnMetadata): void {\n var cols = this._cols, frozenCols = this._layout.getFrozenCols(), column = cols[cell];\n var klass = \"slick-cell l\" + cell + \" r\" + Math.min(cols.length - 1, cell + colspan - 1) +\n (column.cssClass ? \" \" + column.cssClass : \"\");\n\n if (cell < frozenCols)\n klass += ' frozen';\n\n if (row === this._activeRow && cell === this._activeCell)\n klass += \" active\";\n\n if (metadata && metadata.cssClasses) {\n klass += \" \" + metadata.cssClasses;\n }\n\n for (var key in this._cellCssClasses) {\n if (this._cellCssClasses[key][row] && (this._cellCssClasses[key][row] as any)[column.id]) {\n klass += (\" \" + this._cellCssClasses[key][row][column.id]);\n }\n }\n\n // if there is a corresponding row (if not, this is the Add New row or this data hasn't been loaded yet)\n var formatResult: FormatterResult;\n const ctx: FormatterContext = {\n cell,\n column,\n escape,\n grid: this,\n item,\n row\n }\n\n if (item) {\n ctx.value = this.getDataItemValueForColumn(item, column);\n formatResult = this.getFormatter(row, column)(ctx);\n }\n\n klass = escape(klass);\n\n if (ctx.addClass?.length || ctx.addAttrs?.length || ctx.tooltip?.length) {\n if (ctx.addClass?.length)\n klass += (\" \" + escape(ctx.addClass));\n\n sb.push('
' + formatResult + '
');\n else\n sb.push('>');\n }\n else if (formatResult != null && !(formatResult instanceof Node))\n sb.push('
' + formatResult + '
');\n else\n sb.push('
');\n\n var cache = this._rowsCache[row];\n cache.cellRenderQueue.push(cell);\n cache.cellRenderContent.push(formatResult instanceof Node ? formatResult : void 0);\n this._rowsCache[row].cellColSpans[cell] = colspan;\n }\n\n private cleanupRows(rangeToKeep: ViewRange): void {\n var i: number;\n for (var x in this._rowsCache) {\n i = parseInt(x, 10);\n if (i !== this._activeRow && (i < rangeToKeep.top || i > rangeToKeep.bottom)\n && !this._layout.isFrozenRow(i))\n this.removeRowFromCache(i);\n }\n\n this.startPostProcessingCleanup();\n }\n\n invalidate(): void {\n this.updateRowCount();\n this.invalidateAllRows();\n this.render();\n this.updateGrandTotals();\n }\n\n invalidateAllRows(): void {\n if (this._currentEditor) {\n this.makeActiveCellNormal();\n }\n for (var row in this._rowsCache) {\n this.removeRowFromCache(parseInt(row, 10));\n }\n\n this.startPostProcessingCleanup();\n }\n\n private queuePostProcessedRowForCleanup(cacheEntry: CachedRow, row: number): void {\n\n var postProcessedRow = this._postProcessedRows[row];\n if (!postProcessedRow)\n return;\n\n this._postProcessGroupId++;\n\n // store and detach node for later async cleanup\n for (var x in postProcessedRow) {\n var columnIdx = parseInt(x, 10);\n this._postProcessCleanupQueue.push({\n groupId: this._postProcessGroupId,\n cellNode: cacheEntry.cellNodesByColumnIdx[columnIdx | 0],\n columnIdx: columnIdx | 0,\n rowIdx: row\n });\n }\n\n this._postProcessCleanupQueue.push({\n groupId: this._postProcessGroupId,\n rowNodeL: cacheEntry.rowNodeL,\n rowNodeR: cacheEntry.rowNodeR\n });\n\n cacheEntry.rowNodeL?.remove();\n cacheEntry.rowNodeR?.remove();\n }\n\n private queuePostProcessedCellForCleanup(cellnode: HTMLElement, columnIdx: number, rowIdx: number): void {\n this._postProcessCleanupQueue.push({\n groupId: this._postProcessGroupId,\n cellNode: cellnode,\n columnIdx: columnIdx,\n rowIdx: rowIdx\n });\n cellnode.remove(); // cleanup should be handled by postprocess\n }\n\n private removeRowFromCache(row: number): void {\n var cacheEntry = this._rowsCache[row];\n if (!cacheEntry) {\n return;\n }\n\n if (this._postCleanupActive && this._postProcessedRows[row]) {\n this.queuePostProcessedRowForCleanup(cacheEntry, row);\n }\n else {\n cacheEntry.rowNodeL?.parentElement?.removeChild(cacheEntry.rowNodeL);\n cacheEntry.rowNodeR?.parentElement?.removeChild(cacheEntry.rowNodeR);\n }\n\n delete this._rowsCache[row];\n delete this._postProcessedRows[row];\n }\n\n invalidateRows(rows: number[]): void {\n var i, rl;\n if (!rows || !rows.length) {\n return;\n }\n this._vScrollDir = 0;\n for (i = 0, rl = rows.length; i < rl; i++) {\n if (this._currentEditor && this._activeRow === rows[i]) {\n this.makeActiveCellNormal();\n }\n if (this._rowsCache[rows[i]]) {\n this.removeRowFromCache(rows[i]);\n }\n }\n\n this.startPostProcessingCleanup();\n }\n\n invalidateRow(row: number): void {\n this.invalidateRows([row]);\n }\n\n updateCell(row: number, cell: number): void {\n var cellNode = this.getCellNode(row, cell);\n if (!cellNode)\n return;\n\n if (this._currentEditor && this._activeRow === row && this._activeCell === cell) {\n this._currentEditor.loadValue(this.getDataItem(row));\n } else {\n this.updateCellWithFormatter(cellNode, row, cell);\n this.invalidatePostProcessingResults(row);\n }\n }\n\n private updateCellWithFormatter(cellNode: HTMLElement, row: number, cell: number): void {\n var formatResult: string | Element | DocumentFragment;\n const ctx = this.getFormatterContext(row, cell);\n if (ctx.item)\n formatResult = this.getFormatter(row, ctx.column)(ctx);\n this._emptyNode(cellNode);\n applyFormatterResultToCellNode(ctx, formatResult, cellNode);\n }\n\n updateRow(row: number): void {\n var cacheEntry = this._rowsCache[row];\n if (!cacheEntry) {\n return;\n }\n\n this.ensureCellNodesInRowsCache(row);\n\n var d = this.getDataItem(row);\n\n for (var x in cacheEntry.cellNodesByColumnIdx) {\n var cell = parseInt(x, 10);\n if (row === this._activeRow && cell === this._activeCell && this._currentEditor) {\n this._currentEditor.loadValue(d);\n }\n else {\n this.updateCellWithFormatter(cacheEntry.cellNodesByColumnIdx[cell], row, cell);\n }\n }\n\n this.invalidatePostProcessingResults(row);\n }\n\n private calcViewportSize(): void {\n const layout = this._layout;\n const vs = this._viewportInfo;\n vs.width = getInnerWidth(this._container);\n vs.groupingPanelHeight = (this._options.groupingPanel && this._options.showGroupingPanel) ? (this._options.groupingPanelHeight + getVBoxDelta(this._groupingPanel)) : 0\n vs.topPanelHeight = this._options.showTopPanel ? (this._options.topPanelHeight + getVBoxDelta(layout.getTopPanelFor(0).parentElement)) : 0;\n vs.headerRowHeight = this._options.showHeaderRow ? (this._options.headerRowHeight + getVBoxDelta(layout.getHeaderRowColsFor(0).parentElement)) : 0;\n vs.footerRowHeight = this._options.showFooterRow ? (this._options.footerRowHeight + getVBoxDelta(layout.getFooterRowColsFor(0).parentElement)) : 0;\n vs.headerHeight = (this._options.showColumnHeader) ? (parsePx(getComputedStyle(layout.getHeaderColsFor(0).parentElement).height) + getVBoxDelta(layout.getHeaderColsFor(0).parentElement)) : 0;\n\n if (this._options.autoHeight) {\n vs.height = this._options.rowHeight * this.getDataLengthIncludingAddNew();\n if (this._layout.calcCanvasWidth() > vs.width)\n vs.height += this._scrollDims.height;\n } else {\n\n var style = getComputedStyle(this._container);\n vs.height = parsePx(style.height)\n - parsePx(style.paddingTop)\n - parsePx(style.paddingBottom)\n - vs.headerHeight\n - vs.topPanelHeight\n - vs.headerRowHeight\n - vs.footerRowHeight\n - vs.groupingPanelHeight;\n }\n\n vs.numVisibleRows = Math.ceil(vs.height / this._options.rowHeight);\n }\n\n resizeCanvas = (): void => {\n if (!this._initialized) {\n return;\n }\n\n this.calcViewportSize();\n this._layout.resizeCanvas();\n\n if (!this._scrollDims || !this._scrollDims.width) {\n this._scrollDims = getScrollBarDimensions(true);\n }\n\n if (this._options.forceFitColumns) {\n this.autosizeColumns();\n }\n\n this.updateRowCount();\n this.handleScroll();\n // Since the width has changed, force the render() to reevaluate virtually rendered cells.\n this._scrollLeftRendered = -1;\n this.render();\n }\n\n updatePagingStatusFromView(pagingInfo: { pageSize: number, pageNum: number, totalPages: number }) {\n this._pagingActive = (pagingInfo.pageSize !== 0);\n this._pagingIsLastPage = (pagingInfo.pageNum == pagingInfo.totalPages - 1);\n }\n\n private updateRowCount(): void {\n if (!this._initialized) {\n return;\n }\n\n var dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\n var scrollCanvas = this._layout.getScrollCanvasY();\n var oldH = Math.round(parsePx(getComputedStyle(scrollCanvas).height));\n\n var numberOfRows;\n const frozenRows = this._layout.getFrozenRows();\n if (frozenRows) {\n numberOfRows = this.getDataLength() - frozenRows;\n } else {\n numberOfRows = dataLengthIncludingAddNew + (this._options.leaveSpaceForNewRows ? this._viewportInfo.numVisibleRows - 1 : 0);\n }\n\n var tempViewportH = Math.round(parsePx(getComputedStyle(this._layout.getScrollContainerY()).height));\n const vpi = this._viewportInfo;\n var oldViewportHasVScroll = vpi.hasVScroll;\n // with autoHeight, we do not need to accommodate the vertical scroll bar\n vpi.hasVScroll = !this._options.autoHeight && (numberOfRows * this._options.rowHeight > tempViewportH);\n\n this.makeActiveCellNormal();\n\n // remove the rows that are now outside of the data range\n // this helps avoid redundant calls to .removeRow() when the size of the data decreased by thousands of rows\n var l = dataLengthIncludingAddNew - 1;\n for (var x in this._rowsCache) {\n var i = parseInt(x, 10);\n if (i >= l) {\n this.removeRowFromCache(i);\n }\n }\n\n this.startPostProcessingCleanup();\n\n vpi.virtualHeight = Math.max(this._options.rowHeight * numberOfRows, tempViewportH - this._scrollDims.height);\n\n if (this._activeCellNode && this._activeRow > l) {\n this.resetActiveCell();\n }\n\n if (vpi.virtualHeight < getMaxSupportedCssHeight()) {\n // just one page\n vpi.realScrollHeight = this._pageHeight = vpi.virtualHeight;\n this._numberOfPages = 1;\n this._jumpinessCoefficient = 0;\n } else {\n // break into pages\n vpi.realScrollHeight = getMaxSupportedCssHeight();\n this._pageHeight = vpi.realScrollHeight / 100;\n this._numberOfPages = Math.floor(vpi.virtualHeight / this._pageHeight);\n this._jumpinessCoefficient = (vpi.virtualHeight - vpi.realScrollHeight) / (this._numberOfPages - 1);\n }\n\n if (vpi.realScrollHeight !== oldH) {\n this._layout.realScrollHeightChange();\n this._scrollTop = this._layout.getScrollContainerY().scrollTop;\n }\n\n var oldScrollTopInRange = (this._scrollTop + this._pageOffset <= vpi.virtualHeight - tempViewportH);\n\n if (vpi.virtualHeight == 0 || this._scrollTop == 0) {\n this._page = this._pageOffset = 0;\n } else if (oldScrollTopInRange) {\n // maintain virtual position\n this.scrollTo(this._scrollTop + this._pageOffset);\n } else {\n // scroll to bottom\n this.scrollTo(vpi.virtualHeight - tempViewportH);\n }\n\n if (vpi.realScrollHeight != oldH && this._options.autoHeight) {\n this.resizeCanvas();\n }\n\n if (this._options.forceFitColumns && oldViewportHasVScroll != vpi.hasVScroll) {\n this.autosizeColumns();\n }\n this.updateCanvasWidth(false);\n }\n\n /**\n * @param viewportTop optional viewport top\n * @param viewportLeft optional viewport left\n * @returns viewport range\n */\n getViewport(viewportTop?: number, viewportLeft?: number): ViewRange {\n return this.getVisibleRange(viewportTop, viewportLeft);\n }\n\n getVisibleRange(viewportTop?: number, viewportLeft?: number): ViewRange {\n if (viewportTop == null) {\n viewportTop = this._scrollTop;\n }\n if (viewportLeft == null) {\n viewportLeft = this._scrollLeft;\n }\n if (this._options.rtl) {\n viewportLeft = Math.abs(viewportLeft);\n }\n return {\n top: this.getRowFromPosition(viewportTop),\n bottom: this.getRowFromPosition(viewportTop + this._viewportInfo.height) + 1,\n leftPx: viewportLeft,\n rightPx: viewportLeft + this._viewportInfo.width\n };\n }\n\n getRenderedRange(viewportTop?: number, viewportLeft?: number): ViewRange {\n var range = this.getVisibleRange(viewportTop, viewportLeft);\n var buffer = Math.round(this._viewportInfo.height / this._options.rowHeight);\n var minBuffer = this._options.minBuffer || 3;\n\n if (this._vScrollDir == -1) {\n range.top -= buffer;\n range.bottom += minBuffer;\n } else if (this._vScrollDir == 1) {\n range.top -= minBuffer;\n range.bottom += buffer;\n } else {\n range.top -= minBuffer;\n range.bottom += minBuffer;\n }\n\n range.top = Math.max(0, range.top);\n range.bottom = Math.min(this.getDataLengthIncludingAddNew() - 1, range.bottom);\n\n if (this._options.renderAllCells) {\n range.leftPx = 0;\n range.rightPx = this._layout.getCanvasWidth();\n }\n else {\n range.leftPx -= this._viewportInfo.width;\n range.rightPx += this._viewportInfo.width;\n\n range.leftPx = Math.max(0, range.leftPx);\n range.rightPx = Math.min(this._layout.getCanvasWidth(), range.rightPx);\n }\n\n return range;\n }\n\n private ensureCellNodesInRowsCache(row: number): void {\n var cacheEntry = this._rowsCache[row];\n if (cacheEntry) {\n if (cacheEntry.cellRenderQueue.length) {\n var lastChild = cacheEntry.rowNodeR?.lastElementChild ?? cacheEntry.rowNodeL?.lastElementChild;\n while (lastChild && cacheEntry.cellRenderQueue.length) {\n var columnIdx = cacheEntry.cellRenderQueue.pop();\n var element = cacheEntry.cellRenderContent.pop();\n\n cacheEntry.cellNodesByColumnIdx[columnIdx] = lastChild as HTMLElement;\n if (element instanceof Node)\n lastChild.appendChild(element);\n lastChild = lastChild.previousElementSibling;\n\n if (lastChild == null)\n lastChild = cacheEntry.rowNodeL?.lastElementChild;\n }\n }\n }\n }\n\n private cleanUpCells(rangeToKeep: ViewRange, row: number): void {\n // Ignore frozen rows\n if (this._layout.isFrozenRow(row))\n return;\n\n var cacheEntry = this._rowsCache[row];\n\n // Remove cells outside the range.\n var cellsToRemove = [], frozenCols = this._layout.getFrozenCols();\n for (var x in cacheEntry.cellNodesByColumnIdx) {\n\n var i = parseInt(x, 10);\n\n // Ignore frozen columns\n if (i < frozenCols) {\n continue;\n }\n\n var colspan = cacheEntry.cellColSpans[i], cols = this._cols;\n if (this._colLeft[i] > rangeToKeep.rightPx || this._colRight[Math.min(cols.length - 1, i + colspan - 1)] < rangeToKeep.leftPx) {\n if (!(row == this._activeRow && i === this._activeCell)) {\n cellsToRemove.push(i);\n }\n }\n }\n\n var cellToRemove, node;\n this._postProcessGroupId++;\n while ((cellToRemove = cellsToRemove.pop()) != null) {\n node = cacheEntry.cellNodesByColumnIdx[cellToRemove];\n\n if (this._postCleanupActive && this._postProcessedRows[row] && this._postProcessedRows[row][cellToRemove]) {\n this.queuePostProcessedCellForCleanup(node, cellToRemove, row);\n } else {\n this._removeNode(node);\n }\n\n delete cacheEntry.cellColSpans[cellToRemove];\n delete cacheEntry.cellNodesByColumnIdx[cellToRemove];\n if (this._postProcessedRows[row]) {\n delete this._postProcessedRows[row][cellToRemove];\n }\n }\n }\n\n private cleanUpAndRenderCells(range: ViewRange) {\n var cacheEntry;\n var stringArray: string[] = [];\n var processedRows = [];\n var cellsAdded;\n var colspan;\n var cols = this._cols;\n var cellContents: Element[] = [];\n\n for (var row = range.top, btm = range.bottom; row <= btm; row++) {\n cacheEntry = this._rowsCache[row];\n if (!cacheEntry) {\n continue;\n }\n\n // cellRenderQueue populated in renderRows() needs to be cleared first\n this.ensureCellNodesInRowsCache(row);\n\n this.cleanUpCells(range, row);\n\n // Render missing cells.\n cellsAdded = 0;\n\n var itemMetadata = this._data.getItemMetadata && this._data.getItemMetadata(row) as ItemMetadata;\n var colsMetadata = itemMetadata && itemMetadata.columns;\n\n var d = this.getDataItem(row);\n\n // TODO: shorten this loop (index? heuristics? binary search?)\n for (var i = 0, ii = cols.length; i < ii; i++) {\n // Cells to the right are outside the range.\n if (this._colLeft[i] > range.rightPx) {\n break;\n }\n\n // Already rendered.\n if ((colspan = cacheEntry.cellColSpans[i]) != null) {\n i += (colspan > 1 ? colspan - 1 : 0);\n continue;\n }\n\n var columnData: ColumnMetadata = null;\n colspan = 1;\n if (colsMetadata) {\n columnData = colsMetadata[cols[i].id] || colsMetadata[i];\n colspan = (columnData && columnData.colspan) || 1;\n if (colspan === \"*\") {\n colspan = ii - i;\n }\n }\n\n if (this._colRight[Math.min(ii - 1, i + colspan - 1)] > range.leftPx) {\n this.appendCellHtml(stringArray, row, i, colspan, d, columnData);\n cellsAdded++;\n }\n\n i += (colspan > 1 ? colspan - 1 : 0);\n }\n\n if (cellsAdded) {\n processedRows.push(row);\n }\n }\n\n if (!stringArray.length) {\n return;\n }\n\n var x = document.createElement(\"div\");\n x.innerHTML = stringArray.join(\"\");\n\n var processedRow;\n var node: HTMLElement, frozenCols = this._layout.getFrozenCols();\n while ((processedRow = processedRows.pop()) != null) {\n cacheEntry = this._rowsCache[processedRow];\n var columnIdx;\n while ((columnIdx = cacheEntry.cellRenderQueue.pop()) != null) {\n var element = cacheEntry.cellRenderContent.pop();\n node = x.lastElementChild as HTMLElement;\n if (element instanceof Node)\n node.appendChild(element);\n\n if (frozenCols > 0 && columnIdx >= frozenCols) {\n cacheEntry.rowNodeR.appendChild(node);\n } else {\n cacheEntry.rowNodeL.appendChild(node);\n }\n\n cacheEntry.cellNodesByColumnIdx[columnIdx] = node;\n }\n }\n }\n\n private renderRows(range: ViewRange): void {\n var stringArrayL: string[] = [],\n stringArrayR: string[] = [],\n rows = [],\n needToReselectCell = false,\n dataLength = this.getDataLength();\n\n for (var i = range.top, ii = range.bottom; i <= ii; i++) {\n\n if (this._rowsCache[i] || (this.hasFrozenRows() && this._options.frozenBottom && i == dataLength)) {\n continue;\n }\n\n rows.push(i);\n\n // Create an entry right away so that appendRowHtml() can\n // start populatating it.\n this._rowsCache[i] = {\n rowNodeL: null,\n rowNodeR: null,\n\n // ColSpans of rendered cells (by column idx).\n // Can also be used for checking whether a cell has been rendered.\n cellColSpans: [],\n\n // Cell nodes (by column idx). Lazy-populated by ensureCellNodesInRowsCache().\n cellNodesByColumnIdx: [],\n\n // Column indices of cell nodes that have been rendered, but not yet indexed in\n // cellNodesByColumnIdx. These are in the same order as cell nodes added at the\n // end of the row.\n cellRenderQueue: [],\n\n cellRenderContent: []\n };\n\n this.appendRowHtml(stringArrayL, stringArrayR, i, range, dataLength);\n if (this._activeCellNode && this._activeRow === i) {\n needToReselectCell = true;\n }\n }\n\n if (!rows.length) {\n return;\n }\n\n var l = document.createElement(\"div\"),\n r = document.createElement(\"div\");\n\n l.innerHTML = stringArrayL.join(\"\");\n r.innerHTML = stringArrayR.join(\"\");\n\n\n const layout = this._layout;\n for (var i = 0, ii = rows.length; i < ii; i++) {\n var row = rows[i];\n var cache = this._rowsCache[row];\n cache.rowNodeL = l.firstElementChild as HTMLElement;\n cache.rowNodeR = r.firstElementChild as HTMLElement;\n layout.appendCachedRow(row, cache.rowNodeL, cache.rowNodeR);\n if (cache.cellRenderContent.some(x => x instanceof Node))\n this.ensureCellNodesInRowsCache(row);\n }\n\n if (needToReselectCell) {\n this._activeCellNode = this.getCellNode(this._activeRow, this._activeCell);\n }\n }\n\n private startPostProcessing(): void {\n if (!this._postRenderActive) {\n return;\n }\n\n clearTimeout(this._hPostRender);\n\n if (this._options.asyncPostRenderDelay < 0) {\n this.asyncPostProcessRows();\n } else {\n this._hPostRender = setTimeout(this.asyncPostProcessRows, this._options.asyncPostRenderDelay);\n }\n }\n\n private startPostProcessingCleanup(): void {\n if (!this._postCleanupActive) {\n return;\n }\n\n clearTimeout(this._hPostRenderCleanup);\n\n if (this._options.asyncPostCleanupDelay < 0) {\n this.asyncPostProcessCleanupRows();\n }\n else {\n this._hPostRenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostCleanupDelay);\n }\n }\n\n private invalidatePostProcessingResults(row: number): void {\n if (this._options.enableAsyncPostRenderCleanup) {\n var postProcessed = this._postProcessedRows[row];\n if (postProcessed) {\n // change status of columns to be re-rendered\n for (var columnIdx in postProcessed) {\n postProcessed[columnIdx] = 'C';\n }\n }\n }\n else {\n delete this._postProcessedRows[row];\n }\n\n this._postProcessFromRow = Math.min(this._postProcessFromRow, row);\n this._postProcessToRow = Math.max(this._postProcessToRow, row);\n this.startPostProcessing();\n }\n\n private updateRowPositions(): void {\n for (var row in this._rowsCache) {\n var c = this._rowsCache[row];\n var p = this.getRowTop(parseInt(row, 10)) + \"px\";\n c.rowNodeL && (c.rowNodeL.style.top = p);\n c.rowNodeR && (c.rowNodeR.style.top = p);\n }\n }\n\n private updateGrandTotals(): void {\n if (!this._options.showFooterRow || !this._initialized)\n return;\n\n var totals;\n if (this._data && this._data.getGrandTotals)\n totals = this._data.getGrandTotals();\n totals = totals ?? {};\n\n var cols = this._cols;\n for (var m of cols) {\n if (m.id != void 0) {\n var formatter = m.groupTotalsFormatter ?? this._options.groupTotalsFormatter;\n if (!formatter)\n continue;\n var content = formatter(totals, m, this) ?? '';\n this.getFooterRowColumn(m.id).innerHTML = content;\n }\n }\n }\n\n // for usage as fallback by the groupmetadataitemprovider\n groupTotalsFormatter(p1?: GroupTotals, p2?: Column, grid?: any): string {\n return this._options.groupTotalsFormatter ? this._options.groupTotalsFormatter(p1, p2, grid ?? this) : \"\";\n }\n\n public render = (): void => {\n if (!this._initialized) { return; }\n var visible = this.getVisibleRange();\n var rendered = this.getRenderedRange();\n\n // remove rows no longer in the viewport\n this.cleanupRows(rendered);\n\n // add new rows & missing cells in existing rows\n if (this._scrollLeftRendered != this._scrollLeft) {\n this._layout.beforeCleanupAndRenderCells(rendered);\n this.cleanUpAndRenderCells(rendered);\n }\n\n // render missing rows\n this.renderRows(rendered);\n this._layout.afterRenderRows(rendered);\n\n this._postProcessFromRow = visible.top;\n this._postProcessToRow = Math.min(this.getDataLengthIncludingAddNew() - 1, visible.bottom);\n this.startPostProcessing();\n\n this._scrollTopRendered = this._scrollTop;\n this._scrollLeftRendered = this._scrollLeft;\n this._lastRenderTime = new Date().getTime();\n this._hRender = null;\n }\n\n private handleHeaderRowScroll = (e: IEventData): void => {\n if (this._ignoreScrollUntil >= new Date().getTime())\n return;\n\n var scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (scrollLeft != this._layout.getScrollContainerX().scrollLeft) {\n this._layout.getScrollContainerX().scrollLeft = scrollLeft;\n }\n }\n\n private handleFooterRowScroll = (e: IEventData): void => {\n if (this._ignoreScrollUntil >= new Date().getTime())\n return;\n\n var scrollLeft = (e.target as HTMLElement).scrollLeft;\n if (scrollLeft != this._layout.getScrollContainerX().scrollLeft) {\n this._layout.getScrollContainerX().scrollLeft = scrollLeft;\n }\n }\n\n private handleMouseWheel(e: MouseEvent, delta: number, deltaX: number, deltaY: number): void {\n deltaX = (typeof deltaX == \"undefined\" ? (e as any).originalEvent?.deltaX : deltaX) || 0;\n deltaY = (typeof deltaY == \"undefined\" ? (e as any).originalEvent?.deltaY : deltaY) || 0;\n this._scrollTop = Math.max(0, this._layout.getScrollContainerY().scrollTop - (deltaY * this._options.rowHeight));\n this._scrollLeft = this._layout.getScrollContainerX().scrollLeft + (deltaX * 10);\n this.handleScroll(true);\n }\n\n private handleScroll(isMouseWheel?: boolean) {\n this._scrollTop = this._layout.getScrollContainerY().scrollTop;\n this._scrollLeft = this._layout.getScrollContainerX().scrollLeft;\n\n var vScrollDist = Math.abs(this._scrollTop - this._scrollTopPrev);\n var hScrollDist = Math.abs(this._scrollLeft - this._scrollLeftPrev);\n\n if (hScrollDist || vScrollDist)\n this._ignoreScrollUntil = new Date().getTime() + 100;\n\n if (hScrollDist) {\n this._scrollLeftPrev = this._scrollLeft;\n\n this._layout.getScrollContainerX().scrollLeft = this._scrollLeft;\n\n this._layout.handleScrollH();\n }\n\n const vpi = this._viewportInfo;\n\n if (vScrollDist) {\n this._vScrollDir = this._scrollTopPrev < this._scrollTop ? 1 : -1;\n this._scrollTopPrev = this._scrollTop;\n\n if (isMouseWheel === true) {\n this._layout.getScrollContainerY().scrollTop = this._scrollTop;\n }\n\n this._layout.handleScrollV();\n\n // switch virtual pages if needed\n if (vScrollDist < this._viewportInfo.height) {\n this.scrollTo(this._scrollTop + this._pageOffset);\n } else {\n var oldOffset = this._pageOffset;\n if (vpi.realScrollHeight == vpi.height) {\n this._page = 0;\n } else {\n this._page = Math.min(this._numberOfPages - 1, Math.floor(this._scrollTop * ((vpi.virtualHeight - this._viewportInfo.height) / (vpi.realScrollHeight - this._viewportInfo.height)) * (1 / this._pageHeight)));\n }\n this._pageOffset = Math.round(this._page * this._jumpinessCoefficient);\n if (oldOffset != this._pageOffset) {\n this.invalidateAllRows();\n }\n }\n }\n\n if (hScrollDist || vScrollDist) {\n if (this._hRender) {\n clearTimeout(this._hRender);\n }\n\n if (Math.abs(this._scrollTopRendered - this._scrollTop) > 20 ||\n Math.abs(this._scrollLeftRendered - this._scrollLeft) > 20) {\n if (this._options.forceSyncScrolling ||\n (this._options.forceSyncScrollInterval &&\n (this._lastRenderTime < new Date().getTime() - this._options.forceSyncScrollInterval))) {\n this.render();\n } else {\n this._hRender = setTimeout(this.render, 50);\n }\n\n this.trigger(this.onViewportChanged);\n }\n }\n\n this.trigger(this.onScroll, { scrollLeft: this._scrollLeft, scrollTop: this._scrollTop });\n\n return !!(hScrollDist || vScrollDist);\n }\n\n private asyncPostProcessRows = () => {\n var dataLength = this.getDataLength();\n var cols = this._cols;\n while (this._postProcessFromRow <= this._postProcessToRow) {\n var row = (this._vScrollDir >= 0) ? this._postProcessFromRow++ : this._postProcessToRow--;\n var cacheEntry = this._rowsCache[row];\n if (!cacheEntry || row >= dataLength) {\n continue;\n }\n\n if (!this._postProcessedRows[row]) {\n this._postProcessedRows[row] = {};\n }\n\n this.ensureCellNodesInRowsCache(row);\n for (var x in cacheEntry.cellNodesByColumnIdx) {\n var columnIdx = parseInt(x, 10);\n\n var m = cols[columnIdx];\n var processedStatus = this._postProcessedRows[row][columnIdx]; // C=cleanup and re-render, R=render\n if (processedStatus !== 'R') {\n if (m.asyncPostRender || m.asyncPostRenderCleanup) {\n var node = cacheEntry.cellNodesByColumnIdx[columnIdx];\n if (node) {\n m.asyncPostRender && m.asyncPostRender(node, row, this.getDataItem(row), m, processedStatus === 'C');\n }\n }\n this._postProcessedRows[row][columnIdx] = 'R';\n }\n }\n\n if (this._options.asyncPostRenderDelay >= 0) {\n this._hPostRender = setTimeout(this.asyncPostProcessRows, this._options.asyncPostRenderDelay);\n return;\n }\n }\n }\n\n private asyncPostProcessCleanupRows(): void {\n var cols = this._cols;\n while (this._postProcessCleanupQueue?.length > 0) {\n var groupId = this._postProcessCleanupQueue[0].groupId;\n\n // loop through all queue members with this groupID\n while (this._postProcessCleanupQueue.length > 0 && this._postProcessCleanupQueue[0].groupId == groupId) {\n var entry = this._postProcessCleanupQueue.shift();\n entry.rowNodeL && entry.rowNodeL.remove();\n entry.rowNodeR && entry.rowNodeR.remove();\n if (entry.cellNode != null) {\n var column = cols[entry.columnIdx];\n if (column && column.asyncPostRenderCleanup) {\n column.asyncPostRenderCleanup(entry.cellNode, entry.rowIdx, column);\n this._removeNode(entry.cellNode);\n }\n }\n }\n\n // call this function again after the specified delay\n if (this._options.asyncPostRenderDelay >= 0) {\n this._hPostRenderCleanup = setTimeout(this.asyncPostProcessCleanupRows.bind(this), this._options.asyncPostCleanupDelay);\n return;\n }\n }\n }\n\n private updateCellCssStylesOnRenderedRows(addedHash: CellStylesHash, removedHash: CellStylesHash) {\n var node, columnId, addedRowHash, removedRowHash;\n for (var row in this._rowsCache) {\n removedRowHash = removedHash && removedHash[row];\n addedRowHash = addedHash && addedHash[row];\n\n if (removedRowHash) {\n for (columnId in removedRowHash) {\n if (!addedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\n node = this.getCellNode(parseInt(row, 10), this.getColumnIndex(columnId));\n if (node) {\n const r = removedRowHash[columnId];\n removeClass(node, r);\n }\n }\n }\n }\n\n if (addedRowHash) {\n for (columnId in addedRowHash) {\n if (!removedRowHash || removedRowHash[columnId] != addedRowHash[columnId]) {\n node = this.getCellNode(parseInt(row, 10), this.getColumnIndex(columnId));\n if (node) {\n const a = addedRowHash[columnId];\n addClass(node, a);\n }\n }\n }\n }\n }\n }\n\n addCellCssStyles(key: string, hash: CellStylesHash): void {\n if (this._cellCssClasses[key]) {\n throw \"addCellCssStyles: cell CSS hash with key '\" + key + \"' already exists.\";\n }\n\n this._cellCssClasses[key] = hash;\n this.updateCellCssStylesOnRenderedRows(hash, null);\n\n this.trigger(this.onCellCssStylesChanged, { key: key, hash: hash });\n }\n\n removeCellCssStyles(key: string): void {\n if (!this._cellCssClasses[key]) {\n return;\n }\n\n this.updateCellCssStylesOnRenderedRows(null, this._cellCssClasses[key]);\n delete this._cellCssClasses[key];\n\n this.trigger(this.onCellCssStylesChanged, { key: key, hash: null });\n }\n\n setCellCssStyles(key: string, hash: CellStylesHash): void {\n var prevHash = this._cellCssClasses[key];\n\n this._cellCssClasses[key] = hash;\n this.updateCellCssStylesOnRenderedRows(hash, prevHash);\n\n this.trigger(this.onCellCssStylesChanged, { key: key, hash: hash });\n }\n\n getCellCssStyles(key: string): CellStylesHash {\n return this._cellCssClasses[key];\n }\n\n flashCell(row: number, cell: number, speed?: number): void {\n speed = speed || 100;\n if (this._rowsCache[row]) {\n var cellEl = this._jQuery(this.getCellNode(row, cell));\n toggleCellClass(4);\n }\n\n var klass = this._options.cellFlashingCssClass;\n\n function toggleCellClass(times: number) {\n if (!times) {\n return;\n }\n setTimeout(function () {\n cellEl.queue(function () {\n cellEl.toggleClass(klass).dequeue();\n toggleCellClass(times - 1);\n });\n }, speed);\n }\n }\n\n //////////////////////////////////////////////////////////////////////////////////////////////\n // Interactivity\n\n private handleDragInit(e: UIEvent, dd: any): boolean {\n var cell = this.getCellFromEvent(e);\n if (!cell || !this.cellExists(cell.row, cell.cell)) {\n return false;\n }\n\n var retval = this.trigger(this.onDragInit, dd, e);\n if ((e as IEventData).isImmediatePropagationStopped && (e as IEventData).isImmediatePropagationStopped()) {\n return retval;\n }\n\n // if nobody claims to be handling drag'n'drop by stopping immediate propagation,\n // cancel out of it\n return false;\n }\n\n private handleDragStart(e: UIEvent, dd: any): boolean {\n var cell = this.getCellFromEvent(e);\n if (!cell || !this.cellExists(cell.row, cell.cell)) {\n return false;\n }\n\n var retval = this.trigger(this.onDragStart, dd, e);\n if ((e as IEventData).isImmediatePropagationStopped && (e as IEventData).isImmediatePropagationStopped()) {\n return retval;\n }\n\n return false;\n }\n\n private handleDrag(e: UIEvent, dd: any): any {\n return this.trigger(this.onDrag, dd, e);\n }\n\n private handleDragEnd(e: UIEvent, dd: any): void {\n this.trigger(this.onDragEnd, dd, e);\n }\n\n private handleKeyDown(e: KeyboardEvent): void {\n this.trigger(this.onKeyDown, { row: this._activeRow, cell: this._activeCell }, e);\n var handled = (e as IEventData).isImmediatePropagationStopped && (e as IEventData).isImmediatePropagationStopped();\n\n if (!handled) {\n if (!e.shiftKey && !e.altKey) {\n if (this._options.editable && this._currentEditor && this._currentEditor.keyCaptureList) {\n if (this._currentEditor.keyCaptureList.indexOf(e.which) >= 0) {\n return;\n }\n }\n\n if (e.key === \"Home\") {\n if (e.ctrlKey) {\n this.navigateTop();\n handled = true;\n }\n else\n handled = this.navigateRowStart();\n }\n else if (e.key === \"End\") {\n if (e.ctrlKey) {\n this.navigateBottom();\n handled = true;\n }\n else\n handled = this.navigateRowEnd();\n }\n }\n }\n\n if (!handled) {\n if (!e.shiftKey && !e.altKey && !e.ctrlKey) {\n\n if (this._options.editable && this._currentEditor && this._currentEditor.keyCaptureList) {\n if (this._currentEditor.keyCaptureList.indexOf(e.which) >= 0) {\n return;\n }\n }\n\n if (e.key === \"Esc\" || e.key === \"Escape\") {\n if (!this.getEditorLock().isActive()) {\n return; // no editing mode to cancel, allow bubbling and default processing (exit without cancelling the event)\n }\n this.cancelEditAndSetFocus();\n } else if (e.key === \"PageDown\") {\n this.navigatePageDown();\n handled = true;\n } else if (e.key === \"PageUp\") {\n this.navigatePageUp();\n handled = true;\n } else if (e.key === \"Left\" || e.key === \"ArrowLeft\") {\n handled = this.navigateLeft();\n } else if (e.key === \"Right\" || e.key === \"ArrowRight\") {\n handled = this.navigateRight();\n } else if (e.key === \"Up\" || e.key === \"ArrowUp\") {\n handled = this.navigateUp();\n } else if (e.key === \"Down\" || e.key === \"ArrowDown\") {\n handled = this.navigateDown();\n } else if (e.key === \"Tab\") {\n if (this._options.enableTabKeyNavigation)\n handled = this.navigateNext();\n } else if (e.key === \"Enter\") {\n if (this._options.editable) {\n if (this._currentEditor) {\n // adding new row\n if (this._activeRow === this.getDataLength()) {\n this.navigateDown();\n } else {\n this.commitEditAndSetFocus();\n }\n } else {\n if (this.getEditorLock().commitCurrentEdit()) {\n this.makeActiveCellEditable();\n }\n }\n }\n handled = true;\n }\n } else if (e.key === \"Tab\" && e.shiftKey && !e.ctrlKey && !e.altKey) {\n handled = this.navigatePrev();\n }\n }\n\n if (handled) {\n // the event has been handled so don't let parent element (bubbling/propagation) or browser (default) handle it\n e.stopPropagation();\n e.preventDefault();\n try {\n ((e as IEventData).originalEvent as any).keyCode = 0; // prevent default behaviour for special keys in IE browsers (F3, F5, etc.)\n }\n // ignore exceptions - setting the original event's keycode throws access denied exception for \"Ctrl\"\n // (hitting control key only, nothing else), \"Shift\" (maybe others)\n catch (error) {\n }\n }\n }\n\n private handleClick(e: MouseEvent): void {\n if (!this._currentEditor) {\n // if this click resulted in some cell child node getting focus,\n // don't steal it back - keyboard events will still bubble up\n // IE9+ seems to default DIVs to tabIndex=0 instead of -1, so check for cell clicks directly.\n if (e.target != document.activeElement || (e.target as HTMLElement)?.classList?.contains?.(\"slick-cell\")) {\n this.setFocus();\n }\n }\n\n var cell = this.getCellFromEvent(e as any);\n if (!cell || (this._currentEditor != null && this._activeRow == cell.row && this._activeCell == cell.cell)) {\n return;\n }\n\n this.trigger(this.onClick, { row: cell.row, cell: cell.cell }, e);\n if ((e as IEventData).isImmediatePropagationStopped && (e as IEventData).isImmediatePropagationStopped()) {\n return;\n }\n\n if (this.canCellBeActive(cell.row, cell.cell)) {\n if (!this.getEditorLock().isActive() || this.getEditorLock().commitCurrentEdit()) {\n\n var preClickModeOn = (e.target && (e.target as HTMLElement).classList.contains(preClickClassName));\n var column = this._cols[cell.cell];\n var suppressActiveCellChangedEvent = !!(this._options.editable && column && column.editor && this._options.suppressActiveCellChangeOnEdit);\n this.setActiveCellInternal(this.getCellNode(cell.row, cell.cell), null, preClickModeOn, suppressActiveCellChangedEvent, e);\n }\n }\n }\n\n private handleContextMenu(e: MouseEvent): void {\n var cellEl = (e.target as HTMLElement).closest(\".slick-cell\");\n if (!cellEl) {\n return;\n }\n\n // are we editing this cell?\n if (this._activeCellNode === cellEl && this._currentEditor != null) {\n return;\n }\n\n this.trigger(this.onContextMenu, {}, e);\n }\n\n private handleDblClick(e: MouseEvent): void {\n var cell = this.getCellFromEvent(e as any);\n if (!cell || (this._currentEditor != null && this._activeRow == cell.row && this._activeCell == cell.cell)) {\n return;\n }\n\n this.trigger(this.onDblClick, { row: cell.row, cell: cell.cell }, e);\n if ((e as IEventData).isImmediatePropagationStopped && (e as IEventData).isImmediatePropagationStopped()) {\n return;\n }\n\n if (this._options.editable) {\n this.gotoCell(cell.row, cell.cell, true);\n }\n }\n\n private handleHeaderMouseEnter(e: MouseEvent): void {\n const column = this.getColumnFromNode(e.target as HTMLElement)\n column && this.trigger(this.onHeaderMouseEnter, { column }, e);\n }\n\n private handleHeaderMouseLeave(e: MouseEvent): void {\n const column = this.getColumnFromNode(e.target as HTMLElement)\n column && this.trigger(this.onHeaderMouseLeave, { column }, e);\n }\n\n private handleHeaderContextMenu(e: any): void {\n var header = e.target.closest(\".slick-header-column\");\n var column = this.getColumnFromNode(header);\n column && this.trigger(this.onHeaderContextMenu, { column }, e);\n }\n\n private handleHeaderClick(e: any): void {\n var header = e.target.closest(\".slick-header-column\");\n var column = this.getColumnFromNode(header);\n column && this.trigger(this.onHeaderClick, { column: column }, e);\n }\n\n private handleMouseEnter(e: MouseEvent): void {\n this.trigger(this.onMouseEnter, {}, e);\n }\n\n private handleMouseLeave(e: MouseEvent): void {\n this.trigger(this.onMouseLeave, {}, e);\n }\n\n private cellExists(row: number, cell: number): boolean {\n return !(row < 0 || row >= this.getDataLength() || cell < 0 || cell >= this._cols.length);\n }\n\n getCellFromPoint(x: number, y: number): { row: number; cell: number; } {\n var row = this.getRowFromPosition(y);\n var cell = 0;\n var cols = this._cols;\n var w = 0;\n for (var i = 0; i < cols.length && w < x; i++) {\n w += cols[i].width;\n cell++;\n }\n\n if (cell < 0) {\n cell = 0;\n }\n\n return { row: row, cell: cell - 1 };\n }\n\n getCellFromNode(cellNode: Element): number {\n if (cellNode == null)\n return null;\n\n var c = (cellNode as HTMLElement).dataset.c;\n if (c != null)\n return parseInt(c, 10);\n\n // read column number from .l CSS class\n var cls = /\\sl(\\d+)\\s/.exec(' ' + cellNode.className + ' ');\n if (!cls) {\n return null;\n }\n return parseInt(cls[1], 10);\n }\n\n getColumnFromNode(cellNode: Element): Column {\n if (cellNode == null)\n return null;\n\n var cell = this.getCellFromNode(cellNode);\n if (cell === null && this._jQuery)\n return this._jQuery(cell).data(\"column\") as Column;\n\n return this._cols[cell];\n }\n\n getRowFromNode(rowNode: Element): number {\n if (rowNode != null) {\n for (var row in this._rowsCache) {\n var c = this._rowsCache[row];\n if (c.rowNodeL === rowNode || c.rowNodeR === rowNode)\n return parseInt(row, 10);\n }\n }\n return null;\n }\n\n getCellFromEvent(e: any): { row: number; cell: number; } {\n var row, cell;\n var cellEl = (e.target as HTMLElement).closest(\".slick-cell\") as HTMLElement;\n if (!cellEl) {\n return null;\n }\n\n row = this._layout.getRowFromCellNode(cellEl, e.clientX, e.clientY);\n cell = this.getCellFromNode(cellEl);\n\n if (row == null || cell == null) {\n return null;\n } else {\n return {\n \"row\": row,\n \"cell\": cell\n };\n }\n }\n\n getCellNodeBox(row: number, cell: number): { top: number; right: number; bottom: number; left: number; } {\n if (!this.cellExists(row, cell)) {\n return null;\n }\n\n var rowOffset = this._layout.getFrozenRowOffset(row);\n var cols = this._cols, frozenCols = this._layout.getFrozenCols();\n var y1 = this.getRowTop(row) - rowOffset;\n var y2 = y1 + this._options.rowHeight - 1;\n var x1 = 0;\n for (var i = 0; i < cell; i++) {\n x1 += cols[i].width;\n if (i == frozenCols - 1) {\n x1 = 0;\n }\n }\n var x2 = x1 + cols[cell].width;\n\n return this._options.rtl ? {\n top: y1,\n right: x1,\n bottom: y2,\n left: x2\n } : {\n top: y1,\n left: x1,\n bottom: y2,\n right: x2\n }\n }\n\n //////////////////////////////////////////////////////////////////////////////////////////////\n // Cell switching\n\n resetActiveCell(): void {\n this.setActiveCellInternal(null, false);\n }\n\n focus(): void {\n this.setFocus();\n }\n\n private setFocus(): void {\n if (this._tabbingDirection == -1) {\n this._focusSink1.focus();\n } else {\n this._focusSink2.focus();\n }\n }\n\n scrollCellIntoView(row: number, cell: number, doPaging?: boolean): void {\n this.scrollRowIntoView(row, doPaging);\n\n if (cell < this._layout.getFrozenCols())\n return;\n\n var colspan = this.getColspan(row, cell);\n this.internalScrollColumnIntoView(this._colLeft[cell], this._colRight[cell + (colspan > 1 ? colspan - 1 : 0)]);\n }\n\n scrollColumnIntoView(cell: number): void {\n this.internalScrollColumnIntoView(this._colLeft[cell], this._colRight[cell]);\n }\n\n private internalScrollColumnIntoView(left: number, right: number): void {\n\n var scrollRight = this._scrollLeft + parsePx(getComputedStyle(this._layout.getScrollContainerX()).width) -\n (this._viewportInfo.hasVScroll ? this._scrollDims.width : 0);\n\n var target;\n if (left < this._scrollLeft)\n target = left;\n else if (right > scrollRight)\n target = Math.min(left, right - this._layout.getScrollContainerX().clientWidth);\n else\n return;\n\n this._layout.getScrollContainerX().scrollLeft = target;\n this.handleScroll();\n this.render();\n }\n\n private setActiveCellInternal(newCell: HTMLElement, opt_editMode?: boolean, preClickModeOn?: boolean, suppressActiveCellChangedEvent?: boolean, e?: any): void {\n if (this._activeCellNode != null) {\n this.makeActiveCellNormal();\n this._activeCellNode.classList.remove(\"active\");\n var c = this._rowsCache[this._activeRow];\n if (c) {\n c.rowNodeL && c.rowNodeL.classList.remove(\"active\");\n c.rowNodeR && c.rowNodeR.classList.remove(\"active\");\n }\n }\n\n this._activeCellNode = newCell;\n\n if (this._activeCellNode != null) {\n var bcl = this._activeCellNode.getBoundingClientRect();\n\n var rowOffset = Math.floor(this._activeCellNode.closest('.grid-canvas')?.getBoundingClientRect().top ?? 0 + document.body.scrollTop);\n var isBottom = this._activeCellNode.closest('.grid-canvas-bottom') != null;\n if (this.hasFrozenRows() && isBottom) {\n rowOffset -= (this._options.frozenBottom)\n ? Math.round(parsePx(getComputedStyle(this._layout.getCanvasNodeFor(0, 0)).height))\n : this._layout.getFrozenRows() * this._options.rowHeight;\n }\n\n var cell = this.getCellFromPoint(bcl[this._options.rtl ? 'right' : 'left'] + document.body.scrollLeft, Math.ceil(bcl.top + document.body.scrollTop) - rowOffset);\n\n this._activeRow = cell.row;\n this._activeCell = this._activePosX = this.getCellFromNode(this._activeCellNode);\n\n if (this._options.showCellSelection) {\n this._activeCellNode.classList.add(\"active\");\n var c = this._rowsCache[this._activeRow];\n if (c) {\n c.rowNodeL && c.rowNodeL.classList.add(\"active\");\n c.rowNodeR && c.rowNodeR.classList.add(\"active\");\n }\n }\n\n if (opt_editMode == null) {\n opt_editMode = (this._activeRow == this.getDataLength()) || this._options.autoEdit;\n }\n\n if (this._options.editable && opt_editMode && this.isCellPotentiallyEditable(this._activeRow, this._activeCell)) {\n clearTimeout(this._hEditorLoader);\n\n if (this._options.asyncEditorLoading) {\n this._hEditorLoader = setTimeout(() => {\n this.makeActiveCellEditable(undefined, preClickModeOn, e);\n }, this._options.asyncEditorLoadDelay);\n } else {\n this.makeActiveCellEditable(undefined, preClickModeOn, e);\n }\n }\n } else {\n this._activeRow = this._activeCell = null;\n }\n\n if (!suppressActiveCellChangedEvent) {\n this.trigger(this.onActiveCellChanged, this.getActiveCell() as ArgsCell);\n }\n }\n\n clearTextSelection(): void {\n if ((document as any).selection && (document as any).selection.empty) {\n try {\n //IE fails here if selected element is not in dom\n (document as any).selection.empty();\n } catch (e) { }\n } else if (window.getSelection) {\n var sel = window.getSelection();\n if (sel && sel.removeAllRanges) {\n sel.removeAllRanges();\n }\n }\n }\n\n private isCellPotentiallyEditable(row: number, cell: number): boolean {\n var dataLength = this.getDataLength();\n // is the data for this row loaded?\n if (row < dataLength && !this.getDataItem(row)) {\n return false;\n }\n\n // are we in the Add New row? can we create new from this cell?\n if (this._cols[cell].cannotTriggerInsert && row >= dataLength) {\n return false;\n }\n\n // does this cell have an editor?\n if (!this.getEditor(row, cell)) {\n return false;\n }\n\n return true;\n }\n\n private makeActiveCellNormal(): void {\n if (!this._currentEditor) {\n return;\n }\n this.trigger(this.onBeforeCellEditorDestroy, { editor: this._currentEditor });\n this._currentEditor.destroy();\n this._currentEditor = null;\n\n if (this._activeCellNode) {\n this._activeCellNode.classList.remove(\"editable\", \"invalid\");\n this.updateCellWithFormatter(this._activeCellNode, this._activeRow, this._activeCell);\n this.invalidatePostProcessingResults(this._activeRow);\n }\n\n // if there previously was text selected on a page (such as selected text in the edit cell just removed),\n // IE can't set focus to anything else correctly\n if (navigator.userAgent.toLowerCase().match(/msie/)) {\n this.clearTextSelection();\n }\n\n this.getEditorLock().deactivate(this._editController);\n }\n\n editActiveCell(editor?: EditorClass): void {\n this.makeActiveCellEditable(editor);\n }\n\n private makeActiveCellEditable(editor?: EditorClass, preClickModeOn?: boolean, e?: any): void {\n if (!this._activeCellNode) {\n return;\n }\n if (!this._options.editable) {\n throw \"Grid : makeActiveCellEditable : should never get called when options.editable is false\";\n }\n\n // cancel pending async call if there is one\n clearTimeout(this._hEditorLoader);\n\n if (!this.isCellPotentiallyEditable(this._activeRow, this._activeCell)) {\n return;\n }\n\n var columnDef = this._cols[this._activeCell];\n var item = this.getDataItem(this._activeRow);\n\n if (this.trigger(this.onBeforeEditCell, { row: this._activeRow, cell: this._activeCell, item: item, column: columnDef }) === false) {\n this.setFocus();\n return;\n }\n\n this.getEditorLock().activate(this._editController);\n this._activeCellNode.classList.add(\"editable\");\n\n var useEditor = editor || this.getEditor(this._activeRow, this._activeCell);\n\n // don't clear the cell if a custom editor is passed through\n if (!editor && !useEditor.suppressClearOnEdit) {\n this._activeCellNode.innerHTML = \"\";\n }\n\n var itemMetadata = this._data.getItemMetadata && this._data.getItemMetadata(this._activeRow) as ItemMetadata;\n var colsMetadata = itemMetadata && itemMetadata.columns;\n var columnMetadata = colsMetadata && (colsMetadata[columnDef.id] || colsMetadata[this._activeCell]);\n\n this._currentEditor = new useEditor({\n grid: this,\n gridPosition: absBox(this._container),\n position: absBox(this._activeCellNode),\n container: this._activeCellNode,\n column: columnDef,\n columnMetaData: columnMetadata,\n item: item || {},\n event: e,\n editorCellNavOnLRKeys: this._options.editorCellNavOnLRKeys,\n commitChanges: this.commitEditAndSetFocus.bind(this),\n cancelChanges: this.cancelEditAndSetFocus.bind(this)\n });\n\n if (item) {\n this._currentEditor.loadValue(item);\n if (preClickModeOn && this._currentEditor.preClick) {\n this._currentEditor.preClick();\n }\n }\n\n this._serializedEditorValue = this._currentEditor.serializeValue();\n\n if (this._currentEditor.position) {\n this.handleActiveCellPositionChange();\n }\n }\n\n private commitEditAndSetFocus(): void {\n // if the commit fails, it would do so due to a validation error\n // if so, do not steal the focus from the editor\n if (this.getEditorLock().commitCurrentEdit()) {\n this.setFocus();\n if (this._options.autoEdit) {\n this.navigateDown();\n }\n }\n }\n\n private cancelEditAndSetFocus(): void {\n if (this.getEditorLock().cancelCurrentEdit()) {\n this.setFocus();\n }\n }\n\n private getActiveCellPosition(): Position {\n return absBox(this._activeCellNode);\n }\n\n getGridPosition(): Position {\n return absBox(this._container);\n }\n\n private handleActiveCellPositionChange = (): void => {\n if (!this._activeCellNode) {\n return;\n }\n\n this.trigger(this.onActiveCellPositionChanged, {});\n\n if (this._currentEditor) {\n var cellBox = this.getActiveCellPosition();\n if (this._currentEditor.show && this._currentEditor.hide) {\n if (!cellBox.visible) {\n this._currentEditor.hide();\n } else {\n this._currentEditor.show();\n }\n }\n\n if (this._currentEditor.position) {\n this._currentEditor.position(cellBox);\n }\n }\n }\n\n getCellEditor(): Editor {\n return this._currentEditor;\n }\n\n getActiveCell(): RowCell {\n if (!this._activeCellNode) {\n return null;\n } else {\n return { row: this._activeRow, cell: this._activeCell };\n }\n }\n\n getActiveCellNode(): HTMLElement {\n return this._activeCellNode;\n }\n\n scrollActiveCellIntoView(): void {\n if (this._activeRow != null && this._activeCell != null) {\n this.scrollCellIntoView(this._activeRow, this._activeCell);\n }\n }\n\n scrollRowIntoView(row: number, doPaging?: boolean): void {\n\n if (!this._layout.isFrozenRow(row)) {\n\n var viewportScrollH = Math.round(parsePx(getComputedStyle(this._layout.getScrollContainerY()).height));\n\n var rowNumber = (this.hasFrozenRows() && !this._options.frozenBottom ? row - this._layout.getFrozenRows() + 1 : row);\n\n // if frozen row on top subtract number of frozen row\n var rowAtTop = rowNumber * this._options.rowHeight;\n var rowAtBottom = (rowNumber + 1) * this._options.rowHeight\n - viewportScrollH\n + (this._viewportInfo.hasHScroll ? this._scrollDims.height : 0);\n\n // need to page down?\n if ((rowNumber + 1) * this._options.rowHeight > this._scrollTop + viewportScrollH + this._pageOffset) {\n this.scrollTo(doPaging ? rowAtTop : rowAtBottom);\n this.render();\n }\n // or page up?\n else if (rowNumber * this._options.rowHeight < this._scrollTop + this._pageOffset) {\n this.scrollTo(doPaging ? rowAtBottom : rowAtTop);\n this.render();\n }\n }\n }\n\n scrollRowToTop(row: number): void {\n this.scrollTo(row * this._options.rowHeight);\n this.render();\n }\n\n private scrollPage(dir: number): void {\n var deltaRows = dir * this._viewportInfo.numVisibleRows;\n this.scrollTo((this.getRowFromPosition(this._scrollTop) + deltaRows) * this._options.rowHeight);\n this.render();\n\n if (this._options.enableCellNavigation && this._activeRow != null) {\n var row = this._activeRow + deltaRows;\n var dataLengthIncludingAddNew = this.getDataLengthIncludingAddNew();\n if (row >= dataLengthIncludingAddNew) {\n row = dataLengthIncludingAddNew - 1;\n }\n if (row < 0) {\n row = 0;\n }\n\n var cell = 0, prevCell = null;\n var prevActivePosX = this._activePosX;\n while (cell <= this._activePosX) {\n if (this.canCellBeActive(row, cell)) {\n prevCell = cell;\n }\n cell += this.getColspan(row, cell);\n }\n\n if (prevCell != null) {\n this.setActiveCellInternal(this.getCellNode(row, prevCell));\n this._activePosX = prevActivePosX;\n } else {\n this.resetActiveCell();\n }\n }\n }\n\n navigatePageDown(): void {\n this.scrollPage(1);\n }\n\n navigatePageUp(): void {\n this.scrollPage(-1);\n }\n\n navigateTop(): void {\n this.navigateToRow(0);\n }\n\n navigateBottom(): void {\n this.navigateToRow(this.getDataLength() - 1);\n }\n\n navigateToRow(row: number) {\n var dataLength = this.getDataLength();\n if (!dataLength) {\n return true;\n }\n\n if (row < 0)\n row = 0;\n else if (row >= dataLength)\n row = dataLength - 1;\n\n this.scrollCellIntoView(row, 0, true);\n\n if (this._options.enableCellNavigation && this._activeRow != null) {\n var cell = 0, prevCell = null;\n var prevActivePosX = this._activePosX;\n while (cell <= this._activePosX) {\n if (this.canCellBeActive(row, cell))\n prevCell = cell;\n cell += this.getColspan(row, cell);\n }\n\n if (prevCell != null) {\n this.setActiveCellInternal(this.getCellNode(row, prevCell));\n this._activePosX = prevActivePosX;\n }\n else\n this.resetActiveCell();\n }\n\n return true;\n }\n\n getColspan(row: number, cell: number): number {\n var itemMetadata = this._data.getItemMetadata && this._data.getItemMetadata(row) as ItemMetadata;\n if (!itemMetadata || !itemMetadata.columns) {\n return 1;\n }\n\n var cols = this._cols;\n var columnData = cols[cell] && (itemMetadata.columns[cols[cell].id] || itemMetadata.columns[cell]);\n var colspan = (columnData && columnData.colspan);\n if (colspan === \"*\") {\n colspan = cols.length - cell;\n } else {\n colspan = colspan || 1;\n }\n\n return colspan;\n }\n\n navigateRight(): boolean {\n return this.navigate(\"right\");\n }\n\n navigateLeft(): boolean {\n return this.navigate(\"left\");\n }\n\n navigateDown(): boolean {\n return this.navigate(\"down\");\n }\n\n navigateUp(): boolean {\n return this.navigate(\"up\");\n }\n\n navigateNext(): boolean {\n return this.navigate(\"next\");\n }\n\n navigatePrev(): boolean {\n return this.navigate(\"prev\");\n }\n\n navigateRowStart(): boolean {\n return this.navigate(\"home\");\n }\n\n navigateRowEnd(): boolean {\n return this.navigate(\"end\");\n }\n\n /**\n * @param {string} dir Navigation direction.\n * @return {boolean} Whether navigation resulted in a change of active cell.\n */\n navigate(dir: string): boolean {\n if (!this._options.enableCellNavigation) {\n return false;\n }\n\n if (!this._activeCellNode && dir != \"prev\" && dir != \"next\") {\n return false;\n }\n\n if (!this.getEditorLock().commitCurrentEdit()) {\n return true;\n }\n\n this.setFocus();\n\n if (!this._cellNavigator) {\n this._cellNavigator = new CellNavigator({\n getColumnCount: () => this._cols.length,\n getRowCount: () => this.getDataLengthIncludingAddNew(),\n getColspan: this.getColspan.bind(this),\n canCellBeActive: this.canCellBeActive.bind(this),\n setTabbingDirection: dir => this._tabbingDirection = dir,\n isRTL: () => this._options.rtl\n });\n }\n\n var pos = this._cellNavigator.navigate(dir, this._activeRow, this._activeCell, this._activePosX);\n if (pos) {\n if (this.hasFrozenRows() && this._options.frozenBottom && pos.row == this.getDataLength()) {\n return;\n }\n\n var isAddNewRow = (pos.row == this.getDataLength());\n\n if (!this._layout.isFrozenRow(pos.row)) {\n this.scrollCellIntoView(pos.row, pos.cell, !isAddNewRow);\n }\n\n this.setActiveCellInternal(this.getCellNode(pos.row, pos.cell))\n this._activePosX = pos.posX;\n return true;\n } else {\n this.setActiveCellInternal(this.getCellNode(this._activeRow, this._activeCell));\n return false;\n }\n }\n\n getCellNode(row: number, cell: number): HTMLElement {\n if (this._rowsCache[row]) {\n this.ensureCellNodesInRowsCache(row);\n return this._rowsCache[row].cellNodesByColumnIdx[cell];\n }\n return null;\n }\n\n setActiveCell(row: number, cell: number) {\n if (!this._initialized) { return; }\n var cols = this._cols;\n if (row > this.getDataLength() || row < 0 || cell >= cols.length || cell < 0) {\n return;\n }\n\n if (!this._options.enableCellNavigation) {\n return;\n }\n\n this.scrollCellIntoView(row, cell, false);\n this.setActiveCellInternal(this.getCellNode(row, cell), false);\n }\n\n setActiveRow(row: number, cell: number, suppressScrollIntoView?: boolean) {\n if (!this._initialized)\n return;\n\n if (row > this.getDataLength() || row < 0 || cell >= this._cols.length || cell < 0)\n return;\n\n this._activeRow = row;\n if (!suppressScrollIntoView)\n this.scrollCellIntoView(row, cell || 0, false);\n }\n\n canCellBeActive(row: number, cell: number): boolean {\n var cols = this._cols;\n if (!this._options.enableCellNavigation || row >= this.getDataLengthIncludingAddNew() ||\n row < 0 || cell >= cols.length || cell < 0) {\n return false;\n }\n\n var rowMetadata = this._data.getItemMetadata && this._data.getItemMetadata(row);\n if (rowMetadata && typeof rowMetadata.focusable === \"boolean\") {\n return rowMetadata.focusable;\n }\n\n var colsMetadata = rowMetadata && rowMetadata.columns;\n if (colsMetadata && cols[cell] && colsMetadata[cols[cell].id] && typeof colsMetadata[cols[cell].id].focusable === \"boolean\") {\n return colsMetadata[cols[cell].id].focusable;\n }\n if (colsMetadata && colsMetadata[cell] && typeof colsMetadata[cell].focusable === \"boolean\") {\n return colsMetadata[cell].focusable;\n }\n\n return cols[cell].focusable;\n }\n\n canCellBeSelected(row: number, cell: number) {\n var cols = this._cols;\n if (row >= this.getDataLength() || row < 0 || cell >= cols.length || cell < 0) {\n return false;\n }\n\n var itemMetadata = this._data.getItemMetadata && this._data.getItemMetadata(row);\n if (itemMetadata && typeof itemMetadata.selectable === \"boolean\") {\n return itemMetadata.selectable;\n }\n\n var columnMetadata = itemMetadata && itemMetadata.columns && (itemMetadata.columns[cols[cell].id] || itemMetadata.columns[cell]);\n if (columnMetadata && typeof columnMetadata.selectable === \"boolean\") {\n return columnMetadata.selectable;\n }\n\n return cols[cell].selectable;\n }\n\n gotoCell(row: number, cell: number, forceEdit?: boolean) {\n if (!this._initialized) { return; }\n if (!this.canCellBeActive(row, cell)) {\n return;\n }\n\n if (!this.getEditorLock().commitCurrentEdit()) {\n return;\n }\n\n this.scrollCellIntoView(row, cell, false);\n\n var newCell = this.getCellNode(row, cell);\n\n // if selecting the 'add new' row, start editing right away\n this.setActiveCellInternal(newCell, forceEdit || (row === this.getDataLength()) || this._options.autoEdit);\n\n // if no editor was created, set the focus back on the grid\n if (!this._currentEditor) {\n this.setFocus();\n }\n }\n\n //////////////////////////////////////////////////////////////////////////////////////////////\n // IEditor implementation for the editor lock\n\n commitCurrentEdit(): boolean {\n var item = this.getDataItem(this._activeRow);\n var column = this._cols[this._activeCell];\n var self = this;\n\n if (this._currentEditor) {\n if (this._currentEditor.isValueChanged()) {\n var validationResults = this._currentEditor.validate();\n\n if (validationResults.valid) {\n if (this._activeRow < this.getDataLength()) {\n var editCommand: EditCommand = {\n row: this._activeRow,\n cell: self._activeCell,\n editor: this._currentEditor,\n serializedValue: this._currentEditor.serializeValue(),\n prevSerializedValue: this._serializedEditorValue,\n execute: function () {\n this.editor.applyValue(item, this.serializedValue);\n self.updateRow(this.row);\n self.trigger(self.onCellChange, {\n row: this.activeRow,\n cell: self._activeCell,\n item: item\n });\n },\n undo: function () {\n this.editor.applyValue(item, this.prevSerializedValue);\n self.updateRow(this.row);\n self.trigger(self.onCellChange, {\n row: this.activeRow,\n cell: self._activeCell,\n item: item\n });\n }\n };\n\n if (this._options.editCommandHandler) {\n this.makeActiveCellNormal();\n this._options.editCommandHandler(item, column, editCommand);\n } else {\n editCommand.execute();\n this.makeActiveCellNormal();\n }\n\n } else {\n var newItem = {} as TItem;\n this._currentEditor.applyValue(newItem, this._currentEditor.serializeValue());\n this.makeActiveCellNormal();\n this.trigger(this.onAddNewRow, { item: newItem, column: column });\n }\n\n // check whether the lock has been re-acquired by event handlers\n return !this.getEditorLock().isActive();\n } else {\n // Re-add the CSS class to trigger transitions, if any.\n this._activeCellNode.classList.remove(\"invalid\");\n this._activeCellNode.offsetWidth; // force layout\n this._activeCellNode.classList.add(\"invalid\");\n\n this.trigger(this.onValidationError, {\n editor: this._currentEditor,\n cellNode: this._activeCellNode,\n validationResults: validationResults,\n row: this._activeRow,\n cell: this._activeCell,\n column: column\n });\n\n this._currentEditor.focus();\n return false;\n }\n }\n\n this.makeActiveCellNormal();\n }\n return true;\n }\n\n private cancelCurrentEdit() {\n this.makeActiveCellNormal();\n return true;\n }\n\n private rowsToRanges(rows: number[]): Range[] {\n var ranges = [];\n var lastCell = this._cols.length - 1;\n for (var i = 0; i < rows.length; i++) {\n ranges.push(new Range(rows[i], 0, rows[i], lastCell));\n }\n return ranges;\n }\n\n getSelectedRows(): number[] {\n if (!this._selectionModel) {\n throw \"Selection model is not set\";\n }\n return this._selectedRows;\n }\n\n setSelectedRows(rows: number[]) {\n if (!this._selectionModel) {\n throw \"Selection model is not set\";\n }\n this._selectionModel.setSelectedRanges(this.rowsToRanges(rows));\n }\n}\n\n", "import { Column, disableSelection, H, parsePx, spacerDiv } from \"../core\";\nimport { GridOptions, LayoutEngine, LayoutHost, ViewRange } from \"../grid\";\n\nexport const FrozenLayout: { new(): LayoutEngine } = function(): LayoutEngine {\n var canvasWidth: number;\n var canvasWidthL: number;\n var canvasWidthR: number;\n var frozenBottom: boolean;\n var frozenRowIdx: number;\n var frozenCols: number;\n var frozenRows: number;\n var headersWidthL: number;\n var headersWidthR: number;\n var viewportTopH: number;\n\n var canvasBottomL: HTMLDivElement;\n var canvasBottomR: HTMLDivElement;\n var canvasTopL: HTMLDivElement;\n var canvasTopR: HTMLDivElement;\n var headerColsL: HTMLDivElement;\n var headerColsR: HTMLDivElement;\n var headerRowColsL: HTMLDivElement;\n var headerRowColsR: HTMLDivElement;\n var headerRowSpacerL: HTMLDivElement;\n var headerRowSpacerR: HTMLDivElement;\n var footerRowColsL: HTMLDivElement;\n var footerRowColsR: HTMLDivElement;\n var footerRowSpacerL: HTMLDivElement;\n var footerRowSpacerR: HTMLDivElement;\n var paneBottomL: HTMLDivElement;\n var paneBottomR: HTMLDivElement;\n var paneHeaderL: HTMLDivElement;\n var paneHeaderR: HTMLDivElement;\n var paneTopL: HTMLDivElement;\n var paneTopR: HTMLDivElement;\n var scrollContainerX: HTMLDivElement;\n var scrollContainerY: HTMLDivElement;\n var topPanelL: HTMLDivElement;\n var topPanelR: HTMLDivElement;\n var viewportBottomL: HTMLDivElement;\n var viewportBottomR: HTMLDivElement;\n var viewportTopL: HTMLDivElement;\n var viewportTopR: HTMLDivElement;\n\n function appendCachedRow(row: number, rowNodeL: HTMLDivElement, rowNodeR: HTMLDivElement): void {\n var bottom = frozenRows && row >= frozenRowIdx + (frozenBottom ? 0 : 1);\n if (bottom) {\n rowNodeL && canvasBottomL.appendChild(rowNodeL);\n frozenCols && rowNodeR && canvasBottomR.appendChild(rowNodeR);\n }\n else {\n rowNodeL && canvasTopL.appendChild(rowNodeL);\n frozenCols && rowNodeR && canvasTopR.appendChild(rowNodeR);\n }\n }\n\n const calcCanvasWidth = () => {\n var cols = host.getColumns(), i = cols.length;\n\n canvasWidthL = canvasWidthR = 0;\n\n while (i--) {\n if (frozenCols > 0 && i >= frozenCols) {\n canvasWidthR += cols[i].width;\n } else {\n canvasWidthL += cols[i].width;\n }\n }\n\n var totalRowWidth = canvasWidthL + canvasWidthR;\n return host.getOptions().fullWidthRows ? Math.max(totalRowWidth, host.getAvailableWidth()) : totalRowWidth;\n }\n\n var host: LayoutHost;\n\n function init(hostGrid: LayoutHost) {\n host = hostGrid;\n const spacerW = calcCanvasWidth() + host.getScrollDims().width + 'px';\n const options = host.getOptions();\n const uisd = options.useLegacyUI ? ' ui-state-default' : '';\n\n // -- PANE HEADER LEFT\n headerColsL = H('div', { class: 'slick-header-columns slick-header-columns-left', style: (options.rtl ? \"right\" : \"left\") + ':-1000px' });\n paneHeaderL = H('div', { class: \"slick-pane slick-pane-header slick-pane-left\", tabIndex: '0' },\n H('div', { class: 'slick-header slick-header-left' + uisd, style: !options.showColumnHeader && 'display: none' }, headerColsL));\n\n // -- PANE HEADER RIGHT\n headerColsR = H('div', { class: 'slick-header-columns slick-header-columns-right', style: (options.rtl ? \"right\" : \"left\") + ':-1000px' });\n paneHeaderR = H('div', { class: \"slick-pane slick-pane-header slick-pane-right\", tabIndex: '0' },\n H('div', { class: 'slick-header slick-header-right' + uisd, style: !options.showColumnHeader && 'display: none' }, headerColsR));\n\n // -- PANE TOP LEFT (headerrow left + top panel left + viewport top left + footer row right)\n headerRowColsL = H('div', { class: 'slick-headerrow-columns slick-headerrow-columns-left' });\n headerRowSpacerL = spacerDiv(spacerW);\n var headerRowL = H('div', { class: 'slick-headerrow' + uisd, style: !options.showHeaderRow && 'display: none' }, headerRowColsL, headerRowSpacerL);\n\n topPanelL = H('div', { class: 'slick-top-panel', style: 'width: 10000px' })\n var topPanelLS = H('div', { class: 'slick-top-panel-scroller' + uisd, style: !options.showTopPanel && 'display: none' }, topPanelL);\n\n canvasTopL = H('div', { class: \"grid-canvas grid-canvas-top grid-canvas-left\", tabIndex: \"0\", hideFocus: '' });\n viewportTopL = H('div', { class: \"slick-viewport slick-viewport-top slick-viewport-left\", tabIndex: \"0\", hideFocus: '' }, canvasTopL);\n\n footerRowColsL = H('div', { class: 'slick-footerrow-columns slick-footerrow-columns-left' });\n footerRowSpacerL = spacerDiv(spacerW);\n var footerRowL = H('div', { class: 'slick-footerrow' + uisd, style: !options.showFooterRow && 'display: none' }, footerRowColsL, footerRowSpacerL);\n\n paneTopL = H('div', { class: \"slick-pane slick-pane-top slick-pane-left\", tabIndex: \"0\" }, headerRowL, topPanelLS, viewportTopL, footerRowL);\n\n // -- PANE TOP RIGHT (headerrow right + top panel right + viewport top right + footer row right)\n headerRowColsR = H('div', { class: 'slick-headerrow-columns slick-headerrow-columns-right' });\n headerRowSpacerR = spacerDiv(spacerW);\n var headerRowR = H('div', { class: 'slick-headerrow' + uisd, style: !options.showHeaderRow && 'display: none' }, headerRowColsR, headerRowSpacerR);\n\n topPanelR = H('div', { class: 'slick-top-panel', style: 'width: 10000px' });\n var topPanelRS = H('div', { class: 'slick-top-panel-scroller' + uisd, style: !options.showTopPanel && 'display: none' }, topPanelR);\n\n canvasTopR = H('div', { class: \"grid-canvas grid-canvas-top grid-canvas-right\", tabIndex: \"0\", hideFocus: '' })\n viewportTopR = H('div', { class: \"slick-viewport slick-viewport-top slick-viewport-right\", tabIndex: \"0\", hideFocus: '' }, canvasTopR);\n\n footerRowColsR = H('div', { class: 'slick-footerrow-columns slick-footerrow-columns-right' });\n footerRowSpacerR = H('div', { style: 'display:block;height:1px;position:absolute;top:0;left:0;', width: spacerW });\n var footerRowR = H('div', { class: 'slick-footer-row' + uisd, style: !options.showFooterRow && 'display: none' }, footerRowColsR, footerRowSpacerR);\n\n paneTopR = H('div', { class: \"slick-pane slick-pane-top slick-pane-right\", tabIndex: \"0\" }, headerRowR, topPanelRS, viewportTopR, footerRowR);\n\n // -- PANE BOTTOM LEFT\n canvasBottomL = H('div', { class: \"grid-canvas grid-canvas-bottom grid-canvas-left\", tabIndex: \"0\", hideFocus: '' });\n viewportBottomL = H('div', { class: \"slick-viewport slick-viewport-bottom slick-viewport-left\", tabIndex: \"0\", hideFocus: '' }, canvasBottomL);\n paneBottomL = H('div', { class: \"slick-pane slick-pane-bottom slick-pane-left\", tabIndex: \"0\" }, viewportBottomL);\n\n canvasBottomR = H('div', { class: \"grid-canvas grid-canvas-bottom grid-canvas-right\", tabIndex: \"0\", hideFocus: '' });\n viewportBottomR = H('div', { class: \"slick-viewport slick-viewport-bottom slick-viewport-right\", tabIndex: \"0\", hideFocus: '' });\n paneBottomR = H('div', { class: \"slick-pane slick-pane-bottom slick-pane-right\", tabIndex: \"0\" }, viewportBottomR);\n\n host.getContainerNode().append(\n paneHeaderL,\n paneHeaderR,\n paneTopL,\n paneTopR,\n paneBottomL,\n paneBottomR);\n\n // disable all text selection in header (including input and textarea)\n disableSelection(headerColsL);\n disableSelection(headerColsR);\n\n adjustFrozenRowOption();\n }\n\n function getHeaderCols() {\n return [headerColsL, headerColsR];\n }\n\n function getHeaderRowCols() {\n return [headerRowColsL, headerRowColsR];\n }\n\n function getFooterRowCols() {\n return [footerRowColsL, footerRowColsR];\n }\n\n const getCanvasNodeFor = (cell: number, row: number) => {\n if (row == null && cell == null)\n return canvasTopL;\n\n var rightSide = cell >= frozenCols;\n\n if (frozenRows > 0 && (row >= frozenRowIdx + (frozenBottom ? 0 : 1)))\n return rightSide ? canvasBottomR : canvasBottomL;\n\n return rightSide ? canvasTopR : canvasTopL;\n }\n\n function getCanvasWidth() {\n return canvasWidth;\n }\n\n function getCanvasNodes() {\n return [canvasTopL, canvasTopR, canvasBottomL, canvasBottomR];\n }\n\n function getScrollContainerX() {\n return scrollContainerX;\n }\n\n function getScrollContainerY() {\n return scrollContainerY;\n }\n\n function getViewportNodeFor(cell: number, row: number) {\n if (row == null && cell == null)\n return canvasTopL;\n\n var rightSide = cell >= frozenCols;\n\n if (frozenRows > 0 && (row >= frozenRowIdx + (frozenBottom ? 0 : 1)))\n return rightSide ? canvasBottomR : canvasBottomL;\n\n return rightSide ? canvasTopR : canvasTopL;\n }\n\n function getViewportNodes() {\n return [viewportTopL, viewportTopR, viewportBottomL, viewportBottomR];\n }\n\n const updateCanvasWidth = () => {\n var oldCanvasWidth = canvasWidth;\n var oldCanvasWidthL = canvasWidthL;\n var oldCanvasWidthR = canvasWidthR;\n var widthChanged;\n canvasWidth = calcCanvasWidth();\n var scrollWidth = host.getScrollDims().width;\n\n widthChanged = canvasWidth !== oldCanvasWidth || canvasWidthL !== oldCanvasWidthL || canvasWidthR !== oldCanvasWidthR;\n var vpi = host.getViewportInfo();\n\n if (widthChanged || frozenCols || frozenRows) {\n var cwlPX = canvasWidthL + 'px'\n var cwrPX = canvasWidthR + 'px';\n\n canvasTopL.style.width = cwlPX;\n\n calcHeaderWidths();\n\n if (frozenCols) {\n var vpminusPX = (vpi.width - canvasWidthL) + 'px';\n const rtl = host.getOptions().rtl;\n\n canvasTopR.style.width = cwrPX;\n paneHeaderL.style.width = cwlPX;\n paneHeaderR.style[rtl ? \"right\" : \"left\"] = cwlPX;\n paneHeaderR.style.width = vpminusPX;\n\n paneTopL.style.width = cwlPX;\n paneTopR.style[rtl ? \"right\" : \"left\"] = cwlPX;\n paneTopR.style.width = vpminusPX;\n\n headerRowColsL.style.width = cwlPX;\n headerRowColsL.parentElement.style.width = cwlPX;\n headerRowColsR.style.width = cwrPX;\n headerRowColsR.parentElement.style.width = vpminusPX;\n\n footerRowColsL.style.width = cwlPX;\n footerRowColsL.parentElement.style.width = cwlPX;\n footerRowColsR.style.width = cwrPX;\n footerRowColsR.parentElement.style.width = vpminusPX;\n\n viewportTopL.style.width = cwlPX;\n viewportTopR.style.width = vpminusPX;\n\n if (frozenRows) {\n paneBottomL.style.width = cwlPX;\n paneBottomR.style[rtl ? \"right\" : \"left\"] = cwlPX;\n\n viewportBottomL.style.width = cwlPX;\n viewportBottomR.style.width = vpminusPX;\n\n canvasBottomL.style.width = cwlPX;\n canvasBottomR.style.width = cwrPX;\n }\n } else {\n paneHeaderL.style.width = '100%';\n paneTopL.style.width = '100%';\n headerRowColsL.parentElement.style.width = '100%';\n headerRowColsL.style.width = canvasWidth + 'px';\n footerRowColsL.parentElement.style.width = '100%';\n footerRowColsL.style.width = canvasWidth + 'px';\n viewportTopL.style.width = '100%';\n\n if (frozenRows) {\n viewportBottomL.style.width = '100%';\n canvasBottomL.style.width = cwlPX;\n }\n }\n\n vpi.hasHScroll = (canvasWidth > vpi.width - scrollWidth);\n }\n\n var w = (canvasWidth + (vpi.hasHScroll ? scrollWidth : 0)) + 'px';\n\n headerRowSpacerL.style.width = w;\n headerRowSpacerR.style.width = w;\n footerRowSpacerL.style.width = w;\n footerRowSpacerR.style.width = w;\n\n return widthChanged;\n }\n\n const getHeaderColumn = (cell: number) => {\n return (frozenCols > 0 && cell >= frozenCols ?\n headerColsR.children.item(cell - frozenCols) : headerColsL.children.item(cell)) as HTMLDivElement;\n }\n\n const getHeaderRowColumn = (cell: number) => {\n var target: HTMLDivElement;\n\n if (frozenCols <= 0 || cell < frozenCols) {\n target = headerRowColsL;\n }\n else {\n target = headerRowColsR;\n cell -= frozenCols;\n }\n\n return target.childNodes.item(cell) as HTMLDivElement;\n }\n\n const getFooterRowColumn = (cell: number) => {\n var target: HTMLDivElement;\n\n if (frozenCols <= 0 || cell < frozenCols) {\n target = footerRowColsL;\n }\n else {\n target = footerRowColsR;\n cell -= frozenCols;\n }\n\n return target.childNodes.item(cell) as HTMLDivElement;\n }\n\n const getHeaderRowColsFor = (cell: number) => {\n return frozenCols > 0 && cell >= frozenCols ? headerRowColsR : headerRowColsL;\n }\n\n const getFooterRowColsFor = (cell: number) => {\n return frozenCols > 0 && cell >= frozenCols ? footerRowColsR : footerRowColsL;\n }\n\n const calcHeaderWidths = () => {\n headersWidthL = headersWidthR = 0;\n\n var scrollWidth = host.getScrollDims().width;\n var cols = host.getColumns();\n for (var i = 0, ii = cols.length; i < ii; i++) {\n var width = cols[i].width;\n\n if (frozenCols > 0 && i >= frozenCols) {\n headersWidthR += width;\n } else {\n headersWidthL += width;\n }\n }\n\n const vs = host.getViewportInfo();\n\n if (frozenCols > 0) {\n headersWidthL = headersWidthL + 1000;\n headersWidthR = Math.max(headersWidthR, vs.width) + headersWidthL;\n headersWidthR += scrollWidth;\n } else {\n headersWidthL += scrollWidth;\n headersWidthL = Math.max(headersWidthL, vs.width) + 1000;\n }\n\n headerColsL.style.width = headersWidthL + 'px';\n headerColsR.style.width = headersWidthR + 'px';\n }\n\n const getHeaderColsFor = (cell: number) => {\n return frozenCols > 0 && cell >= frozenCols ? headerColsR : headerColsL;\n }\n\n const handleScrollH = () => {\n const options = host.getOptions();\n const scrollLeft = host.getScrollLeft();\n if (frozenCols) {\n options.showColumnHeader && (headerColsR.parentElement.scrollLeft = scrollLeft);\n options.showTopPanel && (topPanelR.parentElement.scrollLeft = scrollLeft);\n options.showHeaderRow && (headerRowColsR.parentElement.scrollLeft = scrollLeft);\n options.showFooterRow && (footerRowColsR.parentElement.scrollLeft = scrollLeft);\n if (frozenRows) {\n viewportTopR.scrollLeft = scrollLeft;\n }\n } else {\n options.showColumnHeader && (headerColsL.parentElement.scrollLeft = scrollLeft);\n options.showTopPanel && (topPanelL.parentElement.scrollLeft = scrollLeft);\n options.showHeaderRow && (headerRowColsL.parentElement.scrollLeft = scrollLeft);\n options.showFooterRow && (footerRowColsL.parentElement.scrollLeft = scrollLeft);\n if (frozenRows) {\n viewportTopL.scrollLeft = scrollLeft;\n }\n }\n }\n\n const handleScrollV = () => {\n if (frozenCols) {\n if (frozenRows && !frozenBottom) {\n viewportBottomL.scrollTop = host.getScrollTop();\n } else {\n viewportTopL.scrollTop = host.getScrollTop();\n }\n }\n }\n\n const setScroller = () => {\n if (frozenCols) {\n if (frozenRows) {\n if (frozenBottom) {\n scrollContainerX = viewportBottomR;\n scrollContainerY = viewportTopR;\n } else {\n scrollContainerX = scrollContainerY = viewportBottomR;\n }\n } else {\n scrollContainerX = scrollContainerY = viewportTopR;\n }\n } else {\n if (frozenRows) {\n if (frozenBottom) {\n scrollContainerX = viewportBottomL;\n scrollContainerY = viewportTopL;\n } else {\n scrollContainerX = scrollContainerY = viewportBottomL;\n }\n } else {\n scrollContainerX = scrollContainerY = viewportTopL;\n }\n }\n }\n\n const setPaneVisibility = () => {\n paneHeaderR.style.display = paneTopR.style.display = frozenCols ? '' : 'none';\n paneBottomL.style.display = frozenRows ? '' : 'none';\n paneBottomR.style.display = frozenRows && frozenCols ? '' : 'none';\n }\n\n const setOverflow = () => {\n const options = host.getOptions();\n var alwaysHS = options.alwaysAllowHorizontalScroll;\n var alwaysVS = options.alwaysShowVerticalScroll;\n\n viewportTopL.style.overflowX = viewportTopR.style.overflowX = (frozenRows && !alwaysHS) ? 'hidden' : (frozenCols ? 'scroll' : 'auto');\n viewportTopL.style.overflowY = viewportBottomL.style.overflowY = (!frozenCols && alwaysVS) ? 'scroll' :\n (frozenCols ? 'hidden' : (frozenRows ? 'scroll' : (options.autoHeight ? 'hidden' : 'auto')));\n viewportTopR.style.overflowY = (alwaysVS || frozenRows) ? 'scroll' : (options.autoHeight ? 'hidden' : 'auto');\n viewportBottomL.style.overflowX = viewportBottomR.style.overflowX = (frozenCols && !alwaysHS) ? 'scroll' : 'auto';\n viewportBottomR.style.overflowY = (alwaysVS) ? 'scroll' : 'auto';\n }\n\n const bindAncestorScrollEvents = () => {\n var elem: HTMLElement = (frozenRows && !frozenBottom) ? canvasBottomL : canvasTopL;\n while ((elem = elem.parentNode as HTMLElement) != document.body && elem != null) {\n // bind to scroll containers only\n if (elem == viewportTopL || elem.scrollWidth != elem.clientWidth || elem.scrollHeight != elem.clientHeight) {\n host.bindAncestorScroll(elem);\n }\n }\n }\n\n const afterHeaderColumnDrag = () => {\n const oldCanvasWidthL = canvasWidthL;\n canvasWidth = calcCanvasWidth();\n if (frozenCols && canvasWidthL != oldCanvasWidthL) {\n headerColsL.style.width = canvasWidthL + 1000 + 'px';\n paneHeaderR.style[host.getOptions().rtl ? 'right' : 'left'] = canvasWidthL + 'px';\n }\n }\n\n const applyColumnWidths = () => {\n var x = 0, w, rule, cols = host.getColumns(), opts = host.getOptions(), rtl = opts.rtl,\n s = rtl ? 'right' : 'left',\n e = rtl ? 'left' : 'right';\n\n if (opts.useCssVars) {\n var styles = host.getContainerNode().style;\n for (var i = 0; i < cols.length; i++) {\n if (frozenCols == i)\n x = 0;\n w = cols[i].width;\n var prop = \"--l\" + i;\n var oldVal = styles.getPropertyValue(prop);\n var newVal = x + \"px\";\n if (oldVal !== newVal) \n styles.setProperty(prop, newVal);\n prop = \"--r\" + i;\n oldVal = styles.getPropertyValue(prop);\n newVal = (((frozenCols > 0 && i >= frozenCols) ? canvasWidthR : canvasWidthL) - x - w) + \"px\"\n if (oldVal !== newVal) \n styles.setProperty(prop, newVal);\n x += w;\n }\n }\n else {\n for (var i = 0; i < cols.length; i++) {\n if (frozenCols == i)\n x = 0;\n w = cols[i].width;\n rule = host.getColumnCssRules(i);\n (rule as any)[s].style[s] = x + \"px\";\n (rule as any)[e].style[e] = (((frozenCols > 0 && i >= frozenCols) ? canvasWidthR : canvasWidthL) - x - w) + \"px\";\n x += w;\n }\n }\n }\n\n const getTopPanelFor = (cell: number) => {\n return frozenCols > 0 && cell >= frozenCols ? topPanelR : topPanelL;\n }\n\n const getTopPanelNodes = () => [topPanelL, topPanelR];\n\n const resizeCanvas = () => {\n var _paneTopH = 0\n var _paneBottomH = 0\n const vs = host.getViewportInfo();\n const options = host.getOptions();\n\n // Account for Frozen Rows\n if (frozenRows) {\n const frozenRowsHeight = frozenRows * options.rowHeight;\n if (frozenBottom) {\n _paneTopH = vs.height - frozenRowsHeight;\n _paneBottomH = frozenRowsHeight + host.getScrollDims().height;\n } else {\n _paneTopH = frozenRowsHeight;\n _paneBottomH = vs.height - frozenRowsHeight;\n }\n } else {\n _paneTopH = vs.height;\n }\n\n // The top pane includes the top panel, the header row and the footer row\n _paneTopH += vs.topPanelHeight + vs.headerRowHeight + vs.footerRowHeight;\n\n // The top viewport does not contain the top panel, the header row or the footer row\n viewportTopH = _paneTopH - vs.topPanelHeight - vs.headerRowHeight - vs.footerRowHeight;\n\n if (options.autoHeight) {\n host.getContainerNode().style.height = (_paneTopH + vs.groupingPanelHeight +\n parsePx(getComputedStyle(headerColsL.parentElement).height)) + 'px';\n }\n\n paneTopL.style.top = (vs.groupingPanelHeight + (parsePx(getComputedStyle(paneHeaderL).height) || vs.headerHeight)) + \"px\";\n paneTopL.style.height = _paneTopH + 'px';\n\n var paneBottomTop = paneTopL.offsetTop + _paneTopH;\n\n if (options.autoHeight) {\n viewportTopL.style.height = '';\n }\n else {\n viewportTopL.style.height = viewportTopH + 'px'\n }\n\n if (frozenCols) {\n paneTopR.style.top = paneTopL.style.top;\n paneTopR.style.height = paneTopL.style.height;\n\n viewportTopR.style.height = viewportTopL.style.height;\n\n if (frozenRows) {\n paneBottomL.style.top = paneBottomR.style.top = paneBottomTop + 'px';\n paneBottomL.style.height = paneBottomR.style.height = viewportBottomR.style.height = _paneBottomH + 'px';\n }\n } else {\n if (frozenRows) {\n paneBottomL.style.width = '100%';\n paneBottomL.style.height = _paneBottomH + 'px';\n paneBottomL.style.top = paneBottomTop + 'px';\n }\n }\n\n if (frozenRows) {\n viewportBottomL.style.height = _paneBottomH + 'px';\n const frozenRowsHeight = frozenRows * options.rowHeight;\n if (frozenBottom) {\n canvasBottomL.style.height = frozenRowsHeight + 'px';\n\n if (frozenCols) {\n canvasBottomR.style.height = frozenRowsHeight + 'px';\n }\n } else {\n canvasTopL.style.height = frozenRowsHeight + 'px';\n\n if (frozenCols) {\n canvasTopR.style.height = frozenRowsHeight + 'px';\n }\n }\n } else {\n viewportTopR.style.height = viewportTopH + 'px';\n }\n }\n\n function reorderViewColumns(viewCols: Column[], options?: GridOptions): Column[] {\n\n options = options || host?.getOptions();\n if (options?.frozenColumns == null) {\n delete options?.frozenColumns;\n }\n else {\n var toFreeze = options.frozenColumns;\n options.frozenColumns = 0;\n var i = 0;\n while (i < viewCols.length) {\n var col = viewCols[i++];\n if (toFreeze > 0 && col.visible !== false) {\n col.frozen = true;\n options.frozenColumns++;\n toFreeze--;\n }\n else if (col.frozen !== undefined)\n delete col.frozen;\n }\n }\n\n var frozenColumns = viewCols.filter(x => x.frozen);\n frozenCols = frozenColumns.length;\n if (frozenCols)\n return frozenColumns.concat(viewCols.filter(x => !x.frozen));\n\n return viewCols;\n }\n\n function afterSetOptions(arg: GridOptions) {\n if (arg.frozenRows != null || arg.frozenBottom != null)\n adjustFrozenRowOption();\n }\n\n function adjustFrozenRowOption(): void {\n const options = host.getOptions();\n if (options.autoHeight) {\n frozenRows = 0;\n return;\n }\n\n frozenRows = (options.frozenRows > 0 && options.frozenRows <= host.getViewportInfo().numVisibleRows) ? options.frozenRows : 0;\n\n if (frozenRows) {\n frozenRowIdx = options.frozenBottom ? (host.getDataLength() - frozenRows) : (frozenRows - 1);\n }\n }\n\n function getScrollCanvasY() {\n return frozenRows && !frozenBottom ? canvasBottomL : canvasTopL;\n }\n\n function realScrollHeightChange() {\n const h = host.getViewportInfo().realScrollHeight;\n if (frozenRows && !frozenBottom) {\n canvasBottomL.style.height = h + 'px';\n\n if (frozenCols) {\n canvasBottomR.style.height = h + 'px';\n }\n } else {\n canvasTopL.style.height = h + 'px'\n canvasTopR.style.height = h + 'px'\n }\n }\n\n function isFrozenRow(row: number) {\n return frozenRows && ((frozenBottom && row >= frozenRowIdx) || (!frozenBottom && row <= frozenRowIdx));\n }\n\n function beforeCleanupAndRenderCells(rendered: ViewRange) {\n if (frozenRows) {\n\n var renderedFrozenRows = Object.assign({}, rendered);\n\n if (frozenBottom) {\n renderedFrozenRows.top = frozenRowIdx;\n renderedFrozenRows.bottom = host.getDataLength() - 1;\n }\n else {\n\n renderedFrozenRows.top = 0;\n renderedFrozenRows.bottom = frozenRowIdx;\n }\n\n host.cleanUpAndRenderCells(renderedFrozenRows);\n }\n }\n\n function afterRenderRows(rendered: ViewRange) {\n // Render frozen rows\n if (frozenRows) {\n if (frozenBottom) {\n host.renderRows({\n top: frozenRowIdx,\n bottom: host.getDataLength() - 1,\n leftPx: rendered.leftPx,\n rightPx: rendered.rightPx\n });\n }\n else {\n host.renderRows({\n top: 0,\n bottom: frozenRowIdx,\n leftPx: rendered.leftPx,\n rightPx: rendered.rightPx\n });\n }\n }\n }\n\n function getRowOffset(row: number): number {\n if (!frozenRows || (frozenBottom && row < frozenRowIdx) || (!frozenBottom && row <= frozenRowIdx))\n return 0;\n\n if (!frozenBottom)\n return frozenRows * host.getOptions().rowHeight;\n\n var realScrollHeight = host.getViewportInfo().realScrollHeight;\n if (realScrollHeight >= viewportTopH)\n return realScrollHeight;\n\n return frozenRowIdx * host.getOptions().rowHeight;\n }\n\n function getRowFromCellNode(cellNode: HTMLElement, clientX: number, clientY: number): number {\n var row = host.getRowFromNode(cellNode.parentNode as HTMLElement);\n\n if (frozenRows) {\n\n var bcr = cellNode.closest('.grid-canvas').getBoundingClientRect();\n\n var rowOffset = 0;\n var isBottom = cellNode.closest('.grid-canvas-bottom') != null;\n\n if (isBottom) {\n rowOffset = frozenBottom ? Math.round(parsePx(getComputedStyle(canvasTopL).height)) : (frozenRows * host.getOptions().rowHeight);\n }\n\n return host.getCellFromPoint(clientX - bcr[host.getOptions().rtl ? 'right' : 'left'] - document.body.scrollLeft, clientY - bcr.top + document.body.scrollTop + rowOffset + document.body.scrollTop).row;\n }\n\n return row;\n }\n\n function getFrozenCols() {\n return frozenCols;\n }\n\n function getFrozenRows() {\n return frozenRows;\n }\n\n function destroy(): void {\n host = null;\n }\n\n return {\n afterHeaderColumnDrag,\n afterRenderRows,\n afterSetOptions,\n appendCachedRow,\n applyColumnWidths,\n bindAncestorScrollEvents,\n beforeCleanupAndRenderCells,\n calcCanvasWidth,\n updateHeadersWidth: calcHeaderWidths,\n isFrozenRow,\n destroy,\n getCanvasNodeFor,\n getCanvasNodes,\n getCanvasWidth,\n getFooterRowCols,\n getFooterRowColsFor,\n getFooterRowColumn,\n getFrozenCols,\n getFrozenRows,\n getHeaderCols,\n getHeaderColsFor,\n getHeaderColumn,\n getHeaderRowCols,\n getHeaderRowColsFor,\n getHeaderRowColumn,\n getRowFromCellNode,\n getFrozenRowOffset: getRowOffset,\n getScrollCanvasY,\n getScrollContainerX,\n getScrollContainerY,\n getTopPanelFor,\n getTopPanelNodes,\n getViewportNodeFor,\n getViewportNodes,\n handleScrollH,\n handleScrollV,\n init,\n layoutName: \"frozen\",\n realScrollHeightChange,\n reorderViewColumns,\n resizeCanvas,\n setPaneVisibility,\n setScroller,\n setOverflow,\n updateCanvasWidth\n }\n} as any;\n", "import { escape, FormatterContext } from \"../core\";\n\nexport function PercentCompleteFormatter(ctx: FormatterContext) {\n if (ctx.value == null || ctx.value === \"\")\n return \"-\";\n if (ctx.value < 50)\n return \"\" + ctx.escape() + \"%\";\n\n return \"\" + escape(ctx.value) + \"%\";\n}\n\nexport function PercentCompleteBarFormatter(ctx: FormatterContext) {\n if (ctx.value == null || ctx.value === \"\")\n return \"\";\n\n var color;\n if (ctx.value < 30)\n color = \"red\";\n else if (ctx.value < 70)\n color = \"silver\";\n else\n color = \"green\";\n\n return \"\";\n}\n\nexport function YesNoFormatter(ctx: FormatterContext) {\n return ctx.value ? 'Yes' : 'No';\n}\n\n\nexport function CheckboxFormatter(ctx: FormatterContext) {\n return ``;\n}\n\nexport function CheckmarkFormatter(ctx: FormatterContext) {\n return ctx.value ? '' : '';\n}\n\n", "import { escape } from \"../core\";\nimport { PercentCompleteFormatter, PercentCompleteBarFormatter, YesNoFormatter, CheckboxFormatter, CheckmarkFormatter } from \"./formatters\";\n\nexport * from \"./formatters\"\n\nexport namespace Formatters {\n export function PercentComplete(_row: number, _cell: number, value: any) {\n return PercentCompleteFormatter({ escape, value });\n }\n\n export function PercentCompleteBar(_row: number, _cell: number, value: any) {\n return PercentCompleteBarFormatter({ escape, value });\n }\n\n export function YesNo(_row: number, _cell: number, value: any) {\n return YesNoFormatter({ escape, value });\n }\n\n export function Checkbox(_row: number, _cell: number, value: any) {\n return CheckboxFormatter({ escape, value });\n }\n\n export function Checkmark(_row: number, _cell: number, value: any) {\n return CheckmarkFormatter({ escape, value });\n }\n}\n\n", "import { Editor, EditorOptions, H, parsePx, Position } from \"../core\";\n\nabstract class BaseEditor {\n protected _input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n protected _defaultValue: any;\n protected _args: EditorOptions;\n\n constructor(args: EditorOptions) {\n this._args = args;\n this.init();\n }\n\n abstract init(): void;\n\n destroy() {\n this._input.remove();\n }\n\n focus() {\n this._input.focus();\n }\n\n getValue() {\n return this._input.value;\n }\n\n setValue(val: string) {\n this._input.value = val ?? '';\n }\n\n loadValue(item: any) {\n this._defaultValue = item[this._args.column.field] ?? \"\";\n this._input.value = this._defaultValue;\n if ((this._input as any).select) {\n (this._input as any).defaultValue = this._defaultValue;\n (this._input as any).select();\n }\n }\n\n serializeValue(): any {\n return this._input.value;\n }\n\n applyValue(item: any, state: any) {\n item[this._args.column.field] = state;\n }\n\n isValueChanged() {\n return (!(this._input.value === \"\" && this._defaultValue == null)) && (this._input.value != this._defaultValue);\n }\n\n validate() {\n if (this._args.column.validator) {\n var validationResults = this._args.column.validator(this._input.value, this._args);\n if (!validationResults.valid) {\n return validationResults;\n }\n }\n\n return {\n valid: true,\n msg: null\n };\n }\n}\n\nexport class TextEditor extends BaseEditor {\n\n declare _input: HTMLInputElement;\n\n init() {\n const input = this._input = this._args.container.appendChild(H(\"input\", { type: \"text\", class: 'editor-text slick-editor-text' }));\n input.addEventListener('keydown', this._args.editorCellNavOnLRKeys ? handleKeydownLRNav : handleKeydownLRNoNav);\n input.focus();\n input.select();\n\n addCompositeChangeListener(this, this._args, input);\n }\n}\n\nexport class IntegerEditor extends TextEditor {\n\n serializeValue() {\n return parseInt(this._input.value, 10) || 0;\n }\n\n validate() {\n if (isNaN(parseInt(this._input.value, 10))) {\n return {\n valid: false,\n msg: \"Please enter a valid integer\"\n };\n }\n\n return super.validate();\n }\n}\n\nexport class FloatEditor extends TextEditor {\n\n static AllowEmptyValue = false;\n static DefaultDecimalPlaces: number = null;\n\n getDecimalPlaces(): number {\n // returns the number of fixed decimal places or null\n var rtn = this._args.column.editorFixedDecimalPlaces;\n if (typeof rtn === 'undefined') {\n rtn = FloatEditor.DefaultDecimalPlaces;\n }\n return (!rtn && rtn !== 0 ? null : rtn);\n }\n\n loadValue(item: any) {\n this._defaultValue = item[this._args.column.field];\n\n var decPlaces = this.getDecimalPlaces();\n if (decPlaces !== null\n && (this._defaultValue || this._defaultValue === 0)\n && (this._defaultValue as any).toFixed) {\n this._defaultValue = (this._defaultValue as any).toFixed(decPlaces);\n }\n\n this._input.value = this._defaultValue;\n this._input.defaultValue = this._defaultValue;\n this._input.select();\n }\n\n serializeValue() {\n var rtn = parseFloat(this._input.value) as any;\n if (FloatEditor.AllowEmptyValue) {\n if (!rtn && rtn !== 0)\n rtn = '';\n } else {\n rtn = rtn || 0;\n }\n\n var decPlaces = this.getDecimalPlaces();\n if (decPlaces !== null\n && (rtn || rtn === 0)\n && rtn.toFixed) {\n rtn = parseFloat(rtn.toFixed(decPlaces));\n }\n\n return rtn;\n }\n\n validate() {\n if (isNaN(parseFloat(this._input.value))) {\n return {\n valid: false,\n msg: \"Please enter a valid number\"\n };\n }\n\n return super.validate();\n }\n}\n\nexport class DateEditor extends TextEditor {\n private _calendarOpen = false;\n\n init() {\n super.init();\n\n // @ts-ignore\n (($ as any)(this._input) as any).datepicker({\n showOn: \"button\",\n buttonText: \"\",\n buttonImage: null,\n buttonImageOnly: false,\n beforeShow: () => {\n this._calendarOpen = true;\n },\n onClose: () => {\n this._calendarOpen = false;\n if (this._args.compositeEditorOptions)\n triggerCompositeEditorChange(this, this._args);\n }\n });\n\n this._input.style.width = (parsePx(getComputedStyle(this._input).width) - (!this._args.compositeEditorOptions ? 18 : 28)) + 'px';\n }\n\n destroy() {\n // @ts-ignore\n ($ as any).datepicker.dpDiv.stop(true, true);\n // @ts-ignore\n (($ as any)(this._input) as any).datepicker(\"hide\").datepicker('destroy')\n super.destroy();\n }\n\n show() {\n if (this._calendarOpen) {\n // @ts-ignore\n ($ as any).datepicker.dpDiv.stop(true, true).show();\n }\n };\n\n hide() {\n if (this._calendarOpen) {\n // @ts-ignore\n ($ as any).datepicker.dpDiv.stop(true, true).hide();\n }\n }\n\n position(position: Position) {\n if (!this._calendarOpen) {\n return;\n }\n // @ts-ignore\n ($ as any).datepicker.dpDiv\n .css(\"top\", position.top + 30)\n .css(\"left\", position.left);\n }\n}\n\nexport class YesNoSelectEditor extends BaseEditor {\n\n declare _input: HTMLSelectElement;\n\n init() {\n this._args.container.appendChild(this._input = H(\"select\", { tabIndex: \"0\", class: \"editor-yesno slick-editor-yesno\" },\n H(\"option\", { value: \"yes\" }, \"Yes\"),\n H(\"option\", { value: \"no\" }, \"No\")));\n\n this._input.focus();\n\n addCompositeChangeListener(this, this._args, this._input);\n }\n\n loadValue(item: any) {\n this._input.value = (this._defaultValue = item[this._args.column.field]) ? \"yes\" : \"no\";\n }\n\n serializeValue() {\n return this._input.value === \"yes\";\n }\n\n isValueChanged() {\n return this._input.value != this._defaultValue;\n }\n\n validate() {\n return {\n valid: true,\n msg: null as string\n }\n }\n}\n\nexport class CheckboxEditor extends BaseEditor {\n\n declare _input: HTMLInputElement;\n\n init() {\n this._input = this._args.container.appendChild(H(\"input\", { type: \"checkbox\", value: \"true\", class: \"editor-checkbox slick-editor-checkbox\", hideFocus: true }));\n this._input.focus();\n\n addCompositeChangeListener(this, this._args, this._input);\n }\n\n loadValue(item: any) {\n this._defaultValue = !!item[this._args.column.field];\n this._input.checked = !!this._defaultValue;\n }\n\n preClick() {\n this._input.checked = !this._input.checked;\n }\n\n serializeValue() {\n return this._input.checked;\n }\n\n applyValue(item: any, state: any) {\n item[this._args.column.field] = state;\n }\n\n isValueChanged() {\n return this.serializeValue() !== this._defaultValue;\n }\n\n validate() {\n return {\n valid: true,\n msg: null as string\n }\n }\n}\n\nexport class PercentCompleteEditor extends IntegerEditor {\n protected _picker: HTMLDivElement;\n\n init() {\n super.init();\n this._input.classList.remove('editor-text', 'slick-editor-text');\n this._input.classList.add('editor-percentcomplete', 'slick-editor-percentcomplete');\n\n var slider: HTMLDivElement;\n this._picker = this._args.container.appendChild(\n H(\"div\", { class: \"slick-editor-percentcomplete-picker\" },\n H(\"div\", { class: \"slick-editor-percentcomplete-helper\" },\n H(\"div\", { class: \"slick-editor-percentcomplete-wrapper\" },\n H(\"div\", { class: \"slick-editor-percentcomplete-slider\", ref: el => slider = el }),\n H(\"div\", { class: \"slick-editor-percentcomplete-buttons\" },\n H(\"button\", { \"data-val\": 0 }, \"Not started\"),\n H(\"button\", { \"data-val\": 50 }, \"In Progress\"),\n H(\"button\", { \"data-val\": 100 }, \"Complete\"))))));\n\n this._input.focus();\n this._input.select();\n\n // @ts-ignore\n (($ as any)(slider) as any).slider({\n orientation: \"vertical\",\n range: \"min\",\n value: this._defaultValue,\n slide: (_: any, ui: any) => {\n this._input.value = ui.value;\n },\n stop: () => {\n if (this._args.compositeEditorOptions)\n triggerCompositeEditorChange(this, this._args);\n }\n });\n\n // @ts-ignore\n ($ as any)(this._picker).find(\".slick-editor-percentcomplete-buttons button\")\n .on(\"click\", (e: any) => {\n this._input.value = (e.target as HTMLButtonElement).dataset.val;\n // @ts-ignore \n (($ as any)(slider) as any).slider(\"value\", (e.target as HTMLButtonElement).dataset.val);\n });\n }\n\n destroy() {\n super.destroy();\n this._picker.remove();\n }\n}\n\n/*\n* An example of a \"detached\" editor.\n* The UI is added onto document BODY and .position(), .show() and .hide() are implemented.\n* KeyDown events are also handled to provide handling for Tab, Shift-Tab, Esc and Ctrl-Enter.\n*/\nexport class LongTextEditor extends BaseEditor {\n\n declare _input: HTMLTextAreaElement;\n protected _container: HTMLElement;\n protected _wrapper: HTMLDivElement;\n\n init() {\n const isComposite = this._args.compositeEditorOptions;\n this._container = isComposite ? this._args.container : document.body;\n\n this._wrapper = this._container.appendChild(H(\"div\", {\n class: \"large-editor-text slick-large-editor-text\",\n style: `z-index:10000; background:white; padding:5px; border:3px solid gray; border-radius:10px;${isComposite ? \"position: relative; padding: 0; border: 0\" : \"position: absolute\" }`\n },\n H(\"textarea\", { hidefocus: true, rows: \"5\", style: \"background:white; width:250px; height:80px; border:0; outline:0\", ref: el => this._input = el })));\n\n if (isComposite)\n addCompositeChangeListener(this, this._args, this._input)\n else {\n this._wrapper.appendChild(H(\"div\", { style: \"text-align: right\" },\n H(\"button\", { ref: el => el.addEventListener('click', this.save.bind(this))}, \"Save\" ),\n H(\"button\", { ref: el => el.addEventListener('click', this.cancel.bind(this))}, \"Cancel\")));\n\n this._input.addEventListener('keydown', this.handleKeyDown.bind(this));\n this.position(this._args.position);\n }\n\n this._input.focus();\n this._input.select();\n }\n\n handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"Enter\" && e.ctrlKey) {\n this.save();\n } else if (e.key === \"Esc\" || e.key == \"Escape\") {\n e.preventDefault();\n this.cancel();\n } else if (e.key === \"Tab\" && e.shiftKey) {\n e.preventDefault();\n this._args.grid.navigatePrev();\n } else if (e.key === \"Tab\") {\n e.preventDefault();\n this._args.grid.navigateNext();\n } else if (e.key === \"Left\" || e.key === \"ArrowLeft\" || e.key === \"Right\" || e.key === \"ArrowRight\") {\n if (this._args.editorCellNavOnLRKeys) {\n var cursorPosition = (e.target as HTMLInputElement).selectionStart;\n var textLength = (e.target as HTMLInputElement).value.length;\n if ((e.key === \"Left\" || e.key === \"ArrowLeft\") && cursorPosition === 0) {\n this._args.grid.navigatePrev();\n }\n if ((e.key === \"Right\" || e.key === \"ArrowRight\") && cursorPosition >= textLength - 1) {\n this._args.grid.navigateNext();\n }\n }\n }\n }\n\n save() {\n this._args.commitChanges();\n };\n\n cancel() {\n this._input.value = this._defaultValue;\n this._args.cancelChanges();\n }\n\n hide() {\n this._wrapper.style.display = \"none\";\n }\n\n show() {\n this._wrapper.style.display = null;\n }\n\n position(position: Position) {\n this._wrapper.style.top = (position.top - 5) + 'px';\n this._wrapper.style.left = (position.left - 5) + 'px';\n }\n\n destroy() {\n this._wrapper.remove();\n }\n}\n\nfunction addCompositeChangeListener(editor: Editor, args: EditorOptions, input: HTMLElement) {\n if (!args.compositeEditorOptions)\n return;\n\n // don't show Save/Cancel when it's a Composite Editor and also trigger a onCompositeEditorChange event when input changes\n input.addEventListener(\"change\", () => {\n triggerCompositeEditorChange(editor, args);\n });\n}\n\nfunction triggerCompositeEditorChange(editor: Editor, args: EditorOptions) {\n var activeCell = args.grid.getActiveCell();\n\n // when valid, we'll also apply the new value to the dataContext item object\n if (editor.validate().valid)\n editor.applyValue(args.item, editor.serializeValue());\n editor.applyValue(args.compositeEditorOptions.formValues, editor.serializeValue());\n args.grid.onCompositeEditorChange.notify({\n row: activeCell.row,\n cell: activeCell.cell,\n item: args.item,\n column: args.column,\n formValues: args.compositeEditorOptions.formValues\n });\n}\n\n/*\n* Depending on the value of Grid option 'editorCellNavOnLRKeys', us\n* Navigate to the cell on the left if the cursor is at the beginning of the input string\n* and to the right cell if it's at the end. Otherwise, move the cursor within the text\n*/\nfunction handleKeydownLRNav(e: KeyboardEvent): void {\n var cursorPosition = this.selectionStart;\n var textLength = this.value.length;\n if (((e.key === \"Left\" || e.key === \"ArrowLeft\") && cursorPosition > 0) ||\n (e.key === \"Right\" || e.key === \"ArrowRight\") && cursorPosition < textLength - 1) {\n e.stopImmediatePropagation();\n }\n}\n\nfunction handleKeydownLRNoNav(e: KeyboardEvent) {\n if (e.key === \"Left\" || e.key === \"ArrowLeft\" || e.key === \"Right\" || e.key === \"ArrowRight\") {\n e.stopImmediatePropagation();\n }\n}\n", "import { TextEditor, IntegerEditor, FloatEditor, DateEditor, YesNoSelectEditor, CheckboxEditor, PercentCompleteEditor, LongTextEditor } from \"./editors\";\n\nexport * from \"./editors\"\n\nexport namespace Editors {\n export const Text = TextEditor;\n export const Integer = IntegerEditor;\n export const Float = FloatEditor;\n export const Date = DateEditor;\n export const YesNoSelect = YesNoSelectEditor;\n export const Checkbox = CheckboxEditor;\n export const PercentComplete = PercentCompleteEditor;\n export const LongText = LongTextEditor;\n}\n", "import { Column, ColumnFormat, CompatFormatter, convertCompatFormatter, FormatterContext, Group, GroupTotals, ItemMetadata } from \"../core\";\nimport { ArgsCell, Grid } from \"../grid\";\n\nexport interface GroupItemMetadataProviderOptions {\n enableExpandCollapse?: boolean;\n groupCellCssClass?: string;\n groupCssClass?: string;\n groupIndentation?: number;\n groupFocusable?: boolean;\n groupFormat?: ColumnFormat;\n groupFormatter?: CompatFormatter;\n groupLevelPrefix?: string;\n groupRowTotals?: boolean;\n groupTitleCssClass?: string;\n hasSummaryType?: (column: Column) => boolean;\n toggleCssClass?: string;\n toggleExpandedCssClass?: string;\n toggleCollapsedCssClass?: string;\n totalsCssClass?: string;\n totalsFocusable?: boolean;\n totalsFormat?: ColumnFormat;\n totalsFormatter?: CompatFormatter;\n}\n\nexport class GroupItemMetadataProvider {\n protected grid: Pick;\n private options: GroupItemMetadataProviderOptions;\n\n constructor(opt?: GroupItemMetadataProviderOptions) {\n this.options = Object.assign({}, GroupItemMetadataProvider.defaults, opt);\n this.options.groupFormat ??= opt?.groupFormatter ? convertCompatFormatter(opt.groupFormatter) : \n ctx => GroupItemMetadataProvider.defaultGroupFormat(ctx, this.options);\n this.options.totalsFormat ??= opt?.totalsFormatter ? convertCompatFormatter(opt.totalsFormatter) : \n ctx => GroupItemMetadataProvider.defaultTotalsFormat(ctx, this.grid);\n }\n\n public static readonly defaults: GroupItemMetadataProviderOptions = {\n enableExpandCollapse: true,\n groupCellCssClass: \"slick-group-cell\",\n groupCssClass: \"slick-group\",\n groupFocusable: true,\n groupIndentation: 15,\n groupLevelPrefix: \"slick-group-level-\",\n groupTitleCssClass: \"slick-group-title\",\n hasSummaryType: (col: any) => col.summaryType && col.summaryType != -1,\n totalsCssClass: \"slick-group-totals\",\n toggleCssClass: \"slick-group-toggle\",\n toggleCollapsedCssClass: \"collapsed\",\n toggleExpandedCssClass: \"expanded\",\n totalsFocusable: false\n }\n\n public static defaultGroupFormat(ctx: FormatterContext, opt?: GroupItemMetadataProviderOptions) {\n opt ??= GroupItemMetadataProvider.defaults;\n let item = ctx.item as Group;\n if (!opt.enableExpandCollapse)\n return item?.title;\n let indentation = item.level * opt.groupIndentation;\n return `\n${item.title}`;\n }\n\n public static defaultTotalsFormat(ctx: FormatterContext, grid?: typeof this.prototype[\"grid\"]): string {\n var item = ctx.item as GroupTotals;\n if (!item.__groupTotals && (item as any).totals)\n item = (item as any).totals;\n return (ctx.column?.groupTotalsFormatter?.(item, ctx.column)) ??\n ((grid ?? ctx.grid)?.groupTotalsFormatter?.(item, ctx.column)) ?? \"\";\n }\n \n init(grid: typeof this.grid) {\n this.grid = grid;\n grid.onClick.subscribe(this.handleGridClick);\n grid.onKeyDown.subscribe(this.handleGridKeyDown);\n }\n\n readonly pluginName = \"GroupItemMetadataProvider\";\n\n destroy() {\n if (this.grid) {\n this.grid.onClick?.unsubscribe(this.handleGridClick);\n this.grid.onKeyDown?.unsubscribe(this.handleGridKeyDown);\n }\n }\n\n getOptions() {\n return this.options;\n }\n\n setOptions(value: GroupItemMetadataProviderOptions) {\n Object.assign(this.options, value);\n }\n\n handleGridClick = (e: MouseEvent, args: ArgsCell) => {\n let grid = args?.grid ?? this.grid;\n if (!grid)\n return;\n var item = grid.getDataItem(args.row);\n if (!item || \n !(item instanceof Group) || \n !this.options.toggleCssClass ||\n !(e.target as HTMLElement).classList.contains(this.options.toggleCssClass))\n return;\n \n e.stopImmediatePropagation();\n e.preventDefault();\n\n var range = grid.getRenderedRange();\n grid.getData().setRefreshHints?.({\n ignoreDiffsBefore: range.top,\n ignoreDiffsAfter: range.bottom + 1\n });\n\n if (item.collapsed)\n grid.getData().expandGroup?.(item.groupingKey);\n else\n grid.getData().collapseGroup?.(item.groupingKey);\n }\n\n handleGridKeyDown = (e: KeyboardEvent, args: ArgsCell) => {\n if (!this.options.enableExpandCollapse || \n (e.key !== \" \" && e.key !== \"-\" && e.key !== \"+\"))\n return;\n\n let grid = args?.grid ?? this.grid;\n if (!grid)\n return;\n \n var activeCell = grid.getActiveCell();\n if (!activeCell)\n return;\n\n var item = grid.getDataItem(activeCell.row);\n if (!item || !(item instanceof Group))\n return;\n\n e.stopImmediatePropagation();\n e.preventDefault();\n\n if ((e.key == \"+\" && !item.collapsed) ||\n (e.key == \"-\" && item.collapsed))\n return;\n\n var range = (grid.getRenderedRange as any)();\n grid.getData().setRefreshHints?.({\n ignoreDiffsBefore: range.top,\n ignoreDiffsAfter: range.bottom + 1\n });\n\n if (item.collapsed)\n grid.getData().expandGroup?.(item.groupingKey);\n else\n grid.getData().collapseGroup?.(item.groupingKey);\n }\n\n groupCellPosition = () => {\n\n const result = {\n cell: 0,\n colspan: <\"*\" | number>\"*\"\n }\n\n if (!this.options.groupRowTotals ||\n !this.grid) {\n return result;\n }\n\n var cols = this.grid.getColumns();\n var col1: Column;\n for (var idx = 0; idx < cols.length; idx++) {\n col1 = cols[idx];\n if (!this.options.hasSummaryType?.(cols[idx])) {\n result.cell = idx;\n break;\n }\n }\n\n result.colspan = 0;\n for (var idx = result.cell + 1; idx < cols.length; idx++) {\n var col2 = cols[idx];\n if (!this.options.hasSummaryType?.(col2) &&\n (!!(col1?.frozen) === !!(col2?.frozen))) {\n result.colspan++;\n }\n else\n break;\n }\n\n result.colspan = Math.max(1, result.colspan);\n return result;\n }\n\n getGroupRowMetadata: ((item: Group) => ItemMetadata) = (item) => {\n\n const opt = this.options;\n const gcp = this.groupCellPosition();\n const result: ItemMetadata = {\n selectable: false,\n focusable: opt.groupFocusable,\n cssClasses: opt.groupCssClass + \" \" + opt.groupLevelPrefix + item?.level,\n columns: {\n [gcp.cell]: {\n colspan: gcp.colspan,\n cssClasses: opt.groupCellCssClass,\n format: opt.groupFormat,\n editor: null\n }\n }\n };\n\n if (opt.groupRowTotals)\n result.format = opt.totalsFormat;\n\n return result;\n }\n\n getTotalsRowMetadata: ((item: GroupTotals) => ItemMetadata) = (item) => {\n const opt = this.options;\n return {\n selectable: false,\n focusable: opt.totalsFocusable,\n cssClasses: opt.totalsCssClass + \" \" + opt.groupLevelPrefix + item?.group?.level,\n format: opt.totalsFormat,\n editor: null\n };\n }\n\n}\n", "import { ArgsColumn, Grid, IPlugin } from \"../grid\";\n\nexport interface AutoTooltipsOptions {\n enableForCells?: boolean;\n enableForHeaderCells?: boolean;\n maxToolTipLength?: number;\n replaceExisting?: boolean;\n}\n\nexport class AutoTooltips implements IPlugin {\n\n private grid: Grid;\n private options: AutoTooltipsOptions;\n\n constructor(options?: AutoTooltipsOptions) {\n this.options = Object.assign({}, AutoTooltips.defaults, options);\n }\n\n public static readonly defaults: AutoTooltipsOptions = {\n enableForCells: true,\n enableForHeaderCells: false,\n maxToolTipLength: null,\n replaceExisting: true\n }\n\n init(grid: Grid) {\n this.grid = grid;\n\n if (this.options.enableForCells)\n this.grid.onMouseEnter.subscribe(this.handleMouseEnter);\n\n if (this.options.enableForHeaderCells)\n this.grid.onHeaderMouseEnter.subscribe(this.handleHeaderMouseEnter);\n }\n\n destroy() {\n if (this.options.enableForCells) \n this.grid.onMouseEnter.unsubscribe(this.handleMouseEnter);\n\n if (this.options.enableForHeaderCells) \n this.grid.onHeaderMouseEnter.unsubscribe(this.handleHeaderMouseEnter);\n }\n\n private handleMouseEnter = (e: MouseEvent) => {\n var cell = this.grid.getCellFromEvent(e);\n if (!cell)\n return;\n var node = this.grid.getCellNode(cell.row, cell.cell);\n if (!node)\n return;\n var text;\n if (!node.title || this.options.replaceExisting) {\n if (node.clientWidth < node.scrollWidth) {\n text = node.textContent?.trim() ?? \"\";\n if (this.options.maxToolTipLength && \n text.length > this.options.maxToolTipLength) {\n text = text.substring(0, this.options.maxToolTipLength - 3) + \"...\";\n }\n } else {\n text = \"\";\n }\n node.title = text;\n }\n node = null;\n }\n\n private handleHeaderMouseEnter = (e: MouseEvent, args: ArgsColumn) => {\n var column = args.column;\n if (column && !column.toolTip) {\n var node = (e.target as HTMLElement).closest(\".slick-header-column\") as HTMLElement;\n node && (node.title = (node.clientWidth < node.scrollWidth ? column.name : \"\"));\n }\n }\n\n public pluginName = \"AutoTooltips\";\n}", "import { EventEmitter, EventSubscriber, H } from \"../core\";\nimport { Grid, IPlugin } from \"../grid\";\n\nexport interface RowMoveManagerOptions {\n cancelEditOnDrag?: boolean;\n}\n\ninterface RowMoveManagerDragData {\n selectedRows: number[],\n selectionProxy: HTMLDivElement,\n guide: HTMLDivElement,\n insertBefore: number,\n canMove: boolean\n}\n\ninterface ArgsMoveRows {\n rows: number[];\n insertBefore: number;\n}\n\nexport class RowMoveManager implements IPlugin {\n private grid: Grid;\n private options: RowMoveManagerOptions;\n private dragging: boolean;\n private handler = new EventSubscriber();\n onBeforeMoveRows = new EventEmitter();\n onMoveRows = new EventEmitter();\n\n constructor(options?: RowMoveManagerOptions) {\n this.options = Object.assign({}, RowMoveManager.defaults, options);\n }\n\n public static readonly defaults: RowMoveManagerOptions = {\n cancelEditOnDrag: false\n }\n\n init(grid: Grid) {\n this.grid = grid;\n this.handler.subscribe(grid.onDragInit, this.handleDragInit.bind(this))\n .subscribe(grid.onDragStart, this.handleDragStart.bind(this))\n .subscribe(grid.onDrag, this.handleDrag.bind(this))\n .subscribe(grid.onDragEnd, this.handleDragEnd.bind(this));\n }\n\n destroy() {\n this.handler?.unsubscribeAll();\n }\n\n private handleDragInit(e: UIEvent) {\n // prevent the grid from cancelling drag'n'drop by default\n e.stopImmediatePropagation();\n }\n\n private handleDragStart(e: UIEvent, dd: RowMoveManagerDragData) {\n let cell = this.grid.getCellFromEvent(e);\n\n if (this.options.cancelEditOnDrag && this.grid.getEditorLock().isActive()) {\n this.grid.getEditorLock().cancelCurrentEdit();\n }\n\n if (this.grid.getEditorLock().isActive() ||\n !/move|selectAndMove/.test(this.grid.getColumns()[cell.cell].behavior)) {\n return false;\n }\n\n this.dragging = true;\n e.stopImmediatePropagation();\n\n let selectedRows = this.grid.getSelectedRows();\n\n if (selectedRows.length == 0 || selectedRows.indexOf(cell.row) == -1) {\n selectedRows = [cell.row];\n this.grid.setSelectedRows(selectedRows);\n }\n\n let rowHeight = this.grid.getOptions().rowHeight;\n\n dd.selectedRows = selectedRows;\n let canvas = this.grid.getCanvasNode();\n dd.selectionProxy = canvas.appendChild(H('div', {\n 'class': 'slick-reorder-proxy',\n 'style': `position: absolute; z-index: 9999; width: ${canvas.clientWidth}px; height: ${rowHeight * selectedRows.length}px`\n }));\n dd.guide = canvas.appendChild(H('div', {\n 'class': 'slick-reorder-guide',\n 'style': `position: absolute; z-index: 99998; width: ${canvas.clientWidth}px; top: -1000`\n }));\n\n dd.insertBefore = -1;\n }\n\n private handleDrag(e: UIEvent, dd: RowMoveManagerDragData) {\n if (!this.dragging)\n return;\n\n e.stopImmediatePropagation();\n let canvas = this.grid.getCanvasNode();\n\n let box = canvas.getBoundingClientRect();\n let docElem = document.documentElement;\n let canvasTop = box.top + window.scrollY - docElem.clientTop;\n\n let top = (e as any).pageY - canvasTop;\n dd.selectionProxy.style.top = (top - 5) + 'px';\n\n let insertBefore = Math.max(0, Math.min(Math.round(top / this.grid.getOptions().rowHeight), this.grid.getDataLength()));\n if (insertBefore !== dd.insertBefore) {\n let eventData = {\n rows: dd.selectedRows,\n insertBefore: insertBefore\n };\n\n if (this.onBeforeMoveRows.notify(eventData) === false) {\n dd.guide.style.top = \"-1000\";\n dd.canMove = false;\n } else {\n dd.guide.style.top = (insertBefore * this.grid.getOptions().rowHeight) + 'px';\n dd.canMove = true;\n }\n\n dd.insertBefore = insertBefore;\n }\n }\n\n private handleDragEnd(e: UIEvent, dd: RowMoveManagerDragData) {\n if (!this.dragging)\n return;\n\n this.dragging = false;\n e.stopImmediatePropagation();\n\n dd.guide.remove();\n dd.selectionProxy.remove();\n\n if (dd.canMove) {\n let eventData = {\n rows: dd.selectedRows,\n insertBefore: dd.insertBefore\n };\n // TODO: _grid.remapCellCssClasses ?\n this.onMoveRows.notify(eventData);\n }\n }\n}", "import { EventEmitter, EventSubscriber, H, IEventData, Range } from \"../core\";\nimport { ArgsCell, Grid, IPlugin, SelectionModel } from \"../grid\";\n\nexport interface RowSelectionModelOptions {\n selectActiveRow?: boolean;\n}\n\nfunction getRowsRange(from: number, to: number): number[] {\n let i: number, rows: number[] = [];\n for (i = from; i <= to; i++) {\n rows.push(i);\n }\n for (i = to; i < from; i++) {\n rows.push(i);\n }\n return rows;\n}\n\nfunction rangesToRows(ranges: Range[]) {\n let rows = [];\n for (let i = 0; i < ranges.length; i++) {\n for (let j = ranges[i].fromRow; j <= ranges[i].toRow; j++) {\n rows.push(j);\n }\n }\n return rows;\n}\n\nexport class RowSelectionModel implements IPlugin, SelectionModel {\n private grid: Grid;\n private handler = new EventSubscriber();\n private inHandler: boolean;\n private options: RowSelectionModelOptions;\n private ranges: Range[];\n onSelectedRangesChanged = new EventEmitter();\n\n constructor(options?: RowSelectionModelOptions) {\n this.options = Object.assign({}, RowSelectionModel.defaults, options);\n }\n\n public static readonly defaults: RowSelectionModelOptions = {\n selectActiveRow: true\n }\n\n init(grid: Grid): void {\n this.grid = grid;\n this.handler.subscribe(grid.onActiveCellChanged, this.wrapHandler(this.handleActiveCellChange));\n this.handler.subscribe(grid.onKeyDown, this.wrapHandler(this.handleKeyDown));\n this.handler.subscribe(grid.onClick, this.wrapHandler(this.handleClick));\n }\n\n destroy(): void {\n this.handler?.unsubscribeAll();\n }\n\n private wrapHandler(handler: Function): () => void {\n return (function() {\n if (!this.inHandler) {\n this.inHandler = true;\n handler.apply(this, arguments);\n this.inHandler = false;\n }\n }).bind(this);\n }\n\n private rowsToRanges(rows: number[]): Range[] {\n let ranges = [];\n let lastCell = this.grid.getColumns().length - 1;\n for (let i = 0; i < rows.length; i++) {\n ranges.push(new Range(rows[i], 0, rows[i], lastCell));\n }\n return ranges;\n }\n\n\n getSelectedRows(): number[] {\n return rangesToRows(this.ranges);\n }\n\n setSelectedRows(rows: number[]): void {\n this.setSelectedRanges(this.rowsToRanges(rows));\n }\n\n setSelectedRanges(ranges: Range[]): void {\n // simle check for: empty selection didn't change, prevent firing onSelectedRangesChanged\n if ((!this.ranges || this.ranges.length === 0) && (!ranges || ranges.length === 0))\n return;\n this.ranges = ranges;\n this.onSelectedRangesChanged.notify(this.ranges);\n }\n\n getSelectedRanges(): Range[] {\n return this.ranges;\n }\n\n private handleActiveCellChange(_: IEventData, data: ArgsCell) {\n if (this.options.selectActiveRow && data.row != null) {\n this.setSelectedRanges([new Range(data.row, 0, data.row, this.grid.getColumns().length - 1)]);\n }\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n let activeRow = this.grid.getActiveCell();\n if (!(activeRow && e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey && (e.which == 38 || e.which == 40)))\n return;\n\n let selectedRows = this.getSelectedRows();\n selectedRows.sort(function (x, y) {\n return x - y\n });\n\n if (!selectedRows.length) {\n selectedRows = [activeRow.row];\n }\n\n let top = selectedRows[0];\n let bottom = selectedRows[selectedRows.length - 1];\n let active;\n\n if (e.which == 40) {\n active = activeRow.row < bottom || top == bottom ? ++bottom : ++top;\n } else {\n active = activeRow.row < bottom ? --bottom : --top;\n }\n\n if (active >= 0 && active < this.grid.getDataLength()) {\n this.grid.scrollRowIntoView(active);\n this.ranges = this.rowsToRanges(getRowsRange(top, bottom));\n this.setSelectedRanges(this.ranges);\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n\n private handleClick(e: MouseEvent) {\n let cell = this.grid.getCellFromEvent(e);\n if (!cell || !this.grid.canCellBeActive(cell.row, cell.cell)) {\n return false;\n }\n\n if (!this.grid.getOptions().multiSelect || (\n !e.ctrlKey && !e.shiftKey && !e.metaKey)) {\n return false;\n }\n\n let selection = rangesToRows(this.ranges);\n let idx = selection.indexOf(cell.row);\n\n if (idx === -1 && (e.ctrlKey || e.metaKey)) {\n selection.push(cell.row);\n this.grid.setActiveCell(cell.row, cell.cell);\n } else if (idx !== -1 && (e.ctrlKey || e.metaKey)) {\n selection = selection.filter(o => {\n return (o !== cell.row);\n });\n this.grid.setActiveCell(cell.row, cell.cell);\n } else if (selection.length && e.shiftKey) {\n let last = selection.pop();\n let from = Math.min(cell.row, last);\n let to = Math.max(cell.row, last);\n selection = [];\n for (let i = from; i <= to; i++) {\n if (i !== last) {\n selection.push(i);\n }\n }\n selection.push(last);\n this.grid.setActiveCell(cell.row, cell.cell);\n }\n\n this.ranges = this.rowsToRanges(selection);\n this.setSelectedRanges(this.ranges);\n e.stopImmediatePropagation();\n\n return true;\n }\n}\n"], "mappings": "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", "names": ["returnFalse", "i", "c", "i", "_a", "e", "dir", "Formatters", "Editors"] }