diff --git a/.changeset/automated-release-publishing.md b/.changeset/automated-release-publishing.md deleted file mode 100644 index 59538f20..00000000 --- a/.changeset/automated-release-publishing.md +++ /dev/null @@ -1,4 +0,0 @@ ---- ---- - -Automate stable tag releases with canonical tarball verification, npm provenance, public registry checks, and GitHub release notes. diff --git a/.changeset/stable-failure-contracts.md b/.changeset/stable-failure-contracts.md deleted file mode 100644 index d7eb5600..00000000 --- a/.changeset/stable-failure-contracts.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@sheetwrite/core": minor -"@sheetwrite/react": minor -"@sheetwrite/vue": minor -"@sheetwrite/svelte": minor -"@sheetwrite/xlsx": minor ---- - -Add the canonical `SheetwriteError` envelope and stable error codes across initialization, Grid events, persistence, synchronization, collaboration, delimited text, and optional XLSX boundaries. Framework initialization callbacks now receive the same typed error class, and XLSX cancellation preserves the original abort reason as `cause`. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fad125f..3c0a108b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,7 +61,7 @@ jobs: test "$(npm --version)" = "$NPM_VERSION" test "$(rustc --version | cut -d' ' -f2)" = "$RUST_VERSION" - name: Changeset status - run: bun run changeset:status -- --since=origin/develop + run: bun run changeset:ci - name: Install checksum-pinned wasm-pack run: bun scripts/install-wasm-pack.ts - name: Tooling contracts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c570824d..bab729c6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -105,7 +105,7 @@ jobs: id: size-history if: steps.publish.outputs.verified != '[]' run: | - VERSION="$(node -p "require('./package.json').version")" + VERSION="$(node -p "require('./packages/core/package.json').version")" echo "version=$VERSION" >> "$GITHUB_OUTPUT" bun run size:record --version="$VERSION" bun run docs:generate diff --git a/docs/src/content/docs/api/core-adapter/create-grid-controller.md b/docs/src/content/docs/api/core-adapter/create-grid-controller.md index 83f9770a..0b683689 100644 --- a/docs/src/content/docs/api/core-adapter/create-grid-controller.md +++ b/docs/src/content/docs/api/core-adapter/create-grid-controller.md @@ -9,7 +9,7 @@ Create a grid and wire its lifecycle once, so the React/Vue/Svelte adapters (and any plain host) share a single, drift-free implementation instead of each re-deriving the same create → subscribe → teardown behavior. -`initSheetwrite()` MUST already have been awaited; `createGrid` throws +`initSheetwrite()` MUST already have been awaited; [`createGrid`](/docs/api/core/create-grid/) throws otherwise. ### Live handlers diff --git a/docs/src/content/docs/api/core-adapter/grid-controller.md b/docs/src/content/docs/api/core-adapter/grid-controller.md index 3916f68f..c9acf781 100644 --- a/docs/src/content/docs/api/core-adapter/grid-controller.md +++ b/docs/src/content/docs/api/core-adapter/grid-controller.md @@ -28,7 +28,7 @@ readonly grid: Grid;
-setTheme Apply the host's declarative theme prop: option-level replacement via Grid.replaceTheme; undefined restores CSS/default resolution. +setTheme Apply the host's declarative theme prop: option-level replacement via Grid.replaceTheme; undefined restores CSS/default resolution. ```ts generated setTheme(theme: Partial | undefined): void; diff --git a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md index dd68aab4..8d27bef5 100644 --- a/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md +++ b/docs/src/content/docs/api/core-adapter/row-bridge-reconciliation-input.md @@ -5,7 +5,7 @@ description: "Input to RowBridge.reconcile." -Input to `RowBridge.reconcile`. +Input to [`RowBridge.reconcile`](/docs/api/core-adapter/row-bridge/#row-bridge-reconcile).
-commitReason What produced this commit — see CommitReason. +commitReason What produced this commit — see CommitReason. ```ts generated commitReason: CommitReason; diff --git a/docs/src/content/docs/api/core/commit-reason.md b/docs/src/content/docs/api/core/commit-reason.md new file mode 100644 index 00000000..f6b70f0f --- /dev/null +++ b/docs/src/content/docs/api/core/commit-reason.md @@ -0,0 +1,39 @@ +--- +title: "CommitReason | @sheetwrite/core" +description: "The gesture/operation that produced a committed transaction." +--- + +
@sheetwrite/coretype
+ +The gesture/operation that produced a committed transaction. Consumers +switching on reasons MUST keep a default branch — the union grows with new +mutation features. + +
+
Package
@sheetwrite/core
+
Source
packages/core/src/types/document.ts#L207
+
+ +## Declaration + +
+ +```ts generated +export type CommitReason = + | "edit-blur" + | "edit-enter" + | "edit-tab" + | "edit-programmatic" + | "paste" + | "cut" + | "clear" + | "fill" + | "structure" + | "style" + | "replace" + | "undo" + | "redo" + | "api"; +``` + +
diff --git a/docs/src/content/docs/api/core/grid.md b/docs/src/content/docs/api/core/grid.md index a5d1227b..8a0ddbc3 100644 --- a/docs/src/content/docs/api/core/grid.md +++ b/docs/src/content/docs/api/core/grid.md @@ -139,7 +139,7 @@ replaceTheme(theme: Partial | undefined): void; (`DEFAULT_THEME < CSS custom properties < theme`) with the new partial. `undefined` restores the CSS-variable/default resolution. Adapters call this for their declarative `theme` prop; imperative patching stays on -setTheme.

+setTheme.

@@ -726,7 +726,7 @@ styleRange(range: Range, style: Partial | null): void;

Merge `style` into every cell of `range` (null clears cell styles) as one undoable transaction. Styles land in the store and paint in the canvas — -unlike highlightCells, which draws a translucent overlay above it.

+unlike highlightCells, which draws a translucent overlay above it.

