@sheetxl/models
Version:
Models - A Headless javascript spreadsheet library.
183 lines • 7.18 kB
TypeScript
import { SetOptions } from "@sheetxl/common";
import { ListenerEvent, IListenerSource } from "../listener";
import { ITransactionStack } from "../transaction";
import { RunCoords } from "../run/RunUtils";
import { ISheetStyle, ICellHeader, CellHeaderJSON, CellsHeaderAddressValuePair, CellHeaderUpdate, CellHeaderRangeAddress, HeaderOrientation, AutoFitOptions, ICellHeaderRange } from "../cell";
import { ISheetModel } from "./ISheetModel";
/**
* Run of headers with min/max embedded. (This prevents rows/columns from having min/max fields but makes persisted json a bit cleaner)
*/
export interface SheetHeaderJSON<P extends CellHeaderJSON> {
headers: P[];
}
export interface SheetHeadersEvent extends ListenerEvent<ISheetHeadersModel<any, any, any>> {
runs: RunCoords[];
}
export declare enum SheetHeadersListenerType {
Header = "header",
HeaderSize = "headerSize"
}
export interface SetHeaderOptions extends SetOptions {
}
export interface ISheetHeadersModel<T extends ICellHeader, P extends CellHeaderJSON, U extends CellHeaderUpdate> extends ITransactionStack, IListenerSource<SheetHeadersEvent> {
/**
* Sets the headers. This supports setting values as a batch.
* Note -
* When setting headers the cells references by this sheet will not update. To ensure they are updated you must also
* call setCellPairs with the range of the header.
*/
setHeaderPairs(pairs: CellsHeaderAddressValuePair<U>[], options?: SetHeaderOptions): RunCoords[] | null;
/**
* Returns a range of cells for the specified range.
* These allow for interaction with the cells.
*
* @remarks
* If no address is specified then this will use the intersection of the cell
* bounds and the selection bounds.
* @see {@link ISheetHeaderRange}
*/
getRange(address?: CellHeaderRangeAddress): ISheetHeaderRange<U>;
/**
* Simplified api provided to be similar to range update.
* @remarks
* This only supports one range at a time but offers a few flavors
* * sheetXl.getWorkbook().getSheet().getColumnHeaders().update(5, { size: '100px' }); // 0-based index
* * sheetXl.getWorkbook().getSheet().getColumnHeaders().update({ min: 3, max: 4 }, { size: '100px' }); // 0-based index
* * sheetXl.getWorkbook().getSheet().getColumnHeaders().update('e:f', { size: '100px' }); // 1-based a1 style
* * sheetXl.getWorkbook().getSheet().getColumnHeaders().update({ colStart: 3, colEnd: 4 }, { size: '100px' }); // 0-based index
* * sheetXl.getWorkbook().getSheet().getRowHeaders().update('5:7', { size: '100px' }); // 1-based a1 style
* * sheetXl.getWorkbook().getSheet().getRowHeaders().update({ rowStart: 3, rowEnd: 4 }, { size: '100px' }); // 0-based index
*/
update(address: CellHeaderRangeAddress, update: ICellHeader | U | null, options?: SetHeaderOptions): void;
/**
* Returns the header at a given offset. Will only return null for invalid header offset. To get a list of headers use @see {@link getRange}
*/
getHeader(offset: number): T;
/**
* Returns a displayable title for the given index.
* @param index
*/
getHeaderText(index: number): string;
/**
* Return the bounds for headers that contain styling.
* @remarks
* * This is NOT the last cell that may have data or has been resized.
* * This also has nothing to do with the selection bounds.
*/
getHeaderBounds(): RunCoords;
/**
* The maximum cell bounds allowed for the header.
* @remarks
*/
getMaxHeaderBounds(): RunCoords;
/**
* Set the header size to the 'best fit' based on the data.
* If the span has no data then the defaultSize will be used.
* @param addresses
* @param options
*/
autoFit(addresses: CellHeaderRangeAddress[] | CellHeaderRangeAddress, options?: AutoFitOptions): void;
/**
* Returns if the header is readonly.
* @defaultValue false
*/
isProtected(): boolean;
/**
* All header sizes are returned in pixels. This is done
* by multiplying the scaleFactor by the size on the cellHeader.
*/
scaleFactor(): number;
/**
* Finds the offset in pixels for the given header index
* @param index
*/
findOffset(index: number): number;
/**
* Finds the index for the given header offset
* @param offset
*/
findIndex(offset: number): number;
/**
* Returns the size of the header in pixels. If a second argument is passed it
* will be the size of all the headers within the range.
* Note - It is expected that indexFrom will always be less than or equal to indexTo
*/
getHeaderSize(indexFrom: number, indexTo?: number): number;
/**
* The default header size if not adjusted.
*/
getDefaultHeaderSize(): number;
/**
* The maximum size of the header in native units.
* @defaultValue unbounded
*/
getMaxHeaderSize(): number;
/**
* The minimum size of the header in native units.
* @defaultValue 0.
*/
getMinHeaderSize(): number;
/**
* This is a very specific optimization function. When
* hiding many headers instead of scanning we can just skip.
* If this returns zero there are no hidden headers immediately
* following this one. If a count of 1 then only this header is hidden
* @param index
* @param forward searches forward. defaults to true
* @returns count
*/
hiddenHeadersAt(index: number, forward?: boolean): number;
/**
* Insert new blank headers at the given index
* @param index
* @param amount
*/
insertHeaders(index: number, amount: number): void;
/**
* Remove headers at the given index
* @param index
* @param amount
*/
removeHeaders(index: number, amount: number): void;
/**
* Will return true if any of the headers have the isCustomFormats flag set to true
*/
hasCustomFormats(): boolean;
/**
* Will return true if any of the headers have a custom style (not Normal)
*/
hasCustomStyles(): boolean;
/**
* Returns the sheet style used for the header.
*/
sheetStyle(): ISheetStyle;
/**
* Returns the sheet model used for the header.
*/
sheet(): ISheetModel;
/**
* The direction of the headers
*/
orientation(): HeaderOrientation;
toJSON(): SheetHeaderJSON<P>;
fromJSON(json: SheetHeaderJSON<P>): void;
close(): void;
}
export interface ISheetHeaderRange<U extends CellHeaderUpdate> extends ICellHeaderRange {
/**
* Provides a convenient method for setting values with a range of calls.
* @remarks
* If an array is passed the values will be in row-major order and will
* repeat if the range is larger than the array
*/
update(values: ICellHeader | U | null, options?: SetHeaderOptions): void;
/**
* @see {@link ISheetHeadersModel.autoFit}
*/
autoFit(options?: AutoFitOptions): void;
/**
* Used for runtime reflection.
*/
readonly isSheetHeaderRange: true;
}
//# sourceMappingURL=ISheetHeadersModel.d.ts.map