import type { IArea, Table, TableTheme } from '../../treb-base-types/src/index'; import type { SerializedNamedExpression, SerializedSheet, SerializedMacroFunction, SerializedNamed } from '../../treb-data-model/src/index'; export declare enum SaveFileType { json = "json", treb = "treb", trebjson = "treb.json", csv = "csv", tsv = "tsv", xlsx = "xlsx" } /** * this is the document type used by TREB. it has a lot of small variations * for historical reasons and backwards compatibility. usually it's preferable * to let TREB create and manage these documents rather than creating them * manually. */ export interface TREBDocument { /** app name, as identifier */ app: string; /** app version. we'll warn if you use a file from a newer version */ version: string; /** * revision number. this is a value that increments on any document change, * useful for checking if a document is "dirty". */ revision?: number; /** document name */ name?: string; /** * opaque user data. we don't read or parse this, but applications can * use it to store arbitrary data. */ user_data?: unknown; /** * per-sheet data. this should be an array, but for historical reasons * we still support a single sheet outside of an array. */ sheet_data?: SerializedSheet | SerializedSheet[]; /** document decimal mark */ decimal_mark?: '.' | ','; /** active sheet. if unset we'll show the first un-hidden sheet */ active_sheet?: number; /** * this document includes rendered calculated values. using this lets the * app show a document faster, without requiring an initial calculation. */ rendered_values?: boolean; /** document named ranges @deprecated */ named_ranges?: Record; /** document named expressions @deprecated */ named_expressions?: SerializedNamedExpression[]; /** * new consolidated named ranges & expressions */ named?: SerializedNamed[]; /** document macro functions */ macro_functions?: SerializedMacroFunction[]; /** document tables */ tables?: Table[]; /** document shared resources (usually images) */ shared_resources?: Record; } export interface ResizeEvent { type: 'resize'; } export declare enum LoadSource { DRAG_AND_DROP = "drag-and-drop", LOCAL_FILE = "local-file", NETWORK_FILE = "network-file", LOCAL_STORAGE = "local-storage", INLINE_DOCUMENT = "inline-document", UNDO = "undo" } export declare enum LoadType { TREB = "treb", CSV = "csv", XLSX = "xlsx" } /** * This event is sent when the view changes -- at the moment, that only * means the view scale has been changed. We might use it in the future * for other things. * * @privateRemarks * not sure if this should be combined with resize -- the only reason it's * not is because resize implies some structural/layout changes that require * changing the document, but scale does not. open to suggestions though. */ export interface ViewChangeEvent { type: 'view-change'; } /** * this event is sent when the theme is updated. it's intended for any * subscribers to update corresponding colors or fonts. */ export interface ThemeChangeEvent { type: 'theme-change'; } /** * This event is sent when a document is loaded, and also on undo. The * source field can help determine if it was triggered by an undo operation. */ export interface DocumentLoadEvent { type: 'load'; source?: LoadSource; file_type?: LoadType; /** adding a path for tui; consider this opaque data */ path?: string; } /** * This event is sent when the document is reset. * * @privateRemarks * we should remove this in favor of the Load event, plus a suitable load source. */ export interface DocumentResetEvent { type: 'reset'; } /** * This event is sent when data in the spreadsheet changes, but there are * no structural or cell changes. For example, the `RAND` function returns * a new value on every calculation, but the function itself does not change. */ export interface DataChangeEvent { type: 'data'; } /** * This event is sent when the value of a cell changes, or when the document * structure chages. Structure changes might be inserting/deleting rows or * columns, or adding/removing a sheet. */ export interface DocumentChangeEvent { type: 'document-change'; } /** * This event is sent when the spreadsheet selection changes. Use the * `GetSelection` method to get the address of the current selection. */ export interface SelectionEvent { type: 'selection'; reason?: 'sheet-change'; } /** * this event is used when an annotation is selected. we're not changing * the original selection event, because I don't want to break anything. */ export interface AnnotationSelectionEvent { type: 'annotation-selection'; } /** * This event is sent when the focused view changes, if you have more * than one view. */ export interface FocusViewEvent { type: 'focus-view'; } /** event sent when the loaded language changes (FIXME: should we include the locale?) */ export interface LanguageChangeEvent { type: 'language-change'; } /** * EmbeddedSheetEvent is a discriminated union. Switch on the `type` field * of the event. */ export type EmbeddedSheetEvent = DocumentChangeEvent | DocumentResetEvent | DocumentLoadEvent | ThemeChangeEvent | ViewChangeEvent | DataChangeEvent | FocusViewEvent | SelectionEvent | ResizeEvent | LanguageChangeEvent | AnnotationSelectionEvent; /** * options when inserting a table into a sheet */ export interface InsertTableOptions { /** * include a totals/summation row. this impacts the layout and styling: * totals row have a unique style and are not included when sorting. * defaults to true. */ totals_row?: boolean; /** * show a sort button in table headers. defaults to true. */ sortable?: boolean; /** * base theme color, or a set of styles for the table. useful values for * theme color are accent colors 4 (the default), 5, 7 and 9. */ theme?: number | TableTheme; }