@a3s-lab/office 0.37.3 → 0.37.4
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.
- package/README.md +4 -1
- package/dist/0~spreadsheet-editor.js +5535 -5130
- package/dist/5416.js +28 -1
- package/dist/internal/features/work/editors/spreadsheet-filter-reconciliation.d.ts +6 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-options-dialog.d.ts +2 -1
- package/dist/internal/features/work/editors/spreadsheet-sort.d.ts +23 -1
- package/dist/internal/features/work/work-spreadsheet-auto-filter.d.ts +3 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/styles.css +7 -0
- package/docs/latest/en/browser-editor-architecture.md +24 -7
- package/package.json +4 -1
package/dist/5416.js
CHANGED
|
@@ -2756,6 +2756,33 @@ function workSpreadsheetAutoFilterManuallyHiddenRows(sheet) {
|
|
|
2756
2756
|
}
|
|
2757
2757
|
return manuallyHidden;
|
|
2758
2758
|
}
|
|
2759
|
+
function workSpreadsheetAutoFilterOwnedRows(sheet) {
|
|
2760
|
+
return filterHiddenRows(sheet.filter);
|
|
2761
|
+
}
|
|
2762
|
+
function workSpreadsheetFilterHiddenRows(sheet, range, column, criteria, context = {
|
|
2763
|
+
now: new Date()
|
|
2764
|
+
}) {
|
|
2765
|
+
const normalizedCriteria = normalizeWorkSpreadsheetFilterCriteria(criteria);
|
|
2766
|
+
const normalizedRange = normalizedWorkSpreadsheetAutoFilterRange(range);
|
|
2767
|
+
if (!normalizedCriteria || !normalizedRange || !columnInRange(normalizedRange, column)) return null;
|
|
2768
|
+
return hiddenRowsForCriteria(sheet, normalizedRange, column, normalizedCriteria, context);
|
|
2769
|
+
}
|
|
2770
|
+
function workSpreadsheetSheetWithReappliedAutoFilterCriteria(sheet, criteriaSource, manuallyHiddenRows, context = {
|
|
2771
|
+
now: new Date()
|
|
2772
|
+
}) {
|
|
2773
|
+
const range = normalizedWorkSpreadsheetAutoFilterRange(sheet.filter_select);
|
|
2774
|
+
if (!range) return sheet;
|
|
2775
|
+
const entries = workSpreadsheetAutoFilterCriteriaEntries(criteriaSource);
|
|
2776
|
+
const filter = {};
|
|
2777
|
+
for (const entry of entries){
|
|
2778
|
+
const column = range.column[0] + entry.column;
|
|
2779
|
+
const criteria = normalizeWorkSpreadsheetFilterCriteria(entry.criteria);
|
|
2780
|
+
if (!criteria || !columnInRange(range, column)) continue;
|
|
2781
|
+
const rowhidden = hiddenRowsForCriteria(sheet, range, column, criteria, context);
|
|
2782
|
+
if (rowhidden) filter[String(entry.column)] = filterColumnState(range, column, criteria, rowhidden);
|
|
2783
|
+
}
|
|
2784
|
+
return sheetWithFilterState(sheet, filter, manuallyHiddenRows);
|
|
2785
|
+
}
|
|
2759
2786
|
function workSpreadsheetSheetWithImportedAutoFilterCriteria(sheet, entries, context = {
|
|
2760
2787
|
now: new Date()
|
|
2761
2788
|
}) {
|
|
@@ -4047,4 +4074,4 @@ function normalizeStoredSpreadsheetSortCustomLists(input) {
|
|
|
4047
4074
|
function spreadsheet_sort_custom_list_store_isRecord(value) {
|
|
4048
4075
|
return Boolean(value && 'object' == typeof value && !Array.isArray(value));
|
|
4049
4076
|
}
|
|
4050
|
-
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, SPREADSHEET_TABLE_TOTALS_FUNCTIONS, activeXlsxNativeFill, activeXlsxSemanticColorOrigin, applyImportedXlsxRichText, boundedSpreadsheetDataValidationText, coalesceXlsxRichTextRuns, createSpreadsheetSortCustomList, createWorkOfficeSpreadsheetCollaborationBinding as createOfficeSpreadsheetCollaborationBinding, createXlsxRichTextReadContext, deleteXlsxNativeFills, directXlsxAlignment, directXlsxFontStyle, fillSpreadsheetTableCalculatedColumns, hasXlsxDirectFontStyle, initializeWorkOfficeSpreadsheetCollaboration as initializeOfficeSpreadsheetCollaboration, isHighSurrogate, isLowSurrogate, isSpreadsheetTextOrientationId, isSpreadsheetUnderlineStyle, mergeSpreadsheetSortCustomLists, normalizeSpreadsheetDataValidationErrorStyle, normalizeSpreadsheetDateValidationBoundary, normalizeSpreadsheetTableCalculatedFormula, normalizeSpreadsheetTableTotalsFormula, normalizeSpreadsheetTableTotalsLabel, normalizeStoredSpreadsheetSortCustomLists, normalizeWorkSpreadsheetFilterCriteria, normalizeXlsxRichTextCell, normalizeXlsxRichTextColor, normalizeXlsxRichTextEditSource, normalizeXlsxRichTextRun, normalizedWorkSpreadsheetAutoFilterRange, parseSpreadsheetSortCustomList, patchSpreadsheetRichTextFontRuns, readWorkOfficeSpreadsheetCollaboration as readOfficeSpreadsheetCollaboration, readXlsxRichTextCells, reconcileSpreadsheetTableCalculatedColumns, reconcileSpreadsheetTableTotalsColumns, replaceWorkOfficeSpreadsheetCollaboration as replaceOfficeSpreadsheetCollaboration, sameXlsxRichTextRunStyle, sheetHasXlsxRichTextCells, spreadsheetCellValueWithDiagonalBorder, spreadsheetDateValidationFormula, spreadsheetDiagonalBorderFromCellValue, spreadsheetExplicitTextOrientationFromCell, spreadsheetSortCustomListMatchKey, spreadsheetSortCustomListsEqual, spreadsheetTableTotalsColumnPatch, spreadsheetTableTotalsFunctionFromOoxml, spreadsheetTableTotalsFunctionLabel, spreadsheetTableTotalsFunctionToOoxml, spreadsheetTableTotalsRowHasContent, spreadsheetTextOrientationCellStyle, spreadsheetTextOrientationChoiceFromCell, spreadsheetTextOrientationFromAngle, spreadsheetTextOrientationFromCell, spreadsheetTextOrientationFromChoice, spreadsheetTextOrientationFromXlsx, spreadsheetUnderlineCellValue, spreadsheetUnderlineCellValueFromSheetJs, spreadsheetUnderlineCellValueFromXlsx, spreadsheetUnderlineStyle, spreadsheetVisibleTextRotationFromCell, synchronizeSpreadsheetTableTotalsRow, validXlsxRichText, validateSpreadsheetSortCustomList, withDefaultSpreadsheetTableTotalsLabel, workSpreadsheetAutoFilterCriteria, workSpreadsheetAutoFilterCriteriaEntries, workSpreadsheetAutoFilterManuallyHiddenRows, workSpreadsheetCellIsDate, workSpreadsheetFilterTextCharacters, workSpreadsheetHasUnescapedWildcard, workSpreadsheetSheetWithAutoFilterCriteria, workSpreadsheetSheetWithImportedAutoFilterCriteria, workSpreadsheetSheetWithoutAutoFilterCriteria, writeXlsxRichTextCells, xlsxAlignmentMatches, xlsxBooleanAttribute, xlsxBorderLineMatches, xlsxColorMatches, xlsxNativeFillCellKeys, xlsxNativeFillKey, xlsxNativeFillSemanticColors, xlsxRichTextCellText, xlsxRichTextStyleOrigins, xlsxStyleCollectionIndex, xlsxToggleEnabled, xlsxUnderlineStyle };
|
|
4077
|
+
export { DEFAULT_SPREADSHEET_SORT_CUSTOM_LIST_STORAGE_KEY, LocalStorageSpreadsheetSortCustomListStore, SPREADSHEET_TABLE_TOTALS_FUNCTIONS, activeXlsxNativeFill, activeXlsxSemanticColorOrigin, applyImportedXlsxRichText, boundedSpreadsheetDataValidationText, coalesceXlsxRichTextRuns, createSpreadsheetSortCustomList, createWorkOfficeSpreadsheetCollaborationBinding as createOfficeSpreadsheetCollaborationBinding, createXlsxRichTextReadContext, deleteXlsxNativeFills, directXlsxAlignment, directXlsxFontStyle, fillSpreadsheetTableCalculatedColumns, hasXlsxDirectFontStyle, initializeWorkOfficeSpreadsheetCollaboration as initializeOfficeSpreadsheetCollaboration, isHighSurrogate, isLowSurrogate, isSpreadsheetTextOrientationId, isSpreadsheetUnderlineStyle, mergeSpreadsheetSortCustomLists, normalizeSpreadsheetDataValidationErrorStyle, normalizeSpreadsheetDateValidationBoundary, normalizeSpreadsheetTableCalculatedFormula, normalizeSpreadsheetTableTotalsFormula, normalizeSpreadsheetTableTotalsLabel, normalizeStoredSpreadsheetSortCustomLists, normalizeWorkSpreadsheetFilterCriteria, normalizeXlsxRichTextCell, normalizeXlsxRichTextColor, normalizeXlsxRichTextEditSource, normalizeXlsxRichTextRun, normalizedWorkSpreadsheetAutoFilterRange, parseSpreadsheetSortCustomList, patchSpreadsheetRichTextFontRuns, readWorkOfficeSpreadsheetCollaboration as readOfficeSpreadsheetCollaboration, readXlsxRichTextCells, reconcileSpreadsheetTableCalculatedColumns, reconcileSpreadsheetTableTotalsColumns, replaceWorkOfficeSpreadsheetCollaboration as replaceOfficeSpreadsheetCollaboration, sameXlsxRichTextRunStyle, sheetHasXlsxRichTextCells, spreadsheetCellValueWithDiagonalBorder, spreadsheetDateValidationFormula, spreadsheetDiagonalBorderFromCellValue, spreadsheetExplicitTextOrientationFromCell, spreadsheetSortCustomListMatchKey, spreadsheetSortCustomListsEqual, spreadsheetTableTotalsColumnPatch, spreadsheetTableTotalsFunctionFromOoxml, spreadsheetTableTotalsFunctionLabel, spreadsheetTableTotalsFunctionToOoxml, spreadsheetTableTotalsRowHasContent, spreadsheetTextOrientationCellStyle, spreadsheetTextOrientationChoiceFromCell, spreadsheetTextOrientationFromAngle, spreadsheetTextOrientationFromCell, spreadsheetTextOrientationFromChoice, spreadsheetTextOrientationFromXlsx, spreadsheetUnderlineCellValue, spreadsheetUnderlineCellValueFromSheetJs, spreadsheetUnderlineCellValueFromXlsx, spreadsheetUnderlineStyle, spreadsheetVisibleTextRotationFromCell, synchronizeSpreadsheetTableTotalsRow, validXlsxRichText, validateSpreadsheetSortCustomList, withDefaultSpreadsheetTableTotalsLabel, workSpreadsheetAutoFilterCriteria, workSpreadsheetAutoFilterCriteriaEntries, workSpreadsheetAutoFilterManuallyHiddenRows, workSpreadsheetAutoFilterOwnedRows, workSpreadsheetCellIsDate, workSpreadsheetFilterHiddenRows, workSpreadsheetFilterTextCharacters, workSpreadsheetHasUnescapedWildcard, workSpreadsheetSheetWithAutoFilterCriteria, workSpreadsheetSheetWithImportedAutoFilterCriteria, workSpreadsheetSheetWithReappliedAutoFilterCriteria, workSpreadsheetSheetWithoutAutoFilterCriteria, writeXlsxRichTextCells, xlsxAlignmentMatches, xlsxBooleanAttribute, xlsxBorderLineMatches, xlsxColorMatches, xlsxNativeFillCellKeys, xlsxNativeFillKey, xlsxNativeFillSemanticColors, xlsxRichTextCellText, xlsxRichTextStyleOrigins, xlsxStyleCollectionIndex, xlsxToggleEnabled, xlsxUnderlineStyle };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Op } from '@fortune-sheet/core';
|
|
2
|
+
import type { WorkSpreadsheetContent, WorkSpreadsheetSheet } from '../work-types';
|
|
3
|
+
import type { SpreadsheetCellRange } from './spreadsheet-cell-range';
|
|
4
|
+
export declare function reconcileSpreadsheetFiltersAfterFortune(sheets: WorkSpreadsheetContent['sheets'], sourceSheets: WorkSpreadsheetContent['sheets'], operations?: readonly Op[]): WorkSpreadsheetContent['sheets'];
|
|
5
|
+
export declare function reconcileSpreadsheetFiltersAfterSort(sheet: WorkSpreadsheetSheet, source: WorkSpreadsheetSheet, range: SpreadsheetCellRange, sourceIndexes: readonly number[]): WorkSpreadsheetSheet | null;
|
|
6
|
+
export declare function spreadsheetFilterReconciliationIsBounded(sheet: WorkSpreadsheetSheet): boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SpreadsheetSortOptions } from './spreadsheet-sort';
|
|
2
|
-
export declare function SpreadsheetSortOptionsDialog({ value, restoreFocusTarget, onApply, onClose, }: {
|
|
2
|
+
export declare function SpreadsheetSortOptionsDialog({ value, orientationLocked, restoreFocusTarget, onApply, onClose, }: {
|
|
3
3
|
value: SpreadsheetSortOptions;
|
|
4
|
+
orientationLocked?: boolean;
|
|
4
5
|
restoreFocusTarget: () => HTMLElement | null;
|
|
5
6
|
onApply: (value: SpreadsheetSortOptions) => void;
|
|
6
7
|
onClose: () => void;
|
|
@@ -55,10 +55,24 @@ export interface SpreadsheetSortTarget {
|
|
|
55
55
|
activeColumn: number;
|
|
56
56
|
activeRow: number;
|
|
57
57
|
range: SpreadsheetCellRange;
|
|
58
|
+
scope?: SpreadsheetSortOwnedScope;
|
|
59
|
+
}
|
|
60
|
+
export type SpreadsheetSortOwnedScope = {
|
|
61
|
+
hasHeader: true;
|
|
62
|
+
kind: 'auto-filter';
|
|
63
|
+
} | {
|
|
64
|
+
hasHeader: boolean;
|
|
65
|
+
kind: 'table';
|
|
66
|
+
tableId: string;
|
|
67
|
+
};
|
|
68
|
+
export interface SpreadsheetSortOwnedRange {
|
|
69
|
+
range: SpreadsheetCellRange;
|
|
70
|
+
scope: SpreadsheetSortOwnedScope;
|
|
58
71
|
}
|
|
59
72
|
export interface SpreadsheetSortRangeCandidate {
|
|
60
73
|
available: boolean;
|
|
61
74
|
range: SpreadsheetCellRange;
|
|
75
|
+
scope?: SpreadsheetSortOwnedScope;
|
|
62
76
|
}
|
|
63
77
|
export type SpreadsheetSortIntent = {
|
|
64
78
|
type: 'custom';
|
|
@@ -83,15 +97,18 @@ export interface SpreadsheetSortRangeDialogSource {
|
|
|
83
97
|
canSortExpandedRange: boolean;
|
|
84
98
|
canSortSelection: boolean;
|
|
85
99
|
expandedRangeReference: string;
|
|
100
|
+
ownedScope?: SpreadsheetSortOwnedScope;
|
|
86
101
|
selectedRangeReference: string;
|
|
87
102
|
sheetName: string;
|
|
88
103
|
}
|
|
89
104
|
export type SpreadsheetSortRequest = Omit<SpreadsheetSortDialogValue, keyof SpreadsheetSortTextOptions> & Partial<SpreadsheetSortTextOptions> & {
|
|
90
105
|
range: SpreadsheetCellRange;
|
|
106
|
+
scope?: SpreadsheetSortOwnedScope;
|
|
91
107
|
sheetId: string;
|
|
92
108
|
};
|
|
93
109
|
export interface SpreadsheetSortNormalizedRequest extends SpreadsheetSortDialogValue {
|
|
94
110
|
range: SpreadsheetCellRange;
|
|
111
|
+
scope?: SpreadsheetSortOwnedScope;
|
|
95
112
|
sheetId: string;
|
|
96
113
|
}
|
|
97
114
|
export interface SpreadsheetSortField {
|
|
@@ -106,11 +123,12 @@ export interface SpreadsheetSortDialogSource {
|
|
|
106
123
|
range: SpreadsheetCellRange;
|
|
107
124
|
rangeReference: string;
|
|
108
125
|
rows: SpreadsheetSortField[];
|
|
126
|
+
scope?: SpreadsheetSortOwnedScope;
|
|
109
127
|
sheetId: string;
|
|
110
128
|
sheetName: string;
|
|
111
129
|
value: SpreadsheetSortDialogValue;
|
|
112
130
|
}
|
|
113
|
-
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-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';
|
|
131
|
+
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';
|
|
114
132
|
export type SpreadsheetSortValidationResult = {
|
|
115
133
|
ok: true;
|
|
116
134
|
request: SpreadsheetSortNormalizedRequest;
|
|
@@ -122,6 +140,7 @@ export type SpreadsheetSortValidationResult = {
|
|
|
122
140
|
export type SpreadsheetSortResult = {
|
|
123
141
|
ok: true;
|
|
124
142
|
rows: (Cell | null)[][];
|
|
143
|
+
sourceIndexes: number[];
|
|
125
144
|
} | {
|
|
126
145
|
code: SpreadsheetSortErrorCode;
|
|
127
146
|
message: string;
|
|
@@ -130,6 +149,9 @@ export type SpreadsheetSortResult = {
|
|
|
130
149
|
export declare function createSpreadsheetSortRangePlan(sheet: WorkSpreadsheetSheet, selectedRange: SpreadsheetCellRange): SpreadsheetSortRangePlan | null;
|
|
131
150
|
export declare function createSpreadsheetSortRangeDialogSource(sheetName: string, request: SpreadsheetSortOpenRequest): SpreadsheetSortRangeDialogSource | null;
|
|
132
151
|
export declare function createSpreadsheetSortDialogSource(sheetId: string, sheetName: string, target: SpreadsheetSortTarget, rows: readonly (readonly (Cell | null)[])[], customLists?: readonly SpreadsheetSortCustomList[], appearanceRows?: SpreadsheetSortAppearanceRows): SpreadsheetSortDialogSource | null;
|
|
152
|
+
export declare function spreadsheetSortRowsMatchRange(rows: readonly (readonly (Cell | null)[])[], range: SpreadsheetCellRange): boolean;
|
|
153
|
+
export declare function spreadsheetSortRowsFromSheet(sheet: WorkSpreadsheetSheet, range: SpreadsheetCellRange): (Cell | null)[][] | null;
|
|
154
|
+
export declare function spreadsheetSortOwnedRangeForExactRange(sheet: WorkSpreadsheetSheet, range: SpreadsheetCellRange): SpreadsheetSortOwnedRange | null;
|
|
133
155
|
export declare function validateSpreadsheetSortRequest(request: SpreadsheetSortRequest): SpreadsheetSortValidationResult;
|
|
134
156
|
export declare function spreadsheetSortFailureMessage(result: SpreadsheetSortValidationResult | SpreadsheetSortResult): string | null;
|
|
135
157
|
export declare function spreadsheetSortAppearanceRowsMatch(rows: readonly (readonly (Cell | null)[])[], appearances: SpreadsheetSortAppearanceRows): boolean;
|
|
@@ -10,5 +10,8 @@ export declare function workSpreadsheetAutoFilterCriteriaEntries(sheet: WorkSpre
|
|
|
10
10
|
export declare function workSpreadsheetSheetWithAutoFilterCriteria(sheet: WorkSpreadsheetSheet, column: number, criteria: WorkSpreadsheetFilterCriteria, context?: WorkSpreadsheetDynamicFilterContext): WorkSpreadsheetSheet | null;
|
|
11
11
|
export declare function workSpreadsheetSheetWithoutAutoFilterCriteria(sheet: WorkSpreadsheetSheet, column: number): WorkSpreadsheetSheet | null;
|
|
12
12
|
export declare function workSpreadsheetAutoFilterManuallyHiddenRows(sheet: WorkSpreadsheetSheet): Set<string>;
|
|
13
|
+
export declare function workSpreadsheetAutoFilterOwnedRows(sheet: WorkSpreadsheetSheet): Set<string>;
|
|
14
|
+
export declare function workSpreadsheetFilterHiddenRows(sheet: WorkSpreadsheetSheet, range: WorkSpreadsheetAutoFilterRange, column: number, criteria: WorkSpreadsheetFilterCriteria, context?: WorkSpreadsheetDynamicFilterContext): Record<string, 0> | null;
|
|
15
|
+
export declare function workSpreadsheetSheetWithReappliedAutoFilterCriteria(sheet: WorkSpreadsheetSheet, criteriaSource: WorkSpreadsheetSheet, manuallyHiddenRows: ReadonlySet<string>, context?: WorkSpreadsheetDynamicFilterContext): WorkSpreadsheetSheet;
|
|
13
16
|
export declare function workSpreadsheetSheetWithImportedAutoFilterCriteria(sheet: WorkSpreadsheetSheet, entries: readonly WorkSpreadsheetFilter[], context?: WorkSpreadsheetDynamicFilterContext): WorkSpreadsheetSheet;
|
|
14
17
|
export declare function normalizeWorkSpreadsheetFilterCriteria(criteria: unknown): WorkSpreadsheetFilterCriteria | null;
|
package/dist/office-kernel.wasm
CHANGED
|
Binary file
|
package/dist/styles.css
CHANGED
|
@@ -18068,6 +18068,13 @@ sub [data-office-character-position-half-points], sup [data-office-character-pos
|
|
|
18068
18068
|
font-weight: 700;
|
|
18069
18069
|
}
|
|
18070
18070
|
|
|
18071
|
+
.work-spreadsheet-sort-options-lock-note {
|
|
18072
|
+
color: var(--a3s-muted);
|
|
18073
|
+
margin: 0 0 2px;
|
|
18074
|
+
font-size: 11px;
|
|
18075
|
+
line-height: 1.45;
|
|
18076
|
+
}
|
|
18077
|
+
|
|
18071
18078
|
.work-spreadsheet-sort-options > label {
|
|
18072
18079
|
border: 1px solid var(--a3s-line);
|
|
18073
18080
|
cursor: pointer;
|
|
@@ -1498,13 +1498,30 @@ view, then uses one stable comparator for both orientations. Relative formula
|
|
|
1498
1498
|
references are translated along the moved row or column axis with the same
|
|
1499
1499
|
bounded reference engine used by Paste Special, while absolute references stay
|
|
1500
1500
|
fixed.
|
|
1501
|
-
|
|
1502
|
-
controlled Undo record.
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1501
|
+
An unfiltered accepted operation crosses the Fortune boundary as one range
|
|
1502
|
+
write and one controlled Undo record. A separate structural-owner planner
|
|
1503
|
+
recognizes the exact sortable range of one native table or worksheet AutoFilter
|
|
1504
|
+
from any contained selection. It excludes table totals, freezes the structural
|
|
1505
|
+
header, locks top-to-bottom movement, and carries the owner kind plus table ID
|
|
1506
|
+
when applicable. The command derives that fingerprint again at apply time;
|
|
1507
|
+
changed ownership fails before allocation or mutation.
|
|
1508
|
+
|
|
1509
|
+
Filter-active owned sorts use one controlled workbook replacement instead of a
|
|
1510
|
+
range write. The matrix engine returns its stable source-row permutation beside
|
|
1511
|
+
the translated cells. `spreadsheet-filter-reconciliation` evaluates typed
|
|
1512
|
+
worksheet and table criteria against the sorted dense/sparse sheet, remaps
|
|
1513
|
+
opaque Fortune value/color `rowhidden` ownership through that permutation, and
|
|
1514
|
+
rebuilds the combined hidden-row map while retaining independent manual rows.
|
|
1515
|
+
Fortune range reads that omit hidden rows fall back to the bounded controlled
|
|
1516
|
+
snapshot. Sort area and filter rescans have explicit one-million-cell budgets,
|
|
1517
|
+
and unrelated filters do not divert ordinary ranges from the native path.
|
|
1518
|
+
|
|
1519
|
+
Partial intersections that do not resolve to one exact structural owner, plus
|
|
1520
|
+
hyperlink-map, imported-formula-metadata, and border-sidecar intersections,
|
|
1521
|
+
still fail closed because those sidecars own coordinates outside the cell
|
|
1522
|
+
matrix. Moving large sorts, large aggregate/rank scans, remaining advanced
|
|
1523
|
+
filter predicates, and structural sidecar reconciliation into the Worker/WASM
|
|
1524
|
+
kernel remains Stage 3 work.
|
|
1508
1525
|
Direct host focus of the native grid now enters the same bounded focus observer
|
|
1509
1526
|
used by ribbon commands. If a controlled workbook update replaces the focused
|
|
1510
1527
|
Fortune overlay, focus transfers to its connected replacement; deliberate
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.37.
|
|
3
|
+
"version": "0.37.4",
|
|
4
4
|
"description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"office",
|
|
@@ -111,6 +111,7 @@
|
|
|
111
111
|
"playground:visual:spreadsheet-row-sort": "playwright test visual-tests/spreadsheet-row-sort.functional.spec.ts --config playwright.config.ts",
|
|
112
112
|
"playground:visual:spreadsheet-text-sort": "playwright test visual-tests/spreadsheet-text-sort.functional.spec.ts --config playwright.config.ts",
|
|
113
113
|
"playground:visual:spreadsheet-sort-range": "playwright test visual-tests/spreadsheet-sort-range.functional.spec.ts --config playwright.config.ts",
|
|
114
|
+
"playground:visual:spreadsheet-owned-range-sort": "playwright test visual-tests/spreadsheet-owned-range-sort.functional.spec.ts --config playwright.config.ts",
|
|
114
115
|
"playground:visual:spreadsheet-font-dialog-shortcuts": "playwright test visual-tests/spreadsheet-font-dialog-shortcuts.functional.spec.ts --config playwright.config.ts",
|
|
115
116
|
"playground:visual:spreadsheet-diagonal-borders": "playwright test visual-tests/spreadsheet-diagonal-borders.functional.spec.ts --config playwright.config.ts",
|
|
116
117
|
"playground:visual:spreadsheet-font-colors-shortcuts": "playwright test visual-tests/spreadsheet-font-colors-shortcuts.functional.spec.ts --config playwright.config.ts",
|
|
@@ -202,6 +203,8 @@
|
|
|
202
203
|
"test:e2e:spreadsheet-text-sort:check": "a3s-test check tests/e2e/spreadsheet-text-sort.acl --json",
|
|
203
204
|
"test:e2e:spreadsheet-sort-range": "A3S_TEST_SUITE=tests/e2e/spreadsheet-sort-range.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
204
205
|
"test:e2e:spreadsheet-sort-range:check": "a3s-test check tests/e2e/spreadsheet-sort-range.acl --json",
|
|
206
|
+
"test:e2e:spreadsheet-owned-range-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-owned-range-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
207
|
+
"test:e2e:spreadsheet-owned-range-sort:check": "a3s-test check tests/e2e/spreadsheet-owned-range-sort.acl --json",
|
|
205
208
|
"test:e2e:spreadsheet-cell-fill": "a3s-test run tests/e2e/spreadsheet-cell-fill.acl --json",
|
|
206
209
|
"test:e2e:spreadsheet-cell-fill:check": "a3s-test check tests/e2e/spreadsheet-cell-fill.acl --json",
|
|
207
210
|
"test:e2e:spreadsheet-auto-sum": "a3s-test run tests/e2e/spreadsheet-auto-sum.acl --json",
|