superdoc 2.13.0-next.1 → 2.13.0-next.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/chunks/{create-super-doc-ui-BWWWNPP8.cjs → create-super-doc-ui-DNfQTF2k.cjs} +66 -6
  2. package/dist/chunks/{create-super-doc-ui-FnwgTkUv.es.js → create-super-doc-ui-XWtQHPGP.es.js} +66 -6
  3. package/dist/collaboration-upgrade-engine.cjs +1 -1
  4. package/dist/collaboration-upgrade-engine.es.js +1 -1
  5. package/dist/document-api/src/blocks/blocks.d.ts +3 -1
  6. package/dist/document-api/src/blocks/find-text.d.ts +3 -0
  7. package/dist/document-api/src/content-controls/content-controls.types.d.ts +1 -1
  8. package/dist/document-api/src/contract/command-catalog.d.ts +1 -1
  9. package/dist/document-api/src/contract/operation-definitions.d.ts +11 -1
  10. package/dist/document-api/src/contract/operation-registry.d.ts +7 -2
  11. package/dist/document-api/src/index.d.ts +7 -6
  12. package/dist/document-api/src/invoke/invoke.d.ts +2 -1
  13. package/dist/document-api/src/types/blocks.types.d.ts +38 -0
  14. package/dist/document-api/src/types/mutation-plan.types.d.ts +28 -4
  15. package/dist/document-api/src/types/table-operations.types.d.ts +2 -0
  16. package/dist/layout-engine/dom-contract/src/data-attrs.d.ts +3 -0
  17. package/dist/layout-engine/painters/dom/src/page-content.d.ts +3 -2
  18. package/dist/layout-engine/painters/dom/src/renderer.d.ts +1 -0
  19. package/dist/public/collaboration-worker.cjs +9 -0
  20. package/dist/public/collaboration-worker.es.js +8 -0
  21. package/dist/public/ui-react.cjs +1 -1
  22. package/dist/public/ui-react.es.js +1 -1
  23. package/dist/public/ui-vue.cjs +1 -1
  24. package/dist/public/ui-vue.es.js +1 -1
  25. package/dist/public/ui.cjs +1 -1
  26. package/dist/public/ui.es.js +1 -1
  27. package/dist/style.css +26 -26
  28. package/dist/style.layered.css +26 -26
  29. package/dist/superdoc/src/composables/use-viewport-fit.d.ts +1 -0
  30. package/dist/superdoc/src/core/collaboration/collaboration-exception.d.ts +2 -0
  31. package/dist/superdoc/src/core/collaboration/resolve-v2-collaboration-target.d.ts +16 -5
  32. package/dist/superdoc/src/core/theme/create-theme.d.ts +32 -20
  33. package/dist/superdoc/src/core/types/index.d.ts +59 -71
  34. package/dist/superdoc/src/public/collaboration-worker.d.cts +18 -0
  35. package/dist/superdoc/src/public/collaboration-worker.d.ts +48 -0
  36. package/dist/superdoc/src/public/export-types.d.ts +23 -0
  37. package/dist/superdoc/src/public/index.d.cts +12 -0
  38. package/dist/superdoc/src/public/index.d.ts +3 -0
  39. package/dist/superdoc/src/public/ui/types.d.ts +18 -9
  40. package/dist/superdoc.cjs +384 -267
  41. package/dist/superdoc.es.js +384 -267
  42. package/dist-cdn/style.layered.css +1 -1
  43. package/dist-cdn/superdoc.min.css +1 -1
  44. package/dist-cdn/superdoc.min.js +37 -37
  45. package/package.json +13 -2
@@ -568,6 +568,8 @@ export interface TablesGetCellsInput extends TableLocator {
568
568
  }
569
569
  /** Per-cell info with stable ref for write handoff. */
