@json-to-office/core-docx 2.3.0 → 2.4.0
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/index.js +437 -6
- package/dist/index.js.map +1 -1
- package/dist/plugin/example/index.js +249 -4
- package/dist/plugin/example/index.js.map +1 -1
- package/dist/quality/facts.d.ts +56 -2
- package/dist/quality/facts.d.ts.map +1 -1
- package/dist/quality/rules.d.ts +16 -0
- package/dist/quality/rules.d.ts.map +1 -1
- package/dist/themes/defaults.d.ts +13 -1
- package/dist/themes/defaults.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/quality/facts.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ChartInfoDesign, type PlaceholderKind, type PreparedDocument, type QualityFact, type TableColumnInfoDesign, type TableInfoDesign } from '@json-to-office/quality';
|
|
2
2
|
import type { FontRuntimeOpts, GenerationWarning } from '@json-to-office/shared';
|
|
3
3
|
import type { ReportComponentDefinition } from '../types';
|
|
4
4
|
import type { ThemeConfig } from '../styles';
|
|
@@ -22,6 +22,33 @@ export interface DocxTableWidthFact extends QualityFact {
|
|
|
22
22
|
width: number | string;
|
|
23
23
|
}>;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* A chart in a document — native or Highcharts — read into the vocabulary the
|
|
27
|
+
* information-design rules speak.
|
|
28
|
+
*/
|
|
29
|
+
export interface DocxChartFact extends QualityFact, ChartInfoDesign {
|
|
30
|
+
kind: 'docx/chart';
|
|
31
|
+
/** `chart` or `highcharts`; the two answer the same questions differently. */
|
|
32
|
+
componentName: string;
|
|
33
|
+
/** Theme tokens a palette fix can name, in series order. */
|
|
34
|
+
paletteTokens: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
export interface DocxTableColumnFact extends TableColumnInfoDesign {
|
|
37
|
+
/** The authored column already carries a `cellDefaults` object. */
|
|
38
|
+
hasCellDefaults: boolean;
|
|
39
|
+
/** The authored column declares a header cell an alignment can be set on. */
|
|
40
|
+
hasHeader: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Body cells that state an alignment of their own. A column default never
|
|
43
|
+
* reaches those, so a repair has to name them one by one.
|
|
44
|
+
*/
|
|
45
|
+
cellsWithOwnAlignment: readonly number[];
|
|
46
|
+
}
|
|
47
|
+
/** A table, resolved through the same cascade the renderer draws it with. */
|
|
48
|
+
export interface DocxTableFact extends QualityFact, TableInfoDesign {
|
|
49
|
+
kind: 'docx/table';
|
|
50
|
+
columns: readonly DocxTableColumnFact[];
|
|
51
|
+
}
|
|
25
52
|
export interface DocxHeadingFact extends QualityFact {
|
|
26
53
|
kind: 'docx/heading';
|
|
27
54
|
level: number;
|
|
@@ -115,7 +142,34 @@ export interface DocxLineBoxFact extends QualityFact {
|
|
|
115
142
|
*/
|
|
116
143
|
patchable: boolean;
|
|
117
144
|
}
|
|
118
|
-
|
|
145
|
+
/** The resolved theme, as the brand rules see it. */
|
|
146
|
+
export interface DocxThemeFact extends QualityFact {
|
|
147
|
+
kind: 'docx/theme';
|
|
148
|
+
themeName: string;
|
|
149
|
+
/** Token name to `#RRGGBB`, for every palette entry that resolves. */
|
|
150
|
+
paletteHexes: Readonly<Record<string, string>>;
|
|
151
|
+
fontFamilies: readonly string[];
|
|
152
|
+
}
|
|
153
|
+
/** A colour written as a literal rather than as a theme token. */
|
|
154
|
+
export interface DocxColorFact extends QualityFact {
|
|
155
|
+
kind: 'docx/color';
|
|
156
|
+
raw: string;
|
|
157
|
+
hex: string;
|
|
158
|
+
}
|
|
159
|
+
/** A font family the document asks for by name. */
|
|
160
|
+
export interface DocxFontFact extends QualityFact {
|
|
161
|
+
kind: 'docx/font-family';
|
|
162
|
+
family: string;
|
|
163
|
+
}
|
|
164
|
+
/** One authored string that reads as a placeholder rather than as content. */
|
|
165
|
+
export interface DocxPlaceholderFact extends QualityFact {
|
|
166
|
+
kind: 'docx/placeholder';
|
|
167
|
+
text: string;
|
|
168
|
+
placeholderKind: PlaceholderKind;
|
|
169
|
+
pattern: string;
|
|
170
|
+
excerpt: string;
|
|
171
|
+
}
|
|
172
|
+
export type DocxQualityFact = DocxTableWidthFact | DocxHeadingFact | DocxFrameTextFact | DocxSvgTextFact | DocxLineBoxFact | DocxPlaceholderFact | DocxThemeFact | DocxColorFact | DocxFontFact | DocxChartFact | DocxTableFact;
|
|
119
173
|
export interface DocxQualityModel {
|
|
120
174
|
authored: ReportComponentDefinition;
|
|
121
175
|
context: GenerationThemeContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"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"}
|
package/dist/quality/rules.d.ts
CHANGED
|
@@ -6,6 +6,22 @@ export declare const docxTextFitRule: QualityRule<DocxQualityModel, DocxQualityF
|
|
|
6
6
|
export declare const docxFrameCollisionRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
7
7
|
export declare const docxSvgTextBoundsRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
8
8
|
export declare const docxLineBoxRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
9
|
+
/**
|
|
10
|
+
* Unfilled slots and leftover filler, in one rule over two codes.
|
|
11
|
+
*
|
|
12
|
+
* One rule because it is one question — "is this text real yet?" — and two
|
|
13
|
+
* codes because the answers differ in consequence: a scaffold marker blocks
|
|
14
|
+
* generation, filler only advises.
|
|
15
|
+
*/
|
|
16
|
+
export declare const docxPlaceholderRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
17
|
+
/** Every family the document can paint: the theme's roles plus authored ones. */
|
|
18
|
+
export declare const docxFontCountRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
19
|
+
/** A literal colour the resolved theme does not define. */
|
|
20
|
+
export declare const docxPaletteRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
21
|
+
/** Information design for charts: the comparison, the palette and the caption. */
|
|
22
|
+
export declare const docxChartRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
23
|
+
/** Information design for tables: alignment, rounding, rules and length. */
|
|
24
|
+
export declare const docxTableDesignRule: QualityRule<DocxQualityModel, DocxQualityFact>;
|
|
9
25
|
export declare const DOCX_QUALITY_RULES: QualityRulePack<DocxQualityModel, DocxQualityFact>;
|
|
10
26
|
export declare const DOCX_QUALITY_PROFILES: {
|
|
11
27
|
readonly 'executive-report': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/quality/rules.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/quality/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,aAAa,EAGb,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAQV,eAAe,EACf,gBAAgB,EAMjB,MAAM,SAAS,CAAC;AAejB,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAC1C,gBAAgB,EAChB,eAAe,CA6DhB,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAChD,gBAAgB,EAChB,eAAe,CAuChB,CAAC;AAsBF,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,gBAAgB,EAAE,eAAe,CAwF1E,CAAC;AA+BF,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAC9C,gBAAgB,EAChB,eAAe,CA6HhB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAC7C,gBAAgB,EAChB,eAAe,CAqChB,CAAC;AAsBF,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,gBAAgB,EAAE,eAAe,CA8D1E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAC3C,gBAAgB,EAChB,eAAe,CAqBhB,CAAC;AAIF,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,gBAAgB,EAAE,eAAe,CAoC1E,CAAC;AAEJ,2DAA2D;AAC3D,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,gBAAgB,EAAE,eAAe,CA0B1E,CAAC;AAUF,kFAAkF;AAClF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,gBAAgB,EAAE,eAAe,CAiCxE,CAAC;AAqBF,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAC3C,gBAAgB,EAChB,eAAe,CA0BhB,CAAC;AA2CF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,gBAAgB,EAChB,eAAe,CAgBhB,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;CAmBiB,CAAC;AAEpD,eAAO,MAAM,4BAA4B,EAAE,cACA,CAAC;AAK5C;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,GAAG,SAAS,GACpC,cAAc,GAAG,SAAS,CAK5B;AAED,eAAO,MAAM,iBAAiB,kDAA8C,CAAC"}
|
|
@@ -135,7 +135,19 @@ export declare const DEFAULT_PAGE: {
|
|
|
135
135
|
};
|
|
136
136
|
};
|
|
137
137
|
/**
|
|
138
|
-
* Ensures theme has all required properties with defaults
|
|
138
|
+
* Ensures theme has all required properties with defaults.
|
|
139
|
+
*
|
|
140
|
+
* Backfill, never rebuild. This used to return a hand-written literal of the
|
|
141
|
+
* ten root keys it knew about, which deleted everything else the schema
|
|
142
|
+
* allows — `fontRegistry` and `noProofWords` were being dropped from every
|
|
143
|
+
* bundled theme and every `--theme-path` render. That failure is invisible by
|
|
144
|
+
* construction: the file validates, generation succeeds, and the styling is
|
|
145
|
+
* simply absent, with nothing to search for.
|
|
146
|
+
*
|
|
147
|
+
* So every level spreads what it was given first and fills in defaults after,
|
|
148
|
+
* including `fonts`, whose four roles are backfilled individually but no
|
|
149
|
+
* longer bound the set. `theme-round-trip.test.ts` walks `ThemeConfigSchema`
|
|
150
|
+
* and fails the day a new property is added here and forgotten.
|
|
139
151
|
*/
|
|
140
152
|
export declare function ensureThemeDefaults(theme: Partial<ThemeConfigJson>): ThemeConfigJson;
|
|
141
153
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/themes/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAe1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAKzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0E1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CAWxB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/themes/defaults.ts"],"names":[],"mappings":"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"}
|