diff --git a/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md b/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md index e04d5f67..cab19bce 100644 --- a/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md +++ b/docs/src/content/docs/api/core/row-bridge-reconciliation-input.md @@ -5,7 +5,7 @@ description: "Input to RowBridge.reconcile."
@sheetwrite/coreinterface
-Input to `RowBridge.reconcile`. +Input to [`RowBridge.reconcile`](/docs/api/core/row-bridge/#row-bridge-reconcile).
Package
@sheetwrite/core
diff --git a/docs/src/content/docs/api/index.md b/docs/src/content/docs/api/index.md index 0041e5a5..a6c9b60f 100644 --- a/docs/src/content/docs/api/index.md +++ b/docs/src/content/docs/api/index.md @@ -9,7 +9,7 @@ The package `exports` maps define this inventory. Supported, internal, asset, an - + diff --git a/docs/src/content/docs/api/react/grid.md b/docs/src/content/docs/api/react/grid.md index 996d496a..bff124dc 100644 --- a/docs/src/content/docs/api/react/grid.md +++ b/docs/src/content/docs/api/react/grid.md @@ -98,7 +98,7 @@ getCellInput(row: number, col: number): CellInputSnapshot | null; ```

Editable snapshot of the cell at a view position on the active sheet, or -null when out of bounds. See CellInputSnapshot.

+null when out of bounds. See CellInputSnapshot.

@@ -139,7 +139,7 @@ replaceTheme(theme: Partial | undefined): void; (`DEFAULT_THEME < CSS custom properties < theme`) with the new partial. `undefined` restores the CSS-variable/default resolution. Adapters call this for their declarative `theme` prop; imperative patching stays on -setTheme.

+setTheme.

@@ -470,7 +470,7 @@ replaceCurrent(replacement: string): SearchResult;

Replace the active match with `replacement`, then advance to the next match (re-scanning against the new data). Only literal text/number cells are eligible; formula and ref cells are skipped (formula source is never -rewritten). Honors the active SearchOptions (matchCase; `wholeCell` +rewritten). Honors the active SearchOptions (matchCase; `wholeCell` swaps the entire cell). The write flows through the grid's commit path as one undoable step. No-op when read-only or when there is no active match.

@@ -726,7 +726,7 @@ styleRange(range: Range, style: Partial | null): void;

Merge `style` into every cell of `range` (null clears cell styles) as one undoable transaction. Styles land in the store and paint in the canvas — -unlike highlightCells, which draws a translucent overlay above it.

+unlike highlightCells, which draws a translucent overlay above it.

diff --git a/docs/src/content/docs/api/svelte/grid.md b/docs/src/content/docs/api/svelte/grid.md index 6329afe6..3b4bb9b9 100644 --- a/docs/src/content/docs/api/svelte/grid.md +++ b/docs/src/content/docs/api/svelte/grid.md @@ -98,7 +98,7 @@ getCellInput(row: number, col: number): CellInputSnapshot | null; ```

Editable snapshot of the cell at a view position on the active sheet, or -null when out of bounds. See CellInputSnapshot.

+null when out of bounds. See CellInputSnapshot.

@@ -139,7 +139,7 @@ replaceTheme(theme: Partial | undefined): void; (`DEFAULT_THEME < CSS custom properties < theme`) with the new partial. `undefined` restores the CSS-variable/default resolution. Adapters call this for their declarative `theme` prop; imperative patching stays on -setTheme.

+setTheme.

@@ -470,7 +470,7 @@ replaceCurrent(replacement: string): SearchResult;

Replace the active match with `replacement`, then advance to the next match (re-scanning against the new data). Only literal text/number cells are eligible; formula and ref cells are skipped (formula source is never -rewritten). Honors the active SearchOptions (matchCase; `wholeCell` +rewritten). Honors the active SearchOptions (matchCase; `wholeCell` swaps the entire cell). The write flows through the grid's commit path as one undoable step. No-op when read-only or when there is no active match.

@@ -726,7 +726,7 @@ styleRange(range: Range, style: Partial | null): void;

Merge `style` into every cell of `range` (null clears cell styles) as one undoable transaction. Styles land in the store and paint in the canvas — -unlike highlightCells, which draws a translucent overlay above it.

+unlike highlightCells, which draws a translucent overlay above it.

diff --git a/docs/src/content/docs/api/vue/grid.md b/docs/src/content/docs/api/vue/grid.md index fcfe12ef..a534e4b8 100644 --- a/docs/src/content/docs/api/vue/grid.md +++ b/docs/src/content/docs/api/vue/grid.md @@ -98,7 +98,7 @@ getCellInput(row: number, col: number): CellInputSnapshot | null; ```

Editable snapshot of the cell at a view position on the active sheet, or -null when out of bounds. See CellInputSnapshot.

+null when out of bounds. See CellInputSnapshot.

@@ -139,7 +139,7 @@ replaceTheme(theme: Partial | undefined): void; (`DEFAULT_THEME < CSS custom properties < theme`) with the new partial. `undefined` restores the CSS-variable/default resolution. Adapters call this for their declarative `theme` prop; imperative patching stays on -setTheme.

+setTheme.

@@ -470,7 +470,7 @@ replaceCurrent(replacement: string): SearchResult;

Replace the active match with `replacement`, then advance to the next match (re-scanning against the new data). Only literal text/number cells are eligible; formula and ref cells are skipped (formula source is never -rewritten). Honors the active SearchOptions (matchCase; `wholeCell` +rewritten). Honors the active SearchOptions (matchCase; `wholeCell` swaps the entire cell). The write flows through the grid's commit path as one undoable step. No-op when read-only or when there is no active match.

@@ -726,7 +726,7 @@ styleRange(range: Range, style: Partial | null): void;

Merge `style` into every cell of `range` (null clears cell styles) as one undoable transaction. Styles land in the store and paint in the canvas — -unlike highlightCells, which draws a translucent overlay above it.

+unlike highlightCells, which draws a translucent overlay above it.

diff --git a/docs/src/content/docs/api/wasm.md b/docs/src/content/docs/api/wasm.md index 04bb511c..1940ca7f 100644 --- a/docs/src/content/docs/api/wasm.md +++ b/docs/src/content/docs/api/wasm.md @@ -22,7 +22,7 @@ Source entry: `packages/wasm/loader.d.ts` CellStoreThe workbook-wide store: every sheet, one string pool. DistinctColumnDistinct-value scan result for one column: parallel kind/number/text arrays whose buffers are surrendered once through the take accessors. RangeSnapshotOpaque, store-local history payload for one dense rectangular cell block. -SourceSnapshotCompact serializable projection of persisted derived-cell sources in one range. +SourceSnapshotCompact serializable projection of persisted derived-cell sources and spill identity in one range. WindowViewA bulk window of resolved cells, row-major over nrows x ncols. diff --git a/docs/src/content/docs/api/wasm/cell-store.md b/docs/src/content/docs/api/wasm/cell-store.md index 456e15b0..fdca90c4 100644 --- a/docs/src/content/docs/api/wasm/cell-store.md +++ b/docs/src/content/docs/api/wasm/cell-store.md @@ -12,7 +12,7 @@ The workbook-wide store: every sheet, one string pool.
Source
packages/wasm/pkg/sheetwrite_wasm.d.ts#L20
-## Members 91 +## Members 90
@@ -121,14 +121,15 @@ returned opaque object is compact in source cardinality, not cell count.

-captureSourcesForRows Capture persisted formula/reference sources for arbitrary row/column coordinates. +captureSourcesForRows Capture persisted formula/reference sources and derived-spill identity for arbitrary row/column coordinates in one boundary crossing. ```ts generated captureSourcesForRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => SourceSnapshot | undefined; ``` -

Capture persisted formula/reference sources for arbitrary row/column -coordinates. Offsets follow the caller's row-major coordinate order.

+

Capture persisted formula/reference sources and derived-spill identity +for arbitrary row/column coordinates in one boundary crossing. Offsets +follow the caller's row-major coordinate order.

@@ -873,15 +874,6 @@ spillDerivedMask: (sheet: number, row_start: number, row_end: number, cols: Uint
-
-spillDerivedMaskForRows Row-major derived-cell mask for an explicit view-row order. - -```ts generated -spillDerivedMaskForRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => Uint8Array; -``` - -
-
spillOwnerCoordinates Packed row-major [anchorrow, anchorcol, ...] owner coordinates. @@ -1264,11 +1256,6 @@ class CellStore { row_end: number, cols: Uint32Array, ) => Uint8Array; - spillDerivedMaskForRows: ( - sheet: number, - rows: Uint32Array, - cols: Uint32Array, - ) => Uint8Array; spillOwnerCoordinates: ( sheet: number, row_start: number, diff --git a/docs/src/content/docs/api/wasm/distinct-column.md b/docs/src/content/docs/api/wasm/distinct-column.md index 66a0d0e6..63fad163 100644 --- a/docs/src/content/docs/api/wasm/distinct-column.md +++ b/docs/src/content/docs/api/wasm/distinct-column.md @@ -10,7 +10,7 @@ arrays whose buffers are surrendered once through the `take*` accessors. ## Members 4 diff --git a/docs/src/content/docs/api/wasm/init-input.md b/docs/src/content/docs/api/wasm/init-input.md index 202e24e4..f307b690 100644 --- a/docs/src/content/docs/api/wasm/init-input.md +++ b/docs/src/content/docs/api/wasm/init-input.md @@ -9,7 +9,7 @@ Sources accepted by asynchronous initialization: a fetchable URL/request/respons ## Declaration diff --git a/docs/src/content/docs/api/wasm/init-output.md b/docs/src/content/docs/api/wasm/init-output.md index efad4935..5c84d387 100644 --- a/docs/src/content/docs/api/wasm/init-output.md +++ b/docs/src/content/docs/api/wasm/init-output.md @@ -9,7 +9,7 @@ Result of module initialization: the instantiated exports plus the shared linear ## Members 134 @@ -898,15 +898,6 @@ readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number
-
-cellstore_spillDerivedMaskForRows - -```ts generated -readonly cellstore_spillDerivedMaskForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; -``` - -
-
cellstore_spillOwnerCoordinates @@ -1069,6 +1060,15 @@ readonly sourcesnapshot_referenceTargets: (a: number) => [number, number];
+
+sourcesnapshot_spillDerived + +```ts generated +readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; +``` + +
+
windowview_nCols @@ -1800,14 +1800,6 @@ export interface InitOutput { e: number, f: number, ) => [number, number]; - readonly cellstore_spillDerivedMaskForRows: ( - a: number, - b: number, - c: number, - d: number, - e: number, - f: number, - ) => [number, number]; readonly cellstore_spillOwnerCoordinates: ( a: number, b: number, @@ -1838,6 +1830,7 @@ export interface InitOutput { readonly sourcesnapshot_formulaSources: (a: number) => [number, number]; readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number]; readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; + readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; readonly windowview_nRows: (a: number) => number; readonly windowview_takeCondMatches: (a: number) => [number, number]; diff --git a/docs/src/content/docs/api/wasm/init-sync.md b/docs/src/content/docs/api/wasm/init-sync.md index 2a7b29e2..77611164 100644 --- a/docs/src/content/docs/api/wasm/init-sync.md +++ b/docs/src/content/docs/api/wasm/init-sync.md @@ -10,7 +10,7 @@ a precompiled `WebAssembly.Module`. ## Declaration diff --git a/docs/src/content/docs/api/wasm/range-snapshot.md b/docs/src/content/docs/api/wasm/range-snapshot.md index 3aaa384d..6234fe54 100644 --- a/docs/src/content/docs/api/wasm/range-snapshot.md +++ b/docs/src/content/docs/api/wasm/range-snapshot.md @@ -13,7 +13,7 @@ the owning `CellStore`, so snapshots must only be restored into that store. ## Members 8 diff --git a/docs/src/content/docs/api/wasm/source-snapshot.md b/docs/src/content/docs/api/wasm/source-snapshot.md index 6f520d3b..f8fd82d5 100644 --- a/docs/src/content/docs/api/wasm/source-snapshot.md +++ b/docs/src/content/docs/api/wasm/source-snapshot.md @@ -1,20 +1,20 @@ --- title: "SourceSnapshot | @sheetwrite/wasm" -description: "Compact serializable projection of persisted derived-cell sources in one range." +description: "Compact serializable projection of persisted derived-cell sources and spill identity in one range." --- -Compact serializable projection of persisted derived-cell sources in one -range. Offsets are row-major and sorted; reference targets are packed -`[sheet_handle, row, col]` triples. +Compact serializable projection of persisted derived-cell sources and spill +identity in one range. Offsets are row-major and sorted; reference targets +are packed `[sheet_handle, row, col]` triples. -## Members 6 +## Members 7
@@ -67,7 +67,16 @@ referenceOffsets: () => Uint32Array; referenceTargets ```ts generated -referenceTargets: () => Uint32Array +referenceTargets: () => Uint32Array; +``` + +
+ +
+spillDerived + +```ts generated +spillDerived: () => Uint8Array ```
@@ -86,6 +95,7 @@ class SourceSnapshot { free: () => void; referenceOffsets: () => Uint32Array; referenceTargets: () => Uint32Array; + spillDerived: () => Uint8Array; } ``` diff --git a/docs/src/content/docs/api/wasm/sync-init-input.md b/docs/src/content/docs/api/wasm/sync-init-input.md index f2d6f28c..3ce265f9 100644 --- a/docs/src/content/docs/api/wasm/sync-init-input.md +++ b/docs/src/content/docs/api/wasm/sync-init-input.md @@ -9,7 +9,7 @@ Sources accepted by synchronous initialization: raw module bytes or a precompile ## Declaration diff --git a/docs/src/content/docs/api/wasm/window-view.md b/docs/src/content/docs/api/wasm/window-view.md index 6045b040..0590bfbe 100644 --- a/docs/src/content/docs/api/wasm/window-view.md +++ b/docs/src/content/docs/api/wasm/window-view.md @@ -9,7 +9,7 @@ A bulk window of resolved cells, row-major over `n_rows x n_cols`. ## Members 11 diff --git a/docs/src/content/docs/concepts/runtime-ownership.mdx b/docs/src/content/docs/concepts/runtime-ownership.mdx index 3c61e9dc..030f0671 100644 --- a/docs/src/content/docs/concepts/runtime-ownership.mdx +++ b/docs/src/content/docs/concepts/runtime-ownership.mdx @@ -27,7 +27,7 @@ the sole animation-frame and paint-cache owner. Interaction-specific controllers remain separate. These are internal ownership boundaries; the public API stays the `Grid` and `Store` contracts. -## Canvas rendering + the WASM columnar store +## Canvas rendering and the WASM columnar store Cells live in the WASM module as typed columns, not as objects. Each cell has a kind—`EMPTY=0`, `NUMBER=1`, `STRING=2`, `BOOLEAN=3`, or `FORMULA=4`—and diff --git a/docs/src/content/docs/guides/performance-resources.md b/docs/src/content/docs/guides/performance-resources.md index d77041c2..7fca3164 100644 --- a/docs/src/content/docs/guides/performance-resources.md +++ b/docs/src/content/docs/guides/performance-resources.md @@ -961,6 +961,50 @@ bun run --filter @sheetwrite/bench bench:formula

Registry measurements for every published release. Each delta is measured against the release immediately before it.

+v0.2.0v0.3.0 + + + +
+
Entry pointClassificationSymbols
@sheetwrite/coresupported313
@sheetwrite/coresupported314
@sheetwrite/core/adaptersupported51
@sheetwrite/core/browsersupported4
@sheetwrite/core/shellsupported13
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTarballInstalled
@sheetwrite/wasm287.6 KiB+107.1 KiB+59.4%795.6 KiB+305.6 KiB+62.4%
@sheetwrite/core517.4 KiB+145.0 KiB+38.9%2.71 MiB+821.8 KiB+42.0%
@sheetwrite/xlsx85.5 KiB+10.5 KiB+14.0%429.6 KiB+63.5 KiB+17.3%
@sheetwrite/react9.2 KiB+2.2 KiB+31.2%31.9 KiB+9.9 KiB+45.0%
@sheetwrite/vue10.1 KiB+1.5 KiB+17.7%35.7 KiB+7.2 KiB+25.3%
@sheetwrite/svelte6.2 KiB+1,002 B+18.7%18.5 KiB+3.9 KiB+27.1%
+ +
+
+ v0.1.0v0.2.0 diff --git a/docs/src/content/docs/guides/worker-rendering.md b/docs/src/content/docs/guides/worker-rendering.md index e4f4e1e3..62057923 100644 --- a/docs/src/content/docs/guides/worker-rendering.md +++ b/docs/src/content/docs/guides/worker-rendering.md @@ -106,4 +106,4 @@ use the main-thread `canvas` renderer. ## See also - [Configuration](/docs/guides/configuration/#gridoptions) for `renderer` and `workerUrl`. -- [Concepts](/docs/concepts/runtime-ownership/#canvas-rendering-the-wasm-columnar-store) for the transferable window snapshot. +- [Concepts](/docs/concepts/runtime-ownership/#canvas-rendering-and-the-wasm-columnar-store) for the transferable window snapshot. diff --git a/docs/src/generated/compatibility-results.json b/docs/src/generated/compatibility-results.json index cf4ccea7..ac5b35a1 100644 --- a/docs/src/generated/compatibility-results.json +++ b/docs/src/generated/compatibility-results.json @@ -2,7 +2,7 @@ "schemaVersion": 1, "testSet": { "version": 1, - "libraryVersion": "0.3.0", + "libraryVersion": "0.3.1", "checksum": "bdf94c76df81ea1fa2e1bf96a557c41b21a0f11ea11ae612fcccc35157d7275a", "totalTests": 2350, "publishedExamples": 177, diff --git a/docs/src/generated/docs-contract.json b/docs/src/generated/docs-contract.json index f3fee0cf..ada5e87d 100644 --- a/docs/src/generated/docs-contract.json +++ b/docs/src/generated/docs-contract.json @@ -23,9 +23,9 @@ "toXlsxWorkbook" ], "entryPointCount": 18, - "exportCount": 467, - "symbolPageCount": 467, - "apiSha256": "6da493e5fff8d08d8f42a515ae0af3f1ebfb79c33d75f427fd31b82c479a1dc6", + "exportCount": 468, + "symbolPageCount": 468, + "apiSha256": "9cc3fe343edebb80e5eb431b802655092d5ccd02d94ab4dfab76127c312d6192", "compatibilitySha256": "3dc63d06901349f4edd5b2b5bc332b87cdbecacc54d303c85eb2b0b1354ed01a", "formulaContractSha256": "c19bbb023fd08bd378ca2d0b82761fa1b203e29f93a5d4b32bf4a2e6ce4affaf" } diff --git a/docs/src/generated/public-api.json b/docs/src/generated/public-api.json index f4697dec..bb518e87 100644 --- a/docs/src/generated/public-api.json +++ b/docs/src/generated/public-api.json @@ -738,6 +738,18 @@ "documentation": "Versioned discussion anchored to a document location.", "memberDocs": [] }, + { + "name": "CommitReason", + "kind": "type", + "signature": "export type CommitReason = | \"edit-blur\" | \"edit-enter\" | \"edit-tab\" | \"edit-programmatic\" | \"paste\" | \"cut\" | \"clear\" | \"fill\" | \"structure\" | \"style\" | \"replace\" | \"undo\" | \"redo\" | \"api\";", + "owners": [ + "src/types/document.ts" + ], + "source": "src/types/document.ts#L207", + "jsDocTags": [], + "documentation": "The gesture/operation that produced a committed transaction. Consumers\nswitching on reasons MUST keep a default branch — the union grows with new\nmutation features.", + "memberDocs": [] + }, { "name": "ConditionalFormatPredicate", "kind": "type", @@ -9333,7 +9345,7 @@ { "name": "CellStore", "kind": "class", - "signature": "class CellStore { acknowledgeRevision: (revision: bigint) => void; addPagedSheet: (n_cols: number, row_count: number, chunk_rows: number, byte_budget: number, max_dirty_cells: number) => number; addRows: (sheet: number, at: number, count: number) => void; addSheet: (n_cols: number, row_count: number) => number; aggregate: (sheet: number, col: number, op: number) => number; beginMutation: () => bigint; beginPageLoad: () => void; canDirtyCell: (sheet: number, row: number, col: number) => boolean; captureRange: (sheet: number, r0: number, c0: number, rows: number, cols: number) => RangeSnapshot | undefined; captureReferences: (sheet: number, max_entries: number) => SourceSnapshot | undefined; captureSources: (sheet: number, r0: number, c0: number, rows: number, cols: number) => SourceSnapshot | undefined; captureSourcesForRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => SourceSnapshot | undefined; cellState: (sheet: number, row: number, col: number) => number; clearCell: (sheet: number, row: number, col: number, style: number) => void; clearRange: (sheet: number, r0: number, c0: number, r1: number, c1: number, contents: boolean, style: boolean) => boolean; colCount: (sheet: number) => number; columnsFullyLoaded: (sheet: number, start_row: number, end_row: number, cols: Uint32Array) => boolean; compactStringStorage: () => void; dataEdge: (sheet: number, row: number, col: number, d_row: number, d_col: number) => number; dataEdgeOrdered: (sheet: number, order: Uint32Array, row: number, col: number, d_row: number, d_col: number) => number; dirtyRevision: (sheet: number, row: number, col: number) => bigint; distinctValues: (sheet: number, col: number, limit: number) => DistinctColumn; endMutation: () => void; endPageLoad: () => void; filterRows: (sheet: number, col: number, needle: string) => Uint32Array; filterRowsMulti: (sheet: number, cols: Uint32Array, kinds: Uint8Array, flags: Uint8Array, nums: Float64Array, num_counts: Uint32Array, text_counts: Uint32Array, value_nums: Float64Array, value_texts: string[]) => Uint32Array; formulaMatrixResourceStats: () => Float64Array; formulaSource: (sheet: number, row: number, col: number) => string | undefined; free: () => void; getCell: (sheet: number, row: number, col: number) => CellOut; getWindow: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => WindowView; getWindowRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => WindowView; hydratePageNumbers: (sheet: number, col: number, start_row: number, values: Float64Array, style: number, protected_offsets: Uint32Array) => void; hydratePageStringsPacked: (sheet: number, col: number, start_row: number, buf: string, utf16_lens: Uint32Array, style: number, protected_offsets: Uint32Array) => void; insertCols: (sheet: number, at: number, count: number) => void; isFullyLoaded: (sheet: number) => boolean; isPaged: (sheet: number) => boolean; isSheetAlive: (sheet: number) => boolean; markCellCleanRevision: (sheet: number, row: number, col: number, revision: bigint) => boolean; markRangeClean: (sheet: number, start_row: number, end_row: number, start_col: number, end_col: number) => void; memoryStats: () => Float64Array; pagedDirtyCoordinates: (sheet: number) => Float64Array; pagedStats: (sheet: number) => Float64Array; persistedCellData: (sheet: number) => Float64Array; pinRange: (sheet: number, start_row: number, end_row: number, cols: Uint32Array) => void; poolStrings: (ids: Uint32Array) => string[]; queryResourceStats: () => Float64Array; rangeFullyLoaded: (sheet: number, r0: number, c0: number, r1: number, c1: number) => boolean; rangeStyleIds: (sheet: number, r0: number, c0: number, r1: number, c1: number) => Uint32Array; recompute: (sheet: number) => void; recomputeChanged: () => void; recomputeVolatile: (serial: number) => boolean; referenceTarget: (sheet: number, row: number, col: number) => Uint32Array | undefined; referencesTargeting: (target_sheet: number, max_entries: number) => Uint32Array | undefined; remapRangeStyles: (sheet: number, r0: number, c0: number, r1: number, c1: number, old_ids: Uint32Array, new_ids: Uint32Array) => boolean; removeCols: (sheet: number, at: number, count: number) => void; removeNamedRange: (name: string, scope: number) => boolean; removeRows: (sheet: number, at: number, count: number) => void; removeSheet: (sheet: number) => boolean; removeTable: (id: string) => boolean; renameSheet: (sheet: number, id: string, name: string) => boolean; resetFormulaMatrixResourceStats: () => void; resetQueryResourceStats: () => void; restoreRange: (sheet: number, r0: number, c0: number, snapshot: RangeSnapshot) => boolean; rowCount: (sheet: number) => number; search: (sheet: number, cols: Uint32Array, query: string, case_insensitive: boolean, whole_cell: boolean) => Uint32Array; setBlock: (sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array) => number; setBool: (sheet: number, row: number, col: number, value: boolean, style: number) => void; setColumnNumbers: (sheet: number, col: number, start_row: number, values: Float64Array, style: number) => void; setColumnStrings: (sheet: number, col: number, start_row: number, values: string[], style: number) => void; setColumnStringsPacked: (sheet: number, col: number, start_row: number, buf: string, utf16_lens: Uint32Array, style: number) => void; setConditionalRules: (sheet: number, kinds: Uint8Array, bounds: Uint32Array, nums: Float64Array, strs: string[], flags: Uint8Array) => void; setFormula: (sheet: number, row: number, col: number, src: string, style: number) => number; setNamedRange: (name: string, scope: number, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number) => boolean; setNumber: (sheet: number, row: number, col: number, value: number, style: number) => void; setSheetName: (sheet: number, id: string, name: string) => void; setSparseBlock: (sheet: number, start_row: number, start_col: number, rows: number, cols: number, offsets: Uint32Array, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array) => number; setSpillBlockers: (sheet: number, bounds: Uint32Array) => boolean; setString: (sheet: number, row: number, col: number, value: string, style: number) => void; setTable: (id: string, name: string, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number, header_row: boolean, totals_row: boolean, column_ids: string[], column_names: string[]) => boolean; snapshotNumbers: (snapshot: RangeSnapshot) => Float64Array; snapshotTexts: (snapshot: RangeSnapshot) => string[]; sortRows: (sheet: number, col: number, ascending: boolean) => Uint32Array; sortRowsMulti: (sheet: number, cols: Uint32Array, ascending: Uint8Array, candidates: Uint32Array) => Uint32Array; spillAnchorCol: (sheet: number, row: number, col: number) => number; spillAnchorRow: (sheet: number, row: number, col: number) => number; spillDerivedMask: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => Uint8Array; spillDerivedMaskForRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => Uint8Array; spillOwnerCoordinates: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => Uint32Array; styleIdAt: (sheet: number, row: number, col: number) => number; wasmCommittedBytes: () => number }", + "signature": "class CellStore { acknowledgeRevision: (revision: bigint) => void; addPagedSheet: (n_cols: number, row_count: number, chunk_rows: number, byte_budget: number, max_dirty_cells: number) => number; addRows: (sheet: number, at: number, count: number) => void; addSheet: (n_cols: number, row_count: number) => number; aggregate: (sheet: number, col: number, op: number) => number; beginMutation: () => bigint; beginPageLoad: () => void; canDirtyCell: (sheet: number, row: number, col: number) => boolean; captureRange: (sheet: number, r0: number, c0: number, rows: number, cols: number) => RangeSnapshot | undefined; captureReferences: (sheet: number, max_entries: number) => SourceSnapshot | undefined; captureSources: (sheet: number, r0: number, c0: number, rows: number, cols: number) => SourceSnapshot | undefined; captureSourcesForRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => SourceSnapshot | undefined; cellState: (sheet: number, row: number, col: number) => number; clearCell: (sheet: number, row: number, col: number, style: number) => void; clearRange: (sheet: number, r0: number, c0: number, r1: number, c1: number, contents: boolean, style: boolean) => boolean; colCount: (sheet: number) => number; columnsFullyLoaded: (sheet: number, start_row: number, end_row: number, cols: Uint32Array) => boolean; compactStringStorage: () => void; dataEdge: (sheet: number, row: number, col: number, d_row: number, d_col: number) => number; dataEdgeOrdered: (sheet: number, order: Uint32Array, row: number, col: number, d_row: number, d_col: number) => number; dirtyRevision: (sheet: number, row: number, col: number) => bigint; distinctValues: (sheet: number, col: number, limit: number) => DistinctColumn; endMutation: () => void; endPageLoad: () => void; filterRows: (sheet: number, col: number, needle: string) => Uint32Array; filterRowsMulti: (sheet: number, cols: Uint32Array, kinds: Uint8Array, flags: Uint8Array, nums: Float64Array, num_counts: Uint32Array, text_counts: Uint32Array, value_nums: Float64Array, value_texts: string[]) => Uint32Array; formulaMatrixResourceStats: () => Float64Array; formulaSource: (sheet: number, row: number, col: number) => string | undefined; free: () => void; getCell: (sheet: number, row: number, col: number) => CellOut; getWindow: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => WindowView; getWindowRows: (sheet: number, rows: Uint32Array, cols: Uint32Array) => WindowView; hydratePageNumbers: (sheet: number, col: number, start_row: number, values: Float64Array, style: number, protected_offsets: Uint32Array) => void; hydratePageStringsPacked: (sheet: number, col: number, start_row: number, buf: string, utf16_lens: Uint32Array, style: number, protected_offsets: Uint32Array) => void; insertCols: (sheet: number, at: number, count: number) => void; isFullyLoaded: (sheet: number) => boolean; isPaged: (sheet: number) => boolean; isSheetAlive: (sheet: number) => boolean; markCellCleanRevision: (sheet: number, row: number, col: number, revision: bigint) => boolean; markRangeClean: (sheet: number, start_row: number, end_row: number, start_col: number, end_col: number) => void; memoryStats: () => Float64Array; pagedDirtyCoordinates: (sheet: number) => Float64Array; pagedStats: (sheet: number) => Float64Array; persistedCellData: (sheet: number) => Float64Array; pinRange: (sheet: number, start_row: number, end_row: number, cols: Uint32Array) => void; poolStrings: (ids: Uint32Array) => string[]; queryResourceStats: () => Float64Array; rangeFullyLoaded: (sheet: number, r0: number, c0: number, r1: number, c1: number) => boolean; rangeStyleIds: (sheet: number, r0: number, c0: number, r1: number, c1: number) => Uint32Array; recompute: (sheet: number) => void; recomputeChanged: () => void; recomputeVolatile: (serial: number) => boolean; referenceTarget: (sheet: number, row: number, col: number) => Uint32Array | undefined; referencesTargeting: (target_sheet: number, max_entries: number) => Uint32Array | undefined; remapRangeStyles: (sheet: number, r0: number, c0: number, r1: number, c1: number, old_ids: Uint32Array, new_ids: Uint32Array) => boolean; removeCols: (sheet: number, at: number, count: number) => void; removeNamedRange: (name: string, scope: number) => boolean; removeRows: (sheet: number, at: number, count: number) => void; removeSheet: (sheet: number) => boolean; removeTable: (id: string) => boolean; renameSheet: (sheet: number, id: string, name: string) => boolean; resetFormulaMatrixResourceStats: () => void; resetQueryResourceStats: () => void; restoreRange: (sheet: number, r0: number, c0: number, snapshot: RangeSnapshot) => boolean; rowCount: (sheet: number) => number; search: (sheet: number, cols: Uint32Array, query: string, case_insensitive: boolean, whole_cell: boolean) => Uint32Array; setBlock: (sheet: number, start_row: number, start_col: number, rows: number, cols: number, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array) => number; setBool: (sheet: number, row: number, col: number, value: boolean, style: number) => void; setColumnNumbers: (sheet: number, col: number, start_row: number, values: Float64Array, style: number) => void; setColumnStrings: (sheet: number, col: number, start_row: number, values: string[], style: number) => void; setColumnStringsPacked: (sheet: number, col: number, start_row: number, buf: string, utf16_lens: Uint32Array, style: number) => void; setConditionalRules: (sheet: number, kinds: Uint8Array, bounds: Uint32Array, nums: Float64Array, strs: string[], flags: Uint8Array) => void; setFormula: (sheet: number, row: number, col: number, src: string, style: number) => number; setNamedRange: (name: string, scope: number, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number) => boolean; setNumber: (sheet: number, row: number, col: number, value: number, style: number) => void; setSheetName: (sheet: number, id: string, name: string) => void; setSparseBlock: (sheet: number, start_row: number, start_col: number, rows: number, cols: number, offsets: Uint32Array, kinds: Uint8Array, numbers: Float64Array, texts: string[], styles: Uint32Array, formula_offsets: Uint32Array, formula_sources: string[], reference_offsets: Uint32Array, reference_targets: Uint32Array) => number; setSpillBlockers: (sheet: number, bounds: Uint32Array) => boolean; setString: (sheet: number, row: number, col: number, value: string, style: number) => void; setTable: (id: string, name: string, sheet: number, row_start: number, col_start: number, row_end: number, col_end: number, header_row: boolean, totals_row: boolean, column_ids: string[], column_names: string[]) => boolean; snapshotNumbers: (snapshot: RangeSnapshot) => Float64Array; snapshotTexts: (snapshot: RangeSnapshot) => string[]; sortRows: (sheet: number, col: number, ascending: boolean) => Uint32Array; sortRowsMulti: (sheet: number, cols: Uint32Array, ascending: Uint8Array, candidates: Uint32Array) => Uint32Array; spillAnchorCol: (sheet: number, row: number, col: number) => number; spillAnchorRow: (sheet: number, row: number, col: number) => number; spillDerivedMask: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => Uint8Array; spillOwnerCoordinates: (sheet: number, row_start: number, row_end: number, cols: Uint32Array) => Uint32Array; styleIdAt: (sheet: number, row: number, col: number) => number; wasmCommittedBytes: () => number }", "owners": [ "pkg/sheetwrite_wasm.d.ts" ], @@ -9367,7 +9379,7 @@ }, { "name": "captureSourcesForRows", - "documentation": "Capture persisted formula/reference sources for arbitrary row/column\ncoordinates. Offsets follow the caller's row-major coordinate order." + "documentation": "Capture persisted formula/reference sources and derived-spill identity\nfor arbitrary row/column coordinates in one boundary crossing. Offsets\nfollow the caller's row-major coordinate order." }, { "name": "cellState", @@ -9509,10 +9521,6 @@ "name": "spillDerivedMask", "documentation": "Row-major mask aligned with render-window layout; `1` marks a derived\nspill cell and deliberately excludes the anchor." }, - { - "name": "spillDerivedMaskForRows", - "documentation": "Row-major derived-cell mask for an explicit view-row order." - }, { "name": "spillOwnerCoordinates", "documentation": "Packed row-major `[anchor_row, anchor_col, ...]` owner coordinates." @@ -9530,7 +9538,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L311", + "source": "pkg/sheetwrite_wasm.d.ts#L308", "jsDocTags": [], "documentation": "Distinct-value scan result for one column: parallel kind/number/text\narrays whose buffers are surrendered once through the `take*` accessors.", "memberDocs": [ @@ -9555,7 +9563,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L411", + "source": "pkg/sheetwrite_wasm.d.ts#L409", "jsDocTags": [], "documentation": "Sources accepted by asynchronous initialization: a fetchable URL/request/response, raw module bytes, or a precompiled `WebAssembly.Module`.", "memberDocs": [] @@ -9563,11 +9571,11 @@ { "name": "InitOutput", "kind": "interface", - "signature": "export interface InitOutput { readonly memory: WebAssembly.Memory; readonly __wbg_cellout_free: (a: number, b: number) => void; readonly __wbg_cellstore_free: (a: number, b: number) => void; readonly __wbg_distinctcolumn_free: (a: number, b: number) => void; readonly __wbg_rangesnapshot_free: (a: number, b: number) => void; readonly __wbg_sourcesnapshot_free: (a: number, b: number) => void; readonly __wbg_windowview_free: (a: number, b: number) => void; readonly cellout_kind: (a: number) => number; readonly cellout_num: (a: number) => number; readonly cellout_string: (a: number) => [number, number]; readonly cellout_style: (a: number) => number; readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void; readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_addSheet: (a: number, b: number, c: number) => number; readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number; readonly cellstore_beginMutation: (a: number) => bigint; readonly cellstore_beginPageLoad: (a: number) => void; readonly cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureReferences: (a: number, b: number, c: number) => number; readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number; readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void; readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_colCount: (a: number, b: number) => number; readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_compactStringStorage: (a: number) => void; readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint; readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number; readonly cellstore_endMutation: (a: number) => void; readonly cellstore_endPageLoad: (a: number) => void; readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number]; readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number]; readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number]; readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_hydratePageStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void; readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_isFullyLoaded: (a: number, b: number) => number; readonly cellstore_isPaged: (a: number, b: number) => number; readonly cellstore_isSheetAlive: (a: number, b: number) => number; readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number; readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_memoryStats: (a: number) => [number, number]; readonly cellstore_new: () => number; readonly cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number]; readonly cellstore_pagedStats: (a: number, b: number) => [number, number]; readonly cellstore_persistedCellData: (a: number, b: number) => [number, number]; readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number]; readonly cellstore_queryResourceStats: (a: number) => [number, number]; readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_recompute: (a: number, b: number) => void; readonly cellstore_recomputeChanged: (a: number) => void; readonly cellstore_recomputeVolatile: (a: number, b: number) => number; readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number]; readonly cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number; readonly cellstore_removeCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number; readonly cellstore_removeRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeSheet: (a: number, b: number) => number; readonly cellstore_removeTable: (a: number, b: number, c: number) => number; readonly cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_resetFormulaMatrixResourceStats: (a: number) => void; readonly cellstore_resetQueryResourceStats: (a: number) => void; readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number; readonly cellstore_rowCount: (a: number, b: number) => number; readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number; readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_setConditionalRules: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => void; readonly cellstore_setFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number; readonly cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; readonly cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number; readonly cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number; readonly cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number; readonly cellstore_snapshotNumbers: (a: number, b: number) => [number, number]; readonly cellstore_snapshotTexts: (a: number, b: number) => [number, number]; readonly cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_spillDerivedMaskForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number; readonly cellstore_wasmCommittedBytes: (a: number) => number; readonly distinctcolumn_takeKinds: (a: number) => [number, number]; readonly distinctcolumn_takeNumbers: (a: number) => [number, number]; readonly distinctcolumn_takeTexts: (a: number) => [number, number]; readonly rangesnapshot_byteLength: (a: number) => number; readonly rangesnapshot_formulaOffsets: (a: number) => [number, number]; readonly rangesnapshot_formulaSources: (a: number) => [number, number]; readonly rangesnapshot_kinds: (a: number) => [number, number]; readonly rangesnapshot_referenceOffsets: (a: number) => [number, number]; readonly rangesnapshot_referenceTargets: (a: number) => [number, number]; readonly rangesnapshot_styleIds: (a: number) => [number, number]; readonly sourcesnapshot_byteLength: (a: number) => number; readonly sourcesnapshot_formulaOffsets: (a: number) => [number, number]; readonly sourcesnapshot_formulaSources: (a: number) => [number, number]; readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number]; readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; readonly windowview_nRows: (a: number) => number; readonly windowview_takeCondMatches: (a: number) => [number, number]; readonly windowview_takeStringIds: (a: number) => [number, number]; readonly windowview_takeStringIndex: (a: number) => [number, number]; readonly windowview_takeStrings: (a: number) => [number, number]; readonly windowview_takeStyleDict: (a: number) => [number, number]; readonly windowview_takeStyleIndex: (a: number) => [number, number]; readonly windowview_takeKinds: (a: number) => [number, number]; readonly windowview_takeNumbers: (a: number) => [number, number]; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_externrefs: WebAssembly.Table; readonly __wbindgen_free: (a: number, b: number, c: number) => void; readonly __externref_table_alloc: () => number; readonly __externref_drop_slice: (a: number, b: number) => void; readonly __wbindgen_start: () => void; }", + "signature": "export interface InitOutput { readonly memory: WebAssembly.Memory; readonly __wbg_cellout_free: (a: number, b: number) => void; readonly __wbg_cellstore_free: (a: number, b: number) => void; readonly __wbg_distinctcolumn_free: (a: number, b: number) => void; readonly __wbg_rangesnapshot_free: (a: number, b: number) => void; readonly __wbg_sourcesnapshot_free: (a: number, b: number) => void; readonly __wbg_windowview_free: (a: number, b: number) => void; readonly cellout_kind: (a: number) => number; readonly cellout_num: (a: number) => number; readonly cellout_string: (a: number) => [number, number]; readonly cellout_style: (a: number) => number; readonly cellstore_acknowledgeRevision: (a: number, b: bigint) => void; readonly cellstore_addPagedSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_addRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_addSheet: (a: number, b: number, c: number) => number; readonly cellstore_aggregate: (a: number, b: number, c: number, d: number) => number; readonly cellstore_beginMutation: (a: number) => bigint; readonly cellstore_beginPageLoad: (a: number) => void; readonly cellstore_canDirtyCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_captureRange: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureReferences: (a: number, b: number, c: number) => number; readonly cellstore_captureSources: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_captureSourcesForRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_cellState: (a: number, b: number, c: number, d: number) => number; readonly cellstore_clearCell: (a: number, b: number, c: number, d: number, e: number) => void; readonly cellstore_clearRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_colCount: (a: number, b: number) => number; readonly cellstore_columnsFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_compactStringStorage: (a: number) => void; readonly cellstore_dataEdge: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_dataEdgeOrdered: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number; readonly cellstore_dirtyRevision: (a: number, b: number, c: number, d: number) => bigint; readonly cellstore_distinctValues: (a: number, b: number, c: number, d: number) => number; readonly cellstore_endMutation: (a: number) => void; readonly cellstore_endPageLoad: (a: number) => void; readonly cellstore_filterRows: (a: number, b: number, c: number, d: number, e: number) => [number, number]; readonly cellstore_filterRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => [number, number]; readonly cellstore_formulaMatrixResourceStats: (a: number) => [number, number]; readonly cellstore_formulaSource: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_getCell: (a: number, b: number, c: number, d: number) => number; readonly cellstore_getWindow: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_getWindowRows: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_hydratePageNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_hydratePageStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void; readonly cellstore_insertCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_isFullyLoaded: (a: number, b: number) => number; readonly cellstore_isPaged: (a: number, b: number) => number; readonly cellstore_isSheetAlive: (a: number, b: number) => number; readonly cellstore_markCellCleanRevision: (a: number, b: number, c: number, d: number, e: bigint) => number; readonly cellstore_markRangeClean: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_memoryStats: (a: number) => [number, number]; readonly cellstore_new: () => number; readonly cellstore_pagedDirtyCoordinates: (a: number, b: number) => [number, number]; readonly cellstore_pagedStats: (a: number, b: number) => [number, number]; readonly cellstore_persistedCellData: (a: number, b: number) => [number, number]; readonly cellstore_pinRange: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_poolStrings: (a: number, b: number, c: number) => [number, number]; readonly cellstore_queryResourceStats: (a: number) => [number, number]; readonly cellstore_rangeFullyLoaded: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_rangeStyleIds: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_recompute: (a: number, b: number) => void; readonly cellstore_recomputeChanged: (a: number) => void; readonly cellstore_recomputeVolatile: (a: number, b: number) => number; readonly cellstore_referenceTarget: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_referencesTargeting: (a: number, b: number, c: number) => [number, number]; readonly cellstore_remapRangeStyles: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number; readonly cellstore_removeCols: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeNamedRange: (a: number, b: number, c: number, d: number) => number; readonly cellstore_removeRows: (a: number, b: number, c: number, d: number) => void; readonly cellstore_removeSheet: (a: number, b: number) => number; readonly cellstore_removeTable: (a: number, b: number, c: number) => number; readonly cellstore_renameSheet: (a: number, b: number, c: number, d: number, e: number, f: number) => number; readonly cellstore_resetFormulaMatrixResourceStats: (a: number) => void; readonly cellstore_resetQueryResourceStats: (a: number) => void; readonly cellstore_restoreRange: (a: number, b: number, c: number, d: number, e: number) => number; readonly cellstore_rowCount: (a: number, b: number) => number; readonly cellstore_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_setBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number) => number; readonly cellstore_setBool: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setColumnNumbers: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStrings: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setColumnStringsPacked: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void; readonly cellstore_setConditionalRules: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => void; readonly cellstore_setFormula: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number; readonly cellstore_setNamedRange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => number; readonly cellstore_setNumber: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSheetName: (a: number, b: number, c: number, d: number, e: number, f: number) => void; readonly cellstore_setSparseBlock: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number) => number; readonly cellstore_setSpillBlockers: (a: number, b: number, c: number, d: number) => number; readonly cellstore_setString: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void; readonly cellstore_setTable: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => number; readonly cellstore_snapshotNumbers: (a: number, b: number) => [number, number]; readonly cellstore_snapshotTexts: (a: number, b: number) => [number, number]; readonly cellstore_sortRows: (a: number, b: number, c: number, d: number) => [number, number]; readonly cellstore_sortRowsMulti: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number]; readonly cellstore_spillAnchorCol: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillAnchorRow: (a: number, b: number, c: number, d: number) => number; readonly cellstore_spillDerivedMask: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_spillOwnerCoordinates: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number]; readonly cellstore_styleIdAt: (a: number, b: number, c: number, d: number) => number; readonly cellstore_wasmCommittedBytes: (a: number) => number; readonly distinctcolumn_takeKinds: (a: number) => [number, number]; readonly distinctcolumn_takeNumbers: (a: number) => [number, number]; readonly distinctcolumn_takeTexts: (a: number) => [number, number]; readonly rangesnapshot_byteLength: (a: number) => number; readonly rangesnapshot_formulaOffsets: (a: number) => [number, number]; readonly rangesnapshot_formulaSources: (a: number) => [number, number]; readonly rangesnapshot_kinds: (a: number) => [number, number]; readonly rangesnapshot_referenceOffsets: (a: number) => [number, number]; readonly rangesnapshot_referenceTargets: (a: number) => [number, number]; readonly rangesnapshot_styleIds: (a: number) => [number, number]; readonly sourcesnapshot_byteLength: (a: number) => number; readonly sourcesnapshot_formulaOffsets: (a: number) => [number, number]; readonly sourcesnapshot_formulaSources: (a: number) => [number, number]; readonly sourcesnapshot_referenceOffsets: (a: number) => [number, number]; readonly sourcesnapshot_referenceTargets: (a: number) => [number, number]; readonly sourcesnapshot_spillDerived: (a: number) => [number, number]; readonly windowview_nCols: (a: number) => number; readonly windowview_nRows: (a: number) => number; readonly windowview_takeCondMatches: (a: number) => [number, number]; readonly windowview_takeStringIds: (a: number) => [number, number]; readonly windowview_takeStringIndex: (a: number) => [number, number]; readonly windowview_takeStrings: (a: number) => [number, number]; readonly windowview_takeStyleDict: (a: number) => [number, number]; readonly windowview_takeStyleIndex: (a: number) => [number, number]; readonly windowview_takeKinds: (a: number) => [number, number]; readonly windowview_takeNumbers: (a: number) => [number, number]; readonly __wbindgen_malloc: (a: number, b: number) => number; readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; readonly __wbindgen_externrefs: WebAssembly.Table; readonly __wbindgen_free: (a: number, b: number, c: number) => void; readonly __externref_table_alloc: () => number; readonly __externref_drop_slice: (a: number, b: number) => void; readonly __wbindgen_start: () => void; }", "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L413", + "source": "pkg/sheetwrite_wasm.d.ts#L411", "jsDocTags": [], "documentation": "Result of module initialization: the instantiated exports plus the shared linear memory.", "memberDocs": [] @@ -9579,7 +9587,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L560", + "source": "pkg/sheetwrite_wasm.d.ts#L558", "jsDocTags": [ "param", "returns" @@ -9618,7 +9626,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L337", + "source": "pkg/sheetwrite_wasm.d.ts#L334", "jsDocTags": [], "documentation": "Opaque, store-local history payload for one dense rectangular cell block.\n\nThe host may retain this object in undo history, but it is deliberately not\npart of the serialized document protocol. String payloads remain interned in\nthe owning `CellStore`, so snapshots must only be restored into that store.", "memberDocs": [] @@ -9626,13 +9634,13 @@ { "name": "SourceSnapshot", "kind": "class", - "signature": "class SourceSnapshot { byteLength: () => number; formulaOffsets: () => Uint32Array; formulaSources: () => string[]; free: () => void; referenceOffsets: () => Uint32Array; referenceTargets: () => Uint32Array }", + "signature": "class SourceSnapshot { byteLength: () => number; formulaOffsets: () => Uint32Array; formulaSources: () => string[]; free: () => void; referenceOffsets: () => Uint32Array; referenceTargets: () => Uint32Array; spillDerived: () => Uint8Array }", "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L355", + "source": "pkg/sheetwrite_wasm.d.ts#L352", "jsDocTags": [], - "documentation": "Compact serializable projection of persisted derived-cell sources in one\nrange. Offsets are row-major and sorted; reference targets are packed\n`[sheet_handle, row, col]` triples.", + "documentation": "Compact serializable projection of persisted derived-cell sources and spill\nidentity in one range. Offsets are row-major and sorted; reference targets\nare packed `[sheet_handle, row, col]` triples.", "memberDocs": [] }, { @@ -9642,7 +9650,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L550", + "source": "pkg/sheetwrite_wasm.d.ts#L548", "jsDocTags": [], "documentation": "Sources accepted by synchronous initialization: raw module bytes or a precompiled `WebAssembly.Module`.", "memberDocs": [] @@ -9654,7 +9662,7 @@ "owners": [ "pkg/sheetwrite_wasm.d.ts" ], - "source": "pkg/sheetwrite_wasm.d.ts#L369", + "source": "pkg/sheetwrite_wasm.d.ts#L367", "jsDocTags": [], "documentation": "A bulk window of resolved cells, row-major over `n_rows x n_cols`.", "memberDocs": [ diff --git a/docs/src/lib/sheetwrite-code-hovers.ts b/docs/src/lib/sheetwrite-code-hovers.ts index 4a35ad5e..0173fbf7 100644 --- a/docs/src/lib/sheetwrite-code-hovers.ts +++ b/docs/src/lib/sheetwrite-code-hovers.ts @@ -626,6 +626,21 @@ export function collectReferenceLinks( return links; } +export function referenceRouteForHover( + target: string, + signature: string, + routes: ReadonlyMap, +): string | undefined { + const direct = routes.get(target); + if (direct !== undefined) return direct; + const referencedRoutes = new Set(); + for (const match of signature.matchAll(/[A-Za-z_$][\w$]*/g)) { + const route = routes.get(match[0]); + if (route !== undefined) referencedRoutes.add(route); + } + return referencedRoutes.size === 1 ? referencedRoutes.values().next().value : undefined; +} + class SheetwriteReferenceLinkAnnotation extends ExpressiveCodeAnnotation { override readonly name = "sheetwrite-code-ref"; @@ -775,11 +790,16 @@ export function sheetwriteCodeHovers(options: SheetwriteCodeHoverOptions) { if (!accessibleSignature) continue; // Import aliases and self-restating declarations waste the reader's hover. if (/^import\s/.test(accessibleSignature)) continue; - const hasDetails = Boolean(hover.docs) || (hover.tags?.length ?? 0) > 0; + const memberReference = memberDocsFor(hover.target, accessibleSignature, members); + const hasDetails = + Boolean(hover.docs ?? memberReference?.docs) || (hover.tags?.length ?? 0) > 0; if (!hasDetails) { const restated = accessibleSignature.replace(/[;,]\s*$/, "").replace(/\s+/g, " "); if (line.text.replace(/\s+/g, " ").includes(restated)) continue; } + const referenceRoute = + referenceRouteForHover(hover.target, accessibleSignature, routes) ?? + memberReference?.route; const [wideSignature, narrowSignature] = await Promise.all([ formatSignature(accessibleSignature, 68), formatSignature(accessibleSignature, 34), @@ -804,11 +824,10 @@ export function sheetwriteCodeHovers(options: SheetwriteCodeHoverOptions) { accessibleSignature, wideSignature: codeLineContents(renderedWideSignature.renderedGroupAst), narrowSignature: codeLineContents(renderedNarrowSignature.renderedGroupAst), - docs: hover.docs ?? memberDocsFor(hover.target, accessibleSignature, members)?.docs, + docs: hover.docs ?? memberReference?.docs, tags: hover.tags ?? [], - referenceRoute: - routes.get(hover.target) ?? - memberDocsFor(hover.target, accessibleSignature, members)?.route, + referenceRoute, + navigable: referenceRoute !== undefined, }, popoverId, ), diff --git a/docs/src/styles/showcase-performance.css b/docs/src/styles/showcase-performance.css index 8fda08bc..fef30c45 100644 --- a/docs/src/styles/showcase-performance.css +++ b/docs/src/styles/showcase-performance.css @@ -252,7 +252,7 @@ .sw-sp-stage-body { display: grid; grid-template-columns: minmax(0, 1fr) var(--sw-sp-instrument-width); - align-items: start; + align-items: stretch; min-width: 0; background: var(--sw-surface-1); } diff --git a/package.json b/package.json index 451ead2b..e32c9d96 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "build": "bun run build:packages", "build:docs:production": "rm -rf docs/dist docs/.tanstack packages/*/dist packages/wasm/pkg packages/wasm/target && bun scripts/install-wasm-pack.ts && rustup target add wasm32-unknown-unknown && bun run build:packages && bun run docs:generate && bun run docs:check && bun run --filter '@sheetwrite/docs-start' build", "changeset:status": "changeset status", + "changeset:ci": "bun scripts/changeset-ci.ts", "typecheck:packages": "bun scripts/workspace-tooling.ts typecheck-packages", "typecheck:examples": "bun scripts/workspace-tooling.ts typecheck-examples", "typecheck:verification": "tsc --noEmit -p tsconfig.verification.json", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index b2e40f6d..a9708bc5 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,19 @@ # @sheetwrite/core +## 0.3.1 + +### Patch Changes + +- Correct the core package release metadata and package-specific changelog without changing runtime behavior. +- Updated dependencies + - @sheetwrite/wasm@0.3.1 + +## 0.3.0 + +### Minor Changes + +- e551eb0: Introduce the canonical `SheetwriteError` envelope and stable error codes across initialization, data sources, rendering, persistence, synchronization, collaboration, and import/export boundaries, with serialization-safe context and explicit retryability. + ## 0.2.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index ef646225..61af53aa 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/core", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Framework-agnostic, canvas-rendered spreadsheet grid core.", "license": "MIT", diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 4b634130..0b09c8f0 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -242,6 +242,7 @@ export type { Column, ColumnarData, ColumnFilter, + CommitReason, ConditionalFormatPredicate, ConditionalFormatRule, ContextMenuActionName, diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index aaaa6d92..73658e01 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,24 @@ # @sheetwrite/react +## 0.3.1 + +### Patch Changes + +- Correct the React adapter release metadata and package-specific changelog without changing runtime behavior. +- Updated dependencies + - @sheetwrite/core@0.3.1 + +## 0.3.0 + +### Minor Changes + +- e551eb0: Expose typed `SheetwriteError` failures through `onInitializationError` while preserving React grid readiness and input-reset lifecycle behavior. + +### Patch Changes + +- Updated dependencies [e551eb0] + - @sheetwrite/core@0.3.0 + ## 0.2.0 ### Minor Changes diff --git a/packages/react/package.json b/packages/react/package.json index 63db135d..980dbb2d 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/react", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "React adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 63fe37d8..8b74d57a 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,24 @@ # @sheetwrite/svelte +## 0.3.1 + +### Patch Changes + +- Correct the Svelte adapter release metadata and package-specific changelog without changing runtime behavior. +- Updated dependencies + - @sheetwrite/core@0.3.1 + +## 0.3.0 + +### Minor Changes + +- e551eb0: Normalize initialization failures into canonical `SheetwriteError` values for `onInitializationError`, including cross-realm error envelopes and retained causes. + +### Patch Changes + +- Updated dependencies [e551eb0] + - @sheetwrite/core@0.3.0 + ## 0.2.0 ### Minor Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 3fa41423..1d65a3b4 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/svelte", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Svelte adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index e09f16c3..11a3c98a 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -1,5 +1,24 @@ # @sheetwrite/vue +## 0.3.1 + +### Patch Changes + +- Correct the Vue adapter release metadata and package-specific changelog without changing runtime behavior. +- Updated dependencies + - @sheetwrite/core@0.3.1 + +## 0.3.0 + +### Minor Changes + +- e551eb0: Emit typed `SheetwriteError` failures through the `initialization-error` event while preserving Vue grid readiness and input-reset lifecycle behavior. + +### Patch Changes + +- Updated dependencies [e551eb0] + - @sheetwrite/core@0.3.0 + ## 0.2.0 ### Minor Changes diff --git a/packages/vue/package.json b/packages/vue/package.json index b21e67dd..8b6b584f 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/vue", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Vue adapter for Sheetwrite.", "license": "MIT", diff --git a/packages/wasm/CHANGELOG.md b/packages/wasm/CHANGELOG.md index 8a37dc10..1ed31f77 100644 --- a/packages/wasm/CHANGELOG.md +++ b/packages/wasm/CHANGELOG.md @@ -1,5 +1,17 @@ # @sheetwrite/wasm +## 0.3.1 + +### Patch Changes + +- Align the published WASM artifact with the corrected v0.3.1 release set. + +## 0.3.0 + +### Minor Changes + +- e551eb0: Expand the WASM formula engine with bounded array, criteria, date, financial, matrix, statistical, and text evaluation while preserving deterministic dependency and recomputation behavior. + ## 0.2.0 ### Minor Changes diff --git a/packages/wasm/package.json b/packages/wasm/package.json index 36b3891d..3a320a34 100644 --- a/packages/wasm/package.json +++ b/packages/wasm/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/wasm", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Sheetwrite columnar store and data engine (Rust/WASM).", "license": "MIT", diff --git a/packages/xlsx/CHANGELOG.md b/packages/xlsx/CHANGELOG.md index db6f9722..c826b867 100644 --- a/packages/xlsx/CHANGELOG.md +++ b/packages/xlsx/CHANGELOG.md @@ -1,5 +1,24 @@ # @sheetwrite/xlsx +## 0.3.1 + +### Patch Changes + +- Correct the XLSX package release metadata and package-specific changelog without changing runtime behavior. +- Updated dependencies + - @sheetwrite/core@0.3.1 + +## 0.3.0 + +### Minor Changes + +- e551eb0: Normalize XLSX import, export, option, and resource-limit failures into canonical `SheetwriteError` values, and preserve each `AbortSignal` reason as the cancellation cause. + +### Patch Changes + +- Updated dependencies [e551eb0] + - @sheetwrite/core@0.3.0 + ## 0.2.0 ### Minor Changes diff --git a/packages/xlsx/package.json b/packages/xlsx/package.json index d81d8f5d..144416ea 100644 --- a/packages/xlsx/package.json +++ b/packages/xlsx/package.json @@ -1,6 +1,6 @@ { "name": "@sheetwrite/xlsx", - "version": "0.3.0", + "version": "0.3.1", "type": "module", "description": "Optional XLSX table and workbook backends for Sheetwrite.", "license": "MIT", diff --git a/scripts/changeset-ci.ts b/scripts/changeset-ci.ts new file mode 100644 index 00000000..c07f3be2 --- /dev/null +++ b/scripts/changeset-ci.ts @@ -0,0 +1,42 @@ +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { PUBLISHABLE_PACKAGE_ORDER } from "./workspace-tooling.js"; + +const STABLE_VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/; +const REPOSITORY_ROOT = resolve(import.meta.dir, ".."); + +export function releaseVersionFromHeadRef(headRef: string | undefined): string | undefined { + return headRef !== undefined && STABLE_VERSION.test(headRef) ? headRef : undefined; +} + +export function validateReleasePackageVersions(version: string, root = REPOSITORY_ROOT): void { + for (const name of PUBLISHABLE_PACKAGE_ORDER) { + const directory = name.slice("@sheetwrite/".length); + const manifest = JSON.parse( + readFileSync(resolve(root, "packages", directory, "package.json"), "utf8"), + ) as { readonly name?: unknown; readonly version?: unknown }; + if (manifest.name !== name || manifest.version !== version) { + throw new Error( + `Release branch ${version} requires ${name}@${version}, observed ${String(manifest.name)}@${String(manifest.version)}`, + ); + } + } +} + +async function main(): Promise { + const releaseVersion = releaseVersionFromHeadRef(process.env.GITHUB_HEAD_REF); + if (releaseVersion !== undefined) { + validateReleasePackageVersions(releaseVersion); + console.log(`Release package versions match branch ${releaseVersion}`); + return; + } + const child = Bun.spawn(["bun", "run", "changeset:status", "--", "--since=origin/develop"], { + cwd: REPOSITORY_ROOT, + stdin: "inherit", + stdout: "inherit", + stderr: "inherit", + }); + process.exit(await child.exited); +} + +if (import.meta.main) await main(); diff --git a/scripts/docs.test.ts b/scripts/docs.test.ts index 3d23e765..287e3f3e 100644 --- a/scripts/docs.test.ts +++ b/scripts/docs.test.ts @@ -10,6 +10,7 @@ import { contentPathForRoute, entrySlug, expectedGeneratedFiles, + headingAnchors, landingBenchPayload, MIGRATION_ROUTES, parseFences, @@ -18,6 +19,7 @@ import { renderSymbolPage, runCompletionSummary, unresolvedCssTokens, + unresolvedDocumentationLinks, } from "./docs.js"; import type { ApiEntryPoint, ApiPackage, PublicApiManifest } from "./public-api.js"; import type { SizeHistory } from "./size-report.js"; @@ -46,6 +48,31 @@ const coreEntry: ApiEntryPoint = { }, ], }, + { + name: "CommitReason", + kind: "type", + signature: 'type CommitReason = "api" | "edit-enter";', + owners: ["src/types/document.ts"], + source: "src/types/document.ts#L207", + jsDocTags: [], + documentation: "Classifies the producer of a committed transaction.", + memberDocs: [], + }, + { + name: "ChangeEvent", + kind: "interface", + signature: "interface ChangeEvent { commitReason: CommitReason; }", + owners: ["src/types/transaction.ts"], + source: "src/types/transaction.ts#L160", + jsDocTags: [], + documentation: "Committed transaction event.", + memberDocs: [ + { + name: "commitReason", + documentation: "What produced this commit — see {@link CommitReason}.", + }, + ], + }, ], }; const corePackage: ApiPackage = { @@ -64,6 +91,24 @@ describe("documentation generation", () => { expect(entrySlug("@sheetwrite/core", "./styles.css")).toBe("core-styles-css"); }); + it("matches rendered heading anchors without collapsing punctuation gaps", () => { + expect([...headingAnchors("## Canvas rendering + the WASM columnar store")]).toEqual([ + "canvas-rendering--the-wasm-columnar-store", + ]); + }); + + it("fails closed when a JSDoc link has no unique API route", () => { + expect(unresolvedDocumentationLinks(manifest)).toEqual([]); + const broken = structuredClone(manifest); + broken.packages[0]!.entryPoints[0]!.exports[0]!.documentation = + "Broken {@link MissingSymbol}, {@link Grid.typo}, and {@link Grid.applyTransaction.typo}."; + expect(unresolvedDocumentationLinks(broken)).toEqual([ + "@sheetwrite/core . Grid has unresolved documentation link MissingSymbol", + "@sheetwrite/core . Grid has unresolved documentation link Grid.typo", + "@sheetwrite/core . Grid has unresolved documentation link Grid.applyTransaction.typo", + ]); + }); + it("links entry indexes to documented symbols with unique member anchors", async () => { const entryPage = renderEntryPage(corePackage, coreEntry); const symbolPage = await renderSymbolPage(corePackage, coreEntry, coreEntry.exports[0]!); @@ -76,6 +121,11 @@ describe("documentation generation", () => { expect(symbolPage).toContain("Applies a committed transaction to the"); expect(symbolPage).toContain("Bypasses history."); expect(symbolPage).toContain('Grid'); + const changeEvent = coreEntry.exports.find((item) => item.name === "ChangeEvent")!; + const changeEventPage = await renderSymbolPage(corePackage, coreEntry, changeEvent); + expect(changeEventPage).toContain( + 'CommitReason', + ); }); it("generates an index and focused page for every classified symbol", async () => { diff --git a/scripts/docs.ts b/scripts/docs.ts index f3050c17..b7295e25 100644 --- a/scripts/docs.ts +++ b/scripts/docs.ts @@ -361,17 +361,121 @@ function html(value: string): string { .replaceAll(">", ">") .replaceAll('"', """); } -function documentationMarkdown(pkg: ApiPackage, entry: ApiEntryPoint, item: ApiExport): string { +interface DocumentationLinkCandidate { + readonly packageName: string; + readonly route: string; + readonly item: ApiExport; +} + +type DocumentationLinkRoutes = ReadonlyMap; + +function documentationLinkRoutes(manifest: PublicApiManifest): DocumentationLinkRoutes { + const routes = new Map(); + for (const pkg of manifest.packages) { + for (const entry of pkg.entryPoints) { + for (const item of entry.exports) { + const candidates = routes.get(item.name) ?? []; + candidates.push({ + packageName: pkg.name, + route: symbolRoute(pkg, entry, item), + item, + }); + routes.set(item.name, candidates); + } + } + } + return routes; +} + +function uniqueDocumentationCandidate( + routes: DocumentationLinkRoutes, + packageName: string, + target: string, +): DocumentationLinkCandidate | undefined { + const candidates = routes.get(target) ?? []; + const packageCandidates = candidates.filter((candidate) => candidate.packageName === packageName); + if (packageCandidates.length === 1) return packageCandidates[0]; + return candidates.length === 1 ? candidates[0] : undefined; +} + +function hasRenderedMember(item: ApiExport, memberName: string): boolean { + return declarationShape(parseableDeclaration(item)).members.some( + (member) => member.name === memberName, + ); +} + +function documentationLinkRoute( + pkg: ApiPackage, + entry: ApiEntryPoint, + item: ApiExport, + target: string, + routes: DocumentationLinkRoutes, +): string | undefined { + const targetParts = target.split("."); + if (targetParts.length > 2) return undefined; + const [ownerName, memberName] = targetParts; + if (memberName !== undefined) { + const localOwner = entry.exports.find((candidate) => candidate.name === ownerName); + const owner = + localOwner === undefined + ? uniqueDocumentationCandidate(routes, pkg.name, ownerName ?? "") + : { + packageName: pkg.name, + route: symbolRoute(pkg, entry, localOwner), + item: localOwner, + }; + return owner === undefined || !hasRenderedMember(owner.item, memberName) + ? undefined + : `${owner.route}#${anchor(ownerName ?? "")}-${anchor(memberName)}`; + } + const local = entry.exports.find((candidate) => candidate.name === target); + if (local !== undefined) return symbolRoute(pkg, entry, local); + if (hasRenderedMember(item, target)) { + return `${symbolRoute(pkg, entry, item)}#${anchor(item.name)}-${anchor(target)}`; + } + return uniqueDocumentationCandidate(routes, pkg.name, target)?.route; +} + +export function unresolvedDocumentationLinks(manifest: PublicApiManifest): string[] { + const routes = documentationLinkRoutes(manifest); + const issues: string[] = []; + for (const pkg of manifest.packages) { + for (const entry of pkg.entryPoints) { + for (const item of entry.exports) { + const documentation = [ + item.documentation, + ...item.memberDocs.map((member) => member.documentation), + ]; + for (const source of documentation) { + for (const match of source.matchAll(/\{@link\s+([^\s|}]+)/g)) { + const target = match[1] ?? ""; + if (documentationLinkRoute(pkg, entry, item, target, routes) === undefined) { + issues.push( + `${pkg.name} ${entry.subpath} ${item.name} has unresolved documentation link ${target}`, + ); + } + } + } + } + } + } + return issues; +} + +function documentationMarkdown( + pkg: ApiPackage, + entry: ApiEntryPoint, + item: ApiExport, + routes: DocumentationLinkRoutes = new Map(), +): string { const documentation = item.documentation.trim() || "Source summary unavailable; docs:check rejects this omission."; return documentation.replace( /\{@link\s+([^\s|}]+)(?:\s*\|\s*([^}]+))?\}/g, (_match, target: string, label: string | undefined) => { const text = label?.trim() || target; - const linked = entry.exports.find((candidate) => candidate.name === target); - return linked === undefined - ? `\`${text}\`` - : `[\`${text}\`](${symbolRoute(pkg, entry, linked)})`; + const route = documentationLinkRoute(pkg, entry, item, target, routes); + return route === undefined ? `\`${text}\`` : `[\`${text}\`](${route})`; }, ); } @@ -379,16 +483,18 @@ function documentationMarkdown(pkg: ApiPackage, entry: ApiEntryPoint, item: ApiE function memberDocumentationHtml( pkg: ApiPackage, entry: ApiEntryPoint, + item: ApiExport, documentation: string, + routes: DocumentationLinkRoutes, ): string { return html(documentation).replace( /\{@link\s+([^\s|}]+)(?:\s*\|\s*([^}]+))?\}/g, (_match, target: string, label: string | undefined) => { const text = label?.trim() || target; - const linked = entry.exports.find((candidate) => candidate.name === target); - return linked === undefined + const route = documentationLinkRoute(pkg, entry, item, target, routes); + return route === undefined ? `${text}` - : `${text}`; + : `${text}`; }, ); } @@ -514,6 +620,7 @@ function renderMembers( entry: ApiEntryPoint, item: ApiExport, members: readonly DeclarationMember[], + routes: DocumentationLinkRoutes, ): string { const searchTargets = new Set( REQUIRED_SEARCH_TARGETS.filter( @@ -539,7 +646,7 @@ function renderMembers( const summaryDoc = documentation === undefined ? "" - : ` ${memberDocumentationHtml(pkg, entry, summary)}`; + : ` ${memberDocumentationHtml(pkg, entry, item, summary, routes)}`; return [ searchAnchor, `
`, @@ -554,7 +661,9 @@ function renderMembers( ...(documentation === undefined || documentation.replace(/`/g, "").replace(/\s+/g, " ").trim() === summary ? [] - : [`

${memberDocumentationHtml(pkg, entry, documentation)}

`]), + : [ + `

${memberDocumentationHtml(pkg, entry, item, documentation, routes)}

`, + ]), "
", ].join("\n"); }); @@ -575,10 +684,11 @@ export async function renderSymbolPage( pkg: ApiPackage, entry: ApiEntryPoint, item: ApiExport, + routes: DocumentationLinkRoutes = new Map(), ): Promise { const label = entryLabel(pkg, entry); const source = packageSourcePath(pkg.name, item.source); - const summary = documentationMarkdown(pkg, entry, item); + const summary = documentationMarkdown(pkg, entry, item, routes); const description = compactSummary(summary); const shape = declarationShape(parseableDeclaration(item)); const body = [ @@ -595,7 +705,7 @@ export async function renderSymbolPage( "", ]; if (shape.members.length > 0) { - body.push(renderMembers(pkg, entry, item, shape.members), ""); + body.push(renderMembers(pkg, entry, item, shape.members, routes), ""); } // A variants section earns its space only for structured unions; scalar // unions read best inline in the (expanded) declaration, where identifiers @@ -638,7 +748,11 @@ export async function renderSymbolPage( return `${body.join("\n").trimEnd()}\n`; } -export function renderEntryPage(pkg: ApiPackage, entry: ApiEntryPoint): string { +export function renderEntryPage( + pkg: ApiPackage, + entry: ApiEntryPoint, + routes: DocumentationLinkRoutes = new Map(), +): string { const label = entryLabel(pkg, entry); const status = entry.classification === "supported" @@ -679,7 +793,7 @@ export function renderEntryPage(pkg: ApiPackage, entry: ApiEntryPoint): string { "", '
', ...items.map((item) => { - const summary = compactSummary(documentationMarkdown(pkg, entry, item)); + const summary = compactSummary(documentationMarkdown(pkg, entry, item, routes)); return [ ``, `${html(item.name)}`, @@ -1985,6 +2099,9 @@ export async function expectedGeneratedFiles(manifest: PublicApiManifest): Promi loadFormulaContractInventory(repositoryRoot), compatibilityResults(), ]); + const documentationLinkIssues = unresolvedDocumentationLinks(manifest); + if (documentationLinkIssues.length > 0) throw new Error(documentationLinkIssues.join("\n")); + const linkRoutes = documentationLinkRoutes(manifest); const apiFiles: ExpectedFile[] = [ { path: join(contentRoot, "api/index.md"), content: renderApiIndex(manifest) }, { path: join(generatedDataRoot, "landing-bench.json"), content: await renderLandingBench() }, @@ -1994,7 +2111,7 @@ export async function expectedGeneratedFiles(manifest: PublicApiManifest): Promi for (const entry of pkg.entryPoints) { apiFiles.push({ path: join(contentRoot, `api/${entrySlug(pkg.name, entry.subpath)}.md`), - content: renderEntryPage(pkg, entry), + content: renderEntryPage(pkg, entry, linkRoutes), }); for (const item of entry.exports) { const symbolPath = join( @@ -2009,7 +2126,7 @@ export async function expectedGeneratedFiles(manifest: PublicApiManifest): Promi symbolOwners.set(symbolPath, owner); apiFiles.push({ path: symbolPath, - content: await renderSymbolPage(pkg, entry, item), + content: await renderSymbolPage(pkg, entry, item, linkRoutes), }); } } @@ -2210,7 +2327,7 @@ export function contentPathForRoute( return documents.find((document) => routeForContentPath(document.path) === normalizedRoute)?.path; } -function headingAnchors(content: string): Set { +export function headingAnchors(content: string): Set { const anchors = new Set(); const masked = content.replace(/```[\s\S]*?```/g, (block) => block.replace(/[^\n]/g, " ")); for (const line of masked.split("\n")) { @@ -2225,8 +2342,7 @@ function headingAnchors(content: string): Set { .trim() .toLowerCase() .replace(/[^\p{L}\p{N}\s-]/gu, "") - .replace(/\s+/g, "-") - .replace(/-+/g, "-"); + .replace(/\s/g, "-"); if (slug.length > 0) anchors.add(slug); } return anchors; @@ -2426,8 +2542,12 @@ async function validateMarkdown( } const masked = maskCode(document.content); - for (const match of masked.matchAll(/\[[^\]]+\]\(([^)]+)\)/g)) { - const rawTarget = match[1]?.trim() ?? ""; + const linkTargets = [ + ...[...masked.matchAll(/\[[^\]]+\]\(([^)]+)\)/g)].map((match) => match[1]), + ...[...masked.matchAll(/\shref=["']([^"']+)["']/gi)].map((match) => match[1]), + ]; + for (const target of linkTargets) { + const rawTarget = target?.trim() ?? ""; if ( rawTarget.length === 0 || /^(?:https?:|mailto:|tel:)/.test(rawTarget) || diff --git a/scripts/public-api-baseline.json b/scripts/public-api-baseline.json index 24dcbcda..f1e946da 100644 --- a/scripts/public-api-baseline.json +++ b/scripts/public-api-baseline.json @@ -1,5 +1,5 @@ { "schemaVersion": 1, "manifestFormatVersion": 2, - "sha256": "9083544dd4fcf54369d713757e83729042cbefbf63674ad17f5c0771fc2c003f" + "sha256": "9cc3fe343edebb80e5eb431b802655092d5ccd02d94ab4dfab76127c312d6192" } diff --git a/scripts/release-artifacts.test.ts b/scripts/release-artifacts.test.ts index 2277ab22..95a65ca2 100644 --- a/scripts/release-artifacts.test.ts +++ b/scripts/release-artifacts.test.ts @@ -27,7 +27,7 @@ import { WASM_TARGET, } from "./workspace-tooling.js"; -const TEST_RELEASE_VERSION = "0.3.0"; +const TEST_RELEASE_VERSION = "0.3.1"; const temporaryRoots: string[] = []; @@ -305,7 +305,7 @@ describe("canonical release artifacts", () => { serializeReleaseManifest(releaseManifest), ); await expect(verifyReleaseArtifacts(root)).rejects.toThrow( - "@sheetwrite/react internal dependency @sheetwrite/core must be 0.3.0", + `@sheetwrite/react internal dependency @sheetwrite/core must be ${TEST_RELEASE_VERSION}`, ); }); diff --git a/scripts/release-workflow.test.ts b/scripts/release-workflow.test.ts index 6bc1ab22..fca0c3ca 100644 --- a/scripts/release-workflow.test.ts +++ b/scripts/release-workflow.test.ts @@ -93,6 +93,8 @@ describe("CI-completion package release workflow", () => { (step) => step.name === "Generate published package size history", ); expect(generateSizes?.if).toBe("steps.publish.outputs.verified != '[]'"); + expect(generateSizes?.run).toContain(`require('./packages/core/package.json').version`); + expect(generateSizes?.run).not.toContain(`require('./package.json').version`); expect(generateSizes?.run).toContain('bun run size:record --version="$VERSION"'); expect(generateSizes?.run).toContain("bun run docs:generate"); const openPullRequest = parsed.jobs.publish?.steps?.find( diff --git a/scripts/sheetwrite-code-hovers.test.ts b/scripts/sheetwrite-code-hovers.test.ts index 70af55c3..0fd08ddc 100644 --- a/scripts/sheetwrite-code-hovers.test.ts +++ b/scripts/sheetwrite-code-hovers.test.ts @@ -6,6 +6,7 @@ import { formatHoverSignature, hoverPopoverId, isHighQualityHover, + referenceRouteForHover, } from "../docs/src/lib/sheetwrite-code-hovers.js"; import { SheetwriteTypeEngine, @@ -314,4 +315,25 @@ describe("Generated fence reference links", () => { expect(collectReferenceLinks("const y: Unknown;", routes)).toEqual([]); expect(collectReferenceLinks("const z: Theme;", new Map())).toEqual([]); }); + + it("links inferred local values when their type resolves to one public API symbol", () => { + const inferredRoutes = new Map([ + ["DataSourceRequest", "/docs/api/core/data-source-request/"], + ["SheetwriteError", "/docs/api/core/sheetwrite-error/"], + ["Theme", "/docs/api/core/theme/"], + ]); + expect( + referenceRouteForHover( + "request", + 'let request: Omit', + inferredRoutes, + ), + ).toBe("/docs/api/core/data-source-request/"); + expect(referenceRouteForHover("error", "let error: SheetwriteError", inferredRoutes)).toBe( + "/docs/api/core/sheetwrite-error/", + ); + expect( + referenceRouteForHover("value", "let value: Theme | SheetwriteError", inferredRoutes), + ).toBeUndefined(); + }); }); diff --git a/scripts/size-history.json b/scripts/size-history.json index eb921976..d125620e 100644 --- a/scripts/size-history.json +++ b/scripts/size-history.json @@ -158,6 +158,85 @@ "unit": "count" } } + }, + { + "version": "0.3.0", + "capturedAt": "2026-07-23T15:20:59.199Z", + "source": "npm registry published artifacts", + "metrics": { + "package.@sheetwrite/wasm.tarballBytes": { + "actual": 294455, + "unit": "bytes" + }, + "package.@sheetwrite/wasm.unpackedBytes": { + "actual": 814645, + "unit": "bytes" + }, + "package.@sheetwrite/wasm.fileCount": { + "actual": 12, + "unit": "count" + }, + "package.@sheetwrite/core.tarballBytes": { + "actual": 529832, + "unit": "bytes" + }, + "package.@sheetwrite/core.unpackedBytes": { + "actual": 2846760, + "unit": "bytes" + }, + "package.@sheetwrite/core.fileCount": { + "actual": 335, + "unit": "count" + }, + "package.@sheetwrite/xlsx.tarballBytes": { + "actual": 87523, + "unit": "bytes" + }, + "package.@sheetwrite/xlsx.unpackedBytes": { + "actual": 439871, + "unit": "bytes" + }, + "package.@sheetwrite/xlsx.fileCount": { + "actual": 59, + "unit": "count" + }, + "package.@sheetwrite/react.tarballBytes": { + "actual": 9398, + "unit": "bytes" + }, + "package.@sheetwrite/react.unpackedBytes": { + "actual": 32679, + "unit": "bytes" + }, + "package.@sheetwrite/react.fileCount": { + "actual": 8, + "unit": "count" + }, + "package.@sheetwrite/vue.tarballBytes": { + "actual": 10354, + "unit": "bytes" + }, + "package.@sheetwrite/vue.unpackedBytes": { + "actual": 36578, + "unit": "bytes" + }, + "package.@sheetwrite/vue.fileCount": { + "actual": 8, + "unit": "count" + }, + "package.@sheetwrite/svelte.tarballBytes": { + "actual": 6354, + "unit": "bytes" + }, + "package.@sheetwrite/svelte.unpackedBytes": { + "actual": 18919, + "unit": "bytes" + }, + "package.@sheetwrite/svelte.fileCount": { + "actual": 10, + "unit": "count" + } + } } ] } diff --git a/scripts/size-report-failure.json b/scripts/size-report-failure.json new file mode 100644 index 00000000..e4552f60 --- /dev/null +++ b/scripts/size-report-failure.json @@ -0,0 +1,9 @@ +{ + "schemaVersion": 1, + "tool": { + "name": "sheetwrite-delivery-size", + "version": "1.0.0" + }, + "error": "Artifact-only size reporting requires --artifacts", + "reproduction": "bun run size:report" +} diff --git a/scripts/workflow-contract.test.ts b/scripts/workflow-contract.test.ts index 195f552e..6beb1988 100644 --- a/scripts/workflow-contract.test.ts +++ b/scripts/workflow-contract.test.ts @@ -113,6 +113,14 @@ describe("CI and release workflow contracts", () => { ).toThrow("action is not reviewed"); }); + it("routes ordinary changes through Changesets and validates semver release branches", () => { + const changesetStatus = workflows().ci.jobs.preflight?.steps?.find( + (step) => step.name === "Changeset status", + ); + expect(changesetStatus?.run).toBe("bun run changeset:ci"); + expect(changesetStatus?.if).toBeUndefined(); + }); + it("keeps each workflow's required toolchain versions in parity", () => { const parsed = workflows(); for (const [name, workflow] of Object.entries(parsed)) { diff --git a/scripts/workspace-tooling.test.ts b/scripts/workspace-tooling.test.ts index 13b3e371..612001e3 100644 --- a/scripts/workspace-tooling.test.ts +++ b/scripts/workspace-tooling.test.ts @@ -2,6 +2,7 @@ import { afterEach, describe, expect, it } from "bun:test"; import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join, resolve } from "node:path"; +import { releaseVersionFromHeadRef, validateReleasePackageVersions } from "./changeset-ci.js"; import { assertUniqueOrderedNodes, PACKAGE_BUILD_NODES, @@ -242,16 +243,21 @@ describe("changeset workspace contract", () => { } }); - it("runs the canonical Changesets status command", () => { - const root = resolve(import.meta.dir, ".."); - const result = Bun.spawnSync( - ["bun", "run", "changeset:status", "--", "--since=origin/develop"], - { - cwd: root, - stderr: "pipe", - stdout: "pipe", - }, + it("runs the release-aware Changesets status command", () => { + expect(releaseVersionFromHeadRef("0.3.1")).toBe("0.3.1"); + expect(releaseVersionFromHeadRef("feature/docs")).toBeUndefined(); + expect(() => validateReleasePackageVersions("0.3.1")).not.toThrow(); + expect(() => validateReleasePackageVersions("0.3.2")).toThrow( + "Release branch 0.3.2 requires @sheetwrite/wasm@0.3.2", ); + const root = resolve(import.meta.dir, ".."); + const result = Bun.spawnSync(["bun", "run", "changeset:ci"], { + cwd: root, + env: { ...process.env, GITHUB_HEAD_REF: "0.3.1" }, + stderr: "pipe", + stdout: "pipe", + }); expect(result.exitCode, result.stderr.toString()).toBe(0); + expect(result.stdout.toString()).toContain("Release package versions match branch 0.3.1"); }); }); diff --git a/test/browser/documentation-site.spec.ts b/test/browser/documentation-site.spec.ts index 27377cc3..690b8835 100644 --- a/test/browser/documentation-site.spec.ts +++ b/test/browser/documentation-site.spec.ts @@ -530,7 +530,7 @@ test.describe("documentation site", () => { expect(light?.tokenColors.length ?? 0).toBeGreaterThanOrEqual(4); expect(light?.triggerDecoration).toContain("underline"); expect(light?.triggerDecorationStyle).toBe("wavy"); - expect(light?.triggerCursor).toBe("help"); + expect(light?.triggerCursor).toBe("pointer"); const trigger = block.locator("[data-sw-code-popover-trigger]").first(); await trigger.focus(); diff --git a/test/browser/showcase-performance.spec.ts b/test/browser/showcase-performance.spec.ts index d153de24..c3ca6a74 100644 --- a/test/browser/showcase-performance.spec.ts +++ b/test/browser/showcase-performance.spec.ts @@ -155,24 +155,32 @@ async function assertLoadedPeriodWithoutStaleFlash(page: Page, row: number): Pro } async function gridBodyPoint(page: Page, row: number, column: number) { - const point = await page.evaluate( - ({ targetRow, targetColumn }) => { - const host = document.querySelector('[data-testid="scale-grid"]'); - const grid = window.__sheetwriteScaleGrid; - if (!host || !grid) return null; - const rect = host.getBoundingClientRect(); - for (let y = rect.top + 36; y < rect.bottom; y += 8) { - for (let x = rect.left + 72; x < rect.right; x += 8) { - const address = grid.getCellAtPoint(x, y); - if (address?.row === targetRow && address.col === targetColumn) return { x, y }; + for (let attempt = 0; attempt < 3; attempt += 1) { + const point = await page.evaluate( + ({ targetRow, targetColumn }) => { + const host = document.querySelector('[data-testid="scale-grid"]'); + const grid = window.__sheetwriteScaleGrid; + if (!host || !grid) return null; + const rect = host.getBoundingClientRect(); + for (let y = rect.top + 36; y < rect.bottom; y += 8) { + for (let x = rect.left + 72; x < rect.right; x += 8) { + const address = grid.getCellAtPoint(x, y); + if (address?.row === targetRow && address.col === targetColumn) return { x, y }; + } } - } - return null; - }, - { targetRow: row, targetColumn: column }, - ); - if (!point) throw new Error(`Could not locate visible cell r${row} c${column}`); - return point; + return null; + }, + { targetRow: row, targetColumn: column }, + ); + if (!point) throw new Error(`Could not locate visible cell r${row} c${column}`); + const viewport = page.viewportSize(); + if (viewport === null || (point.y >= 0 && point.y < viewport.height)) return point; + await page.evaluate( + ({ targetY, viewportHeight }) => window.scrollBy(0, targetY - viewportHeight / 2), + { targetY: point.y, viewportHeight: viewport.height }, + ); + } + throw new Error(`Could not bring cell r${row} c${column} into the viewport`); } test("cold production route has no Sheetwrite-attributed task over 50 ms", async ({ browser }) => { diff --git a/test/bundler-fixtures/next/package-lock.json b/test/bundler-fixtures/next/package-lock.json index 13547631..a3517c4e 100644 --- a/test/bundler-fixtures/next/package-lock.json +++ b/test/bundler-fixtures/next/package-lock.json @@ -5,9 +5,9 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "@types/node": "24.10.1", "@types/react": "19.2.2", "next": "15.5.9", @@ -49,7 +49,7 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -71,7 +71,7 @@ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -280,7 +280,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -305,7 +305,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -330,7 +330,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -355,7 +355,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -380,7 +380,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -405,7 +405,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -430,7 +430,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -455,7 +455,7 @@ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -477,7 +477,7 @@ "@emnapi/runtime": "^1.7.0" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -496,7 +496,7 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -515,7 +515,7 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -534,7 +534,7 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -687,29 +687,29 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-react-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-react-0.3.1.tgz", "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, @@ -939,7 +939,7 @@ "semver": "^7.7.3" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.1 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" diff --git a/test/bundler-fixtures/next/package.json b/test/bundler-fixtures/next/package.json index ce7cf659..b7ac8a0f 100644 --- a/test/bundler-fixtures/next/package.json +++ b/test/bundler-fixtures/next/package.json @@ -5,9 +5,9 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "next": "15.5.9", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/test/bundler-fixtures/vite/package-lock.json b/test/bundler-fixtures/vite/package-lock.json index 84e4ced4..9d2685cc 100644 --- a/test/bundler-fixtures/vite/package-lock.json +++ b/test/bundler-fixtures/vite/package-lock.json @@ -5,12 +5,12 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", - "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", "@sveltejs/vite-plugin-svelte": "6.2.4", "react": "19.1.0", "react-dom": "19.1.0", @@ -869,63 +869,63 @@ ] }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-react-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-react-0.3.1.tgz", "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-svelte-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-vue-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-vue-0.3.1.tgz", "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-xlsx-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0", + "@sheetwrite/core": "0.3.1", "fflate": "0.8.3" } }, diff --git a/test/bundler-fixtures/vite/package.json b/test/bundler-fixtures/vite/package.json index 66d39ec2..c54ec7e2 100644 --- a/test/bundler-fixtures/vite/package.json +++ b/test/bundler-fixtures/vite/package.json @@ -6,12 +6,12 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.0.tgz", - "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:../.packed/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/xlsx": "file:../.packed/sheetwrite-xlsx-0.3.1.tgz", + "@sheetwrite/svelte": "file:../.packed/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/vue": "file:../.packed/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "@sveltejs/vite-plugin-svelte": "6.2.4", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/test/bundler-fixtures/webpack/package-lock.json b/test/bundler-fixtures/webpack/package-lock.json index dbdf53af..d5d9d0bd 100644 --- a/test/bundler-fixtures/webpack/package-lock.json +++ b/test/bundler-fixtures/webpack/package-lock.json @@ -5,8 +5,8 @@ "packages": { "": { "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "webpack": "5.102.1", "webpack-cli": "6.0.1" } @@ -66,17 +66,17 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, diff --git a/test/bundler-fixtures/webpack/package.json b/test/bundler-fixtures/webpack/package.json index 6819b252..27c01d35 100644 --- a/test/bundler-fixtures/webpack/package.json +++ b/test/bundler-fixtures/webpack/package.json @@ -6,8 +6,8 @@ "build": "npm ci --ignore-scripts --no-audit --no-fund && npm run bundle && node check.mjs" }, "dependencies": { - "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:../.packed/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:../.packed/sheetwrite-wasm-0.3.1.tgz", "webpack": "5.102.1", "webpack-cli": "6.0.1" } diff --git a/test/consumer/package-lock.json b/test/consumer/package-lock.json index 5e7777c0..62f16dea 100644 --- a/test/consumer/package-lock.json +++ b/test/consumer/package-lock.json @@ -6,12 +6,12 @@ "": { "name": "sheetwrite-packed-consumer", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", "react": "19.2.7", "react-dom": "19.2.7", "svelte": "5.56.4", @@ -949,63 +949,63 @@ ] }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-react-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-react-0.3.1.tgz", "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-vue-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-vue-0.3.1.tgz", "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0", + "@sheetwrite/core": "0.3.1", "fflate": "0.8.3" } }, diff --git a/test/consumer/package.json b/test/consumer/package.json index df6436a6..57ab7693 100644 --- a/test/consumer/package.json +++ b/test/consumer/package.json @@ -9,12 +9,12 @@ "bundle:frameworks": "vite build" }, "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", "react": "19.2.7", "react-dom": "19.2.7", "svelte": "5.56.4", diff --git a/test/release-locks/core-xlsx/package-lock.json b/test/release-locks/core-xlsx/package-lock.json index 3b2babba..97e0a516 100644 --- a/test/release-locks/core-xlsx/package-lock.json +++ b/test/release-locks/core-xlsx/package-lock.json @@ -8,33 +8,33 @@ "name": "sheetwrite-release-core-xlsx", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, "node_modules/@sheetwrite/xlsx": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz", "integrity": "sha512-rKF4a+10pe1dCbfkPdxzwPKvIdFLUAt4s2QsTtubimIYkuHmECM79YXFZ3qBv+FJWalx/gtTEfaUAYHl9pQyIQ==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0", + "@sheetwrite/core": "0.3.1", "fflate": "0.8.3" } }, diff --git a/test/release-locks/core-xlsx/package.json b/test/release-locks/core-xlsx/package.json index eb8abd6d..4ad12dcc 100644 --- a/test/release-locks/core-xlsx/package.json +++ b/test/release-locks/core-xlsx/package.json @@ -3,8 +3,8 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", - "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.0.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", + "@sheetwrite/xlsx": "file:artifacts/sheetwrite-xlsx-0.3.1.tgz" } } diff --git a/test/release-locks/core/package-lock.json b/test/release-locks/core/package-lock.json index 1b41b00d..620cc089 100644 --- a/test/release-locks/core/package-lock.json +++ b/test/release-locks/core/package-lock.json @@ -8,22 +8,22 @@ "name": "sheetwrite-release-core", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" } diff --git a/test/release-locks/core/package.json b/test/release-locks/core/package.json index 2ee166b9..0a9a8e0a 100644 --- a/test/release-locks/core/package.json +++ b/test/release-locks/core/package.json @@ -3,7 +3,7 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz" + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz" } } diff --git a/test/release-locks/react/package-lock.json b/test/release-locks/react/package-lock.json index 1b492876..8bf0ea08 100644 --- a/test/release-locks/react/package-lock.json +++ b/test/release-locks/react/package-lock.json @@ -8,36 +8,36 @@ "name": "sheetwrite-release-react", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "react": "19.2.7" } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/react": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-react-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-react-0.3.1.tgz", "integrity": "sha512-nODukyQhX7xaU8O1IuRCkS36p7rITZ1EliV7VBQrC73qKRHc23qR/Y3qVCPDzqrj5N+fAuSAVvA8qVSkXjNbmw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "react": ">=18" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, diff --git a/test/release-locks/react/package.json b/test/release-locks/react/package.json index 86be1541..f0d3d94c 100644 --- a/test/release-locks/react/package.json +++ b/test/release-locks/react/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/react": "file:artifacts/sheetwrite-react-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "react": "19.2.7" } } diff --git a/test/release-locks/svelte/package-lock.json b/test/release-locks/svelte/package-lock.json index 5027ff2c..93c13f33 100644 --- a/test/release-locks/svelte/package-lock.json +++ b/test/release-locks/svelte/package-lock.json @@ -8,9 +8,9 @@ "name": "sheetwrite-release-svelte", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "svelte": "5.56.4" } }, @@ -60,29 +60,29 @@ } }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/svelte": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", "integrity": "sha512-EefOFUSh941LB1Ppfi8mv/kQouJ3FA8kQGL52UbTPzutMPSCZs1XJM0Csq7NjFdapoGWnmqGAiOAr95WjccJUw==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "svelte": ">=5" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, diff --git a/test/release-locks/svelte/package.json b/test/release-locks/svelte/package.json index 7b107092..f4a27e19 100644 --- a/test/release-locks/svelte/package.json +++ b/test/release-locks/svelte/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/svelte": "file:artifacts/sheetwrite-svelte-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "svelte": "5.56.4" } } diff --git a/test/release-locks/vue/package-lock.json b/test/release-locks/vue/package-lock.json index d94a6f5f..3f8378db 100644 --- a/test/release-locks/vue/package-lock.json +++ b/test/release-locks/vue/package-lock.json @@ -8,9 +8,9 @@ "name": "sheetwrite-release-vue", "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "vue": "3.5.39" } }, @@ -67,29 +67,29 @@ "license": "MIT" }, "node_modules/@sheetwrite/core": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-core-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-core-0.3.1.tgz", "integrity": "sha512-+9xnTWkYCmxAyIvBkYWBwBiBUjrlNmIeDt6q+aRu0YnsFwpm+c88jDcO81mwJ5By72CGZTRh8JF1OqPP/NGNpg==", "license": "MIT", "dependencies": { - "@sheetwrite/wasm": "0.3.0" + "@sheetwrite/wasm": "0.3.1" } }, "node_modules/@sheetwrite/vue": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-vue-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-vue-0.3.1.tgz", "integrity": "sha512-ZOouRq6JZg0zxeqbCq0Hgo9d15mZ+00XlCkAp35xekAiPO36U/o6zPR5xgm6auFRkf5HvILeZeurB3Rd50gfjg==", "license": "MIT", "dependencies": { - "@sheetwrite/core": "0.3.0" + "@sheetwrite/core": "0.3.1" }, "peerDependencies": { "vue": ">=3.4" } }, "node_modules/@sheetwrite/wasm": { - "version": "0.3.0", - "resolved": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "version": "0.3.1", + "resolved": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "integrity": "sha512-A66USV7ROO7c+WDvveiUf9hMiLoJuge5DuF2jlmdiuY2QVMLhRVKrvVo8wOvyAzRsm5MpbPUxA90v6MnNWl+zw==", "license": "MIT" }, diff --git a/test/release-locks/vue/package.json b/test/release-locks/vue/package.json index fa51723e..ac7ba0a4 100644 --- a/test/release-locks/vue/package.json +++ b/test/release-locks/vue/package.json @@ -3,9 +3,9 @@ "private": true, "version": "0.0.0", "dependencies": { - "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.0.tgz", - "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.0.tgz", - "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.0.tgz", + "@sheetwrite/core": "file:artifacts/sheetwrite-core-0.3.1.tgz", + "@sheetwrite/vue": "file:artifacts/sheetwrite-vue-0.3.1.tgz", + "@sheetwrite/wasm": "file:artifacts/sheetwrite-wasm-0.3.1.tgz", "vue": "3.5.39" } }