570
570
  export interface TableCellInfo {
571
+ /** First paragraph in this cell, when the engine exposes paragraph identities. */
572
+ firstParagraphNodeId?: string;
571
573
  /** Shorthand cell identifier: convenient for logging, Map keys, and display. */
572
574
  nodeId: string;
573
575
  /** Mutation-ready address: pass directly as `target` in follow-up cell operations. */
@@ -52,6 +52,8 @@ export declare const DATA_ATTRS: {
52
52
  readonly LAYOUT_STORY: "data-layout-story";
53
53
  /** Source block reference (today: producer's `blockId`). */
54
54
  readonly LAYOUT_BLOCK_REF: "data-layout-block-ref";
55
+ /** Zero-based flow-column index that owns the rendered fragment. */
56
+ readonly LAYOUT_COLUMN_INDEX: "data-layout-column-index";
55
57
  };
56
58
  /**
57
59
  * CamelCase keys for use with `element.dataset.*` property access.
@@ -75,6 +77,7 @@ export declare const DATASET_KEYS: {
75
77
  readonly LAYOUT_FRAGMENT_ID: "layoutFragmentId";
76
78
  readonly LAYOUT_STORY: "layoutStory";
77
79
  readonly LAYOUT_BLOCK_REF: "layoutBlockRef";
80
+ readonly LAYOUT_COLUMN_INDEX: "layoutColumnIndex";
78
81
  };
79
82
  /**
80
83
  * Encode a `LayoutStoryLocator`-shaped object into its dataset string form.
@@ -94,8 +94,9 @@ export declare function createEmptyPaintWorkSummary(): PaintWorkSummary;
94
94
  * Painter plan P3a: reuse key for one exact page slot on the persistent-page
95
95
  * path. Joins everything the painted page DOM depends on for a fixed page
96
96
  * index: the resolve-stage version stamp per item (the product paint-reuse
97
- * mechanism), fragment identity + geometry (stamps do not cover geometry),
98
- * and, only when body content contains a dynamic field, its page context.
97
+ * mechanism), fragment identity + geometry + column ownership (stamps do not
98
+ * cover these), and, only when body content contains a dynamic field, its
99
+ * page context.
99
100
  * Header/footer providers have a separate decoration-only refresh path, so
100
101
  * their context must not invalidate otherwise reusable body fragments.
101
102
  *
@@ -657,6 +657,7 @@ export declare class DomPainter {
657
657
  private resolveFragmentWrapperZIndex;
658
658
  private applyFragmentWrapperZIndex;
659
659
  private applyResolvedFragmentFrame;
660
+ private applyFragmentColumnOwnership;
660
661
  /**
661
662
  * Estimates the height of a fragment when explicit height is not available.
662
663
  *
@@ -0,0 +1,9 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _superdoc_docx_engine_collaboration_worker = require("@superdoc/docx-engine/collaboration-worker");
3
+ //#region src/public/collaboration-worker.ts
4
+ /** Register provider adapters and start the worker used by `workerUrls.collaboration`. */
5
+ function bootstrapSuperDocCollaborationWorker(options) {
6
+ (0, _superdoc_docx_engine_collaboration_worker.bootstrapSuperDocCollaborationWorker)(options);
7
+ }
8
+ //#endregion
9
+ exports.bootstrapSuperDocCollaborationWorker = bootstrapSuperDocCollaborationWorker;
@@ -0,0 +1,8 @@
1
+ import { bootstrapSuperDocCollaborationWorker as bootstrapSuperDocCollaborationWorker$1 } from "@superdoc/docx-engine/collaboration-worker";
2
+ //#region src/public/collaboration-worker.ts
3
+ /** Register provider adapters and start the worker used by `workerUrls.collaboration`. */
4
+ function bootstrapSuperDocCollaborationWorker(options) {
5
+ bootstrapSuperDocCollaborationWorker$1(options);
6
+ }
7
+ //#endregion
8
+ export { bootstrapSuperDocCollaborationWorker };
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWWWNPP8.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DNfQTF2k.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let react = require("react");
5
5
  //#region src/public/ui/react.ts
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-FnwgTkUv.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-XWtQHPGP.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { createContext, createElement, useCallback, useContext, useEffect, useRef, useState } from "react";
4
4
  //#region src/public/ui/react.ts
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWWWNPP8.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DNfQTF2k.cjs");
3
3
  const require_slice_source = require("../chunks/slice-source-CFaqq0Vo.cjs");
4
4
  let vue = require("vue");
5
5
  //#region src/public/ui/vue.ts
@@ -1,4 +1,4 @@
1
- import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-FnwgTkUv.es.js";
1
+ import { t as createSuperDocUI } from "../chunks/create-super-doc-ui-XWtQHPGP.es.js";
2
2
  import { t as toSliceSource } from "../chunks/slice-source-gfOhG2MW.es.js";
3
3
  import { computed, inject, onScopeDispose, provide, shallowRef, toRaw, toValue, watch } from "vue";
4
4
  //#region src/public/ui/vue.ts
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-BWWWNPP8.cjs");
2
+ const require_create_super_doc_ui = require("../chunks/create-super-doc-ui-DNfQTF2k.cjs");
3
3
  exports.BUILT_IN_COMMAND_IDS = require_create_super_doc_ui.BUILT_IN_COMMAND_IDS;
4
4
  exports.createSuperDocUI = require_create_super_doc_ui.createSuperDocUI;
5
5
  exports.shallowEqual = require_create_super_doc_ui.shallowEqual;
@@ -1,2 +1,2 @@
1
- import { n as shallowEqual, r as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-FnwgTkUv.es.js";
1
+ import { n as shallowEqual, r as BUILT_IN_COMMAND_IDS, t as createSuperDocUI } from "../chunks/create-super-doc-ui-XWtQHPGP.es.js";
2
2
  export { BUILT_IN_COMMAND_IDS, createSuperDocUI, shallowEqual };
package/dist/style.css CHANGED
@@ -1818,11 +1818,11 @@ img[data-v-c95b2073] {
1818
1818
  pointer-events: auto;
1819
1819
  }
1820
1820
 
1821
- .superdoc[data-v-0d27f262] {
1821
+ .superdoc[data-v-ebe9a1fb] {
1822
1822
  display: flex;
1823
1823
  position: relative;
1824
1824
  }
1825
- .sd-visually-hidden[data-v-0d27f262] {
1825
+ .sd-visually-hidden[data-v-ebe9a1fb] {
1826
1826
  position: absolute;
1827
1827
  width: 1px;
1828
1828
  height: 1px;
@@ -1833,14 +1833,14 @@ img[data-v-c95b2073] {
1833
1833
  white-space: nowrap;
1834
1834
  border: 0;
1835
1835
  }
1836
- .superdoc__mutation-status[data-v-0d27f262] {
1836
+ .superdoc__mutation-status[data-v-ebe9a1fb] {
1837
1837
  position: sticky;
1838
1838
  z-index: 10;
1839
1839
  top: 12px;
1840
1840
  height: 0;
1841
1841
  pointer-events: none;
1842
1842
  }
1843
- .superdoc__edit-rejected-status[data-v-0d27f262] {
1843
+ .superdoc__edit-rejected-status[data-v-ebe9a1fb] {
1844
1844
  position: absolute;
1845
1845
  top: 0;
1846
1846
  left: 50%;
@@ -1858,30 +1858,30 @@ img[data-v-c95b2073] {
1858
1858
  line-height: 20px;
1859
1859
  pointer-events: none;
1860
1860
  }
1861
- .right-sidebar[data-v-0d27f262] {
1861
+ .right-sidebar[data-v-ebe9a1fb] {
1862
1862
  min-width: 320px;
1863
1863
  height: 100%;
1864
1864
  }
1865
- .floating-comments[data-v-0d27f262] {
1865
+ .floating-comments[data-v-ebe9a1fb] {
1866
1866
  min-width: 300px;
1867
1867
  width: 300px;
1868
1868
  height: 100%;
1869
1869
  overflow: visible;
1870
1870
  }
1871
- .superdoc__layers[data-v-0d27f262] {
1871
+ .superdoc__layers[data-v-ebe9a1fb] {
1872
1872
  height: 100%;
1873
1873
  position: relative;
1874
1874
  box-sizing: border-box;
1875
1875
  }
1876
- .superdoc__document[data-v-0d27f262] {
1876
+ .superdoc__document[data-v-ebe9a1fb] {
1877
1877
  width: 100%;
1878
1878
  position: relative;
1879
1879
  }
1880
- .superdoc__sub-document[data-v-0d27f262] {
1880
+ .superdoc__sub-document[data-v-ebe9a1fb] {
1881
1881
  width: 100%;
1882
1882
  position: relative;
1883
1883
  }
1884
- .superdoc__selection-layer[data-v-0d27f262] {
1884
+ .superdoc__selection-layer[data-v-ebe9a1fb] {
1885
1885
  position: absolute;
1886
1886
  min-width: 100%;
1887
1887
  min-height: 100%;
@@ -1892,13 +1892,13 @@ img[data-v-c95b2073] {
1892
1892
  /* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
1893
1893
  the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
1894
1894
  clickable, and below the selection layer (z-index 10). */
1895
- .superdoc__whiteboard-layer[data-v-0d27f262] {
1895
+ .superdoc__whiteboard-layer[data-v-ebe9a1fb] {
1896
1896
  z-index: 4;
1897
1897
  }
1898
- .superdoc__temp-selection[data-v-0d27f262] {
1898
+ .superdoc__temp-selection[data-v-ebe9a1fb] {
1899
1899
  position: absolute;
1900
1900
  }
1901
- .superdoc__right-sidebar[data-v-0d27f262] {
1901
+ .superdoc__right-sidebar[data-v-ebe9a1fb] {
1902
1902
  width: 320px;
1903
1903
  min-width: 320px;
1904
1904
  padding: 0 10px;
@@ -1906,7 +1906,7 @@ img[data-v-c95b2073] {
1906
1906
  position: relative;
1907
1907
  z-index: 2;
1908
1908
  }
1909
- .superdoc__compact-comment-popover[data-v-0d27f262] {
1909
+ .superdoc__compact-comment-popover[data-v-ebe9a1fb] {
1910
1910
  position: absolute;
1911
1911
  top: 12px;
1912
1912
  right: 12px;
@@ -1915,14 +1915,14 @@ img[data-v-c95b2073] {
1915
1915
  }
1916
1916
 
1917
1917
  /* Tools styles */
1918
- .tools[data-v-0d27f262] {
1918
+ .tools[data-v-ebe9a1fb] {
1919
1919
  position: absolute;
1920
1920
  z-index: 3;
1921
1921
  display: flex;
1922
1922
  flex-direction: column;
1923
1923
  gap: var(--sd-ui-tools-gap, 6px);
1924
1924
  }
1925
- .tools-item[data-v-0d27f262] {
1925
+ .tools-item[data-v-ebe9a1fb] {
1926
1926
  display: flex;
1927
1927
  align-items: center;
1928
1928
  justify-content: center;
@@ -1933,10 +1933,10 @@ img[data-v-c95b2073] {
1933
1933
  cursor: pointer;
1934
1934
  position: relative;
1935
1935
  }
1936
- .tools-item i[data-v-0d27f262] {
1936
+ .tools-item i[data-v-ebe9a1fb] {
1937
1937
  cursor: pointer;
1938
1938
  }
1939
- .superdoc__tools-icon[data-v-0d27f262] {
1939
+ .superdoc__tools-icon[data-v-ebe9a1fb] {
1940
1940
  width: var(--sd-ui-tools-icon-size, 20px);
1941
1941
  height: var(--sd-ui-tools-icon-size, 20px);
1942
1942
  flex-shrink: 0;
@@ -1951,22 +1951,22 @@ img[data-v-c95b2073] {
1951
1951
 
1952
1952
  /* 834px is iPad screen size in portrait orientation */
1953
1953
  @media (max-width: 834px) {
1954
- .superdoc .superdoc__layers[data-v-0d27f262] {
1954
+ .superdoc .superdoc__layers[data-v-ebe9a1fb] {
1955
1955
  margin: 0;
1956
1956
  border: 0 !important;
1957
1957
  box-shadow: none;
1958
1958
  }
1959
- .superdoc__sub-document[data-v-0d27f262] {
1959
+ .superdoc__sub-document[data-v-ebe9a1fb] {
1960
1960
  max-width: 100%;
1961
1961
  }
1962
- .superdoc__right-sidebar[data-v-0d27f262] {
1962
+ .superdoc__right-sidebar[data-v-ebe9a1fb] {
1963
1963
  padding: 10px;
1964
1964
  position: relative;
1965
1965
  }
1966
1966
  }
1967
1967
 
1968
1968
  /* AI Writer styles */
1969
- .ai-writer-container[data-v-0d27f262] {
1969
+ .ai-writer-container[data-v-ebe9a1fb] {
1970
1970
  position: fixed;
1971
1971
  z-index: 1000;
1972
1972
  background: white;
@@ -1982,10 +1982,10 @@ img[data-v-c95b2073] {
1982
1982
  transform: translateY(-50%);
1983
1983
  z-index: 50;
1984
1984
  } */
1985
- .ai-tool > svg[data-v-0d27f262] {
1985
+ .ai-tool > svg[data-v-ebe9a1fb] {
1986
1986
  fill: transparent;
1987
1987
  }
1988
- .ai-tool[data-v-0d27f262]::before {
1988
+ .ai-tool[data-v-ebe9a1fb]::before {
1989
1989
  content: '';
1990
1990
  position: absolute;
1991
1991
  width: 20px;
@@ -2006,7 +2006,7 @@ img[data-v-c95b2073] {
2006
2006
  filter: brightness(1.2);
2007
2007
  transition: filter 0.2s ease;
2008
2008
  }
2009
- .ai-tool[data-v-0d27f262]:hover::before {
2009
+ .ai-tool[data-v-ebe9a1fb]:hover::before {
2010
2010
  filter: brightness(1.3);
2011
2011
  }
2012
2012
 
@@ -2359,7 +2359,7 @@ img[data-v-c95b2073] {
2359
2359
  transform: scale(1);
2360
2360
  }
2361
2361
 
2362
- .superdoc-toolbar-overflow[data-v-975959f9] {
2362
+ .superdoc-toolbar-overflow[data-v-5f8ee279] {
2363
2363
  min-width: auto !important;
2364
2364
  max-width: 200px;
2365
2365
  flex-wrap: wrap;
@@ -1818,11 +1818,11 @@ img[data-v-c95b2073] {
1818
1818
  pointer-events: auto;
1819
1819
  }
1820
1820
 
1821
- .superdoc[data-v-0d27f262] {
1821
+ .superdoc[data-v-ebe9a1fb] {
1822
1822
  display: flex;
1823
1823
  position: relative;
1824
1824
  }
1825
- .sd-visually-hidden[data-v-0d27f262] {
1825
+ .sd-visually-hidden[data-v-ebe9a1fb] {
1826
1826
  position: absolute;
1827
1827
  width: 1px;
1828
1828
  height: 1px;
@@ -1833,14 +1833,14 @@ img[data-v-c95b2073] {
1833
1833
  white-space: nowrap;
1834
1834
  border: 0;
1835
1835
  }
1836
- .superdoc__mutation-status[data-v-0d27f262] {
1836
+ .superdoc__mutation-status[data-v-ebe9a1fb] {
1837
1837
  position: sticky;
1838
1838
  z-index: 10;
1839
1839
  top: 12px;
1840
1840
  height: 0;
1841
1841
  pointer-events: none;
1842
1842
  }
1843
- .superdoc__edit-rejected-status[data-v-0d27f262] {
1843
+ .superdoc__edit-rejected-status[data-v-ebe9a1fb] {
1844
1844
  position: absolute;
1845
1845
  top: 0;
1846
1846
  left: 50%;
@@ -1858,30 +1858,30 @@ img[data-v-c95b2073] {
1858
1858
  line-height: 20px;
1859
1859
  pointer-events: none;
1860
1860
  }
1861
- .right-sidebar[data-v-0d27f262] {
1861
+ .right-sidebar[data-v-ebe9a1fb] {
1862
1862
  min-width: 320px;
1863
1863
  height: 100%;
1864
1864
  }
1865
- .floating-comments[data-v-0d27f262] {
1865
+ .floating-comments[data-v-ebe9a1fb] {
1866
1866
  min-width: 300px;
1867
1867
  width: 300px;
1868
1868
  height: 100%;
1869
1869
  overflow: visible;
1870
1870
  }
1871
- .superdoc__layers[data-v-0d27f262] {
1871
+ .superdoc__layers[data-v-ebe9a1fb] {
1872
1872
  height: 100%;
1873
1873
  position: relative;
1874
1874
  box-sizing: border-box;
1875
1875
  }
1876
- .superdoc__document[data-v-0d27f262] {
1876
+ .superdoc__document[data-v-ebe9a1fb] {
1877
1877
  width: 100%;
1878
1878
  position: relative;
1879
1879
  }
1880
- .superdoc__sub-document[data-v-0d27f262] {
1880
+ .superdoc__sub-document[data-v-ebe9a1fb] {
1881
1881
  width: 100%;
1882
1882
  position: relative;
1883
1883
  }
1884
- .superdoc__selection-layer[data-v-0d27f262] {
1884
+ .superdoc__selection-layer[data-v-ebe9a1fb] {
1885
1885
  position: absolute;
1886
1886
  min-width: 100%;
1887
1887
  min-height: 100%;
@@ -1892,13 +1892,13 @@ img[data-v-c95b2073] {
1892
1892
  /* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
1893
1893
  the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
1894
1894
  clickable, and below the selection layer (z-index 10). */
1895
- .superdoc__whiteboard-layer[data-v-0d27f262] {
1895
+ .superdoc__whiteboard-layer[data-v-ebe9a1fb] {
1896
1896
  z-index: 4;
1897
1897
  }
1898
- .superdoc__temp-selection[data-v-0d27f262] {
1898
+ .superdoc__temp-selection[data-v-ebe9a1fb] {
1899
1899
  position: absolute;
1900
1900
  }
1901
- .superdoc__right-sidebar[data-v-0d27f262] {
1901
+ .superdoc__right-sidebar[data-v-ebe9a1fb] {
1902
1902
  width: 320px;
1903
1903
  min-width: 320px;
1904
1904
  padding: 0 10px;
@@ -1906,7 +1906,7 @@ img[data-v-c95b2073] {
1906
1906
  position: relative;
1907
1907
  z-index: 2;
1908
1908
  }
1909
- .superdoc__compact-comment-popover[data-v-0d27f262] {
1909
+ .superdoc__compact-comment-popover[data-v-ebe9a1fb] {
1910
1910
  position: absolute;
1911
1911
  top: 12px;
1912
1912
  right: 12px;
@@ -1915,14 +1915,14 @@ img[data-v-c95b2073] {
1915
1915
  }
1916
1916
 
1917
1917
  /* Tools styles */
1918
- .tools[data-v-0d27f262] {
1918
+ .tools[data-v-ebe9a1fb] {
1919
1919
  position: absolute;
1920
1920
  z-index: 3;
1921
1921
  display: flex;
1922
1922
  flex-direction: column;
1923
1923
  gap: var(--sd-ui-tools-gap, 6px);
1924
1924
  }
1925
- .tools-item[data-v-0d27f262] {
1925
+ .tools-item[data-v-ebe9a1fb] {
1926
1926
  display: flex;
1927
1927
  align-items: center;
1928
1928
  justify-content: center;
@@ -1933,10 +1933,10 @@ img[data-v-c95b2073] {
1933
1933
  cursor: pointer;
1934
1934
  position: relative;
1935
1935
  }
1936
- .tools-item i[data-v-0d27f262] {
1936
+ .tools-item i[data-v-ebe9a1fb] {
1937
1937
  cursor: pointer;
1938
1938
  }
1939
- .superdoc__tools-icon[data-v-0d27f262] {
1939
+ .superdoc__tools-icon[data-v-ebe9a1fb] {
1940
1940
  width: var(--sd-ui-tools-icon-size, 20px);
1941
1941
  height: var(--sd-ui-tools-icon-size, 20px);
1942
1942
  flex-shrink: 0;
@@ -1951,22 +1951,22 @@ img[data-v-c95b2073] {
1951
1951
 
1952
1952
  /* 834px is iPad screen size in portrait orientation */
1953
1953
  @media (max-width: 834px) {
1954
- .superdoc .superdoc__layers[data-v-0d27f262] {
1954
+ .superdoc .superdoc__layers[data-v-ebe9a1fb] {
1955
1955
  margin: 0;
1956
1956
  border: 0 !important;
1957
1957
  box-shadow: none;
1958
1958
  }
1959
- .superdoc__sub-document[data-v-0d27f262] {
1959
+ .superdoc__sub-document[data-v-ebe9a1fb] {
1960
1960
  max-width: 100%;
1961
1961
  }
1962
- .superdoc__right-sidebar[data-v-0d27f262] {
1962
+ .superdoc__right-sidebar[data-v-ebe9a1fb] {
1963
1963
  padding: 10px;
1964
1964
  position: relative;
1965
1965
  }
1966
1966
  }
1967
1967
 
1968
1968
  /* AI Writer styles */
1969
- .ai-writer-container[data-v-0d27f262] {
1969
+ .ai-writer-container[data-v-ebe9a1fb] {
1970
1970
  position: fixed;
1971
1971
  z-index: 1000;
1972
1972
  background: white;
@@ -1982,10 +1982,10 @@ img[data-v-c95b2073] {
1982
1982
  transform: translateY(-50%);
1983
1983
  z-index: 50;
1984
1984
  } */
1985
- .ai-tool > svg[data-v-0d27f262] {
1985
+ .ai-tool > svg[data-v-ebe9a1fb] {
1986
1986
  fill: transparent;
1987
1987
  }
1988
- .ai-tool[data-v-0d27f262]::before {
1988
+ .ai-tool[data-v-ebe9a1fb]::before {
1989
1989
  content: '';
1990
1990
  position: absolute;
1991
1991
  width: 20px;
@@ -2006,7 +2006,7 @@ img[data-v-c95b2073] {
2006
2006
  filter: brightness(1.2);
2007
2007
  transition: filter 0.2s ease;
2008
2008
  }
2009
- .ai-tool[data-v-0d27f262]:hover::before {
2009
+ .ai-tool[data-v-ebe9a1fb]:hover::before {
2010
2010
  filter: brightness(1.3);
2011
2011
  }
2012
2012
 
@@ -2359,7 +2359,7 @@ img[data-v-c95b2073] {
2359
2359
  transform: scale(1);
2360
2360
  }
2361
2361
 
2362
- .superdoc-toolbar-overflow[data-v-975959f9] {
2362
+ .superdoc-toolbar-overflow[data-v-5f8ee279] {
2363
2363
  min-width: auto !important;
2364
2364
  max-width: 200px;
2365
2365
  flex-wrap: wrap;
@@ -48,3 +48,4 @@ export function resolveFitWidthOptions(rawFitConfig: any): {
48
48
  export function computeFitZoom(availableWidth: any, documentWidth: any): number | null;
49
49
  export function computeAppliedFitZoom(availableWidth: any, documentWidth: any, options: any): number | null;
50
50
  export function normalizePdfPageMeasurement(measured: any, scaleFactor: any, zoomFactor: any): any;
51
+ export function resolveEditorPageWidth(editor: any): number | null;
@@ -0,0 +1,2 @@
1
+ import { SuperDocExceptionCollaborationPayload } from '../types/index.js';
2
+ export declare function createCollaborationException(code: string, documentId: string | null): SuperDocExceptionCollaborationPayload | null;
@@ -7,20 +7,20 @@
7
7
  * first-class single-doc provider families — y-websocket, Hocuspocus, and
8
8
  * Liveblocks — each bound to one `Y.Doc`, one provider session, and one
9
9
  * awareness channel (implemented inside the bundled v2 runtime) and surfaced
10
- * publicly through {@link V2CollaborationConfig} (`Document.v2Collaboration`).
10
+ * publicly through {@link DocumentCollaborationConfig} (`Document.collaboration`).
11
11
  *
12
12
  * The resolver never returns a "maybe collaborative" result: it either returns
13
13
  * a normalized, supported target or a stable, redacted diagnostic. Tokens, auth
14
14
  * keys, auth endpoints, and query strings are never echoed back in diagnostics.
15
15
  */
16
16
  /** Provider families the shipped v2 single-doc runtime can drive. */
17
- export type SupportedV2ProviderFamily = 'y-websocket' | 'hocuspocus' | 'liveblocks';
17
+ export type SupportedV2ProviderFamily = 'y-websocket' | 'hocuspocus' | 'liveblocks' | 'extension';
18
18
  /**
19
19
  * Stable, machine-readable reasons a target cannot be treated as a supported v2
20
20
  * collaboration room. These strings are part of the diagnostic contract and are
21
21
  * safe to assert against in tests; they never carry caller-provided values.
22
22
  */
23
- export type V2CollaborationUnsupportedReason = 'missing-target' | 'invalid-document-id' | 'invalid-server-url' | 'invalid-room-mode' | 'invalid-auth-endpoint' | 'missing-auth' | 'mixed-auth' | 'unsupported-document-type' | 'unsupported-multi-document' | 'unsupported-legacy-provider' | 'unsupported-provider-family';
23
+ export type V2CollaborationUnsupportedReason = 'missing-target' | 'invalid-document-id' | 'invalid-server-url' | 'invalid-room-mode' | 'invalid-auth-endpoint' | 'invalid-adapter-id' | 'invalid-provider-options' | 'missing-auth' | 'mixed-auth' | 'unsupported-document-type' | 'unsupported-multi-document' | 'unsupported-legacy-provider' | 'unsupported-provider-family';
24
24
  /**
25
25
  * Normalized, supported v2 collaboration room target.
26
26
  *
@@ -38,11 +38,15 @@ export interface NormalizedV2CollaborationTarget {
38
38
  /** Optional connection query params (e.g. auth token) forwarded verbatim. */
39
39
  params?: Record<string, string>;
40
40
  /** Hocuspocus auth-message token. */
41
- token?: string;
41
+ token?: string | (() => string | Promise<string>);
42
42
  /** Liveblocks anonymous public key auth mode. */
43
43
  publicApiKey?: string;
44
44
  /** Liveblocks server-side auth endpoint mode. */
45
45
  authEndpoint?: string;
46
+ /** Adapter registration key for a customer collaboration Worker. */
47
+ adapterId?: string;
48
+ /** Structured-clone-safe options interpreted by the registered adapter. */
49
+ providerOptions?: unknown;
46
50
  /** Explicit room operation; join is the default at the untrusted input boundary. */
47
51
  roomMode: 'join' | 'create';
48
52
  }
@@ -68,7 +72,9 @@ export interface LegacyCollaborationLike {
68
72
  [key: string]: unknown;
69
73
  }
70
74
  export interface ResolveV2CollaborationTargetInput {
71
- /** Document-level v2 collaboration config (canonical supported entry point). */
75
+ /** Preferred connection settings. Explicit null or invalid input never falls back to the alias. */
76
+ collaboration?: unknown;
77
+ /** Compatibility spelling for document-level connection settings. */
72
78
  v2Collaboration?: unknown;
73
79
  /** Legacy provider-agnostic collaboration block (`modules.collaboration` / upgrade opts). */
74
80
  legacyCollaboration?: LegacyCollaborationLike | null;
@@ -83,6 +89,11 @@ export interface ResolveV2CollaborationTargetInput {
83
89
  */
84
90
  authEndpointBaseUrl?: string;
85
91
  }
92
+ /** Select the public spelling before validation; do not merge settings from different rooms. */
93
+ export declare function readCollaborationConfig(input: {
94
+ collaboration?: unknown;
95
+ v2Collaboration?: unknown;
96
+ }): unknown;
86
97
  /**
87
98
  * Redact a connection URL for safe inclusion in diagnostics and artifacts.
88
99
  *
@@ -1,43 +1,55 @@
1
1
  export interface ThemeColors {
2
- /** Action/accent color (buttons, links, active states). Default: #1355ff */
2
+ /** Action color for buttons, links, and active states. @defaultValue `#1355ff` */
3
3
  action?: string;
4
- /** Action hover state. Default: #0f44cc */
4
+ /** Hover color for action elements. @defaultValue `#0f44cc` */
5
5
  actionHover?: string;
6
- /** Text color on action-colored buttons. Default: #ffffff */
6
+ /** Text color shown on action-colored elements. @defaultValue `#ffffff` */
7
7
  actionText?: string;
8
- /** Default background for panels, cards, dropdowns. Default: #ffffff */
8
+ /** Shared background for UI surfaces such as panels, cards, and dropdowns. @defaultValue `#ffffff` */
9
9
  bg?: string;
10
- /** Hover background. Default: #dbdbdb */
10
+ /** Background for hovered controls. @defaultValue `#dbdbdb` */
11
11
  hoverBg?: string;
12
- /** Active/pressed background. Default: #c8d0d8 */
12
+ /** Background for active and pressed controls. @defaultValue `#c8d0d8` */
13
13
  activeBg?: string;
14
- /** Disabled background. Default: #f5f5f5 */
14
+ /** Background for disabled controls. @defaultValue `#f5f5f5` */
15
15
  disabledBg?: string;
16
- /** Primary text color. Default: #47484a */
16
+ /** Primary UI text color. @defaultValue `#47484a` */
17
17
  text?: string;
18
- /** Secondary/muted text. Default: #666666 */
18
+ /** Secondary UI text color. @defaultValue `#666666` */
19
19
  textMuted?: string;
20
- /** Disabled text. Default: #ababab */
20
+ /** Text color for disabled controls. @defaultValue `#ababab` */
21
21
  textDisabled?: string;
22
- /** Default border color. Default: #dbdbdb */
22
+ /** Shared UI border color. @defaultValue `#dbdbdb` */
23
23
  border?: string;
24
24
  }
25
+ /** SuperDoc CSS variable overrides applied after the semantic theme values. */
26
+ export type ThemeVariableOverrides = {
27
+ readonly [name: `--sd-${string}`]: string | null | undefined;
28
+ };
25
29
  export interface ThemeConfig {
26
- /** Theme name — used in the generated class name (e.g., "dark" → "sd-theme-dark") */
30
+ /** Name used in the generated class, such as `product` for `sd-theme-product`. */
27
31
  name?: string;
28
- /** UI font family */
32
+ /**
33
+ * Font family for SuperDoc UI surfaces that inherit the theme, such as body-mounted dialogs
34
+ * and floating surfaces. The Editor root and the external toolbar set `--sd-ui-font-family`
35
+ * inline from `uiDisplayFallbackFont`, and an inline declaration outranks the theme class —
36
+ * set `uiDisplayFallbackFont` to the same value to change those surfaces too.
37
+ */
29
38
  font?: string;
30
- /** Default border radius (e.g., "8px") */
39
+ /** Shared UI border radius, such as `8px`. */
31
40
  radius?: string;
32
- /** Default box shadow */
41
+ /** Shared UI box shadow. */
33
42
  shadow?: string;
34
- /** Core color palette — cascades to every component */
43
+ /** Semantic colors shared by SuperDoc UI components. */
35
44
  colors?: ThemeColors;
36
- /** Escape hatch — raw CSS variable overrides (e.g., { '--sd-ui-toolbar-bg': '#f8fafc' }) */
37
- vars?: Record<string, string | null | undefined>;
45
+ /** Component-specific overrides, such as `{ '--sd-ui-toolbar-bg': '#f8fafc' }`. */
46
+ vars?: ThemeVariableOverrides;
38
47
  }
48
+ /** CSS generated by {@link buildTheme}. */
39
49
  export interface ThemeResult {
50
+ /** Class that activates the generated theme. */
40
51
  className: string;
52
+ /** CSS rule containing the generated SuperDoc variables. */
41
53
  css: string;
42
54
  }
43
55
  /**
@@ -65,8 +77,8 @@ export interface ThemeResult {
65
77
  export declare function createTheme(config: ThemeConfig): string;
66
78
  /**
67
79
  * Build a SuperDoc theme and return both the class name and raw CSS.
68
- * Pure function — does NOT inject styles into the DOM. Use this for SSR
69
- * or when you need to control style injection yourself (e.g., CSP nonce).
80
+ * This function does not access the DOM. Use it for server rendering or when
81
+ * your application controls style injection, such as with a CSP nonce.
70
82
  *
71
83
  * @example
72
84
  * ```ts