superdoc 2.4.0-next.27 → 2.4.0-next.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,15 +5,14 @@
5
5
  [![Documentation](https://img.shields.io/badge/docs-available-1355ff.svg)](https://docs.superdoc.dev/)
6
6
  [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-1355ff.svg)](https://www.gnu.org/licenses/agpl-3.0)
7
7
  [![npm version](https://img.shields.io/npm/v/superdoc.svg?color=1355ff)](https://www.npmjs.com/package/superdoc)
8
- [![codecov](https://codecov.io/gh/superdoc/docx-editor/branch/main/graph/badge.svg)](https://codecov.io/gh/superdoc/docx-editor)
9
8
  [![Discord](https://img.shields.io/badge/discord-join-1355ff)](https://discord.com/invite/b9UuaZRyaB)
10
9
 
11
- SuperDoc renders and edits DOCX files in the browser. Built on OOXML not bolted onto HTML. As you type, you write directly to the XML. Import a document, edit it, export it. Nothing lost.
10
+ SuperDoc renders and edits DOCX files in the browser. Built on OOXML, not bolted onto HTML. As you type, you write directly to the XML, so edits do not pass through an HTML conversion step.
12
11
 
13
12
  ## Features
14
13
 
15
- - **Real DOCX, not rich text** — Built on OOXML. Real pagination, section breaks, headers/footers, complex tables. Not a contenteditable wrapper with export bolted on.
16
- - **Self-hosted** — Runs entirely in the browser. Your documents never leave your servers.
14
+ - **Real DOCX, not rich text** — Built on OOXML. Pagination, section breaks, headers/footers, and complex tables are modeled as themselves, not flattened into HTML. Not a contenteditable wrapper with export bolted on.
15
+ - **Self-hosted** — The editor needs no server of its own. Documents go where your application sends them, and nowhere else by default.
17
16
  - **Any framework** — React, Vue, Angular, Svelte, vanilla JS. One component, zero lock-in.
18
17
  - **Real-time collaboration** — Yjs-based CRDT. Multiplayer editing with comments, tracked changes, and automatic conflict resolution.
19
18
  - **Built for agents** — [SDK](https://www.npmjs.com/package/@superdoc/sdk), [CLI](https://www.npmjs.com/package/@superdoc/cli), and [MCP server](https://www.npmjs.com/package/@superdoc/mcp) let LLMs read, edit, and save .docx files programmatically.
@@ -25,6 +24,13 @@ SuperDoc renders and edits DOCX files in the browser. Built on OOXML — not bol
25
24
  npm install superdoc
26
25
  ```
27
26
 
27
+ SuperDoc mounts into an element you provide, so the page needs it before this
28
+ runs:
29
+
30
+ ```html
31
+ <div id="superdoc"></div>
32
+ ```
33
+
28
34
  ```javascript
29
35
  import 'superdoc/style.css';
30
36
  import { SuperDoc } from 'superdoc';
@@ -32,16 +38,13 @@ import { SuperDoc } from 'superdoc';
32
38
  const superdoc = new SuperDoc({
33
39
  selector: '#superdoc',
34
40
  documentMode: 'editing',
35
- documents: [
36
- {
37
- id: 'my-doc-id',
38
- type: 'docx',
39
- data: fileObject,
40
- },
41
- ],
41
+ document: fileObject,
42
42
  });
43
43
  ```
44
44
 
45
+ `document` accepts a URL, a `File`, or a `Blob`. Omit it to start from a blank
46
+ DOCX. The constructor throws if `selector` matches no element.
47
+
45
48
  Supported document modes are `editing`, `viewing`, and `suggesting`. Do not use `edit`, `view`, or `suggest`.
46
49
 
47
50
  ### Browser Document API contract
@@ -64,13 +67,7 @@ export function embedSuperDoc({ file }) {
64
67
  return new SuperDoc({
65
68
  selector: '#editor',
66
69
  documentMode: 'editing',
67
- documents: [
68
- {
69
- id: 'contract',
70
- type: 'docx',
71
- data: file,
72
- },
73
- ],
70
+ document: file,
74
71
  });
75
72
  }
76
73
  ```
@@ -1,4 +1,4 @@
1
- import { i as __toESM, t as __commonJSMin } from "./rolldown-runtime-0pSA04fp.es.js";
1
+ import { i as __toESM, t as __commonJSMin } from "./rolldown-runtime-B5TtN50X.es.js";
2
2
  //#endregion
3
3
  //#region ../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.mjs
4
4
  var import_eventemitter3 = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
@@ -1,4 +1,4 @@
1
- const require_rolldown_runtime = require("./rolldown-runtime-74VwNCz7.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-DtsSbkrh.cjs");
2
2
  //#region ../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js
3
3
  var require_eventemitter3 = /* @__PURE__ */ require_rolldown_runtime.__commonJSMin(((exports, module) => {
4
4
  var has = Object.prototype.hasOwnProperty;
@@ -1,4 +1,4 @@
1
- const require_rolldown_runtime = require("./rolldown-runtime-74VwNCz7.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-DtsSbkrh.cjs");
2
2
  //#region ../../node_modules/.pnpm/vite-plugin-node-polyfills@0.28.0_rollup@4.60.2_vite@7.3.1_@types+node@25.6.0_jiti@2.7._79de22fafa9a94a397e22a8c8322f563/node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js
3
3
  function getLens(b64) {
4
4
  var len = b64.length;
@@ -1,4 +1,4 @@
1
- import { n as __esmMin, r as __require, t as __commonJSMin } from "./rolldown-runtime-0pSA04fp.es.js";
1
+ import { n as __esmMin, r as __require, t as __commonJSMin } from "./rolldown-runtime-B5TtN50X.es.js";
2
2
  //#region ../../node_modules/.pnpm/vite-plugin-node-polyfills@0.28.0_rollup@4.60.2_vite@7.3.1_@types+node@25.6.0_jiti@2.7._79de22fafa9a94a397e22a8c8322f563/node_modules/vite-plugin-node-polyfills/shims/buffer/dist/index.js
3
3
  function getLens(b64) {
4
4
  var len = b64.length;
@@ -24,7 +24,7 @@ var __copyProps = (to, from, except, desc) => {
24
24
  }
25
25
  return to;
26
26
  };
27
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
27
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
28
28
  value: mod,
29
29
  enumerable: true
30
30
  }) : target, mod));
@@ -24,7 +24,7 @@ var __copyProps = (to, from, except, desc) => {
24
24
  }
25
25
  return to;
26
26
  };
27
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
27
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
28
28
  value: mod,
29
29
  enumerable: true
30
30
  }) : target, mod));
@@ -19,7 +19,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
19
19
  var PRIVATE_ENGINE_INFO = (0, _superdoc_docx_engine_collaboration_upgrade_engine.getCollaborationUpgradeEngineInfo)();
20
20
  var ENGINE_INFO = Object.freeze({
21
21
  ...PRIVATE_ENGINE_INFO,
22
- superdocVersion: "2.4.0-next.27",
22
+ superdocVersion: "2.4.0-next.29",
23
23
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
24
24
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
25
25
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
@@ -18,7 +18,7 @@ var COLLABORATION_UPGRADE_ENGINE_MINIMUM_NODE_MAJOR = 20;
18
18
  var PRIVATE_ENGINE_INFO = getCollaborationUpgradeEngineInfo$1();
19
19
  var ENGINE_INFO = Object.freeze({
20
20
  ...PRIVATE_ENGINE_INFO,
21
- superdocVersion: "2.4.0-next.27",
21
+ superdocVersion: "2.4.0-next.29",
22
22
  roomSchemaVersion: Object.freeze({ ...PRIVATE_ENGINE_INFO.roomSchemaVersion }),
23
23
  supportedBundleVersions: SUPPORTED_COLLABORATION_UPGRADE_BUNDLE_VERSIONS,
24
24
  supportedV1ReaderContractVersions: SUPPORTED_V1_READER_CONTRACT_VERSIONS
package/dist/style.css CHANGED
@@ -1770,11 +1770,11 @@ img[data-v-c95b2073] {
1770
1770
  pointer-events: auto;
1771
1771
  }
1772
1772
 
1773
- .superdoc[data-v-7770edae] {
1773
+ .superdoc[data-v-d39f5239] {
1774
1774
  display: flex;
1775
1775
  position: relative;
1776
1776
  }
1777
- .sd-visually-hidden[data-v-7770edae] {
1777
+ .sd-visually-hidden[data-v-d39f5239] {
1778
1778
  position: absolute;
1779
1779
  width: 1px;
1780
1780
  height: 1px;
@@ -1785,30 +1785,30 @@ img[data-v-c95b2073] {
1785
1785
  white-space: nowrap;
1786
1786
  border: 0;
1787
1787
  }
1788
- .right-sidebar[data-v-7770edae] {
1788
+ .right-sidebar[data-v-d39f5239] {
1789
1789
  min-width: 320px;
1790
1790
  height: 100%;
1791
1791
  }
1792
- .floating-comments[data-v-7770edae] {
1792
+ .floating-comments[data-v-d39f5239] {
1793
1793
  min-width: 300px;
1794
1794
  width: 300px;
1795
1795
  height: 100%;
1796
1796
  overflow: visible;
1797
1797
  }
1798
- .superdoc__layers[data-v-7770edae] {
1798
+ .superdoc__layers[data-v-d39f5239] {
1799
1799
  height: 100%;
1800
1800
  position: relative;
1801
1801
  box-sizing: border-box;
1802
1802
  }
1803
- .superdoc__document[data-v-7770edae] {
1803
+ .superdoc__document[data-v-d39f5239] {
1804
1804
  width: 100%;
1805
1805
  position: relative;
1806
1806
  }
1807
- .superdoc__sub-document[data-v-7770edae] {
1807
+ .superdoc__sub-document[data-v-d39f5239] {
1808
1808
  width: 100%;
1809
1809
  position: relative;
1810
1810
  }
1811
- .superdoc__selection-layer[data-v-7770edae] {
1811
+ .superdoc__selection-layer[data-v-d39f5239] {
1812
1812
  position: absolute;
1813
1813
  min-width: 100%;
1814
1814
  min-height: 100%;
@@ -1819,13 +1819,13 @@ img[data-v-c95b2073] {
1819
1819
  /* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
1820
1820
  the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
1821
1821
  clickable, and below the selection layer (z-index 10). */
1822
- .superdoc__whiteboard-layer[data-v-7770edae] {
1822
+ .superdoc__whiteboard-layer[data-v-d39f5239] {
1823
1823
  z-index: 4;
1824
1824
  }
1825
- .superdoc__temp-selection[data-v-7770edae] {
1825
+ .superdoc__temp-selection[data-v-d39f5239] {
1826
1826
  position: absolute;
1827
1827
  }
1828
- .superdoc__right-sidebar[data-v-7770edae] {
1828
+ .superdoc__right-sidebar[data-v-d39f5239] {
1829
1829
  width: 320px;
1830
1830
  min-width: 320px;
1831
1831
  padding: 0 10px;
@@ -1833,7 +1833,7 @@ img[data-v-c95b2073] {
1833
1833
  position: relative;
1834
1834
  z-index: 2;
1835
1835
  }
1836
- .superdoc__compact-comment-popover[data-v-7770edae] {
1836
+ .superdoc__compact-comment-popover[data-v-d39f5239] {
1837
1837
  position: absolute;
1838
1838
  top: 12px;
1839
1839
  right: 12px;
@@ -1842,14 +1842,14 @@ img[data-v-c95b2073] {
1842
1842
  }
1843
1843
 
1844
1844
  /* Tools styles */
1845
- .tools[data-v-7770edae] {
1845
+ .tools[data-v-d39f5239] {
1846
1846
  position: absolute;
1847
1847
  z-index: 3;
1848
1848
  display: flex;
1849
1849
  flex-direction: column;
1850
1850
  gap: var(--sd-ui-tools-gap, 6px);
1851
1851
  }
1852
- .tools-item[data-v-7770edae] {
1852
+ .tools-item[data-v-d39f5239] {
1853
1853
  display: flex;
1854
1854
  align-items: center;
1855
1855
  justify-content: center;
@@ -1860,10 +1860,10 @@ img[data-v-c95b2073] {
1860
1860
  cursor: pointer;
1861
1861
  position: relative;
1862
1862
  }
1863
- .tools-item i[data-v-7770edae] {
1863
+ .tools-item i[data-v-d39f5239] {
1864
1864
  cursor: pointer;
1865
1865
  }
1866
- .superdoc__tools-icon[data-v-7770edae] {
1866
+ .superdoc__tools-icon[data-v-d39f5239] {
1867
1867
  width: var(--sd-ui-tools-icon-size, 20px);
1868
1868
  height: var(--sd-ui-tools-icon-size, 20px);
1869
1869
  flex-shrink: 0;
@@ -1878,22 +1878,22 @@ img[data-v-c95b2073] {
1878
1878
 
1879
1879
  /* 834px is iPad screen size in portrait orientation */
1880
1880
  @media (max-width: 834px) {
1881
- .superdoc .superdoc__layers[data-v-7770edae] {
1881
+ .superdoc .superdoc__layers[data-v-d39f5239] {
1882
1882
  margin: 0;
1883
1883
  border: 0 !important;
1884
1884
  box-shadow: none;
1885
1885
  }
1886
- .superdoc__sub-document[data-v-7770edae] {
1886
+ .superdoc__sub-document[data-v-d39f5239] {
1887
1887
  max-width: 100%;
1888
1888
  }
1889
- .superdoc__right-sidebar[data-v-7770edae] {
1889
+ .superdoc__right-sidebar[data-v-d39f5239] {
1890
1890
  padding: 10px;
1891
1891
  position: relative;
1892
1892
  }
1893
1893
  }
1894
1894
 
1895
1895
  /* AI Writer styles */
1896
- .ai-writer-container[data-v-7770edae] {
1896
+ .ai-writer-container[data-v-d39f5239] {
1897
1897
  position: fixed;
1898
1898
  z-index: 1000;
1899
1899
  background: white;
@@ -1909,10 +1909,10 @@ img[data-v-c95b2073] {
1909
1909
  transform: translateY(-50%);
1910
1910
  z-index: 50;
1911
1911
  } */
1912
- .ai-tool > svg[data-v-7770edae] {
1912
+ .ai-tool > svg[data-v-d39f5239] {
1913
1913
  fill: transparent;
1914
1914
  }
1915
- .ai-tool[data-v-7770edae]::before {
1915
+ .ai-tool[data-v-d39f5239]::before {
1916
1916
  content: '';
1917
1917
  position: absolute;
1918
1918
  width: 20px;
@@ -1933,7 +1933,7 @@ img[data-v-c95b2073] {
1933
1933
  filter: brightness(1.2);
1934
1934
  transition: filter 0.2s ease;
1935
1935
  }
1936
- .ai-tool[data-v-7770edae]:hover::before {
1936
+ .ai-tool[data-v-d39f5239]:hover::before {
1937
1937
  filter: brightness(1.3);
1938
1938
  }
1939
1939
 
@@ -1770,11 +1770,11 @@ img[data-v-c95b2073] {
1770
1770
  pointer-events: auto;
1771
1771
  }
1772
1772
 
1773
- .superdoc[data-v-7770edae] {
1773
+ .superdoc[data-v-d39f5239] {
1774
1774
  display: flex;
1775
1775
  position: relative;
1776
1776
  }
1777
- .sd-visually-hidden[data-v-7770edae] {
1777
+ .sd-visually-hidden[data-v-d39f5239] {
1778
1778
  position: absolute;
1779
1779
  width: 1px;
1780
1780
  height: 1px;
@@ -1785,30 +1785,30 @@ img[data-v-c95b2073] {
1785
1785
  white-space: nowrap;
1786
1786
  border: 0;
1787
1787
  }
1788
- .right-sidebar[data-v-7770edae] {
1788
+ .right-sidebar[data-v-d39f5239] {
1789
1789
  min-width: 320px;
1790
1790
  height: 100%;
1791
1791
  }
1792
- .floating-comments[data-v-7770edae] {
1792
+ .floating-comments[data-v-d39f5239] {
1793
1793
  min-width: 300px;
1794
1794
  width: 300px;
1795
1795
  height: 100%;
1796
1796
  overflow: visible;
1797
1797
  }
1798
- .superdoc__layers[data-v-7770edae] {
1798
+ .superdoc__layers[data-v-d39f5239] {
1799
1799
  height: 100%;
1800
1800
  position: relative;
1801
1801
  box-sizing: border-box;
1802
1802
  }
1803
- .superdoc__document[data-v-7770edae] {
1803
+ .superdoc__document[data-v-d39f5239] {
1804
1804
  width: 100%;
1805
1805
  position: relative;
1806
1806
  }
1807
- .superdoc__sub-document[data-v-7770edae] {
1807
+ .superdoc__sub-document[data-v-d39f5239] {
1808
1808
  width: 100%;
1809
1809
  position: relative;
1810
1810
  }
1811
- .superdoc__selection-layer[data-v-7770edae] {
1811
+ .superdoc__selection-layer[data-v-d39f5239] {
1812
1812
  position: absolute;
1813
1813
  min-width: 100%;
1814
1814
  min-height: 100%;
@@ -1819,13 +1819,13 @@ img[data-v-c95b2073] {
1819
1819
  /* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
1820
1820
  the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
1821
1821
  clickable, and below the selection layer (z-index 10). */
1822
- .superdoc__whiteboard-layer[data-v-7770edae] {
1822
+ .superdoc__whiteboard-layer[data-v-d39f5239] {
1823
1823
  z-index: 4;
1824
1824
  }
1825
- .superdoc__temp-selection[data-v-7770edae] {
1825
+ .superdoc__temp-selection[data-v-d39f5239] {
1826
1826
  position: absolute;
1827
1827
  }
1828
- .superdoc__right-sidebar[data-v-7770edae] {
1828
+ .superdoc__right-sidebar[data-v-d39f5239] {
1829
1829
  width: 320px;
1830
1830
  min-width: 320px;
1831
1831
  padding: 0 10px;
@@ -1833,7 +1833,7 @@ img[data-v-c95b2073] {
1833
1833
  position: relative;
1834
1834
  z-index: 2;
1835
1835
  }
1836
- .superdoc__compact-comment-popover[data-v-7770edae] {
1836
+ .superdoc__compact-comment-popover[data-v-d39f5239] {
1837
1837
  position: absolute;
1838
1838
  top: 12px;
1839
1839
  right: 12px;
@@ -1842,14 +1842,14 @@ img[data-v-c95b2073] {
1842
1842
  }
1843
1843
 
1844
1844
  /* Tools styles */
1845
- .tools[data-v-7770edae] {
1845
+ .tools[data-v-d39f5239] {
1846
1846
  position: absolute;
1847
1847
  z-index: 3;
1848
1848
  display: flex;
1849
1849
  flex-direction: column;
1850
1850
  gap: var(--sd-ui-tools-gap, 6px);
1851
1851
  }
1852
- .tools-item[data-v-7770edae] {
1852
+ .tools-item[data-v-d39f5239] {
1853
1853
  display: flex;
1854
1854
  align-items: center;
1855
1855
  justify-content: center;
@@ -1860,10 +1860,10 @@ img[data-v-c95b2073] {
1860
1860
  cursor: pointer;
1861
1861
  position: relative;
1862
1862
  }
1863
- .tools-item i[data-v-7770edae] {
1863
+ .tools-item i[data-v-d39f5239] {
1864
1864
  cursor: pointer;
1865
1865
  }
1866
- .superdoc__tools-icon[data-v-7770edae] {
1866
+ .superdoc__tools-icon[data-v-d39f5239] {
1867
1867
  width: var(--sd-ui-tools-icon-size, 20px);
1868
1868
  height: var(--sd-ui-tools-icon-size, 20px);
1869
1869
  flex-shrink: 0;
@@ -1878,22 +1878,22 @@ img[data-v-c95b2073] {
1878
1878
 
1879
1879
  /* 834px is iPad screen size in portrait orientation */
1880
1880
  @media (max-width: 834px) {
1881
- .superdoc .superdoc__layers[data-v-7770edae] {
1881
+ .superdoc .superdoc__layers[data-v-d39f5239] {
1882
1882
  margin: 0;
1883
1883
  border: 0 !important;
1884
1884
  box-shadow: none;
1885
1885
  }
1886
- .superdoc__sub-document[data-v-7770edae] {
1886
+ .superdoc__sub-document[data-v-d39f5239] {
1887
1887
  max-width: 100%;
1888
1888
  }
1889
- .superdoc__right-sidebar[data-v-7770edae] {
1889
+ .superdoc__right-sidebar[data-v-d39f5239] {
1890
1890
  padding: 10px;
1891
1891
  position: relative;
1892
1892
  }
1893
1893
  }
1894
1894
 
1895
1895
  /* AI Writer styles */
1896
- .ai-writer-container[data-v-7770edae] {
1896
+ .ai-writer-container[data-v-d39f5239] {
1897
1897
  position: fixed;
1898
1898
  z-index: 1000;
1899
1899
  background: white;
@@ -1909,10 +1909,10 @@ img[data-v-c95b2073] {
1909
1909
  transform: translateY(-50%);
1910
1910
  z-index: 50;
1911
1911
  } */
1912
- .ai-tool > svg[data-v-7770edae] {
1912
+ .ai-tool > svg[data-v-d39f5239] {
1913
1913
  fill: transparent;
1914
1914
  }
1915
- .ai-tool[data-v-7770edae]::before {
1915
+ .ai-tool[data-v-d39f5239]::before {
1916
1916
  content: '';
1917
1917
  position: absolute;
1918
1918
  width: 20px;
@@ -1933,7 +1933,7 @@ img[data-v-c95b2073] {
1933
1933
  filter: brightness(1.2);
1934
1934
  transition: filter 0.2s ease;
1935
1935
  }
1936
- .ai-tool[data-v-7770edae]:hover::before {
1936
+ .ai-tool[data-v-d39f5239]:hover::before {
1937
1937
  filter: brightness(1.3);
1938
1938
  }
1939
1939
 
@@ -3580,6 +3580,17 @@ export interface Config {
3580
3580
  * Omitted entries keep SuperDoc's bundled worker URLs.
3581
3581
  */
3582
3582
  workerUrls?: V2WorkerUrlsConfig;
3583
+ /**
3584
+ * Budget for the document worker to start up, in milliseconds
3585
+ * (default: 30000). Measured from worker spawn, so it covers script
3586
+ * download, parsing, evaluation, and the worker's first response to
3587
+ * SuperDoc. Raise it when a large worker chunk is served
3588
+ * over a slow connection or a cold dev-server cache; lower it to fail faster.
3589
+ * Worker load errors are reported immediately and do not wait for this
3590
+ * budget. Must be a finite positive number no greater than 2147483647, the
3591
+ * platform timer ceiling above which a delay would fire immediately.
3592
+ */
3593
+ workerStartupTimeoutMs?: number;
3583
3594
  /**
3584
3595
  * Opt-in toggle for the layout engine. Auto-disabled when web layout is
3585
3596
  * requested without `layoutEngineOptions.flowMode === 'semantic'`; the