superdoc 2.24.0-next.10 → 2.24.0-next.12
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/dist/collaboration-upgrade-engine.cjs +1 -1
- package/dist/collaboration-upgrade-engine.es.js +1 -1
- package/dist/document-api/src/contract/command-catalog.d.ts +1 -1
- package/dist/document-api/src/contract/operation-definitions.d.ts +19 -1
- package/dist/document-api/src/get/get.d.ts +2 -1
- package/dist/document-api/src/index.d.ts +9 -6
- package/dist/document-api/src/inline-semantics/token-sets.d.ts +11 -0
- package/dist/document-api/src/styles/apply.d.ts +5 -0
- package/dist/document-api/src/styles/catalog.d.ts +40 -19
- package/dist/document-api/src/styles/create.d.ts +160 -0
- package/dist/document-api/src/styles/index.d.ts +8 -4
- package/dist/document-api/src/styles/registry.d.ts +34 -2
- package/dist/document-api/src/styles/schema.d.ts +24 -5
- package/dist/document-api/src/styles/theme.d.ts +32 -0
- package/dist/document-api/src/styles/validation.d.ts +11 -2
- package/dist/document-api/src/templates/apply.d.ts +13 -15
- package/dist/document-api/src/types/fragment.d.ts +3 -0
- package/dist/document-api/src/types/query-match.types.d.ts +43 -5
- package/dist/document-api/src/types/sd-props.d.ts +54 -14
- package/dist/document-api/src/types/sd-styles.d.ts +58 -3
- package/dist/style.css +22 -22
- package/dist/style.layered.css +22 -22
- package/dist/superdoc/src/core/editor-runtime/v2/v2-session-shortcut-routes.d.ts +2 -0
- package/dist/superdoc.cjs +11 -8
- package/dist/superdoc.es.js +11 -8
- package/dist-cdn/style.layered.css +1 -1
- package/dist-cdn/superdoc.min.css +1 -1
- package/dist-cdn/superdoc.min.js +18 -18
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValueSchema, StylesChannel } from './registry.js';
|
|
1
|
+
import { ValueSchema, StylesChannel, StylesScope } from './registry.js';
|
|
2
2
|
/**
|
|
3
3
|
* Validates a value against a ValueSchema AST node.
|
|
4
4
|
*
|
|
@@ -35,4 +35,13 @@ export type PatchKeyClassification = {
|
|
|
35
35
|
* nesting conditionals across excluded-key maps, allowed-key sets, and
|
|
36
36
|
* cross-channel lookups.
|
|
37
37
|
*/
|
|
38
|
-
export declare function classifyPatchKey(key: string, channel: StylesChannel): PatchKeyClassification;
|
|
38
|
+
export declare function classifyPatchKey(key: string, channel: StylesChannel, scope?: StylesScope): PatchKeyClassification;
|
|
39
|
+
/**
|
|
40
|
+
* Validates the keys and values of a patch object against one channel.
|
|
41
|
+
*
|
|
42
|
+
* Shared by `styles.apply` (scope `docDefaults`) and `styles.create` (scope
|
|
43
|
+
* `style`); `field` names the caller's own input path so the error points at
|
|
44
|
+
* `patch` or at `run` / `paragraph` rather than at whichever one happened to
|
|
45
|
+
* write this code.
|
|
46
|
+
*/
|
|
47
|
+
export declare function validatePatchObject(patch: Record<string, unknown>, channel: StylesChannel, scope: StylesScope, field: string): void;
|
|
@@ -3,19 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Adopts a source DOCX's template **style system and reusable template assets**
|
|
5
5
|
* onto the currently open document while preserving the open document's
|
|
6
|
-
* body/story content
|
|
7
|
-
*
|
|
6
|
+
* body/story content. Source body content is never copied; `word/document.xml`
|
|
7
|
+
* is rewritten only to adopt section defaults. The adoption semantics are:
|
|
8
8
|
*
|
|
9
9
|
* - `styles`: source-authoritative overlap. For a `styleId` defined in both
|
|
10
10
|
* documents the source definition wins **in place** under the original id
|
|
11
11
|
* (no `*-tmpl` rename). The source `w:docDefaults` and `w:latentStyles`
|
|
12
|
-
* singletons replace the target's. Source-only styles are imported;
|
|
13
|
-
* styles
|
|
14
|
-
* - `numbering`:
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* deterministically, and references are rewritten coherently in both
|
|
18
|
-
* `numbering.xml` and `styles.xml`.
|
|
12
|
+
* singletons replace the target's. Source-only styles are imported; all
|
|
13
|
+
* target-only styles are retained.
|
|
14
|
+
* - `numbering`: every source `w:abstractNum`/`w:num` is appended. Colliding
|
|
15
|
+
* ids are remapped deterministically, and imported styles are rewritten to
|
|
16
|
+
* the remapped ids. Re-applying the same source appends the definitions again.
|
|
19
17
|
* - `settings`: bounded reconciliation — layout/style-affecting settings (e.g.
|
|
20
18
|
* default tab stop) are adopted; identity/workflow settings (`rsid*`, `docId`,
|
|
21
19
|
* protection/revision state, `attachedTemplate`) are preserved.
|
|
@@ -24,7 +22,8 @@
|
|
|
24
22
|
* imported as reusable template assets (even ones the page-1 governing
|
|
25
23
|
* section does not reference), together with their `.rels` and transitive
|
|
26
24
|
* media closure; colliding part names / relationship ids / media names are
|
|
27
|
-
* reallocated and references rewritten consistently.
|
|
25
|
+
* reallocated and references rewritten consistently. Re-applying the same
|
|
26
|
+
* source imports the parts again under new names.
|
|
28
27
|
* - `sectionDefaults`: the source `w:sectPr` that governs page 1 is adopted as
|
|
29
28
|
* the current document's active/final section-default model. On multi-section
|
|
30
29
|
* targets, its header/footer visibility model (`headerReference`,
|
|
@@ -32,11 +31,10 @@
|
|
|
32
31
|
* sections without overwriting their own page geometry. Intermediate / later
|
|
33
32
|
* source sections are not imported.
|
|
34
33
|
*
|
|
35
|
-
*
|
|
36
|
-
* comments, notes, people,
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* and body media remain out of scope and are reported, never applied.
|
|
34
|
+
* Other source parts are never applied. `customXml` is reported as an
|
|
35
|
+
* out-of-scope skipped scope. `customXml`, `docProps`, comments, notes, people,
|
|
36
|
+
* glossary, signatures, embeddings, and body media are reported in
|
|
37
|
+
* `unsupportedItems`.
|
|
40
38
|
*
|
|
41
39
|
* Engine-agnostic contract + execution entry point. No ProseMirror/converter imports.
|
|
42
40
|
*/
|
|
@@ -2,6 +2,7 @@ import { SDContentNode } from './sd-nodes.js';
|
|
|
2
2
|
import { SDStyles, SDDocDefaults, SDTheme } from './sd-styles.js';
|
|
3
3
|
import { SDNumberingCatalog, SDSection, SDReferenceCatalogs, SDAnnotations } from './sd-sections.js';
|
|
4
4
|
import { SDDocumentMeta } from './sd-props.js';
|
|
5
|
+
import { SDDiagnostic } from './sd-contract.js';
|
|
5
6
|
/** Structural content payload for insert and replace operations. */
|
|
6
7
|
export type SDFragment = SDContentNode | SDContentNode[];
|
|
7
8
|
export interface SDDocument {
|
|
@@ -15,6 +16,8 @@ export interface SDDocument {
|
|
|
15
16
|
referenceCatalogs?: SDReferenceCatalogs;
|
|
16
17
|
annotations?: SDAnnotations;
|
|
17
18
|
metadata?: SDDocumentMeta;
|
|
19
|
+
/** Missing, malformed or fallback package parts, and read options not honored yet. */
|
|
20
|
+
diagnostics?: SDDiagnostic[];
|
|
18
21
|
}
|
|
19
22
|
export declare const SD_CONTENT_NODE_KINDS: readonly ["paragraph", "heading", "list", "table", "toc", "index", "bibliography", "tableOfAuthorities", "break", "horizontalRule", "sectionBreak", "sectPr", "image", "drawing", "sdt", "customXml", "altChunk", "math", "field"];
|
|
20
23
|
export type SDContentNodeKind = (typeof SD_CONTENT_NODE_KINDS)[number];
|
|
@@ -4,6 +4,7 @@ import { TextSelector, NodeSelector } from './query.js';
|
|
|
4
4
|
import { DiscoveryItem, DiscoveryResult } from './discovery.js';
|
|
5
5
|
import { InlineToggleDirective } from './style-policy.types.js';
|
|
6
6
|
import { StoryLocator } from './story.types.js';
|
|
7
|
+
import { StyleCatalogPreviewSources } from '../styles/catalog.js';
|
|
7
8
|
export type CardinalityRequirement = 'any' | 'first' | 'exactlyOne' | 'all';
|
|
8
9
|
/** Maximum total length for a match snippet (D11). */
|
|
9
10
|
export declare const SNIPPET_MAX_LENGTH = 500;
|
|
@@ -27,12 +28,32 @@ export interface MatchDirectStyles {
|
|
|
27
28
|
underline: InlineToggleDirective;
|
|
28
29
|
strike: InlineToggleDirective;
|
|
29
30
|
}
|
|
30
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Where an effective font or color came from: set as a literal value, or a
|
|
33
|
+
* theme reference (with tint/shade). Same vocabulary as catalog preview sources.
|
|
34
|
+
*/
|
|
35
|
+
export type MatchEffectiveSources = StyleCatalogPreviewSources;
|
|
36
|
+
/**
|
|
37
|
+
* Effective visual states: what the user sees after style cascade resolution
|
|
38
|
+
* (direct run formatting, character style, paragraph style chain, table style,
|
|
39
|
+
* document defaults, theme). The optional values are present when the cascade
|
|
40
|
+
* resolved them; `meta.effectiveResolved` says whether it ran.
|
|
41
|
+
*/
|
|
31
42
|
export interface MatchEffectiveStyles {
|
|
32
43
|
bold: boolean;
|
|
33
44
|
italic: boolean;
|
|
34
45
|
underline: boolean;
|
|
35
46
|
strike: boolean;
|
|
47
|
+
/** 6-digit lowercase hex with `#` prefix. Theme colors are resolved, tint/shade applied. */
|
|
48
|
+
color?: string;
|
|
49
|
+
/** 6-digit lowercase hex with `#` prefix. */
|
|
50
|
+
highlight?: string;
|
|
51
|
+
/** Latin-track font family. Theme fonts are resolved to the theme's typeface. */
|
|
52
|
+
fontFamily?: string;
|
|
53
|
+
/** Font size in points, rounded to 1 decimal place. */
|
|
54
|
+
fontSizePt?: number;
|
|
55
|
+
/** Origin of `fontFamily` and `color`. A value without a source is absent. */
|
|
56
|
+
sources?: MatchEffectiveSources;
|
|
36
57
|
}
|
|
37
58
|
/**
|
|
38
59
|
* Two-layer inline style state for a single run.
|
|
@@ -171,16 +192,33 @@ export type QueryMatchItem = DiscoveryItem<QueryMatchDomain>;
|
|
|
171
192
|
export type TextMatchItem = DiscoveryItem<TextMatchDomain>;
|
|
172
193
|
/** Node match item (blocks.length === 0). */
|
|
173
194
|
export type NodeMatchItem = DiscoveryItem<NodeMatchDomain>;
|
|
195
|
+
/**
|
|
196
|
+
* Why `styles.effective` could not be fully resolved for a match result.
|
|
197
|
+
*
|
|
198
|
+
* - `tracked-view-unresolved`: tracked-view matches (`includeDeletedText`) are not cascade-resolved.
|
|
199
|
+
* - `theme-fallback`: a theme font or color came from the default Office theme because the
|
|
200
|
+
* document's theme part or color scheme is missing or unreadable.
|
|
201
|
+
* - `style-parts-unavailable`: the document's style parts were not loaded, so styles were not applied.
|
|
202
|
+
* - `run-projection-unavailable`: the matched text could not be split into runs.
|
|
203
|
+
*/
|
|
204
|
+
export type QueryMatchDiagnosticCode = 'tracked-view-unresolved' | 'theme-fallback' | 'style-parts-unavailable' | 'run-projection-unavailable';
|
|
205
|
+
export interface QueryMatchDiagnostic {
|
|
206
|
+
code: QueryMatchDiagnosticCode;
|
|
207
|
+
message: string;
|
|
208
|
+
}
|
|
174
209
|
/**
|
|
175
210
|
* Metadata for `query.match`: always present on the output envelope.
|
|
176
211
|
*
|
|
177
|
-
* - `effectiveResolved: true`:
|
|
178
|
-
*
|
|
179
|
-
* - `effectiveResolved: false`:
|
|
180
|
-
* `styles.effective`
|
|
212
|
+
* - `effectiveResolved: true`: `styles.effective` on every run reflects full
|
|
213
|
+
* style cascade and theme resolution.
|
|
214
|
+
* - `effectiveResolved: false`: at least one run was not fully resolved, or the
|
|
215
|
+
* engine derives `styles.effective` from `direct` only. `diagnostics`, when
|
|
216
|
+
* present, says why.
|
|
181
217
|
*/
|
|
182
218
|
export interface QueryMatchMeta {
|
|
183
219
|
effectiveResolved: boolean;
|
|
220
|
+
/** Reasons the result is not fully resolved. Absent when there are none. */
|
|
221
|
+
diagnostics?: QueryMatchDiagnostic[];
|
|
184
222
|
}
|
|
185
223
|
export interface QueryMatchInput {
|
|
186
224
|
/** Selector for query.match. Text selectors may opt into deleted tracked text via `includeDeletedText`. */
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* SDM/1 property models: run, paragraph, table, list, image, drawing props.
|
|
3
|
-
*
|
|
4
|
-
* These define the direct formatting ("authored") property bags carried by
|
|
5
|
-
* style-bearing nodes. Resolved/provenance fields are separate concerns
|
|
6
|
-
* populated at read time by the style-engine.
|
|
7
|
-
*/
|
|
1
|
+
import { ST_HIGHLIGHT_VALUES } from '../inline-semantics/token-sets.js';
|
|
8
2
|
export type SDThemeFontRef = 'majorAscii' | 'majorHAnsi' | 'majorEastAsia' | 'majorBidi' | 'minorAscii' | 'minorHAnsi' | 'minorEastAsia' | 'minorBidi';
|
|
9
3
|
export interface SDRunFonts {
|
|
10
4
|
ascii?: string;
|
|
@@ -34,7 +28,7 @@ export type SDColorRef = {
|
|
|
34
28
|
} | {
|
|
35
29
|
model: 'auto';
|
|
36
30
|
};
|
|
37
|
-
export type SDHighlightColor =
|
|
31
|
+
export type SDHighlightColor = (typeof ST_HIGHLIGHT_VALUES)[number];
|
|
38
32
|
export type SDUnderlineStyle = 'none' | 'single' | 'words' | 'double' | 'thick' | 'dotted' | 'dottedHeavy' | 'dash' | 'dashedHeavy' | 'dashLong' | 'dashLongHeavy' | 'dotDash' | 'dashDotHeavy' | 'dotDotDash' | 'dashDotDotHeavy' | 'wave' | 'wavyHeavy' | 'wavyDouble';
|
|
39
33
|
export interface SDUnderline {
|
|
40
34
|
style?: SDUnderlineStyle;
|
|
@@ -47,7 +41,9 @@ export interface SDShading {
|
|
|
47
41
|
}
|
|
48
42
|
export interface SDRunBorder {
|
|
49
43
|
style?: string;
|
|
44
|
+
/** Line width in points. */
|
|
50
45
|
width?: number;
|
|
46
|
+
/** Spacing from the content in points. */
|
|
51
47
|
space?: number;
|
|
52
48
|
color?: SDColorRef;
|
|
53
49
|
frame?: boolean;
|
|
@@ -186,10 +182,31 @@ export type SDTableWidth = {
|
|
|
186
182
|
} | {
|
|
187
183
|
kind: 'none';
|
|
188
184
|
};
|
|
185
|
+
/** Table border lines; `width` and `space` in points. */
|
|
186
|
+
export interface SDTableBorders {
|
|
187
|
+
top?: SDRunBorder;
|
|
188
|
+
right?: SDRunBorder;
|
|
189
|
+
bottom?: SDRunBorder;
|
|
190
|
+
left?: SDRunBorder;
|
|
191
|
+
start?: SDRunBorder;
|
|
192
|
+
end?: SDRunBorder;
|
|
193
|
+
insideH?: SDRunBorder;
|
|
194
|
+
insideV?: SDRunBorder;
|
|
195
|
+
}
|
|
196
|
+
/** Cell padding in points. */
|
|
197
|
+
export interface SDCellPadding {
|
|
198
|
+
top?: number;
|
|
199
|
+
right?: number;
|
|
200
|
+
bottom?: number;
|
|
201
|
+
left?: number;
|
|
202
|
+
start?: number;
|
|
203
|
+
end?: number;
|
|
204
|
+
}
|
|
189
205
|
export interface SDTableProps {
|
|
190
206
|
width?: SDTableWidth;
|
|
191
207
|
layout?: 'fixed' | 'autofit';
|
|
192
208
|
alignment?: 'left' | 'center' | 'right' | 'inside' | 'outside';
|
|
209
|
+
/** Normalized CSS-like edge borders retained for document and fragment compatibility. */
|
|
193
210
|
borders?: {
|
|
194
211
|
top?: string;
|
|
195
212
|
right?: string;
|
|
@@ -198,28 +215,51 @@ export interface SDTableProps {
|
|
|
198
215
|
insideH?: string;
|
|
199
216
|
insideV?: string;
|
|
200
217
|
};
|
|
218
|
+
/** Leading-edge indent in points. */
|
|
219
|
+
indent?: number;
|
|
220
|
+
/** Spacing between cells in points. */
|
|
221
|
+
cellSpacing?: number;
|
|
222
|
+
/** Default cell padding in points. */
|
|
223
|
+
cellPadding?: SDCellPadding;
|
|
224
|
+
shading?: SDShading;
|
|
225
|
+
/** Right-to-left visual column order (`w:bidiVisual`). */
|
|
226
|
+
bidiVisual?: boolean;
|
|
227
|
+
}
|
|
228
|
+
/** Table formatting authored on a table style. Borders are structured lines, not strings. */
|
|
229
|
+
export interface SDTableStyleProps extends Omit<SDTableProps, 'borders'> {
|
|
230
|
+
borders?: SDTableBorders;
|
|
201
231
|
}
|
|
202
232
|
export interface SDRowProps {
|
|
203
233
|
/** Minimum row height in points. */
|
|
204
234
|
minHeight?: number;
|
|
205
235
|
cantSplit?: boolean;
|
|
236
|
+
/** Repeat this row as a header row on each page (`w:tblHeader`). */
|
|
237
|
+
repeatHeader?: boolean;
|
|
238
|
+
}
|
|
239
|
+
/** Cell border lines; `width` and `space` in points. */
|
|
240
|
+
export interface SDCellBorders extends SDTableBorders {
|
|
241
|
+
/** Diagonal from top-left to bottom-right. */
|
|
242
|
+
tl2br?: SDRunBorder;
|
|
243
|
+
/** Diagonal from top-right to bottom-left. */
|
|
244
|
+
tr2bl?: SDRunBorder;
|
|
206
245
|
}
|
|
207
246
|
export interface SDCellProps {
|
|
208
247
|
verticalAlign?: 'top' | 'center' | 'bottom';
|
|
209
248
|
shading?: SDColorRef;
|
|
210
249
|
/** Cell padding in points. */
|
|
211
|
-
padding?:
|
|
212
|
-
|
|
213
|
-
right?: number;
|
|
214
|
-
bottom?: number;
|
|
215
|
-
left?: number;
|
|
216
|
-
};
|
|
250
|
+
padding?: SDCellPadding;
|
|
251
|
+
/** Normalized CSS-like edge borders, such as `'single 1pt #000000'` or `'none'`. */
|
|
217
252
|
borders?: {
|
|
218
253
|
top?: string;
|
|
219
254
|
right?: string;
|
|
220
255
|
bottom?: string;
|
|
221
256
|
left?: string;
|
|
222
257
|
};
|
|
258
|
+
noWrap?: boolean;
|
|
259
|
+
}
|
|
260
|
+
/** Cell formatting authored on a table style. Borders are structured lines, not strings. */
|
|
261
|
+
export interface SDTableStyleCellProps extends Omit<SDCellProps, 'borders'> {
|
|
262
|
+
borders?: SDCellBorders;
|
|
223
263
|
}
|
|
224
264
|
export interface SDImageProps {
|
|
225
265
|
alignment?: 'left' | 'center' | 'right';
|
|
@@ -1,20 +1,69 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SDParagraphProps, SDRowProps, SDRunProps, SDTableProps, SDTableStyleProps, SDTableStyleCellProps, SDThemeColorName } from './sd-props.js';
|
|
2
|
+
import { SDResolvedProvenance } from './sd-objects.js';
|
|
2
3
|
export interface SDStyleBase<TProps> {
|
|
3
4
|
name?: string;
|
|
4
5
|
basedOn?: string;
|
|
5
6
|
next?: string;
|
|
6
7
|
linked?: string;
|
|
8
|
+
/** Properties authored on this style, with theme references left raw. */
|
|
7
9
|
props?: TProps;
|
|
10
|
+
/** Cascaded values (basedOn chain, docDefaults, theme). Present with `includeResolved`. */
|
|
11
|
+
resolved?: Partial<TProps>;
|
|
12
|
+
/** Where each resolved value came from. Present with `includeProvenance`. */
|
|
13
|
+
provenance?: SDResolvedProvenance<TProps>;
|
|
14
|
+
}
|
|
15
|
+
export interface SDParagraphStyleDef extends SDStyleBase<SDParagraphProps> {
|
|
16
|
+
/** Run properties authored on this paragraph style (`w:rPr`). */
|
|
17
|
+
runProps?: SDRunProps;
|
|
18
|
+
/** Cascaded run values for text in this paragraph style. Present with `includeResolved`. */
|
|
19
|
+
resolvedRun?: Partial<SDRunProps>;
|
|
20
|
+
/** Where each resolved run value came from. Present with `includeProvenance`. */
|
|
21
|
+
runProvenance?: SDResolvedProvenance<SDRunProps>;
|
|
8
22
|
}
|
|
9
|
-
export type SDParagraphStyleDef = SDStyleBase<SDParagraphProps>;
|
|
10
23
|
export type SDCharacterStyleDef = SDStyleBase<SDRunProps>;
|
|
11
|
-
|
|
24
|
+
/** Table regions that a table style can format conditionally (`w:tblStylePr/@w:type`). */
|
|
25
|
+
export type SDTableStyleRegion = 'wholeTable' | 'firstRow' | 'lastRow' | 'firstCol' | 'lastCol' | 'band1Vert' | 'band2Vert' | 'band1Horz' | 'band2Horz' | 'neCell' | 'nwCell' | 'seCell' | 'swCell';
|
|
26
|
+
/** Formatting a table style applies to one region, as authored. */
|
|
27
|
+
export interface SDTableStyleFormatting {
|
|
28
|
+
table?: SDTableStyleProps;
|
|
29
|
+
row?: SDRowProps;
|
|
30
|
+
cell?: SDTableStyleCellProps;
|
|
31
|
+
paragraph?: SDParagraphProps;
|
|
32
|
+
run?: SDRunProps;
|
|
33
|
+
}
|
|
34
|
+
export interface SDTableStyleDef extends SDStyleBase<SDTableStyleProps> {
|
|
35
|
+
/** Row defaults (`w:trPr`). */
|
|
36
|
+
rowProps?: SDRowProps;
|
|
37
|
+
/** Cell defaults (`w:tcPr`). */
|
|
38
|
+
cellProps?: SDTableStyleCellProps;
|
|
39
|
+
/** Paragraph formatting for text in the table (`w:pPr`). */
|
|
40
|
+
paragraphProps?: SDParagraphProps;
|
|
41
|
+
/** Run formatting for text in the table (`w:rPr`). */
|
|
42
|
+
runProps?: SDRunProps;
|
|
43
|
+
/**
|
|
44
|
+
* Conditional formatting per table region (`w:tblStylePr`), as authored.
|
|
45
|
+
* `resolved` / `provenance` cover table-level props only; regions are not cascaded.
|
|
46
|
+
*/
|
|
47
|
+
conditional?: Partial<Record<SDTableStyleRegion, SDTableStyleFormatting>>;
|
|
48
|
+
/** Rows per horizontal band (`w:tblStyleRowBandSize`). */
|
|
49
|
+
rowBandSize?: number;
|
|
50
|
+
/** Columns per vertical band (`w:tblStyleColBandSize`). */
|
|
51
|
+
columnBandSize?: number;
|
|
52
|
+
}
|
|
12
53
|
export interface SDStyles {
|
|
13
54
|
paragraph?: Record<string, SDParagraphStyleDef>;
|
|
14
55
|
character?: Record<string, SDCharacterStyleDef>;
|
|
15
56
|
table?: Record<string, SDTableStyleDef>;
|
|
16
57
|
}
|
|
58
|
+
/** Theme color roles that `w:clrSchemeMapping` maps onto theme color slots. */
|
|
59
|
+
export type SDThemeColorRole = 'bg1' | 't1' | 'bg2' | 't2' | 'accent1' | 'accent2' | 'accent3' | 'accent4' | 'accent5' | 'accent6' | 'hyperlink' | 'followedHyperlink';
|
|
17
60
|
export interface SDTheme {
|
|
61
|
+
/**
|
|
62
|
+
* `document` when read from the package theme part; `fallback` when the part is
|
|
63
|
+
* missing or unreadable and the default Office theme stands in (see diagnostics).
|
|
64
|
+
*/
|
|
65
|
+
source?: 'document' | 'fallback';
|
|
66
|
+
/** Six-digit hex colors without `#`, matching `SDColorRef` rgb values. */
|
|
18
67
|
colorScheme: Record<SDThemeColorName, string>;
|
|
19
68
|
fontScheme?: {
|
|
20
69
|
major?: {
|
|
@@ -28,9 +77,15 @@ export interface SDTheme {
|
|
|
28
77
|
complexScript?: string;
|
|
29
78
|
};
|
|
30
79
|
};
|
|
80
|
+
/** From `w:settings/w:clrSchemeMapping`; absent when the document declares none. */
|
|
81
|
+
colorSchemeMapping?: Partial<Record<SDThemeColorRole, SDThemeColorName>>;
|
|
31
82
|
}
|
|
32
83
|
export interface SDDocDefaults {
|
|
33
84
|
run?: SDRunProps;
|
|
34
85
|
paragraph?: SDParagraphProps;
|
|
35
86
|
table?: SDTableProps;
|
|
87
|
+
/** `run` with theme references resolved. Present with `includeResolved`. */
|
|
88
|
+
resolvedRun?: Partial<SDRunProps>;
|
|
89
|
+
/** `paragraph` with theme references resolved. Present with `includeResolved`. */
|
|
90
|
+
resolvedParagraph?: Partial<SDParagraphProps>;
|
|
36
91
|
}
|
package/dist/style.css
CHANGED
|
@@ -2348,34 +2348,34 @@ img[data-v-c95b2073] {
|
|
|
2348
2348
|
pointer-events: auto;
|
|
2349
2349
|
}
|
|
2350
2350
|
|
|
2351
|
-
.superdoc[data-v-
|
|
2351
|
+
.superdoc[data-v-38ecd481] {
|
|
2352
2352
|
display: flex;
|
|
2353
2353
|
position: relative;
|
|
2354
2354
|
}
|
|
2355
|
-
.right-sidebar[data-v-
|
|
2355
|
+
.right-sidebar[data-v-38ecd481] {
|
|
2356
2356
|
min-width: 320px;
|
|
2357
2357
|
height: 100%;
|
|
2358
2358
|
}
|
|
2359
|
-
.floating-comments[data-v-
|
|
2359
|
+
.floating-comments[data-v-38ecd481] {
|
|
2360
2360
|
min-width: 300px;
|
|
2361
2361
|
width: 300px;
|
|
2362
2362
|
height: 100%;
|
|
2363
2363
|
overflow: visible;
|
|
2364
2364
|
}
|
|
2365
|
-
.superdoc__layers[data-v-
|
|
2365
|
+
.superdoc__layers[data-v-38ecd481] {
|
|
2366
2366
|
height: 100%;
|
|
2367
2367
|
position: relative;
|
|
2368
2368
|
box-sizing: border-box;
|
|
2369
2369
|
}
|
|
2370
|
-
.superdoc__document[data-v-
|
|
2370
|
+
.superdoc__document[data-v-38ecd481] {
|
|
2371
2371
|
width: 100%;
|
|
2372
2372
|
position: relative;
|
|
2373
2373
|
}
|
|
2374
|
-
.superdoc__sub-document[data-v-
|
|
2374
|
+
.superdoc__sub-document[data-v-38ecd481] {
|
|
2375
2375
|
width: 100%;
|
|
2376
2376
|
position: relative;
|
|
2377
2377
|
}
|
|
2378
|
-
.superdoc__selection-layer[data-v-
|
|
2378
|
+
.superdoc__selection-layer[data-v-38ecd481] {
|
|
2379
2379
|
position: absolute;
|
|
2380
2380
|
min-width: 100%;
|
|
2381
2381
|
min-height: 100%;
|
|
@@ -2386,13 +2386,13 @@ img[data-v-c95b2073] {
|
|
|
2386
2386
|
/* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
|
|
2387
2387
|
the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
|
|
2388
2388
|
clickable, and below the selection layer (z-index 10). */
|
|
2389
|
-
.superdoc__whiteboard-layer[data-v-
|
|
2389
|
+
.superdoc__whiteboard-layer[data-v-38ecd481] {
|
|
2390
2390
|
z-index: 4;
|
|
2391
2391
|
}
|
|
2392
|
-
.superdoc__temp-selection[data-v-
|
|
2392
|
+
.superdoc__temp-selection[data-v-38ecd481] {
|
|
2393
2393
|
position: absolute;
|
|
2394
2394
|
}
|
|
2395
|
-
.superdoc__right-sidebar[data-v-
|
|
2395
|
+
.superdoc__right-sidebar[data-v-38ecd481] {
|
|
2396
2396
|
width: 320px;
|
|
2397
2397
|
min-width: 320px;
|
|
2398
2398
|
padding: 0 10px;
|
|
@@ -2400,7 +2400,7 @@ img[data-v-c95b2073] {
|
|
|
2400
2400
|
position: relative;
|
|
2401
2401
|
z-index: 2;
|
|
2402
2402
|
}
|
|
2403
|
-
.superdoc__compact-comment-popover[data-v-
|
|
2403
|
+
.superdoc__compact-comment-popover[data-v-38ecd481] {
|
|
2404
2404
|
position: absolute;
|
|
2405
2405
|
top: 12px;
|
|
2406
2406
|
right: 12px;
|
|
@@ -2409,14 +2409,14 @@ img[data-v-c95b2073] {
|
|
|
2409
2409
|
}
|
|
2410
2410
|
|
|
2411
2411
|
/* Tools styles */
|
|
2412
|
-
.tools[data-v-
|
|
2412
|
+
.tools[data-v-38ecd481] {
|
|
2413
2413
|
position: absolute;
|
|
2414
2414
|
z-index: 3;
|
|
2415
2415
|
display: flex;
|
|
2416
2416
|
flex-direction: column;
|
|
2417
2417
|
gap: var(--sd-ui-tools-gap, 6px);
|
|
2418
2418
|
}
|
|
2419
|
-
.tools-item[data-v-
|
|
2419
|
+
.tools-item[data-v-38ecd481] {
|
|
2420
2420
|
display: flex;
|
|
2421
2421
|
align-items: center;
|
|
2422
2422
|
justify-content: center;
|
|
@@ -2427,10 +2427,10 @@ img[data-v-c95b2073] {
|
|
|
2427
2427
|
cursor: pointer;
|
|
2428
2428
|
position: relative;
|
|
2429
2429
|
}
|
|
2430
|
-
.tools-item i[data-v-
|
|
2430
|
+
.tools-item i[data-v-38ecd481] {
|
|
2431
2431
|
cursor: pointer;
|
|
2432
2432
|
}
|
|
2433
|
-
.superdoc__tools-icon[data-v-
|
|
2433
|
+
.superdoc__tools-icon[data-v-38ecd481] {
|
|
2434
2434
|
width: var(--sd-ui-tools-icon-size, 20px);
|
|
2435
2435
|
height: var(--sd-ui-tools-icon-size, 20px);
|
|
2436
2436
|
flex-shrink: 0;
|
|
@@ -2445,22 +2445,22 @@ img[data-v-c95b2073] {
|
|
|
2445
2445
|
|
|
2446
2446
|
/* 834px is iPad screen size in portrait orientation */
|
|
2447
2447
|
@media (max-width: 834px) {
|
|
2448
|
-
.superdoc .superdoc__layers[data-v-
|
|
2448
|
+
.superdoc .superdoc__layers[data-v-38ecd481] {
|
|
2449
2449
|
margin: 0;
|
|
2450
2450
|
border: 0 !important;
|
|
2451
2451
|
box-shadow: none;
|
|
2452
2452
|
}
|
|
2453
|
-
.superdoc__sub-document[data-v-
|
|
2453
|
+
.superdoc__sub-document[data-v-38ecd481] {
|
|
2454
2454
|
max-width: 100%;
|
|
2455
2455
|
}
|
|
2456
|
-
.superdoc__right-sidebar[data-v-
|
|
2456
|
+
.superdoc__right-sidebar[data-v-38ecd481] {
|
|
2457
2457
|
padding: 10px;
|
|
2458
2458
|
position: relative;
|
|
2459
2459
|
}
|
|
2460
2460
|
}
|
|
2461
2461
|
|
|
2462
2462
|
/* AI Writer styles */
|
|
2463
|
-
.ai-writer-container[data-v-
|
|
2463
|
+
.ai-writer-container[data-v-38ecd481] {
|
|
2464
2464
|
position: fixed;
|
|
2465
2465
|
z-index: 1000;
|
|
2466
2466
|
background: white;
|
|
@@ -2476,10 +2476,10 @@ img[data-v-c95b2073] {
|
|
|
2476
2476
|
transform: translateY(-50%);
|
|
2477
2477
|
z-index: 50;
|
|
2478
2478
|
} */
|
|
2479
|
-
.ai-tool > svg[data-v-
|
|
2479
|
+
.ai-tool > svg[data-v-38ecd481] {
|
|
2480
2480
|
fill: transparent;
|
|
2481
2481
|
}
|
|
2482
|
-
.ai-tool[data-v-
|
|
2482
|
+
.ai-tool[data-v-38ecd481]::before {
|
|
2483
2483
|
content: '';
|
|
2484
2484
|
position: absolute;
|
|
2485
2485
|
width: 20px;
|
|
@@ -2500,7 +2500,7 @@ img[data-v-c95b2073] {
|
|
|
2500
2500
|
filter: brightness(1.2);
|
|
2501
2501
|
transition: filter 0.2s ease;
|
|
2502
2502
|
}
|
|
2503
|
-
.ai-tool[data-v-
|
|
2503
|
+
.ai-tool[data-v-38ecd481]:hover::before {
|
|
2504
2504
|
filter: brightness(1.3);
|
|
2505
2505
|
}
|
|
2506
2506
|
|
package/dist/style.layered.css
CHANGED
|
@@ -2348,34 +2348,34 @@ img[data-v-c95b2073] {
|
|
|
2348
2348
|
pointer-events: auto;
|
|
2349
2349
|
}
|
|
2350
2350
|
|
|
2351
|
-
.superdoc[data-v-
|
|
2351
|
+
.superdoc[data-v-38ecd481] {
|
|
2352
2352
|
display: flex;
|
|
2353
2353
|
position: relative;
|
|
2354
2354
|
}
|
|
2355
|
-
.right-sidebar[data-v-
|
|
2355
|
+
.right-sidebar[data-v-38ecd481] {
|
|
2356
2356
|
min-width: 320px;
|
|
2357
2357
|
height: 100%;
|
|
2358
2358
|
}
|
|
2359
|
-
.floating-comments[data-v-
|
|
2359
|
+
.floating-comments[data-v-38ecd481] {
|
|
2360
2360
|
min-width: 300px;
|
|
2361
2361
|
width: 300px;
|
|
2362
2362
|
height: 100%;
|
|
2363
2363
|
overflow: visible;
|
|
2364
2364
|
}
|
|
2365
|
-
.superdoc__layers[data-v-
|
|
2365
|
+
.superdoc__layers[data-v-38ecd481] {
|
|
2366
2366
|
height: 100%;
|
|
2367
2367
|
position: relative;
|
|
2368
2368
|
box-sizing: border-box;
|
|
2369
2369
|
}
|
|
2370
|
-
.superdoc__document[data-v-
|
|
2370
|
+
.superdoc__document[data-v-38ecd481] {
|
|
2371
2371
|
width: 100%;
|
|
2372
2372
|
position: relative;
|
|
2373
2373
|
}
|
|
2374
|
-
.superdoc__sub-document[data-v-
|
|
2374
|
+
.superdoc__sub-document[data-v-38ecd481] {
|
|
2375
2375
|
width: 100%;
|
|
2376
2376
|
position: relative;
|
|
2377
2377
|
}
|
|
2378
|
-
.superdoc__selection-layer[data-v-
|
|
2378
|
+
.superdoc__selection-layer[data-v-38ecd481] {
|
|
2379
2379
|
position: absolute;
|
|
2380
2380
|
min-width: 100%;
|
|
2381
2381
|
min-height: 100%;
|
|
@@ -2386,13 +2386,13 @@ img[data-v-c95b2073] {
|
|
|
2386
2386
|
/* SD-3497: PDF whiteboard overlay sits above the rendered PDF canvas but below
|
|
2387
2387
|
the PDF comment anchors (z-index 6 in PdfCommentsLayer) so anchors stay
|
|
2388
2388
|
clickable, and below the selection layer (z-index 10). */
|
|
2389
|
-
.superdoc__whiteboard-layer[data-v-
|
|
2389
|
+
.superdoc__whiteboard-layer[data-v-38ecd481] {
|
|
2390
2390
|
z-index: 4;
|
|
2391
2391
|
}
|
|
2392
|
-
.superdoc__temp-selection[data-v-
|
|
2392
|
+
.superdoc__temp-selection[data-v-38ecd481] {
|
|
2393
2393
|
position: absolute;
|
|
2394
2394
|
}
|
|
2395
|
-
.superdoc__right-sidebar[data-v-
|
|
2395
|
+
.superdoc__right-sidebar[data-v-38ecd481] {
|
|
2396
2396
|
width: 320px;
|
|
2397
2397
|
min-width: 320px;
|
|
2398
2398
|
padding: 0 10px;
|
|
@@ -2400,7 +2400,7 @@ img[data-v-c95b2073] {
|
|
|
2400
2400
|
position: relative;
|
|
2401
2401
|
z-index: 2;
|
|
2402
2402
|
}
|
|
2403
|
-
.superdoc__compact-comment-popover[data-v-
|
|
2403
|
+
.superdoc__compact-comment-popover[data-v-38ecd481] {
|
|
2404
2404
|
position: absolute;
|
|
2405
2405
|
top: 12px;
|
|
2406
2406
|
right: 12px;
|
|
@@ -2409,14 +2409,14 @@ img[data-v-c95b2073] {
|
|
|
2409
2409
|
}
|
|
2410
2410
|
|
|
2411
2411
|
/* Tools styles */
|
|
2412
|
-
.tools[data-v-
|
|
2412
|
+
.tools[data-v-38ecd481] {
|
|
2413
2413
|
position: absolute;
|
|
2414
2414
|
z-index: 3;
|
|
2415
2415
|
display: flex;
|
|
2416
2416
|
flex-direction: column;
|
|
2417
2417
|
gap: var(--sd-ui-tools-gap, 6px);
|
|
2418
2418
|
}
|
|
2419
|
-
.tools-item[data-v-
|
|
2419
|
+
.tools-item[data-v-38ecd481] {
|
|
2420
2420
|
display: flex;
|
|
2421
2421
|
align-items: center;
|
|
2422
2422
|
justify-content: center;
|
|
@@ -2427,10 +2427,10 @@ img[data-v-c95b2073] {
|
|
|
2427
2427
|
cursor: pointer;
|
|
2428
2428
|
position: relative;
|
|
2429
2429
|
}
|
|
2430
|
-
.tools-item i[data-v-
|
|
2430
|
+
.tools-item i[data-v-38ecd481] {
|
|
2431
2431
|
cursor: pointer;
|
|
2432
2432
|
}
|
|
2433
|
-
.superdoc__tools-icon[data-v-
|
|
2433
|
+
.superdoc__tools-icon[data-v-38ecd481] {
|
|
2434
2434
|
width: var(--sd-ui-tools-icon-size, 20px);
|
|
2435
2435
|
height: var(--sd-ui-tools-icon-size, 20px);
|
|
2436
2436
|
flex-shrink: 0;
|
|
@@ -2445,22 +2445,22 @@ img[data-v-c95b2073] {
|
|
|
2445
2445
|
|
|
2446
2446
|
/* 834px is iPad screen size in portrait orientation */
|
|
2447
2447
|
@media (max-width: 834px) {
|
|
2448
|
-
.superdoc .superdoc__layers[data-v-
|
|
2448
|
+
.superdoc .superdoc__layers[data-v-38ecd481] {
|
|
2449
2449
|
margin: 0;
|
|
2450
2450
|
border: 0 !important;
|
|
2451
2451
|
box-shadow: none;
|
|
2452
2452
|
}
|
|
2453
|
-
.superdoc__sub-document[data-v-
|
|
2453
|
+
.superdoc__sub-document[data-v-38ecd481] {
|
|
2454
2454
|
max-width: 100%;
|
|
2455
2455
|
}
|
|
2456
|
-
.superdoc__right-sidebar[data-v-
|
|
2456
|
+
.superdoc__right-sidebar[data-v-38ecd481] {
|
|
2457
2457
|
padding: 10px;
|
|
2458
2458
|
position: relative;
|
|
2459
2459
|
}
|
|
2460
2460
|
}
|
|
2461
2461
|
|
|
2462
2462
|
/* AI Writer styles */
|
|
2463
|
-
.ai-writer-container[data-v-
|
|
2463
|
+
.ai-writer-container[data-v-38ecd481] {
|
|
2464
2464
|
position: fixed;
|
|
2465
2465
|
z-index: 1000;
|
|
2466
2466
|
background: white;
|
|
@@ -2476,10 +2476,10 @@ img[data-v-c95b2073] {
|
|
|
2476
2476
|
transform: translateY(-50%);
|
|
2477
2477
|
z-index: 50;
|
|
2478
2478
|
} */
|
|
2479
|
-
.ai-tool > svg[data-v-
|
|
2479
|
+
.ai-tool > svg[data-v-38ecd481] {
|
|
2480
2480
|
fill: transparent;
|
|
2481
2481
|
}
|
|
2482
|
-
.ai-tool[data-v-
|
|
2482
|
+
.ai-tool[data-v-38ecd481]::before {
|
|
2483
2483
|
content: '';
|
|
2484
2484
|
position: absolute;
|
|
2485
2485
|
width: 20px;
|
|
@@ -2500,7 +2500,7 @@ img[data-v-c95b2073] {
|
|
|
2500
2500
|
filter: brightness(1.2);
|
|
2501
2501
|
transition: filter 0.2s ease;
|
|
2502
2502
|
}
|
|
2503
|
-
.ai-tool[data-v-
|
|
2503
|
+
.ai-tool[data-v-38ecd481]:hover::before {
|
|
2504
2504
|
filter: brightness(1.3);
|
|
2505
2505
|
}
|
|
2506
2506
|
|