@openpresentation/opf 0.10.1 → 0.11.1
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/{catalogs-DoVmvDr7.d.ts → catalogs-DJ-B5ZyD.d.ts} +79 -9
- package/dist/catalogs.d.ts +2 -2
- package/dist/catalogs.js +1 -1
- package/dist/{chunk-PQJRDNA6.js → chunk-6UPHKXI5.js} +381 -34
- package/dist/{chunk-TU7I3KSB.js → chunk-7LF37SG3.js} +7400 -5422
- package/dist/{chunk-EWJNRHXA.js → chunk-BP6WMSSS.js} +3 -3
- package/dist/{chunk-FHGJX5QK.js → chunk-KWIOQ3QR.js} +73 -32
- package/dist/{chunk-D3GQIREP.js → chunk-LTSDDBNW.js} +558 -52
- package/dist/{chunk-ZIL7MGZU.js → chunk-M4GTWRK7.js} +333 -102
- package/dist/chunk-NPYN4TZ5.js +3516 -0
- package/dist/{chunk-RS5GZ5RW.js → chunk-SDETQV7Y.js} +161 -0
- package/dist/composition-DzLwY-Mi.d.ts +887 -0
- package/dist/composition.d.ts +1 -676
- package/dist/composition.js +1 -1
- package/dist/docs.js +80 -20
- package/dist/examples.d.ts +1 -1
- package/dist/examples.js +11 -11
- package/dist/font-policy.d.ts +123 -0
- package/dist/font-policy.js +1 -0
- package/dist/index.d.ts +184 -4
- package/dist/index.js +473 -7
- package/dist/lint.d.ts +3 -3
- package/dist/lint.js +5 -5
- package/dist/pagination.d.ts +6 -2
- package/dist/pagination.js +5 -5
- package/dist/{presentation-BMTdX6O1.d.ts → presentation-bceTClm8.d.ts} +297 -30
- package/dist/repo-readme.js +1 -1
- package/dist/{schemas-BYe5y8-i.d.ts → schemas-X_NniU4A.d.ts} +8 -0
- package/dist/schemas.d.ts +1 -1
- package/dist/schemas.js +1 -1
- package/dist/spec/catalogs/audiences/academic.json +24 -0
- package/dist/spec/catalogs/audiences/all-hands.json +3 -1
- package/dist/spec/catalogs/audiences/board.json +3 -1
- package/dist/spec/catalogs/audiences/customer.json +25 -0
- package/dist/spec/catalogs/audiences/executive.json +24 -0
- package/dist/spec/catalogs/audiences/general-public.json +25 -0
- package/dist/spec/catalogs/audiences/index.json +73 -1
- package/dist/spec/catalogs/audiences/internal-team.json +25 -0
- package/dist/spec/catalogs/audiences/investor.json +25 -0
- package/dist/spec/catalogs/audiences/marketing.json +25 -0
- package/dist/spec/catalogs/audiences/media.json +24 -0
- package/dist/spec/catalogs/audiences/partner.json +25 -0
- package/dist/spec/catalogs/audiences/regulatory.json +25 -0
- package/dist/spec/catalogs/audiences/sales.json +25 -0
- package/dist/spec/catalogs/audiences/technical.json +25 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-bar.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-bullet-column.json +5 -0
- package/dist/spec/catalogs/chart-types/100pct-progress-bar.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-area-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-bar-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/100pct-stacked-column-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/area.json +5 -0
- package/dist/spec/catalogs/chart-types/australia.json +10 -0
- package/dist/spec/catalogs/chart-types/bar.json +5 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/box-and-whisker.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-bar.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/bullet-column.json +5 -0
- package/dist/spec/catalogs/chart-types/canada.json +10 -0
- package/dist/spec/catalogs/chart-types/clustered-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/clustered-column.json +10 -0
- package/dist/spec/catalogs/chart-types/column.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-4x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-5x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot-6x.json +5 -0
- package/dist/spec/catalogs/chart-types/dot-plot.json +5 -0
- package/dist/spec/catalogs/chart-types/doughnut.json +5 -0
- package/dist/spec/catalogs/chart-types/dumbbell.json +5 -0
- package/dist/spec/catalogs/chart-types/filled-radar.json +5 -0
- package/dist/spec/catalogs/chart-types/funnel.json +5 -0
- package/dist/spec/catalogs/chart-types/histogram.json +5 -0
- package/dist/spec/catalogs/chart-types/index.json +333 -233
- package/dist/spec/catalogs/chart-types/line-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-high-low-and-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/line-with-high-low.json +5 -0
- package/dist/spec/catalogs/chart-types/line-with-markers-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-markers-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/line-with-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/line.json +5 -0
- package/dist/spec/catalogs/chart-types/pareto.json +9 -14
- package/dist/spec/catalogs/chart-types/pie.json +5 -0
- package/dist/spec/catalogs/chart-types/radar-with-markers.json +5 -0
- package/dist/spec/catalogs/chart-types/radar.json +5 -0
- package/dist/spec/catalogs/chart-types/scatter.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-2x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-3x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-4x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-5x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline-6x.json +5 -0
- package/dist/spec/catalogs/chart-types/sparkline.json +5 -0
- package/dist/spec/catalogs/chart-types/stacked-area-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-area-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-bar-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-bar-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-column-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-column-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-line-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-line-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/stacked-line-with-markers-3x.json +6 -1
- package/dist/spec/catalogs/chart-types/treemap-2x.json +10 -0
- package/dist/spec/catalogs/chart-types/treemap-3x.json +10 -0
- package/dist/spec/catalogs/chart-types/treemap.json +5 -0
- package/dist/spec/catalogs/chart-types/united-kingdom.json +10 -0
- package/dist/spec/catalogs/chart-types/united-states.json +10 -0
- package/dist/spec/catalogs/chart-types/waterfall.json +5 -0
- package/dist/spec/catalogs/chart-types/world.json +6 -1
- package/dist/spec/catalogs/font-schemes/consolas.json +3 -0
- package/dist/spec/catalogs/font-schemes/courier-new.json +3 -0
- package/dist/spec/catalogs/languages/afrikaans.json +3 -0
- package/dist/spec/catalogs/languages/albanian.json +3 -0
- package/dist/spec/catalogs/languages/amharic.json +3 -0
- package/dist/spec/catalogs/languages/arabic.json +3 -0
- package/dist/spec/catalogs/languages/armenian.json +3 -0
- package/dist/spec/catalogs/languages/aymara.json +3 -0
- package/dist/spec/catalogs/languages/azerbaijani.json +3 -0
- package/dist/spec/catalogs/languages/bengali.json +3 -0
- package/dist/spec/catalogs/languages/berber-latin.json +3 -0
- package/dist/spec/catalogs/languages/bosnian-latin.json +3 -0
- package/dist/spec/catalogs/languages/bulgarian.json +3 -0
- package/dist/spec/catalogs/languages/catalan.json +3 -0
- package/dist/spec/catalogs/languages/cebuano.json +3 -0
- package/dist/spec/catalogs/languages/chinese-simplified.json +3 -0
- package/dist/spec/catalogs/languages/chinese-traditional.json +3 -0
- package/dist/spec/catalogs/languages/chittagonian.json +3 -0
- package/dist/spec/catalogs/languages/croatian.json +3 -0
- package/dist/spec/catalogs/languages/czech.json +3 -0
- package/dist/spec/catalogs/languages/danish.json +3 -0
- package/dist/spec/catalogs/languages/dutch.json +3 -0
- package/dist/spec/catalogs/languages/english-au.json +3 -0
- package/dist/spec/catalogs/languages/english-ca.json +3 -0
- package/dist/spec/catalogs/languages/english-gb.json +3 -0
- package/dist/spec/catalogs/languages/english-in.json +3 -0
- package/dist/spec/catalogs/languages/english-us.json +3 -0
- package/dist/spec/catalogs/languages/english.json +3 -0
- package/dist/spec/catalogs/languages/estonian.json +3 -0
- package/dist/spec/catalogs/languages/filipino.json +3 -0
- package/dist/spec/catalogs/languages/finnish.json +3 -0
- package/dist/spec/catalogs/languages/french.json +3 -0
- package/dist/spec/catalogs/languages/fulfulde.json +3 -0
- package/dist/spec/catalogs/languages/galician.json +3 -0
- package/dist/spec/catalogs/languages/georgian.json +3 -0
- package/dist/spec/catalogs/languages/german.json +3 -0
- package/dist/spec/catalogs/languages/greek.json +3 -0
- package/dist/spec/catalogs/languages/gujarati.json +3 -0
- package/dist/spec/catalogs/languages/hausa.json +3 -0
- package/dist/spec/catalogs/languages/hebrew.json +3 -0
- package/dist/spec/catalogs/languages/hindi.json +3 -0
- package/dist/spec/catalogs/languages/hungarian.json +3 -0
- package/dist/spec/catalogs/languages/igbo.json +3 -0
- package/dist/spec/catalogs/languages/indonesian.json +3 -0
- package/dist/spec/catalogs/languages/italian.json +3 -0
- package/dist/spec/catalogs/languages/japanese.json +3 -0
- package/dist/spec/catalogs/languages/kannada.json +3 -0
- package/dist/spec/catalogs/languages/kazakh.json +3 -0
- package/dist/spec/catalogs/languages/khmer.json +3 -0
- package/dist/spec/catalogs/languages/kinyarwanda.json +3 -0
- package/dist/spec/catalogs/languages/korean.json +3 -0
- package/dist/spec/catalogs/languages/kurmanji.json +3 -0
- package/dist/spec/catalogs/languages/latvian.json +3 -0
- package/dist/spec/catalogs/languages/lithuanian.json +3 -0
- package/dist/spec/catalogs/languages/macedonian.json +3 -0
- package/dist/spec/catalogs/languages/malagasy.json +3 -0
- package/dist/spec/catalogs/languages/malay.json +3 -0
- package/dist/spec/catalogs/languages/malayalam.json +3 -0
- package/dist/spec/catalogs/languages/maori.json +3 -0
- package/dist/spec/catalogs/languages/marathi.json +3 -0
- package/dist/spec/catalogs/languages/mongolian.json +3 -0
- package/dist/spec/catalogs/languages/nepali.json +3 -0
- package/dist/spec/catalogs/languages/norwegian.json +3 -0
- package/dist/spec/catalogs/languages/odia.json +3 -0
- package/dist/spec/catalogs/languages/oromo.json +3 -0
- package/dist/spec/catalogs/languages/pashto.json +3 -0
- package/dist/spec/catalogs/languages/persian.json +3 -0
- package/dist/spec/catalogs/languages/polish.json +3 -0
- package/dist/spec/catalogs/languages/portuguese.json +3 -0
- package/dist/spec/catalogs/languages/punjabi-gurmukhi.json +3 -0
- package/dist/spec/catalogs/languages/punjabi-shahmukhi.json +3 -0
- package/dist/spec/catalogs/languages/romanian.json +3 -0
- package/dist/spec/catalogs/languages/russian.json +3 -0
- package/dist/spec/catalogs/languages/serbian-cyrillic.json +3 -0
- package/dist/spec/catalogs/languages/serbian-latin.json +3 -0
- package/dist/spec/catalogs/languages/shona.json +3 -0
- package/dist/spec/catalogs/languages/slovak.json +3 -0
- package/dist/spec/catalogs/languages/slovenian.json +3 -0
- package/dist/spec/catalogs/languages/somali.json +3 -0
- package/dist/spec/catalogs/languages/spanish.json +3 -0
- package/dist/spec/catalogs/languages/swahili.json +3 -0
- package/dist/spec/catalogs/languages/swedish.json +3 -0
- package/dist/spec/catalogs/languages/tagalog.json +3 -0
- package/dist/spec/catalogs/languages/tajik.json +3 -0
- package/dist/spec/catalogs/languages/tamil.json +3 -0
- package/dist/spec/catalogs/languages/telugu.json +3 -0
- package/dist/spec/catalogs/languages/thai.json +3 -0
- package/dist/spec/catalogs/languages/turkish.json +3 -0
- package/dist/spec/catalogs/languages/ukrainian.json +3 -0
- package/dist/spec/catalogs/languages/urdu.json +3 -0
- package/dist/spec/catalogs/languages/uzbek-latin.json +3 -0
- package/dist/spec/catalogs/languages/vietnamese-quoc-ngu.json +3 -0
- package/dist/spec/catalogs/languages/xhosa.json +3 -0
- package/dist/spec/catalogs/languages/yoruba.json +3 -0
- package/dist/spec/catalogs/languages/zulu.json +3 -0
- package/dist/spec/catalogs/narratives/board-meeting.json +21 -21
- package/dist/spec/catalogs/narratives/business-narrative.json +8 -8
- package/dist/spec/catalogs/narratives/business-review.json +12 -12
- package/dist/spec/catalogs/narratives/capacity-planning.json +8 -8
- package/dist/spec/catalogs/narratives/challenge-resolution.json +7 -7
- package/dist/spec/catalogs/narratives/change-story.json +64 -0
- package/dist/spec/catalogs/narratives/classic-story.json +7 -7
- package/dist/spec/catalogs/narratives/company-intro.json +9 -9
- package/dist/spec/catalogs/narratives/conference-talk.json +1 -1
- package/dist/spec/catalogs/narratives/data-story.json +66 -0
- package/dist/spec/catalogs/narratives/early-startup-pitch.json +12 -12
- package/dist/spec/catalogs/narratives/educate.json +9 -9
- package/dist/spec/catalogs/narratives/employee-review.json +8 -8
- package/dist/spec/catalogs/narratives/failure-analysis.json +10 -10
- package/dist/spec/catalogs/narratives/focus.json +12 -12
- package/dist/spec/catalogs/narratives/golden-circle.json +1 -1
- package/dist/spec/catalogs/narratives/heros-journey.json +64 -0
- package/dist/spec/catalogs/narratives/index.json +81 -0
- package/dist/spec/catalogs/narratives/innovation.json +9 -9
- package/dist/spec/catalogs/narratives/justice.json +11 -11
- package/dist/spec/catalogs/narratives/marketing-strategy.json +11 -11
- package/dist/spec/catalogs/narratives/performance-improvement-plan.json +8 -8
- package/dist/spec/catalogs/narratives/performance-review.json +11 -11
- package/dist/spec/catalogs/narratives/persuade.json +7 -7
- package/dist/spec/catalogs/narratives/persuasive-sales.json +8 -8
- package/dist/spec/catalogs/narratives/pitch-deck.json +3 -3
- package/dist/spec/catalogs/narratives/problem-solution.json +2 -2
- package/dist/spec/catalogs/narratives/product-launch.json +10 -10
- package/dist/spec/catalogs/narratives/project-proposal.json +10 -10
- package/dist/spec/catalogs/narratives/pyramid-principle.json +48 -0
- package/dist/spec/catalogs/narratives/qbr.json +3 -3
- package/dist/spec/catalogs/narratives/rags-to-riches.json +7 -7
- package/dist/spec/catalogs/narratives/reveal.json +8 -8
- package/dist/spec/catalogs/narratives/scqa.json +1 -1
- package/dist/spec/catalogs/narratives/situation-complication-resolution.json +56 -0
- package/dist/spec/catalogs/narratives/sparkline.json +56 -0
- package/dist/spec/catalogs/narratives/star-method.json +56 -0
- package/dist/spec/catalogs/narratives/status-update.json +6 -6
- package/dist/spec/catalogs/narratives/strategic-advisory.json +7 -7
- package/dist/spec/catalogs/narratives/strategic-narrative.json +1 -1
- package/dist/spec/catalogs/narratives/survey-analysis.json +10 -10
- package/dist/spec/catalogs/narratives/survival-story.json +10 -10
- package/dist/spec/catalogs/narratives/transformation-arc.json +1 -1
- package/dist/spec/catalogs/narratives/trend-analysis.json +7 -7
- package/dist/spec/catalogs/narratives/underdog-victory.json +8 -8
- package/dist/spec/catalogs/narratives/venture-pitch.json +12 -12
- package/dist/spec/catalogs/narratives/vision-roadmap.json +65 -0
- package/dist/spec/catalogs/narratives/weekly-progress.json +10 -10
- package/dist/spec/catalogs/narratives/what-so-what-now-what.json +48 -0
- package/dist/spec/openapi.yaml +5 -0
- package/dist/spec/reference/engine-defaults.json +2 -2
- package/dist/spec/reference/font-policy.json +3435 -0
- package/dist/spec/reference/font-policy.schema.json +328 -0
- package/dist/spec/schemas/chart-type.schema.json +51 -11
- package/dist/spec/schemas/font-scheme.schema.json +91 -1
- package/dist/spec/schemas/language.schema.json +10 -5
- package/dist/spec/schemas/opf.schema.json +241 -32
- package/dist/spec-files.d.ts +1 -1
- package/dist/spec-files.js +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/validator.d.ts +7 -4
- package/dist/validator.js +4 -4
- package/package.json +6 -2
|
@@ -0,0 +1,887 @@
|
|
|
1
|
+
/** Canonical table grid. No renderer, fonts, DOM or network dependencies. */
|
|
2
|
+
interface TableBorder {
|
|
3
|
+
color: string;
|
|
4
|
+
width: number;
|
|
5
|
+
dash?: 'solid' | 'dash' | 'dot';
|
|
6
|
+
}
|
|
7
|
+
interface TableCellStyle {
|
|
8
|
+
fill?: string;
|
|
9
|
+
color?: string;
|
|
10
|
+
align?: 'left' | 'center' | 'right';
|
|
11
|
+
verticalAlign?: 'top' | 'middle' | 'bottom';
|
|
12
|
+
padding?: Partial<Record<'top' | 'right' | 'bottom' | 'left', number>>;
|
|
13
|
+
borders?: Partial<Record<'top' | 'right' | 'bottom' | 'left', TableBorder>>;
|
|
14
|
+
}
|
|
15
|
+
interface TableGridCell {
|
|
16
|
+
input: unknown;
|
|
17
|
+
value: unknown;
|
|
18
|
+
style: TableCellStyle;
|
|
19
|
+
row: number;
|
|
20
|
+
column: number;
|
|
21
|
+
rowSpan: number;
|
|
22
|
+
colSpan: number;
|
|
23
|
+
header: boolean;
|
|
24
|
+
path: string;
|
|
25
|
+
valuePath: string;
|
|
26
|
+
}
|
|
27
|
+
interface TableGridIssue {
|
|
28
|
+
path: string;
|
|
29
|
+
message: string;
|
|
30
|
+
}
|
|
31
|
+
interface TableGrid {
|
|
32
|
+
rows: TableGridCell[][];
|
|
33
|
+
columnCount: number;
|
|
34
|
+
rowCount: number;
|
|
35
|
+
hasHeaders: boolean;
|
|
36
|
+
/** Anchor at each covered position; covered positions are not additional cells. */
|
|
37
|
+
owners: (TableGridCell | undefined)[][];
|
|
38
|
+
issues: TableGridIssue[];
|
|
39
|
+
}
|
|
40
|
+
declare function tableGrid(value: unknown, path?: string): TableGrid;
|
|
41
|
+
/** Row boundaries that preserve every vertical merge, used by pagination. */
|
|
42
|
+
declare function tableRowBoundaries(value: unknown): number[];
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Deterministic header/footer field formatting. Nothing here consults a clock,
|
|
46
|
+
* the host locale or the host time zone: dates are calendar dates supplied by the
|
|
47
|
+
* document or the host, and month/weekday names are fixed English names.
|
|
48
|
+
*/
|
|
49
|
+
/** A live field inside displayed furniture text, as half-open UTF-16 offsets into the part's `text`. */
|
|
50
|
+
interface FurnitureField {
|
|
51
|
+
type: 'slideNumber' | 'date';
|
|
52
|
+
start: number;
|
|
53
|
+
end: number;
|
|
54
|
+
/** Resolved date pattern for a current (`date: true`) date. */
|
|
55
|
+
format?: string;
|
|
56
|
+
}
|
|
57
|
+
/** PowerPoint's first Insert > Date and Time choice for en-US (`datetime1`). */
|
|
58
|
+
declare const DEFAULT_FURNITURE_DATE_FORMAT = "M/d/yyyy";
|
|
59
|
+
declare const DEFAULT_SLIDE_NUMBER_FORMAT = "{current}";
|
|
60
|
+
/** Format an ISO calendar date with an LDML-style pattern. Returns an error message when either input is unsupported. */
|
|
61
|
+
declare function formatFurnitureDate(iso: string, pattern: string): {
|
|
62
|
+
text: string;
|
|
63
|
+
} | {
|
|
64
|
+
error: string;
|
|
65
|
+
};
|
|
66
|
+
/** Resolve a slide-number template. `{current}` becomes a live field; `{total}` is fixed text. */
|
|
67
|
+
declare function formatSlideNumber(format: string, current: number, total: number | undefined): {
|
|
68
|
+
text: string;
|
|
69
|
+
fields: FurnitureField[];
|
|
70
|
+
} | {
|
|
71
|
+
error: string;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/** Normalize a literal hex color to uppercase #RRGGBB. */
|
|
75
|
+
declare function normalizeHexColor(value: unknown): string | undefined;
|
|
76
|
+
type ResolveColorRefRoles = Partial<Record<'primary' | 'secondary' | 'accent' | 'background' | 'surface' | 'text' | 'textSecondary', string>>;
|
|
77
|
+
interface ResolveColorRefOptions {
|
|
78
|
+
/** Effective color scheme after design resolution (OOXML slots plus optional role hex overrides). */
|
|
79
|
+
colorScheme: Record<string, unknown>;
|
|
80
|
+
/** Optional resolved chrome colors (e.g. renderer `design.colors` with `textSecondary` mapped to `mutedText`). */
|
|
81
|
+
roles?: ResolveColorRefRoles;
|
|
82
|
+
/** Top-level presentation `variables` map. */
|
|
83
|
+
variables?: Record<string, unknown>;
|
|
84
|
+
/** Theme text color returned when a reference cannot be resolved. */
|
|
85
|
+
fallback: string;
|
|
86
|
+
}
|
|
87
|
+
/** Resolve a ColorRef or TextRun.color string to a literal hex color. */
|
|
88
|
+
declare function resolveColorRef(reference: string, options: ResolveColorRefOptions): string;
|
|
89
|
+
declare function colorContrast(foreground: string, background: string): number | undefined;
|
|
90
|
+
/** Keep an inherited text color at >=4.5:1; otherwise select black or white.
|
|
91
|
+
* Callers must preserve explicit text-color overrides before using this fallback.
|
|
92
|
+
* An unresolved/translucent fill preserves the preferred color, without a contrast claim.
|
|
93
|
+
*/
|
|
94
|
+
declare function textColorForFill(fill: string, preferred: string): string;
|
|
95
|
+
/** Keep an inherited chart mark at >=3:1 against its opaque panel. Otherwise
|
|
96
|
+
* mix toward black or white in bounded 1/255 steps, choosing the first passing
|
|
97
|
+
* step (higher contrast breaks a tie). This retains a recognizable palette;
|
|
98
|
+
* it does not establish distinction between adjacent series or colorblind safety.
|
|
99
|
+
* Explicit mark overrides belong to the caller; unresolved alpha is preserved.
|
|
100
|
+
*/
|
|
101
|
+
declare function chartColorForFill(fill: string, preferred: string): string;
|
|
102
|
+
|
|
103
|
+
/** Portable layout geometry. No fonts, DOM, renderer, or network dependencies. */
|
|
104
|
+
interface Composition {
|
|
105
|
+
mode?: "auto" | "grid" | "row" | "column";
|
|
106
|
+
columns?: number;
|
|
107
|
+
gap?: number;
|
|
108
|
+
padding?: number;
|
|
109
|
+
weights?: number[];
|
|
110
|
+
minFontSize?: number;
|
|
111
|
+
overflow?: "warn" | "error";
|
|
112
|
+
}
|
|
113
|
+
declare const MAX_COMPOSITION_DEPTH = 32;
|
|
114
|
+
interface LayoutBox {
|
|
115
|
+
x: number;
|
|
116
|
+
y: number;
|
|
117
|
+
width: number;
|
|
118
|
+
height: number;
|
|
119
|
+
}
|
|
120
|
+
interface LayoutDiagnostic {
|
|
121
|
+
code: "text-overflow" | "small-cell" | "unresolved-content" | "unsupported-image-treatment";
|
|
122
|
+
path: string;
|
|
123
|
+
message: string;
|
|
124
|
+
}
|
|
125
|
+
/** Physical legacy-family selection supplied by a font provider, independently of its numeric weight. */
|
|
126
|
+
interface FontFaceSelection {
|
|
127
|
+
family: string;
|
|
128
|
+
bold: boolean;
|
|
129
|
+
italic: boolean;
|
|
130
|
+
}
|
|
131
|
+
interface TextStyle {
|
|
132
|
+
fontFamily: string;
|
|
133
|
+
fontWeight: number;
|
|
134
|
+
italic?: boolean;
|
|
135
|
+
path?: string;
|
|
136
|
+
fontFace?: FontFaceSelection;
|
|
137
|
+
}
|
|
138
|
+
interface FontFamilies {
|
|
139
|
+
heading: string;
|
|
140
|
+
body: string;
|
|
141
|
+
code: string;
|
|
142
|
+
}
|
|
143
|
+
/** Shared last-resort font-scheme id when neither the slide, the deck nor the resolved theme names one.
|
|
144
|
+
* One default for every engine, so preview matches export (font-fidelity-everywhere owner decision). */
|
|
145
|
+
declare const DEFAULT_FONT_SCHEME = "aptos";
|
|
146
|
+
/** Reported when a font-scheme id matches no inline or bundled record. Every engine then uses the
|
|
147
|
+
* DEFAULT_FONT_SCHEME record as the base, with any sibling overrides on top. */
|
|
148
|
+
interface FontSchemeDiagnostic {
|
|
149
|
+
code: "unresolved-font-scheme";
|
|
150
|
+
/** Where the unresolved id is written: `slides.N.design.fontScheme`, `design.fontScheme`, or the
|
|
151
|
+
* `design.theme` reference whose record names it. */
|
|
152
|
+
path: string;
|
|
153
|
+
message: string;
|
|
154
|
+
/** The unresolved font-scheme id. */
|
|
155
|
+
id: string;
|
|
156
|
+
/** The font scheme used instead (DEFAULT_FONT_SCHEME). */
|
|
157
|
+
fallback: string;
|
|
158
|
+
}
|
|
159
|
+
interface ResolvedFontScheme {
|
|
160
|
+
scheme: Record<string, unknown>;
|
|
161
|
+
diagnostic?: FontSchemeDiagnostic;
|
|
162
|
+
}
|
|
163
|
+
/** Resolve a font-scheme reference the same way in every engine. A string id, or the `id` of an object
|
|
164
|
+
* reference, resolves through `lookup` (inline records, then bundled or host catalogs). An unresolved id
|
|
165
|
+
* returns a diagnostic, and the DEFAULT_FONT_SCHEME record becomes the base, so preview and export use
|
|
166
|
+
* the same families. An object without `id` is an inline scheme on the same base. Sibling fields on an
|
|
167
|
+
* object reference override the base per key. */
|
|
168
|
+
declare function resolveFontSchemeReference(reference: unknown, lookup: (id: string) => unknown, path?: string): ResolvedFontScheme;
|
|
169
|
+
/** Resolve role families from an already-merged font scheme (catalog record plus design overrides).
|
|
170
|
+
* A scheme that names no heading or body family gets the DEFAULT_FONT_SCHEME families (Aptos Display, Aptos).
|
|
171
|
+
* `code` comes from the scheme's `code` role, which catalog records such as consolas and courier-new
|
|
172
|
+
* carry; otherwise it is Roboto Mono. Heading and body families are never reused for code. */
|
|
173
|
+
declare function resolveFontFamilies(input: unknown): FontFamilies;
|
|
174
|
+
interface TextMeasurement {
|
|
175
|
+
measure: (text: string, fontSize: number, style: TextStyle) => number;
|
|
176
|
+
resolveStyle?: (style: TextStyle) => TextStyle;
|
|
177
|
+
/** Shaped vector ink relative to the left baseline origin (positive y down).
|
|
178
|
+
* Null means no outline. These are not hinted/antialiased raster bounds. */
|
|
179
|
+
outlineBounds?: (text: string, fontSize: number, style: TextStyle) => LayoutBox | null;
|
|
180
|
+
}
|
|
181
|
+
type MeasureTextWidth = (text: string, fontSize: number) => number;
|
|
182
|
+
declare function resolveTextStyle(style: TextStyle, measurement?: TextMeasurement): TextStyle;
|
|
183
|
+
declare function textWidthMeasurer(style: TextStyle, measurement?: TextMeasurement): MeasureTextWidth;
|
|
184
|
+
/** Validate an optional host outline measurement without inventing raster coverage. */
|
|
185
|
+
declare function measureTextOutline(text: string, fontSize: number, style: TextStyle, measurement?: TextMeasurement): LayoutBox | null | undefined;
|
|
186
|
+
interface TextLineInk {
|
|
187
|
+
width: number;
|
|
188
|
+
y: number;
|
|
189
|
+
baseline: number;
|
|
190
|
+
height: number;
|
|
191
|
+
outline: LayoutBox | null;
|
|
192
|
+
}
|
|
193
|
+
interface TextPlacementLine {
|
|
194
|
+
x: number;
|
|
195
|
+
y: number;
|
|
196
|
+
baseline: number;
|
|
197
|
+
height: number;
|
|
198
|
+
width: number;
|
|
199
|
+
outline: LayoutBox | null;
|
|
200
|
+
}
|
|
201
|
+
interface TextPlacement {
|
|
202
|
+
alignment: 'left' | 'center' | 'right';
|
|
203
|
+
/** Reference-pixel clearance around vector outlines; not a universal raster guarantee. */
|
|
204
|
+
rasterPadding: number;
|
|
205
|
+
lines: TextPlacementLine[];
|
|
206
|
+
height: number;
|
|
207
|
+
overflow: boolean;
|
|
208
|
+
}
|
|
209
|
+
interface TextFit {
|
|
210
|
+
lines: string[];
|
|
211
|
+
fontSize: number;
|
|
212
|
+
lineHeight: number;
|
|
213
|
+
overflow: boolean;
|
|
214
|
+
placement?: TextPlacement;
|
|
215
|
+
}
|
|
216
|
+
/** Place complete measured lines, preserving alignment where it leaves room for ink.
|
|
217
|
+
* Move following baselines together when outlines need more vertical separation. */
|
|
218
|
+
declare function placeTextLines(lines: readonly TextLineInk[], box: LayoutBox, alignment?: TextPlacement['alignment'], rasterPadding?: number): TextPlacement;
|
|
219
|
+
interface ComposedItem {
|
|
220
|
+
path: string;
|
|
221
|
+
field: string;
|
|
222
|
+
type: string;
|
|
223
|
+
value: unknown;
|
|
224
|
+
payload: Record<string, unknown>;
|
|
225
|
+
box: LayoutBox;
|
|
226
|
+
/** Optional visible card allocation; box and all accepted internals occupy its padded interior. */
|
|
227
|
+
frameBox?: LayoutBox;
|
|
228
|
+
text?: TextFit | RichTextFit | ListFit | CodeTextFit;
|
|
229
|
+
textStyle?: TextStyle;
|
|
230
|
+
/** Complete accepted quote internals; consumers must reuse these fits and styles. */
|
|
231
|
+
quoteLayout?: QuoteLayout;
|
|
232
|
+
/** Complete accepted code internals, including source lines and literal tab positions. */
|
|
233
|
+
codeLayout?: CodeLayout;
|
|
234
|
+
/** Complete shared metric geometry, including its unit, label and metadata. */
|
|
235
|
+
metricLayout?: MetricLayout;
|
|
236
|
+
/** Complete timeline fields, markers and connector accepted by composition. */
|
|
237
|
+
timelineLayout?: TimelineLayout;
|
|
238
|
+
/** Effective container settings, including inherited readability constraints. */
|
|
239
|
+
composition: Composition;
|
|
240
|
+
/**
|
|
241
|
+
* Resolved horizontal text alignment for this item: titleAlignment for the
|
|
242
|
+
* title, contentAlignment for every other item (slide design, then host
|
|
243
|
+
* option, then left). Engines anchor native and preview text to this value.
|
|
244
|
+
*/
|
|
245
|
+
alignment: 'left' | 'center' | 'right';
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Slide-level image resolved from design.slideImage. It is active when the slide sets its own
|
|
249
|
+
* design.slideImage, or when the deck sets one and either the slide's layout record declares
|
|
250
|
+
* slideImage: true or the slide's root image is the same source.
|
|
251
|
+
* Content composes in the part of the slide the image does not occupy; 'background' leaves the whole slide.
|
|
252
|
+
*/
|
|
253
|
+
interface ComposedSlideImage {
|
|
254
|
+
/** The design value that configured the image: 'design.slideImage' or 'slides.N.design.slideImage'. */
|
|
255
|
+
path: string;
|
|
256
|
+
/** Path of the drawn asset value: the design value, or the slide's root image payload it replaced. */
|
|
257
|
+
sourcePath: string;
|
|
258
|
+
/** Asset value (string or Asset object) that engines resolve like any other image. */
|
|
259
|
+
value: unknown;
|
|
260
|
+
position: 'background' | 'top' | 'bottom' | 'left' | 'right';
|
|
261
|
+
/** crop covers the frame (centered); fit shows the whole image centered inside it. */
|
|
262
|
+
fill: 'crop' | 'fit';
|
|
263
|
+
/** Band allocated to the image. */
|
|
264
|
+
region: LayoutBox;
|
|
265
|
+
/** Image frame inside the region. */
|
|
266
|
+
box: LayoutBox;
|
|
267
|
+
/** True when the slide's root image payload became this slide image instead of a content item. */
|
|
268
|
+
replacesContent: boolean;
|
|
269
|
+
/** Treatment alt text; engines fall back to the asset's own alt text. */
|
|
270
|
+
alt?: string;
|
|
271
|
+
/** Mask on the frame: a DrawingML preset with its guide values, and the same outline as an SVG path. */
|
|
272
|
+
shape: SlideImageShape;
|
|
273
|
+
/** Line centered on the shape outline; width in reference pixels (already scaled to the canvas). */
|
|
274
|
+
border?: {
|
|
275
|
+
color: unknown;
|
|
276
|
+
width: number;
|
|
277
|
+
};
|
|
278
|
+
/** Image opacity below 1; the border and overlay are not affected. */
|
|
279
|
+
opacity?: number;
|
|
280
|
+
/** Luminance-based recolor (Rec. 601 weights on sRGB values). */
|
|
281
|
+
recolor?: {
|
|
282
|
+
type: 'grayscale';
|
|
283
|
+
} | {
|
|
284
|
+
type: 'duotone';
|
|
285
|
+
dark: unknown;
|
|
286
|
+
light: unknown;
|
|
287
|
+
};
|
|
288
|
+
/** Scrim over the frame (same shape) or over an edge band of a rectangle frame. */
|
|
289
|
+
overlay?: {
|
|
290
|
+
color: unknown;
|
|
291
|
+
opacity: number;
|
|
292
|
+
box: LayoutBox;
|
|
293
|
+
shape: SlideImageShape;
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/** A frame mask. path follows the ECMA-376 preset formula for preset/adjust exactly, in reference pixels. */
|
|
297
|
+
interface SlideImageShape {
|
|
298
|
+
kind: 'rectangle' | 'rounded' | 'circle' | 'hexagon';
|
|
299
|
+
preset: 'rect' | 'roundRect' | 'ellipse' | 'hexagon';
|
|
300
|
+
/** DrawingML avLst guide values (for example adj and vf), in 1/100000 units. */
|
|
301
|
+
adjust: Record<string, number>;
|
|
302
|
+
path: string;
|
|
303
|
+
}
|
|
304
|
+
interface ComposedGroup {
|
|
305
|
+
path: string;
|
|
306
|
+
box: LayoutBox;
|
|
307
|
+
contentBox: LayoutBox;
|
|
308
|
+
composition: Composition;
|
|
309
|
+
}
|
|
310
|
+
interface CompositionTrack {
|
|
311
|
+
offset: number;
|
|
312
|
+
size: number;
|
|
313
|
+
}
|
|
314
|
+
/** Resolved flow geometry, including empty reserved slots. Promoted regions are not flows. */
|
|
315
|
+
interface ComposedFlow {
|
|
316
|
+
path: string;
|
|
317
|
+
box: LayoutBox;
|
|
318
|
+
composition: Composition;
|
|
319
|
+
columns: CompositionTrack[];
|
|
320
|
+
rows: CompositionTrack[];
|
|
321
|
+
gap: number;
|
|
322
|
+
itemCount: number;
|
|
323
|
+
slotCount: number;
|
|
324
|
+
}
|
|
325
|
+
/** Additive penalties in grid-score-v9; lower is preferred. These are not quality percentages. */
|
|
326
|
+
interface CompositionPenalties {
|
|
327
|
+
cellProportions: number;
|
|
328
|
+
fontReduction: number;
|
|
329
|
+
textOverflow: number;
|
|
330
|
+
tableOverflow: number;
|
|
331
|
+
smallCells: number;
|
|
332
|
+
emptySlots: number;
|
|
333
|
+
}
|
|
334
|
+
interface CompositionCandidate {
|
|
335
|
+
columns: number;
|
|
336
|
+
rows: number;
|
|
337
|
+
score: number;
|
|
338
|
+
penalties: CompositionPenalties;
|
|
339
|
+
}
|
|
340
|
+
interface CompositionDecision {
|
|
341
|
+
path: string;
|
|
342
|
+
mode: NonNullable<Composition['mode']> | 'regions';
|
|
343
|
+
reason: 'lowest-score' | 'configured-mode' | 'promoted-regions';
|
|
344
|
+
selectedColumns?: number;
|
|
345
|
+
/** Only candidates actually evaluated by automatic selection, in tie-break order. */
|
|
346
|
+
candidates: CompositionCandidate[];
|
|
347
|
+
}
|
|
348
|
+
interface CompositionExplanation {
|
|
349
|
+
algorithm: 'grid-score-v9';
|
|
350
|
+
/** Provided widths do not establish shaping, glyph coverage or native fidelity. */
|
|
351
|
+
textMeasurement: 'estimated' | 'provided';
|
|
352
|
+
/** Optional vector coverage for headings and scalar/rich text, not every payload. */
|
|
353
|
+
textOutlines: 'provided' | 'unavailable';
|
|
354
|
+
/** Effective body-text reference pixels; furniture reports its own placement padding. Not a universal raster tolerance. */
|
|
355
|
+
textRasterPadding: number;
|
|
356
|
+
decisions: CompositionDecision[];
|
|
357
|
+
/** Payloads whose complete internal fit is not covered by this scoring model. */
|
|
358
|
+
unmeasuredPayloads: string[];
|
|
359
|
+
}
|
|
360
|
+
interface SlideComposition {
|
|
361
|
+
width: number;
|
|
362
|
+
height: number;
|
|
363
|
+
contentBox: LayoutBox;
|
|
364
|
+
items: ComposedItem[];
|
|
365
|
+
groups: ComposedGroup[];
|
|
366
|
+
flows: ComposedFlow[];
|
|
367
|
+
diagnostics: LayoutDiagnostic[];
|
|
368
|
+
composition: Composition;
|
|
369
|
+
/** Repeated furniture is measured separately from body pagination leaves. */
|
|
370
|
+
furniture?: FurnitureLayout;
|
|
371
|
+
/** Active slide-level image; absent when design.slideImage does not apply to this slide. */
|
|
372
|
+
slideImage?: ComposedSlideImage;
|
|
373
|
+
explanation?: CompositionExplanation;
|
|
374
|
+
}
|
|
375
|
+
interface ComposeSlideOptions {
|
|
376
|
+
/** Context for inherited furniture, generated organization names and social profiles. */
|
|
377
|
+
presentation?: {
|
|
378
|
+
design?: {
|
|
379
|
+
header?: unknown;
|
|
380
|
+
footer?: unknown;
|
|
381
|
+
slideImage?: unknown;
|
|
382
|
+
imageFill?: unknown;
|
|
383
|
+
};
|
|
384
|
+
organization?: unknown;
|
|
385
|
+
slides?: unknown;
|
|
386
|
+
catalogs?: unknown;
|
|
387
|
+
};
|
|
388
|
+
/**
|
|
389
|
+
* Host-resolved social-platform records for generated `socials` furniture.
|
|
390
|
+
* Inline `presentation.catalogs.socialPlatforms.records` take precedence. Hosts
|
|
391
|
+
* normally pass the bundled catalog; without a matching record a handle renders
|
|
392
|
+
* as its raw value, as the Socials contract specifies.
|
|
393
|
+
*/
|
|
394
|
+
socialPlatforms?: readonly SocialPlatformRecord[];
|
|
395
|
+
/** One-based displayed number; source paths still use slideIndex. */
|
|
396
|
+
slideNumber?: number;
|
|
397
|
+
/** Displayed slide count for `{total}` in slideNumberFormat. Defaults to `presentation.slides.length`. */
|
|
398
|
+
slideCount?: number;
|
|
399
|
+
/**
|
|
400
|
+
* Host-supplied current calendar date (ISO YYYY-MM-DD) for `date: true` furniture. Core never
|
|
401
|
+
* consults a clock; without this option a current date is reported as unresolved content.
|
|
402
|
+
*/
|
|
403
|
+
date?: string;
|
|
404
|
+
fonts?: Partial<FontFamilies>;
|
|
405
|
+
/** Host-resolved alignment for shared content; slide design can override it. */
|
|
406
|
+
contentAlignment?: 'left' | 'center' | 'right';
|
|
407
|
+
titleAlignment?: 'left' | 'center' | 'right';
|
|
408
|
+
/** Unscaled reference pixels around provided vector outlines; defaults to 1 for body text and 2 for furniture. Explicit values apply to both. */
|
|
409
|
+
textRasterPadding?: number;
|
|
410
|
+
/** Host-resolved body cards. A slide's explicit design.contentBox overrides this value. */
|
|
411
|
+
contentBox?: boolean;
|
|
412
|
+
textMeasurement?: TextMeasurement;
|
|
413
|
+
width?: number;
|
|
414
|
+
height?: number;
|
|
415
|
+
slideIndex?: number;
|
|
416
|
+
layout?: Record<string, unknown>;
|
|
417
|
+
/** Return candidate scores and coverage without changing the selected geometry. */
|
|
418
|
+
explain?: boolean;
|
|
419
|
+
}
|
|
420
|
+
declare class OPFCompositionError extends Error {
|
|
421
|
+
readonly diagnostics: LayoutDiagnostic[];
|
|
422
|
+
readonly code = "layout-overflow";
|
|
423
|
+
readonly explanation?: CompositionExplanation;
|
|
424
|
+
constructor(diagnostics: LayoutDiagnostic[], explanation?: CompositionExplanation);
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Outline of a DrawingML preset in a box, following the ECMA-376 presetShapeDefinitions formulas:
|
|
428
|
+
* roundRect (adj; ss = min(w,h), radius = ss*adj/100000), ellipse, and hexagon (adj, vf).
|
|
429
|
+
*/
|
|
430
|
+
declare function slideImageShape(kind: SlideImageShape['kind'], box: LayoutBox, cornerRadius?: number): SlideImageShape;
|
|
431
|
+
interface FurniturePartBase {
|
|
432
|
+
kind: 'header' | 'footer';
|
|
433
|
+
zone: 'left' | 'center' | 'right';
|
|
434
|
+
field: 'text' | 'image' | 'organization' | 'socials' | 'section' | 'slideNumber' | 'date';
|
|
435
|
+
/** Literal field or controlling flag, with the actual inherited/local path. */
|
|
436
|
+
path: string;
|
|
437
|
+
/** String/asset source, when different from a generated field's flag. */
|
|
438
|
+
sourcePath?: string;
|
|
439
|
+
generated: boolean;
|
|
440
|
+
box: LayoutBox;
|
|
441
|
+
alignment: 'left' | 'center' | 'right';
|
|
442
|
+
}
|
|
443
|
+
interface FurnitureTextPart extends FurniturePartBase {
|
|
444
|
+
type: 'text';
|
|
445
|
+
text: string;
|
|
446
|
+
style: TextStyle;
|
|
447
|
+
requestedFontSize: number;
|
|
448
|
+
minFontSize: number;
|
|
449
|
+
fit: SourceTextFit;
|
|
450
|
+
/**
|
|
451
|
+
* Live values inside `text`: every `{current}` slide number, and a whole current
|
|
452
|
+
* (`date: true`) date. Hosts such as PPTX may emit them as native fields; all other
|
|
453
|
+
* text, including `{total}` and formatted fixed dates, is fixed.
|
|
454
|
+
*/
|
|
455
|
+
fields?: FurnitureField[];
|
|
456
|
+
/**
|
|
457
|
+
* Generated `socials` only: one entry per explicit source line of `text`, in
|
|
458
|
+
* order. A part may carry both `fields` and `links`; hosts apply each link to
|
|
459
|
+
* its whole source line and each field range within it.
|
|
460
|
+
*/
|
|
461
|
+
links?: FurnitureSocialLink[];
|
|
462
|
+
}
|
|
463
|
+
/** Optional generated metadata for one furniture text part (live fields and/or social links). */
|
|
464
|
+
interface FurnitureTextExtras {
|
|
465
|
+
fields?: FurnitureField[];
|
|
466
|
+
links?: FurnitureSocialLink[];
|
|
467
|
+
}
|
|
468
|
+
/** Social-platform catalog fields used to format a profile. */
|
|
469
|
+
interface SocialPlatformRecord {
|
|
470
|
+
id: string;
|
|
471
|
+
name?: string;
|
|
472
|
+
baseUrl?: string;
|
|
473
|
+
profileUrlPattern?: string;
|
|
474
|
+
companyUrlPattern?: string;
|
|
475
|
+
handlePrefix?: string;
|
|
476
|
+
}
|
|
477
|
+
interface SocialProfile {
|
|
478
|
+
/** Single-line display text: the profile URL without an `https://` scheme, or the raw value. */
|
|
479
|
+
text: string;
|
|
480
|
+
/** Full http(s) URL when the value is one or its platform record formats one. */
|
|
481
|
+
href?: string;
|
|
482
|
+
/** Whether a socialPlatforms record formatted a handle. */
|
|
483
|
+
resolved: boolean;
|
|
484
|
+
}
|
|
485
|
+
interface FurnitureSocialLink extends SocialProfile {
|
|
486
|
+
/** Socials key (platform id). */
|
|
487
|
+
platform: string;
|
|
488
|
+
/** Authored value path, such as `organization.socials.x`. */
|
|
489
|
+
sourcePath: string;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Format one Socials value through its platform record, deterministically and
|
|
493
|
+
* without network access. `owner` selects companyUrlPattern for organizations.
|
|
494
|
+
* URLs pass through; unknown platforms and unformattable values stay raw.
|
|
495
|
+
*/
|
|
496
|
+
declare function resolveSocialProfile(platform: string, value: string, records?: readonly SocialPlatformRecord[], owner?: 'organization' | 'speaker'): SocialProfile;
|
|
497
|
+
interface FurnitureImagePart extends FurniturePartBase {
|
|
498
|
+
type: 'image';
|
|
499
|
+
image: unknown;
|
|
500
|
+
}
|
|
501
|
+
type FurniturePart = FurnitureTextPart | FurnitureImagePart;
|
|
502
|
+
interface FurnitureLayout {
|
|
503
|
+
algorithm: 'furniture-flow-v2';
|
|
504
|
+
/** Includes explicitly empty definitions, which override inherited furniture. */
|
|
505
|
+
configured: boolean;
|
|
506
|
+
textMeasurement: 'estimated' | 'provided';
|
|
507
|
+
textOutlines: 'provided' | 'unavailable';
|
|
508
|
+
parts: FurniturePart[];
|
|
509
|
+
/** Outer occupied edges; composeSlide adds its normal content gap. */
|
|
510
|
+
headerBottom: number;
|
|
511
|
+
footerTop: number;
|
|
512
|
+
diagnostics: LayoutDiagnostic[];
|
|
513
|
+
overflow: boolean;
|
|
514
|
+
}
|
|
515
|
+
/** Resolve and measure repeated fields without mutating metadata or consulting a clock. */
|
|
516
|
+
declare function layoutFurniture(input: unknown, options?: ComposeSlideOptions): FurnitureLayout;
|
|
517
|
+
/** Deterministic estimate, not a font shaping engine. Preserves explicit line breaks. */
|
|
518
|
+
declare function measureText(text: string, fontSize: number): number;
|
|
519
|
+
declare function wrapText(text: string, width: number, fontSize: number, measure?: MeasureTextWidth): string[];
|
|
520
|
+
declare function fitText(text: string, box: LayoutBox, requestedSize?: number, minFontSize?: number, measure?: MeasureTextWidth): SourceTextFit;
|
|
521
|
+
interface QuoteContent {
|
|
522
|
+
text: string;
|
|
523
|
+
attribution?: string;
|
|
524
|
+
source?: string;
|
|
525
|
+
}
|
|
526
|
+
/** Source and displayed-text ranges are half-open UTF-16 offsets. Added punctuation has no source range. */
|
|
527
|
+
interface QuoteTextSource {
|
|
528
|
+
path: string;
|
|
529
|
+
start: number;
|
|
530
|
+
end: number;
|
|
531
|
+
outputStart: number;
|
|
532
|
+
outputEnd: number;
|
|
533
|
+
}
|
|
534
|
+
interface QuoteTextPart {
|
|
535
|
+
role: 'body' | 'footer';
|
|
536
|
+
path: string;
|
|
537
|
+
text: string;
|
|
538
|
+
sources: QuoteTextSource[];
|
|
539
|
+
/** Available space, before fitting. Invalid dimensions remain visible in failed results. */
|
|
540
|
+
box: LayoutBox;
|
|
541
|
+
requestedFontSize: number;
|
|
542
|
+
minFontSize: number;
|
|
543
|
+
requestedStyle: TextStyle;
|
|
544
|
+
style: TextStyle;
|
|
545
|
+
/** Absent when the available box is invalid; never fit against an invented one-pixel box. */
|
|
546
|
+
fit?: TextFit;
|
|
547
|
+
}
|
|
548
|
+
interface QuoteLayoutDiagnostic extends LayoutDiagnostic {
|
|
549
|
+
reason: 'invalid-part-box' | 'part-outside-cell' | 'text-fit' | 'part-overlap';
|
|
550
|
+
parts: QuoteTextPart['role'][];
|
|
551
|
+
}
|
|
552
|
+
interface QuoteLayout {
|
|
553
|
+
algorithm: 'quote-flow-v1';
|
|
554
|
+
textMeasurement: 'estimated' | 'provided';
|
|
555
|
+
parts: QuoteTextPart[];
|
|
556
|
+
diagnostics: QuoteLayoutDiagnostic[];
|
|
557
|
+
overflow: boolean;
|
|
558
|
+
}
|
|
559
|
+
interface QuoteLayoutOptions {
|
|
560
|
+
/** Canvas short edge divided by 720. Insets retain the current 18 reference-pixel contract. */
|
|
561
|
+
scale?: number;
|
|
562
|
+
fonts?: Partial<FontFamilies>;
|
|
563
|
+
/** Readability floor in reference pixels, before canvas scaling. */
|
|
564
|
+
minFontSize?: number;
|
|
565
|
+
overflow?: Composition['overflow'];
|
|
566
|
+
path?: string;
|
|
567
|
+
textMeasurement?: TextMeasurement;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Allocate and measure quote body/footer space for composition, rendering and export. Callers must
|
|
571
|
+
* check overflow before accepting the parts. Line boxes are not shaped glyph or native raster bounds.
|
|
572
|
+
*/
|
|
573
|
+
declare function layoutQuote(value: string | QuoteContent, box: LayoutBox, options?: QuoteLayoutOptions): QuoteLayout;
|
|
574
|
+
interface MetricContent {
|
|
575
|
+
value: string | number;
|
|
576
|
+
label?: string;
|
|
577
|
+
description?: string;
|
|
578
|
+
unit?: string;
|
|
579
|
+
delta?: string | number;
|
|
580
|
+
trend?: 'up' | 'down' | 'flat';
|
|
581
|
+
}
|
|
582
|
+
/** Ranges address String(sourceValue), not the numeric token spelling in serialized JSON. */
|
|
583
|
+
interface MetricTextSource {
|
|
584
|
+
path: string;
|
|
585
|
+
value: string | number;
|
|
586
|
+
start: number;
|
|
587
|
+
end: number;
|
|
588
|
+
}
|
|
589
|
+
interface MetricTextPart {
|
|
590
|
+
role: keyof MetricContent;
|
|
591
|
+
path: string;
|
|
592
|
+
text: string;
|
|
593
|
+
sources: MetricTextSource[];
|
|
594
|
+
/** Empty optional fields retain their source mapping but occupy no visible space. */
|
|
595
|
+
visible: boolean;
|
|
596
|
+
/** Accepted absolute origin/baseline for each fit.sourceLines entry, including blank lines. */
|
|
597
|
+
linePositions: {
|
|
598
|
+
x: number;
|
|
599
|
+
baseline: number;
|
|
600
|
+
}[];
|
|
601
|
+
box: LayoutBox;
|
|
602
|
+
requestedFontSize: number;
|
|
603
|
+
minFontSize: number;
|
|
604
|
+
requestedStyle: TextStyle;
|
|
605
|
+
style: TextStyle;
|
|
606
|
+
/** Source-preserving line/segment representation shared with code, with proportional fonts. */
|
|
607
|
+
fit?: CodeTextFit;
|
|
608
|
+
}
|
|
609
|
+
interface MetricLayoutDiagnostic extends LayoutDiagnostic {
|
|
610
|
+
reason: 'invalid-part-box' | 'part-outside-cell' | 'text-fit' | 'part-overlap';
|
|
611
|
+
parts: MetricTextPart['role'][];
|
|
612
|
+
}
|
|
613
|
+
interface MetricLayout {
|
|
614
|
+
algorithm: 'metric-flow-v1';
|
|
615
|
+
alignment: 'left' | 'center' | 'right';
|
|
616
|
+
textMeasurement: 'estimated' | 'provided';
|
|
617
|
+
arrangement: 'inline-unit' | 'stacked';
|
|
618
|
+
/** At most 48 arrangements; value fitting is bounded by 77 reference-size trials per arrangement. */
|
|
619
|
+
attempts: number;
|
|
620
|
+
parts: MetricTextPart[];
|
|
621
|
+
diagnostics: MetricLayoutDiagnostic[];
|
|
622
|
+
overflow: boolean;
|
|
623
|
+
}
|
|
624
|
+
interface MetricLayoutOptions extends QuoteLayoutOptions {
|
|
625
|
+
align?: 'left' | 'center' | 'right';
|
|
626
|
+
/** Unscaled clearance around available vector outlines; defaults to one reference pixel. */
|
|
627
|
+
textRasterPadding?: number;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Measure every metric field before accepting geometry. Short single-line values and units can
|
|
631
|
+
* share a baseline; longer values or units stack. No locale formatting, trend icons or rewritten
|
|
632
|
+
* source text are invented. Consumers must reuse these accepted parts and source ranges.
|
|
633
|
+
*/
|
|
634
|
+
declare function layoutMetric(value: string | number | MetricContent, box: LayoutBox, options?: MetricLayoutOptions): MetricLayout;
|
|
635
|
+
interface TimelineEvent {
|
|
636
|
+
when?: string;
|
|
637
|
+
what: string;
|
|
638
|
+
description?: string;
|
|
639
|
+
}
|
|
640
|
+
interface TimelineContent {
|
|
641
|
+
name?: string;
|
|
642
|
+
description?: string;
|
|
643
|
+
events: TimelineEvent[];
|
|
644
|
+
}
|
|
645
|
+
interface TimelineTextPart {
|
|
646
|
+
role: 'name' | 'description' | 'when' | 'what' | 'event-description';
|
|
647
|
+
eventIndex?: number;
|
|
648
|
+
path: string;
|
|
649
|
+
text: string;
|
|
650
|
+
sources: {
|
|
651
|
+
path: string;
|
|
652
|
+
start: number;
|
|
653
|
+
end: number;
|
|
654
|
+
}[];
|
|
655
|
+
box: LayoutBox;
|
|
656
|
+
alignment: 'left' | 'center';
|
|
657
|
+
requestedFontSize: number;
|
|
658
|
+
minFontSize: number;
|
|
659
|
+
requestedStyle: TextStyle;
|
|
660
|
+
style: TextStyle;
|
|
661
|
+
fit?: SourceTextFit;
|
|
662
|
+
}
|
|
663
|
+
interface TimelineLayoutDiagnostic extends LayoutDiagnostic {
|
|
664
|
+
reason: 'text-fit' | 'part-outside-cell' | 'event-space';
|
|
665
|
+
}
|
|
666
|
+
interface TimelineLayout {
|
|
667
|
+
algorithm: 'timeline-flow-v1';
|
|
668
|
+
arrangement: 'alternating' | 'vertical';
|
|
669
|
+
attempts: number;
|
|
670
|
+
textMeasurement: 'provided' | 'estimated';
|
|
671
|
+
textOutlines: 'provided' | 'unavailable';
|
|
672
|
+
parts: TimelineTextPart[];
|
|
673
|
+
markers: {
|
|
674
|
+
path: string;
|
|
675
|
+
eventIndex: number;
|
|
676
|
+
x: number;
|
|
677
|
+
y: number;
|
|
678
|
+
radius: number;
|
|
679
|
+
}[];
|
|
680
|
+
connector: {
|
|
681
|
+
x1: number;
|
|
682
|
+
y1: number;
|
|
683
|
+
x2: number;
|
|
684
|
+
y2: number;
|
|
685
|
+
};
|
|
686
|
+
diagnostics: TimelineLayoutDiagnostic[];
|
|
687
|
+
overflow: boolean;
|
|
688
|
+
}
|
|
689
|
+
interface TimelineLayoutOptions extends QuoteLayoutOptions {
|
|
690
|
+
textRasterPadding?: number;
|
|
691
|
+
}
|
|
692
|
+
/** Preserve event order and field boundaries while trying at most 50 readable arrangements. */
|
|
693
|
+
declare function layoutTimeline(value: readonly TimelineEvent[] | TimelineContent, box: LayoutBox, options?: TimelineLayoutOptions): TimelineLayout;
|
|
694
|
+
interface CodeContent {
|
|
695
|
+
source: string;
|
|
696
|
+
language?: string;
|
|
697
|
+
filename?: string;
|
|
698
|
+
}
|
|
699
|
+
interface TextLineSegment {
|
|
700
|
+
kind: 'text' | 'tab';
|
|
701
|
+
start: number;
|
|
702
|
+
end: number;
|
|
703
|
+
/** Measured position relative to this displayed line's origin, in reference pixels. */
|
|
704
|
+
x: number;
|
|
705
|
+
width: number;
|
|
706
|
+
}
|
|
707
|
+
/** Exact half-open UTF-16 offsets into the part text, including consumed hard line breaks. */
|
|
708
|
+
interface TextLineSource {
|
|
709
|
+
start: number;
|
|
710
|
+
end: number;
|
|
711
|
+
nextStart: number;
|
|
712
|
+
boundary: 'soft' | 'hard' | 'end';
|
|
713
|
+
width: number;
|
|
714
|
+
/** Explicit tab placement is required in SVG; CSS tab-size alone does not implement it. */
|
|
715
|
+
segments: TextLineSegment[];
|
|
716
|
+
}
|
|
717
|
+
interface SourceTextFit extends TextFit {
|
|
718
|
+
sourceLines: TextLineSource[];
|
|
719
|
+
/** Tabs advance to the next multiple of four measured spaces from each displayed line's origin. */
|
|
720
|
+
tabSize: 4;
|
|
721
|
+
tabWidth: number;
|
|
722
|
+
}
|
|
723
|
+
/** Compatibility names for the shared source-preserving line contract. */
|
|
724
|
+
type CodeLineSegment = TextLineSegment;
|
|
725
|
+
type CodeLineSource = TextLineSource;
|
|
726
|
+
interface CodeTextFit extends SourceTextFit {
|
|
727
|
+
}
|
|
728
|
+
interface CodeTextPart {
|
|
729
|
+
role: 'filename' | 'language' | 'body';
|
|
730
|
+
path: string;
|
|
731
|
+
/** Original text, without case conversion, whitespace normalization or discarded newlines. */
|
|
732
|
+
text: string;
|
|
733
|
+
sources: {
|
|
734
|
+
path: string;
|
|
735
|
+
start: number;
|
|
736
|
+
end: number;
|
|
737
|
+
}[];
|
|
738
|
+
generated: boolean;
|
|
739
|
+
box: LayoutBox;
|
|
740
|
+
requestedFontSize: number;
|
|
741
|
+
minFontSize: number;
|
|
742
|
+
requestedStyle: TextStyle;
|
|
743
|
+
style: TextStyle;
|
|
744
|
+
fit?: CodeTextFit;
|
|
745
|
+
}
|
|
746
|
+
interface CodeLayoutDiagnostic extends LayoutDiagnostic {
|
|
747
|
+
reason: 'invalid-part-box' | 'part-outside-cell' | 'text-fit' | 'part-overlap';
|
|
748
|
+
parts: CodeTextPart['role'][];
|
|
749
|
+
}
|
|
750
|
+
interface CodeLayout {
|
|
751
|
+
algorithm: 'code-flow-v1';
|
|
752
|
+
textMeasurement: 'estimated' | 'provided';
|
|
753
|
+
parts: CodeTextPart[];
|
|
754
|
+
diagnostics: CodeLayoutDiagnostic[];
|
|
755
|
+
overflow: boolean;
|
|
756
|
+
}
|
|
757
|
+
interface CodeLayoutOptions extends QuoteLayoutOptions {
|
|
758
|
+
}
|
|
759
|
+
/** Shared filename/language/body allocation. Consumers must reuse the accepted fits and styles. */
|
|
760
|
+
declare function layoutCode(value: string | CodeContent, box: LayoutBox, options?: CodeLayoutOptions): CodeLayout;
|
|
761
|
+
interface RichTextRun {
|
|
762
|
+
text: string;
|
|
763
|
+
bold?: boolean;
|
|
764
|
+
italic?: boolean;
|
|
765
|
+
underline?: boolean;
|
|
766
|
+
strikethrough?: boolean;
|
|
767
|
+
color?: string;
|
|
768
|
+
fontSize?: number;
|
|
769
|
+
fontFamily?: string;
|
|
770
|
+
link?: string;
|
|
771
|
+
superscript?: boolean;
|
|
772
|
+
subscript?: boolean;
|
|
773
|
+
}
|
|
774
|
+
interface RichTextFragment {
|
|
775
|
+
/** Tabs are source-preserving layout controls with a fixed advance, not glyph text. */
|
|
776
|
+
kind?: 'tab';
|
|
777
|
+
text: string;
|
|
778
|
+
runIndex: number;
|
|
779
|
+
start: number;
|
|
780
|
+
end: number;
|
|
781
|
+
x: number;
|
|
782
|
+
width: number;
|
|
783
|
+
fontSize: number;
|
|
784
|
+
baselineShift: number;
|
|
785
|
+
style: TextStyle;
|
|
786
|
+
run: RichTextRun;
|
|
787
|
+
}
|
|
788
|
+
interface RichTextLine {
|
|
789
|
+
fragments: RichTextFragment[];
|
|
790
|
+
width: number;
|
|
791
|
+
y: number;
|
|
792
|
+
baseline: number;
|
|
793
|
+
height: number;
|
|
794
|
+
}
|
|
795
|
+
interface RichTextFit extends TextFit {
|
|
796
|
+
richLines: RichTextLine[];
|
|
797
|
+
height: number;
|
|
798
|
+
}
|
|
799
|
+
interface RichTextOptions {
|
|
800
|
+
style: TextStyle;
|
|
801
|
+
textMeasurement?: TextMeasurement;
|
|
802
|
+
/** Use one measured line advance for every line, as native table cells do. */
|
|
803
|
+
uniformLineHeight?: boolean;
|
|
804
|
+
}
|
|
805
|
+
/** Fit mixed styles without flattening font metrics. Run fontSize is in points. */
|
|
806
|
+
declare function fitRichText(input: readonly (string | RichTextRun)[], box: LayoutBox, requestedSize?: number, minFontSize?: number, options?: RichTextOptions): RichTextFit;
|
|
807
|
+
type ListText = string | readonly (string | RichTextRun)[];
|
|
808
|
+
type ListValue = ListText | {
|
|
809
|
+
text: ListText;
|
|
810
|
+
description?: ListText;
|
|
811
|
+
level?: number;
|
|
812
|
+
};
|
|
813
|
+
interface ListEntryLayout {
|
|
814
|
+
index: number;
|
|
815
|
+
level: number;
|
|
816
|
+
textPath?: string;
|
|
817
|
+
descriptionPath?: string;
|
|
818
|
+
value: ListText;
|
|
819
|
+
descriptionValue?: ListText;
|
|
820
|
+
text: RichTextFit;
|
|
821
|
+
description?: RichTextFit;
|
|
822
|
+
textBox: LayoutBox;
|
|
823
|
+
descriptionBox?: LayoutBox;
|
|
824
|
+
marker: {
|
|
825
|
+
text: string;
|
|
826
|
+
x: number;
|
|
827
|
+
y: number;
|
|
828
|
+
fontSize: number;
|
|
829
|
+
style: TextStyle;
|
|
830
|
+
indent: number;
|
|
831
|
+
};
|
|
832
|
+
}
|
|
833
|
+
interface ListFit extends TextFit {
|
|
834
|
+
listEntries: ListEntryLayout[];
|
|
835
|
+
height: number;
|
|
836
|
+
}
|
|
837
|
+
/** Shared hanging indents, mixed-run fitting and description spacing for list payloads. */
|
|
838
|
+
declare function fitList(input: readonly ListValue[], box: LayoutBox, requestedSize?: number, minFontSize?: number, options?: RichTextOptions): ListFit;
|
|
839
|
+
interface TableLayoutOptions {
|
|
840
|
+
scale?: number;
|
|
841
|
+
minFontSize?: number;
|
|
842
|
+
fontFamily?: string;
|
|
843
|
+
textMeasurement?: TextMeasurement;
|
|
844
|
+
path?: string;
|
|
845
|
+
}
|
|
846
|
+
interface TableCellLayout {
|
|
847
|
+
value: unknown;
|
|
848
|
+
input: unknown;
|
|
849
|
+
sourcePath: string;
|
|
850
|
+
style: TableCellStyle;
|
|
851
|
+
row: number;
|
|
852
|
+
column: number;
|
|
853
|
+
rowSpan: number;
|
|
854
|
+
colSpan: number;
|
|
855
|
+
path: string;
|
|
856
|
+
header: boolean;
|
|
857
|
+
rich: boolean;
|
|
858
|
+
box: LayoutBox;
|
|
859
|
+
textBox: LayoutBox;
|
|
860
|
+
textStyle: TextStyle;
|
|
861
|
+
fit: TextFit | RichTextFit;
|
|
862
|
+
}
|
|
863
|
+
interface TableRowLayout {
|
|
864
|
+
box: LayoutBox;
|
|
865
|
+
cells: TableCellLayout[];
|
|
866
|
+
}
|
|
867
|
+
interface TableLayout {
|
|
868
|
+
rows: TableRowLayout[];
|
|
869
|
+
columnCount: number;
|
|
870
|
+
height: number;
|
|
871
|
+
overflow: boolean;
|
|
872
|
+
}
|
|
873
|
+
/** Shared cell geometry and font fitting for SVG, native PPTX and pagination.
|
|
874
|
+
* Short rows retain their 54px preferred height. Multiline rows use the space
|
|
875
|
+
* their text needs; constrained tables consume row padding before readable text.
|
|
876
|
+
* All dimensions are canvas pixels; minFontSize is an unscaled canvas size.
|
|
877
|
+
*/
|
|
878
|
+
declare function layoutTable(value: unknown, box: LayoutBox, options?: TableLayoutOptions): TableLayout;
|
|
879
|
+
/** Compose a validated Slide. Layout resolution remains the caller's responsibility. */
|
|
880
|
+
declare function composeSlide(input: unknown, options?: ComposeSlideOptions): SlideComposition;
|
|
881
|
+
/** Canonical physical slide size, converted to reference pixels at 96 pixels/inch. */
|
|
882
|
+
declare function resolveCanvasDimensions(input: unknown): {
|
|
883
|
+
width: number;
|
|
884
|
+
height: number;
|
|
885
|
+
};
|
|
886
|
+
|
|
887
|
+
export { type QuoteTextSource as $, type FurnitureSocialLink as A, type FurnitureTextExtras as B, type ComposeSlideOptions as C, DEFAULT_FONT_SCHEME as D, type FurnitureTextPart as E, type FontSchemeDiagnostic as F, type LayoutBox as G, type ListEntryLayout as H, type ListFit as I, type ListText as J, type ListValue as K, type LayoutDiagnostic as L, MAX_COMPOSITION_DEPTH as M, type MeasureTextWidth as N, type MetricContent as O, type MetricLayout as P, type MetricLayoutDiagnostic as Q, type MetricLayoutOptions as R, type MetricTextPart as S, type TextMeasurement as T, type MetricTextSource as U, OPFCompositionError as V, type QuoteContent as W, type QuoteLayout as X, type QuoteLayoutDiagnostic as Y, type QuoteLayoutOptions as Z, type QuoteTextPart as _, type CodeContent as a, slideImageShape as a$, type ResolveColorRefOptions as a0, type ResolveColorRefRoles as a1, type ResolvedFontScheme as a2, type RichTextFit as a3, type RichTextFragment as a4, type RichTextLine as a5, type RichTextOptions as a6, type RichTextRun as a7, type SlideComposition as a8, type SlideImageShape as a9, measureText as aA, measureTextOutline as aB, normalizeHexColor as aC, placeTextLines as aD, resolveCanvasDimensions as aE, resolveColorRef as aF, resolveFontFamilies as aG, resolveFontSchemeReference as aH, resolveSocialProfile as aI, resolveTextStyle as aJ, textColorForFill as aK, textWidthMeasurer as aL, wrapText as aM, type FontFaceSelection as aN, type SourceTextFit as aO, type TableBorder as aP, type TableCellLayout as aQ, type TableCellStyle as aR, type TableGrid as aS, type TableGridCell as aT, type TableGridIssue as aU, type TableLayout as aV, type TableLayoutOptions as aW, type TableRowLayout as aX, type TextLineSegment as aY, type TextLineSource as aZ, layoutTable as a_, type SocialPlatformRecord as aa, type SocialProfile as ab, type TextFit as ac, type TextLineInk as ad, type TextPlacement as ae, type TextPlacementLine as af, type TextStyle as ag, type TimelineContent as ah, type TimelineEvent as ai, type TimelineLayout as aj, type TimelineLayoutDiagnostic as ak, type TimelineLayoutOptions as al, type TimelineTextPart as am, chartColorForFill as an, colorContrast as ao, composeSlide as ap, fitList as aq, fitRichText as ar, fitText as as, formatFurnitureDate as at, formatSlideNumber as au, layoutCode as av, layoutFurniture as aw, layoutMetric as ax, layoutQuote as ay, layoutTimeline as az, type CodeLayout as b, tableGrid as b0, tableRowBoundaries as b1, type CodeLayoutDiagnostic as c, type CodeLayoutOptions as d, type CodeLineSegment as e, type CodeLineSource as f, type CodeTextFit as g, type CodeTextPart as h, type ComposedFlow as i, type ComposedGroup as j, type ComposedItem as k, type ComposedSlideImage as l, type Composition as m, type CompositionCandidate as n, type CompositionDecision as o, type CompositionExplanation as p, type CompositionPenalties as q, type CompositionTrack as r, DEFAULT_FURNITURE_DATE_FORMAT as s, DEFAULT_SLIDE_NUMBER_FORMAT as t, type FontFamilies as u, type FurnitureField as v, type FurnitureImagePart as w, type FurnitureLayout as x, type FurniturePart as y, type FurniturePartBase as z };
|