UNPKG

handsontable

Version:

Handsontable is a JavaScript Spreadsheet Component available for React, Angular and Vue.

1,349 lines (1,200 loc) • 106 kB
import { PikadayOptions } from 'pikaday'; /** * @internal * Omit properties K from T */ type Omit<T, K extends keyof T> = Pick<T, ({ [P in keyof T]: P } & { [P in K]: never } & { [x: string]: never, [x: number]: never })[keyof T]>; // type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; // TS >= 2.8 declare namespace _Handsontable { class Core { constructor(element: Element, options: Handsontable.GridSettings); addHook<K extends keyof Handsontable.Hooks.Events>(key: K, callback: Handsontable.Hooks.Events[K] | Handsontable.Hooks.Events[K][]): void; addHookOnce<K extends keyof Handsontable.Hooks.Events>(key: K, callback: Handsontable.Hooks.Events[K] | Handsontable.Hooks.Events[K][]): void; alter(action: 'insert_row' | 'insert_col' | 'remove_row' | 'remove_col', index?: number | Array<[number, number]>, amount?: number, source?: string, keepEmptyRows?: boolean): void; clear(): void; clearUndo(): void; columnIndexMapper: Handsontable.RecordTranslation.IndexMapper; colOffset(): number; colToProp(col: number): string | number; container: HTMLElement; countCols(): number; countEmptyCols(ending?: boolean): number; countEmptyRows(ending?: boolean): number; countRenderedCols(): number; countRenderedRows(): number; countRows(): number; countSourceCols(): number; countSourceRows(): number; countVisibleCols(): number; countVisibleRows(): number; deselectCell(): void; destroy(): void; destroyEditor(revertOriginal?: boolean, prepareEditorIfNeeded?: boolean): void; emptySelectedCells(): void; batch(wrappedOperations: () => void): void; forceFullRender: boolean; getActiveEditor<T extends Handsontable._editors.Base>(): T | undefined; getCell(row: number, col: number, topmost?: boolean): HTMLTableCellElement | null; getCellEditor<T extends Handsontable._editors.Base>(row: number, col: number): T; getCellEditor<T extends Handsontable._editors.Base>(cellMeta: Handsontable.CellMeta): T; getCellMeta(row: number, col: number): Handsontable.CellProperties; getCellMetaAtRow(row: number): Handsontable.CellProperties[]; getCellRenderer(row: number, col: number): Handsontable.renderers.Base; getCellRenderer(cellMeta: Handsontable.CellMeta): Handsontable.renderers.Base; getCellsMeta(): Handsontable.CellProperties[]; getCellValidator(row: number, col: number): Handsontable.validators.Base | RegExp | undefined; getCellValidator(cellMeta: Handsontable.CellMeta): Handsontable.validators.Base | RegExp | undefined; getColHeader(): (number | string)[]; getColHeader(col: number): number | string; getColWidth(col: number): number; getCoords(elem: Element | null): Handsontable.wot.CellCoords; getCopyableData(row: number, column: number): string; getCopyableText(startRow: number, startCol: number, endRow: number, endCol: number): string; getData(row?: number, column?: number, row2?: number, column2?: number): Handsontable.CellValue[]; getDataAtCell(row: number, column: number): Handsontable.CellValue; getDataAtCol(column: number): Handsontable.CellValue[]; getDataAtProp(prop: string | number): Handsontable.CellValue[]; getDataAtRow(row: number): Handsontable.CellValue[]; getDataAtRowProp(row: number, prop: string): Handsontable.CellValue; getDataType(rowFrom: number, columnFrom: number, rowTo: number, columnTo: number): Handsontable.CellType | 'mixed'; getInstance(): Handsontable; getPlugin<T extends keyof Handsontable.PluginsCollection>(pluginName: T): Handsontable.PluginsCollection[T]; getRowHeader(): (string | number)[]; getRowHeader(row: number): string | number; getRowHeight(row: number): number; getSchema(): Handsontable.RowObject; getSelected(): Array<[number, number, number, number]> | undefined; getSelectedLast(): number[] | undefined; getSelectedRange(): Handsontable.wot.CellRange[] | undefined; getSelectedRangeLast(): Handsontable.wot.CellRange | undefined; getSettings(): Handsontable.GridSettings; getSourceData(row?: number, column?: number, row2?: number, column2?: number): Handsontable.CellValue[][] | Handsontable.RowObject[]; getSourceDataArray(row?: number, column?: number, row2?: number, ccolumn2?: number): Handsontable.CellValue[][]; getSourceDataAtCell(row: number, column: number): Handsontable.CellValue; getSourceDataAtCol(column: number): Handsontable.CellValue[]; getSourceDataAtRow(row: number): Handsontable.CellValue[] | Handsontable.RowObject; getTranslatedPhrase(dictionaryKey: string, extraArguments: any): string | null; getValue(): Handsontable.CellValue; hasColHeaders(): boolean; hasHook(key: keyof Handsontable.Hooks.Events): boolean; hasRowHeaders(): boolean; init(): () => void; isColumnModificationAllowed(): boolean; isDestroyed: boolean isEmptyCol(col: number): boolean; isEmptyRow(row: number): boolean; isListening(): boolean; isRedoAvailable(): boolean; isUndoAvailable(): boolean; listen(): void; loadData(data: Handsontable.CellValue[][] | Handsontable.RowObject[]): void; populateFromArray(row: number, col: number, input: Handsontable.CellValue[][], endRow?: number, endCol?: number, source?: string, method?: 'shift_down' | 'shift_right' | 'overwrite', direction?: 'left' | 'right' | 'up' | 'down', deltas?: any[]): void; propToCol(prop: string | number): number; redo(): void; refreshDimensions(): void; removeCellMeta(row: number, col: number, key: string): void; removeCellMeta(row: number, col: number, key: keyof Handsontable.CellMeta): void; removeHook<K extends keyof Handsontable.Hooks.Events>(key: K, callback: Handsontable.Hooks.Events[K]): void; render(): void; renderCall: boolean; rootDocument: Document; rootElement: HTMLElement; rootWindow: Window; rowIndexMapper: Handsontable.RecordTranslation.IndexMapper; rowOffset(): number; runHooks(key: keyof Handsontable.Hooks.Events, p1?: any, p2?: any, p3?: any, p4?: any, p5?: any, p6?: any): any; // Requires TS 3.0: // runHooks<K extends keyof Handsontable.Events>(key: K, ...params: Parameters<Handsontable.Events[K]>): ReturnType<Handsontable.Events[K]>; scrollViewportTo(row?: number, column?: number, snapToBottom?: boolean, snapToRight?: boolean, considerHiddenIndexes?: boolean): boolean; selectAll(): void; selectCell(row: number, col: number, endRow?: number, endCol?: number, scrollToCell?: boolean, changeListener?: boolean): boolean; selectCellByProp(row: number, prop: string, endRow?: number, endProp?: string, scrollToCell?: boolean): boolean; selectCells(coords: Array<[number, number | string, number, number | string]> | Array<Handsontable.wot.CellRange>, scrollToCell?: boolean, changeListener?: boolean): boolean; selectColumns(startColumn: number | string, endColumn?: number | string): boolean; selectRows(startRow: number, endRow?: number): boolean; setCellMeta(row: number, col: number, key: string, val: any): void; setCellMeta<K extends keyof Handsontable.CellMeta>(row: number, col: number, key: K, val: Handsontable.CellMeta[K]): void; setCellMetaObject<T extends Handsontable.CellMeta>(row: number, col: number, prop: T): void; setDataAtCell(row: number, col: string | number, value: Handsontable.CellValue, source?: string): void; setDataAtCell(changes: Array<[number, string | number, Handsontable.CellValue]>, source?: string): void; setDataAtRowProp(row: number, prop: string, value: Handsontable.CellValue, source?: string): void; setDataAtRowProp(changes: Array<[number, string | number, Handsontable.CellValue]>, source?: string): void; setSourceDataAtCell(row: number, column: number | string, value: Handsontable.CellValue, source?: string): void; setSourceDataAtCell(changes: [number, string | number, Handsontable.CellValue][]): void; spliceCol(col: number, index: number, amount: number, ...elements: Handsontable.CellValue[]): void; spliceRow(row: number, index: number, amount: number, ...elements: Handsontable.CellValue[]): void; table: HTMLTableElement; toHTML(): string; toPhysicalColumn(column: number): number; toPhysicalRow(row: number): number; toVisualColumn(column: number): number; toVisualRow(row: number): number; toTableElement(): HTMLTableElement; undo(): void; undoRedo: Handsontable.UndoRedo; unlisten(): void; updateSettings(settings: Handsontable.GridSettings, init?: boolean): void; validateCell(value: any, cellProperties: Handsontable.CellProperties, callback: (valid: boolean) => void, source: string): void; validateCells(callback?: (valid: boolean) => void): void; validateColumns(columns: number[], callback?: (valid: boolean) => void): void; validateRows(rows: number[], callback?: (valid: boolean) => void): void; } } declare namespace Handsontable { // These types represent default known values, but users can extend with their own, leading to the need for assertions. // Using type arguments (ex `GridSettings<CellValue, CellType, SourceData>`) would solve this and provide very strict // type-checking, but adds a lot of noise for no benefit in the most common use cases. /** * A cell value, which can be anything to support custom cell data types, but by default is `string | number | boolean | undefined`. */ type CellValue = any; /** * A cell change represented by `[row, column, prevValue, nextValue]`. */ type CellChange = [number, string | number, CellValue, CellValue]; /** * A row object, one of the two ways to supply data to the table, the alternative being an array of values. * Row objects can have any data assigned to them, not just column data, and can define a `__children` array for nested rows. */ type RowObject = { [prop: string]: any }; /** * A single row of source data, which can be represented as an array of values, or an object with key/value pairs. */ type SourceRowData = RowObject | CellValue[]; /** * The default sources for which the table triggers hooks. */ type ChangeSource = 'auto' | 'edit' | 'loadData' | 'populateFromArray' | 'spliceCol' | 'spliceRow' | 'timeValidate' | 'dateValidate' | 'validateCells' | 'Autofill.fill' | 'ContextMenu.clearColumns' | 'ContextMenu.columnLeft' | 'ContextMenu.columnRight' | 'ContextMenu.removeColumn' | 'ContextMenu.removeRow' | 'ContextMenu.rowAbove' | 'ContextMenu.rowBelow' | 'CopyPaste.paste' | 'ObserveChanges.change' | 'UndoRedo.redo' | 'UndoRedo.undo' | 'ColumnSummary.set' | 'ColumnSummary.reset'; /** * The default cell type aliases the table has built-in. */ type CellType = 'autocomplete' | 'checkbox' | 'date' | 'dropdown' | 'handsontable' | 'numeric' | 'password' | 'text' | 'time'; /** * The default editor aliases the table has built-in. */ type EditorType = 'autocomplete' | 'checkbox' | 'date' | 'dropdown' | 'handsontable' | 'mobile' | 'password' | 'select' | 'text'; /** * The default renderer aliases the table has built-in. */ type RendererType = 'autocomplete' | 'checkbox' | 'html' | 'numeric' | 'password' | 'text'; /** * The default validator aliases the table has built-in. */ type ValidatorType = 'autocomplete' | 'date' | 'numeric' | 'time'; namespace wot { interface CellCoords { col: number; row: number; } interface CellRange { highlight: CellCoords; from: CellCoords; to: CellCoords; } type OverlayType = 'top' | 'bottom' | 'left' | 'top_left_corner' | 'bottom_left_corner'; } namespace cellTypes { interface Autocomplete { editor: typeof _editors.Autocomplete; renderer: renderers.Autocomplete; validator: validators.Autocomplete; } interface Checkbox { editor: typeof _editors.Checkbox; renderer: renderers.Checkbox; } interface Date { editor: typeof _editors.Date; renderer: renderers.Autocomplete; validator: validators.Date } interface Dropdown { editor: typeof _editors.Dropdown; renderer: renderers.Autocomplete; validator: validators.Autocomplete; } interface Handsontable { editor: typeof _editors.Handsontable; renderer: renderers.Autocomplete; } interface Numeric { dataType: string; editor: typeof _editors.Numeric; renderer: renderers.Numeric; validator: validators.Numeric; } interface Password { copyable: boolean; editor: typeof _editors.Password; renderer: renderers.Password; } interface Text { editor: typeof _editors.Text; renderer: renderers.Text; } interface Time { editor: typeof _editors.Text; renderer: renderers.Text; validator: validators.Time; } } /** * The "_editor" namespace is named to avoid circular reference conflict with "Handsontable.editors" namespace. * The other namespaces (renderers, validators, etc) don't need this because they don't expose values (classes), just types (interfaces). * Note that TS will think it can use the values defined here, ex `new Handsontable._editors.Base()` compiles, but this is wrong. * TODO: This would be better solved by moving all types outside the exported namespaces. (Separate type definition from type publication.) */ namespace _editors { type EditorState = 'STATE_VIRGIN' | // before editing 'STATE_EDITING' | 'STATE_WAITING' | // waiting for async validation 'STATE_FINISHED'; abstract class Base { hot: _Handsontable.Core; instance: _Handsontable.Core; row: number; col: number; prop: string | number; TD: HTMLTableCellElement; originalValue: any; cellProperties: CellProperties; state: EditorState; constructor(hotInstance: _Handsontable.Core, row: number, col: number, prop: string | number, TD: HTMLTableCellElement, cellProperties: CellProperties) beginEditing(initialValue?: any, event?: Event): void; cancelChanges(): void; checkEditorSection(): 'top-left-corner' | 'top' | 'bottom-left-corner' | 'bottom' | 'left' | ''; abstract close(): void; discardEditor(validationResult?: boolean): void; enableFullEditMode(): void; extend<T extends _editors.Base>(): T; finishEditing(restoreOriginalValue?: boolean, ctrlDown?: boolean, callback?: () => void): void; abstract focus(): void; getEditedCell(): HTMLTableCellElement | null; getEditedCellsZIndex(): string; abstract getValue(): any; init(): void; isInFullEditMode(): boolean; isOpened(): boolean; isWaiting(): boolean; abstract open(event?: Event): void; prepare(row: number, col: number, prop: string | number, TD: HTMLTableCellElement, originalValue: any, cellProperties: CellProperties): void; saveValue(val?: any, ctrlDown?: boolean): void; abstract setValue(newValue?: any): void; } class Checkbox extends Base { close(): void; focus(): void; getValue(): any; open(): void; setValue(newValue?: any): void; } class Mobile extends Base { close(): void; focus(): void; getValue(): any; open(): void; setValue(newValue?: any): void; hideCellPointer(): void; onBeforeKeyDown(event?: KeyboardEvent): void; prepareAndSave(): void; scrollToView(): void; updateEditorData(): void; updateEditorPosition(x?: number, y?: number): void; valueChanged(): boolean; } class Select extends Base { close(): void; focus(): void; getValue(): any; open(): void; setValue(newValue?: any): void; prepareOptions(optionsToPrepare?: RowObject | CellValue[]): void; refreshDimensions(): void; refreshValue(): void; registerHooks(): void; } class Text extends Base { close(): void; focus(): void; getValue(): any; open(): void; setValue(newValue?: any): void; bindEvents(): void; createElements(): void; destroy(): void; hideEditableElement(): void; showEditableElement(): void; refreshDimensions(force?: boolean): void; refreshValue(): void; TEXTAREA: HTMLInputElement; TEXTAREA_PARENT: HTMLElement; textareaStyle: CSSStyleDeclaration; } class Date extends Text { destroyElements(): void; getDatePickerConfig(): PikadayOptions; hideDatepicker(): void; open(event?: Event): void; showDatepicker(event?: Event): void; } class Handsontable extends Text { assignHooks(): void; } class Numeric extends Text { } class Password extends Text { } class Autocomplete extends Handsontable { allowKeyEventPropagation(keyCode?: number): boolean; flipDropdown(dropdownHeight?: number): void; flipDropdownIfNeeded(): void; getDropdownHeight(): number; highlightBestMatchingChoice(index?: number): void; limitDropdownIfNeeded(spaceAvailable?: number, dropdownHeight?: number): void; queryChoices(query?: string): void; sortByRelevance(value?: CellValue, choices?: CellValue[], caseSensitive?: boolean): any[]; setDropdownHeight(height?: number): void; updateChoicesList(choices?: CellValue[]): void; unflipDropdown(): void; updateDropdownHeight(): void; } class Dropdown extends Autocomplete { } } namespace plugins { // utils for Filters namespace FiltersPlugin { type OperationType = 'conjunction' | 'disjunction'; type ConditionName = 'begins_with' | 'between' | 'by_value' | 'contains' | 'empty' | 'ends_with' | 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'not_between' | 'not_contains' | 'not_empty' | 'neq'; type ColumnConditions = { column: number; conditions: Handsontable.plugins.FiltersPlugin.ConditionId[]; operation: Handsontable.plugins.FiltersPlugin.OperationType; } interface ConditionId { args: any[]; name?: ConditionName; command?: { key: ConditionName; } } interface Condition { name: ConditionName; args: any[]; func: (dataRow: CellValue, values: any[]) => boolean; } interface CellLikeData { meta: { row: number; col: number; visualCol: number; visualRow: number; type: string; instance: _Handsontable.Core; dateFormat?: string; }; value: string; } interface BaseComponent { hot: _Handsontable.Core; id: string; hidden: boolean; stateId: string; state: RecordTranslation.IndexMap; elements: any[]; restoreState(): void; setState(state: any): void; saveState(physicalColumn: number): void; getState(): any; destroy(): boolean; hide(): void; isHidden(): boolean; reset(): void; show(): void; } interface ActionBarComponent extends BaseComponent { getMenuItemDescriptor(): object; accept(): void; cancel(): void; } interface ConditionComponent extends BaseComponent { getInputElement(index?: number): InputUI; getInputElements(): InputUI[]; getMenuItemDescriptor(): object; getSelectElement(): SelectUI; getState(): object; setState(value: object): void; updateState(stateInfo: object): void; } interface ValueComponent extends BaseComponent { getMenuItemDescriptor(): object; getMultipleSelectElement(): MultipleSelectUI; getState(): object; setState(value: object): void; updateState(stateInfo: object): void; } interface BaseUI { buildState: boolean; eventManager: EventManager; hot: _Handsontable.Core; options: object; build(): void; destroy(): void; element(): Element; focus(): void; getValue(): any; hide(): void; isBuilt(): boolean; reset(): void; setValue(value: any): any; show(): void; update(): void; } interface InputUI extends BaseUI { } interface MultipleSelectUI extends BaseUI { clearAllUI: BaseUI; items: any[]; itemsBox: _Handsontable.Core; searchInput: InputUI; selectAllUI: BaseUI; getItems(): void; getValue(): any[]; isSelectedAllValues(): boolean; setItems(items: any[]): void; } interface SelectUI extends BaseUI { menu: Menu | void; items: any[]; setItems(items: any[]): void; openOptions(): void; closeOptions(): void; } interface ConditionCollection { hot: _Handsontable.Core; isMapRegistrable: boolean; filteringStates: RecordTranslation.IndexMap; addCondition(column: number, conditionDefinition: ConditionId, operation?: OperationType, position?: number): void; clean(): void; destroy(): void; exportAllConditions(): ConditionId[]; getConditions(column: number): Condition[]; getFilteredColumns(): number[]; getColumnStackPosition(column: number): number | void; getOperation(column: number): void | OperationType; hasConditions(column: number, name: string): boolean; isEmpty(): boolean; isMatch(value: CellLikeData, column: number): boolean; isMatchInConditions(conditions: Condition[], value: CellLikeData, operationType?: OperationType): boolean; importAllConditions(conditions: ConditionId[]): void; removeConditions(column: number): void; } interface ConditionUpdateObserver { hot: _Handsontable.Core; changes: number[]; columnDataFactory: (column: number) => object[]; conditionCollection: ConditionCollection; grouping: boolean; latestEditedColumnPosition: number; latestOrderStack: number[]; destroy(): void; flush(): void; groupChanges(): void; updateStatesAtColumn(column: number, conditionArgsChange: object): void; } } interface BindStrategy { klass: () => void; strategy: string | void; clearMap(): void; createMap(length: number): void; createRow(params: any): void; destroy(): void; removeRow(params: any): void; setStrategy(name: string): void; translate(params: any): void; } interface CommandExecutor { hot: _Handsontable.Core; commands: object; commonCallback: (() => void) | void; registerCommand(name: string, commandDescriptor: object): void; setCommonCallback(callback: () => void): void; execute(commandName: string, ...params: any[]): void; } interface Cursor { cellHeight: number; cellWidth: number; left: number; leftRelative: number; rootWindow: Window; scrollLeft: number; scrollTop: number; top: number; topRelative: number; type: string; fitsAbove(element: HTMLElement): boolean; fitsBelow(element: HTMLElement, viewportHeight?: number): boolean; fitsOnLeft(element: HTMLElement): boolean; fitsOnRight(element: HTMLElement, viewportHeight?: number): boolean; getSourceType(object: any): string; } interface Endpoints { plugin: plugins.ColumnSummary; hot: _Handsontable.Core; endpoints: Endpoint[]; settings: object | (() => void); settingsType: string; currentEndpoint: object | void; assignSetting(settings: object, endpoint: object, name: string, defaultValue: any): void; getAllEndpoints(): any[]; getEndpoint(index: number): object; parseSettings(settings: any[]): void; refreshAllEndpoints(init: boolean): void; refreshChangedEndpoints(changes: any[]): void; refreshEndpoint(endpoint: object): void; resetAllEndpoints(endpoints: any[], useOffset?: boolean): void; resetEndpointValue(endpoint: object, useOffset?: boolean): void; setEndpointValue(endpoint: object, source: string, render?: boolean): void; } interface Endpoint { destinationRow: number; destinationColumn: number; forceNumeric: boolean; reversedRowCoords: boolean; suppressDataTypeErrors: boolean; readOnly: boolean; roundFloat: boolean; ranges: number[][]; sourceColumn: number; type: 'sum' | 'min' | 'max' | 'count' | 'average' | 'custom'; result: number; customFunction: ((this: ColumnSummary, endpoint: Endpoint) => number) | null; } interface EventManager { context?: object; addEventListener(element: Element, eventName: string, callback: (event: Event) => void): () => void; removeEventListener(element: Element, eventName: string, callback: (event: Event) => void): void; clearEvents(): void; clear(): void; destroy(): void; fireEvent(element: Element, eventName: string): void; extendEvent(context: object, event: Event): any; } interface GhostTable { columns: number[]; container: HTMLElement | null; hot: _Handsontable.Core; injected: boolean; rows: object[]; samples: object | null; settings: object; addRow(row: number, samples: object): void; addColumn(column: number, samples: object): void; addColumnHeadersRow(samples: object): void; clean(): void; createCol(column: number): DocumentFragment; createColElement(column: number): HTMLElement; createColGroupsCol(): DocumentFragment; createColumnHeadersRow(): DocumentFragment; createContainer(className?: string): object; createRow(row: number): DocumentFragment; createTable(className?: string): object; getHeights(callback: (row: number, height: number) => void): void; getWidths(callback: (row: number, height: number) => void): void; getSettings(): object | void; getSetting(name: string): boolean | void; injectTable(parent?: HTMLElement | void): void; isHorizontal(): boolean; isVertical(): boolean; removeTable(): void; setSettings(settings: GridSettings): void; setSetting(name: string, value: any): void; } interface ItemsFactory { defaultOrderPattern: any[] | void; hot: _Handsontable.Core; predefinedItems: object; getItems(pattern?: any[] | object | boolean): any[]; setPredefinedItems(predefinedItems: any[]): void; } interface Menu { container: HTMLElement; eventManager: EventManager; hot: _Handsontable.Core; hotMenu: _Handsontable.Core; hotSubMenus: object; keyEvent: boolean; menuItems: any[] | null; offset: object; options: object; origOutsideClickDeselects: boolean | (() => void); parentMenu: Menu | null; close(closeParent?: boolean): void; closeSubMenu(row: number): void; closeAllSubMenus(): void; destroy(): void; executeCommand(event: Event): void; isOpened(): boolean; isSubMenu(): boolean; open(): void; openSubMenu(row: number): Menu | boolean; setMenuItems(menuItems: any[]): void; setOffset(area: string, offset?: number): void; selectLastCell(): void; selectFirstCell(): void; selectPrevCell(row: number, col: number): void; selectNextCell(row: number, col: number): void; setPosition(coords: Event | object): void; setPositionAboveCursor(cursor: Cursor): void; setPositionBelowCursor(cursor: Cursor): void; setPositionOnLeftOfCursor(cursor: Cursor): void; setPositionOnRightOfCursor(cursor: Cursor): void; } interface SamplesGenerator { allowDuplicates: boolean | null; customSampleCount: boolean | null; dataFactory: () => void; samples: object | null; generateColumnSamples(colRange: object, rowRange: object): object; generateRowSamples(rowRange: object | number, colRange: object): object; generateSamples(type: string, range: object, specifierRange: object | number): object; generateSample(type: string, range: object, specifierValue: number): object getSampleCount(): number; setAllowDuplicates(allowDuplicates: boolean): void; setSampleCount(sampleCount: number): void; } class Base { pluginName: string; pluginsInitializedCallback: any[]; isPluginsReady: boolean; enabled: boolean; initialized: boolean; hot: _Handsontable.Core; constructor(hotInstance?: _Handsontable.Core) addHook(name: string, callback: (...args: any[]) => any): void; callOnPluginsReady(callback: () => void): void; clearHooks(): void; destroy(): void; isEnabled(): boolean; disablePlugin(): void; enablePlugin(): void; updatePlugin(): void; init(): void; removeHooks(name: string): void; } interface Base { new(hotInstance?: _Handsontable.Core): Base; } interface AutoColumnSize extends Base { firstCalculation: boolean; ghostTable: GhostTable; inProgress: boolean; measuredRows: number; samplesGenerator: SamplesGenerator; calculateAllColumnsWidth(rowRange?: number | object): void; calculateColumnsWidth(colRange?: number | object, rowRange?: number | object, force?: boolean): void; calculateVisibleColumnsWidth(): void; clearCache(columns?: any[]): void; findColumnsWhereHeaderWasChanged(): any[]; getColumnWidth(col: number, defaultWidth?: number, keepMinimum?: boolean): number; getFirstVisibleColumn(): number; getLastVisibleColumn(): number; getSyncCalculationLimit(): number; isNeedRecalculate(): boolean; recalculateAllColumnsWidth(): void; } interface AutoRowSize extends Base { firstCalculation: boolean; heights: any[]; ghostTable: GhostTable; inProgress: boolean; measuredColumns: number; sampleGenerator: SamplesGenerator; calculateAllRowsHeight(colRange?: number | object): void; calculateRowsHeight(rowRange?: number | object, colRange?: number | object, force?: boolean): void; clearCache(): void; clearCacheByRange(range: number | object): void; findColumnsWhereHeaderWasChanged(): any[]; getColumnHeaderHeight(): number | void; getFirstVisibleRow(): number; getLastVisibleRow(): number; getRowHeight(col: number, defaultHeight?: number): number; getSyncCalculationLimit(): number; isNeedRecalculate(): boolean; recalculateAllRowsHeight(): void; } interface Autofill extends Base { addingStarted: boolean; autoInsertRow: boolean; directions: string[]; eventManager: EventManager; handleDraggedCells: number; mouseDownOnCellCorner: boolean; mouseDragOutside: boolean; } interface BindRowsWithHeaders extends Base { bindStrategy: BindStrategy; removeRows: any[]; } interface CollapsibleColumns extends Base { buttonEnabledList: Map<number, Set<number>>; collapsableCoordsList: Map<number, Set<number>>; collapsedColumns: number[]; collapsedSections: Map<number, any[]>; columnHeaderLevelCount: number; eventManager: EventManager; hiddenColumnsPlugin: object; nestedHeadersPlugin: object; settings: boolean | any[]; checkDependencies(): void; collapseAll(): void; collapseSection(coords: object): void; expandAll(): void; expandSection(coords: object): void; generateIndicator(col: number, TH: HTMLElement): HTMLElement; markSectionAs(state: string, row: number, column: number, recursive: boolean): void; meetsDependencies(): boolean; parseSettings(): void; toggleAllCollapsibleSections(action: string): void; toggleCollapsibleSection(coords: Array<object>, action: string): void; } interface ColumnSorting extends Base { clearSort(): void; destroy(): void; getSortConfig(column: number): void | columnSorting.Config getSortConfig(): Array<columnSorting.Config> isSorted(): boolean; setSortConfig(sortConfig?: columnSorting.Config | Array<columnSorting.Config>): void; sort(sortConfig?: columnSorting.Config): void; } interface ColumnSummary extends Base { endpoints: Endpoints | void; calculate(endpoint: Endpoints): void; calculateAverage(endpoint: Endpoints): number; calculateMinMax(endpoint: Endpoints, type: string): number; calculateSum(endpoint: Endpoints): void; countEmpty(rowRange: any[], col: number): number; countEntries(endpoint: Endpoints): number; getCellValue(row: number, col: number): string; getPartialMinMax(rowRange: any[], col: number, type: string): number; getPartialSum(rowRange: any[], col: number): number; } type CommentsRangeObject = { from: wot.CellCoords; to?: wot.CellCoords; } interface Comments extends Base { contextMenuEvent: boolean; displayDelay: number; editor: CommentEditor; eventManager: EventManager; mouseDown: boolean; range: CommentsRangeObject; timer: any; clearRange(): void; getComment(): string; getCommentAtCell(row: number, column: number): string | undefined; getCommentMeta(row: number, column: number, property: string): any; hide(): void; refreshEditor(force?: boolean): void; removeComment(forceRender?: boolean): void; removeCommentAtCell(row: number, col: number, forceRender?: boolean): void; setComment(value: string): void; setCommentAtCell(row: number, col: number, value: string): void; setRange(range: CommentsRangeObject): void; show(): boolean; showAtCell(row: number, col: number): boolean; targetIsCellWithComment(event: Event): boolean; targetIsCommentTextArea(event: Event): boolean; updateCommentMeta(row: number, column: number, metaObject: object): void; } interface CommentEditor { editor: HTMLElement; editorStyle: CSSStyleDeclaration; hidden: boolean; rootDocument: Document; setPosition(x: number, y: number): void; setSize(width: number, height: number): void; resetSize(): void; setReadOnlyState(state: boolean): void; show(): void; hide(): void; isVisible(): boolean; setValue(value?: string): void; getValue(): string; isFocused(): boolean; focus(): void; createEditor(): HTMLElement; getInputElement(): HTMLElement; destroy(): void; } interface ContextMenu extends Base { DEFAULT_ITEMS: contextMenu.PredefinedMenuItemKey[]; SEPARATOR: SeparatorObject; eventManager: EventManager; commandExecutor: CommandExecutor; itemsFactory: ItemsFactory | void; menu: Menu | void; close(): void; executeCommand(commandName: string, ...params: any[]): void; open(event: Event): void; } interface FocusableWrapper { eventManager: EventManager; listenersCount: WeakSet<HTMLElement>; mainElement: HTMLElement; rootDocument: Document; useSecondaryElement(): void; setFocusableElement(element: HTMLElement): void; getFocusableElement(): HTMLElement; focus(): void; } type PasteModeType = 'overwrite' | 'shift_down' | 'shift_right'; type RangeType = { startRow: number, startCol: number, endRow: number, endCol: number }; interface CopyPaste extends Base { columnsLimit: number; copyableRanges: any[]; focusableElement: FocusableWrapper; pasteMode: PasteModeType; rowsLimit: number; uiContainer: HTMLElement; copy(): void; cut(): void; getRangedCopyableData(ranges: RangeType[]): string; getRangedData(ranges: RangeType[]): any[]; paste(pastableText?: string, pastableHtml?: string): void; setCopyableText(): void; } interface CustomBorders extends Base { savedBorderSettings: any[]; setBorders(selection: Range[] | Array<[number, number, number, number]>, borderObject: object): void; getBorders(selection: Range[] | Array<[number, number, number, number]>): Array<[object]>; clearBorders(selection: Range[] | Array<[number, number, number, number]>): void; } interface DragToScroll extends Base { boundaries: object | void; callback: (() => void) | void; check(x: number, y: number): void; setBoundaries(boundaries: object): void; setCallback(callback: () => void): void; } type SeparatorObject = { name: string; } interface DropdownMenu extends Base { eventManager: EventManager; commandExecutor: CommandExecutor; itemsFactory: ItemsFactory | void; menu: Menu | void; SEPARATOR: SeparatorObject close(): void; executeCommand(commandName: string, ...params: any[]): void; open(event: Event): void; } interface ExportFile extends Base { downloadFile(format: string, options: object): void; exportAsString(format: string, options?: object): string; exportAsBlob(format: string, options?: object): Blob; } interface Filters extends Base { actionBarComponent: FiltersPlugin.ActionBarComponent | void; dropdownMenuPlugin: DropdownMenu | void; eventManager: EventManager; conditionComponent: FiltersPlugin.ConditionComponent | void; conditionCollection: FiltersPlugin.ConditionCollection | void; conditionUpdateObserver: FiltersPlugin.ConditionUpdateObserver | void; lastSelectedColumn?: number | void; trimRowsPlugin: TrimRows | void; valueComponent: FiltersPlugin.ValueComponent | void; addCondition(column: number, name: string, args: any[], operationId?: FiltersPlugin.OperationType): void; clearColumnSelection(): void; clearConditions(column?: number | void): void; getDataMapAtColumn(column: number): FiltersPlugin.CellLikeData[]; getSelectedColumn(): number | void; filter(): void; removeConditions(column: number): void; } interface DataProvider { changes: object; hot: _Handsontable.Core; clearChanges(): void; collectChanges(row: number, column: number, value: any): void; destroy(): void; getDataAtCell(row: number, column: number): any; getDataByRange(row1: number, column1: number, row2: number, column2: number): any[]; getRawDataAtCell(row: number, column: number): any; getRawDataByRange(row1: number, column1: number, row2: number, column2: number): any[]; getSourceDataByRange(row1: number, column1: number, row2: number, column2: number): any[]; getSourceDataAtCell(row: number, column: number): any; isInDataRange(row: number, column: number): boolean; updateSourceData(row: number, column: number, value: any): void; } interface AlterManager { sheet: Sheet; hot: _Handsontable.Core; dataProvider: DataProvider; matrix: Matrix; prepareAlter(action: string, args: any): void; triggerAlter(action: string, args: any): void; destroy(): void; } interface Matrix { data: any[]; cellReferences: any[]; getCellAt(row: number, column: number): CellValue | void; getOutOfDateCells(): any[]; add(cellValue: CellValue | object): void; remove(cellValue: CellValue | object | any[]): void; getDependencies(cellCoord: object): void; registerCellRef(cellReference: CellReference | object): void; removeCellRefsAtRange(start: object, end: object): any[]; reset(): void; } interface BaseCell { columnAbsolute: boolean; columnOffset: number; rowAbsolute: boolean; rowOffset: number; isEqual(cell: BaseCell): boolean; toString(): string; translateTo(rowOffset: number, columnOffset: number): void; } interface CellReference extends BaseCell { } interface CellValue extends BaseCell { error: string | void; precedents: any[]; state: string; value: any; addPrecedent(cellReference: CellReference): void; clearPrecedents(): void; getError(): string | void; getPrecedents(): any[]; getValue(): any; hasError(): boolean; hasPrecedent(cellReference: CellReference): boolean; hasPrecedents(): boolean; isState(state: number): boolean; removePrecedent(cellReference: CellReference): void; setError(error: string): void; setState(state: number): void; setValue(value: any): void; } type Parser = {}; interface Sheet { alterManager: AlterManager dataProvider: DataProvider; hot: _Handsontable.Core; matrix: Matrix; parser: Parser; applyChanges(row: number, column: number, newValue: any): void; destroy(): void; getCellAt(row: number, column: number): CellValue | void; getCellDependencies(row: number, column: number): any[]; getVariable(name: string): any; parseExpression(cellValue: CellValue | object, formula: string): void; recalculate(): void; recalculateFull(): void; recalculateOptimized(): void; setVariable(name: string, value: any): void; } interface Stack { items: any[]; isEmpty(): boolean; peek(): any; pop(): any; push(items: any): void; size(): number; } interface UndoRedoSnapshot { sheet: Sheet; stack: Stack; destroy(): void; restore(): void; save(axis: string, index: number, amount: number): void; } namespace UndoRedoAction { type Change = { actionType: 'change'; changes: CellChange[]; selected: [number, number][] }; type InsertRow = { actionType: 'insert_row'; amount: number; index: number; } type RemoveRow = { actionType: 'remove_row'; index: number; data: CellValue[][]; } type InsertCol = { actionType: 'insert_col'; amount: number; index: number; } type RemoveCol = { actionType: 'remove_col'; amount: number; columnPositions: number[]; index: number; indexes: number[]; headers: string[]; data: CellValue[][]; } type Filter = { actionType: 'filter'; conditionsStack: FiltersPlugin.ColumnConditions[]; } } type UndoRedoAction = UndoRedoAction.Change | UndoRedoAction.InsertRow | UndoRedoAction.RemoveRow | UndoRedoAction.InsertCol | UndoRedoAction.RemoveCol | UndoRedoAction.Filter; interface Formulas extends Base { dataProvider: DataProvider; eventManager: EventManager; sheet: Sheet; undoRedoSnapshot: UndoRedoSnapshot; getCellValue(row: number, column: number): any; getVariable(name: string): any; hasComputedCellValue(row: number, column: number): boolean; recalculate(): void; recalculateFull(): void; recalculateOptimized(): void; setVariable(name: string, value: any): void; } interface HeaderTooltips extends Base { settings: boolean | object; parseSettings(): void; } interface HiddenColumns extends Base { isHidden(column: number): boolean; hideColumn(column: number): void; hideColumns(columns: number[]): void; showColumn(column: number): void; showColumns(columns: number[]): void; getHiddenColumns(): number[]; isValidConfig(hiddenColumns: number[]): boolean; } interface HiddenRows extends Base { isHidden(row: number): boolean; hideRow(row: number): void; hideRows(rows: number[]): void; showRow(row: number): void; showRows(rows: number[]): void; getHiddenRows(): number[]; isValidConfig(hiddenRows: number[]): boolean; } interface ManualColumnFreeze extends Base { freezeColumn(column: number): void; unfreezeColumn(column: number): void; } interface MultiColumnSorting extends Base { clearSort(): void; destroy(): void; getSortConfig(column: number): void | columnSorting.Config; getSortConfig(): Array<columnSorting.Config>; isSorted(): boolean; setSortConfig(sortConfig?: columnSorting.Config | Array<columnSorting.Config>): void; sort(sortConfig?: columnSorting.Config | Array<columnSorting.Config>): void; } namespace moveUI { interface BaseUI { hot: _Handsontable.Core; state: number; appendTo(wrapper: HTMLElement): void; build(): void; destroy(): void; getOffset(): object; getPosition(): object; getSize(): object; isAppended(): boolean; isBuilt(): boolean; setOffset(top: number, left: number): void; setPosition(top: number, left: number): void; setSize(width: number, height: number): void; } interface BacklightUI extends BaseUI { } interface GuidelineUI extends BaseUI { } } interface MergeCells extends Base { mergedCellsCollection: MergeCellsPlugin.MergedCellsCollection; autofillCalculations: MergeCellsPlugin.AutofillCalculations; selectionCalculations: MergeCellsPlugin.SelectionCalculations; clearCollections(): void; mergeSelection(cellRange: wot.CellRange): void; merge(startRow: number, startColumn: number, endRow: number, endColumn: number): void; unmerge(startRow: number, startColumn: number, endRow: number, endColumn: number): void; } namespace MergeCellsPlugin { interface AutofillCalculations { plugin: MergeCells; mergedCellsCollection: MergeCellsPlugin.MergedCellsCollection; currentFillData: object; correctSelectionAreaSize(selectionArea: number[]): void; getDirection(selectionArea: number[], finalArea: number[]): string; snapDragArea(baseArea: number[], dragArea: number[], dragDirection: string, foundMergedCells: MergeCellsPlugin.MergedCellCoords[]): number[]; recreateAfterDataPopulation(changes: any[]): void; dragAreaOverlapsCollections(baseArea: number[], fullArea: number[], direction: string): boolean; } interface SelectionCalculations { snapDelta(delta: object, selectionRange: wot.CellRange, mergedCell: MergeCellsPlugin.MergedCellCoords): void; getUpdatedSelectionRange(oldSelectionRange: wot.CellRange, delta: object): wot.CellRange; } interface MergedCellCoords { row: number; col: number; rowspan: number; colspan: number; removed: boolean; normalize(hotInstance: _Handsontable.Core): void; includes(row: number, column: number): boolean; includesHorizontally(column: number): boolean; includesVertically(row: number): boolean; shift(shiftVector: number[], indexOfChange: number): boolean; isFarther(mergedCell: MergeCellsPlugin.MergedCellCoords, direction: string): boolean | void; getLastRow(): number; getLastColumn(): number; getRange(): wot.CellRange; } interface MergedCellsCollection { plugin: MergeCells; mergedCells: MergeCellsPlugin.MergedCellCoords[]; hot: _Handsontable.Core; get(row: number, column: number): MergeCellsPlugin.MergedCellCoords | boolean; getByRange(range: wot.CellRange | object): MergeCellsPlugin.MergedCellCoords | boolean; getWithinRange(range: wot.CellRange | object, countPartials: boolean): MergeCellsPlugin.MergedCellCoords[] | boolean; add(mergedCellInfo: object): MergeCellsPlugin.MergedCellCoords | boolean; remove(row: number, column: number): MergeCellsPlugin.MergedCellCoords | boolean; clear(): void; isOverlapping(mergedCell: MergeCellsPlugin.MergedCellCoords): boolean; isFirstRenderableMergedCell(row: number, column: number): boolean; shiftCollections(direction: string, index: number, count: number): void; } } interface ManualColumnMove extends Base { backlight: moveUI.BacklightUI; eventManager: EventManager; guideline: moveUI.GuidelineUI; moveColumn(column: number, finalIndex: number): boolean; moveColumns(columns: number[], finalIndex: number): boolean; dragColumn(column: number, dropIndex: number): boolean; dragColumns(columns: number[], dropIndex: number): boolean; isMovePossible(columns: number[], finalIndex: number): boolean; } interface ManualColumnResize extends Base { autoresizeTimeout: (() => void) | void; currentCol: number | void; currentTH: HTMLElement | void; currentWidth: number | void; dblclick: number; eventManager: EventManager; guide: HTMLElement; handle: HTMLElement; manualColumnWidths: any[]; newSize: number | void; pressed: _Handsontable.Core | void; selectedCols: any[]; startOffset: number | void; startWidth: number | void; startY: number | void; checkIfColumnHeader(element: HTMLElement): boolean; clearManualSize(column: number): void; getClosestTHParent(element: HTMLEle