import type { Cell } from '@fortune-sheet/core'; import type { WorkSpreadsheetSheet } from '../work-types'; import { type SpreadsheetCellRange } from './spreadsheet-cell-range'; import { type SpreadsheetSortAppearanceKind, type SpreadsheetSortAppearancePosition, type SpreadsheetSortAppearanceRows, type SpreadsheetSortIconTarget } from './spreadsheet-sort-appearance'; import { type SpreadsheetSortTextOptions } from './spreadsheet-sort-collation'; import { type SpreadsheetSortCustomList } from './spreadsheet-sort-custom-list'; export type { SpreadsheetSortAppearanceRows, SpreadsheetSortCellAppearance, SpreadsheetSortIconTarget, } from './spreadsheet-sort-appearance'; export type { SpreadsheetSortTextMethod, SpreadsheetSortTextOptions, } from './spreadsheet-sort-collation'; export type { SpreadsheetSortCustomList } from './spreadsheet-sort-custom-list'; export declare const MAX_SPREADSHEET_SORT_KEYS = 64; export declare const MAX_SPREADSHEET_SORT_CELLS = 1000000; export type SpreadsheetSortDirection = 'ascending' | 'descending'; export type SpreadsheetSortOrientation = 'top-to-bottom' | 'left-to-right'; export type SpreadsheetSortKey = { color?: never; customList?: never; direction: SpreadsheetSortDirection; icon?: never; index: number; position?: never; sortOn?: never; } | { color?: never; customList: readonly string[]; direction?: never; icon?: never; index: number; position?: never; sortOn?: never; } | { color: string | null; customList?: never; direction?: never; icon?: never; index: number; position: SpreadsheetSortAppearancePosition; sortOn: Exclude; } | { color?: never; customList?: never; direction?: never; icon: SpreadsheetSortIconTarget; index: number; position: SpreadsheetSortAppearancePosition; sortOn: 'icon'; }; export interface SpreadsheetSortOptions extends SpreadsheetSortTextOptions { orientation: SpreadsheetSortOrientation; } export interface SpreadsheetSortDialogValue extends SpreadsheetSortOptions { hasHeader: boolean; keys: SpreadsheetSortKey[]; } export interface SpreadsheetSortTarget { activeColumn: number; activeRow: number; range: SpreadsheetCellRange; scope?: SpreadsheetSortOwnedScope; } export type SpreadsheetSortOwnedScope = { hasHeader: true; kind: 'auto-filter'; } | { hasHeader: boolean; kind: 'table'; tableId: string; }; export interface SpreadsheetSortOwnedRange { range: SpreadsheetCellRange; scope: SpreadsheetSortOwnedScope; } export interface SpreadsheetSortRangeCandidate { available: boolean; range: SpreadsheetCellRange; scope?: SpreadsheetSortOwnedScope; } export type SpreadsheetSortIntent = { type: 'custom'; } | { type: 'quick'; direction: SpreadsheetSortDirection; }; export interface SpreadsheetSortOpenRequest { activeColumn: number; activeRow: number; expanded?: SpreadsheetSortRangeCandidate; intent: SpreadsheetSortIntent; selected: SpreadsheetSortRangeCandidate; sheetId: string; } export interface SpreadsheetSortRangePlan { expandedRange: SpreadsheetCellRange | null; selectedRange: SpreadsheetCellRange; } export type SpreadsheetSortRangeChoice = 'expand' | 'selection'; export interface SpreadsheetSortRangeDialogSource { canSortExpandedRange: boolean; canSortSelection: boolean; expandedRangeReference: string; ownedScope?: SpreadsheetSortOwnedScope; selectedRangeReference: string; sheetName: string; } export type SpreadsheetSortRequest = Omit & Partial & { range: SpreadsheetCellRange; scope?: SpreadsheetSortOwnedScope; sheetId: string; }; export interface SpreadsheetSortNormalizedRequest extends SpreadsheetSortDialogValue { range: SpreadsheetCellRange; scope?: SpreadsheetSortOwnedScope; sheetId: string; } export interface SpreadsheetSortField { index: number; label: string; } export interface SpreadsheetSortDialogSource { activeRow: number; appearanceRows: SpreadsheetSortAppearanceRows; columns: SpreadsheetSortField[]; customLists: readonly SpreadsheetSortCustomList[]; range: SpreadsheetCellRange; rangeReference: string; rows: SpreadsheetSortField[]; scope?: SpreadsheetSortOwnedScope; sheetId: string; sheetName: string; value: SpreadsheetSortDialogValue; } export type SpreadsheetSortErrorCode = 'column-out-of-range' | 'duplicate-key' | 'formula-reference-out-of-range' | 'invalid-appearance' | 'invalid-case-sensitivity' | 'invalid-custom-list' | 'invalid-direction' | 'invalid-header' | 'invalid-matrix' | 'invalid-orientation' | 'invalid-range' | 'invalid-scope' | 'invalid-text-method' | 'missing-key' | 'not-enough-columns' | 'not-enough-rows' | 'range-too-large' | 'row-out-of-range' | 'too-many-keys' | 'unsupported-text-method' | 'unsupported-linked-cell'; export type SpreadsheetSortValidationResult = { ok: true; request: SpreadsheetSortNormalizedRequest; } | { code: SpreadsheetSortErrorCode; message: string; ok: false; }; export type SpreadsheetSortResult = { ok: true; rows: (Cell | null)[][]; sourceIndexes: number[]; } | { code: SpreadsheetSortErrorCode; message: string; ok: false; }; export declare function createSpreadsheetSortRangePlan(sheet: WorkSpreadsheetSheet, selectedRange: SpreadsheetCellRange): SpreadsheetSortRangePlan | null; export declare function createSpreadsheetSortRangeDialogSource(sheetName: string, request: SpreadsheetSortOpenRequest): SpreadsheetSortRangeDialogSource | null; export declare function createSpreadsheetSortDialogSource(sheetId: string, sheetName: string, target: SpreadsheetSortTarget, rows: readonly (readonly (Cell | null)[])[], customLists?: readonly SpreadsheetSortCustomList[], appearanceRows?: SpreadsheetSortAppearanceRows): SpreadsheetSortDialogSource | null; export declare function spreadsheetSortRowsMatchRange(rows: readonly (readonly (Cell | null)[])[], range: SpreadsheetCellRange): boolean; export declare function spreadsheetSortRowsFromSheet(sheet: WorkSpreadsheetSheet, range: SpreadsheetCellRange): (Cell | null)[][] | null; export declare function spreadsheetSortOwnedRangeForExactRange(sheet: WorkSpreadsheetSheet, range: SpreadsheetCellRange): SpreadsheetSortOwnedRange | null; export declare function validateSpreadsheetSortRequest(request: SpreadsheetSortRequest): SpreadsheetSortValidationResult; export declare function spreadsheetSortFailureMessage(result: SpreadsheetSortValidationResult | SpreadsheetSortResult): string | null; export declare function spreadsheetSortAppearanceRowsMatch(rows: readonly (readonly (Cell | null)[])[], appearances: SpreadsheetSortAppearanceRows): boolean; export declare function spreadsheetSortError(code: SpreadsheetSortErrorCode): Extract;