@broadpaper/core 0.2.0 → 0.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.
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @broadpaper/core
2
+
3
+ [![npm](https://img.shields.io/npm/v/@broadpaper/core?color=171511&label=npm)](https://www.npmjs.com/package/@broadpaper/core)
4
+ [![Licence: commercial](https://img.shields.io/badge/licence-commercial-171511)](https://www.broadpaper.com/legal/terms/)
5
+ [![Free to evaluate](https://img.shields.io/badge/evaluate-free%2C%20no%20trial%20clock-4a453c)](https://www.broadpaper.com/docs/guide/licensing/)
6
+
7
+ The document model, expression language, theme resolution and paginator behind BroadPaper. Framework-free.
8
+
9
+ Part of [**BroadPaper**](https://www.broadpaper.com/developers/) — an embeddable visual report designer and PDF renderer.
10
+ Your users design the report in your application; BroadPaper owns the layout, the branding,
11
+ the pagination and the output.
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ npm install @broadpaper/core
17
+ ```
18
+
19
+ Everything the designer and both PDF backends are built on, with no dependency on React,
20
+ Angular or a DOM. A report is a plain JSON document; this package is what gives it meaning —
21
+ resolving bindings against your data, evaluating conditions, resolving a theme into concrete
22
+ values, and deciding where the pages break.
23
+
24
+ You rarely install this on its own. It arrives with whichever package you did install, and it
25
+ is here because the types are useful: a template is your data, and you may well want to read
26
+ or generate one without rendering anything.
27
+
28
+ **There is no `eval` anywhere in it.** The expression language is a hand-written tokeniser,
29
+ Pratt parser and tree-walking interpreter, statically checkable against your own schemas
30
+ before a single row of data exists.
31
+
32
+ ## Licensing
33
+
34
+ BroadPaper is **free to evaluate, with no trial clock and nothing behind a feature gate**.
35
+ Install it, use every feature and evaluate it against your real data for as long as you like.
36
+ Production use needs a licence.
37
+
38
+ In the software, the only difference without a licence is that generated PDFs carry an
39
+ evaluation mark, and a licence removes it. Contractually, the licence is also what permits
40
+ production use. No seats, no activation, no machine binding, no telemetry, and no call home at
41
+ any point.
42
+
43
+ - [How licensing works](https://www.broadpaper.com/docs/guide/licensing/)
44
+ - [Pricing](https://www.broadpaper.com/developers/pricing/)
45
+ - [Licence agreement](https://www.broadpaper.com/legal/terms/)
46
+
47
+ ## Documentation
48
+
49
+ - [Concepts](https://www.broadpaper.com/docs/guide/concepts)
50
+ - [Declaring your schemas](https://www.broadpaper.com/docs/guide/schema)
51
+ - [Data bindings](https://www.broadpaper.com/docs/guide/bindings)
52
+ - [Conditional content](https://www.broadpaper.com/docs/guide/conditions)
53
+ - [Full documentation](https://www.broadpaper.com/docs/)
54
+
55
+ ## Support
56
+
57
+ Paid licences include email support at [support@broadpaper.com](mailto:support@broadpaper.com).
58
+
59
+ ---
60
+
61
+ Copyright © 2026 Codingbadger Creative Limited. See [LICENSE](./LICENSE) in this package, and
62
+ [THIRD-PARTY-NOTICES.md](./THIRD-PARTY-NOTICES.md) for the components it ships with.
package/dist/index.d.ts CHANGED
@@ -1165,6 +1165,26 @@ interface BlockDefinition<P extends Record<string, unknown> = Record<string, unk
1165
1165
  * Derived from `split` when omitted.
1166
1166
  */
1167
1167
  measure?: "text" | "table" | "none";
1168
+ /**
1169
+ * Props for a block created by dropping a data field onto the page.
1170
+ *
1171
+ * The designer lets a user drag a field out of the data panel, and what should
1172
+ * appear is not the same thing for every block: a list wants a table with a
1173
+ * column per item field, each already formatted the way the schema says; a
1174
+ * scalar wants a labelled value. Only the block knows what its own props mean,
1175
+ * so the block decides — including a custom block, which is the reason this is
1176
+ * a hook rather than a rule in the editor.
1177
+ *
1178
+ * `expr` is the bare path; `formatted` is the same path with the field's own
1179
+ * formatter appended, which is what a prop rendering the value as text should
1180
+ * use. Return undefined to take the designer's default.
1181
+ */
1182
+ fromField?(field: {
1183
+ expr: string;
1184
+ formatted: string;
1185
+ schema: FieldSchema;
1186
+ label: string;
1187
+ }): Partial<P> | undefined;
1168
1188
  /** Adjust resolved props after binding resolution (compute derived data, sort, etc.). */
1169
1189
  resolve?(ctx: ResolveHookContext<P>): P | void;
1170
1190
  render(ctx: RenderContext<P>): VNode | null;
@@ -2347,6 +2367,244 @@ declare function synthesizeValue(schema: FieldSchema, opts?: {
2347
2367
  declare function labelForPath(segments: PathSegment[], scope: SchemaScope): string;
2348
2368
  declare function humanizeKey(key: string): string;
2349
2369
 
2370
+ /**
2371
+ * The formatter a field wants, when nobody has said otherwise.
2372
+ *
2373
+ * A schema already knows that a field is money in sterling, or a date the host
2374
+ * writes as `d MMMM yyyy`, or a fraction meant to be read as a percentage.
2375
+ * Nothing was doing anything with that: a binding inserted from the data panel
2376
+ * was the bare path, so a currency field rendered as `482310.4` and a date as
2377
+ * `2026-08-31T00:00:00.000Z` until somebody typed a pipe after it.
2378
+ *
2379
+ * That is a fine default for a developer who knows the expression language and
2380
+ * a poor one for anybody else, so the pipe is written into the expression at the
2381
+ * moment the binding is created. Written in, and not applied invisibly at render
2382
+ * time, for two reasons worth stating:
2383
+ *
2384
+ * - it stays visible and editable. The template says `| currency:'USD'`, so
2385
+ * somebody reading it can see why the document shows dollars, and somebody who
2386
+ * wants three decimal places can change it;
2387
+ * - it cannot change what an existing template does. Formatting bound values at
2388
+ * render time would alter the output of every document already saved against a
2389
+ * typed schema, which is not a change a published SDK gets to make quietly.
2390
+ *
2391
+ * Blocks that evaluate their own expressions — a table's columns, a chart's
2392
+ * series — get the same treatment from the same function, which is what keeps a
2393
+ * total in a table footer formatted like the column above it.
2394
+ */
2395
+
2396
+ /**
2397
+ * The pipe expression for a field, or null when the value should be shown as it
2398
+ * is.
2399
+ *
2400
+ * Text, booleans, URLs and rich text are already what they should look like.
2401
+ * Everything numeric or temporal is not.
2402
+ */
2403
+ declare function defaultPipeFor(schema: FieldSchema | undefined): string | null;
2404
+ /**
2405
+ * Adds the field's default formatter to a path expression.
2406
+ *
2407
+ * Leaves anything that already has a pipe alone — the author said what they
2408
+ * wanted — and leaves anything that is not a plain path alone too, because a
2409
+ * computed expression's type is its own business and appending to it could
2410
+ * change what it means.
2411
+ */
2412
+ declare function withDefaultPipe(expr: string, schema: FieldSchema | undefined): string;
2413
+ /** Whether an expression already ends in a formatter, ignoring `||`. */
2414
+ declare function hasPipe(expr: string): boolean;
2415
+ /**
2416
+ * A dotted path and nothing else: `client.name`, `row.amount`, `holdings[0].value`.
2417
+ *
2418
+ * Anything with an operator, a call or a literal in it is left alone. `a + b`
2419
+ * with a currency pipe bolted on would format the sum, which may be what the
2420
+ * author wanted or may not, and guessing is worse than doing nothing.
2421
+ */
2422
+ declare function isPlainPath(expr: string): boolean;
2423
+
2424
+ /**
2425
+ * A calculation, as a person would describe it rather than as the expression
2426
+ * language would.
2427
+ *
2428
+ * The designer has always been able to *bind* a value — point a property at a
2429
+ * field — and never to work one out. Arithmetic arrived only inside a template
2430
+ * somebody wrote by hand, so a host with the expression editor switched off had a
2431
+ * document whose totals it could read and not change, and a host with it on asked
2432
+ * a business user to write `sum(invoice.lineItems.amount) * (1 + taxRate)`. Both
2433
+ * are the same missing feature.
2434
+ *
2435
+ * So: a small closed model of the arithmetic documents actually contain, and a
2436
+ * codec between it and the expression language. The builder in the editor edits
2437
+ * this; the template still holds an ordinary expression, so nothing downstream —
2438
+ * the interpreter, the validator, the renderer, the PDF backends — learns anything
2439
+ * new. A calculation is a *view* of an expression, never a second way to store one.
2440
+ *
2441
+ * ## Left to right, and no brackets
2442
+ *
2443
+ * `start` and then a list of `steps`, each applied to the running total. That is
2444
+ * the one decision here worth defending, because a tree would be more general and
2445
+ * much worse: an interface with brackets in it is a formula editor, and a business
2446
+ * user with a formula editor is a business user writing formulas. Left-to-right
2447
+ * covers what invoices and reports do — a subtotal, VAT on it, a discount off it,
2448
+ * a division for an average — and reads as a sentence:
2449
+ *
2450
+ * Total of Lines › Amount, add VAT rate as a percentage
2451
+ *
2452
+ * Precedence never arises, because there is none to get wrong: every step applies
2453
+ * to everything before it, and `toExpression` brackets accordingly.
2454
+ *
2455
+ * ## Percentages are an operator, not multiplication
2456
+ *
2457
+ * "Add VAT rate as a percentage" rather than "multiply by (1 + VAT rate)". It is
2458
+ * the same arithmetic and it is the difference between a step somebody can choose
2459
+ * and one they have to derive. It is also emitted null-safe — `coalesce(rate, 0)`
2460
+ * — because a business that has not set a VAT rate wants an invoice without VAT,
2461
+ * not one with a hole where the total was.
2462
+ *
2463
+ * ## The contract that makes this safe
2464
+ *
2465
+ * {@link fromExpression} returns `null` for anything it cannot rebuild **byte for
2466
+ * byte**. An interface that offered to edit an expression it would then rewrite
2467
+ * differently is an interface that silently changes documents on being looked at;
2468
+ * refusing is the honest answer, and the caller shows the value as read-only
2469
+ * instead. `calculation.test.ts` asserts the round trip on every expression the
2470
+ * starter templates ship.
2471
+ */
2472
+
2473
+ /** The five aggregates a document asks for. Deliberately not every function. */
2474
+ type CalcAggregate = "sum" | "avg" | "count" | "min" | "max";
2475
+ /** One thing a calculation reads or holds. Flat: a term is never itself a calculation. */
2476
+ type CalcTerm =
2477
+ /** A field, by its dotted path. `invoice.taxRate`, `row.amount`. */
2478
+ {
2479
+ kind: "field";
2480
+ path: string;
2481
+ }
2482
+ /** A column of a list, across every row of it. `sum(invoice.lineItems.amount)`. */
2483
+ | {
2484
+ kind: "aggregate";
2485
+ fn: CalcAggregate;
2486
+ path: string;
2487
+ }
2488
+ /** A number somebody typed. */
2489
+ | {
2490
+ kind: "number";
2491
+ value: number;
2492
+ };
2493
+ /**
2494
+ * What to do with a term, given everything so far.
2495
+ *
2496
+ * `addPercent` and `subtractPercent` treat the term as a rate: 0.2 is a fifth.
2497
+ * That matches `percent`-typed fields and the mapping package's own reading of a
2498
+ * typed rate, so a VAT rate is the same number everywhere in the product.
2499
+ */
2500
+ type CalcOp = "add" | "subtract" | "multiply" | "divide" | "addPercent" | "subtractPercent";
2501
+ interface CalcStep {
2502
+ op: CalcOp;
2503
+ term: CalcTerm;
2504
+ }
2505
+ interface Calculation {
2506
+ start: CalcTerm;
2507
+ steps: CalcStep[];
2508
+ /**
2509
+ * How the result is shown: a pipe chain, exactly as it appears after `|` in the
2510
+ * expression. `currency:"GBP"`, `number:0`, `percent:1`. Presentation only, and
2511
+ * applied once at the end — a format in the middle of arithmetic would turn a
2512
+ * number into a string and the next step into a concatenation.
2513
+ */
2514
+ format?: string;
2515
+ }
2516
+ /** Everything a calculation reads, for validation and for naming it. */
2517
+ declare function calcPaths(calc: Calculation): string[];
2518
+ /** The AST, for a caller that wants to type-check a calculation before storing it. */
2519
+ declare function calcToAst(calc: Calculation): Expr;
2520
+ declare function toExpression(calc: Calculation): string;
2521
+ /**
2522
+ * Reads an expression back as a calculation, or refuses.
2523
+ *
2524
+ * `null` means "this is not something the builder can represent", and the caller's
2525
+ * job is then to show the value rather than offer to edit it. Everything this
2526
+ * accepts, {@link toExpression} reproduces character for character — which is
2527
+ * asserted, because the failure otherwise is a template quietly rewritten by
2528
+ * somebody opening a panel.
2529
+ */
2530
+ declare function fromExpression(expr: string): Calculation | null;
2531
+ /** Whether an expression is arithmetic rather than a plain field or a formatted one. */
2532
+ declare function isCalculation(calc: Calculation): boolean;
2533
+
2534
+ /**
2535
+ * What changed between two saved templates, said in words.
2536
+ *
2537
+ * A revision history is only useful if it can answer "what is different about
2538
+ * this one" without asking anybody to read a template. A structural diff of the
2539
+ * JSON answers a different question — which keys moved — and it answers it in
2540
+ * the vocabulary of the format: `body[2].children[0].props.columns`. This speaks
2541
+ * the vocabulary of the designer instead: the table in “Summary”, the page
2542
+ * margins, the Heading 1 style.
2543
+ *
2544
+ * Three decisions shape everything below.
2545
+ *
2546
+ * **Nodes are matched by id, never by position.** Every node already carries a
2547
+ * stable id, and matching by position is how inserting one section at the top
2548
+ * becomes "changed every section in the document". A subtree added or removed
2549
+ * is one change, not one per descendant — a person who deleted a section
2550
+ * deleted a section.
2551
+ *
2552
+ * **Expression syntax never reaches the words.** A host may hide expressions
2553
+ * entirely (`expressions: false`), and a revision list that printed
2554
+ * `sum(invoice.lineItems.amount) | currency` would put back exactly what that
2555
+ * flag took away. Bindings are named with `describeExpression`, the same
2556
+ * function the canvas chips use, and anything that still would not read as
2557
+ * words is called "a calculated value".
2558
+ *
2559
+ * **It is pure.** No DOM, no registry required, deterministic output — the same
2560
+ * two templates always produce the same list in the same order, so a host can
2561
+ * store the summary beside a revision and trust it later.
2562
+ */
2563
+
2564
+ type ChangeKind = "added" | "removed" | "changed" | "moved";
2565
+ type ChangeArea = "document" | "page" | "styles" | "header" | "footer" | "body";
2566
+ interface TemplateChange {
2567
+ kind: ChangeKind;
2568
+ area: ChangeArea;
2569
+ /** The node's id, when the change is to a node. */
2570
+ nodeId?: string;
2571
+ /** What changed, named for a person: "Table", "Top margin", "Heading 1 style". */
2572
+ subject: string;
2573
+ /** One sentence: `Added a table to “Summary”`, `Changed the page margins`. */
2574
+ summary: string;
2575
+ /** Display strings, only when a single simple value changed. ≤ 80 chars each, truncated with "…". */
2576
+ before?: string;
2577
+ after?: string;
2578
+ }
2579
+ interface TemplateDiff {
2580
+ changes: TemplateChange[];
2581
+ counts: Record<ChangeKind, number>;
2582
+ /** Changes beyond `maxChanges` that were counted but not listed. */
2583
+ truncated: number;
2584
+ identical: boolean;
2585
+ }
2586
+ interface DiffOptions {
2587
+ /** Block definitions, for naming block types and their properties. */
2588
+ registry?: BlockRegistry;
2589
+ /** Default 200. */
2590
+ maxChanges?: number;
2591
+ /**
2592
+ * The data sources the template binds to, so a binding is named by its field's
2593
+ * own label ("Invoice number") rather than a humanised key ("Number").
2594
+ * Optional: without them the names are still words, just plainer ones.
2595
+ */
2596
+ dataSources?: DataSource[];
2597
+ }
2598
+ declare function diffTemplates(before: ReportTemplate, after: ReportTemplate, options?: DiffOptions): TemplateDiff;
2599
+ /**
2600
+ * One line for a list of revisions.
2601
+ *
2602
+ * A single change is worth naming outright; several are counted, because a list
2603
+ * row that tried to name seven changes would be truncated into saying none of
2604
+ * them properly.
2605
+ */
2606
+ declare function summariseDiff(diff: TemplateDiff): string;
2607
+
2350
2608
  interface ResolveOptions {
2351
2609
  template: ReportTemplate;
2352
2610
  registry: BlockRegistry;
@@ -2875,4 +3133,4 @@ declare function renderNode(node: ResolvedNode, opts: RenderTreeOptions, width?:
2875
3133
  /** Renders a list of resolved sections into a fragment-less flat list. */
2876
3134
  declare function renderSections(sections: ResolvedNode[], opts: RenderTreeOptions): VNode[];
2877
3135
 
2878
- export { type AnyVersionTemplate, type BinaryOp, type BindingInfo, type BindingKind, type BindingSpec, type BlockCategory, type BlockDefinition, type BlockNode, BlockRegistry, type BlockRegistryLike, type BlockStyle, type BorderSpec, type BorderStyle, type BreakMode, type BreakRun, CONDITION_OPERATORS, CURRENT_SCHEMA_VERSION, type CardStyle, type ColorValue, type Command, CommandError, type Condition, type ConditionGroup, type ConditionRule, type ContainerSpec, type CreateNodeOptions, type CreateTemplateOptions, type CustomPageSize, DEFAULT_PAGE_CONTEXT, DEFAULT_THEME, type DataSource, type DispatchOptions, type DocumentStyles, type EditorState, EditorStore, type EditorStoreOptions, type EvalContext, type Expr, ExpressionError, FUNCTION_NAMES, type FieldSchema, type FieldType, type FlowOptions, type FontValue, type FormatContext, GLOBAL_SCHEMAS, type GeometryMap, type HistoryEntry, type InlineNode, type InspectorApi, type InspectorComponent, type InspectorField, type InspectorFieldBase, type InspectorSection, type Issue, type IssueCode, type IssueSeverity, type IssueSource, type LayoutWarning, type LibraryItem, type LicenseTier, type List, type ListItem, MIGRATIONS, type Measurer, type Migration, MigrationError, type MigrationResult, type Node, type NodeEntry, type NodeGeometry, type NodeIndex, type NodeLocation, type OutputCheckOptions, PAGE_SIZES_MM, PIPES, PX_PER_MM, type Page, type PageContext, type PageFragment, type PageGeometry, type PageMargins, type PageOrientation, type PageRegionSettings, type PageSettings, type PageSize, type PageSizeName, type PagedDocument, type PaginateOptions, type Paragraph, type ParseResult, type PathSegment, type PipeDefinition, type PipeFn, REGION_IDS, ROW_LAYOUTS, type RegionContent, type RegionId, type RegistryOptions, type RenderContext, type RenderMode, type RenderTreeOptions, type RepeatedHeader, type ReportData, type ReportTemplate, type ResolveHookContext, type ResolveOptions, type ResolvedDocument, type ResolvedFlow, type ResolvedNode, type ResolvedRegion, type ResolvedRole, type ResolvedSegment, type ResolvedStyle, type RichTextDoc, SchemaScope, type SchemaVersion, Scope, type SectionGeometry, type SelectOption, type Spacing, type SplitMode, type StyleCascadeInput, type StyleGroup, type TableRowGeometry, type TableStyle, type TemplateMeta, type TemplateSegment, type TemplateSettings, type TextAlign, type TextMarks, type TextRun, type TextStyle, type TextStyleId, type Theme, type ThemeColors, type ThemeFontFace, type ThemeTableDefaults, type ThemeTokenInfo, type ThemeTypography, type TokenRef, type TokenRun, type TypeIssue, type TypeResult, type VChild, type VNode, type VProps, type ValidateContext, type ValidateOptions, type ValidationResult, type ValueType, type VerticalAlign, ancestors, applyCommand, bestBreak, bindingSpecsFor, blockStyleSchema, checkExpressionSyntax, checkOutput, classNames, cloneWithNewIds, collectPaths, columnWidth, compareValues, compileCondition, computePageGeometry, countNodes, createColumn, createId, createNode, createParagraph, createRichText, createRow, createSchemaScope, createSection, createTemplate, cssText, dataSourceSchemas, defaultDocumentStyles, defaultPageSettings, defineBlock, describeExpression, documentStylesSchema, escapeHtml, evaluate, evaluateAst, evaluateCondition, evaluateText, evaluateToText, exprToString, extractTemplateTokens, findNode, formatCurrency, formatDate, formatDatePattern, formatNumber, formatPercent, getField, getRegion, h, humaniseLabel, humanize, humanizeKey, indexTemplate, inlineFromTemplate, inlineToPlain, interpolate, isDarkColor, isDescendant, isEmptyValue, isRichTextDoc, isSafeUrl, isTokenRef, isVNode, issue, itemSchemaOf, labelForPath, listAt, listThemeTokens, looseEquals, mergeTheme, migrateTemplate, missingThemeValues, mmToPx, needsMigration, nodeAt, nodeAttrs, nodeSchema, pageSettingsSchema, pageSizeMm, paginate, parseExpression, parseTemplate, pathToString, pxToMm, readProperty, readRegion, renderInline, renderNode, renderRichText, renderSections, renderSegments, resolveDefaultProps, resolvePath, resolvePathSchema, resolveStyle, resolveTemplate, resolveToken, resolveValue, richTextFromTemplate, richTextToPlain, richTextTokens, setDeterministicIds, splitTemplate, styleString, styleToCss, synthesizeSampleData, synthesizeValue, templateSchema, textStyleLabel, toDate, toDisplayString, toHtml, toNumber, tokenChip, tokenize, truthy, typeCheck, typeCheckAst, usedBlockTypes, validateTemplate, walkTemplate, walkVNodes };
3136
+ export { type AnyVersionTemplate, type BinaryOp, type BindingInfo, type BindingKind, type BindingSpec, type BlockCategory, type BlockDefinition, type BlockNode, BlockRegistry, type BlockRegistryLike, type BlockStyle, type BorderSpec, type BorderStyle, type BreakMode, type BreakRun, CONDITION_OPERATORS, CURRENT_SCHEMA_VERSION, type CalcAggregate, type CalcOp, type CalcStep, type CalcTerm, type Calculation, type CardStyle, type ChangeArea, type ChangeKind, type ColorValue, type Command, CommandError, type Condition, type ConditionGroup, type ConditionRule, type ContainerSpec, type CreateNodeOptions, type CreateTemplateOptions, type CustomPageSize, DEFAULT_PAGE_CONTEXT, DEFAULT_THEME, type DataSource, type DiffOptions, type DispatchOptions, type DocumentStyles, type EditorState, EditorStore, type EditorStoreOptions, type EvalContext, type Expr, ExpressionError, FUNCTION_NAMES, type FieldSchema, type FieldType, type FlowOptions, type FontValue, type FormatContext, GLOBAL_SCHEMAS, type GeometryMap, type HistoryEntry, type InlineNode, type InspectorApi, type InspectorComponent, type InspectorField, type InspectorFieldBase, type InspectorSection, type Issue, type IssueCode, type IssueSeverity, type IssueSource, type LayoutWarning, type LibraryItem, type LicenseTier, type List, type ListItem, MIGRATIONS, type Measurer, type Migration, MigrationError, type MigrationResult, type Node, type NodeEntry, type NodeGeometry, type NodeIndex, type NodeLocation, type OutputCheckOptions, PAGE_SIZES_MM, PIPES, PX_PER_MM, type Page, type PageContext, type PageFragment, type PageGeometry, type PageMargins, type PageOrientation, type PageRegionSettings, type PageSettings, type PageSize, type PageSizeName, type PagedDocument, type PaginateOptions, type Paragraph, type ParseResult, type PathSegment, type PipeDefinition, type PipeFn, REGION_IDS, ROW_LAYOUTS, type RegionContent, type RegionId, type RegistryOptions, type RenderContext, type RenderMode, type RenderTreeOptions, type RepeatedHeader, type ReportData, type ReportTemplate, type ResolveHookContext, type ResolveOptions, type ResolvedDocument, type ResolvedFlow, type ResolvedNode, type ResolvedRegion, type ResolvedRole, type ResolvedSegment, type ResolvedStyle, type RichTextDoc, SchemaScope, type SchemaVersion, Scope, type SectionGeometry, type SelectOption, type Spacing, type SplitMode, type StyleCascadeInput, type StyleGroup, type TableRowGeometry, type TableStyle, type TemplateChange, type TemplateDiff, type TemplateMeta, type TemplateSegment, type TemplateSettings, type TextAlign, type TextMarks, type TextRun, type TextStyle, type TextStyleId, type Theme, type ThemeColors, type ThemeFontFace, type ThemeTableDefaults, type ThemeTokenInfo, type ThemeTypography, type TokenRef, type TokenRun, type TypeIssue, type TypeResult, type VChild, type VNode, type VProps, type ValidateContext, type ValidateOptions, type ValidationResult, type ValueType, type VerticalAlign, ancestors, applyCommand, bestBreak, bindingSpecsFor, blockStyleSchema, calcPaths, calcToAst, checkExpressionSyntax, checkOutput, classNames, cloneWithNewIds, collectPaths, columnWidth, compareValues, compileCondition, computePageGeometry, countNodes, createColumn, createId, createNode, createParagraph, createRichText, createRow, createSchemaScope, createSection, createTemplate, cssText, dataSourceSchemas, defaultDocumentStyles, defaultPageSettings, defaultPipeFor, defineBlock, describeExpression, diffTemplates, documentStylesSchema, escapeHtml, evaluate, evaluateAst, evaluateCondition, evaluateText, evaluateToText, exprToString, extractTemplateTokens, findNode, formatCurrency, formatDate, formatDatePattern, formatNumber, formatPercent, fromExpression, getField, getRegion, h, hasPipe, humaniseLabel, humanize, humanizeKey, indexTemplate, inlineFromTemplate, inlineToPlain, interpolate, isCalculation, isDarkColor, isDescendant, isEmptyValue, isPlainPath, isRichTextDoc, isSafeUrl, isTokenRef, isVNode, issue, itemSchemaOf, labelForPath, listAt, listThemeTokens, looseEquals, mergeTheme, migrateTemplate, missingThemeValues, mmToPx, needsMigration, nodeAt, nodeAttrs, nodeSchema, pageSettingsSchema, pageSizeMm, paginate, parseExpression, parseTemplate, pathToString, pxToMm, readProperty, readRegion, renderInline, renderNode, renderRichText, renderSections, renderSegments, resolveDefaultProps, resolvePath, resolvePathSchema, resolveStyle, resolveTemplate, resolveToken, resolveValue, richTextFromTemplate, richTextToPlain, richTextTokens, setDeterministicIds, splitTemplate, styleString, styleToCss, summariseDiff, synthesizeSampleData, synthesizeValue, templateSchema, textStyleLabel, toDate, toDisplayString, toExpression, toHtml, toNumber, tokenChip, tokenize, truthy, typeCheck, typeCheckAst, usedBlockTypes, validateTemplate, walkTemplate, walkVNodes, withDefaultPipe };