@a3s-lab/office 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/COLLABORATION_ROADMAP.md +15 -5
  2. package/README.md +34 -1
  3. package/dist/0~6090.js +7 -8
  4. package/dist/0~spreadsheet-editor.js +6869 -3427
  5. package/dist/0~work-office-diagnostics.js +1 -1
  6. package/dist/{4476.js → 2180.js} +404 -35
  7. package/dist/4104.js +698 -41
  8. package/dist/5184.js +1 -1
  9. package/dist/8715.js +156 -156
  10. package/dist/core.js +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/internal/collaboration/office-spreadsheet-collaboration-records.d.ts +2 -0
  13. package/dist/internal/collaboration/office-spreadsheet-collaboration-validation-support.d.ts +6 -0
  14. package/dist/internal/features/work/editors/spreadsheet-auto-filter.d.ts +1 -0
  15. package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +44 -1
  16. package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +28 -0
  17. package/dist/internal/features/work/editors/spreadsheet-data-validation-command.d.ts +3 -0
  18. package/dist/internal/features/work/editors/spreadsheet-data-validation-dialog.d.ts +9 -0
  19. package/dist/internal/features/work/editors/spreadsheet-data-validation.d.ts +50 -0
  20. package/dist/internal/features/work/editors/spreadsheet-editor-ribbon.d.ts +4 -2
  21. package/dist/internal/features/work/editors/spreadsheet-editor-support.d.ts +1 -0
  22. package/dist/internal/features/work/editors/spreadsheet-hyperlink-command.d.ts +3 -0
  23. package/dist/internal/features/work/editors/spreadsheet-hyperlink-dialog.d.ts +9 -0
  24. package/dist/internal/features/work/editors/spreadsheet-hyperlink.d.ts +44 -0
  25. package/dist/internal/features/work/editors/spreadsheet-table-command.d.ts +3 -0
  26. package/dist/internal/features/work/editors/spreadsheet-table-conversion.d.ts +7 -0
  27. package/dist/internal/features/work/editors/spreadsheet-table-dialog.d.ts +8 -0
  28. package/dist/internal/features/work/editors/spreadsheet-table-limits.d.ts +1 -0
  29. package/dist/internal/features/work/editors/spreadsheet-table-reconciliation.d.ts +21 -0
  30. package/dist/internal/features/work/editors/spreadsheet-table-render.d.ts +16 -0
  31. package/dist/internal/features/work/editors/spreadsheet-table-ribbon.d.ts +8 -0
  32. package/dist/internal/features/work/editors/spreadsheet-table-style.d.ts +31 -0
  33. package/dist/internal/features/work/editors/spreadsheet-table.d.ts +55 -0
  34. package/dist/internal/features/work/editors/use-spreadsheet-data-validation.d.ts +23 -0
  35. package/dist/internal/features/work/editors/use-spreadsheet-hyperlink.d.ts +24 -0
  36. package/dist/internal/features/work/editors/use-spreadsheet-table.d.ts +23 -0
  37. package/dist/internal/features/work/work-spreadsheet-data-validation.d.ts +2 -0
  38. package/dist/internal/features/work/work-types.d.ts +100 -0
  39. package/dist/internal/features/work/work-xlsx-interop.d.ts +2 -0
  40. package/dist/internal/features/work/work-xlsx-table-filters.d.ts +3 -0
  41. package/dist/internal/features/work/work-xlsx-tables.d.ts +4 -0
  42. package/dist/office-kernel.wasm +0 -0
  43. package/dist/styles.css +486 -0
  44. package/dist/work-spreadsheet-package-scan.worker.js +3 -2
  45. package/docs/latest/en/browser-editor-architecture.md +43 -0
  46. package/package.json +12 -3
