@json-to-office/core-docx 3.1.0 → 3.3.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.
@@ -1,5 +1,6 @@
1
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
+ import { type BlockSlotRole } from '@json-to-office/shared';
3
4
  import type { ReportComponentDefinition } from '../types';
4
5
  import type { ThemeConfig } from '../styles';
5
6
  import { type GenerationThemeContext } from '../core/generationContext';
@@ -33,6 +34,11 @@ export interface DocxChartFact extends QualityFact, ChartInfoDesign {
33
34
  componentName: string;
34
35
  /** Theme tokens a palette fix can name, in series order. */
35
36
  paletteTokens: readonly string[];
37
+ /**
38
+ * Drawn by a block definition rather than written by the author: `path`
39
+ * names the invocation, which has no chart props a patch could set.
40
+ */
41
+ generated: boolean;
36
42
  }
37
43
  export interface DocxTableColumnFact extends TableColumnInfoDesign {
38
44
  /** The authored column already carries a `cellDefaults` object. */
@@ -187,7 +193,33 @@ export interface DocxPlaceholderFact extends QualityFact {
187
193
  pattern: string;
188
194
  excerpt: string;
189
195
  }
190
- export type DocxQualityFact = DocxTableWidthFact | DocxHeadingFact | DocxFrameTextFact | DocxSvgTextFact | DocxLineBoxFact | DocxPlaceholderFact | DocxBlockSlotFact | DocxThemeFact | DocxColorFact | DocxFontFact | DocxChartFact | DocxTableFact;
196
+ /**
197
+ * A role-bearing slot of a block invocation, present or not. A profile reads
198
+ * these to require a takeaway under every chart or a source under every
199
+ * table; the theme that styles them never adds a requirement.
200
+ */
201
+ export interface DocxChromeSlotFact extends QualityFact {
202
+ kind: 'docx/chrome-slot';
203
+ block: string;
204
+ slot: string;
205
+ role: BlockSlotRole;
206
+ present: boolean;
207
+ /** The invocation the slot belongs to. */
208
+ invocation: string;
209
+ }
210
+ /**
211
+ * What a top-level section carries once blocks have expanded: a header, a
212
+ * footer, and a page-number field in either. A profile decides whether a
213
+ * body section owes a running head; the first section is where a cover lives.
214
+ */
215
+ export interface DocxSectionChromeFact extends QualityFact {
216
+ kind: 'docx/section-chrome';
217
+ index: number;
218
+ header: boolean;
219
+ footer: boolean;
220
+ pageNumber: boolean;
221
+ }
222
+ export type DocxQualityFact = DocxChromeSlotFact | DocxSectionChromeFact | DocxTableWidthFact | DocxHeadingFact | DocxFrameTextFact | DocxSvgTextFact | DocxLineBoxFact | DocxPlaceholderFact | DocxBlockSlotFact | DocxThemeFact | DocxColorFact | DocxFontFact | DocxChartFact | DocxTableFact;
191
223
  export interface DocxQualityModel {
192
224
  authored: ReportComponentDefinition;
193
225
  /** Theme context over the expanded tree: every block lowered in place. */
@@ -1 +1 @@
1
- {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/quality/facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAErB,KAAK,WAAW,EAEhB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAuB,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAOnB,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,kBAAkB,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW,EAAE,eAAe;IACjE,IAAI,EAAE,YAAY,CAAC;IACnB,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,mEAAmE;IACnE,eAAe,EAAE,OAAO,CAAC;IACzB,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAc,SAAQ,WAAW,EAAE,eAAe;IACjE,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,IAAI,EAAE,eAAe,CAAC;IACtB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qDAAqD;AACrD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GACvB,kBAAkB,GAClB,qBAAqB,GACrB,kBAAkB,GAClB,eAAe,GACf,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,mBAAmB,GACnB,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,yBAAyB,CAAC;IACpC,0EAA0E;IAC1E,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,SAAS,EAAE,cAAc,CAAC;IAC1B,gDAAgD;IAChD,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAwoBD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,yBAAyB,EACnC,OAAO,GAAE,yBAA8B,GACtC,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAuWrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/quality/preflight.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAUjE,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;CAChE;AAiBD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,0BAA+B,GACvC,eAAe,CA2CjB"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/quality/preflight.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAWjE,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;CAChE;AAiBD,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,0BAA+B,GACvC,eAAe,CA4CjB"}
@@ -28,8 +28,42 @@ export declare const docxPaletteRule: QualityRule<DocxQualityModel, DocxQualityF
28
28
  export declare const docxChartRule: QualityRule<DocxQualityModel, DocxQualityFact>;
29
29
  /** Information design for tables: alignment, rounding, rules and length. */
30
30
  export declare const docxTableDesignRule: QualityRule<DocxQualityModel, DocxQualityFact>;
31
+ /**
32
+ * Chrome a profile requires, judged where the block declared the slot. Off by
33
+ * default: a takeaway under a chart or a source under a table is an archetype
34
+ * convention, and the theme that styles the slot never asks for it.
35
+ */
36
+ export declare const docxRequiredChromeRule: QualityRule<DocxQualityModel, DocxQualityFact>;
37
+ /**
38
+ * A running head where the profile expects one: every top-level section from
39
+ * `fromSection` on must carry the parts in `required` — a header, a footer,
40
+ * a page-number field in either. The first section is exempt by default, so
41
+ * a cover stays clean. Off by default; the theme only paints a running head.
42
+ */
43
+ export declare const docxRunningHeadRule: QualityRule<DocxQualityModel, DocxQualityFact>;
31
44
  export declare const DOCX_QUALITY_RULES: QualityRulePack<DocxQualityModel, DocxQualityFact>;
32
45
  export declare const DOCX_QUALITY_PROFILES: {
46
+ readonly 'client-report': {
47
+ readonly id: "client-report";
48
+ readonly formats: readonly ["docx"];
49
+ readonly description: "Client or public-administration report: a running head with page numbers on every section after the cover, a takeaway and a source wherever a block declares them, no heading skipped.";
50
+ readonly rules: {
51
+ readonly 'docx/required-chrome': {
52
+ readonly parameters: {
53
+ readonly required: readonly ["takeaway", "source"];
54
+ };
55
+ };
56
+ readonly 'docx/running-head': {
57
+ readonly parameters: {
58
+ readonly required: readonly ["header", "footer", "pageNumber"];
59
+ readonly fromSection: 1;
60
+ };
61
+ };
62
+ readonly 'docx/heading-hierarchy': {
63
+ readonly severity: "warning";
64
+ };
65
+ };
66
+ };
33
67
  readonly 'executive-report': {
34
68
  readonly id: "executive-report";
35
69
  readonly formats: readonly ["docx"];
@@ -52,6 +86,12 @@ export declare const DOCX_QUALITY_PROFILES: {
52
86
  };
53
87
  };
54
88
  export declare const DOCX_DEFAULT_QUALITY_PROFILE: QualityProfile;
89
+ /**
90
+ * The shipped profile a document names in `props.qualityProfile`, so that
91
+ * validation without arguments judges a blueprint scaffold by its archetype.
92
+ * An unknown name is nobody's profile: the format default applies.
93
+ */
94
+ export declare function declaredDocxQualityProfile(document: unknown): QualityProfile | undefined;
55
95
  /**
56
96
  * Callers name a shipped profile by id — `{ id: 'executive-report', formats: ['docx'] }`.
57
97
  * Without this lookup that request reaches the engine carrying nothing but its id,
@@ -1 +1 @@
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,EASV,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;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAC1C,gBAAgB,EAChB,eAAe,CA6BhB,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;AA8CF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,gBAAgB,EAChB,eAAe,CAiBhB,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"}
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,EAUV,eAAe,EACf,gBAAgB,EAOjB,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;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAC1C,gBAAgB,EAChB,eAAe,CA6BhB,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;AAwDF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAC9C,gBAAgB,EAChB,eAAe,CA2BhB,CAAC;AAIF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAC3C,gBAAgB,EAChB,eAAe,CA2ChB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,gBAAgB,EAChB,eAAe,CAmBhB,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCiB,CAAC;AAEpD,eAAO,MAAM,4BAA4B,EAAE,cACA,CAAC;AAK5C;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,GAChB,cAAc,GAAG,SAAS,CAO5B;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,cAAc,GAAG,SAAS,GACpC,cAAc,GAAG,SAAS,CAK5B;AAED,eAAO,MAAM,iBAAiB,kDAA8C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/renderers/docxjs/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,aAAa,EAgBb,SAAS,EAMT,KAAK,EAIL,eAAe,EAQf,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACpB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,WAAW,EAEX,cAAc,EAEd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,yBAAyB,EAGzB,mBAAmB,EAEnB,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,SAAS,EAAE,QAAQ,CAC9B,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC,CAQnE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC;AAiExE,wBAAgB,UAAU,CACxB,UAAU,EAAE,mBAAmB,GAAG,SAAS,GAC1C,WAAW,CA8Bb;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,SAAS,GAAE,aAAyB,GACnC,cAAc,EAAE,CAgKlB;AAyDD,gDAAgD;AAChD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwEzB;AA4CD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,yBAAyB,GAAG,SAAS,GAChD,OAAO,CAAC,iBAAiB,CAAC,CAoE5B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,eAAe,EACtB,SAAS,GAAE,aAAyB,GACnC,SAAS,CAsBX;AAqCD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,aAAyB,GACnC,SAAS,GAAG,KAAK,GAAG,eAAe,CAWrC;AAyDD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,aAAyB,GACnC,KAAK,CA8BP"}
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/renderers/docxjs/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,aAAa,EAgBb,SAAS,EAMT,KAAK,EAIL,eAAe,EAQf,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACpB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,WAAW,EAEX,cAAc,EAEd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,yBAAyB,EAGzB,mBAAmB,EAEnB,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAExB,eAAO,MAAM,SAAS,EAAE,QAAQ,CAC9B,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC,CAQnE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEjE,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,cAAc,CAAC;AA2ExE,wBAAgB,UAAU,CACxB,UAAU,EAAE,mBAAmB,GAAG,SAAS,GAC1C,WAAW,CA8Bb;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,SAAS,GAAE,aAAyB,GACnC,cAAc,EAAE,CAwKlB;AAyDD,gDAAgD;AAChD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwEzB;AA4CD,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,yBAAyB,GAAG,SAAS,GAChD,OAAO,CAAC,iBAAiB,CAAC,CAoE5B;AAED,wBAAgB,aAAa,CAC3B,KAAK,EAAE,eAAe,EACtB,SAAS,GAAE,aAAyB,GACnC,SAAS,CAsBX;AAqCD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,aAAyB,GACnC,SAAS,GAAG,KAAK,GAAG,eAAe,CAWrC;AAyDD,wBAAgB,SAAS,CACvB,KAAK,EAAE,WAAW,EAClB,SAAS,GAAE,aAAyB,GACnC,KAAK,CA8BP"}
@@ -0,0 +1,473 @@
1
+ {
2
+ "id": "client-report",
3
+ "format": "docx",
4
+ "title": "Client report",
5
+ "description": "A report for a client or a public administration: a cover, key takeaways, KPIs, chart-first sections with a takeaway and a source under every figure, data tables, notes and sources, under a running head that tracks the section and numbers the pages.",
6
+ "whenToUse": "A periodic or one-off report to a client, a board or a public body that reads for the conclusion first and checks the evidence second. Not for a memo or a technical specification.",
7
+ "theme": "consulting",
8
+ "profile": "client-report",
9
+ "definitions": "client-report-blocks.docx.json",
10
+ "numbering": "sections",
11
+ "toc": false,
12
+ "variants": {
13
+ "data-heavy": {
14
+ "description": "Evidence-led: a KPI row under the takeaways, a chart with its takeaway in the second section, a data table with a note in the third, next steps last.",
15
+ "whenToUse": "The brief comes with numbers: performance, finance, operations, anything the reader will check against a figure.",
16
+ "pages": {
17
+ "min": 4,
18
+ "max": 8
19
+ },
20
+ "metadata": {
21
+ "title": "{{Title: as on the cover}}",
22
+ "author": "{{Author or team}}",
23
+ "company": "{{Client name}}",
24
+ "date": "{{Month YYYY}}"
25
+ },
26
+ "children": [
27
+ {
28
+ "name": "section",
29
+ "children": [
30
+ {
31
+ "name": "block",
32
+ "props": {
33
+ "ref": "cover",
34
+ "slots": {
35
+ "title": "{{Title: the report's conclusion in one sentence}}",
36
+ "subtitle": "{{Subtitle: what the report answers, for whom}}",
37
+ "client": "{{Client name}}",
38
+ "date": "{{Month YYYY}}",
39
+ "confidentiality": "{{Confidentiality: Confidential, or For internal use}}"
40
+ }
41
+ }
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "name": "section",
47
+ "children": [
48
+ {
49
+ "name": "block",
50
+ "props": {
51
+ "ref": "running-head",
52
+ "slots": {
53
+ "confidentiality": "{{Confidentiality: as on the cover}}",
54
+ "date": "{{Month YYYY}}"
55
+ }
56
+ }
57
+ },
58
+ {
59
+ "name": "block",
60
+ "props": {
61
+ "ref": "section-opener",
62
+ "slots": {
63
+ "number": "01",
64
+ "title": "{{Section title: the finding, as a statement}}",
65
+ "tracker": "{{Tracker: one or two words}}"
66
+ }
67
+ }
68
+ },
69
+ {
70
+ "name": "block",
71
+ "props": {
72
+ "ref": "key-takeaways",
73
+ "slots": {
74
+ "items": [
75
+ "{{Takeaway 1: one claim, one sentence, with its number}}",
76
+ "{{Takeaway 2: one claim, one sentence, with its number}}",
77
+ "{{Takeaway 3: the recommendation that follows}}"
78
+ ]
79
+ }
80
+ }
81
+ },
82
+ {
83
+ "name": "block",
84
+ "props": {
85
+ "ref": "kpi-row",
86
+ "slots": {
87
+ "items": [
88
+ {
89
+ "value": "{{0.0}}",
90
+ "label": "{{What it measures}}"
91
+ },
92
+ {
93
+ "value": "{{0.0}}",
94
+ "label": "{{What it measures}}"
95
+ },
96
+ {
97
+ "value": "{{0.0}}",
98
+ "label": "{{What it measures}}"
99
+ }
100
+ ],
101
+ "source": "{{Source: system or document, date}}"
102
+ }
103
+ }
104
+ },
105
+ {
106
+ "name": "paragraph",
107
+ "props": {
108
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
109
+ }
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "name": "section",
115
+ "children": [
116
+ {
117
+ "name": "block",
118
+ "props": {
119
+ "ref": "section-opener",
120
+ "slots": {
121
+ "number": "02",
122
+ "title": "{{Section title: the finding, as a statement}}",
123
+ "tracker": "{{Tracker: one or two words}}"
124
+ }
125
+ }
126
+ },
127
+ {
128
+ "name": "paragraph",
129
+ "props": {
130
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
131
+ }
132
+ },
133
+ {
134
+ "name": "block",
135
+ "props": {
136
+ "ref": "chart-figure",
137
+ "slots": {
138
+ "chart": {
139
+ "name": "highcharts",
140
+ "props": {
141
+ "width": "100%",
142
+ "options": {
143
+ "chart": {
144
+ "type": "column",
145
+ "width": 900,
146
+ "height": 460
147
+ },
148
+ "title": {
149
+ "text": null
150
+ },
151
+ "xAxis": {
152
+ "categories": [
153
+ "{{Period 1}}",
154
+ "{{Period 2}}",
155
+ "{{Period 3}}"
156
+ ]
157
+ },
158
+ "yAxis": {
159
+ "title": {
160
+ "text": "{{Measure (unit)}}"
161
+ }
162
+ },
163
+ "series": [
164
+ {
165
+ "name": "{{Series name}}",
166
+ "data": [0, 0, 0]
167
+ }
168
+ ]
169
+ }
170
+ }
171
+ },
172
+ "caption": "{{Caption: what the chart shows, as a statement}}",
173
+ "takeaway": "{{Takeaway: the one sentence the reader should keep}}",
174
+ "source": "{{Source: system or document, date}}"
175
+ }
176
+ }
177
+ },
178
+ {
179
+ "name": "paragraph",
180
+ "props": {
181
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
182
+ }
183
+ }
184
+ ]
185
+ },
186
+ {
187
+ "name": "section",
188
+ "children": [
189
+ {
190
+ "name": "block",
191
+ "props": {
192
+ "ref": "section-opener",
193
+ "slots": {
194
+ "number": "03",
195
+ "title": "{{Section title: the finding, as a statement}}",
196
+ "tracker": "{{Tracker: one or two words}}"
197
+ }
198
+ }
199
+ },
200
+ {
201
+ "name": "paragraph",
202
+ "props": {
203
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
204
+ }
205
+ },
206
+ {
207
+ "name": "block",
208
+ "props": {
209
+ "ref": "data-table",
210
+ "slots": {
211
+ "title": "{{Table title: what it compares, and the period}}",
212
+ "labelHeader": "{{Row label}}",
213
+ "labels": ["{{Row 1}}", "{{Row 2}}", "{{Row 3}}"],
214
+ "columns": [
215
+ {
216
+ "header": "{{Measure (unit)}}",
217
+ "cells": ["{{0.0}}", "{{0.0}}", "{{0.0}}"]
218
+ },
219
+ {
220
+ "header": "{{Change}}",
221
+ "cells": ["{{0.0}}", "{{0.0}}", "{{0.0}}"]
222
+ }
223
+ ],
224
+ "source": "{{Source: system or document, date}}"
225
+ }
226
+ }
227
+ },
228
+ {
229
+ "name": "block",
230
+ "props": {
231
+ "ref": "callout",
232
+ "slots": {
233
+ "label": "{{Note label}}",
234
+ "text": "{{Note: a caveat about the numbers, a definition or the method}}"
235
+ }
236
+ }
237
+ }
238
+ ]
239
+ },
240
+ {
241
+ "name": "section",
242
+ "children": [
243
+ {
244
+ "name": "block",
245
+ "props": {
246
+ "ref": "section-opener",
247
+ "slots": {
248
+ "number": "04",
249
+ "title": "{{Section title: the finding, as a statement}}",
250
+ "tracker": "{{Tracker: one or two words}}"
251
+ }
252
+ }
253
+ },
254
+ {
255
+ "name": "paragraph",
256
+ "props": {
257
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
258
+ }
259
+ },
260
+ {
261
+ "name": "block",
262
+ "props": {
263
+ "ref": "footnotes"
264
+ }
265
+ }
266
+ ]
267
+ }
268
+ ]
269
+ },
270
+ "narrative": {
271
+ "description": "Argument-led: takeaways, then three sections of prose with one KPI row and one note as evidence, next steps last.",
272
+ "whenToUse": "The brief is a position, an assessment or a recommendation with few numbers; the reader follows an argument.",
273
+ "pages": {
274
+ "min": 3,
275
+ "max": 6
276
+ },
277
+ "metadata": {
278
+ "title": "{{Title: as on the cover}}",
279
+ "author": "{{Author or team}}",
280
+ "company": "{{Client name}}",
281
+ "date": "{{Month YYYY}}"
282
+ },
283
+ "children": [
284
+ {
285
+ "name": "section",
286
+ "children": [
287
+ {
288
+ "name": "block",
289
+ "props": {
290
+ "ref": "cover",
291
+ "slots": {
292
+ "title": "{{Title: the report's conclusion in one sentence}}",
293
+ "subtitle": "{{Subtitle: what the report answers, for whom}}",
294
+ "client": "{{Client name}}",
295
+ "date": "{{Month YYYY}}",
296
+ "confidentiality": "{{Confidentiality: Confidential, or For internal use}}"
297
+ }
298
+ }
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ "name": "section",
304
+ "children": [
305
+ {
306
+ "name": "block",
307
+ "props": {
308
+ "ref": "running-head",
309
+ "slots": {
310
+ "confidentiality": "{{Confidentiality: as on the cover}}",
311
+ "date": "{{Month YYYY}}"
312
+ }
313
+ }
314
+ },
315
+ {
316
+ "name": "block",
317
+ "props": {
318
+ "ref": "section-opener",
319
+ "slots": {
320
+ "number": "01",
321
+ "title": "{{Section title: the finding, as a statement}}",
322
+ "tracker": "{{Tracker: one or two words}}"
323
+ }
324
+ }
325
+ },
326
+ {
327
+ "name": "block",
328
+ "props": {
329
+ "ref": "key-takeaways",
330
+ "slots": {
331
+ "items": [
332
+ "{{Takeaway 1: one claim, one sentence, with its number}}",
333
+ "{{Takeaway 2: one claim, one sentence, with its number}}",
334
+ "{{Takeaway 3: the recommendation that follows}}"
335
+ ]
336
+ }
337
+ }
338
+ },
339
+ {
340
+ "name": "paragraph",
341
+ "props": {
342
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
343
+ }
344
+ },
345
+ {
346
+ "name": "paragraph",
347
+ "props": {
348
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
349
+ }
350
+ }
351
+ ]
352
+ },
353
+ {
354
+ "name": "section",
355
+ "children": [
356
+ {
357
+ "name": "block",
358
+ "props": {
359
+ "ref": "section-opener",
360
+ "slots": {
361
+ "number": "02",
362
+ "title": "{{Section title: the finding, as a statement}}",
363
+ "tracker": "{{Tracker: one or two words}}"
364
+ }
365
+ }
366
+ },
367
+ {
368
+ "name": "paragraph",
369
+ "props": {
370
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
371
+ }
372
+ },
373
+ {
374
+ "name": "block",
375
+ "props": {
376
+ "ref": "callout",
377
+ "slots": {
378
+ "label": "{{Note label}}",
379
+ "text": "{{Note: a caveat about the numbers, a definition or the method}}"
380
+ }
381
+ }
382
+ },
383
+ {
384
+ "name": "paragraph",
385
+ "props": {
386
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
387
+ }
388
+ }
389
+ ]
390
+ },
391
+ {
392
+ "name": "section",
393
+ "children": [
394
+ {
395
+ "name": "block",
396
+ "props": {
397
+ "ref": "section-opener",
398
+ "slots": {
399
+ "number": "03",
400
+ "title": "{{Section title: the finding, as a statement}}",
401
+ "tracker": "{{Tracker: one or two words}}"
402
+ }
403
+ }
404
+ },
405
+ {
406
+ "name": "paragraph",
407
+ "props": {
408
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
409
+ }
410
+ },
411
+ {
412
+ "name": "block",
413
+ "props": {
414
+ "ref": "kpi-row",
415
+ "slots": {
416
+ "items": [
417
+ {
418
+ "value": "{{0.0}}",
419
+ "label": "{{What it measures}}"
420
+ },
421
+ {
422
+ "value": "{{0.0}}",
423
+ "label": "{{What it measures}}"
424
+ },
425
+ {
426
+ "value": "{{0.0}}",
427
+ "label": "{{What it measures}}"
428
+ }
429
+ ],
430
+ "source": "{{Source: system or document, date}}"
431
+ }
432
+ }
433
+ },
434
+ {
435
+ "name": "paragraph",
436
+ "props": {
437
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
438
+ }
439
+ }
440
+ ]
441
+ },
442
+ {
443
+ "name": "section",
444
+ "children": [
445
+ {
446
+ "name": "block",
447
+ "props": {
448
+ "ref": "section-opener",
449
+ "slots": {
450
+ "number": "04",
451
+ "title": "{{Section title: the finding, as a statement}}",
452
+ "tracker": "{{Tracker: one or two words}}"
453
+ }
454
+ }
455
+ },
456
+ {
457
+ "name": "paragraph",
458
+ "props": {
459
+ "text": "{{Body: two or three short paragraphs of evidence for the section title, each opening with its claim}}"
460
+ }
461
+ },
462
+ {
463
+ "name": "block",
464
+ "props": {
465
+ "ref": "footnotes"
466
+ }
467
+ }
468
+ ]
469
+ }
470
+ ]
471
+ }
472
+ }
473
+ }