@a3s-lab/office 0.36.0 → 0.37.1
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 +18 -6
- package/dist/0~3557.js +2 -1
- package/dist/0~3635.js +4 -1
- package/dist/0~7048.js +93 -1
- package/dist/0~9073.js +7 -2
- package/dist/0~presentation-editor.js +45 -9
- package/dist/0~spreadsheet-editor.js +20321 -16966
- package/dist/4121.js +1942 -1939
- package/dist/{3266.js → 5416.js} +1504 -20
- package/dist/9333.js +1 -1
- package/dist/core.d.ts +1 -0
- package/dist/core.js +141 -28
- package/dist/index.js +1 -1
- package/dist/internal/features/work/editors/office-shortcuts.d.ts +1 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-filter-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-filter-condition-dialog-model.d.ts +27 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-filter-condition-dialog.d.ts +17 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-filter-menu.d.ts +10 -0
- package/dist/internal/features/work/editors/spreadsheet-auto-filter.d.ts +16 -4
- package/dist/internal/features/work/editors/spreadsheet-cell-range.d.ts +1 -0
- package/dist/internal/features/work/editors/spreadsheet-command-catalog.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-command-controller.d.ts +13 -1
- package/dist/internal/features/work/editors/spreadsheet-current-region.d.ts +12 -0
- package/dist/internal/features/work/editors/spreadsheet-editor.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-appearance.d.ts +45 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-collation.d.ts +8 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-command.d.ts +3 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-custom-list-editor.d.ts +8 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-custom-list-store.d.ts +13 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-custom-list.d.ts +26 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-dialog.d.ts +9 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-matrix.d.ts +4 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-options-dialog.d.ts +7 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-order-controls.d.ts +16 -0
- package/dist/internal/features/work/editors/spreadsheet-sort-range-dialog.d.ts +7 -0
- package/dist/internal/features/work/editors/spreadsheet-sort.d.ts +138 -0
- package/dist/internal/features/work/editors/spreadsheet-table-totals.d.ts +39 -0
- package/dist/internal/features/work/editors/spreadsheet-table.d.ts +11 -1
- package/dist/internal/features/work/editors/use-spreadsheet-auto-filter.d.ts +12 -3
- package/dist/internal/features/work/editors/use-spreadsheet-sort.d.ts +26 -0
- package/dist/internal/features/work/editors/work-office-chrome.d.ts +3 -0
- package/dist/internal/features/work/work-spreadsheet-auto-filter.d.ts +14 -0
- package/dist/internal/features/work/work-spreadsheet-dynamic-filter.d.ts +7 -0
- package/dist/internal/features/work/work-spreadsheet-filter-contract.d.ts +3 -0
- package/dist/internal/features/work/work-spreadsheet-wildcard.d.ts +7 -0
- package/dist/internal/features/work/work-types.d.ts +45 -7
- package/dist/internal/features/work/work-xlsx-interop.d.ts +2 -1
- package/dist/internal/features/work/work-xlsx-table-filters.d.ts +3 -1
- package/dist/internal/kernel/office-kernel-spreadsheet-fallback-formula.d.ts +11 -0
- package/dist/office-kernel.wasm +0 -0
- package/dist/office-kernel.worker.js +93 -1
- package/dist/styles.css +789 -145
- package/dist/vue.d.ts +3 -1
- package/dist/vue.js +2 -0
- package/dist/web-component.d.ts +3 -1
- package/dist/web-component.js +9 -0
- package/dist/work-spreadsheet-package-scan.worker.js +2 -1
- package/docs/latest/en/browser-editor-architecture.md +136 -2
- package/package.json +24 -1
package/dist/vue.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Extensions } from '@tiptap/core';
|
|
2
2
|
import { type PropType } from 'vue';
|
|
3
|
-
import type { DocumentContent, DocumentReviewConflictEvent, EditorAgentRequest, GetDocumentSelectionMenuItems, GetMarkdownSelectionMenuItems, MarkdownContent, OfficeCollaborationPresence, OfficeCollaborationSession, PdfCollaborationContent, PdfPageOrganizationExport, PresentationContent, SpreadsheetContent } from './core';
|
|
3
|
+
import type { DocumentContent, DocumentReviewConflictEvent, EditorAgentRequest, GetDocumentSelectionMenuItems, GetMarkdownSelectionMenuItems, MarkdownContent, OfficeCollaborationPresence, OfficeCollaborationSession, PdfCollaborationContent, PdfPageOrganizationExport, PresentationContent, SpreadsheetContent, SpreadsheetSortCustomListStore } from './core';
|
|
4
4
|
import type { OfficeTheme } from './office-surface';
|
|
5
5
|
import { type DocumentLayoutFont, type OfficeFileAction, type PdfEvidenceOverlay, type PdfEvidenceRegion } from './react';
|
|
6
6
|
export declare const DocumentEditor: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
@@ -165,6 +165,7 @@ export declare const SpreadsheetEditor: import("vue").DefineComponent<import("vu
|
|
|
165
165
|
type: BooleanConstructor;
|
|
166
166
|
};
|
|
167
167
|
saveStatus: StringConstructor;
|
|
168
|
+
sortCustomListStore: PropType<SpreadsheetSortCustomListStore>;
|
|
168
169
|
theme: {
|
|
169
170
|
readonly default: "system";
|
|
170
171
|
readonly type: PropType<OfficeTheme>;
|
|
@@ -192,6 +193,7 @@ export declare const SpreadsheetEditor: import("vue").DefineComponent<import("vu
|
|
|
192
193
|
type: BooleanConstructor;
|
|
193
194
|
};
|
|
194
195
|
saveStatus: StringConstructor;
|
|
196
|
+
sortCustomListStore: PropType<SpreadsheetSortCustomListStore>;
|
|
195
197
|
theme: {
|
|
196
198
|
readonly default: "system";
|
|
197
199
|
readonly type: PropType<OfficeTheme>;
|
package/dist/vue.js
CHANGED
|
@@ -152,6 +152,7 @@ const SpreadsheetEditor = defineComponent({
|
|
|
152
152
|
type: Boolean
|
|
153
153
|
},
|
|
154
154
|
saveStatus: String,
|
|
155
|
+
sortCustomListStore: Object,
|
|
155
156
|
theme: themeProp
|
|
156
157
|
},
|
|
157
158
|
emits: {
|
|
@@ -173,6 +174,7 @@ const SpreadsheetEditor = defineComponent({
|
|
|
173
174
|
},
|
|
174
175
|
preview: props.preview,
|
|
175
176
|
saveStatus: props.saveStatus,
|
|
177
|
+
sortCustomListStore: props.sortCustomListStore,
|
|
176
178
|
theme: props.theme
|
|
177
179
|
}));
|
|
178
180
|
}
|
package/dist/web-component.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Extensions } from '@tiptap/core';
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
|
-
import type { DocumentContent, EditorAgentRequest, GetDocumentSelectionMenuItems, GetMarkdownSelectionMenuItems, MarkdownContent, OfficeCollaborationPresence, OfficeCollaborationSession, PdfCollaborationContent, PdfPageOrganizationExport, PresentationContent, SpreadsheetContent } from './core';
|
|
3
|
+
import type { DocumentContent, EditorAgentRequest, GetDocumentSelectionMenuItems, GetMarkdownSelectionMenuItems, MarkdownContent, OfficeCollaborationPresence, OfficeCollaborationSession, PdfCollaborationContent, PdfPageOrganizationExport, PresentationContent, SpreadsheetContent, SpreadsheetSortCustomListStore } from './core';
|
|
4
4
|
import type { OfficeTheme } from './office-surface';
|
|
5
5
|
import { type DocumentLayoutFont, type OfficeFileAction, type PdfEvidenceOverlay } from './react';
|
|
6
6
|
declare const HTMLElementBase: {
|
|
@@ -68,6 +68,8 @@ export declare class A3SSpreadsheetEditorElement extends A3SContentEditorElement
|
|
|
68
68
|
get collaboration(): OfficeCollaborationSession | undefined;
|
|
69
69
|
set collaboration(value: OfficeCollaborationSession | undefined);
|
|
70
70
|
set kernelWasmUrl(value: string | undefined);
|
|
71
|
+
get sortCustomListStore(): SpreadsheetSortCustomListStore | undefined;
|
|
72
|
+
set sortCustomListStore(value: SpreadsheetSortCustomListStore | undefined);
|
|
71
73
|
protected editorNode(): ReactNode;
|
|
72
74
|
}
|
|
73
75
|
export declare class A3SPresentationEditorElement extends A3SContentEditorElement<PresentationContent> {
|
package/dist/web-component.js
CHANGED
|
@@ -223,6 +223,7 @@ class A3SMarkdownEditorElement extends A3SContentEditorElement {
|
|
|
223
223
|
}
|
|
224
224
|
class A3SSpreadsheetEditorElement extends A3SContentEditorElement {
|
|
225
225
|
#collaboration;
|
|
226
|
+
#sortCustomListStore;
|
|
226
227
|
static get observedAttributes() {
|
|
227
228
|
return [
|
|
228
229
|
'kernel-wasm-url',
|
|
@@ -245,6 +246,13 @@ class A3SSpreadsheetEditorElement extends A3SContentEditorElement {
|
|
|
245
246
|
if (void 0 === value) this.removeAttribute('kernel-wasm-url');
|
|
246
247
|
else this.setAttribute('kernel-wasm-url', value);
|
|
247
248
|
}
|
|
249
|
+
get sortCustomListStore() {
|
|
250
|
+
return this.#sortCustomListStore;
|
|
251
|
+
}
|
|
252
|
+
set sortCustomListStore(value) {
|
|
253
|
+
this.#sortCustomListStore = value;
|
|
254
|
+
this.requestRender();
|
|
255
|
+
}
|
|
248
256
|
editorNode() {
|
|
249
257
|
if (!this.content) return missingContent('spreadsheet', this.theme);
|
|
250
258
|
return /*#__PURE__*/ createElement(SpreadsheetEditor, {
|
|
@@ -257,6 +265,7 @@ class A3SSpreadsheetEditorElement extends A3SContentEditorElement {
|
|
|
257
265
|
onChange: (content)=>this.changeContent(content),
|
|
258
266
|
preview: this.preview,
|
|
259
267
|
saveStatus: this.saveStatus,
|
|
268
|
+
sortCustomListStore: this.sortCustomListStore,
|
|
260
269
|
theme: this.theme
|
|
261
270
|
});
|
|
262
271
|
}
|
|
@@ -3985,6 +3985,7 @@ https://github.com/nodeca/pako/blob/main/LICENSE
|
|
|
3985
3985
|
}
|
|
3986
3986
|
const IMPORTED_WORKSHEET_ELEMENTS = new Set([
|
|
3987
3987
|
'pane',
|
|
3988
|
+
'autoFilter',
|
|
3988
3989
|
'dataValidation',
|
|
3989
3990
|
'conditionalFormatting',
|
|
3990
3991
|
'sheetProtection',
|
|
@@ -4012,7 +4013,7 @@ https://github.com/nodeca/pako/blob/main/LICENSE
|
|
|
4012
4013
|
'rowBreaks',
|
|
4013
4014
|
'colBreaks'
|
|
4014
4015
|
]);
|
|
4015
|
-
const WORKSHEET_SCAN_PATTERN = /<(?:[A-Za-z_][\w.-]*:)?(?:(cols|f|pane|dataValidation|conditionalFormatting|sheetProtection|protectedRange|rowBreaks|colBreaks|pageSetup|pageMargins|printOptions|headerFooter|pageSetUpPr|drawing|tableParts)(?=[\s/>])|(row)(?=[\s/>])[^>]*\s(?:collapsed|customFormat|customHeight|hidden|ht|outlineLevel|thickBot|thickTop)\s*=|(c)(?=[\s/>])[^>]*\ss\s*=|(r)(?=[\s/>]))/g;
|
|
4016
|
+
const WORKSHEET_SCAN_PATTERN = /<(?:[A-Za-z_][\w.-]*:)?(?:(cols|f|pane|autoFilter|dataValidation|conditionalFormatting|sheetProtection|protectedRange|rowBreaks|colBreaks|pageSetup|pageMargins|printOptions|headerFooter|pageSetUpPr|drawing|tableParts)(?=[\s/>])|(row)(?=[\s/>])[^>]*\s(?:collapsed|customFormat|customHeight|hidden|ht|outlineLevel|thickBot|thickTop)\s*=|(c)(?=[\s/>])[^>]*\ss\s*=|(r)(?=[\s/>]))/g;
|
|
4016
4017
|
function scanXlsxWorksheetXml(source) {
|
|
4017
4018
|
let hasDirectCellStyles = false;
|
|
4018
4019
|
let hasDiagnosticFeatures = false;
|
|
@@ -1430,8 +1430,142 @@ formulas authored on data rows and totals/header/data selectors. A consistent
|
|
|
1430
1430
|
current-row rule is persisted in the table metadata and fills only empty cells
|
|
1431
1431
|
in newly inserted body rows; manual values and conflicting formulas fail closed.
|
|
1432
1432
|
Dense and sparse sheet representations use the same path, and native XLSX
|
|
1433
|
-
`<calculatedColumnFormula>` metadata round-trips.
|
|
1434
|
-
|
|
1433
|
+
`<calculatedColumnFormula>` metadata round-trips. Native totals-row authoring
|
|
1434
|
+
now extends the same model: Table Design controls the row and each column's
|
|
1435
|
+
label, aggregate, or custom formula; native aggregates map to filter-aware
|
|
1436
|
+
`SUBTOTAL` codes; generated cells are reconciled after direct edits, row/column
|
|
1437
|
+
changes, and table renames; and `totalsRowFunction`, `totalsRowLabel`, and
|
|
1438
|
+
`totalsRowFormula` survive XLSX and Yjs round trips. Occupied, merged,
|
|
1439
|
+
protected, overlapping, AutoFilter, unsafe, external, and over-budget targets
|
|
1440
|
+
fail closed. Slicers and external/query tables remain open gates.
|
|
1441
|
+
|
|
1442
|
+
Value-based multi-key Custom Sort is now owned by a separate
|
|
1443
|
+
`spreadsheetSort` editor extension rather than the row/column structure
|
|
1444
|
+
extension. The command freezes one continuous selection, derives a header
|
|
1445
|
+
candidate, and validates up to 64 unique keys before cloning and stably sorting
|
|
1446
|
+
complete cell rows or columns. A nested Traditional Office-compatible Sort Options dialog
|
|
1447
|
+
selects top-to-bottom column keys or left-to-right row keys; the latter disables
|
|
1448
|
+
header retention because every selected column moves. The same normalized
|
|
1449
|
+
options select Simplified Chinese pinyin or stroke collation and optional case
|
|
1450
|
+
sensitivity. A key is a closed union
|
|
1451
|
+
of ascending/descending value order, an explicit custom sequence, or an
|
|
1452
|
+
effective cell-color, font-color, or conditional-icon target with axis-aware
|
|
1453
|
+
first/last placement. The
|
|
1454
|
+
`spreadsheet-sort-custom-list` model owns
|
|
1455
|
+
normalization, duplicate and size guards, seven immutable month/weekday lists,
|
|
1456
|
+
and rank matching; the validated request clones custom entries so command
|
|
1457
|
+
execution has no dependency on mutable UI state. The browser adapters own a
|
|
1458
|
+
bounded user-list registry and never writes preferences into controlled
|
|
1459
|
+
workbook content. Without a store it remains scoped to the mounted session.
|
|
1460
|
+
The optional typed `SpreadsheetSortCustomListStore` synchronously loads and
|
|
1461
|
+
saves canonical lists through a host-selected local backend. The provided
|
|
1462
|
+
`LocalStorageSpreadsheetSortCustomListStore` accepts an injected Storage
|
|
1463
|
+
object, uses a versioned key, and validates, deduplicates, and caps reads at 32
|
|
1464
|
+
lists. Corrupt reads fail closed; a rejected write visibly downgrades the new
|
|
1465
|
+
list to session scope. A stored list precedes an identical request-carried
|
|
1466
|
+
session copy so persistence identity remains stable. The separate
|
|
1467
|
+
`spreadsheet-sort-appearance` model snapshots direct native styles plus
|
|
1468
|
+
calculated conditional-format output, preserves no-fill/automatic identities,
|
|
1469
|
+
and declines to flatten native patterns or gradients into one color. The
|
|
1470
|
+
command reconstructs that snapshot from controlled sheet state and the live
|
|
1471
|
+
range immediately before execution, then validates its shape and target
|
|
1472
|
+
identities. The `spreadsheet-sort-collation` boundary compiles one local
|
|
1473
|
+
`Intl.Collator` per request, keeps numeric text lexical, behavior-probes the
|
|
1474
|
+
requested order instead of trusting runtime-specific resolved labels, and fails
|
|
1475
|
+
closed when that order is unavailable. A direction-neutral matrix engine transposes only its bounded item
|
|
1476
|
+
view, then uses one stable comparator for both orientations. Relative formula
|
|
1477
|
+
references are translated along the moved row or column axis with the same
|
|
1478
|
+
bounded reference engine used by Paste Special, while absolute references stay
|
|
1479
|
+
fixed.
|
|
1480
|
+
One accepted operation crosses the Fortune boundary as one range write and one
|
|
1481
|
+
controlled Undo record. Table, worksheet-AutoFilter, hyperlink-map,
|
|
1482
|
+
imported-formula-metadata, and border-sidecar intersections fail closed because
|
|
1483
|
+
those models still own coordinates outside the cell matrix. Moving large sorts,
|
|
1484
|
+
large aggregate/rank scans, remaining advanced filter predicates, full custom-list preference
|
|
1485
|
+
management, and structural sidecar reconciliation into the Worker/WASM kernel
|
|
1486
|
+
remains Stage 3 work.
|
|
1487
|
+
Direct host focus of the native grid now enters the same bounded focus observer
|
|
1488
|
+
used by ribbon commands. If a controlled workbook update replaces the focused
|
|
1489
|
+
Fortune overlay, focus transfers to its connected replacement; deliberate
|
|
1490
|
+
pointer, Tab, or active text-editor movement still cancels restoration.
|
|
1491
|
+
|
|
1492
|
+
Worksheet AutoFilter conditions now have a separate A3S-owned model and typed
|
|
1493
|
+
`spreadsheetAutoFilter` command extension. A versioned condition payload lives
|
|
1494
|
+
inside each Fortune filter column only as the grid projection; the controlled
|
|
1495
|
+
sheet, absolute header column, exact filter range, and editable state are
|
|
1496
|
+
reauthenticated before mutation. The pure evaluator reads dense or sparse cells
|
|
1497
|
+
and derives one hidden-row set per column. Their union drives Fortune row
|
|
1498
|
+
visibility, while an explicit overlap marker keeps independently hidden rows
|
|
1499
|
+
separate when a criterion is replaced or removed. This gives one source of
|
|
1500
|
+
truth for multi-column ownership instead of inferring provenance from the
|
|
1501
|
+
combined `config.rowhidden` map.
|
|
1502
|
+
|
|
1503
|
+
Same-column custom conditions use a separate fixed pair inside the closed
|
|
1504
|
+
filter union. Each item is a nonrecursive single-value predicate and the pair
|
|
1505
|
+
has one explicit AND/OR discriminator. The evaluator composes exactly two
|
|
1506
|
+
matchers, collaboration validation rejects any nested or differently sized
|
|
1507
|
+
condition array, and the dialog cannot attach a second condition to range,
|
|
1508
|
+
blank, Top/Bottom, or dynamic families.
|
|
1509
|
+
|
|
1510
|
+
Wildcard expressions are two additional nonrecursive custom-condition
|
|
1511
|
+
variants, so existing equality and other text operands remain literal. A pure
|
|
1512
|
+
compiler tokenizes `*`, `?`, and `~` once per criterion, normalizes literal
|
|
1513
|
+
segments and cell text with NFKC plus the existing locale-pinned lowercase
|
|
1514
|
+
folding, and evaluates the token sequence without executing or interpolating
|
|
1515
|
+
user text. The same 32,767-character operand ceiling is enforced by the dialog,
|
|
1516
|
+
model, command, and collaboration boundaries. Literal-only spans use ordered
|
|
1517
|
+
substring search; long fixed-width candidate scans switch to a bounded bitset
|
|
1518
|
+
matcher instead of quadratically rescanning late mismatches.
|
|
1519
|
+
|
|
1520
|
+
Top/Bottom criteria take a separate aggregate path before the per-cell matcher.
|
|
1521
|
+
The evaluator gathers finite numeric values from the filter column, converts a
|
|
1522
|
+
percentage to `ceil(n * percent / 100)` items, sorts in the requested direction,
|
|
1523
|
+
and uses the selected boundary as a comparison threshold. Every equal boundary
|
|
1524
|
+
value remains visible, while text, Boolean, blank, and nonfinite cells do not
|
|
1525
|
+
enter the ranking domain. Dense and sparse cell readers share this path, and
|
|
1526
|
+
the resulting hidden-row set remains one independently owned column entry.
|
|
1527
|
+
|
|
1528
|
+
Dynamic criteria use a separate pure compiler with an explicit local-clock
|
|
1529
|
+
context. Above/below-average consumes the column as an iterable, calculates one
|
|
1530
|
+
finite numeric mean, and returns a strict matcher without retaining the column.
|
|
1531
|
+
Date families compile one inclusive-start/exclusive-end serial interval and do
|
|
1532
|
+
not pre-read the column. They accept imported `Date` objects or finite numeric
|
|
1533
|
+
cells explicitly marked `ct.t='d'`, recover SheetJS local-date serials across
|
|
1534
|
+
time zones, reject the fictional serial 60, and never classify an unformatted
|
|
1535
|
+
number as a date. Relative weeks begin on Sunday; calendar month and quarter
|
|
1536
|
+
families classify independently of year. Column profiling is cached per
|
|
1537
|
+
immutable sheet and keeps typed dates out of numeric rank actions. The editor
|
|
1538
|
+
uses the current local clock, while model tests inject a deterministic clock.
|
|
1539
|
+
The controlled model still normalizes dates to the 1900 system; source-level
|
|
1540
|
+
1904 retention remains an explicit import boundary.
|
|
1541
|
+
|
|
1542
|
+
The same closed `WorkSpreadsheetFilterCriteria` union now serves worksheet and
|
|
1543
|
+
table native OOXML. Package scan and import read only the worksheet root's
|
|
1544
|
+
direct `<autoFilter>` child, hydrate supported criteria, and retain imported
|
|
1545
|
+
unsupported typed criteria without pretending to evaluate them. Export patches
|
|
1546
|
+
the generated worksheet element with native `<filterColumn>` children. General
|
|
1547
|
+
two-item `<customFilters and="1|0">` groups, arbitrary positive/negative
|
|
1548
|
+
wildcard expressions, negative prefix/suffix forms, and
|
|
1549
|
+
`<top10 top="..." percent="..." val="..."/>` criteria round-trip through the
|
|
1550
|
+
shared worksheet/table path. Imported native dynamic filters are recomputed
|
|
1551
|
+
from current cells and emitted as native `<dynamicFilter>` elements. Canonical
|
|
1552
|
+
edge-star patterns still normalize to
|
|
1553
|
+
the narrower contains, begins-with, or ends-with variants. The
|
|
1554
|
+
React adapter owns only vendor-menu discovery, the accessible condition dialog,
|
|
1555
|
+
short-lived selection preservation, and focus restoration; unsafe vendor sort
|
|
1556
|
+
items are not exposed because they bypass typed sort and structural guards.
|
|
1557
|
+
|
|
1558
|
+
Partial-range planning is a separate controlled concern. The shared
|
|
1559
|
+
`spreadsheet-current-region` model reads dense `data` and sparse `celldata`
|
|
1560
|
+
without materializing worksheet dimensions, so AutoFilter and Sort cannot
|
|
1561
|
+
derive different bounds. The command layer creates exact and expanded
|
|
1562
|
+
candidates and evaluates mutation and structural guards independently. The
|
|
1563
|
+
React adapter owns only the accessible warning/custom-dialog transition and a
|
|
1564
|
+
short-lived authorization containing the frozen sort request plus its original
|
|
1565
|
+
selection. The command accepts an expanded destination only while the live
|
|
1566
|
+
selection still matches that origin; stale host state therefore fails closed.
|
|
1567
|
+
The header heuristic likewise reads raw non-formula text instead of formatted
|
|
1568
|
+
display strings, keeping numeric and formula result rows in the data body.
|
|
1435
1569
|
|
|
1436
1570
|
Exit criteria: scrolling and selection do not scale with total row count;
|
|
1437
1571
|
incremental recalculation touches only affected dependency subgraphs; XLSX
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a3s-lab/office",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.1",
|
|
4
4
|
"description": "Open-source collaborative browser editors for documents, Markdown, spreadsheets, presentations, and PDFs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"office",
|
|
@@ -104,6 +104,12 @@
|
|
|
104
104
|
"playground:visual:spreadsheet-data-validation": "playwright test visual-tests/spreadsheet-data-validation.functional.spec.ts --config playwright.config.ts",
|
|
105
105
|
"playground:visual:spreadsheet-date-time": "playwright test visual-tests/spreadsheet-date-time.functional.spec.ts --config playwright.config.ts",
|
|
106
106
|
"playground:visual:spreadsheet-copy-from-above": "playwright test visual-tests/spreadsheet-copy-from-above.functional.spec.ts --config playwright.config.ts",
|
|
107
|
+
"playground:visual:spreadsheet-custom-sort": "playwright test visual-tests/spreadsheet-custom-sort.functional.spec.ts --config playwright.config.ts",
|
|
108
|
+
"playground:visual:spreadsheet-custom-list-sort": "playwright test visual-tests/spreadsheet-custom-list-sort.functional.spec.ts --config playwright.config.ts",
|
|
109
|
+
"playground:visual:spreadsheet-appearance-sort": "playwright test visual-tests/spreadsheet-appearance-sort.functional.spec.ts --config playwright.config.ts",
|
|
110
|
+
"playground:visual:spreadsheet-row-sort": "playwright test visual-tests/spreadsheet-row-sort.functional.spec.ts --config playwright.config.ts",
|
|
111
|
+
"playground:visual:spreadsheet-text-sort": "playwright test visual-tests/spreadsheet-text-sort.functional.spec.ts --config playwright.config.ts",
|
|
112
|
+
"playground:visual:spreadsheet-sort-range": "playwright test visual-tests/spreadsheet-sort-range.functional.spec.ts --config playwright.config.ts",
|
|
107
113
|
"playground:visual:spreadsheet-font-dialog-shortcuts": "playwright test visual-tests/spreadsheet-font-dialog-shortcuts.functional.spec.ts --config playwright.config.ts",
|
|
108
114
|
"playground:visual:spreadsheet-diagonal-borders": "playwright test visual-tests/spreadsheet-diagonal-borders.functional.spec.ts --config playwright.config.ts",
|
|
109
115
|
"playground:visual:spreadsheet-font-colors-shortcuts": "playwright test visual-tests/spreadsheet-font-colors-shortcuts.functional.spec.ts --config playwright.config.ts",
|
|
@@ -114,6 +120,7 @@
|
|
|
114
120
|
"playground:visual:spreadsheet-rich-text": "playwright test visual-tests/spreadsheet-rich-text.functional.spec.ts --config playwright.config.ts",
|
|
115
121
|
"playground:visual:spreadsheet-underline": "playwright test visual-tests/spreadsheet-underline.functional.spec.ts --config playwright.config.ts",
|
|
116
122
|
"playground:visual:spreadsheet-table": "playwright test visual-tests/spreadsheet-table.functional.spec.ts --config playwright.config.ts",
|
|
123
|
+
"playground:visual:spreadsheet-table-totals": "playwright test visual-tests/spreadsheet-table-totals.functional.spec.ts --config playwright.config.ts",
|
|
117
124
|
"playground:visual:presentation-animation": "playwright test visual-tests/presentation-animation.functional.spec.ts --config playwright.config.ts",
|
|
118
125
|
"playground:visual:pdf-page-organization": "playwright test visual-tests/pdf-page-organization.functional.spec.ts --config playwright.config.ts",
|
|
119
126
|
"playground:visual:update": "playwright test --config playwright.config.ts --update-snapshots",
|
|
@@ -136,6 +143,8 @@
|
|
|
136
143
|
"test:e2e:pdf-page-organization:check": "a3s-test check tests/e2e/pdf-page-organization.acl --json",
|
|
137
144
|
"test:e2e:presentation-animation": "A3S_TEST_SUITE=tests/e2e/presentation-animation.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
138
145
|
"test:e2e:presentation-animation:check": "a3s-test check tests/e2e/presentation-animation.acl --json",
|
|
146
|
+
"test:e2e:presentation-chinese-ime": "A3S_TEST_SUITE=tests/e2e/presentation-chinese-ime.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
147
|
+
"test:e2e:presentation-chinese-ime:check": "a3s-test check tests/e2e/presentation-chinese-ime.acl --json",
|
|
139
148
|
"test:e2e:large-presentation": "bun .a3s-test/performance/generate-fixtures.ts --presentations-only && a3s-test run tests/e2e/presentation-large-windowing.acl --json",
|
|
140
149
|
"test:e2e:large-presentation:check": "a3s-test check tests/e2e/presentation-large-windowing.acl --json",
|
|
141
150
|
"test:e2e:initial-focus": "a3s-test run tests/e2e/office-editor-initial-focus.acl --json",
|
|
@@ -178,6 +187,20 @@
|
|
|
178
187
|
"test:e2e:spreadsheet-underline-styles:check": "a3s-test check tests/e2e/spreadsheet-underline-styles.acl --json",
|
|
179
188
|
"test:e2e:spreadsheet-table": "a3s-test run tests/e2e/spreadsheet-table.acl --json",
|
|
180
189
|
"test:e2e:spreadsheet-table:check": "a3s-test check tests/e2e/spreadsheet-table.acl --json",
|
|
190
|
+
"test:e2e:spreadsheet-table-totals": "a3s-test run tests/e2e/spreadsheet-table-totals.acl --json",
|
|
191
|
+
"test:e2e:spreadsheet-table-totals:check": "a3s-test check tests/e2e/spreadsheet-table-totals.acl --json",
|
|
192
|
+
"test:e2e:spreadsheet-custom-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-custom-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
193
|
+
"test:e2e:spreadsheet-custom-sort:check": "a3s-test check tests/e2e/spreadsheet-custom-sort.acl --json",
|
|
194
|
+
"test:e2e:spreadsheet-custom-list-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-custom-list-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
195
|
+
"test:e2e:spreadsheet-custom-list-sort:check": "a3s-test check tests/e2e/spreadsheet-custom-list-sort.acl --json",
|
|
196
|
+
"test:e2e:spreadsheet-appearance-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-appearance-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
197
|
+
"test:e2e:spreadsheet-appearance-sort:check": "a3s-test check tests/e2e/spreadsheet-appearance-sort.acl --json",
|
|
198
|
+
"test:e2e:spreadsheet-row-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-row-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
199
|
+
"test:e2e:spreadsheet-row-sort:check": "a3s-test check tests/e2e/spreadsheet-row-sort.acl --json",
|
|
200
|
+
"test:e2e:spreadsheet-text-sort": "A3S_TEST_SUITE=tests/e2e/spreadsheet-text-sort.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
201
|
+
"test:e2e:spreadsheet-text-sort:check": "a3s-test check tests/e2e/spreadsheet-text-sort.acl --json",
|
|
202
|
+
"test:e2e:spreadsheet-sort-range": "A3S_TEST_SUITE=tests/e2e/spreadsheet-sort-range.acl bash scripts/run-a3s-test-web-gate.sh",
|
|
203
|
+
"test:e2e:spreadsheet-sort-range:check": "a3s-test check tests/e2e/spreadsheet-sort-range.acl --json",
|
|
181
204
|
"test:e2e:spreadsheet-cell-fill": "a3s-test run tests/e2e/spreadsheet-cell-fill.acl --json",
|
|
182
205
|
"test:e2e:spreadsheet-cell-fill:check": "a3s-test check tests/e2e/spreadsheet-cell-fill.acl --json",
|
|
183
206
|
"test:e2e:spreadsheet-auto-sum": "a3s-test run tests/e2e/spreadsheet-auto-sum.acl --json",
|