@@ -0,0 +1,44 @@
1
+ import type { WorkSpreadsheetContent } from '../work-types';
2
+ export type SpreadsheetHyperlinkType = 'webpage' | 'cellrange' | 'sheet';
3
+ export interface SpreadsheetHyperlinkTarget {
4
+ linkType: SpreadsheetHyperlinkType;
5
+ linkAddress: string;
6
+ }
7
+ export interface SpreadsheetHyperlinkCell {
8
+ sheetId: string;
9
+ row: number;
10
+ column: number;
11
+ }
12
+ export interface SpreadsheetHyperlinkRequest extends SpreadsheetHyperlinkCell {
13
+ linkType: SpreadsheetHyperlinkType;
14
+ linkAddress: string;
15
+ displayText?: string;
16
+ }
17
+ export type SpreadsheetHyperlinkDialogValue = Pick<SpreadsheetHyperlinkRequest, 'linkType' | 'linkAddress' | 'displayText'>;
18
+ export type SpreadsheetHyperlinkErrorCode = 'empty-address' | 'formula-display-text' | 'invalid-cell-range' | 'invalid-display-text' | 'invalid-web-address' | 'pivot-cell' | 'protected-cell' | 'source-out-of-bounds' | 'source-sheet-not-found' | 'target-out-of-bounds' | 'target-sheet-hidden' | 'target-sheet-not-found' | 'unsupported-link-type';
19
+ export type SpreadsheetHyperlinkValidation = {
20
+ ok: true;
21
+ target: SpreadsheetHyperlinkTarget;
22
+ displayText?: string;
23
+ } | {
24
+ ok: false;
25
+ code: SpreadsheetHyperlinkErrorCode;
26
+ message: string;
27
+ };
28
+ export interface SpreadsheetHyperlinkDialogSource extends SpreadsheetHyperlinkCell {
29
+ sheetName: string;
30
+ cellReference: string;
31
+ displayText: string;
32
+ displayTextEditable: boolean;
33
+ hasHyperlink: boolean;
34
+ link: SpreadsheetHyperlinkTarget | null;
35
+ sheetOptions: Array<{
36
+ id: string;
37
+ name: string;
38
+ }>;
39
+ }
40
+ export declare function validateSpreadsheetHyperlinkRequest(content: WorkSpreadsheetContent, request: SpreadsheetHyperlinkRequest): SpreadsheetHyperlinkValidation;
41
+ export declare function applySpreadsheetHyperlink(content: WorkSpreadsheetContent, request: SpreadsheetHyperlinkRequest): WorkSpreadsheetContent | null;
42
+ export declare function removeSpreadsheetHyperlink(content: WorkSpreadsheetContent, target: SpreadsheetHyperlinkCell): WorkSpreadsheetContent | null;
43
+ export declare function canRemoveSpreadsheetHyperlink(content: WorkSpreadsheetContent, target: SpreadsheetHyperlinkCell): boolean;
44
+ export declare function createSpreadsheetHyperlinkDialogSource(content: WorkSpreadsheetContent, target: SpreadsheetHyperlinkCell): SpreadsheetHyperlinkDialogSource | null;
@@ -0,0 +1,3 @@
1
+ import type { SpreadsheetCommandContext, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
2
+ import { type OfficeEditorExtension } from './office-editor-extension';
3
+ export declare function createSpreadsheetTableExtension(): OfficeEditorExtension<SpreadsheetCommandContext, SpreadsheetEditorCommands>;
@@ -0,0 +1,7 @@
1
+ import type { WorkSpreadsheetContent, WorkSpreadsheetTable } from '../work-types';
2
+ export declare function canMaterializeSpreadsheetTableAppearance(table: WorkSpreadsheetTable): boolean;
3
+ /**
4
+ * Convert to Range removes ListObject semantics, so the render-only style must
5
+ * become native cell formatting to preserve the appearance users confirmed.
6
+ */
7
+ export declare function materializeSpreadsheetTableAppearance(content: WorkSpreadsheetContent, sheetId: string, table: WorkSpreadsheetTable): WorkSpreadsheetContent | null;
@@ -0,0 +1,8 @@
1
+ import type { SpreadsheetTableDialogSource, SpreadsheetTableDialogValue } from './spreadsheet-table';
2
+ export declare function SpreadsheetTableDialog({ source, restoreFocusTarget, onApply, onClose, onValidate, }: {
3
+ source: SpreadsheetTableDialogSource;
4
+ restoreFocusTarget: () => HTMLElement | null;
5
+ onApply: (value: SpreadsheetTableDialogValue) => boolean;
6
+ onClose: () => void;
7
+ onValidate: (value: SpreadsheetTableDialogValue) => string | null;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const MAX_SPREADSHEET_TABLE_CELLS = 100000;
@@ -0,0 +1,21 @@
1
+ import type { Op } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetSheet } from '../work-types';
3
+ export type SpreadsheetTableStructureChange = {
4
+ axis: 'column' | 'row';
5
+ count: number;
6
+ direction: 'lefttop' | 'rightbottom';
7
+ index: number;
8
+ kind: 'insert';
9
+ } | {
10
+ axis: 'column' | 'row';
11
+ end: number;
12
+ kind: 'delete';
13
+ start: number;
14
+ };
15
+ export declare function canApplySpreadsheetTableStructureChange(sheet: WorkSpreadsheetSheet | undefined, change: SpreadsheetTableStructureChange): boolean;
16
+ /**
17
+ * Reconciles Fortune's cell and whole-row/column operation stream with the
18
+ * browser-owned ListObject model. Fortune preserves unknown sheet metadata,
19
+ * but it cannot update table ranges, column identities, or filter offsets.
20
+ */
21
+ export declare function reconcileSpreadsheetTablesAfterFortune(sheets: WorkSpreadsheetSheet[], sourceSheets: WorkSpreadsheetSheet[], operations?: readonly Op[]): WorkSpreadsheetSheet[];
@@ -0,0 +1,16 @@
1
+ import type { Cell } from '@fortune-sheet/core';
2
+ import type { SpreadsheetTableCellRenderStyle } from './spreadsheet-table-style';
3
+ export interface SpreadsheetTableRenderCellInfo {
4
+ column: number;
5
+ endX: number;
6
+ endY: number;
7
+ row: number;
8
+ startX: number;
9
+ startY: number;
10
+ }
11
+ export interface SpreadsheetTableConditionalStyle {
12
+ cellColor?: string;
13
+ textColor?: string;
14
+ }
15
+ export declare function beginSpreadsheetTableCellRender(_cell: Cell | null, tableStyle: SpreadsheetTableCellRenderStyle | null, conditionalStyle: SpreadsheetTableConditionalStyle | undefined, context: CanvasRenderingContext2D): void;
16
+ export declare function finishSpreadsheetTableCellRender(_cell: Cell | null, cellInfo: SpreadsheetTableRenderCellInfo, tableStyle: SpreadsheetTableCellRenderStyle | null, context: CanvasRenderingContext2D): void;
@@ -0,0 +1,8 @@
1
+ import type { WorkSpreadsheetTable } from '../work-types';
2
+ import type { SpreadsheetEditorCanCommands, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
3
+ export declare function SpreadsheetTableDesignRibbon({ can, commands, sheetId, table, }: {
4
+ can: SpreadsheetEditorCanCommands;
5
+ commands: SpreadsheetEditorCommands;
6
+ sheetId: string;
7
+ table: WorkSpreadsheetTable;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,31 @@
1
+ import type { WorkSpreadsheetTable, WorkSpreadsheetTableStyle } from '../work-types';
2
+ export interface SpreadsheetTableStylePalette {
3
+ border: string;
4
+ header: string;
5
+ headerText: string;
6
+ primaryRow: string;
7
+ secondaryRow: string;
8
+ stripeColumn: string;
9
+ text: string;
10
+ total: string;
11
+ totalText: string;
12
+ }
13
+ export interface SpreadsheetTableStyleChoice {
14
+ label: string;
15
+ ooxmlName: string;
16
+ palette: SpreadsheetTableStylePalette;
17
+ style: Exclude<WorkSpreadsheetTableStyle, {
18
+ family: 'none';
19
+ }>;
20
+ }
21
+ export interface SpreadsheetTableCellRenderStyle {
22
+ background: string;
23
+ bold: boolean;
24
+ borderColor: string;
25
+ role: 'body' | 'header' | 'totals';
26
+ tableId: string;
27
+ textColor: string;
28
+ }
29
+ export declare function spreadsheetTableStyleChoices(): readonly SpreadsheetTableStyleChoice[];
30
+ export declare function spreadsheetTableStylePalette(style: WorkSpreadsheetTableStyle): SpreadsheetTableStylePalette | null;
31
+ export declare function createSpreadsheetTableRenderResolver(tables: readonly WorkSpreadsheetTable[]): (row: number, column: number) => SpreadsheetTableCellRenderStyle | null;
@@ -0,0 +1,55 @@
1
+ import type { Selection } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent, WorkSpreadsheetSheet, WorkSpreadsheetTable, WorkSpreadsheetTableStyle } from '../work-types';
3
+ import { type SpreadsheetCellRange } from './spreadsheet-cell-range';
4
+ export { MAX_SPREADSHEET_TABLE_CELLS } from './spreadsheet-table-limits';
5
+ export interface SpreadsheetTableTarget {
6
+ sheetId: string;
7
+ selection: Selection;
8
+ }
9
+ export interface SpreadsheetTableDialogValue {
10
+ headerRow: boolean;
11
+ rangeReference: string;
12
+ }
13
+ export interface SpreadsheetTableDialogSource {
14
+ name: string;
15
+ range: SpreadsheetCellRange;
16
+ rangeReference: string;
17
+ sheetId: string;
18
+ sheetName: string;
19
+ value: SpreadsheetTableDialogValue;
20
+ }
21
+ export interface SpreadsheetTableRequest {
22
+ headerRow: boolean;
23
+ name: string;
24
+ range: SpreadsheetCellRange;
25
+ sheetId: string;
26
+ style?: WorkSpreadsheetTableStyle;
27
+ }
28
+ export type SpreadsheetTableValidation = {
29
+ columns: string[];
30
+ name: string;
31
+ ok: true;
32
+ range: SpreadsheetCellRange;
33
+ sheet: WorkSpreadsheetSheet;
34
+ } | {
35
+ code: SpreadsheetTableErrorCode;
36
+ message: string;
37
+ ok: false;
38
+ };
39
+ export type SpreadsheetTableErrorCode = 'auto-filter-overlap' | 'invalid-column-name' | 'invalid-name' | 'invalid-range' | 'invalid-style' | 'merged-range' | 'name-conflict' | 'out-of-bounds' | 'protected-range' | 'pivot-table' | 'range-too-large' | 'sheet-not-found' | 'table-overlap';
40
+ export interface SpreadsheetTableDesignPatch {
41
+ name?: string;
42
+ showColumnStripes?: boolean;
43
+ showFirstColumn?: boolean;
44
+ showLastColumn?: boolean;
45
+ showRowStripes?: boolean;
46
+ style?: WorkSpreadsheetTableStyle;
47
+ }
48
+ export declare function createSpreadsheetTableDialogSource(content: WorkSpreadsheetContent, target: SpreadsheetTableTarget): SpreadsheetTableDialogSource | null;
49
+ export declare function spreadsheetTableRangeFromText(value: string): SpreadsheetCellRange | null;
50
+ export declare function validateSpreadsheetTableRequest(content: WorkSpreadsheetContent, request: SpreadsheetTableRequest): SpreadsheetTableValidation;
51
+ export declare function applySpreadsheetTable(content: WorkSpreadsheetContent, request: SpreadsheetTableRequest): WorkSpreadsheetContent | null;
52
+ export declare function updateSpreadsheetTable(content: WorkSpreadsheetContent, sheetId: string, tableId: string, patch: SpreadsheetTableDesignPatch): WorkSpreadsheetContent | null;
53
+ export declare function convertSpreadsheetTableToRange(content: WorkSpreadsheetContent, sheetId: string, tableId: string): WorkSpreadsheetContent | null;
54
+ export declare function spreadsheetTableAtCell(sheet: WorkSpreadsheetSheet | undefined, row: number, column: number): WorkSpreadsheetTable | null;
55
+ export declare function spreadsheetTableFailureMessage(content: WorkSpreadsheetContent, request: SpreadsheetTableRequest): string | null;
@@ -0,0 +1,23 @@
1
+ import type { Selection } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent } from '../work-types';
3
+ import type { SpreadsheetDataValidationCommandPort, SpreadsheetEditorCommands } from './spreadsheet-command-controller';
4
+ export interface SpreadsheetDataValidationSelectionState {
5
+ selections: Selection[];
6
+ sheetId: string;
7
+ }
8
+ export declare function useSpreadsheetDataValidation({ commandsRef, contentRef, focusGrid, getGridFocusTarget, getLiveSelections, preview, }: {
9
+ commandsRef: {
10
+ current: SpreadsheetEditorCommands | null;
11
+ };
12
+ contentRef: {
13
+ current: WorkSpreadsheetContent;
14
+ };
15
+ focusGrid: (focusOrigin: Element | null) => void;
16
+ getGridFocusTarget: () => HTMLElement | null;
17
+ getLiveSelections: () => Selection[] | undefined;
18
+ preview: boolean;
19
+ }): {
20
+ commandPort: SpreadsheetDataValidationCommandPort;
21
+ selectionForChange: () => SpreadsheetDataValidationSelectionState | null;
22
+ dialog: import("react").JSX.Element | null;
23
+ };
@@ -0,0 +1,24 @@
1
+ import type { Selection } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent } from '../work-types';
3
+ import type { SpreadsheetEditorCommands, SpreadsheetHyperlinkCommandPort } from './spreadsheet-command-controller';
4
+ export interface SpreadsheetHyperlinkSelectionState {
5
+ sheetId: string;
6
+ selection: Selection;
7
+ }
8
+ export declare function useSpreadsheetHyperlink({ commandsRef, contentRef, focusGrid, getGridFocusTarget, getLiveSelection, preview, selectionState, }: {
9
+ commandsRef: {
10
+ current: SpreadsheetEditorCommands | null;
11
+ };
12
+ contentRef: {
13
+ current: WorkSpreadsheetContent;
14
+ };
15
+ focusGrid: (focusOrigin: Element | null) => void;
16
+ getGridFocusTarget: () => HTMLElement | null;
17
+ getLiveSelection: () => Selection | undefined;
18
+ preview: boolean;
19
+ selectionState: SpreadsheetHyperlinkSelectionState | null;
20
+ }): {
21
+ commandPort: SpreadsheetHyperlinkCommandPort;
22
+ selectionForChange: () => SpreadsheetHyperlinkSelectionState | null;
23
+ dialog: import("react").JSX.Element | null;
24
+ };
@@ -0,0 +1,23 @@
1
+ import type { Selection } from '@fortune-sheet/core';
2
+ import type { WorkSpreadsheetContent } from '../work-types';
3
+ import type { SpreadsheetEditorCommands, SpreadsheetTableCommandPort } from './spreadsheet-command-controller';
4
+ export interface SpreadsheetTableSelectionState {
5
+ selection: Selection;
6
+ sheetId: string;
7
+ }
8
+ export declare function useSpreadsheetTable({ commandsRef, contentRef, focusGrid, getGridFocusTarget, getLiveSelection, preview, }: {
9
+ commandsRef: {
10
+ current: SpreadsheetEditorCommands | null;
11
+ };
12
+ contentRef: {
13
+ current: WorkSpreadsheetContent;
14
+ };
15
+ focusGrid: (focusOrigin: Element | null) => void;
16
+ getGridFocusTarget: () => HTMLElement | null;
17
+ getLiveSelection: () => Selection | undefined;
18
+ preview: boolean;
19
+ }): {
20
+ commandPort: SpreadsheetTableCommandPort;
21
+ selectionForChange: () => SpreadsheetTableSelectionState | null;
22
+ dialog: import("react").JSX.Element | null;
23
+ };
@@ -0,0 +1,2 @@
1
+ export declare function normalizeSpreadsheetDateValidationBoundary(value: string, uses1904DateSystem?: boolean): string | null;
2
+ export declare function spreadsheetDateValidationFormula(value: string): string;
@@ -213,12 +213,112 @@ export interface WorkSpreadsheetDataValidationRange {
213
213
  ranges: WorkSpreadsheetCellRange[];
214
214
  item: WorkSpreadsheetDataValidationItem;
215
215
  }
216
+ export type WorkSpreadsheetTableStyle = {
217
+ family: 'none';
218
+ } | {
219
+ family: 'light';
220
+ number: number;
221
+ } | {
222
+ family: 'medium';
223
+ number: number;
224
+ } | {
225
+ family: 'dark';
226
+ number: number;
227
+ };
228
+ export interface WorkSpreadsheetTableColumn {
229
+ name: string;
230
+ }
231
+ export type WorkSpreadsheetDynamicFilter = 'above-average' | 'below-average' | 'tomorrow' | 'today' | 'yesterday' | 'next-week' | 'this-week' | 'last-week' | 'next-month' | 'this-month' | 'last-month' | 'next-quarter' | 'this-quarter' | 'last-quarter' | 'next-year' | 'this-year' | 'last-year' | 'year-to-date' | 'quarter-1' | 'quarter-2' | 'quarter-3' | 'quarter-4' | 'month-1' | 'month-2' | 'month-3' | 'month-4' | 'month-5' | 'month-6' | 'month-7' | 'month-8' | 'month-9' | 'month-10' | 'month-11' | 'month-12';
232
+ export type WorkSpreadsheetTableFilterCriteria = {
233
+ type: 'values';
234
+ values: string[];
235
+ includeBlanks: boolean;
236
+ } | {
237
+ type: 'equals';
238
+ value: string;
239
+ } | {
240
+ type: 'not-equals';
241
+ value: string;
242
+ } | {
243
+ type: 'contains';
244
+ value: string;
245
+ } | {
246
+ type: 'does-not-contain';
247
+ value: string;
248
+ } | {
249
+ type: 'begins-with';
250
+ value: string;
251
+ } | {
252
+ type: 'ends-with';
253
+ value: string;
254
+ } | {
255
+ type: 'greater-than';
256
+ value: string;
257
+ } | {
258
+ type: 'greater-than-or-equal';
259
+ value: string;
260
+ } | {
261
+ type: 'less-than';
262
+ value: string;
263
+ } | {
264
+ type: 'less-than-or-equal';
265
+ value: string;
266
+ } | {
267
+ type: 'between';
268
+ lower: string;
269
+ upper: string;
270
+ } | {
271
+ type: 'not-between';
272
+ lower: string;
273
+ upper: string;
274
+ } | {
275
+ type: 'blanks';
276
+ } | {
277
+ type: 'non-blanks';
278
+ } | {
279
+ type: 'top';
280
+ count: number;
281
+ } | {
282
+ type: 'top-percent';
283
+ percent: number;
284
+ } | {
285
+ type: 'bottom';
286
+ count: number;
287
+ } | {
288
+ type: 'bottom-percent';
289
+ percent: number;
290
+ } | {
291
+ type: 'dynamic';
292
+ kind: WorkSpreadsheetDynamicFilter;
293
+ };
294
+ export interface WorkSpreadsheetTableFilter {
295
+ column: number;
296
+ criteria: WorkSpreadsheetTableFilterCriteria;
297
+ }
298
+ export interface WorkSpreadsheetTable {
299
+ /** Stable browser-model identity. OOXML numeric identity is kept separately. */
300
+ id: string;
301
+ ooxmlId?: number;
302
+ name: string;
303
+ displayName?: string;
304
+ range: WorkSpreadsheetCellRange;
305
+ columns: WorkSpreadsheetTableColumn[];
306
+ filters: WorkSpreadsheetTableFilter[];
307
+ headerRow: boolean;
308
+ totalsRow: boolean;
309
+ style: WorkSpreadsheetTableStyle;
310
+ showFirstColumn: boolean;
311
+ showLastColumn: boolean;
312
+ showRowStripes: boolean;
313
+ showColumnStripes: boolean;
314
+ }
216
315
  export type WorkSpreadsheetSheet = Omit<Sheet, 'images'> & {
217
316
  images?: WorkSpreadsheetImage[];
218
317
  charts?: WorkSpreadsheetChart[];
219
318
  pivotTables?: WorkSpreadsheetPivotTable[];
220
319
  formulaMetadata?: WorkSpreadsheetFormulaMetadata;
221
320
  dataValidationRanges?: WorkSpreadsheetDataValidationRange[];
321
+ tables?: WorkSpreadsheetTable[];
222
322
  };
223
323
  export type WorkSpreadsheetPivotAggregation = 'sum' | 'count' | 'counta' | 'average' | 'max' | 'min' | 'product' | 'stdDev' | 'stdDevP' | 'var' | 'varP';
224
324
  export interface WorkSpreadsheetPivotValue {
@@ -9,6 +9,7 @@ import { type XlsxManualPageBreaks } from './work-xlsx-page-breaks';
9
9
  import { type XlsxPageSetup } from './work-xlsx-page-setup';
10
10
  import { type XlsxProtectionFeatures } from './work-xlsx-protection';
11
11
  import { type XlsxWorksheetXmlScan } from './work-xlsx-worksheet-scan';
12
+ import type { WorkSpreadsheetTable } from './work-types';
12
13
  type FrozenPane = NonNullable<Sheet['frozen']>;
13
14
  export interface XlsxDataValidation {
14
15
  references: string[];
@@ -24,6 +25,7 @@ export interface XlsxSheetFeatures {
24
25
  pageSetup?: XlsxPageSetup;
25
26
  images: XlsxWorksheetImage[];
26
27
  charts: XlsxWorksheetChart[];
28
+ tables: WorkSpreadsheetTable[];
27
29
  }
28
30
  export type FortuneDataValidationItem = WorkSpreadsheetDataValidationItem;
29
31
  export declare function readXlsxSheetFeatures(buffer: ArrayBuffer): Promise<Map<string, XlsxSheetFeatures>>;
@@ -0,0 +1,3 @@
1
+ import type { WorkSpreadsheetTableFilter } from './work-types';
2
+ export declare function readXlsxTableFilters(table: Document, width: number): WorkSpreadsheetTableFilter[];
3
+ export declare function xlsxTableAutoFilterXml(filters: readonly WorkSpreadsheetTableFilter[], rangeReference: string, totalsRow: boolean): string;
@@ -0,0 +1,4 @@
1
+ import { OoxmlPackage } from './work-ooxml-package';
2
+ import type { WorkSpreadsheetContent, WorkSpreadsheetTable } from './work-types';
3
+ export declare function readXlsxWorksheetTables(archive: OoxmlPackage, worksheetPart: string): Promise<WorkSpreadsheetTable[]>;
4
+ export declare function patchXlsxSpreadsheetTables(buffer: ArrayBuffer, content: WorkSpreadsheetContent): Promise<ArrayBuffer>;
Binary file